24268 lines
758 KiB
Plaintext
24268 lines
758 KiB
Plaintext
Index: libffi/ChangeLog.libffi
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/ChangeLog.libffi
|
|
@@ -0,0 +1,580 @@
|
|
+2009-12-25 Samuli Suominen <ssuominen@gentoo.org>
|
|
+
|
|
+ * configure.ac: Undefine _AC_ARG_VAR_PRECIOUS for autoconf 2.64.
|
|
+ * configure: Rebuilt.
|
|
+ * fficonfig.h.in: Rebuilt.
|
|
+
|
|
+2009-06-16 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * testsuite/libffi.call/cls_align_sint64.c,
|
|
+ testsuite/libffi.call/cls_align_uint64.c,
|
|
+ testsuite/libffi.call/cls_longdouble_va.c,
|
|
+ testsuite/libffi.call/cls_ulonglong.c,
|
|
+ testsuite/libffi.call/return_ll1.c,
|
|
+ testsuite/libffi.call/stret_medium2.c: Fix printf format
|
|
+ specifiers.
|
|
+ * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs.
|
|
+ * testsuite/libffi.call/float2.c: Fix dg-excess-errors.
|
|
+ * testsuite/libffi.call/ffitest.h,
|
|
+ testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define.
|
|
+
|
|
+2009-06-12 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * testsuite/libffi.call/cls_align_sint64.c,
|
|
+ testsuite/libffi.call/cls_align_uint64.c,
|
|
+ testsuite/libffi.call/cls_ulonglong.c,
|
|
+ testsuite/libffi.call/return_ll1.c,
|
|
+ testsuite/libffi.call/stret_medium2.c: Fix printf format
|
|
+ specifiers.
|
|
+ testsuite/libffi.special/unwindtest.cc: include stdint.h.
|
|
+
|
|
+2009-06-11 Timothy Wall <twall@users.sf.net>
|
|
+
|
|
+ * Makefile.am,
|
|
+ configure.ac,
|
|
+ include/ffi.h.in,
|
|
+ include/ffi_common.h,
|
|
+ src/closures.c,
|
|
+ src/dlmalloc.c,
|
|
+ src/x86/ffi.c,
|
|
+ src/x86/ffitarget.h,
|
|
+ src/x86/win64.S (new),
|
|
+ README: Added win64 support (mingw or MSVC)
|
|
+ * Makefile.in,
|
|
+ include/Makefile.in,
|
|
+ man/Makefile.in,
|
|
+ testsuite/Makefile.in,
|
|
+ configure,
|
|
+ aclocal.m4: Regenerated
|
|
+ * ltcf-c.sh: properly escape cygwin/w32 path
|
|
+ * man/ffi_call.3: Clarify size requirements for return value.
|
|
+ * src/x86/ffi64.c: Fix filename in comment.
|
|
+ * src/x86/win32.S: Remove unused extern.
|
|
+
|
|
+ * testsuite/libffi.call/closure_fn0.c,
|
|
+ testsuite/libffi.call/closure_fn1.c,
|
|
+ testsuite/libffi.call/closure_fn2.c,
|
|
+ testsuite/libffi.call/closure_fn3.c,
|
|
+ testsuite/libffi.call/closure_fn4.c,
|
|
+ testsuite/libffi.call/closure_fn5.c,
|
|
+ testsuite/libffi.call/closure_fn6.c,
|
|
+ testsuite/libffi.call/closure_stdcall.c,
|
|
+ testsuite/libffi.call/cls_12byte.c,
|
|
+ testsuite/libffi.call/cls_16byte.c,
|
|
+ testsuite/libffi.call/cls_18byte.c,
|
|
+ testsuite/libffi.call/cls_19byte.c,
|
|
+ testsuite/libffi.call/cls_1_1byte.c,
|
|
+ testsuite/libffi.call/cls_20byte.c,
|
|
+ testsuite/libffi.call/cls_20byte1.c,
|
|
+ testsuite/libffi.call/cls_24byte.c,
|
|
+ testsuite/libffi.call/cls_2byte.c,
|
|
+ testsuite/libffi.call/cls_3_1byte.c,
|
|
+ testsuite/libffi.call/cls_3byte1.c,
|
|
+ testsuite/libffi.call/cls_3byte2.c,
|
|
+ testsuite/libffi.call/cls_4_1byte.c,
|
|
+ testsuite/libffi.call/cls_4byte.c,
|
|
+ testsuite/libffi.call/cls_5_1_byte.c,
|
|
+ testsuite/libffi.call/cls_5byte.c,
|
|
+ testsuite/libffi.call/cls_64byte.c,
|
|
+ testsuite/libffi.call/cls_6_1_byte.c,
|
|
+ testsuite/libffi.call/cls_6byte.c,
|
|
+ testsuite/libffi.call/cls_7_1_byte.c,
|
|
+ testsuite/libffi.call/cls_7byte.c,
|
|
+ testsuite/libffi.call/cls_8byte.c,
|
|
+ testsuite/libffi.call/cls_9byte1.c,
|
|
+ testsuite/libffi.call/cls_9byte2.c,
|
|
+ testsuite/libffi.call/cls_align_double.c,
|
|
+ testsuite/libffi.call/cls_align_float.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble_split.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble_split2.c,
|
|
+ testsuite/libffi.call/cls_align_pointer.c,
|
|
+ testsuite/libffi.call/cls_align_sint16.c,
|
|
+ testsuite/libffi.call/cls_align_sint32.c,
|
|
+ testsuite/libffi.call/cls_align_sint64.c,
|
|
+ testsuite/libffi.call/cls_align_uint16.c,
|
|
+ testsuite/libffi.call/cls_align_uint32.c,
|
|
+ testsuite/libffi.call/cls_align_uint64.c,
|
|
+ testsuite/libffi.call/cls_dbls_struct.c,
|
|
+ testsuite/libffi.call/cls_double.c,
|
|
+ testsuite/libffi.call/cls_double_va.c,
|
|
+ testsuite/libffi.call/cls_float.c,
|
|
+ testsuite/libffi.call/cls_longdouble.c,
|
|
+ testsuite/libffi.call/cls_longdouble_va.c,
|
|
+ testsuite/libffi.call/cls_multi_schar.c,
|
|
+ testsuite/libffi.call/cls_multi_sshort.c,
|
|
+ testsuite/libffi.call/cls_multi_sshortchar.c,
|
|
+ testsuite/libffi.call/cls_multi_uchar.c,
|
|
+ testsuite/libffi.call/cls_multi_ushort.c,
|
|
+ testsuite/libffi.call/cls_multi_ushortchar.c,
|
|
+ testsuite/libffi.call/cls_pointer.c,
|
|
+ testsuite/libffi.call/cls_pointer_stack.c,
|
|
+ testsuite/libffi.call/cls_schar.c,
|
|
+ testsuite/libffi.call/cls_sint.c,
|
|
+ testsuite/libffi.call/cls_sshort.c,
|
|
+ testsuite/libffi.call/cls_uchar.c,
|
|
+ testsuite/libffi.call/cls_uint.c,
|
|
+ testsuite/libffi.call/cls_ulonglong.c,
|
|
+ testsuite/libffi.call/cls_ushort.c,
|
|
+ testsuite/libffi.call/err_bad_abi.c,
|
|
+ testsuite/libffi.call/err_bad_typedef.c,
|
|
+ testsuite/libffi.call/float2.c,
|
|
+ testsuite/libffi.call/huge_struct.c,
|
|
+ testsuite/libffi.call/nested_struct.c,
|
|
+ testsuite/libffi.call/nested_struct1.c,
|
|
+ testsuite/libffi.call/nested_struct10.c,
|
|
+ testsuite/libffi.call/nested_struct2.c,
|
|
+ testsuite/libffi.call/nested_struct3.c,
|
|
+ testsuite/libffi.call/nested_struct4.c,
|
|
+ testsuite/libffi.call/nested_struct5.c,
|
|
+ testsuite/libffi.call/nested_struct6.c,
|
|
+ testsuite/libffi.call/nested_struct7.c,
|
|
+ testsuite/libffi.call/nested_struct8.c,
|
|
+ testsuite/libffi.call/nested_struct9.c,
|
|
+ testsuite/libffi.call/problem1.c,
|
|
+ testsuite/libffi.call/return_ldl.c,
|
|
+ testsuite/libffi.call/return_ll1.c,
|
|
+ testsuite/libffi.call/stret_large.c,
|
|
+ testsuite/libffi.call/stret_large2.c,
|
|
+ testsuite/libffi.call/stret_medium.c,
|
|
+ testsuite/libffi.call/stret_medium2.c,
|
|
+ testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead
|
|
+ of checking for MMAP. Use intptr_t instead of long casts.
|
|
+
|
|
+2009-06-04 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * src/powerpc/ffitarget.h: Fix misapplied merge from gcc.
|
|
+
|
|
+2009-06-04 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * src/mips/o32.S,
|
|
+ src/mips/n32.S: Fix licence formatting.
|
|
+
|
|
+2009-06-04 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * src/x86/darwin.S: Fix licence formatting.
|
|
+ src/x86/win32.S: Likewise.
|
|
+ src/sh64/sysv.S: Likewise.
|
|
+ src/sh/sysv.S: Likewise.
|
|
+
|
|
+2009-06-04 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * src/sh64/ffi.c: Remove lint directives. Was missing from merge
|
|
+ of Andreas Tobler's patch from 2006-04-22.
|
|
+
|
|
+2009-06-04 Andrew Haley <aph@redhat.com>
|
|
+
|
|
+ * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of
|
|
+ 2007-03-07.
|
|
+
|
|
+2008-12-26 Timothy Wall <twall@users.sf.net>
|
|
+
|
|
+ * testsuite/libffi.call/cls_longdouble.c,
|
|
+ testsuite/libffi.call/cls_longdouble_va.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble_split.c,
|
|
+ testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected
|
|
+ failures on x86_64 cygwin/mingw.
|
|
+
|
|
+2008-12-22 Timothy Wall <twall@users.sf.net>
|
|
+
|
|
+ * testsuite/libffi.call/closure_fn0.c,
|
|
+ testsuite/libffi.call/closure_fn1.c,
|
|
+ testsuite/libffi.call/closure_fn2.c,
|
|
+ testsuite/libffi.call/closure_fn3.c,
|
|
+ testsuite/libffi.call/closure_fn4.c,
|
|
+ testsuite/libffi.call/closure_fn5.c,
|
|
+ testsuite/libffi.call/closure_fn6.c,
|
|
+ testsuite/libffi.call/closure_loc_fn0.c,
|
|
+ testsuite/libffi.call/closure_stdcall.c,
|
|
+ testsuite/libffi.call/cls_align_pointer.c,
|
|
+ testsuite/libffi.call/cls_pointer.c,
|
|
+ testsuite/libffi.call/cls_pointer_stack.c: use portable cast from
|
|
+ pointer to integer (intptr_t).
|
|
+ * testsuite/libffi.call/cls_longdouble.c: disable for win64.
|
|
+
|
|
+2008-12-19 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.8.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-11-11 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.7.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-08-25 Andreas Tobler <a.tobler@schweiz.org>
|
|
+
|
|
+ * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and
|
|
+ FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum.
|
|
+ Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT.
|
|
+ Adjust copyright notice.
|
|
+ * src/powerpc/ffi.c: Add two new flags to indicate if we have one
|
|
+ register or two register to use for FFI_SYSV structs.
|
|
+ (ffi_prep_cif_machdep): Pass the right register flag introduced above.
|
|
+ (ffi_closure_helper_SYSV): Fix the return type for
|
|
+ FFI_SYSV_TYPE_SMALL_STRUCT. Comment.
|
|
+ Adjust copyright notice.
|
|
+
|
|
+2008-07-24 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * testsuite/libffi.call/cls_dbls_struct.c,
|
|
+ testsuite/libffi.call/cls_double_va.c,
|
|
+ testsuite/libffi.call/cls_longdouble.c,
|
|
+ testsuite/libffi.call/cls_longdouble_va.c,
|
|
+ testsuite/libffi.call/cls_pointer.c,
|
|
+ testsuite/libffi.call/cls_pointer_stack.c,
|
|
+ testsuite/libffi.call/err_bad_abi.c: Clean up failures from
|
|
+ compiler warnings.
|
|
+
|
|
+2008-07-17 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.6.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision. Add documentation.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-07-16 Kaz Kojima <kkojima@gcc.gnu.org>
|
|
+
|
|
+ * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned
|
|
+ int.
|
|
+
|
|
+2008-07-16 Kaz Kojima <kkojima@gcc.gnu.org>
|
|
+
|
|
+ * src/sh/sysv.S: Add .note.GNU-stack on Linux.
|
|
+ * src/sh64/sysv.S: Likewise.
|
|
+
|
|
+2008-04-03 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * libffi.pc.in (Libs): Add -L${libdir}.
|
|
+ * configure.ac: Bump version to 3.0.5.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-04-03 Anthony Green <green@redhat.com>
|
|
+ Xerces Ranby <xerxes@zafena.se>
|
|
+
|
|
+ * include/ffi.h.in: Wrap definition of target architecture to
|
|
+ protect from double definitions.
|
|
+
|
|
+2008-03-22 Moriyoshi Koizumi <moriyoshi@gmail.com>
|
|
+
|
|
+ * src/x86/ffi.c (ffi_prep_closure_loc): Fix for bug revealed in
|
|
+ closure_loc_fn0.c.
|
|
+ * testsuite/libffi.call/closure_loc_fn0.c (closure_loc_test_fn0):
|
|
+ New test.
|
|
+
|
|
+2008-03-04 Anthony Green <green@redhat.com>
|
|
+ Blake Chaffin
|
|
+ hos@tamanegi.org
|
|
+
|
|
+ * testsuite/libffi.call/cls_align_longdouble_split2.c
|
|
+ testsuite/libffi.call/cls_align_longdouble_split.c
|
|
+ testsuite/libffi.call/cls_dbls_struct.c
|
|
+ testsuite/libffi.call/cls_double_va.c
|
|
+ testsuite/libffi.call/cls_longdouble.c
|
|
+ testsuite/libffi.call/cls_longdouble_va.c
|
|
+ testsuite/libffi.call/cls_pointer.c
|
|
+ testsuite/libffi.call/cls_pointer_stack.c
|
|
+ testsuite/libffi.call/err_bad_abi.c
|
|
+ testsuite/libffi.call/err_bad_typedef.c
|
|
+ testsuite/libffi.call/huge_struct.c
|
|
+ testsuite/libffi.call/stret_large2.c
|
|
+ testsuite/libffi.call/stret_large.c
|
|
+ testsuite/libffi.call/stret_medium2.c
|
|
+ testsuite/libffi.call/stret_medium.c: New tests from Apple.
|
|
+
|
|
+2008-02-26 Jakub Jelinek <jakub@redhat.com>
|
|
+ Anthony Green <green@redhat.com>
|
|
+
|
|
+ * src/alpha/osf.S: Add .note.GNU-stack on Linux.
|
|
+ * src/s390/sysv.S: Likewise.
|
|
+ * src/powerpc/linux64.S: Likewise.
|
|
+ * src/powerpc/linux64_closure.S: Likewise.
|
|
+ * src/powerpc/ppc_closure.S: Likewise.
|
|
+ * src/powerpc/sysv.S: Likewise.
|
|
+ * src/x86/unix64.S: Likewise.
|
|
+ * src/x86/sysv.S: Likewise.
|
|
+ * src/sparc/v8.S: Likewise.
|
|
+ * src/sparc/v9.S: Likewise.
|
|
+ * src/m68k/sysv.S: Likewise.
|
|
+ * src/ia64/unix.S: Likewise.
|
|
+ * src/arm/sysv.S: Likewise.
|
|
+
|
|
+2008-02-26 Anthony Green <green@redhat.com>
|
|
+ Thomas Heller <theller@ctypes.org>
|
|
+
|
|
+ * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C
|
|
+ comment.
|
|
+
|
|
+2008-02-26 Anthony Green <green@redhat.org>
|
|
+ Thomas Heller <theller@ctypes.org>
|
|
+
|
|
+ * include/ffi.h.in: Change void (*)() to void (*)(void).
|
|
+
|
|
+2008-02-26 Anthony Green <green@redhat.org>
|
|
+ Thomas Heller <theller@ctypes.org>
|
|
+
|
|
+ * src/alpha/ffi.c: Change void (*)() to void (*)(void).
|
|
+ src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c,
|
|
+ src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c,
|
|
+ src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S,
|
|
+ src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c,
|
|
+ src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c,
|
|
+ src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S,
|
|
+ src/x86/ffi64.c: Ditto.
|
|
+
|
|
+2008-02-24 Anthony Green <green@redhat.org>
|
|
+
|
|
+ * configure.ac: Accept openbsd*, not just openbsd.
|
|
+ Bump version to 3.0.4.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-02-22 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * README: Clean up list of tested platforms.
|
|
+
|
|
+2008-02-22 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.3.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release. Clean up test docs.
|
|
+
|
|
+2008-02-22 Bjoern Koenig <bkoenig@alpha-tierchen.de>
|
|
+ Andreas Tobler <a.tobler@schweiz.org>
|
|
+
|
|
+ * configure.ac: Add amd64-*-freebsd* target.
|
|
+ * configure: Regenerate.
|
|
+
|
|
+2008-02-22 Thomas Heller <theller@ctypes.org>
|
|
+
|
|
+ * configure.ac: Add x86 OpenBSD support.
|
|
+ * configure: Rebuilt.
|
|
+
|
|
+2008-02-21 Thomas Heller <theller@ctypes.org>
|
|
+
|
|
+ * README: Change "make test" to "make check".
|
|
+
|
|
+2008-02-21 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.2.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-02-21 Björn König <bkoenig@alpha-tierchen.de>
|
|
+
|
|
+ * src/x86/freebsd.S: New file.
|
|
+ * configure.ac: Add x86 FreeBSD support.
|
|
+ * Makefile.am: Ditto.
|
|
+
|
|
+2008-02-15 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.1.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * libtool-version: Increment revision.
|
|
+ * README: Update for new release.
|
|
+
|
|
+2008-02-15 David Daney <ddaney@avtrex.com>
|
|
+
|
|
+ * src/mips/ffi.c: Remove extra '>' from include directive.
|
|
+ (ffi_prep_closure_loc): Use clear_location instead of tramp.
|
|
+
|
|
+2008-02-15 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 3.0.0.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+
|
|
+2008-02-15 David Daney <ddaney@avtrex.com>
|
|
+
|
|
+ * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
|
|
+ Define (conditionally), and use it to include cachectl.h.
|
|
+ (ffi_prep_closure_loc): Fix cache flushing.
|
|
+ * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
|
|
+
|
|
+2008-02-15 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3:
|
|
+ Update dates and remove all references to ffi_prep_closure.
|
|
+ * configure.ac: Bump version to 2.99.9.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+
|
|
+2008-02-15 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * man/ffi_prep_closure.3: Delete.
|
|
+ * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3.
|
|
+ (man_MANS): Ditto.
|
|
+ * man/Makefile.in: Rebuilt.
|
|
+ * configure.ac: Bump version to 2.99.8.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 2.99.7.
|
|
+ * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
|
|
+ * include/ffi.h.in LICENSE src/debug.c src/closures.c
|
|
+ src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h
|
|
+ src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c
|
|
+ src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S
|
|
+ src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c
|
|
+ src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c
|
|
+ src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S
|
|
+ src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h
|
|
+ src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c
|
|
+ src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S
|
|
+ src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h
|
|
+ src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h
|
|
+ src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S
|
|
+ src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h
|
|
+ src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S
|
|
+ src/arm/ffitarget.h src/prep_cif.c: Update license text.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * README: Update tested platforms.
|
|
+ * configure.ac: Bump version to 2.99.6.
|
|
+ * configure: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * configure.ac: Bump version to 2.99.5.
|
|
+ * configure: Rebuilt.
|
|
+ * Makefile.am (EXTRA_DIST): Add darwin64.S
|
|
+ * Makefile.in: Rebuilt.
|
|
+ * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree.
|
|
+ * LICENSE: Update WARRANTY.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * libffi.pc.in (libdir): Fix libdir definition.
|
|
+ * configure.ac: Bump version to 2.99.4.
|
|
+ * configure: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * README: Update.
|
|
+ * libffi.info: New file.
|
|
+ * doc/stamp-vti: New file.
|
|
+ * configure.ac: Bump version to 2.99.3.
|
|
+ * configure: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * Makefile.am (SUBDIRS): Add man dir.
|
|
+ * Makefile.in: Rebuilt.
|
|
+ * configure.ac: Create Makefile.
|
|
+ * configure: Rebuilt.
|
|
+ * man/ffi_call.3 man/ffi_prep_cif.3 man/ffi_prep_closure.3
|
|
+ man/Makefile.am man/Makefile.in: New files.
|
|
+
|
|
+2008-02-14 Tom Tromey <tromey@redhat.com>
|
|
+
|
|
+ * aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt.
|
|
+ * mdate-sh, texinfo.tex: New files.
|
|
+ * Makefile.am (info_TEXINFOS): New variable.
|
|
+ * doc/libffi.texi: New file.
|
|
+ * doc/version.texi: Likewise.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * Makefile.am (AM_CFLAGS): Don't compile with -D$(TARGET).
|
|
+ (lib_LTLIBRARIES): Define.
|
|
+ (toolexeclib_LIBRARIES): Undefine.
|
|
+ * Makefile.in: Rebuilt.
|
|
+ * configure.ac: Reset version to 2.99.1.
|
|
+ * configure.in: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * libffi.pc.in: Use @PACKAGE_NAME@ and @PACKAGE_VERSION@.
|
|
+ * configure.ac: Reset version to 2.99.1.
|
|
+ * configure.in: Rebuilt.
|
|
+ * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi.
|
|
+ * Makefile.in: Rebuilt.
|
|
+ * LICENSE: Update copyright notice.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * include/Makefile.am (nodist_includes_HEADERS): Define. Don't
|
|
+ distribute ffitarget.h or ffi.h from the build include dir.
|
|
+ * Makefile.in: Rebuilt.
|
|
+
|
|
+2008-02-14 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * include/Makefile.am (includesdir): Install headers under libdir.
|
|
+ (pkgconfigdir): Define. Install libffi.pc.
|
|
+ * include/Makefile.in: Rebuilt.
|
|
+ * libffi.pc.in: Create.
|
|
+ * libtool-version: Increment CURRENT
|
|
+ * configure.ac: Add libffi.pc.in
|
|
+ * configure: Rebuilt.
|
|
+
|
|
+2008-02-03 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * include/Makefile.am (includesdir): Fix header install with
|
|
+ DESTDIR.
|
|
+ * include/Makefile.in: Rebuilt.
|
|
+
|
|
+2008-02-03 Timothy Wall <twall@users.sf.net>
|
|
+
|
|
+ * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return
|
|
+ offset based on code pointer, not data pointer.
|
|
+
|
|
+2008-02-01 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * include/Makefile.am: Fix header installs.
|
|
+ * Makefile.am: Ditto.
|
|
+ * include/Makefile.in: Rebuilt.
|
|
+ * Makefile.in: Ditto.
|
|
+
|
|
+2008-02-01 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL,
|
|
+ FFI_INIT_TRAMPOLINE): Revert my broken changes to twall's last
|
|
+ patch.
|
|
+
|
|
+2008-01-31 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * Makefile.am (EXTRA_DIST): Add missing files.
|
|
+ * testsuite/Makefile.am: Ditto.
|
|
+ * Makefile.in, testsuite/Makefile.in: Rebuilt.
|
|
+
|
|
+2008-01-31 Timothy Wall <twall@users.sf.net>
|
|
+
|
|
+ * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall
|
|
+ closures.
|
|
+ * src/x86/ffitarget.h: Increase size of trampoline for stdcall
|
|
+ closures.
|
|
+ * src/x86/win32.S: Add assembly for stdcall closure.
|
|
+ * src/x86/ffi.c: Initialize stdcall closure trampoline.
|
|
+
|
|
+2008-01-30 H.J. Lu <hongjiu.lu@intel.com>
|
|
+
|
|
+ PR libffi/34612
|
|
+ * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when
|
|
+ returning struct.
|
|
+
|
|
+ * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer"
|
|
+ tests.
|
|
+
|
|
+2008-01-30 Anthony Green <green@redhat.com>
|
|
+
|
|
+ * Makefile.am, include/Makefile.am: Move headers to
|
|
+ libffi_la_SOURCES for new automake.
|
|
+ * Makefile.in, include/Makefile.in: Rebuilt.
|
|
+
|
|
+ * testsuite/lib/wrapper.exp: Copied from gcc tree to allow for
|
|
+ execution outside of gcc tree.
|
|
+ * testsuite/lib/target-libpath.exp: Ditto.
|
|
+
|
|
+ * testsuite/lib/libffi-dg.exp: Many changes to allow for execution
|
|
+ outside of gcc tree.
|
|
+
|
|
Index: libffi/LICENSE
|
|
===================================================================
|
|
--- libffi.orig/LICENSE
|
|
+++ libffi/LICENSE
|
|
@@ -1,4 +1,5 @@
|
|
-libffi - Copyright (c) 1996-2003 Red Hat, Inc.
|
|
+libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others.
|
|
+See source files for details.
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
a copy of this software and associated documentation files (the
|
|
@@ -11,10 +12,10 @@ 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
|
|
+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 CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
-OTHER DEALINGS IN THE SOFTWARE.
|
|
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
Index: libffi/Makefile.am
|
|
===================================================================
|
|
--- libffi.orig/Makefile.am
|
|
+++ libffi/Makefile.am
|
|
@@ -1,7 +1,6 @@
|
|
## Process this with automake to create Makefile.in
|
|
|
|
AUTOMAKE_OPTIONS = foreign subdir-objects
|
|
-ACLOCAL_AMFLAGS = -I .. -I ../config
|
|
|
|
SUBDIRS = include testsuite man
|
|
|
|
@@ -27,11 +26,15 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
|
|
src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \
|
|
src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
|
|
src/sparc/ffi.c src/x86/darwin64.S \
|
|
- src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \
|
|
+ src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \
|
|
+ src/x86/darwin.S src/x86/freebsd.S \
|
|
src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
|
|
src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
|
|
src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
|
|
- src/moxie/ffi.c src/moxie/eabi.S
|
|
+ libtool-version ChangeLog.libffi m4/libtool.m4 \
|
|
+ m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4
|
|
+
|
|
+info_TEXINFOS = doc/libffi.texi
|
|
|
|
## ################################################################
|
|
|
|
@@ -79,12 +82,17 @@ AM_MAKEFLAGS = \
|
|
|
|
MAKEOVERRIDES=
|
|
|
|
-toolexeclib_LTLIBRARIES = libffi.la
|
|
+ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4
|
|
+
|
|
+lib_LTLIBRARIES = libffi.la
|
|
noinst_LTLIBRARIES = libffi_convenience.la
|
|
|
|
libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
|
|
src/raw_api.c src/java_raw_api.c src/closures.c
|
|
|
|
+pkgconfigdir = $(libdir)/pkgconfig
|
|
+pkgconfig_DATA = libffi.pc
|
|
+
|
|
nodist_libffi_la_SOURCES =
|
|
|
|
if MIPS
|
|
@@ -171,17 +179,12 @@ nodist_libffi_convenience_la_SOURCES = $
|
|
|
|
AM_CFLAGS = -Wall -g -fexceptions
|
|
|
|
-LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
|
|
-
|
|
libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
|
|
|
|
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
|
AM_CCASFLAGS = $(AM_CPPFLAGS)
|
|
|
|
-# Multilib support. Automake should provide these on its own.
|
|
-all-recursive: all-multi
|
|
-install-recursive: install-multi
|
|
-mostlyclean-recursive: mostlyclean-multi
|
|
-clean-recursive: clean-multi
|
|
-distclean-recursive: distclean-multi
|
|
-maintainer-clean-recursive: maintainer-clean-multi
|
|
+# No install-html or install-pdf support in automake yet
|
|
+.PHONY: install-html install-pdf
|
|
+install-html:
|
|
+install-pdf:
|
|
Index: libffi/compile
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/compile
|
|
@@ -0,0 +1,142 @@
|
|
+#! /bin/sh
|
|
+# Wrapper for compilers which do not understand `-c -o'.
|
|
+
|
|
+scriptversion=2005-05-14.22
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# Written by Tom Tromey <tromey@cygnus.com>.
|
|
+#
|
|
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+# This file is maintained in Automake, please report
|
|
+# bugs to <bug-automake@gnu.org> or send patches to
|
|
+# <automake-patches@gnu.org>.
|
|
+
|
|
+case $1 in
|
|
+ '')
|
|
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
|
+ exit 1;
|
|
+ ;;
|
|
+ -h | --h*)
|
|
+ cat <<\EOF
|
|
+Usage: compile [--help] [--version] PROGRAM [ARGS]
|
|
+
|
|
+Wrapper for compilers which do not understand `-c -o'.
|
|
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
|
+arguments, and rename the output as expected.
|
|
+
|
|
+If you are trying to build a whole package this is not the
|
|
+right script to run: please start by reading the file `INSTALL'.
|
|
+
|
|
+Report bugs to <bug-automake@gnu.org>.
|
|
+EOF
|
|
+ exit $?
|
|
+ ;;
|
|
+ -v | --v*)
|
|
+ echo "compile $scriptversion"
|
|
+ exit $?
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+ofile=
|
|
+cfile=
|
|
+eat=
|
|
+
|
|
+for arg
|
|
+do
|
|
+ if test -n "$eat"; then
|
|
+ eat=
|
|
+ else
|
|
+ case $1 in
|
|
+ -o)
|
|
+ # configure might choose to run compile as `compile cc -o foo foo.c'.
|
|
+ # So we strip `-o arg' only if arg is an object.
|
|
+ eat=1
|
|
+ case $2 in
|
|
+ *.o | *.obj)
|
|
+ ofile=$2
|
|
+ ;;
|
|
+ *)
|
|
+ set x "$@" -o "$2"
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *.c)
|
|
+ cfile=$1
|
|
+ set x "$@" "$1"
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set x "$@" "$1"
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ shift
|
|
+done
|
|
+
|
|
+if test -z "$ofile" || test -z "$cfile"; then
|
|
+ # If no `-o' option was seen then we might have been invoked from a
|
|
+ # pattern rule where we don't need one. That is ok -- this is a
|
|
+ # normal compilation that the losing compiler can handle. If no
|
|
+ # `.c' file was seen then we are probably linking. That is also
|
|
+ # ok.
|
|
+ exec "$@"
|
|
+fi
|
|
+
|
|
+# Name of file we expect compiler to create.
|
|
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
|
+
|
|
+# Create the lock directory.
|
|
+# Note: use `[/.-]' here to ensure that we don't use the same name
|
|
+# that we are using for the .o file. Also, base the name on the expected
|
|
+# object file name, since that is what matters with a parallel build.
|
|
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
|
+while true; do
|
|
+ if mkdir "$lockdir" >/dev/null 2>&1; then
|
|
+ break
|
|
+ fi
|
|
+ sleep 1
|
|
+done
|
|
+# FIXME: race condition here if user kills between mkdir and trap.
|
|
+trap "rmdir '$lockdir'; exit 1" 1 2 15
|
|
+
|
|
+# Run the compile.
|
|
+"$@"
|
|
+ret=$?
|
|
+
|
|
+if test -f "$cofile"; then
|
|
+ mv "$cofile" "$ofile"
|
|
+elif test -f "${cofile}bj"; then
|
|
+ mv "${cofile}bj" "$ofile"
|
|
+fi
|
|
+
|
|
+rmdir "$lockdir"
|
|
+exit $ret
|
|
+
|
|
+# 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-end: "$"
|
|
+# End:
|
|
Index: libffi/config.guess
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/config.guess
|
|
@@ -0,0 +1,1498 @@
|
|
+#! /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
|
|
+# Free Software Foundation, Inc.
|
|
+
|
|
+timestamp='2009-11-19'
|
|
+
|
|
+# This file is free software; you can redistribute it and/or modify it
|
|
+# under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful, but
|
|
+# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+# General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
|
+# 02110-1301, USA.
|
|
+#
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+
|
|
+# Originally written by Per Bothner. Please send patches (context
|
|
+# diff format) to <config-patches@gnu.org> 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 <config-patches@gnu.org>."
|
|
+
|
|
+version="\
|
|
+GNU config.guess ($timestamp)
|
|
+
|
|
+Originally written by Per Bothner.
|
|
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
|
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
|
+
|
|
+This is free software; see the source for copying conditions. There is NO
|
|
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
|
+
|
|
+help="
|
|
+Try \`$me --help' for more information."
|
|
+
|
|
+# Parse command line
|
|
+while test $# -gt 0 ; do
|
|
+ case $1 in
|
|
+ --time-stamp | --time* | -t )
|
|
+ echo "$timestamp" ; exit ;;
|
|
+ --version | -v )
|
|
+ echo "$version" ; exit ;;
|
|
+ --help | --h* | -h )
|
|
+ echo "$usage"; exit ;;
|
|
+ -- ) # Stop option processing
|
|
+ shift; break ;;
|
|
+ - ) # Use stdin as input.
|
|
+ break ;;
|
|
+ -* )
|
|
+ echo "$me: invalid option $1$help" >&2
|
|
+ exit 1 ;;
|
|
+ * )
|
|
+ break ;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+if test $# != 0; then
|
|
+ echo "$me: too many arguments$help" >&2
|
|
+ exit 1
|
|
+fi
|
|
+
|
|
+trap 'exit 1' 1 2 15
|
|
+
|
|
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
|
+# compiler to aid in system detection is discouraged as it requires
|
|
+# temporary files to be created and, as you can see below, it is a
|
|
+# headache to deal with in a portable fashion.
|
|
+
|
|
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
|
+# use `HOST_CC' if defined, but it is deprecated.
|
|
+
|
|
+# Portable tmp directory creation inspired by the Autoconf team.
|
|
+
|
|
+set_cc_for_build='
|
|
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
|
|
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
|
|
+: ${TMPDIR=/tmp} ;
|
|
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
|
|
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
|
|
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
|
|
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
|
|
+dummy=$tmp/dummy ;
|
|
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
|
+case $CC_FOR_BUILD,$HOST_CC,$CC in
|
|
+ ,,) echo "int x;" > $dummy.c ;
|
|
+ for c in cc gcc c89 c99 ; do
|
|
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
|
+ CC_FOR_BUILD="$c"; break ;
|
|
+ fi ;
|
|
+ done ;
|
|
+ if test x"$CC_FOR_BUILD" = x ; then
|
|
+ CC_FOR_BUILD=no_compiler_found ;
|
|
+ fi
|
|
+ ;;
|
|
+ ,,*) CC_FOR_BUILD=$CC ;;
|
|
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
|
+esac ; set_cc_for_build= ;'
|
|
+
|
|
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
|
+# (ghazi@noc.rutgers.edu 1994-08-24)
|
|
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
|
+ PATH=$PATH:/.attbin ; export PATH
|
|
+fi
|
|
+
|
|
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
|
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
|
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
|
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
|
+
|
|
+# Note: order is significant - the case branches are not exclusive.
|
|
+
|
|
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|
+ *:NetBSD:*:*)
|
|
+ # NetBSD (nbsd) targets should (where applicable) match one or
|
|
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
|
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
|
+ # switched to ELF, *-*-netbsd* would select the old
|
|
+ # object file format. This provides both forward
|
|
+ # compatibility and a consistent mechanism for selecting the
|
|
+ # object file format.
|
|
+ #
|
|
+ # Note: NetBSD doesn't particularly care about the vendor
|
|
+ # portion of the name. We always set it to "unknown".
|
|
+ sysctl="sysctl -n hw.machine_arch"
|
|
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
|
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
|
+ case "${UNAME_MACHINE_ARCH}" in
|
|
+ armeb) machine=armeb-unknown ;;
|
|
+ arm*) machine=arm-unknown ;;
|
|
+ sh3el) machine=shl-unknown ;;
|
|
+ sh3eb) machine=sh-unknown ;;
|
|
+ sh5el) machine=sh5le-unknown ;;
|
|
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
|
+ esac
|
|
+ # The Operating System including object format, if it has switched
|
|
+ # to ELF recently, or will in the future.
|
|
+ case "${UNAME_MACHINE_ARCH}" in
|
|
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
|
+ eval $set_cc_for_build
|
|
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
|
+ | grep -q __ELF__
|
|
+ then
|
|
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
|
+ # Return netbsd for either. FIX?
|
|
+ os=netbsd
|
|
+ else
|
|
+ os=netbsdelf
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ os=netbsd
|
|
+ ;;
|
|
+ esac
|
|
+ # The OS release
|
|
+ # Debian GNU/NetBSD machines have a different userland, and
|
|
+ # thus, need a distinct triplet. However, they do not need
|
|
+ # kernel version information, so it can be replaced with a
|
|
+ # suitable tag, in the style of linux-gnu.
|
|
+ case "${UNAME_VERSION}" in
|
|
+ Debian*)
|
|
+ release='-gnu'
|
|
+ ;;
|
|
+ *)
|
|
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
|
+ ;;
|
|
+ esac
|
|
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
|
+ # contains redundant information, the shorter form:
|
|
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
|
+ echo "${machine}-${os}${release}"
|
|
+ exit ;;
|
|
+ *:OpenBSD:*:*)
|
|
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
|
|
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:ekkoBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:SolidBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ macppc:MirBSD:*:*)
|
|
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:MirBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ alpha:OSF1:*:*)
|
|
+ case $UNAME_RELEASE in
|
|
+ *4.0)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
|
+ ;;
|
|
+ *5.*)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
|
|
+ ;;
|
|
+ esac
|
|
+ # According to Compaq, /usr/sbin/psrinfo has been available on
|
|
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
|
|
+ # covers most systems running today. This code pipes the CPU
|
|
+ # types through head -n 1, so we only detect the type of CPU 0.
|
|
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
|
|
+ case "$ALPHA_CPU_TYPE" in
|
|
+ "EV4 (21064)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "EV4.5 (21064)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "LCA4 (21066/21068)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "EV5 (21164)")
|
|
+ UNAME_MACHINE="alphaev5" ;;
|
|
+ "EV5.6 (21164A)")
|
|
+ UNAME_MACHINE="alphaev56" ;;
|
|
+ "EV5.6 (21164PC)")
|
|
+ UNAME_MACHINE="alphapca56" ;;
|
|
+ "EV5.7 (21164PC)")
|
|
+ UNAME_MACHINE="alphapca57" ;;
|
|
+ "EV6 (21264)")
|
|
+ UNAME_MACHINE="alphaev6" ;;
|
|
+ "EV6.7 (21264A)")
|
|
+ UNAME_MACHINE="alphaev67" ;;
|
|
+ "EV6.8CB (21264C)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.8AL (21264B)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.8CX (21264D)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.9A (21264/EV69A)")
|
|
+ UNAME_MACHINE="alphaev69" ;;
|
|
+ "EV7 (21364)")
|
|
+ UNAME_MACHINE="alphaev7" ;;
|
|
+ "EV7.9 (21364A)")
|
|
+ UNAME_MACHINE="alphaev79" ;;
|
|
+ esac
|
|
+ # A Pn.n version is a patched version.
|
|
+ # A Vn.n version is a released version.
|
|
+ # A Tn.n version is a released field test version.
|
|
+ # A Xn.n version is an unreleased experimental baselevel.
|
|
+ # 1.2 uses "1.2" for uname -r.
|
|
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
|
+ exit ;;
|
|
+ Alpha\ *:Windows_NT*:*)
|
|
+ # How do we know it's Interix rather than the generic POSIX subsystem?
|
|
+ # Should we change UNAME_MACHINE based on the output of uname instead
|
|
+ # of the specific Alpha model?
|
|
+ echo alpha-pc-interix
|
|
+ exit ;;
|
|
+ 21064:Windows_NT:50:3)
|
|
+ echo alpha-dec-winnt3.5
|
|
+ exit ;;
|
|
+ Amiga*:UNIX_System_V:4.0:*)
|
|
+ echo m68k-unknown-sysv4
|
|
+ exit ;;
|
|
+ *:[Aa]miga[Oo][Ss]:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-amigaos
|
|
+ exit ;;
|
|
+ *:[Mm]orph[Oo][Ss]:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-morphos
|
|
+ exit ;;
|
|
+ *:OS/390:*:*)
|
|
+ echo i370-ibm-openedition
|
|
+ exit ;;
|
|
+ *:z/VM:*:*)
|
|
+ echo s390-ibm-zvmoe
|
|
+ exit ;;
|
|
+ *:OS400:*:*)
|
|
+ echo powerpc-ibm-os400
|
|
+ exit ;;
|
|
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
|
+ echo arm-acorn-riscix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ arm:riscos:*:*|arm:RISCOS:*:*)
|
|
+ echo arm-unknown-riscos
|
|
+ exit ;;
|
|
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
|
+ echo hppa1.1-hitachi-hiuxmpp
|
|
+ exit ;;
|
|
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
|
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
|
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
|
+ echo pyramid-pyramid-sysv3
|
|
+ else
|
|
+ echo pyramid-pyramid-bsd
|
|
+ fi
|
|
+ exit ;;
|
|
+ NILE*:*:*:dcosx)
|
|
+ echo pyramid-pyramid-svr4
|
|
+ exit ;;
|
|
+ DRS?6000:unix:4.0:6*)
|
|
+ echo sparc-icl-nx6
|
|
+ exit ;;
|
|
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
|
|
+ case `/usr/bin/uname -p` in
|
|
+ sparc) echo sparc-icl-nx7; exit ;;
|
|
+ esac ;;
|
|
+ s390x:SunOS:*:*)
|
|
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ sun4H:SunOS:5.*:*)
|
|
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
|
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ i86pc: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 <stdio.h> /* 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 <sys/systemcfg.h>
|
|
+
|
|
+ main()
|
|
+ {
|
|
+ if (!__power_pc())
|
|
+ exit(1);
|
|
+ puts("powerpc-ibm-aix3.2.5");
|
|
+ exit(0);
|
|
+ }
|
|
+EOF
|
|
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
|
|
+ then
|
|
+ echo "$SYSTEM_NAME"
|
|
+ else
|
|
+ echo rs6000-ibm-aix3.2.5
|
|
+ fi
|
|
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
|
+ echo rs6000-ibm-aix3.2.4
|
|
+ else
|
|
+ echo rs6000-ibm-aix3.2
|
|
+ fi
|
|
+ exit ;;
|
|
+ *:AIX:*:[456])
|
|
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
|
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
|
+ IBM_ARCH=rs6000
|
|
+ else
|
|
+ IBM_ARCH=powerpc
|
|
+ fi
|
|
+ if [ -x /usr/bin/oslevel ] ; then
|
|
+ IBM_REV=`/usr/bin/oslevel`
|
|
+ else
|
|
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
|
+ fi
|
|
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
|
+ exit ;;
|
|
+ *:AIX:*:*)
|
|
+ echo rs6000-ibm-aix
|
|
+ exit ;;
|
|
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
|
+ echo romp-ibm-bsd4.4
|
|
+ exit ;;
|
|
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
|
|
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
|
+ exit ;; # report: romp-ibm BSD 4.3
|
|
+ *:BOSX:*:*)
|
|
+ echo rs6000-bull-bosx
|
|
+ exit ;;
|
|
+ DPX/2?00:B.O.S.:*:*)
|
|
+ echo m68k-bull-sysv3
|
|
+ exit ;;
|
|
+ 9000/[34]??:4.3bsd:1.*:*)
|
|
+ echo m68k-hp-bsd
|
|
+ exit ;;
|
|
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
|
+ echo m68k-hp-bsd4.4
|
|
+ exit ;;
|
|
+ 9000/[34678]??:HP-UX:*:*)
|
|
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
|
+ case "${UNAME_MACHINE}" in
|
|
+ 9000/31? ) HP_ARCH=m68000 ;;
|
|
+ 9000/[34]?? ) HP_ARCH=m68k ;;
|
|
+ 9000/[678][0-9][0-9])
|
|
+ if [ -x /usr/bin/getconf ]; then
|
|
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
|
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
|
+ case "${sc_cpu_version}" in
|
|
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
|
|
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
|
|
+ 532) # CPU_PA_RISC2_0
|
|
+ case "${sc_kernel_bits}" in
|
|
+ 32) HP_ARCH="hppa2.0n" ;;
|
|
+ 64) HP_ARCH="hppa2.0w" ;;
|
|
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
|
|
+ esac ;;
|
|
+ esac
|
|
+ fi
|
|
+ if [ "${HP_ARCH}" = "" ]; then
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+
|
|
+ #define _HPUX_SOURCE
|
|
+ #include <stdlib.h>
|
|
+ #include <unistd.h>
|
|
+
|
|
+ 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 <unistd.h>
|
|
+ int
|
|
+ main ()
|
|
+ {
|
|
+ long cpu = sysconf (_SC_CPU_VERSION);
|
|
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
|
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
|
+ results, however. */
|
|
+ if (CPU_IS_PA_RISC (cpu))
|
|
+ {
|
|
+ switch (cpu)
|
|
+ {
|
|
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
|
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
|
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
|
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
|
|
+ }
|
|
+ }
|
|
+ else if (CPU_IS_HP_MC68K (cpu))
|
|
+ puts ("m68k-hitachi-hiuxwe2");
|
|
+ else puts ("unknown-hitachi-hiuxwe2");
|
|
+ exit (0);
|
|
+ }
|
|
+EOF
|
|
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
|
|
+ { echo "$SYSTEM_NAME"; exit; }
|
|
+ echo unknown-hitachi-hiuxwe2
|
|
+ exit ;;
|
|
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
|
+ echo hppa1.1-hp-bsd
|
|
+ exit ;;
|
|
+ 9000/8??:4.3bsd:*:*)
|
|
+ echo hppa1.0-hp-bsd
|
|
+ exit ;;
|
|
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
|
|
+ echo hppa1.0-hp-mpeix
|
|
+ exit ;;
|
|
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
|
+ echo hppa1.1-hp-osf
|
|
+ exit ;;
|
|
+ hp8??:OSF1:*:*)
|
|
+ echo hppa1.0-hp-osf
|
|
+ exit ;;
|
|
+ i*86:OSF1:*:*)
|
|
+ if [ -x /usr/sbin/sysversion ] ; then
|
|
+ echo ${UNAME_MACHINE}-unknown-osf1mk
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-unknown-osf1
|
|
+ fi
|
|
+ exit ;;
|
|
+ parisc*:Lites*:*:*)
|
|
+ echo hppa1.1-hp-lites
|
|
+ exit ;;
|
|
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
|
+ echo c1-convex-bsd
|
|
+ exit ;;
|
|
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
|
+ if getsysinfo -f scalar_acc
|
|
+ then echo c32-convex-bsd
|
|
+ else echo c2-convex-bsd
|
|
+ fi
|
|
+ exit ;;
|
|
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
|
+ echo c34-convex-bsd
|
|
+ exit ;;
|
|
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
|
+ echo c38-convex-bsd
|
|
+ exit ;;
|
|
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
|
+ echo c4-convex-bsd
|
|
+ exit ;;
|
|
+ CRAY*Y-MP:*:*:*)
|
|
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*[A-Z]90:*:*:*)
|
|
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
|
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
|
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
|
|
+ -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*TS:*:*:*)
|
|
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*T3E:*:*:*)
|
|
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*SV1:*:*:*)
|
|
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ *:UNICOS/mp:*:*)
|
|
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
|
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
|
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
|
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
|
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
|
+ exit ;;
|
|
+ 5000:UNIX_System_V:4.*:*)
|
|
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
|
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
|
|
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
|
+ exit ;;
|
|
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ sparc*:BSD/OS:*:*)
|
|
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:BSD/OS:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:FreeBSD:*:*)
|
|
+ case ${UNAME_MACHINE} in
|
|
+ pc98)
|
|
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ amd64)
|
|
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ *)
|
|
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ esac
|
|
+ exit ;;
|
|
+ i*:CYGWIN*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-cygwin
|
|
+ exit ;;
|
|
+ *:MINGW*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-mingw32
|
|
+ exit ;;
|
|
+ i*:windows32*:*)
|
|
+ # uname -m includes "-pc" on this system.
|
|
+ echo ${UNAME_MACHINE}-mingw32
|
|
+ exit ;;
|
|
+ i*:PW*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-pw32
|
|
+ exit ;;
|
|
+ *:Interix*:*)
|
|
+ case ${UNAME_MACHINE} in
|
|
+ x86)
|
|
+ echo i586-pc-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ authenticamd | genuineintel | EM64T)
|
|
+ echo x86_64-unknown-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ IA64)
|
|
+ echo ia64-unknown-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ esac ;;
|
|
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
|
+ echo i${UNAME_MACHINE}-pc-mks
|
|
+ exit ;;
|
|
+ 8664:Windows_NT:*)
|
|
+ echo x86_64-pc-mks
|
|
+ exit ;;
|
|
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
|
+ # How do we know it's Interix rather than the generic POSIX subsystem?
|
|
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
|
+ # UNAME_MACHINE based on the output of uname instead of i386?
|
|
+ echo i586-pc-interix
|
|
+ exit ;;
|
|
+ i*:UWIN*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-uwin
|
|
+ exit ;;
|
|
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
|
|
+ echo x86_64-unknown-cygwin
|
|
+ exit ;;
|
|
+ p*:CYGWIN*:*)
|
|
+ echo powerpcle-unknown-cygwin
|
|
+ exit ;;
|
|
+ prep*:SunOS:5.*:*)
|
|
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ *:GNU:*:*)
|
|
+ # the GNU system
|
|
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
|
+ exit ;;
|
|
+ *:GNU/*:*:*)
|
|
+ # other systems with GNU libc and userland
|
|
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
|
+ exit ;;
|
|
+ i*86:Minix:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-minix
|
|
+ exit ;;
|
|
+ alpha:Linux:*:*)
|
|
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
|
+ EV5) UNAME_MACHINE=alphaev5 ;;
|
|
+ EV56) UNAME_MACHINE=alphaev56 ;;
|
|
+ PCA56) UNAME_MACHINE=alphapca56 ;;
|
|
+ PCA57) UNAME_MACHINE=alphapca56 ;;
|
|
+ EV6) UNAME_MACHINE=alphaev6 ;;
|
|
+ EV67) UNAME_MACHINE=alphaev67 ;;
|
|
+ EV68*) UNAME_MACHINE=alphaev68 ;;
|
|
+ esac
|
|
+ objdump --private-headers /bin/sh | grep -q ld.so.1
|
|
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
|
+ exit ;;
|
|
+ arm*:Linux:*:*)
|
|
+ eval $set_cc_for_build
|
|
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
|
+ | grep -q __ARM_EABI__
|
|
+ then
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
|
+ fi
|
|
+ exit ;;
|
|
+ avr32*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ cris:Linux:*:*)
|
|
+ echo cris-axis-linux-gnu
|
|
+ exit ;;
|
|
+ crisv32:Linux:*:*)
|
|
+ echo crisv32-axis-linux-gnu
|
|
+ exit ;;
|
|
+ frv:Linux:*:*)
|
|
+ echo frv-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ i*86:Linux:*:*)
|
|
+ LIBC=gnu
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+ #ifdef __dietlibc__
|
|
+ LIBC=dietlibc
|
|
+ #endif
|
|
+EOF
|
|
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
|
|
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
|
|
+ exit ;;
|
|
+ ia64:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ m32r*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ m68*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ mips:Linux:*:* | mips64:Linux:*:*)
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+ #undef CPU
|
|
+ #undef ${UNAME_MACHINE}
|
|
+ #undef ${UNAME_MACHINE}el
|
|
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
|
+ CPU=${UNAME_MACHINE}el
|
|
+ #else
|
|
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
|
+ CPU=${UNAME_MACHINE}
|
|
+ #else
|
|
+ CPU=
|
|
+ #endif
|
|
+ #endif
|
|
+EOF
|
|
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
|
|
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
|
|
+ ;;
|
|
+ or32:Linux:*:*)
|
|
+ echo or32-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ padre:Linux:*:*)
|
|
+ echo sparc-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
|
|
+ echo hppa64-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ parisc:Linux:*:* | hppa:Linux:*:*)
|
|
+ # Look for CPU level
|
|
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
|
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
|
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
|
+ *) echo hppa-unknown-linux-gnu ;;
|
|
+ esac
|
|
+ exit ;;
|
|
+ ppc64:Linux:*:*)
|
|
+ echo powerpc64-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ ppc:Linux:*:*)
|
|
+ echo powerpc-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ s390:Linux:*:* | s390x:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-ibm-linux
|
|
+ exit ;;
|
|
+ sh64*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ sh*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ sparc:Linux:*:* | sparc64:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ vax:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-dec-linux-gnu
|
|
+ exit ;;
|
|
+ x86_64:Linux:*:*)
|
|
+ echo x86_64-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ xtensa*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ i*86:DYNIX/ptx:4*:*)
|
|
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
|
|
+ # earlier versions are messed up and put the nodename in both
|
|
+ # sysname and nodename.
|
|
+ echo i386-sequent-sysv4
|
|
+ exit ;;
|
|
+ i*86:UNIX_SV:4.2MP:2.*)
|
|
+ # Unixware is an offshoot of SVR4, but it has its own version
|
|
+ # number series starting with 2...
|
|
+ # I am not positive that other SVR4 systems won't match this,
|
|
+ # I just have to hope. -- rms.
|
|
+ # Use sysv4.2uw... so that sysv4* matches it.
|
|
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
|
+ exit ;;
|
|
+ i*86:OS/2:*:*)
|
|
+ # If we were able to find `uname', then EMX Unix compatibility
|
|
+ # is probably installed.
|
|
+ echo ${UNAME_MACHINE}-pc-os2-emx
|
|
+ exit ;;
|
|
+ i*86:XTS-300:*:STOP)
|
|
+ echo ${UNAME_MACHINE}-unknown-stop
|
|
+ exit ;;
|
|
+ i*86:atheos:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-atheos
|
|
+ exit ;;
|
|
+ i*86:syllable:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-syllable
|
|
+ exit ;;
|
|
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
|
|
+ echo i386-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ i*86:*DOS:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
|
+ exit ;;
|
|
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
|
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
|
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
|
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
|
+ fi
|
|
+ exit ;;
|
|
+ i*86:*:5:[678]*)
|
|
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
|
|
+ case `/bin/uname -X | grep "^Machine"` in
|
|
+ *486*) UNAME_MACHINE=i486 ;;
|
|
+ *Pentium) UNAME_MACHINE=i586 ;;
|
|
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
|
|
+ esac
|
|
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
|
|
+ exit ;;
|
|
+ i*86:*:3.2:*)
|
|
+ if test -f /usr/options/cb.name; then
|
|
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
|
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
|
+ elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV>
|
|
+ echo i586-unisys-sysv4
|
|
+ exit ;;
|
|
+ *:UNIX_System_V:4*:FTX*)
|
|
+ # From Gerald Hewes <hewes@openmarket.com>.
|
|
+ # How about differentiating between stratus architectures? -djm
|
|
+ echo hppa1.1-stratus-sysv4
|
|
+ exit ;;
|
|
+ *:*:*:FTX*)
|
|
+ # From seanf@swdc.stratus.com.
|
|
+ echo i860-stratus-sysv4
|
|
+ exit ;;
|
|
+ i*86:VOS:*:*)
|
|
+ # From Paul.Green@stratus.com.
|
|
+ echo ${UNAME_MACHINE}-stratus-vos
|
|
+ exit ;;
|
|
+ *:VOS:*:*)
|
|
+ # From Paul.Green@stratus.com.
|
|
+ echo hppa1.1-stratus-vos
|
|
+ exit ;;
|
|
+ mc68*:A/UX:*:*)
|
|
+ echo m68k-apple-aux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ news*:NEWS-OS:6*:*)
|
|
+ echo mips-sony-newsos6
|
|
+ exit ;;
|
|
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
|
+ if [ -d /usr/nec ]; then
|
|
+ echo mips-nec-sysv${UNAME_RELEASE}
|
|
+ else
|
|
+ echo mips-unknown-sysv${UNAME_RELEASE}
|
|
+ fi
|
|
+ exit ;;
|
|
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
|
|
+ echo powerpc-be-beos
|
|
+ exit ;;
|
|
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
|
|
+ echo powerpc-apple-beos
|
|
+ exit ;;
|
|
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
|
|
+ echo i586-pc-beos
|
|
+ exit ;;
|
|
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
|
+ echo i586-pc-haiku
|
|
+ exit ;;
|
|
+ SX-4:SUPER-UX:*:*)
|
|
+ echo sx4-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-5:SUPER-UX:*:*)
|
|
+ echo sx5-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-6:SUPER-UX:*:*)
|
|
+ echo sx6-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-7:SUPER-UX:*:*)
|
|
+ echo sx7-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-8:SUPER-UX:*:*)
|
|
+ echo sx8-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-8R:SUPER-UX:*:*)
|
|
+ echo sx8r-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ Power*:Rhapsody:*:*)
|
|
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Rhapsody:*:*)
|
|
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Darwin:*:*)
|
|
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
|
+ case $UNAME_PROCESSOR in
|
|
+ i386)
|
|
+ eval $set_cc_for_build
|
|
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
|
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
|
|
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
|
+ grep IS_64BIT_ARCH >/dev/null
|
|
+ then
|
|
+ UNAME_PROCESSOR="x86_64"
|
|
+ fi
|
|
+ fi ;;
|
|
+ unknown) UNAME_PROCESSOR=powerpc ;;
|
|
+ esac
|
|
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
|
|
+ UNAME_PROCESSOR=`uname -p`
|
|
+ if test "$UNAME_PROCESSOR" = "x86"; then
|
|
+ UNAME_PROCESSOR=i386
|
|
+ UNAME_MACHINE=pc
|
|
+ fi
|
|
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:QNX:*:4*)
|
|
+ echo i386-pc-qnx
|
|
+ exit ;;
|
|
+ NSE-?:NONSTOP_KERNEL:*:*)
|
|
+ echo nse-tandem-nsk${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ NSR-?:NONSTOP_KERNEL:*:*)
|
|
+ echo nsr-tandem-nsk${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:NonStop-UX:*:*)
|
|
+ echo mips-compaq-nonstopux
|
|
+ exit ;;
|
|
+ BS2000:POSIX*:*:*)
|
|
+ echo bs2000-siemens-sysv
|
|
+ exit ;;
|
|
+ DS/*:UNIX_System_V:*:*)
|
|
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Plan9:*:*)
|
|
+ # "uname -m" is not consistent, so use $cputype instead. 386
|
|
+ # is converted to i386 for consistency with other x86
|
|
+ # operating systems.
|
|
+ if test "$cputype" = "386"; then
|
|
+ UNAME_MACHINE=i386
|
|
+ else
|
|
+ UNAME_MACHINE="$cputype"
|
|
+ fi
|
|
+ echo ${UNAME_MACHINE}-unknown-plan9
|
|
+ exit ;;
|
|
+ *:TOPS-10:*:*)
|
|
+ echo pdp10-unknown-tops10
|
|
+ exit ;;
|
|
+ *:TENEX:*:*)
|
|
+ echo pdp10-unknown-tenex
|
|
+ exit ;;
|
|
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
|
|
+ echo pdp10-dec-tops20
|
|
+ exit ;;
|
|
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
|
|
+ echo pdp10-xkl-tops20
|
|
+ exit ;;
|
|
+ *:TOPS-20:*:*)
|
|
+ echo pdp10-unknown-tops20
|
|
+ exit ;;
|
|
+ *:ITS:*:*)
|
|
+ echo pdp10-unknown-its
|
|
+ exit ;;
|
|
+ SEI:*:*:SEIUX)
|
|
+ echo mips-sei-seiux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:DragonFly:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
|
+ exit ;;
|
|
+ *:*VMS:*:*)
|
|
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
|
+ case "${UNAME_MACHINE}" in
|
|
+ A*) echo alpha-dec-vms ; exit ;;
|
|
+ I*) echo ia64-dec-vms ; exit ;;
|
|
+ V*) echo vax-dec-vms ; exit ;;
|
|
+ esac ;;
|
|
+ *:XENIX:*:SysV)
|
|
+ echo i386-pc-xenix
|
|
+ exit ;;
|
|
+ i*86:skyos:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
|
|
+ exit ;;
|
|
+ i*86:rdos:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-rdos
|
|
+ exit ;;
|
|
+ i*86:AROS:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-aros
|
|
+ exit ;;
|
|
+esac
|
|
+
|
|
+#echo '(No uname command or uname output not recognized.)' 1>&2
|
|
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
|
+
|
|
+eval $set_cc_for_build
|
|
+cat >$dummy.c <<EOF
|
|
+#ifdef _SEQUENT_
|
|
+# include <sys/types.h>
|
|
+# include <sys/utsname.h>
|
|
+#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 <sys/param.h>
|
|
+ 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 <sys/param.h>
|
|
+# 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 <<EOF
|
|
+$0: unable to guess system type
|
|
+
|
|
+This script, last modified $timestamp, has failed to recognize
|
|
+the operating system you are using. It is advised that you
|
|
+download the most up to date version of the config scripts from
|
|
+
|
|
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
|
+and
|
|
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
|
|
+
|
|
+If the version you run ($0) is already up to date, please
|
|
+send the following data and any information you think might be
|
|
+pertinent to <config-patches@gnu.org> 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:
|
|
Index: libffi/config.sub
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/config.sub
|
|
@@ -0,0 +1,1702 @@
|
|
+#! /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
|
|
+# Free Software Foundation, Inc.
|
|
+
|
|
+timestamp='2009-11-07'
|
|
+
|
|
+# This file is (in principle) common to ALL GNU software.
|
|
+# The presence of a machine in this file suggests that SOME GNU software
|
|
+# can handle that machine. It does not imply ALL GNU software can.
|
|
+#
|
|
+# This file is free software; you can redistribute it and/or modify
|
|
+# it under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
|
+# 02110-1301, USA.
|
|
+#
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+
|
|
+# Please send patches to <config-patches@gnu.org>. 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 <config-patches@gnu.org>."
|
|
+
|
|
+version="\
|
|
+GNU config.sub ($timestamp)
|
|
+
|
|
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
|
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
|
+
|
|
+This is free software; see the source for copying conditions. There is NO
|
|
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
|
+
|
|
+help="
|
|
+Try \`$me --help' for more information."
|
|
+
|
|
+# Parse command line
|
|
+while test $# -gt 0 ; do
|
|
+ case $1 in
|
|
+ --time-stamp | --time* | -t )
|
|
+ echo "$timestamp" ; exit ;;
|
|
+ --version | -v )
|
|
+ echo "$version" ; exit ;;
|
|
+ --help | --h* | -h )
|
|
+ echo "$usage"; exit ;;
|
|
+ -- ) # Stop option processing
|
|
+ shift; break ;;
|
|
+ - ) # Use stdin as input.
|
|
+ break ;;
|
|
+ -* )
|
|
+ echo "$me: invalid option $1$help"
|
|
+ exit 1 ;;
|
|
+
|
|
+ *local*)
|
|
+ # First pass through any local machine types.
|
|
+ echo $1
|
|
+ exit ;;
|
|
+
|
|
+ * )
|
|
+ break ;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+case $# in
|
|
+ 0) echo "$me: missing argument$help" >&2
|
|
+ exit 1;;
|
|
+ 1) ;;
|
|
+ *) echo "$me: too many arguments$help" >&2
|
|
+ exit 1;;
|
|
+esac
|
|
+
|
|
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
|
+# Here we must recognize all the valid KERNEL-OS combinations.
|
|
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
|
+case $maybe_os in
|
|
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
|
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
|
+ kopensolaris*-gnu* | \
|
|
+ storm-chaos* | os2-emx* | rtmk-nova*)
|
|
+ os=-$maybe_os
|
|
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
|
+ ;;
|
|
+ *)
|
|
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
|
+ if [ $basic_machine != $1 ]
|
|
+ then os=`echo $1 | sed 's/.*-/-/'`
|
|
+ else os=; fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+### Let's recognize common machines as not being operating systems so
|
|
+### that things like config.sub decstation-3100 work. We also
|
|
+### recognize some manufacturers as not being operating systems, so we
|
|
+### can provide default operating systems below.
|
|
+case $os in
|
|
+ -sun*os*)
|
|
+ # Prevent following clause from handling this invalid input.
|
|
+ ;;
|
|
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
|
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
|
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
|
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
|
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
|
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
|
+ -apple | -axis | -knuth | -cray | -microblaze)
|
|
+ os=
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -bluegene*)
|
|
+ os=-cnk
|
|
+ ;;
|
|
+ -sim | -cisco | -oki | -wec | -winbond)
|
|
+ os=
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -scout)
|
|
+ ;;
|
|
+ -wrs)
|
|
+ os=-vxworks
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -chorusos*)
|
|
+ os=-chorusos
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -chorusrdb)
|
|
+ os=-chorusrdb
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -hiux*)
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ -sco6)
|
|
+ os=-sco5v6
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco5)
|
|
+ os=-sco3.2v5
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco4)
|
|
+ os=-sco3.2v4
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco3.2.[4-9]*)
|
|
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco3.2v[4-9]*)
|
|
+ # Don't forget version if it is 3.2v4 or newer.
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco5v6*)
|
|
+ # Don't forget version if it is 3.2v4 or newer.
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco*)
|
|
+ os=-sco3.2v2
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -udk*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -isc)
|
|
+ os=-isc2.2
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -clix*)
|
|
+ basic_machine=clipper-intergraph
|
|
+ ;;
|
|
+ -isc*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -lynx*)
|
|
+ os=-lynxos
|
|
+ ;;
|
|
+ -ptx*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
|
+ ;;
|
|
+ -windowsnt*)
|
|
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
|
+ ;;
|
|
+ -psos*)
|
|
+ os=-psos
|
|
+ ;;
|
|
+ -mint | -mint[0-9]*)
|
|
+ basic_machine=m68k-atari
|
|
+ os=-mint
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Decode aliases for certain CPU-COMPANY combinations.
|
|
+case $basic_machine in
|
|
+ # Recognize the basic CPU types without company name.
|
|
+ # Some are omitted here because they have special meanings below.
|
|
+ 1750a | 580 \
|
|
+ | a29k \
|
|
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
|
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
|
+ | am33_2.0 \
|
|
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
|
+ | bfin \
|
|
+ | c4x | clipper \
|
|
+ | d10v | d30v | dlx | dsp16xx \
|
|
+ | fido | fr30 | frv \
|
|
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
|
+ | i370 | i860 | i960 | ia64 \
|
|
+ | ip2k | iq2000 \
|
|
+ | lm32 \
|
|
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
|
|
+ | maxq | mb | microblaze | mcore | mep | metag \
|
|
+ | mips | mipsbe | mipseb | mipsel | mipsle \
|
|
+ | mips16 \
|
|
+ | mips64 | mips64el \
|
|
+ | mips64octeon | mips64octeonel \
|
|
+ | mips64orion | mips64orionel \
|
|
+ | mips64r5900 | mips64r5900el \
|
|
+ | mips64vr | mips64vrel \
|
|
+ | mips64vr4100 | mips64vr4100el \
|
|
+ | mips64vr4300 | mips64vr4300el \
|
|
+ | mips64vr5000 | mips64vr5000el \
|
|
+ | mips64vr5900 | mips64vr5900el \
|
|
+ | mipsisa32 | mipsisa32el \
|
|
+ | mipsisa32r2 | mipsisa32r2el \
|
|
+ | mipsisa64 | mipsisa64el \
|
|
+ | mipsisa64r2 | mipsisa64r2el \
|
|
+ | mipsisa64sb1 | mipsisa64sb1el \
|
|
+ | mipsisa64sr71k | mipsisa64sr71kel \
|
|
+ | mipstx39 | mipstx39el \
|
|
+ | mn10200 | mn10300 \
|
|
+ | moxie \
|
|
+ | mt \
|
|
+ | msp430 \
|
|
+ | nios | nios2 \
|
|
+ | ns16k | ns32k \
|
|
+ | or32 \
|
|
+ | pdp10 | pdp11 | pj | pjl \
|
|
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
|
+ | pyramid \
|
|
+ | rx \
|
|
+ | score \
|
|
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
|
+ | sh64 | sh64le \
|
|
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
|
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
|
+ | spu | strongarm \
|
|
+ | tahoe | thumb | tic4x | tic80 | tron \
|
|
+ | ubicom32 \
|
|
+ | v850 | v850e \
|
|
+ | we32k \
|
|
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
|
+ | z8k | z80)
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ ;;
|
|
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
|
|
+ # Motorola 68HC11/12.
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ os=-none
|
|
+ ;;
|
|
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
|
+ ;;
|
|
+ ms1)
|
|
+ basic_machine=mt-unknown
|
|
+ ;;
|
|
+
|
|
+ # We use `pc' rather than `unknown'
|
|
+ # because (1) that's what they normally are, and
|
|
+ # (2) the word "unknown" tends to confuse beginning users.
|
|
+ i*86 | x86_64)
|
|
+ basic_machine=$basic_machine-pc
|
|
+ ;;
|
|
+ # Object if more than one company name word.
|
|
+ *-*-*)
|
|
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+ # Recognize the basic CPU types with company name.
|
|
+ 580-* \
|
|
+ | a29k-* \
|
|
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
|
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
|
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
|
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
|
+ | avr-* | avr32-* \
|
|
+ | bfin-* | bs2000-* \
|
|
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
|
+ | clipper-* | craynv-* | cydra-* \
|
|
+ | d10v-* | d30v-* | dlx-* \
|
|
+ | elxsi-* \
|
|
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
|
+ | h8300-* | h8500-* \
|
|
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
|
+ | i*86-* | i860-* | i960-* | ia64-* \
|
|
+ | ip2k-* | iq2000-* \
|
|
+ | lm32-* \
|
|
+ | m32c-* | m32r-* | m32rle-* \
|
|
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
|
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
|
|
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
|
+ | mips16-* \
|
|
+ | mips64-* | mips64el-* \
|
|
+ | mips64octeon-* | mips64octeonel-* \
|
|
+ | mips64orion-* | mips64orionel-* \
|
|
+ | mips64r5900-* | mips64r5900el-* \
|
|
+ | mips64vr-* | mips64vrel-* \
|
|
+ | mips64vr4100-* | mips64vr4100el-* \
|
|
+ | mips64vr4300-* | mips64vr4300el-* \
|
|
+ | mips64vr5000-* | mips64vr5000el-* \
|
|
+ | mips64vr5900-* | mips64vr5900el-* \
|
|
+ | mipsisa32-* | mipsisa32el-* \
|
|
+ | mipsisa32r2-* | mipsisa32r2el-* \
|
|
+ | mipsisa64-* | mipsisa64el-* \
|
|
+ | mipsisa64r2-* | mipsisa64r2el-* \
|
|
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
|
|
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
|
+ | mipstx39-* | mipstx39el-* \
|
|
+ | mmix-* \
|
|
+ | mt-* \
|
|
+ | msp430-* \
|
|
+ | nios-* | nios2-* \
|
|
+ | none-* | np1-* | ns16k-* | ns32k-* \
|
|
+ | orion-* \
|
|
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
|
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
|
+ | pyramid-* \
|
|
+ | romp-* | rs6000-* | rx-* \
|
|
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
|
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
|
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
|
+ | sparclite-* \
|
|
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
|
+ | tahoe-* | thumb-* \
|
|
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
|
|
+ | tron-* \
|
|
+ | ubicom32-* \
|
|
+ | v850-* | v850e-* | vax-* \
|
|
+ | we32k-* \
|
|
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
|
+ | xstormy16-* | xtensa*-* \
|
|
+ | ymp-* \
|
|
+ | z8k-* | z80-*)
|
|
+ ;;
|
|
+ # Recognize the basic CPU types without company name, with glob match.
|
|
+ xtensa*)
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ ;;
|
|
+ # Recognize the various machine names and aliases which stand
|
|
+ # for a CPU type and a company and sometimes even an OS.
|
|
+ 386bsd)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
|
+ basic_machine=m68000-att
|
|
+ ;;
|
|
+ 3b*)
|
|
+ basic_machine=we32k-att
|
|
+ ;;
|
|
+ a29khif)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ abacus)
|
|
+ basic_machine=abacus-unknown
|
|
+ ;;
|
|
+ adobe68k)
|
|
+ basic_machine=m68010-adobe
|
|
+ os=-scout
|
|
+ ;;
|
|
+ alliant | fx80)
|
|
+ basic_machine=fx80-alliant
|
|
+ ;;
|
|
+ altos | altos3068)
|
|
+ basic_machine=m68k-altos
|
|
+ ;;
|
|
+ am29k)
|
|
+ basic_machine=a29k-none
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ amd64)
|
|
+ basic_machine=x86_64-pc
|
|
+ ;;
|
|
+ amd64-*)
|
|
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ amdahl)
|
|
+ basic_machine=580-amdahl
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ amiga | amiga-*)
|
|
+ basic_machine=m68k-unknown
|
|
+ ;;
|
|
+ amigaos | amigados)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-amigaos
|
|
+ ;;
|
|
+ amigaunix | amix)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ apollo68)
|
|
+ basic_machine=m68k-apollo
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ apollo68bsd)
|
|
+ basic_machine=m68k-apollo
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ aros)
|
|
+ basic_machine=i386-pc
|
|
+ os=-aros
|
|
+ ;;
|
|
+ aux)
|
|
+ basic_machine=m68k-apple
|
|
+ os=-aux
|
|
+ ;;
|
|
+ balance)
|
|
+ basic_machine=ns32k-sequent
|
|
+ os=-dynix
|
|
+ ;;
|
|
+ blackfin)
|
|
+ basic_machine=bfin-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ blackfin-*)
|
|
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ bluegene*)
|
|
+ basic_machine=powerpc-ibm
|
|
+ os=-cnk
|
|
+ ;;
|
|
+ c90)
|
|
+ basic_machine=c90-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ cegcc)
|
|
+ basic_machine=arm-unknown
|
|
+ os=-cegcc
|
|
+ ;;
|
|
+ convex-c1)
|
|
+ basic_machine=c1-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c2)
|
|
+ basic_machine=c2-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c32)
|
|
+ basic_machine=c32-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c34)
|
|
+ basic_machine=c34-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c38)
|
|
+ basic_machine=c38-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ cray | j90)
|
|
+ basic_machine=j90-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ craynv)
|
|
+ basic_machine=craynv-cray
|
|
+ os=-unicosmp
|
|
+ ;;
|
|
+ cr16)
|
|
+ basic_machine=cr16-unknown
|
|
+ os=-elf
|
|
+ ;;
|
|
+ crds | unos)
|
|
+ basic_machine=m68k-crds
|
|
+ ;;
|
|
+ crisv32 | crisv32-* | etraxfs*)
|
|
+ basic_machine=crisv32-axis
|
|
+ ;;
|
|
+ cris | cris-* | etrax*)
|
|
+ basic_machine=cris-axis
|
|
+ ;;
|
|
+ crx)
|
|
+ basic_machine=crx-unknown
|
|
+ os=-elf
|
|
+ ;;
|
|
+ da30 | da30-*)
|
|
+ basic_machine=m68k-da30
|
|
+ ;;
|
|
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
|
+ basic_machine=mips-dec
|
|
+ ;;
|
|
+ decsystem10* | dec10*)
|
|
+ basic_machine=pdp10-dec
|
|
+ os=-tops10
|
|
+ ;;
|
|
+ decsystem20* | dec20*)
|
|
+ basic_machine=pdp10-dec
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ delta | 3300 | motorola-3300 | motorola-delta \
|
|
+ | 3300-motorola | delta-motorola)
|
|
+ basic_machine=m68k-motorola
|
|
+ ;;
|
|
+ delta88)
|
|
+ basic_machine=m88k-motorola
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ dicos)
|
|
+ basic_machine=i686-pc
|
|
+ os=-dicos
|
|
+ ;;
|
|
+ djgpp)
|
|
+ basic_machine=i586-pc
|
|
+ os=-msdosdjgpp
|
|
+ ;;
|
|
+ dpx20 | dpx20-*)
|
|
+ basic_machine=rs6000-bull
|
|
+ os=-bosx
|
|
+ ;;
|
|
+ dpx2* | dpx2*-bull)
|
|
+ basic_machine=m68k-bull
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ ebmon29k)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-ebmon
|
|
+ ;;
|
|
+ elxsi)
|
|
+ basic_machine=elxsi-elxsi
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ encore | umax | mmax)
|
|
+ basic_machine=ns32k-encore
|
|
+ ;;
|
|
+ es1800 | OSE68k | ose68k | ose | OSE)
|
|
+ basic_machine=m68k-ericsson
|
|
+ os=-ose
|
|
+ ;;
|
|
+ fx2800)
|
|
+ basic_machine=i860-alliant
|
|
+ ;;
|
|
+ genix)
|
|
+ basic_machine=ns32k-ns
|
|
+ ;;
|
|
+ gmicro)
|
|
+ basic_machine=tron-gmicro
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ go32)
|
|
+ basic_machine=i386-pc
|
|
+ os=-go32
|
|
+ ;;
|
|
+ h3050r* | hiux*)
|
|
+ basic_machine=hppa1.1-hitachi
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ h8300hms)
|
|
+ basic_machine=h8300-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ h8300xray)
|
|
+ basic_machine=h8300-hitachi
|
|
+ os=-xray
|
|
+ ;;
|
|
+ h8500hms)
|
|
+ basic_machine=h8500-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ harris)
|
|
+ basic_machine=m88k-harris
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ hp300-*)
|
|
+ basic_machine=m68k-hp
|
|
+ ;;
|
|
+ hp300bsd)
|
|
+ basic_machine=m68k-hp
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ hp300hpux)
|
|
+ basic_machine=m68k-hp
|
|
+ os=-hpux
|
|
+ ;;
|
|
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hp9k2[0-9][0-9] | hp9k31[0-9])
|
|
+ basic_machine=m68000-hp
|
|
+ ;;
|
|
+ hp9k3[2-9][0-9])
|
|
+ basic_machine=m68k-hp
|
|
+ ;;
|
|
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k78[0-9] | hp78[0-9])
|
|
+ # FIXME: really hppa2.0-hp
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
|
|
+ # FIXME: really hppa2.0-hp
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[0-9][13679] | hp8[0-9][13679])
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hppa-next)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ hppaosf)
|
|
+ basic_machine=hppa1.1-hp
|
|
+ os=-osf
|
|
+ ;;
|
|
+ hppro)
|
|
+ basic_machine=hppa1.1-hp
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ i370-ibm* | ibm*)
|
|
+ basic_machine=i370-ibm
|
|
+ ;;
|
|
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
|
+ i*86v32)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv32
|
|
+ ;;
|
|
+ i*86v4*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ i*86v)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ i*86sol2)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ i386mach)
|
|
+ basic_machine=i386-mach
|
|
+ os=-mach
|
|
+ ;;
|
|
+ i386-vsta | vsta)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-vsta
|
|
+ ;;
|
|
+ iris | iris4d)
|
|
+ basic_machine=mips-sgi
|
|
+ case $os in
|
|
+ -irix*)
|
|
+ ;;
|
|
+ *)
|
|
+ os=-irix4
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ isi68 | isi)
|
|
+ basic_machine=m68k-isi
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ m68knommu)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ m68knommu-*)
|
|
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ m88k-omron*)
|
|
+ basic_machine=m88k-omron
|
|
+ ;;
|
|
+ magnum | m3230)
|
|
+ basic_machine=mips-mips
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ merlin)
|
|
+ basic_machine=ns32k-utek
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ microblaze)
|
|
+ basic_machine=microblaze-xilinx
|
|
+ ;;
|
|
+ mingw32)
|
|
+ basic_machine=i386-pc
|
|
+ os=-mingw32
|
|
+ ;;
|
|
+ mingw32ce)
|
|
+ basic_machine=arm-unknown
|
|
+ os=-mingw32ce
|
|
+ ;;
|
|
+ miniframe)
|
|
+ basic_machine=m68000-convergent
|
|
+ ;;
|
|
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
|
|
+ basic_machine=m68k-atari
|
|
+ os=-mint
|
|
+ ;;
|
|
+ mips3*-*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
|
+ ;;
|
|
+ mips3*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
|
+ ;;
|
|
+ monitor)
|
|
+ basic_machine=m68k-rom68k
|
|
+ os=-coff
|
|
+ ;;
|
|
+ morphos)
|
|
+ basic_machine=powerpc-unknown
|
|
+ os=-morphos
|
|
+ ;;
|
|
+ msdos)
|
|
+ basic_machine=i386-pc
|
|
+ os=-msdos
|
|
+ ;;
|
|
+ ms1-*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
|
+ ;;
|
|
+ mvs)
|
|
+ basic_machine=i370-ibm
|
|
+ os=-mvs
|
|
+ ;;
|
|
+ ncr3000)
|
|
+ basic_machine=i486-ncr
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ netbsd386)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-netbsd
|
|
+ ;;
|
|
+ netwinder)
|
|
+ basic_machine=armv4l-rebel
|
|
+ os=-linux
|
|
+ ;;
|
|
+ news | news700 | news800 | news900)
|
|
+ basic_machine=m68k-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ news1000)
|
|
+ basic_machine=m68030-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ news-3600 | risc-news)
|
|
+ basic_machine=mips-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ necv70)
|
|
+ basic_machine=v70-nec
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ next | m*-next )
|
|
+ basic_machine=m68k-next
|
|
+ case $os in
|
|
+ -nextstep* )
|
|
+ ;;
|
|
+ -ns2*)
|
|
+ os=-nextstep2
|
|
+ ;;
|
|
+ *)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ nh3000)
|
|
+ basic_machine=m68k-harris
|
|
+ os=-cxux
|
|
+ ;;
|
|
+ nh[45]000)
|
|
+ basic_machine=m88k-harris
|
|
+ os=-cxux
|
|
+ ;;
|
|
+ nindy960)
|
|
+ basic_machine=i960-intel
|
|
+ os=-nindy
|
|
+ ;;
|
|
+ mon960)
|
|
+ basic_machine=i960-intel
|
|
+ os=-mon960
|
|
+ ;;
|
|
+ nonstopux)
|
|
+ basic_machine=mips-compaq
|
|
+ os=-nonstopux
|
|
+ ;;
|
|
+ np1)
|
|
+ basic_machine=np1-gould
|
|
+ ;;
|
|
+ nsr-tandem)
|
|
+ basic_machine=nsr-tandem
|
|
+ ;;
|
|
+ op50n-* | op60c-*)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ openrisc | openrisc-*)
|
|
+ basic_machine=or32-unknown
|
|
+ ;;
|
|
+ os400)
|
|
+ basic_machine=powerpc-ibm
|
|
+ os=-os400
|
|
+ ;;
|
|
+ OSE68000 | ose68000)
|
|
+ basic_machine=m68000-ericsson
|
|
+ os=-ose
|
|
+ ;;
|
|
+ os68k)
|
|
+ basic_machine=m68k-none
|
|
+ os=-os68k
|
|
+ ;;
|
|
+ pa-hitachi)
|
|
+ basic_machine=hppa1.1-hitachi
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ paragon)
|
|
+ basic_machine=i860-intel
|
|
+ os=-osf
|
|
+ ;;
|
|
+ parisc)
|
|
+ basic_machine=hppa-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ parisc-*)
|
|
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ pbd)
|
|
+ basic_machine=sparc-tti
|
|
+ ;;
|
|
+ pbb)
|
|
+ basic_machine=m68k-tti
|
|
+ ;;
|
|
+ pc532 | pc532-*)
|
|
+ basic_machine=ns32k-pc532
|
|
+ ;;
|
|
+ pc98)
|
|
+ basic_machine=i386-pc
|
|
+ ;;
|
|
+ pc98-*)
|
|
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentium | p5 | k5 | k6 | nexgen | viac3)
|
|
+ basic_machine=i586-pc
|
|
+ ;;
|
|
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
|
+ basic_machine=i686-pc
|
|
+ ;;
|
|
+ pentiumii | pentium2 | pentiumiii | pentium3)
|
|
+ basic_machine=i686-pc
|
|
+ ;;
|
|
+ pentium4)
|
|
+ basic_machine=i786-pc
|
|
+ ;;
|
|
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
|
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
|
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
|
|
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentium4-*)
|
|
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pn)
|
|
+ basic_machine=pn-gould
|
|
+ ;;
|
|
+ power) basic_machine=power-ibm
|
|
+ ;;
|
|
+ ppc) basic_machine=powerpc-unknown
|
|
+ ;;
|
|
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppcle | powerpclittle | ppc-le | powerpc-little)
|
|
+ basic_machine=powerpcle-unknown
|
|
+ ;;
|
|
+ ppcle-* | powerpclittle-*)
|
|
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppc64) basic_machine=powerpc64-unknown
|
|
+ ;;
|
|
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
|
+ basic_machine=powerpc64le-unknown
|
|
+ ;;
|
|
+ ppc64le-* | powerpc64little-*)
|
|
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ps2)
|
|
+ basic_machine=i386-ibm
|
|
+ ;;
|
|
+ pw32)
|
|
+ basic_machine=i586-unknown
|
|
+ os=-pw32
|
|
+ ;;
|
|
+ rdos)
|
|
+ basic_machine=i386-pc
|
|
+ os=-rdos
|
|
+ ;;
|
|
+ rom68k)
|
|
+ basic_machine=m68k-rom68k
|
|
+ os=-coff
|
|
+ ;;
|
|
+ rm[46]00)
|
|
+ basic_machine=mips-siemens
|
|
+ ;;
|
|
+ rtpc | rtpc-*)
|
|
+ basic_machine=romp-ibm
|
|
+ ;;
|
|
+ s390 | s390-*)
|
|
+ basic_machine=s390-ibm
|
|
+ ;;
|
|
+ s390x | s390x-*)
|
|
+ basic_machine=s390x-ibm
|
|
+ ;;
|
|
+ sa29200)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ sb1)
|
|
+ basic_machine=mipsisa64sb1-unknown
|
|
+ ;;
|
|
+ sb1el)
|
|
+ basic_machine=mipsisa64sb1el-unknown
|
|
+ ;;
|
|
+ sde)
|
|
+ basic_machine=mipsisa32-sde
|
|
+ os=-elf
|
|
+ ;;
|
|
+ sei)
|
|
+ basic_machine=mips-sei
|
|
+ os=-seiux
|
|
+ ;;
|
|
+ sequent)
|
|
+ basic_machine=i386-sequent
|
|
+ ;;
|
|
+ sh)
|
|
+ basic_machine=sh-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ sh5el)
|
|
+ basic_machine=sh5le-unknown
|
|
+ ;;
|
|
+ sh64)
|
|
+ basic_machine=sh64-unknown
|
|
+ ;;
|
|
+ sparclite-wrs | simso-wrs)
|
|
+ basic_machine=sparclite-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ sps7)
|
|
+ basic_machine=m68k-bull
|
|
+ os=-sysv2
|
|
+ ;;
|
|
+ spur)
|
|
+ basic_machine=spur-unknown
|
|
+ ;;
|
|
+ st2000)
|
|
+ basic_machine=m68k-tandem
|
|
+ ;;
|
|
+ stratus)
|
|
+ basic_machine=i860-stratus
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ sun2)
|
|
+ basic_machine=m68000-sun
|
|
+ ;;
|
|
+ sun2os3)
|
|
+ basic_machine=m68000-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun2os4)
|
|
+ basic_machine=m68000-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun3os3)
|
|
+ basic_machine=m68k-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun3os4)
|
|
+ basic_machine=m68k-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun4os3)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun4os4)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun4sol2)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ sun3 | sun3-*)
|
|
+ basic_machine=m68k-sun
|
|
+ ;;
|
|
+ sun4)
|
|
+ basic_machine=sparc-sun
|
|
+ ;;
|
|
+ sun386 | sun386i | roadrunner)
|
|
+ basic_machine=i386-sun
|
|
+ ;;
|
|
+ sv1)
|
|
+ basic_machine=sv1-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ symmetry)
|
|
+ basic_machine=i386-sequent
|
|
+ os=-dynix
|
|
+ ;;
|
|
+ t3e)
|
|
+ basic_machine=alphaev5-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ t90)
|
|
+ basic_machine=t90-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ tic54x | c54x*)
|
|
+ basic_machine=tic54x-unknown
|
|
+ os=-coff
|
|
+ ;;
|
|
+ tic55x | c55x*)
|
|
+ basic_machine=tic55x-unknown
|
|
+ os=-coff
|
|
+ ;;
|
|
+ tic6x | c6x*)
|
|
+ basic_machine=tic6x-unknown
|
|
+ os=-coff
|
|
+ ;;
|
|
+ tile*)
|
|
+ basic_machine=tile-unknown
|
|
+ os=-linux-gnu
|
|
+ ;;
|
|
+ tx39)
|
|
+ basic_machine=mipstx39-unknown
|
|
+ ;;
|
|
+ tx39el)
|
|
+ basic_machine=mipstx39el-unknown
|
|
+ ;;
|
|
+ toad1)
|
|
+ basic_machine=pdp10-xkl
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ tower | tower-32)
|
|
+ basic_machine=m68k-ncr
|
|
+ ;;
|
|
+ tpf)
|
|
+ basic_machine=s390x-ibm
|
|
+ os=-tpf
|
|
+ ;;
|
|
+ udi29k)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ ultra3)
|
|
+ basic_machine=a29k-nyu
|
|
+ os=-sym1
|
|
+ ;;
|
|
+ v810 | necv810)
|
|
+ basic_machine=v810-nec
|
|
+ os=-none
|
|
+ ;;
|
|
+ vaxv)
|
|
+ basic_machine=vax-dec
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ vms)
|
|
+ basic_machine=vax-dec
|
|
+ os=-vms
|
|
+ ;;
|
|
+ vpp*|vx|vx-*)
|
|
+ basic_machine=f301-fujitsu
|
|
+ ;;
|
|
+ vxworks960)
|
|
+ basic_machine=i960-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ vxworks68)
|
|
+ basic_machine=m68k-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ vxworks29k)
|
|
+ basic_machine=a29k-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ w65*)
|
|
+ basic_machine=w65-wdc
|
|
+ os=-none
|
|
+ ;;
|
|
+ w89k-*)
|
|
+ basic_machine=hppa1.1-winbond
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ xbox)
|
|
+ basic_machine=i686-pc
|
|
+ os=-mingw32
|
|
+ ;;
|
|
+ xps | xps100)
|
|
+ basic_machine=xps100-honeywell
|
|
+ ;;
|
|
+ ymp)
|
|
+ basic_machine=ymp-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ z8k-*-coff)
|
|
+ basic_machine=z8k-unknown
|
|
+ os=-sim
|
|
+ ;;
|
|
+ z80-*-coff)
|
|
+ basic_machine=z80-unknown
|
|
+ os=-sim
|
|
+ ;;
|
|
+ none)
|
|
+ basic_machine=none-none
|
|
+ os=-none
|
|
+ ;;
|
|
+
|
|
+# Here we handle the default manufacturer of certain CPU types. It is in
|
|
+# some cases the only manufacturer, in others, it is the most popular.
|
|
+ w89k)
|
|
+ basic_machine=hppa1.1-winbond
|
|
+ ;;
|
|
+ op50n)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ ;;
|
|
+ op60c)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ ;;
|
|
+ romp)
|
|
+ basic_machine=romp-ibm
|
|
+ ;;
|
|
+ mmix)
|
|
+ basic_machine=mmix-knuth
|
|
+ ;;
|
|
+ rs6000)
|
|
+ basic_machine=rs6000-ibm
|
|
+ ;;
|
|
+ vax)
|
|
+ basic_machine=vax-dec
|
|
+ ;;
|
|
+ pdp10)
|
|
+ # there are many clones, so DEC is not a safe bet
|
|
+ basic_machine=pdp10-unknown
|
|
+ ;;
|
|
+ pdp11)
|
|
+ basic_machine=pdp11-dec
|
|
+ ;;
|
|
+ we32k)
|
|
+ basic_machine=we32k-att
|
|
+ ;;
|
|
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
|
|
+ basic_machine=sh-unknown
|
|
+ ;;
|
|
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
|
+ basic_machine=sparc-sun
|
|
+ ;;
|
|
+ cydra)
|
|
+ basic_machine=cydra-cydrome
|
|
+ ;;
|
|
+ orion)
|
|
+ basic_machine=orion-highlevel
|
|
+ ;;
|
|
+ orion105)
|
|
+ basic_machine=clipper-highlevel
|
|
+ ;;
|
|
+ mac | mpw | mac-mpw)
|
|
+ basic_machine=m68k-apple
|
|
+ ;;
|
|
+ pmac | pmac-mpw)
|
|
+ basic_machine=powerpc-apple
|
|
+ ;;
|
|
+ *-unknown)
|
|
+ # Make sure to match an already-canonicalized machine name.
|
|
+ ;;
|
|
+ *)
|
|
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Here we canonicalize certain aliases for manufacturers.
|
|
+case $basic_machine in
|
|
+ *-digital*)
|
|
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
|
+ ;;
|
|
+ *-commodore*)
|
|
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Decode manufacturer-specific aliases for certain operating systems.
|
|
+
|
|
+if [ x"$os" != x"" ]
|
|
+then
|
|
+case $os in
|
|
+ # First match some system type aliases
|
|
+ # that might get confused with valid system types.
|
|
+ # -solaris* is a basic system type, with this one exception.
|
|
+ -solaris1 | -solaris1.*)
|
|
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
|
+ ;;
|
|
+ -solaris)
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ -svr4*)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ -unixware*)
|
|
+ os=-sysv4.2uw
|
|
+ ;;
|
|
+ -gnu/linux*)
|
|
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
|
+ ;;
|
|
+ # First accept the basic system types.
|
|
+ # The portable systems comes first.
|
|
+ # Each alternative MUST END IN A *, to match a version number.
|
|
+ # -sysv* is not here because it comes later, after sysvr4.
|
|
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
|
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
|
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
|
+ | -kopensolaris* \
|
|
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
|
+ | -aos* | -aros* \
|
|
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
|
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
|
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
|
+ | -openbsd* | -solidbsd* \
|
|
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
|
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
|
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
|
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
|
+ | -chorusos* | -chorusrdb* | -cegcc* \
|
|
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
|
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
|
+ | -uxpv* | -beos* | -mpeix* | -udk* \
|
|
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
|
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
|
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
|
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
|
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
|
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
|
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -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
|
|
+ ;;
|
|
+ -none)
|
|
+ ;;
|
|
+ *)
|
|
+ # Get rid of the `-' at the beginning of $os.
|
|
+ os=`echo $os | sed 's/[^-]*-//'`
|
|
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+else
|
|
+
|
|
+# Here we handle the default operating systems that come with various machines.
|
|
+# The value should be what the vendor currently ships out the door with their
|
|
+# machine or put another way, the most popular os provided with the machine.
|
|
+
|
|
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
|
+# "-sun"), then you have to tell the case statement up towards the top
|
|
+# that MANUFACTURER isn't an operating system. Otherwise, code above
|
|
+# will signal an error saying that MANUFACTURER isn't an operating
|
|
+# system, and we'll never get to this point.
|
|
+
|
|
+case $basic_machine in
|
|
+ score-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ spu-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ *-acorn)
|
|
+ os=-riscix1.2
|
|
+ ;;
|
|
+ arm*-rebel)
|
|
+ os=-linux
|
|
+ ;;
|
|
+ arm*-semi)
|
|
+ os=-aout
|
|
+ ;;
|
|
+ c4x-* | tic4x-*)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ # This must come before the *-dec entry.
|
|
+ pdp10-*)
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ pdp11-*)
|
|
+ os=-none
|
|
+ ;;
|
|
+ *-dec | vax-*)
|
|
+ os=-ultrix4.2
|
|
+ ;;
|
|
+ m68*-apollo)
|
|
+ os=-domain
|
|
+ ;;
|
|
+ i386-sun)
|
|
+ os=-sunos4.0.2
|
|
+ ;;
|
|
+ m68000-sun)
|
|
+ os=-sunos3
|
|
+ # This also exists in the configure program, but was not the
|
|
+ # default.
|
|
+ # os=-sunos4
|
|
+ ;;
|
|
+ m68*-cisco)
|
|
+ os=-aout
|
|
+ ;;
|
|
+ mep-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ mips*-cisco)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ mips*-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ or32-*)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-tti) # must be before sparc entry or we get the wrong os.
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ sparc-* | *-sun)
|
|
+ os=-sunos4.1.1
|
|
+ ;;
|
|
+ *-be)
|
|
+ os=-beos
|
|
+ ;;
|
|
+ *-haiku)
|
|
+ os=-haiku
|
|
+ ;;
|
|
+ *-ibm)
|
|
+ os=-aix
|
|
+ ;;
|
|
+ *-knuth)
|
|
+ os=-mmixware
|
|
+ ;;
|
|
+ *-wec)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-winbond)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-oki)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-hp)
|
|
+ os=-hpux
|
|
+ ;;
|
|
+ *-hitachi)
|
|
+ os=-hiux
|
|
+ ;;
|
|
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ *-cbm)
|
|
+ os=-amigaos
|
|
+ ;;
|
|
+ *-dg)
|
|
+ os=-dgux
|
|
+ ;;
|
|
+ *-dolphin)
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ m68k-ccur)
|
|
+ os=-rtu
|
|
+ ;;
|
|
+ m88k-omron*)
|
|
+ os=-luna
|
|
+ ;;
|
|
+ *-next )
|
|
+ os=-nextstep
|
|
+ ;;
|
|
+ *-sequent)
|
|
+ os=-ptx
|
|
+ ;;
|
|
+ *-crds)
|
|
+ os=-unos
|
|
+ ;;
|
|
+ *-ns)
|
|
+ os=-genix
|
|
+ ;;
|
|
+ i370-*)
|
|
+ os=-mvs
|
|
+ ;;
|
|
+ *-next)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ *-gould)
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ *-highlevel)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ *-encore)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ *-sgi)
|
|
+ os=-irix
|
|
+ ;;
|
|
+ *-siemens)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ *-masscomp)
|
|
+ os=-rtu
|
|
+ ;;
|
|
+ f30[01]-fujitsu | f700-fujitsu)
|
|
+ os=-uxpv
|
|
+ ;;
|
|
+ *-rom68k)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-*bug)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-apple)
|
|
+ os=-macos
|
|
+ ;;
|
|
+ *-atari*)
|
|
+ os=-mint
|
|
+ ;;
|
|
+ *)
|
|
+ os=-none
|
|
+ ;;
|
|
+esac
|
|
+fi
|
|
+
|
|
+# Here we handle the case where we know the os, and the CPU type, but not the
|
|
+# manufacturer. We pick the logical manufacturer.
|
|
+vendor=unknown
|
|
+case $basic_machine in
|
|
+ *-unknown)
|
|
+ case $os in
|
|
+ -riscix*)
|
|
+ vendor=acorn
|
|
+ ;;
|
|
+ -sunos*)
|
|
+ vendor=sun
|
|
+ ;;
|
|
+ -cnk*|-aix*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -beos*)
|
|
+ vendor=be
|
|
+ ;;
|
|
+ -hpux*)
|
|
+ vendor=hp
|
|
+ ;;
|
|
+ -mpeix*)
|
|
+ vendor=hp
|
|
+ ;;
|
|
+ -hiux*)
|
|
+ vendor=hitachi
|
|
+ ;;
|
|
+ -unos*)
|
|
+ vendor=crds
|
|
+ ;;
|
|
+ -dgux*)
|
|
+ vendor=dg
|
|
+ ;;
|
|
+ -luna*)
|
|
+ vendor=omron
|
|
+ ;;
|
|
+ -genix*)
|
|
+ vendor=ns
|
|
+ ;;
|
|
+ -mvs* | -opened*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -os400*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -ptx*)
|
|
+ vendor=sequent
|
|
+ ;;
|
|
+ -tpf*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -vxsim* | -vxworks* | -windiss*)
|
|
+ vendor=wrs
|
|
+ ;;
|
|
+ -aux*)
|
|
+ vendor=apple
|
|
+ ;;
|
|
+ -hms*)
|
|
+ vendor=hitachi
|
|
+ ;;
|
|
+ -mpw* | -macos*)
|
|
+ vendor=apple
|
|
+ ;;
|
|
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
|
+ vendor=atari
|
|
+ ;;
|
|
+ -vos*)
|
|
+ vendor=stratus
|
|
+ ;;
|
|
+ esac
|
|
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo $basic_machine$os
|
|
+exit
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "timestamp='"
|
|
+# time-stamp-format: "%:y-%02m-%02d"
|
|
+# time-stamp-end: "'"
|
|
+# End:
|
|
Index: libffi/configure
|
|
===================================================================
|
|
--- libffi.orig/configure
|
|
+++ libffi/configure
|
|
@@ -1,12 +1,14 @@
|
|
#! /bin/sh
|
|
# Guess values for system-dependent variables and create Makefiles.
|
|
-# Generated by GNU Autoconf 2.64 for libffi 3.0.9.
|
|
+# Generated by GNU Autoconf 2.65 for libffi 3.0.10rc0.
|
|
#
|
|
# Report bugs to <http://gcc.gnu.org/bugs.html>.
|
|
#
|
|
+#
|
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
|
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
|
|
-# Foundation, Inc.
|
|
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
|
+# Inc.
|
|
+#
|
|
#
|
|
# This configure script is free software; the Free Software Foundation
|
|
# gives unlimited permission to copy, distribute and modify it.
|
|
@@ -171,14 +173,6 @@ test x\$exitcode = x0 || exit 1"
|
|
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
|
|
@@ -534,10 +528,158 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P
|
|
# Sed expression to map a string onto a valid variable name.
|
|
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
|
|
|
|
+
|
|
+
|
|
+# Check that we are running under the correct shell.
|
|
SHELL=${CONFIG_SHELL-/bin/sh}
|
|
|
|
+case X$lt_ECHO in
|
|
+X*--fallback-echo)
|
|
+ # Remove one level of quotation (which was required for Make).
|
|
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+ECHO=${lt_ECHO-echo}
|
|
+if test "X$1" = X--no-reexec; then
|
|
+ # Discard the --no-reexec flag, and continue.
|
|
+ shift
|
|
+elif test "X$1" = X--fallback-echo; then
|
|
+ # Avoid inline document here, it may be left over
|
|
+ :
|
|
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
|
|
+ # Yippee, $ECHO works!
|
|
+ :
|
|
+else
|
|
+ # Restart under the correct shell.
|
|
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
|
|
+fi
|
|
+
|
|
+if test "X$1" = X--fallback-echo; then
|
|
+ # used as fallback echo
|
|
+ shift
|
|
+ cat <<_LT_EOF
|
|
+$*
|
|
+_LT_EOF
|
|
+ exit 0
|
|
+fi
|
|
+
|
|
+# The HP-UX ksh and POSIX shell print the target directory to stdout
|
|
+# if CDPATH is set.
|
|
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
|
+
|
|
+if test -z "$lt_ECHO"; then
|
|
+ if test "X${echo_test_string+set}" != Xset; then
|
|
+ # find a string as large as possible, as long as the shell can cope with it
|
|
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
|
|
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
|
|
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
|
|
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
|
|
+ then
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
|
|
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ :
|
|
+ else
|
|
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
|
|
+ # backslashes. This makes it impossible to quote backslashes using
|
|
+ # echo "$something" | sed 's/\\/\\\\/g'
|
|
+ #
|
|
+ # So, first we look for a working echo in the user's PATH.
|
|
+
|
|
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
|
|
+ for dir in $PATH /usr/ucb; do
|
|
+ IFS="$lt_save_ifs"
|
|
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
|
|
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
|
|
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ ECHO="$dir/echo"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ IFS="$lt_save_ifs"
|
|
+
|
|
+ if test "X$ECHO" = Xecho; then
|
|
+ # We didn't find a better echo, so look for alternatives.
|
|
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
|
|
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ # This shell has a builtin print -r that does the trick.
|
|
+ ECHO='print -r'
|
|
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
|
|
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
|
|
+ # If we have ksh, try running configure again with it.
|
|
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
|
|
+ export ORIGINAL_CONFIG_SHELL
|
|
+ CONFIG_SHELL=/bin/ksh
|
|
+ export CONFIG_SHELL
|
|
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
|
|
+ else
|
|
+ # Try using printf.
|
|
+ ECHO='printf %s\n'
|
|
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
|
|
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ # Cool, printf works
|
|
+ :
|
|
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = 'X\t' &&
|
|
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
|
|
+ export CONFIG_SHELL
|
|
+ SHELL="$CONFIG_SHELL"
|
|
+ export SHELL
|
|
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
|
|
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = 'X\t' &&
|
|
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
|
|
+ test "X$echo_testing_string" = "X$echo_test_string"; then
|
|
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
|
|
+ else
|
|
+ # maybe with a smaller string...
|
|
+ prev=:
|
|
+
|
|
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
|
|
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
|
|
+ then
|
|
+ break
|
|
+ fi
|
|
+ prev="$cmd"
|
|
+ done
|
|
+
|
|
+ if test "$prev" != 'sed 50q "$0"'; then
|
|
+ echo_test_string=`eval $prev`
|
|
+ export echo_test_string
|
|
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
|
|
+ else
|
|
+ # Oops. We lost completely, so just stick with echo.
|
|
+ ECHO=echo
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+fi
|
|
+
|
|
+# Copy echo and quote the copy suitably for passing to libtool from
|
|
+# the Makefile, instead of quoting the original, which is used later.
|
|
+lt_ECHO=$ECHO
|
|
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
|
|
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
|
|
+fi
|
|
+
|
|
|
|
-exec 7<&0 </dev/null 6>&1
|
|
+
|
|
+
|
|
+test -n "$DJDIR" || exec 7<&0 </dev/null
|
|
+exec 6>&1
|
|
|
|
# Name of the host.
|
|
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
|
|
@@ -559,8 +701,8 @@ MAKEFLAGS=
|
|
# Identity of this package.
|
|
PACKAGE_NAME='libffi'
|
|
PACKAGE_TARNAME='libffi'
|
|
-PACKAGE_VERSION='3.0.9'
|
|
-PACKAGE_STRING='libffi 3.0.9'
|
|
+PACKAGE_VERSION='3.0.10rc0'
|
|
+PACKAGE_STRING='libffi 3.0.10rc0'
|
|
PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html'
|
|
PACKAGE_URL=''
|
|
|
|
@@ -640,6 +782,8 @@ POWERPC_AIX_FALSE
|
|
POWERPC_AIX_TRUE
|
|
POWERPC_FALSE
|
|
POWERPC_TRUE
|
|
+MOXIE_FALSE
|
|
+MOXIE_TRUE
|
|
M68K_FALSE
|
|
M68K_TRUE
|
|
M32R_FALSE
|
|
@@ -675,6 +819,7 @@ OTOOL
|
|
LIPO
|
|
NMEDIT
|
|
DSYMUTIL
|
|
+lt_ECHO
|
|
RANLIB
|
|
AR
|
|
OBJDUMP
|
|
@@ -744,7 +889,6 @@ build_os
|
|
build_vendor
|
|
build_cpu
|
|
build
|
|
-multi_basedir
|
|
target_alias
|
|
host_alias
|
|
build_alias
|
|
@@ -786,7 +930,6 @@ SHELL'
|
|
ac_subst_files=''
|
|
ac_user_opts='
|
|
enable_option_checking
|
|
-enable_multilib
|
|
enable_dependency_tracking
|
|
enable_shared
|
|
enable_static
|
|
@@ -1348,7 +1491,7 @@ 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 libffi 3.0.9 to adapt to many kinds of systems.
|
|
+\`configure' configures libffi 3.0.10rc0 to adapt to many kinds of systems.
|
|
|
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
|
|
|
@@ -1419,7 +1562,7 @@ fi
|
|
|
|
if test -n "$ac_init_help"; then
|
|
case $ac_init_help in
|
|
- short | recursive ) echo "Configuration of libffi 3.0.9:";;
|
|
+ short | recursive ) echo "Configuration of libffi 3.0.10rc0:";;
|
|
esac
|
|
cat <<\_ACEOF
|
|
|
|
@@ -1427,7 +1570,6 @@ 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-multilib build many library versions (default)
|
|
--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]
|
|
@@ -1455,7 +1597,7 @@ Some influential environment variables:
|
|
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
|
|
nonstandard directory <lib dir>
|
|
LIBS libraries to pass to the linker, e.g. -l<library>
|
|
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
|
|
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
|
|
you have headers in a nonstandard directory <include dir>
|
|
CCAS assembler compiler command (defaults to CC)
|
|
CCASFLAGS assembler compiler flags (defaults to CFLAGS)
|
|
@@ -1527,8 +1669,8 @@ fi
|
|
test -n "$ac_init_help" && exit $ac_status
|
|
if $ac_init_version; then
|
|
cat <<\_ACEOF
|
|
-libffi configure 3.0.9
|
|
-generated by GNU Autoconf 2.64
|
|
+libffi configure 3.0.10rc0
|
|
+generated by GNU Autoconf 2.65
|
|
|
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
|
This configure script is free software; the Free Software Foundation
|
|
@@ -1575,7 +1717,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
|
|
ac_retval=1
|
|
fi
|
|
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
- return $ac_retval
|
|
+ as_fn_set_status $ac_retval
|
|
|
|
} # ac_fn_c_try_compile
|
|
|
|
@@ -1621,7 +1763,7 @@ fi
|
|
# left behind by Apple's compiler. We do this before executing the actions.
|
|
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
|
|
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
- return $ac_retval
|
|
+ as_fn_set_status $ac_retval
|
|
|
|
} # ac_fn_c_try_link
|
|
|
|
@@ -1689,7 +1831,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
|
|
ac_retval=1
|
|
fi
|
|
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
- return $ac_retval
|
|
+ as_fn_set_status $ac_retval
|
|
|
|
} # ac_fn_c_try_cpp
|
|
|
|
@@ -1731,7 +1873,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
|
|
fi
|
|
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
|
|
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
- return $ac_retval
|
|
+ as_fn_set_status $ac_retval
|
|
|
|
} # ac_fn_c_try_run
|
|
|
|
@@ -2069,15 +2211,15 @@ rm -f conftest.val
|
|
|
|
fi
|
|
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
- return $ac_retval
|
|
+ as_fn_set_status $ac_retval
|
|
|
|
} # ac_fn_c_compute_int
|
|
cat >config.log <<_ACEOF
|
|
This file contains any messages produced by compilers while
|
|
running configure, to aid debugging if configure makes a mistake.
|
|
|
|
-It was created by libffi $as_me 3.0.9, which was
|
|
-generated by GNU Autoconf 2.64. Invocation command line was
|
|
+It was created by libffi $as_me 3.0.10rc0, which was
|
|
+generated by GNU Autoconf 2.65. Invocation command line was
|
|
|
|
$ $0 $@
|
|
|
|
@@ -2330,7 +2472,7 @@ fi
|
|
for ac_site_file in "$ac_site_file1" "$ac_site_file2"
|
|
do
|
|
test "x$ac_site_file" = xNONE && continue
|
|
- if test -r "$ac_site_file"; then
|
|
+ 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
|
|
@@ -2339,9 +2481,9 @@ $as_echo "$as_me: loading site script $a
|
|
done
|
|
|
|
if test -r "$cache_file"; then
|
|
- # Some versions of bash will fail to source /dev/null (special
|
|
- # files actually), so we avoid doing that.
|
|
- if test -f "$cache_file"; then
|
|
+ # 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
|
|
@@ -2423,50 +2565,9 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
|
|
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
|
|
|
|
-
|
|
-
|
|
-
|
|
ac_config_headers="$ac_config_headers fficonfig.h"
|
|
|
|
|
|
-# Default to --enable-multilib
|
|
-# Check whether --enable-multilib was given.
|
|
-if test "${enable_multilib+set}" = set; then :
|
|
- enableval=$enable_multilib; case "$enableval" in
|
|
- yes) multilib=yes ;;
|
|
- no) multilib=no ;;
|
|
- *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
|
|
- esac
|
|
-else
|
|
- multilib=yes
|
|
-fi
|
|
-
|
|
-
|
|
-# We may get other options which we leave undocumented:
|
|
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
|
|
-# See config-ml.in if you want the gory details.
|
|
-
|
|
-if test "$srcdir" = "."; then
|
|
- if test "$with_target_subdir" != "."; then
|
|
- multi_basedir="$srcdir/$with_multisrctop../.."
|
|
- else
|
|
- multi_basedir="$srcdir/$with_multisrctop.."
|
|
- fi
|
|
-else
|
|
- multi_basedir="$srcdir/.."
|
|
-fi
|
|
-
|
|
-
|
|
-# Even if the default multilib is not a cross compilation,
|
|
-# it may be that some of the other multilibs are.
|
|
-if test $cross_compiling = no && test $multilib = yes \
|
|
- && test "x${with_multisubdir}" != x ; then
|
|
- cross_compiling=maybe
|
|
-fi
|
|
-
|
|
-ac_config_commands="$ac_config_commands default-1"
|
|
-
|
|
-
|
|
ac_aux_dir=
|
|
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
|
|
for ac_t in install-sh install.sh shtool; do
|
|
@@ -2919,6 +3020,7 @@ 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
|
|
@@ -2926,7 +3028,6 @@ fi
|
|
# value for MKDIR_P within a source directory, because that will
|
|
# break other packages using the cache if that directory is
|
|
# removed, or if the value is a relative name.
|
|
- test -d ./--version && rmdir ./--version
|
|
MKDIR_P="$ac_install_sh -d"
|
|
fi
|
|
fi
|
|
@@ -3043,7 +3144,7 @@ fi
|
|
|
|
# Define the identity of the package.
|
|
PACKAGE='libffi'
|
|
- VERSION='3.0.9'
|
|
+ VERSION='3.0.10rc0'
|
|
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
@@ -3413,8 +3514,8 @@ $as_echo "$ac_try_echo"; } >&5
|
|
... rest of stderr output deleted ...
|
|
10q' conftest.err >conftest.er1
|
|
cat conftest.er1 >&5
|
|
- rm -f conftest.er1 conftest.err
|
|
fi
|
|
+ rm -f conftest.er1 conftest.err
|
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
test $ac_status = 0; }
|
|
done
|
|
@@ -3431,12 +3532,12 @@ main ()
|
|
}
|
|
_ACEOF
|
|
ac_clean_files_save=$ac_clean_files
|
|
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
|
|
+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 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}: 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:
|
|
@@ -3498,10 +3599,10 @@ test "$ac_cv_exeext" = no && ac_cv_exeex
|
|
else
|
|
ac_file=''
|
|
fi
|
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
|
|
-$as_echo "$ac_file" >&6; }
|
|
if test -z "$ac_file"; then :
|
|
- $as_echo "$as_me: failed program was:" >&5
|
|
+ { $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
|
|
@@ -3509,51 +3610,18 @@ $as_echo "$as_me: error: in \`$ac_pwd':"
|
|
{ as_fn_set_status 77
|
|
as_fn_error "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
|
|
|
|
-# 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 the C compiler works" >&5
|
|
-$as_echo_n "checking whether the C compiler works... " >&6; }
|
|
-# If not cross compiling, check that we can run a simple program.
|
|
-if test "$cross_compiling" != yes; then
|
|
- if { ac_try='./$ac_file'
|
|
- { { case "(($ac_try" in
|
|
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
- *) ac_try_echo=$ac_try;;
|
|
-esac
|
|
-eval ac_try_echo="\"\$as_me:${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: yes" >&5
|
|
-$as_echo "yes" >&6; }
|
|
-
|
|
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
|
|
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
|
|
ac_clean_files=$ac_clean_files_save
|
|
-# Check that the compiler produces executables we can run. If not, either
|
|
-# the compiler is broken, or we cross compile.
|
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
|
|
-$as_echo_n "checking whether we are cross compiling... " >&6; }
|
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
|
|
-$as_echo "$cross_compiling" >&6; }
|
|
-
|
|
{ $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"
|
|
@@ -3586,13 +3654,72 @@ $as_echo "$as_me: error: in \`$ac_pwd':"
|
|
as_fn_error "cannot compute suffix of executables: cannot compile and link
|
|
See \`config.log' for more details." "$LINENO" 5; }
|
|
fi
|
|
-rm -f conftest$ac_cv_exeext
|
|
+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 <stdio.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+FILE *f = fopen ("conftest.out", "w");
|
|
+ return ferror (f) || fclose (f) != 0;
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+ac_clean_files="$ac_clean_files conftest.out"
|
|
+# Check that the compiler produces executables we can run. If not, either
|
|
+# the compiler is broken, or we cross compile.
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
|
|
+$as_echo_n "checking whether we are cross compiling... " >&6; }
|
|
+if test "$cross_compiling" != yes; then
|
|
+ { { ac_try="$ac_link"
|
|
+case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
|
+$as_echo "$ac_try_echo"; } >&5
|
|
+ (eval "$ac_link") 2>&5
|
|
+ ac_status=$?
|
|
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
+ test $ac_status = 0; }
|
|
+ if { ac_try='./conftest$ac_cv_exeext'
|
|
+ { { case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
|
+$as_echo "$ac_try_echo"; } >&5
|
|
+ (eval "$ac_try") 2>&5
|
|
+ ac_status=$?
|
|
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
+ test $ac_status = 0; }; }; then
|
|
+ cross_compiling=no
|
|
+ else
|
|
+ if test "$cross_compiling" = maybe; then
|
|
+ cross_compiling=yes
|
|
+ else
|
|
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
+as_fn_error "cannot run C compiled programs.
|
|
+If you meant to cross compile, use \`--host'.
|
|
+See \`config.log' for more details." "$LINENO" 5; }
|
|
+ fi
|
|
+ fi
|
|
+fi
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
|
|
+$as_echo "$cross_compiling" >&6; }
|
|
+
|
|
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
|
|
+ac_clean_files=$ac_clean_files_save
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
|
|
$as_echo_n "checking for suffix of object files... " >&6; }
|
|
if test "${ac_cv_objext+set}" = set; then :
|
|
@@ -4049,6 +4176,7 @@ fi
|
|
|
|
|
|
|
|
+
|
|
# By default we simply use the C compiler to build assembly code.
|
|
|
|
test "${CCAS+set}" = set || CCAS=$CC
|
|
@@ -4315,8 +4443,8 @@ esac
|
|
|
|
|
|
|
|
-macro_version='2.2.7a'
|
|
-macro_revision='1.3134'
|
|
+macro_version='2.2.6b'
|
|
+macro_revision='1.3017'
|
|
|
|
|
|
|
|
@@ -4332,75 +4460,6 @@ macro_revision='1.3134'
|
|
|
|
ltmain="$ac_aux_dir/ltmain.sh"
|
|
|
|
-# Backslashify metacharacters that are still active within
|
|
-# double-quoted strings.
|
|
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
|
-
|
|
-# Same as above, but do not quote variable references.
|
|
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
|
|
-
|
|
-# Sed substitution to delay expansion of an escaped shell variable in a
|
|
-# double_quote_subst'ed string.
|
|
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
|
|
-
|
|
-# Sed substitution to delay expansion of an escaped single quote.
|
|
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
|
|
-
|
|
-# Sed substitution to avoid accidental globbing in evaled expressions
|
|
-no_glob_subst='s/\*/\\\*/g'
|
|
-
|
|
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
|
|
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
|
|
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
|
|
-
|
|
-{ $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 test "${ac_cv_path_SED+set}" = set; then :
|
|
@@ -4866,11 +4925,8 @@ 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"
|
|
+ if test -n "$ac_tool_prefix"; then
|
|
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
|
|
do
|
|
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
|
|
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
|
|
@@ -4914,7 +4970,7 @@ fi
|
|
fi
|
|
if test -z "$DUMPBIN"; then
|
|
ac_ct_DUMPBIN=$DUMPBIN
|
|
- for ac_prog in dumpbin "link -dump"
|
|
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
|
|
do
|
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
set dummy $ac_prog; ac_word=$2
|
|
@@ -4969,15 +5025,6 @@ esac
|
|
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"
|
|
@@ -4997,13 +5044,13 @@ if test "${lt_cv_nm_interface+set}" = se
|
|
else
|
|
lt_cv_nm_interface="BSD nm"
|
|
echo "int some_variable = 0;" > conftest.$ac_ext
|
|
- (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:5047: $ac_compile\"" >&5)
|
|
(eval "$ac_compile" 2>conftest.err)
|
|
cat conftest.err >&5
|
|
- (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
|
|
+ (eval echo "\"\$as_me:5050: $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)
|
|
+ (eval echo "\"\$as_me:5053: output\"" >&5)
|
|
cat conftest.out >&5
|
|
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
|
|
lt_cv_nm_interface="MS dumpbin"
|
|
@@ -5060,11 +5107,6 @@ else
|
|
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.
|
|
@@ -5129,8 +5171,8 @@ else
|
|
# 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"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
|
|
- = "X$teststring$teststring"; } >/dev/null 2>&1 &&
|
|
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
|
|
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
|
|
test $i != 17 # 1/2 MB should be enough
|
|
do
|
|
i=`expr $i + 1`
|
|
@@ -5401,8 +5443,7 @@ 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
|
|
+ if ( file / ) >/dev/null 2>&1; then
|
|
lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
|
|
lt_cv_file_magic_cmd='func_win32_libid'
|
|
else
|
|
@@ -5411,7 +5452,7 @@ mingw* | pw32*)
|
|
fi
|
|
;;
|
|
|
|
-cegcc*)
|
|
+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'
|
|
@@ -5441,10 +5482,6 @@ 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
|
|
@@ -5453,11 +5490,11 @@ hpux10.20* | hpux11*)
|
|
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_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
|
|
lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
|
|
;;
|
|
*)
|
|
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
|
|
+ lt_cv_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
|
|
@@ -5479,7 +5516,7 @@ irix5* | irix6* | nonstopux*)
|
|
;;
|
|
|
|
# This must be Linux ELF.
|
|
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
+linux* | k*bsd*-gnu)
|
|
lt_cv_deplibs_check_method=pass_all
|
|
;;
|
|
|
|
@@ -5895,18 +5932,6 @@ if test -n "$RANLIB"; then
|
|
old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
|
|
fi
|
|
|
|
-case $host_os in
|
|
- darwin*)
|
|
- lock_old_archive_extraction=yes ;;
|
|
- *)
|
|
- lock_old_archive_extraction=no ;;
|
|
-esac
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
|
|
|
|
|
|
@@ -6076,8 +6101,8 @@ _LT_EOF
|
|
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
|
|
+ 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
|
|
@@ -6231,7 +6256,7 @@ ia64-*-hpux*)
|
|
;;
|
|
*-*-irix6*)
|
|
# Find out which ABI we are using.
|
|
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
|
|
+ echo '#line 6259 "configure"' > conftest.$ac_ext
|
|
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
|
|
(eval $ac_compile) 2>&5
|
|
ac_status=$?
|
|
@@ -6943,36 +6968,6 @@ rm -f core conftest.err conftest.$ac_obj
|
|
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 test "${lt_cv_ld_force_load+set}" = set; 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
|
|
- 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 -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; 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' ;;
|
|
@@ -7000,7 +6995,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
|
|
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
|
|
+ if test "$DSYMUTIL" != ":"; then
|
|
_lt_dsymutil='~$DSYMUTIL $lib || :'
|
|
else
|
|
_lt_dsymutil=
|
|
@@ -7291,8 +7286,6 @@ done
|
|
|
|
|
|
|
|
-
|
|
-
|
|
# Set options
|
|
|
|
|
|
@@ -7445,7 +7438,6 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtoo
|
|
|
|
|
|
|
|
-
|
|
test -z "$LN_S" && LN_S="ln -s"
|
|
|
|
|
|
@@ -7495,6 +7487,19 @@ _ACEOF
|
|
|
|
|
|
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
case $host_os in
|
|
aix3*)
|
|
# AIX sometimes has problems with the GCC collect2 program. For some
|
|
@@ -7507,6 +7512,23 @@ aix3*)
|
|
;;
|
|
esac
|
|
|
|
+# Sed substitution that helps us do robust quoting. It backslashifies
|
|
+# metacharacters that are still active within double-quoted strings.
|
|
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
|
+
|
|
+# Same as above, but do not quote variable references.
|
|
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
|
|
+
|
|
+# Sed substitution to delay expansion of an escaped shell variable in a
|
|
+# double_quote_subst'ed string.
|
|
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
|
|
+
|
|
+# Sed substitution to delay expansion of an escaped single quote.
|
|
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
|
|
+
|
|
+# Sed substitution to avoid accidental globbing in evaled expressions
|
|
+no_glob_subst='s/\*/\\\*/g'
|
|
+
|
|
# Global variables:
|
|
ofile=libtool
|
|
can_build_shared=yes
|
|
@@ -7535,7 +7557,7 @@ for cc_temp in $compiler""; do
|
|
*) break;;
|
|
esac
|
|
done
|
|
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
|
|
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
|
|
|
|
|
|
# Only perform the check for file, if the check method requires it
|
|
@@ -7735,21 +7757,12 @@ _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
|
|
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
|
|
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
|
|
$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
|
|
@@ -7769,15 +7782,15 @@ else
|
|
-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 echo "\"\$as_me:7785: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ echo "$as_me:7789: \$? = $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
|
|
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
|
|
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
|
|
if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
|
|
lt_cv_prog_compiler_rtti_exceptions=yes
|
|
@@ -7855,12 +7868,6 @@ $as_echo_n "checking for $compiler optio
|
|
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
|
|
@@ -7903,13 +7910,6 @@ $as_echo_n "checking for $compiler optio
|
|
lt_prog_compiler_pic='-fPIC'
|
|
;;
|
|
esac
|
|
-
|
|
- case $cc_basename in
|
|
- nvcc*) # Cuda Compiler Driver 2.2
|
|
- lt_prog_compiler_wl='-Xlinker '
|
|
- lt_prog_compiler_pic='-Xcompiler -fPIC'
|
|
- ;;
|
|
- esac
|
|
else
|
|
# PORTME Check for flag to pass linker flags through the system compiler.
|
|
case $host_os in
|
|
@@ -7951,7 +7951,7 @@ $as_echo_n "checking for $compiler optio
|
|
lt_prog_compiler_static='-non_shared'
|
|
;;
|
|
|
|
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
+ linux* | k*bsd*-gnu)
|
|
case $cc_basename in
|
|
# old Intel for x86_64 which still supported -KPIC.
|
|
ecc*)
|
|
@@ -7972,7 +7972,7 @@ $as_echo_n "checking for $compiler optio
|
|
lt_prog_compiler_pic='--shared'
|
|
lt_prog_compiler_static='--static'
|
|
;;
|
|
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
|
|
+ pgcc* | pgf77* | pgf90* | pgf95*)
|
|
# Portland Group compilers (*not* the Pentium gcc compiler,
|
|
# which looks to be a dead project)
|
|
lt_prog_compiler_wl='-Wl,'
|
|
@@ -7984,26 +7984,26 @@ $as_echo_n "checking for $compiler optio
|
|
# 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
|
|
+ xl*)
|
|
+ # IBM XL C 8.0/Fortran 10.1 on PPC
|
|
lt_prog_compiler_wl='-Wl,'
|
|
lt_prog_compiler_pic='-qpic'
|
|
lt_prog_compiler_static='-qstaticlink'
|
|
;;
|
|
*)
|
|
case `$CC -V 2>&1 | sed 5q` in
|
|
- *Sun\ F* | *Sun*Fortran*)
|
|
- # 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\ C*)
|
|
# Sun C 5.9
|
|
lt_prog_compiler_pic='-KPIC'
|
|
lt_prog_compiler_static='-Bstatic'
|
|
lt_prog_compiler_wl='-Wl,'
|
|
;;
|
|
+ *Sun\ F*)
|
|
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ lt_prog_compiler_wl=''
|
|
+ ;;
|
|
esac
|
|
;;
|
|
esac
|
|
@@ -8121,15 +8121,15 @@ else
|
|
-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 echo "\"\$as_me:8124: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8128: \$? = $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
|
|
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
|
|
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
|
|
if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
|
|
lt_cv_prog_compiler_pic_works=yes
|
|
@@ -8177,7 +8177,7 @@ else
|
|
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
|
|
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
|
|
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
|
|
if diff conftest.exp conftest.er2 >/dev/null; then
|
|
lt_cv_prog_compiler_static_works=yes
|
|
@@ -8226,16 +8226,16 @@ else
|
|
-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 echo "\"\$as_me:8229: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8233: \$? = $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
|
|
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
|
|
$SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
|
|
if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
|
|
lt_cv_prog_compiler_c_o=yes
|
|
@@ -8281,16 +8281,16 @@ else
|
|
-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 echo "\"\$as_me:8284: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8288: \$? = $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
|
|
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
|
|
$SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
|
|
if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
|
|
lt_cv_prog_compiler_c_o=yes
|
|
@@ -8403,33 +8403,7 @@ $as_echo_n "checking whether the $compil
|
|
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}'
|
|
|
|
@@ -8447,7 +8421,6 @@ $as_echo_n "checking whether the $compil
|
|
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 ...
|
|
@@ -8463,12 +8436,11 @@ $as_echo_n "checking whether the $compil
|
|
ld_shlibs=no
|
|
cat <<_LT_EOF 1>&2
|
|
|
|
-*** Warning: the GNU linker, at least up to release 2.19, is reported
|
|
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
|
|
*** to be unable to reliably create shared libraries on AIX.
|
|
*** Therefore, libtool is disabling shared libraries support. If you
|
|
-*** really care for shared libraries, you may want to 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.
|
|
+*** really care for shared libraries, you may want to modify your PATH
|
|
+*** so that a non-GNU linker is found, and then restart.
|
|
|
|
_LT_EOF
|
|
fi
|
|
@@ -8504,7 +8476,6 @@ _LT_EOF
|
|
# _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
|
|
@@ -8526,11 +8497,6 @@ _LT_EOF
|
|
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
|
|
@@ -8546,7 +8512,7 @@ _LT_EOF
|
|
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)
|
|
+ gnu* | linux* | tpf* | k*bsd*-gnu)
|
|
tmp_diet=no
|
|
if test "$host_os" = linux-dietlibc; then
|
|
case $cc_basename in
|
|
@@ -8560,12 +8526,11 @@ _LT_EOF
|
|
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'
|
|
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
|
|
tmp_addflag=' $pic_flag'
|
|
;;
|
|
- pgf77* | pgf90* | pgf95* | 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'
|
|
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
|
|
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
|
|
tmp_addflag=' $pic_flag -Mnomain' ;;
|
|
ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
|
|
tmp_addflag=' -i_dynamic' ;;
|
|
@@ -8576,17 +8541,13 @@ _LT_EOF
|
|
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)
|
|
+ xl[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'
|
|
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
|
|
compiler_needs_object=yes
|
|
tmp_sharedflag='-G' ;;
|
|
*Sun\ F*) # Sun Fortran 8.3
|
|
@@ -8602,7 +8563,7 @@ _LT_EOF
|
|
fi
|
|
|
|
case $cc_basename in
|
|
- xlf* | bgf* | bgxlf* | mpixlf*)
|
|
+ xlf*)
|
|
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
|
|
whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
|
|
hardcode_libdir_flag_spec=
|
|
@@ -8733,10 +8694,8 @@ _LT_EOF
|
|
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'
|
|
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
|
|
else
|
|
export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
|
|
fi
|
|
@@ -8854,7 +8813,7 @@ rm -f core conftest.err conftest.$ac_obj
|
|
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
|
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
|
|
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
|
|
else
|
|
if test "$host_cpu" = ia64; then
|
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
|
@@ -8898,13 +8857,8 @@ if test -z "$aix_libpath"; then aix_libp
|
|
# -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
|
|
+ # Exported symbols can be pulled into shared objects from archives
|
|
+ whole_archive_flag_spec='$convenience'
|
|
archive_cmds_need_lc=yes
|
|
# This is similar to how AIX traditionally builds its shared libraries.
|
|
archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
|
|
@@ -8943,7 +8897,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
# 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='
|
|
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
|
|
# The linker will automatically build a .lib file if we build a DLL.
|
|
old_archive_from_new_cmds='true'
|
|
# FIXME: Should let the user specify the lib program.
|
|
@@ -8959,11 +8913,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
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
|
|
+ whole_archive_flag_spec=''
|
|
link_all_deplibs=yes
|
|
allow_undefined_flag="$_lt_dar_allow_undefined"
|
|
case $cc_basename in
|
|
@@ -8971,7 +8921,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
*) _lt_dar_can_shared=$GCC ;;
|
|
esac
|
|
if test "$_lt_dar_can_shared" = "yes"; then
|
|
- output_verbose_link_cmd=func_echo_all
|
|
+ output_verbose_link_cmd=echo
|
|
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
|
|
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
|
|
archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
|
|
@@ -9037,7 +8987,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
;;
|
|
|
|
hpux10*)
|
|
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
|
|
else
|
|
archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
|
|
@@ -9056,7 +9006,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
;;
|
|
|
|
hpux11*)
|
|
- if test "$GCC" = yes && test "$with_gnu_ld" = no; then
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
case $host_cpu in
|
|
hppa*64*)
|
|
archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
@@ -9077,46 +9027,7 @@ if test -z "$aix_libpath"; then aix_libp
|
|
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 test "${lt_cv_prog_compiler__b+set}" = set; 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
|
|
-
|
|
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
|
|
;;
|
|
esac
|
|
fi
|
|
@@ -9144,7 +9055,7 @@ fi
|
|
|
|
irix5* | irix6* | nonstopux*)
|
|
if test "$GCC" = yes; then
|
|
- archive_cmds='$CC -shared $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'
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
# Try to use the -exported_symbol ld option, if it does not
|
|
# work, assume that -exports_file does not work either and
|
|
# implicitly export all symbols.
|
|
@@ -9155,15 +9066,15 @@ fi
|
|
int foo(void) {}
|
|
_ACEOF
|
|
if ac_fn_c_try_link "$LINENO"; then :
|
|
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
|
|
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
|
|
|
|
fi
|
|
rm -f core conftest.err conftest.$ac_objext \
|
|
conftest$ac_exeext conftest.$ac_ext
|
|
LDFLAGS="$save_LDFLAGS"
|
|
else
|
|
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && 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'
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
|
|
fi
|
|
archive_cmds_need_lc='no'
|
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
@@ -9225,17 +9136,17 @@ rm -f core conftest.err conftest.$ac_obj
|
|
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'
|
|
+ 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'
|
|
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
else
|
|
allow_undefined_flag=' -expect_unresolved \*'
|
|
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
fi
|
|
archive_cmds_need_lc='no'
|
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
@@ -9245,13 +9156,13 @@ rm -f core conftest.err conftest.$ac_obj
|
|
osf4* | osf5*) # as osf3* with the addition of -msym flag
|
|
if test "$GCC" = yes; then
|
|
allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
|
|
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
else
|
|
allow_undefined_flag=' -expect_unresolved \*'
|
|
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
|
|
- $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
|
|
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
|
|
|
|
# Both c and cxx compiler support -rpath directly
|
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
|
@@ -9454,50 +9365,44 @@ x|xyes)
|
|
# 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 test "${lt_cv_archive_cmds_need_lc+set}" = set; then :
|
|
- $as_echo_n "(cached) " >&6
|
|
-else
|
|
- $RM conftest*
|
|
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ $RM conftest*
|
|
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
|
|
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
|
|
+ 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
|
|
+ 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
|
|
+ then
|
|
+ archive_cmds_need_lc=no
|
|
+ else
|
|
+ archive_cmds_need_lc=yes
|
|
+ fi
|
|
+ allow_undefined_flag=$lt_save_allow_undefined_flag
|
|
+ else
|
|
+ cat conftest.err 1>&5
|
|
+ fi
|
|
+ $RM conftest*
|
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
|
|
+$as_echo "$archive_cmds_need_lc" >&6; }
|
|
;;
|
|
esac
|
|
fi
|
|
@@ -9668,23 +9573,16 @@ if test "$GCC" = yes; then
|
|
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
|
|
- *\;*)
|
|
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
|
|
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
|
|
# if the path contains ";" then we assume it to be the separator
|
|
# otherwise default to the standard path separator (i.e. ":") - it is
|
|
# assumed that no part of a normal pathname contains ";" but that should
|
|
# okay in the real world where ";" in dirpaths is itself problematic.
|
|
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
|
|
- ;;
|
|
- *)
|
|
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
|
|
- ;;
|
|
- esac
|
|
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
|
|
+ else
|
|
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
|
|
+ fi
|
|
# Ok, now we have the path, separated by spaces, we can step through it
|
|
# and add multilib dir if necessary.
|
|
lt_tmp_lt_search_path_spec=
|
|
@@ -9697,7 +9595,7 @@ if test "$GCC" = yes; then
|
|
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 '
|
|
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
|
|
BEGIN {RS=" "; FS="/|\n";} {
|
|
lt_foo="";
|
|
lt_count=0;
|
|
@@ -9717,13 +9615,7 @@ BEGIN {RS=" "; FS="/|\n";} {
|
|
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`
|
|
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
|
|
else
|
|
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
|
|
fi
|
|
@@ -9811,7 +9703,7 @@ amigaos*)
|
|
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'
|
|
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
|
|
;;
|
|
esac
|
|
;;
|
|
@@ -9864,12 +9756,23 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|
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"
|
|
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
|
|
;;
|
|
mingw* | cegcc*)
|
|
# MinGW DLLs use traditional 'lib' prefix
|
|
soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
|
|
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
|
|
+ # It is most probably a Windows format PATH printed by
|
|
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
|
|
+ # path with ; separators, and with drive letters. We can handle the
|
|
+ # drive letters (cygwin fileutils understands them), so leave them,
|
|
+ # especially as we might pass files found there to a mingw objdump,
|
|
+ # which wouldn't understand a cygwinified path. Ahh.
|
|
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
|
|
+ else
|
|
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
|
|
+ fi
|
|
;;
|
|
pw32*)
|
|
# pw32 DLLs use 'pw' prefix rather than 'lib'
|
|
@@ -9969,19 +9872,6 @@ gnu*)
|
|
hardcode_into_libs=yes
|
|
;;
|
|
|
|
-haiku*)
|
|
- version_type=linux
|
|
- 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/beos/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.
|
|
@@ -10024,10 +9914,8 @@ hpux9* | hpux10* | hpux11*)
|
|
soname_spec='${libname}${release}${shared_ext}$major'
|
|
;;
|
|
esac
|
|
- # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
|
|
+ # 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]*)
|
|
@@ -10085,7 +9973,7 @@ linux*oldld* | linux*aout* | linux*coff*
|
|
;;
|
|
|
|
# This must be Linux ELF.
|
|
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
+linux* | k*bsd*-gnu)
|
|
version_type=linux
|
|
need_lib_prefix=no
|
|
need_version=no
|
|
@@ -10094,17 +9982,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
|
|
shlibpath_var=LD_LIBRARY_PATH
|
|
shlibpath_overrides_runpath=no
|
|
-
|
|
# Some binutils ld are patched to set DT_RUNPATH
|
|
- if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; 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
|
|
+ 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
|
|
@@ -10117,27 +10000,26 @@ main ()
|
|
_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
|
|
+ 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
|
|
+ LDFLAGS=$save_LDFLAGS
|
|
+ libdir=$save_libdir
|
|
|
|
# This implies no fast_install, which is unacceptable.
|
|
# Some rework will be needed to allow for fast_install
|
|
# before this can be enabled.
|
|
hardcode_into_libs=yes
|
|
|
|
+ # Add ABI-specific directories to the system library path.
|
|
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
|
|
+
|
|
# 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"
|
|
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
|
|
fi
|
|
|
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
|
@@ -10439,11 +10321,6 @@ 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=
|
|
@@ -10774,7 +10651,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 10777 "configure"
|
|
+#line 10654 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -10815,13 +10692,7 @@ else
|
|
# 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))
|
|
-void fnord () __attribute__((visibility("default")));
|
|
-#endif
|
|
-
|
|
-void fnord () { int i=42; }
|
|
+void fnord() { int i=42;}
|
|
int main ()
|
|
{
|
|
void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
|
|
@@ -10830,11 +10701,7 @@ int main ()
|
|
if (self)
|
|
{
|
|
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
|
|
- else
|
|
- {
|
|
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
|
|
- else puts (dlerror ());
|
|
- }
|
|
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
|
|
/* dlclose (self); */
|
|
}
|
|
else
|
|
@@ -10880,7 +10747,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 10883 "configure"
|
|
+#line 10750 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -10921,13 +10788,7 @@ else
|
|
# 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))
|
|
-void fnord () __attribute__((visibility("default")));
|
|
-#endif
|
|
-
|
|
-void fnord () { int i=42; }
|
|
+void fnord() { int i=42;}
|
|
int main ()
|
|
{
|
|
void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
|
|
@@ -10936,11 +10797,7 @@ int main ()
|
|
if (self)
|
|
{
|
|
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
|
|
- else
|
|
- {
|
|
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
|
|
- else puts (dlerror ());
|
|
- }
|
|
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
|
|
/* dlclose (self); */
|
|
}
|
|
else
|
|
@@ -11119,6 +10976,7 @@ CC="$lt_save_CC"
|
|
|
|
|
|
|
|
+
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
|
|
$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
|
|
# Check whether --enable-maintainer-mode was given.
|
|
@@ -11330,6 +11188,10 @@ case "$host" in
|
|
|
|
amd64-*-freebsd* | amd64-*-openbsd*)
|
|
TARGET=X86_64; TARGETDIR=x86
|
|
+ ;;
|
|
+
|
|
+ amd64-*-freebsd*)
|
|
+ TARGET=X86_64; TARGETDIR=x86
|
|
;;
|
|
|
|
avr32*-*-*)
|
|
@@ -11539,6 +11401,14 @@ else
|
|
M68K_FALSE=
|
|
fi
|
|
|
|
+ if test x$TARGET = xMOXIE; then
|
|
+ MOXIE_TRUE=
|
|
+ MOXIE_FALSE='#'
|
|
+else
|
|
+ MOXIE_TRUE='#'
|
|
+ MOXIE_FALSE=
|
|
+fi
|
|
+
|
|
if test x$TARGET = xPOWERPC; then
|
|
POWERPC_TRUE=
|
|
POWERPC_FALSE='#'
|
|
@@ -12656,7 +12526,7 @@ ac_config_commands="$ac_config_commands
|
|
ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h"
|
|
|
|
|
|
-ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile"
|
|
+ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc"
|
|
|
|
|
|
cat >confcache <<\_ACEOF
|
|
@@ -12828,6 +12698,10 @@ if test -z "${M68K_TRUE}" && test -z "${
|
|
as_fn_error "conditional \"M68K\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
+if test -z "${MOXIE_TRUE}" && test -z "${MOXIE_FALSE}"; then
|
|
+ as_fn_error "conditional \"MOXIE\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
+fi
|
|
if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then
|
|
as_fn_error "conditional \"POWERPC\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
@@ -13297,8 +13171,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
|
|
# report actual input values of CONFIG_FILES etc. instead of their
|
|
# values after options handling.
|
|
ac_log="
|
|
-This file was extended by libffi $as_me 3.0.9, which was
|
|
-generated by GNU Autoconf 2.64. Invocation command line was
|
|
+This file was extended by libffi $as_me 3.0.10rc0, which was
|
|
+generated by GNU Autoconf 2.65. Invocation command line was
|
|
|
|
CONFIG_FILES = $CONFIG_FILES
|
|
CONFIG_HEADERS = $CONFIG_HEADERS
|
|
@@ -13339,6 +13213,7 @@ 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
|
|
@@ -13364,10 +13239,11 @@ Report bugs to <http://gcc.gnu.org/bugs.
|
|
|
|
_ACEOF
|
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
|
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
|
ac_cs_version="\\
|
|
-libffi config.status 3.0.9
|
|
-configured by $0, generated by GNU Autoconf 2.64,
|
|
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
|
+libffi config.status 3.0.10rc0
|
|
+configured by $0, generated by GNU Autoconf 2.65,
|
|
+ with options \\"\$ac_cs_config\\"
|
|
|
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
|
This config.status script is free software; the Free Software Foundation
|
|
@@ -13405,6 +13281,8 @@ do
|
|
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 )
|
|
@@ -13476,20 +13354,6 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
|
|
#
|
|
# INIT-COMMANDS
|
|
#
|
|
-
|
|
-srcdir="$srcdir"
|
|
-host="$host"
|
|
-target="$target"
|
|
-with_multisubdir="$with_multisubdir"
|
|
-with_multisrctop="$with_multisrctop"
|
|
-with_target_subdir="$with_target_subdir"
|
|
-ac_configure_args="${multilib_arg} ${ac_configure_args}"
|
|
-multi_basedir="$multi_basedir"
|
|
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
|
|
-CC="$CC"
|
|
-CXX="$CXX"
|
|
-GFORTRAN="$GFORTRAN"
|
|
-GCJ="$GCJ"
|
|
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
|
|
|
|
|
|
@@ -13500,143 +13364,131 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac
|
|
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"`'
|
|
-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"`'
|
|
-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"`'
|
|
-AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
|
|
-AR_FLAGS='`$ECHO "$AR_FLAGS" | $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"`'
|
|
-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_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
|
|
-lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $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"`'
|
|
-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_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $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"`'
|
|
-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $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"`'
|
|
-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"`'
|
|
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
|
|
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
|
|
|
|
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 \
|
|
-SED \
|
|
+for var in SED \
|
|
GREP \
|
|
EGREP \
|
|
FGREP \
|
|
@@ -13660,6 +13512,8 @@ lt_cv_sys_global_symbol_pipe \
|
|
lt_cv_sys_global_symbol_to_cdecl \
|
|
lt_cv_sys_global_symbol_to_c_name_address \
|
|
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
|
|
+SHELL \
|
|
+ECHO \
|
|
lt_prog_compiler_no_builtin_flag \
|
|
lt_prog_compiler_wl \
|
|
lt_prog_compiler_pic \
|
|
@@ -13689,13 +13543,12 @@ 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
|
|
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
|
|
*[\\\\\\\`\\"\\\$]*)
|
|
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
|
|
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
|
|
;;
|
|
*)
|
|
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
|
|
@@ -13722,9 +13575,9 @@ postuninstall_cmds \
|
|
finish_cmds \
|
|
sys_lib_search_path_spec \
|
|
sys_lib_dlsearch_path_spec; do
|
|
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
|
|
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
|
|
*[\\\\\\\`\\"\\\$]*)
|
|
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
|
|
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
|
|
;;
|
|
*)
|
|
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
|
|
@@ -13732,6 +13585,12 @@ sys_lib_dlsearch_path_spec; do
|
|
esac
|
|
done
|
|
|
|
+# Fix-up fallback echo if it was mangled by the above quoting rules.
|
|
+case \$lt_ECHO in
|
|
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
|
|
+ ;;
|
|
+esac
|
|
+
|
|
ac_aux_dir='$ac_aux_dir'
|
|
xsi_shell='$xsi_shell'
|
|
lt_shell_append='$lt_shell_append'
|
|
@@ -13762,7 +13621,6 @@ for ac_config_target in $ac_config_targe
|
|
do
|
|
case $ac_config_target in
|
|
"fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;;
|
|
- "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
|
|
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
|
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
|
|
"include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;;
|
|
@@ -13773,6 +13631,7 @@ do
|
|
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
|
"testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
|
|
"man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
|
|
+ "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;;
|
|
|
|
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
|
|
esac
|
|
@@ -13877,7 +13736,7 @@ s/'"$ac_delim"'$//
|
|
t delim
|
|
:nl
|
|
h
|
|
-s/\(.\{148\}\).*/\1/
|
|
+s/\(.\{148\}\)..*/\1/
|
|
t more1
|
|
s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
|
|
p
|
|
@@ -13891,7 +13750,7 @@ s/.\{148\}//
|
|
t nl
|
|
:delim
|
|
h
|
|
-s/\(.\{148\}\).*/\1/
|
|
+s/\(.\{148\}\)..*/\1/
|
|
t more2
|
|
s/["\\]/\\&/g; s/^/"/; s/$/"/
|
|
p
|
|
@@ -14389,14 +14248,6 @@ $as_echo "$as_me: executing $ac_file com
|
|
|
|
|
|
case $ac_file$ac_mode in
|
|
- "default-1":C)
|
|
-# Only add multilib support code if we just rebuilt the top-level
|
|
-# Makefile.
|
|
-case " $CONFIG_FILES " in
|
|
- *" Makefile "*)
|
|
- ac_file=Makefile . ${multi_basedir}/config-ml.in
|
|
- ;;
|
|
-esac ;;
|
|
"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
|
|
@@ -14513,7 +14364,7 @@ $as_echo X"$file" |
|
|
# 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 Free Software Foundation, Inc.
|
|
+# 2006, 2007, 2008 Free Software Foundation, Inc.
|
|
# Written by Gordon Matzigkeit, 1996
|
|
#
|
|
# This file is part of GNU Libtool.
|
|
@@ -14561,12 +14412,6 @@ 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 host system.
|
|
host_alias=$host_alias
|
|
host=$host
|
|
@@ -14616,6 +14461,10 @@ SP2NL=$lt_lt_SP2NL
|
|
# turn newlines into spaces.
|
|
NL2SP=$lt_lt_NL2SP
|
|
|
|
+# How to create reloadable object files.
|
|
+reload_flag=$lt_reload_flag
|
|
+reload_cmds=$lt_reload_cmds
|
|
+
|
|
# An object symbol dumper.
|
|
OBJDUMP=$lt_OBJDUMP
|
|
|
|
@@ -14637,9 +14486,6 @@ 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
|
|
|
|
@@ -14661,6 +14507,12 @@ global_symbol_to_c_name_address_lib_pref
|
|
# The name of the directory that contains temporary libtool files.
|
|
objdir=$objdir
|
|
|
|
+# Shell to use when invoking shell scripts.
|
|
+SHELL=$lt_SHELL
|
|
+
|
|
+# An echo program that does not interpret backslashes.
|
|
+ECHO=$lt_ECHO
|
|
+
|
|
# Used to examine libraries when file_magic_cmd begins with "file".
|
|
MAGIC_CMD=$MAGIC_CMD
|
|
|
|
@@ -14723,9 +14575,6 @@ library_names_spec=$lt_library_names_spe
|
|
# 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
|
|
|
|
@@ -14765,10 +14614,6 @@ 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
|
|
|
|
@@ -15028,7 +14873,7 @@ _LT_EOF
|
|
func_dirname ()
|
|
{
|
|
# Extract subdirectory from the argument.
|
|
- func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
|
|
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
|
|
if test "X$func_dirname_result" = "X${1}"; then
|
|
func_dirname_result="${3}"
|
|
else
|
|
@@ -15039,7 +14884,7 @@ func_dirname ()
|
|
# func_basename file
|
|
func_basename ()
|
|
{
|
|
- func_basename_result=`$ECHO "${1}" | $SED "$basename"`
|
|
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
|
|
}
|
|
|
|
|
|
@@ -15052,8 +14897,10 @@ func_basename ()
|
|
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}\$%%"`;;
|
|
+ .*) func_stripname_result=`$ECHO "X${3}" \
|
|
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
|
|
+ *) func_stripname_result=`$ECHO "X${3}" \
|
|
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
|
|
esac
|
|
}
|
|
|
|
@@ -15064,20 +14911,20 @@ my_sed_long_arg='1s/^-[^=]*=//'
|
|
# func_opt_split
|
|
func_opt_split ()
|
|
{
|
|
- func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
|
|
- func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
|
|
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
|
|
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
|
|
}
|
|
|
|
# func_lo2o object
|
|
func_lo2o ()
|
|
{
|
|
- func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
|
|
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
|
|
}
|
|
|
|
# func_xform libobj-or-source
|
|
func_xform ()
|
|
{
|
|
- func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
|
|
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
|
|
}
|
|
|
|
# func_arith arithmetic-term...
|
|
Index: libffi/configure.ac
|
|
===================================================================
|
|
--- libffi.orig/configure.ac
|
|
+++ libffi/configure.ac
|
|
@@ -1,12 +1,10 @@
|
|
dnl Process this with autoconf to create configure
|
|
|
|
-AC_PREREQ(2.64)
|
|
+AC_PREREQ(2.63)
|
|
|
|
-AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html])
|
|
+AC_INIT([libffi], [3.0.10rc0], [http://gcc.gnu.org/bugs.html])
|
|
AC_CONFIG_HEADERS([fficonfig.h])
|
|
|
|
-AM_ENABLE_MULTILIB(, ..)
|
|
-
|
|
AC_CANONICAL_SYSTEM
|
|
target_alias=${target_alias-$host_alias}
|
|
|
|
@@ -22,13 +20,15 @@ AM_INIT_AUTOMAKE
|
|
m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
|
|
m4_define([_AC_ARG_VAR_PRECIOUS],[])
|
|
AC_PROG_CC
|
|
-m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
|
+m4_undefine([_AC_ARG_VAR_PRECIOUS])
|
|
+m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
|
|
|
AC_SUBST(CFLAGS)
|
|
|
|
AM_PROG_AS
|
|
AM_PROG_CC_C_O
|
|
AC_PROG_LIBTOOL
|
|
+AC_CONFIG_MACRO_DIR([m4])
|
|
|
|
AM_MAINTAINER_MODE
|
|
|
|
@@ -53,6 +53,10 @@ case "$host" in
|
|
|
|
amd64-*-freebsd* | amd64-*-openbsd*)
|
|
TARGET=X86_64; TARGETDIR=x86
|
|
+ ;;
|
|
+
|
|
+ amd64-*-freebsd*)
|
|
+ TARGET=X86_64; TARGETDIR=x86
|
|
;;
|
|
|
|
avr32*-*-*)
|
|
@@ -185,6 +189,7 @@ AM_CONDITIONAL(ALPHA, test x$TARGET = xA
|
|
AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
|
|
AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
|
|
AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
|
|
+AM_CONDITIONAL(MOXIE, test x$TARGET = xMOXIE)
|
|
AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
|
|
AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
|
|
AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
|
|
@@ -444,6 +449,6 @@ test -d src/$TARGETDIR || mkdir src/$TAR
|
|
|
|
AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
|
|
|
|
-AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile)
|
|
+AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc)
|
|
|
|
AC_OUTPUT
|
|
Index: libffi/depcomp
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/depcomp
|
|
@@ -0,0 +1,584 @@
|
|
+#! /bin/sh
|
|
+# depcomp - compile a program generating dependencies as side-effects
|
|
+
|
|
+scriptversion=2006-10-15.18
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 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, write to the Free Software
|
|
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
+# 02110-1301, USA.
|
|
+
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
|
+
|
|
+case $1 in
|
|
+ '')
|
|
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
|
+ exit 1;
|
|
+ ;;
|
|
+ -h | --h*)
|
|
+ cat <<\EOF
|
|
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
|
+
|
|
+Run PROGRAMS ARGS to compile a file, generating dependencies
|
|
+as side-effects.
|
|
+
|
|
+Environment variables:
|
|
+ depmode Dependency tracking mode.
|
|
+ source Source file read by `PROGRAMS ARGS'.
|
|
+ object Object file output by `PROGRAMS ARGS'.
|
|
+ DEPDIR directory where to store dependencies.
|
|
+ depfile Dependency file to output.
|
|
+ tmpdepfile Temporary file to use when outputing dependencies.
|
|
+ libtool Whether libtool is used (yes/no).
|
|
+
|
|
+Report bugs to <bug-automake@gnu.org>.
|
|
+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
|
|
+
|
|
+case "$depmode" in
|
|
+gcc3)
|
|
+## gcc 3 implements dependency tracking that does exactly what
|
|
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
|
+## it if -MD -MP comes after the -MF stuff. Hmm.
|
|
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
|
+## the command line argument order; so add the flags where they
|
|
+## appear in depend2.am. Note that the slowdown incurred here
|
|
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
|
+ *) set fnord "$@" "$arg" ;;
|
|
+ esac
|
|
+ shift # fnord
|
|
+ shift # $arg
|
|
+ done
|
|
+ "$@"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ mv "$tmpdepfile" "$depfile"
|
|
+ ;;
|
|
+
|
|
+gcc)
|
|
+## There are various ways to get dependency output from gcc. Here's
|
|
+## why we pick this rather obscure method:
|
|
+## - Don't want to use -MD because we'd like the dependencies to end
|
|
+## up in a subdir. Having to rename by hand is ugly.
|
|
+## (We might end up doing this anyway to support other compilers.)
|
|
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
|
+## -MM, not -M (despite what the docs say).
|
|
+## - Using -M directly means running the compiler twice (even worse
|
|
+## than renaming).
|
|
+ if test -z "$gccflag"; then
|
|
+ gccflag=-MD,
|
|
+ fi
|
|
+ "$@" -Wp,"$gccflag$tmpdepfile"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+ echo "$object : \\" > "$depfile"
|
|
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
|
+## The second -e expression handles DOS-style file names with drive letters.
|
|
+ sed -e 's/^[^:]*: / /' \
|
|
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
|
+## This next piece of magic avoids the `deleted header file' problem.
|
|
+## The problem is that when a header file which appears in a .P file
|
|
+## is deleted, the dependency causes make to die (because there is
|
|
+## typically no way to rebuild the header). We avoid this by adding
|
|
+## dummy dependencies for each header file. Too bad gcc doesn't do
|
|
+## this for us directly.
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" |
|
|
+## Some versions of gcc put a space before the `:'. On the theory
|
|
+## that the space means something, we add a space to the output as
|
|
+## well.
|
|
+## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+## correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+hp)
|
|
+ # This case exists only to let depend.m4 do its work. It works by
|
|
+ # looking at the text of this script. This case will never be run,
|
|
+ # since it is checked for above.
|
|
+ exit 1
|
|
+ ;;
|
|
+
|
|
+sgi)
|
|
+ if test "$libtool" = yes; then
|
|
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
|
|
+ else
|
|
+ "$@" -MDupdate "$tmpdepfile"
|
|
+ fi
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+
|
|
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
|
+ echo "$object : \\" > "$depfile"
|
|
+
|
|
+ # Clip off the initial element (the dependent). Don't try to be
|
|
+ # clever and replace this with sed code, as IRIX sed won't handle
|
|
+ # lines with more than a fixed number of characters (4096 in
|
|
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
|
+ # the IRIX cc adds comments like `#:fec' to the end of the
|
|
+ # dependency line.
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" \
|
|
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
|
+ tr '
|
|
+' ' ' >> $depfile
|
|
+ echo >> $depfile
|
|
+
|
|
+ # The second pass generates a dummy entry for each header file.
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" \
|
|
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
|
+ >> $depfile
|
|
+ else
|
|
+ # The sourcefile does not contain any dependencies, so just
|
|
+ # store a dummy comment line, to avoid errors with the Makefile
|
|
+ # "include basename.Plo" scheme.
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+aix)
|
|
+ # The C for AIX Compiler uses -M and outputs the dependencies
|
|
+ # in a .u file. In older versions, this file always lives in the
|
|
+ # current directory. Also, the AIX compiler puts `$object:' at the
|
|
+ # start of each line; $object doesn't have directory information.
|
|
+ # Version 6 uses the directory in both cases.
|
|
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
|
+ tmpdepfile="$stripped.u"
|
|
+ if test "$libtool" = yes; then
|
|
+ "$@" -Wc,-M
|
|
+ else
|
|
+ "$@" -M
|
|
+ fi
|
|
+ stat=$?
|
|
+
|
|
+ if test -f "$tmpdepfile"; then :
|
|
+ else
|
|
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
|
+ tmpdepfile="$stripped.u"
|
|
+ fi
|
|
+
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+
|
|
+ if test -f "$tmpdepfile"; then
|
|
+ outname="$stripped.o"
|
|
+ # 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,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
|
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
|
+ else
|
|
+ # The sourcefile does not contain any dependencies, so just
|
|
+ # store a dummy comment line, to avoid errors with the Makefile
|
|
+ # "include basename.Plo" scheme.
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+icc)
|
|
+ # Intel's C compiler understands `-MD -MF file'. However on
|
|
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
|
+ # ICC 7.0 will fill foo.d with something like
|
|
+ # foo.o: sub/foo.c
|
|
+ # foo.o: sub/foo.h
|
|
+ # which is wrong. We want:
|
|
+ # sub/foo.o: sub/foo.c
|
|
+ # sub/foo.o: sub/foo.h
|
|
+ # sub/foo.c:
|
|
+ # sub/foo.h:
|
|
+ # ICC 7.1 will output
|
|
+ # foo.o: sub/foo.c sub/foo.h
|
|
+ # and will wrap long lines using \ :
|
|
+ # foo.o: sub/foo.c ... \
|
|
+ # sub/foo.h ... \
|
|
+ # ...
|
|
+
|
|
+ "$@" -MD -MF "$tmpdepfile"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+ # Each line is of the form `foo.o: dependent.h',
|
|
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
|
+ # Do two passes, one to just change these to
|
|
+ # `$object: dependent.h' and one to simply `dependent.h:'.
|
|
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
|
+ # Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+ # correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
|
+ sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+hp2)
|
|
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
|
+ # compilers, which have integrated preprocessors. The correct option
|
|
+ # to use with these is +Maked; it writes dependencies to a file named
|
|
+ # 'foo.d', which lands next to the object file, wherever that
|
|
+ # happens to be.
|
|
+ # Much of this is similar to the tru64 case; see comments there.
|
|
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
|
+ test "x$dir" = "x$object" && dir=
|
|
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
|
+ if test "$libtool" = yes; then
|
|
+ tmpdepfile1=$dir$base.d
|
|
+ tmpdepfile2=$dir.libs/$base.d
|
|
+ "$@" -Wc,+Maked
|
|
+ else
|
|
+ tmpdepfile1=$dir$base.d
|
|
+ tmpdepfile2=$dir$base.d
|
|
+ "$@" +Maked
|
|
+ fi
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
|
|
+ exit $stat
|
|
+ fi
|
|
+
|
|
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
|
+ do
|
|
+ test -f "$tmpdepfile" && break
|
|
+ done
|
|
+ if test -f "$tmpdepfile"; then
|
|
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
|
+ # Add `dependent.h:' lines.
|
|
+ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
|
|
+ else
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile" "$tmpdepfile2"
|
|
+ ;;
|
|
+
|
|
+tru64)
|
|
+ # The Tru64 compiler uses -MD to generate dependencies as a side
|
|
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
|
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
|
+ # dependencies in `foo.d' instead, so we check for that too.
|
|
+ # Subdirectories are respected.
|
|
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
|
+ test "x$dir" = "x$object" && dir=
|
|
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
|
+
|
|
+ if test "$libtool" = yes; then
|
|
+ # With Tru64 cc, shared objects can also be used to make a
|
|
+ # static library. This mechanism is used in libtool 1.4 series to
|
|
+ # handle both shared and static libraries in a single compilation.
|
|
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
|
+ #
|
|
+ # With libtool 1.5 this exception was removed, and libtool now
|
|
+ # generates 2 separate objects for the 2 libraries. These two
|
|
+ # compilations output dependencies in $dir.libs/$base.o.d and
|
|
+ # in $dir$base.o.d. We have to check for both files, because
|
|
+ # one of the two compilations can be disabled. We should prefer
|
|
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
|
+ # automatically cleaned when .libs/ is deleted, while ignoring
|
|
+ # the former would cause a distcleancheck panic.
|
|
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
|
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
|
|
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
|
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
|
+ "$@" -Wc,-MD
|
|
+ else
|
|
+ tmpdepfile1=$dir$base.o.d
|
|
+ tmpdepfile2=$dir$base.d
|
|
+ tmpdepfile3=$dir$base.d
|
|
+ tmpdepfile4=$dir$base.d
|
|
+ "$@" -MD
|
|
+ fi
|
|
+
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
|
+ exit $stat
|
|
+ fi
|
|
+
|
|
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
|
+ do
|
|
+ test -f "$tmpdepfile" && break
|
|
+ done
|
|
+ if test -f "$tmpdepfile"; then
|
|
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
|
+ # That's a tab and a space in the [].
|
|
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
|
+ else
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+#nosideeffect)
|
|
+ # This comment above is used by automake to tell side-effect
|
|
+ # dependency tracking mechanisms from slower ones.
|
|
+
|
|
+dashmstdout)
|
|
+ # Important note: in order to support this mode, a compiler *must*
|
|
+ # always write the preprocessed file to stdout, regardless of -o.
|
|
+ "$@" || exit $?
|
|
+
|
|
+ # Remove the call to Libtool.
|
|
+ if test "$libtool" = yes; then
|
|
+ while test $1 != '--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 $1 != '--mode=compile'; do
|
|
+ shift
|
|
+ done
|
|
+ shift
|
|
+ fi
|
|
+ # X makedepend
|
|
+ shift
|
|
+ cleared=no
|
|
+ for arg in "$@"; do
|
|
+ case $cleared in
|
|
+ no)
|
|
+ set ""; shift
|
|
+ cleared=yes ;;
|
|
+ esac
|
|
+ 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.
|
|
+ -*|$object)
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"; shift ;;
|
|
+ esac
|
|
+ done
|
|
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
|
|
+ touch "$tmpdepfile"
|
|
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
|
+ rm -f "$depfile"
|
|
+ cat < "$tmpdepfile" > "$depfile"
|
|
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
|
|
+' | \
|
|
+## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+## correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
|
|
+ ;;
|
|
+
|
|
+cpp)
|
|
+ # Important note: in order to support this mode, a compiler *must*
|
|
+ # always write the preprocessed file to stdout.
|
|
+ "$@" || exit $?
|
|
+
|
|
+ # Remove the call to Libtool.
|
|
+ if test "$libtool" = yes; then
|
|
+ while test $1 != '--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, regardless of -o,
|
|
+ # because we must use -o when running libtool.
|
|
+ "$@" || exit $?
|
|
+ IFS=" "
|
|
+ for arg
|
|
+ do
|
|
+ case "$arg" in
|
|
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
|
+ set fnord "$@"
|
|
+ shift
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"
|
|
+ shift
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ "$@" -E |
|
|
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
|
+ rm -f "$depfile"
|
|
+ echo "$object : \\" > "$depfile"
|
|
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
|
+ echo " " >> "$depfile"
|
|
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+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-end: "$"
|
|
+# End:
|
|
Index: libffi/install-sh
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/install-sh
|
|
@@ -0,0 +1,323 @@
|
|
+#!/bin/sh
|
|
+# install - install a program, script, or datafile
|
|
+
|
|
+scriptversion=2004-12-17.09
|
|
+
|
|
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
|
+# later released in X11R6 (xc/config/util/install.sh) with the
|
|
+# following copyright and license.
|
|
+#
|
|
+# Copyright (C) 1994 X Consortium
|
|
+#
|
|
+# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
+# of this software and associated documentation files (the "Software"), to
|
|
+# deal in the Software without restriction, including without limitation the
|
|
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
+# sell copies of the Software, and to permit persons to whom the Software is
|
|
+# furnished to do so, subject to the following conditions:
|
|
+#
|
|
+# The above copyright notice and this permission notice shall be included in
|
|
+# all copies or substantial portions of the Software.
|
|
+#
|
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
|
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+#
|
|
+# Except as contained in this notice, the name of the X Consortium shall not
|
|
+# be used in advertising or otherwise to promote the sale, use or other deal-
|
|
+# ings in this Software without prior written authorization from the X Consor-
|
|
+# tium.
|
|
+#
|
|
+#
|
|
+# FSF changes to this file are in the public domain.
|
|
+#
|
|
+# Calling this script install-sh is preferred over install.sh, to prevent
|
|
+# `make' implicit rules from creating a file called install from it
|
|
+# when there is no Makefile.
|
|
+#
|
|
+# This script is compatible with the BSD install script, but was written
|
|
+# from scratch. It can only install one file at a time, a restriction
|
|
+# shared with many OS's install programs.
|
|
+
|
|
+# set DOITPROG to echo to test this script
|
|
+
|
|
+# Don't use :- since 4.3BSD and earlier shells don't like it.
|
|
+doit="${DOITPROG-}"
|
|
+
|
|
+# put in absolute paths if you don't have them in your path; or use env. vars.
|
|
+
|
|
+mvprog="${MVPROG-mv}"
|
|
+cpprog="${CPPROG-cp}"
|
|
+chmodprog="${CHMODPROG-chmod}"
|
|
+chownprog="${CHOWNPROG-chown}"
|
|
+chgrpprog="${CHGRPPROG-chgrp}"
|
|
+stripprog="${STRIPPROG-strip}"
|
|
+rmprog="${RMPROG-rm}"
|
|
+mkdirprog="${MKDIRPROG-mkdir}"
|
|
+
|
|
+chmodcmd="$chmodprog 0755"
|
|
+chowncmd=
|
|
+chgrpcmd=
|
|
+stripcmd=
|
|
+rmcmd="$rmprog -f"
|
|
+mvcmd="$mvprog"
|
|
+src=
|
|
+dst=
|
|
+dir_arg=
|
|
+dstarg=
|
|
+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:
|
|
+-c (ignored)
|
|
+-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.
|
|
+--help display this help and exit.
|
|
+--version display version info and exit.
|
|
+
|
|
+Environment variables override the default commands:
|
|
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
|
+"
|
|
+
|
|
+while test -n "$1"; do
|
|
+ case $1 in
|
|
+ -c) shift
|
|
+ continue;;
|
|
+
|
|
+ -d) dir_arg=true
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ -g) chgrpcmd="$chgrpprog $2"
|
|
+ shift
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ --help) echo "$usage"; exit 0;;
|
|
+
|
|
+ -m) chmodcmd="$chmodprog $2"
|
|
+ shift
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ -o) chowncmd="$chownprog $2"
|
|
+ shift
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ -s) stripcmd=$stripprog
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ -t) dstarg=$2
|
|
+ shift
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ -T) no_target_directory=true
|
|
+ shift
|
|
+ continue;;
|
|
+
|
|
+ --version) echo "$0 $scriptversion"; exit 0;;
|
|
+
|
|
+ *) # When -d is used, all remaining arguments are directories to create.
|
|
+ # When -t is used, the destination is already specified.
|
|
+ test -n "$dir_arg$dstarg" && break
|
|
+ # Otherwise, the last argument is the destination. Remove it from $@.
|
|
+ for arg
|
|
+ do
|
|
+ if test -n "$dstarg"; then
|
|
+ # $@ is not empty: it contains at least $arg.
|
|
+ set fnord "$@" "$dstarg"
|
|
+ shift # fnord
|
|
+ fi
|
|
+ shift # arg
|
|
+ dstarg=$arg
|
|
+ done
|
|
+ break;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+if test -z "$1"; 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
|
|
+
|
|
+for src
|
|
+do
|
|
+ # Protect names starting with `-'.
|
|
+ case $src in
|
|
+ -*) src=./$src ;;
|
|
+ esac
|
|
+
|
|
+ if test -n "$dir_arg"; then
|
|
+ dst=$src
|
|
+ src=
|
|
+
|
|
+ if test -d "$dst"; then
|
|
+ mkdircmd=:
|
|
+ chmodcmd=
|
|
+ else
|
|
+ mkdircmd=$mkdirprog
|
|
+ fi
|
|
+ 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 "$dstarg"; then
|
|
+ echo "$0: no destination specified." >&2
|
|
+ exit 1
|
|
+ fi
|
|
+
|
|
+ dst=$dstarg
|
|
+ # 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: $dstarg: Is a directory" >&2
|
|
+ exit 1
|
|
+ fi
|
|
+ dst=$dst/`basename "$src"`
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # This sed command emulates the dirname command.
|
|
+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
|
|
+
|
|
+ # Make sure that the destination directory exists.
|
|
+
|
|
+ # Skip lots of stat calls in the usual case.
|
|
+ if test ! -d "$dstdir"; then
|
|
+ defaultIFS='
|
|
+ '
|
|
+ IFS="${IFS-$defaultIFS}"
|
|
+
|
|
+ oIFS=$IFS
|
|
+ # Some sh's can't handle IFS=/ for some reason.
|
|
+ IFS='%'
|
|
+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
|
+ shift
|
|
+ IFS=$oIFS
|
|
+
|
|
+ pathcomp=
|
|
+
|
|
+ while test $# -ne 0 ; do
|
|
+ pathcomp=$pathcomp$1
|
|
+ shift
|
|
+ if test ! -d "$pathcomp"; then
|
|
+ $mkdirprog "$pathcomp"
|
|
+ # mkdir can fail with a `File exist' error in case several
|
|
+ # install-sh are creating the directory concurrently. This
|
|
+ # is OK.
|
|
+ test -d "$pathcomp" || exit
|
|
+ fi
|
|
+ pathcomp=$pathcomp/
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ if test -n "$dir_arg"; then
|
|
+ $doit $mkdircmd "$dst" \
|
|
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
|
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
|
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
|
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
|
+
|
|
+ else
|
|
+ dstfile=`basename "$dst"`
|
|
+
|
|
+ # 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
|
|
+ trap '(exit $?); exit' 1 2 13 15
|
|
+
|
|
+ # Copy the file name to the temp name.
|
|
+ $doit $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 "$dsttmp"; } &&
|
|
+
|
|
+ # Now rename the file to the real destination.
|
|
+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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.
|
|
+ {
|
|
+ if test -f "$dstdir/$dstfile"; then
|
|
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
|
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
|
+ || {
|
|
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
|
+ (exit 1); exit 1
|
|
+ }
|
|
+ else
|
|
+ :
|
|
+ fi
|
|
+ } &&
|
|
+
|
|
+ # Now rename the file to the real destination.
|
|
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
|
+ }
|
|
+ }
|
|
+ fi || { (exit 1); exit 1; }
|
|
+done
|
|
+
|
|
+# The final little trick to "correctly" pass the exit status to the exit trap.
|
|
+{
|
|
+ (exit 0); 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-end: "$"
|
|
+# End:
|
|
Index: libffi/libffi.pc.in
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/libffi.pc.in
|
|
@@ -0,0 +1,10 @@
|
|
+prefix=@prefix@
|
|
+exec_prefix=@exec_prefix@
|
|
+libdir=@libdir@
|
|
+includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
|
|
+
|
|
+Name: @PACKAGE_NAME@
|
|
+Description: Library supporting Foreign Function Interfaces
|
|
+Version: @PACKAGE_VERSION@
|
|
+Libs: -L${libdir} -lffi
|
|
+Cflags: -I${includedir}
|
|
Index: libffi/libtool-version
|
|
===================================================================
|
|
--- libffi.orig/libtool-version
|
|
+++ libffi/libtool-version
|
|
@@ -2,5 +2,28 @@
|
|
# the libtool manual to understand the meaning of the fields. This is
|
|
# a separate file so that version updates don't involve re-running
|
|
# automake.
|
|
+#
|
|
+# Here are a set of rules to help you update your library version
|
|
+# information:
|
|
+#
|
|
+# 1. Start with version information of `0:0:0' for each libtool library.
|
|
+#
|
|
+# 2. Update the version information only immediately before a public
|
|
+# release of your software. More frequent updates are unnecessary,
|
|
+# and only guarantee that the current interface number gets larger
|
|
+# faster.
|
|
+#
|
|
+# 3. If the library source code has changed at all since the last
|
|
+# update, then increment revision (`c:r:a' becomes `c:r+1:a').
|
|
+#
|
|
+# 4. If any interfaces have been added, removed, or changed since the
|
|
+# last update, increment current, and set revision to 0.
|
|
+#
|
|
+# 5. If any interfaces have been added since the last public release,
|
|
+# then increment age.
|
|
+#
|
|
+# 6. If any interfaces have been removed since the last public
|
|
+# release, then set age to 0.
|
|
+#
|
|
# CURRENT:REVISION:AGE
|
|
-4:1:0
|
|
+5:10:0
|
|
Index: libffi/ltmain.sh
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/ltmain.sh
|
|
@@ -0,0 +1,8406 @@
|
|
+# Generated from ltmain.m4sh.
|
|
+
|
|
+# ltmain.sh (GNU libtool) 2.2.6
|
|
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
|
+
|
|
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
|
|
+# This is free software; see the source for copying conditions. There is NO
|
|
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
+
|
|
+# GNU Libtool is free software; you can redistribute it and/or modify
|
|
+# it under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# As a special exception to the GNU General Public License,
|
|
+# if you distribute this file as part of a program or library that
|
|
+# is built using GNU Libtool, you may include this file under the
|
|
+# same distribution terms that you use for the rest of that program.
|
|
+#
|
|
+# GNU Libtool is distributed in the hope that it will be useful, but
|
|
+# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+# General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with GNU Libtool; see the file COPYING. If not, a copy
|
|
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
|
+# or obtained by writing to the Free Software Foundation, Inc.,
|
|
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+
|
|
+# Usage: $progname [OPTION]... [MODE-ARG]...
|
|
+#
|
|
+# Provide generalized library-building support services.
|
|
+#
|
|
+# --config show all configuration variables
|
|
+# --debug enable verbose shell tracing
|
|
+# -n, --dry-run display commands without modifying any files
|
|
+# --features display basic configuration information and exit
|
|
+# --mode=MODE use operation mode MODE
|
|
+# --preserve-dup-deps don't remove duplicate dependency libraries
|
|
+# --quiet, --silent don't print informational messages
|
|
+# --tag=TAG use configuration variables from tag TAG
|
|
+# -v, --verbose print informational messages (default)
|
|
+# --version print version information
|
|
+# -h, --help print short or long help message
|
|
+#
|
|
+# MODE must be one of the following:
|
|
+#
|
|
+# clean remove files from the build directory
|
|
+# compile compile a source file into a libtool object
|
|
+# execute automatically set library path, then run a program
|
|
+# finish complete the installation of libtool libraries
|
|
+# install install libraries or executables
|
|
+# link create a library or an executable
|
|
+# uninstall remove libraries from an installed directory
|
|
+#
|
|
+# MODE-ARGS vary depending on the MODE.
|
|
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
|
|
+#
|
|
+# When reporting a bug, please describe a test case to reproduce it and
|
|
+# include the following information:
|
|
+#
|
|
+# host-triplet: $host
|
|
+# shell: $SHELL
|
|
+# compiler: $LTCC
|
|
+# compiler flags: $LTCFLAGS
|
|
+# linker: $LD (gnu? $with_gnu_ld)
|
|
+# $progname: (GNU libtool) 2.2.6
|
|
+# automake: $automake_version
|
|
+# autoconf: $autoconf_version
|
|
+#
|
|
+# Report bugs to <bug-libtool@gnu.org>.
|
|
+
|
|
+PROGRAM=ltmain.sh
|
|
+PACKAGE=libtool
|
|
+VERSION=2.2.6
|
|
+TIMESTAMP=""
|
|
+package_revision=1.3012
|
|
+
|
|
+# Be Bourne compatible
|
|
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
|
+ emulate sh
|
|
+ NULLCMD=:
|
|
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
|
|
+ # is contrary to our usage. Disable this feature.
|
|
+ alias -g '${1+"$@"}'='"$@"'
|
|
+ setopt NO_GLOB_SUBST
|
|
+else
|
|
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
|
|
+fi
|
|
+BIN_SH=xpg4; export BIN_SH # for Tru64
|
|
+DUALCASE=1; export DUALCASE # for MKS sh
|
|
+
|
|
+# NLS nuisances: We save the old values to restore during execute mode.
|
|
+# Only set LANG and LC_ALL to C if already set.
|
|
+# These must not be set unconditionally because not all systems understand
|
|
+# e.g. LANG=C (notably SCO).
|
|
+lt_user_locale=
|
|
+lt_safe_locale=
|
|
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
|
|
+do
|
|
+ eval "if test \"\${$lt_var+set}\" = set; then
|
|
+ save_$lt_var=\$$lt_var
|
|
+ $lt_var=C
|
|
+ export $lt_var
|
|
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
|
|
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
|
|
+ fi"
|
|
+done
|
|
+
|
|
+$lt_unset CDPATH
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+: ${CP="cp -f"}
|
|
+: ${ECHO="echo"}
|
|
+: ${EGREP="/bin/grep -E"}
|
|
+: ${FGREP="/bin/grep -F"}
|
|
+: ${GREP="/bin/grep"}
|
|
+: ${LN_S="ln -s"}
|
|
+: ${MAKE="make"}
|
|
+: ${MKDIR="mkdir"}
|
|
+: ${MV="mv -f"}
|
|
+: ${RM="rm -f"}
|
|
+: ${SED="/bin/sed"}
|
|
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
|
|
+: ${Xsed="$SED -e 1s/^X//"}
|
|
+
|
|
+# Global variables:
|
|
+EXIT_SUCCESS=0
|
|
+EXIT_FAILURE=1
|
|
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
|
|
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
|
|
+
|
|
+exit_status=$EXIT_SUCCESS
|
|
+
|
|
+# Make sure IFS has a sensible default
|
|
+lt_nl='
|
|
+'
|
|
+IFS=" $lt_nl"
|
|
+
|
|
+dirname="s,/[^/]*$,,"
|
|
+basename="s,^.*/,,"
|
|
+
|
|
+# func_dirname_and_basename file append nondir_replacement
|
|
+# perform func_basename and func_dirname in a single function
|
|
+# call:
|
|
+# dirname: Compute the dirname of FILE. If nonempty,
|
|
+# add APPEND to the result, otherwise set result
|
|
+# to NONDIR_REPLACEMENT.
|
|
+# value returned in "$func_dirname_result"
|
|
+# basename: Compute filename of FILE.
|
|
+# value retuned in "$func_basename_result"
|
|
+# Implementation must be kept synchronized with func_dirname
|
|
+# and func_basename. For efficiency, we do not delegate to
|
|
+# those functions but instead duplicate the functionality here.
|
|
+func_dirname_and_basename ()
|
|
+{
|
|
+ # Extract subdirectory from the argument.
|
|
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
|
|
+ if test "X$func_dirname_result" = "X${1}"; then
|
|
+ func_dirname_result="${3}"
|
|
+ else
|
|
+ func_dirname_result="$func_dirname_result${2}"
|
|
+ fi
|
|
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
|
|
+}
|
|
+
|
|
+# Generated shell functions inserted here.
|
|
+
|
|
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
|
|
+# is ksh but when the shell is invoked as "sh" and the current value of
|
|
+# the _XPG environment variable is not equal to 1 (one), the special
|
|
+# positional parameter $0, within a function call, is the name of the
|
|
+# function.
|
|
+progpath="$0"
|
|
+
|
|
+# The name of this program:
|
|
+# In the unlikely event $progname began with a '-', it would play havoc with
|
|
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
|
|
+func_dirname_and_basename "$progpath"
|
|
+progname=$func_basename_result
|
|
+case $progname in
|
|
+ -*) progname=./$progname ;;
|
|
+esac
|
|
+
|
|
+# Make sure we have an absolute path for reexecution:
|
|
+case $progpath in
|
|
+ [\\/]*|[A-Za-z]:\\*) ;;
|
|
+ *[\\/]*)
|
|
+ progdir=$func_dirname_result
|
|
+ progdir=`cd "$progdir" && pwd`
|
|
+ progpath="$progdir/$progname"
|
|
+ ;;
|
|
+ *)
|
|
+ save_IFS="$IFS"
|
|
+ IFS=:
|
|
+ for progdir in $PATH; do
|
|
+ IFS="$save_IFS"
|
|
+ test -x "$progdir/$progname" && break
|
|
+ done
|
|
+ IFS="$save_IFS"
|
|
+ test -n "$progdir" || progdir=`pwd`
|
|
+ progpath="$progdir/$progname"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Sed substitution that helps us do robust quoting. It backslashifies
|
|
+# metacharacters that are still active within double-quoted strings.
|
|
+Xsed="${SED}"' -e 1s/^X//'
|
|
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
|
|
+
|
|
+# Same as above, but do not quote variable references.
|
|
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
|
|
+
|
|
+# Re-`\' parameter expansions in output of double_quote_subst that were
|
|
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
|
|
+# in input to double_quote_subst, that '$' was protected from expansion.
|
|
+# Since each input `\' is now two `\'s, look for any number of runs of
|
|
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
|
|
+bs='\\'
|
|
+bs2='\\\\'
|
|
+bs4='\\\\\\\\'
|
|
+dollar='\$'
|
|
+sed_double_backslash="\
|
|
+ s/$bs4/&\\
|
|
+/g
|
|
+ s/^$bs2$dollar/$bs&/
|
|
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
|
|
+ s/\n//g"
|
|
+
|
|
+# Standard options:
|
|
+opt_dry_run=false
|
|
+opt_help=false
|
|
+opt_quiet=false
|
|
+opt_verbose=false
|
|
+opt_warning=:
|
|
+
|
|
+# func_echo arg...
|
|
+# Echo program name prefixed message, along with the current mode
|
|
+# name if it has been set yet.
|
|
+func_echo ()
|
|
+{
|
|
+ $ECHO "$progname${mode+: }$mode: $*"
|
|
+}
|
|
+
|
|
+# func_verbose arg...
|
|
+# Echo program name prefixed message in verbose mode only.
|
|
+func_verbose ()
|
|
+{
|
|
+ $opt_verbose && func_echo ${1+"$@"}
|
|
+
|
|
+ # A bug in bash halts the script if the last line of a function
|
|
+ # fails when set -e is in force, so we need another command to
|
|
+ # work around that:
|
|
+ :
|
|
+}
|
|
+
|
|
+# func_error arg...
|
|
+# Echo program name prefixed message to standard error.
|
|
+func_error ()
|
|
+{
|
|
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
|
|
+}
|
|
+
|
|
+# func_warning arg...
|
|
+# Echo program name prefixed warning message to standard error.
|
|
+func_warning ()
|
|
+{
|
|
+ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
|
|
+
|
|
+ # bash bug again:
|
|
+ :
|
|
+}
|
|
+
|
|
+# func_fatal_error arg...
|
|
+# Echo program name prefixed message to standard error, and exit.
|
|
+func_fatal_error ()
|
|
+{
|
|
+ func_error ${1+"$@"}
|
|
+ exit $EXIT_FAILURE
|
|
+}
|
|
+
|
|
+# func_fatal_help arg...
|
|
+# Echo program name prefixed message to standard error, followed by
|
|
+# a help hint, and exit.
|
|
+func_fatal_help ()
|
|
+{
|
|
+ func_error ${1+"$@"}
|
|
+ func_fatal_error "$help"
|
|
+}
|
|
+help="Try \`$progname --help' for more information." ## default
|
|
+
|
|
+
|
|
+# func_grep expression filename
|
|
+# Check whether EXPRESSION matches any line of FILENAME, without output.
|
|
+func_grep ()
|
|
+{
|
|
+ $GREP "$1" "$2" >/dev/null 2>&1
|
|
+}
|
|
+
|
|
+
|
|
+# func_mkdir_p directory-path
|
|
+# Make sure the entire path to DIRECTORY-PATH is available.
|
|
+func_mkdir_p ()
|
|
+{
|
|
+ my_directory_path="$1"
|
|
+ my_dir_list=
|
|
+
|
|
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
|
|
+
|
|
+ # Protect directory names starting with `-'
|
|
+ case $my_directory_path in
|
|
+ -*) my_directory_path="./$my_directory_path" ;;
|
|
+ esac
|
|
+
|
|
+ # While some portion of DIR does not yet exist...
|
|
+ while test ! -d "$my_directory_path"; do
|
|
+ # ...make a list in topmost first order. Use a colon delimited
|
|
+ # list incase some portion of path contains whitespace.
|
|
+ my_dir_list="$my_directory_path:$my_dir_list"
|
|
+
|
|
+ # If the last portion added has no slash in it, the list is done
|
|
+ case $my_directory_path in */*) ;; *) break ;; esac
|
|
+
|
|
+ # ...otherwise throw away the child directory and loop
|
|
+ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
|
|
+ done
|
|
+ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
|
|
+
|
|
+ save_mkdir_p_IFS="$IFS"; IFS=':'
|
|
+ for my_dir in $my_dir_list; do
|
|
+ IFS="$save_mkdir_p_IFS"
|
|
+ # mkdir can fail with a `File exist' error if two processes
|
|
+ # try to create one of the directories concurrently. Don't
|
|
+ # stop in that case!
|
|
+ $MKDIR "$my_dir" 2>/dev/null || :
|
|
+ done
|
|
+ IFS="$save_mkdir_p_IFS"
|
|
+
|
|
+ # Bail out if we (or some other process) failed to create a directory.
|
|
+ test -d "$my_directory_path" || \
|
|
+ func_fatal_error "Failed to create \`$1'"
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+# func_mktempdir [string]
|
|
+# Make a temporary directory that won't clash with other running
|
|
+# libtool processes, and avoids race conditions if possible. If
|
|
+# given, STRING is the basename for that directory.
|
|
+func_mktempdir ()
|
|
+{
|
|
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
|
|
+
|
|
+ if test "$opt_dry_run" = ":"; then
|
|
+ # Return a directory name, but don't create it in dry-run mode
|
|
+ my_tmpdir="${my_template}-$$"
|
|
+ else
|
|
+
|
|
+ # If mktemp works, use that first and foremost
|
|
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
|
|
+
|
|
+ if test ! -d "$my_tmpdir"; then
|
|
+ # Failing that, at least try and use $RANDOM to avoid a race
|
|
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
|
|
+
|
|
+ save_mktempdir_umask=`umask`
|
|
+ umask 0077
|
|
+ $MKDIR "$my_tmpdir"
|
|
+ umask $save_mktempdir_umask
|
|
+ fi
|
|
+
|
|
+ # If we're not in dry-run mode, bomb out on failure
|
|
+ test -d "$my_tmpdir" || \
|
|
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
|
|
+ fi
|
|
+
|
|
+ $ECHO "X$my_tmpdir" | $Xsed
|
|
+}
|
|
+
|
|
+
|
|
+# func_quote_for_eval arg
|
|
+# Aesthetically quote ARG to be evaled later.
|
|
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
|
|
+# is double-quoted, suitable for a subsequent eval, whereas
|
|
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
|
|
+# which are still active within double quotes backslashified.
|
|
+func_quote_for_eval ()
|
|
+{
|
|
+ case $1 in
|
|
+ *[\\\`\"\$]*)
|
|
+ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
|
|
+ *)
|
|
+ func_quote_for_eval_unquoted_result="$1" ;;
|
|
+ esac
|
|
+
|
|
+ case $func_quote_for_eval_unquoted_result in
|
|
+ # Double-quote args containing shell metacharacters to delay
|
|
+ # word splitting, command substitution and and variable
|
|
+ # expansion for a subsequent eval.
|
|
+ # Many Bourne shells cannot handle close brackets correctly
|
|
+ # in scan sets, so we specify it separately.
|
|
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
|
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
|
|
+ ;;
|
|
+ *)
|
|
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
|
|
+ esac
|
|
+}
|
|
+
|
|
+
|
|
+# func_quote_for_expand arg
|
|
+# Aesthetically quote ARG to be evaled later; same as above,
|
|
+# but do not quote variable references.
|
|
+func_quote_for_expand ()
|
|
+{
|
|
+ case $1 in
|
|
+ *[\\\`\"]*)
|
|
+ my_arg=`$ECHO "X$1" | $Xsed \
|
|
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
|
|
+ *)
|
|
+ my_arg="$1" ;;
|
|
+ esac
|
|
+
|
|
+ case $my_arg in
|
|
+ # Double-quote args containing shell metacharacters to delay
|
|
+ # word splitting and command substitution for a subsequent eval.
|
|
+ # Many Bourne shells cannot handle close brackets correctly
|
|
+ # in scan sets, so we specify it separately.
|
|
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
|
+ my_arg="\"$my_arg\""
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ func_quote_for_expand_result="$my_arg"
|
|
+}
|
|
+
|
|
+
|
|
+# func_show_eval cmd [fail_exp]
|
|
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
|
|
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
|
|
+# is given, then evaluate it.
|
|
+func_show_eval ()
|
|
+{
|
|
+ my_cmd="$1"
|
|
+ my_fail_exp="${2-:}"
|
|
+
|
|
+ ${opt_silent-false} || {
|
|
+ func_quote_for_expand "$my_cmd"
|
|
+ eval "func_echo $func_quote_for_expand_result"
|
|
+ }
|
|
+
|
|
+ if ${opt_dry_run-false}; then :; else
|
|
+ eval "$my_cmd"
|
|
+ my_status=$?
|
|
+ if test "$my_status" -eq 0; then :; else
|
|
+ eval "(exit $my_status); $my_fail_exp"
|
|
+ fi
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+# func_show_eval_locale cmd [fail_exp]
|
|
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
|
|
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
|
|
+# is given, then evaluate it. Use the saved locale for evaluation.
|
|
+func_show_eval_locale ()
|
|
+{
|
|
+ my_cmd="$1"
|
|
+ my_fail_exp="${2-:}"
|
|
+
|
|
+ ${opt_silent-false} || {
|
|
+ func_quote_for_expand "$my_cmd"
|
|
+ eval "func_echo $func_quote_for_expand_result"
|
|
+ }
|
|
+
|
|
+ if ${opt_dry_run-false}; then :; else
|
|
+ eval "$lt_user_locale
|
|
+ $my_cmd"
|
|
+ my_status=$?
|
|
+ eval "$lt_safe_locale"
|
|
+ if test "$my_status" -eq 0; then :; else
|
|
+ eval "(exit $my_status); $my_fail_exp"
|
|
+ fi
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+# func_version
|
|
+# Echo version message to standard output and exit.
|
|
+func_version ()
|
|
+{
|
|
+ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
|
|
+ s/^# //
|
|
+ s/^# *$//
|
|
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
|
|
+ p
|
|
+ }' < "$progpath"
|
|
+ exit $?
|
|
+}
|
|
+
|
|
+# func_usage
|
|
+# Echo short help message to standard output and exit.
|
|
+func_usage ()
|
|
+{
|
|
+ $SED -n '/^# Usage:/,/# -h/ {
|
|
+ s/^# //
|
|
+ s/^# *$//
|
|
+ s/\$progname/'$progname'/
|
|
+ p
|
|
+ }' < "$progpath"
|
|
+ $ECHO
|
|
+ $ECHO "run \`$progname --help | more' for full usage"
|
|
+ exit $?
|
|
+}
|
|
+
|
|
+# func_help
|
|
+# Echo long help message to standard output and exit.
|
|
+func_help ()
|
|
+{
|
|
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
|
|
+ s/^# //
|
|
+ s/^# *$//
|
|
+ s*\$progname*'$progname'*
|
|
+ s*\$host*'"$host"'*
|
|
+ s*\$SHELL*'"$SHELL"'*
|
|
+ s*\$LTCC*'"$LTCC"'*
|
|
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
|
|
+ s*\$LD*'"$LD"'*
|
|
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
|
|
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
|
|
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
|
|
+ p
|
|
+ }' < "$progpath"
|
|
+ exit $?
|
|
+}
|
|
+
|
|
+# func_missing_arg argname
|
|
+# Echo program name prefixed message to standard error and set global
|
|
+# exit_cmd.
|
|
+func_missing_arg ()
|
|
+{
|
|
+ func_error "missing argument for $1"
|
|
+ exit_cmd=exit
|
|
+}
|
|
+
|
|
+exit_cmd=:
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+# Check that we have a working $ECHO.
|
|
+if test "X$1" = X--no-reexec; then
|
|
+ # Discard the --no-reexec flag, and continue.
|
|
+ shift
|
|
+elif test "X$1" = X--fallback-echo; then
|
|
+ # Avoid inline document here, it may be left over
|
|
+ :
|
|
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
|
|
+ # Yippee, $ECHO works!
|
|
+ :
|
|
+else
|
|
+ # Restart under the correct shell, and then maybe $ECHO will work.
|
|
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
|
|
+fi
|
|
+
|
|
+if test "X$1" = X--fallback-echo; then
|
|
+ # used as fallback echo
|
|
+ shift
|
|
+ cat <<EOF
|
|
+$*
|
|
+EOF
|
|
+ exit $EXIT_SUCCESS
|
|
+fi
|
|
+
|
|
+magic="%%%MAGIC variable%%%"
|
|
+magic_exe="%%%MAGIC EXE variable%%%"
|
|
+
|
|
+# Global variables.
|
|
+# $mode is unset
|
|
+nonopt=
|
|
+execute_dlfiles=
|
|
+preserve_args=
|
|
+lo2o="s/\\.lo\$/.${objext}/"
|
|
+o2lo="s/\\.${objext}\$/.lo/"
|
|
+extracted_archives=
|
|
+extracted_serial=0
|
|
+
|
|
+opt_dry_run=false
|
|
+opt_duplicate_deps=false
|
|
+opt_silent=false
|
|
+opt_debug=:
|
|
+
|
|
+# 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_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
|
|
+}
|
|
+
|
|
+# Parse options once, thoroughly. This comes as soon as possible in
|
|
+# the script to make things like `libtool --version' happen quickly.
|
|
+{
|
|
+
|
|
+ # Shorthand for --mode=foo, only valid as the first argument
|
|
+ case $1 in
|
|
+ clean|clea|cle|cl)
|
|
+ shift; set dummy --mode clean ${1+"$@"}; shift
|
|
+ ;;
|
|
+ compile|compil|compi|comp|com|co|c)
|
|
+ shift; set dummy --mode compile ${1+"$@"}; shift
|
|
+ ;;
|
|
+ execute|execut|execu|exec|exe|ex|e)
|
|
+ shift; set dummy --mode execute ${1+"$@"}; shift
|
|
+ ;;
|
|
+ finish|finis|fini|fin|fi|f)
|
|
+ shift; set dummy --mode finish ${1+"$@"}; shift
|
|
+ ;;
|
|
+ install|instal|insta|inst|ins|in|i)
|
|
+ shift; set dummy --mode install ${1+"$@"}; shift
|
|
+ ;;
|
|
+ link|lin|li|l)
|
|
+ shift; set dummy --mode link ${1+"$@"}; shift
|
|
+ ;;
|
|
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
|
|
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Parse non-mode specific arguments:
|
|
+ while test "$#" -gt 0; do
|
|
+ opt="$1"
|
|
+ shift
|
|
+
|
|
+ case $opt in
|
|
+ --config) func_config ;;
|
|
+
|
|
+ --debug) preserve_args="$preserve_args $opt"
|
|
+ func_echo "enabling shell trace mode"
|
|
+ opt_debug='set -x'
|
|
+ $opt_debug
|
|
+ ;;
|
|
+
|
|
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
|
|
+ execute_dlfiles="$execute_dlfiles $1"
|
|
+ shift
|
|
+ ;;
|
|
+
|
|
+ --dry-run | -n) opt_dry_run=: ;;
|
|
+ --features) func_features ;;
|
|
+ --finish) mode="finish" ;;
|
|
+
|
|
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
|
|
+ case $1 in
|
|
+ # Valid mode arguments:
|
|
+ clean) ;;
|
|
+ compile) ;;
|
|
+ execute) ;;
|
|
+ finish) ;;
|
|
+ install) ;;
|
|
+ link) ;;
|
|
+ relink) ;;
|
|
+ uninstall) ;;
|
|
+
|
|
+ # Catch anything else as an error
|
|
+ *) func_error "invalid argument for $opt"
|
|
+ exit_cmd=exit
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ mode="$1"
|
|
+ shift
|
|
+ ;;
|
|
+
|
|
+ --preserve-dup-deps)
|
|
+ opt_duplicate_deps=: ;;
|
|
+
|
|
+ --quiet|--silent) preserve_args="$preserve_args $opt"
|
|
+ opt_silent=:
|
|
+ ;;
|
|
+
|
|
+ --verbose| -v) preserve_args="$preserve_args $opt"
|
|
+ opt_silent=false
|
|
+ ;;
|
|
+
|
|
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
|
|
+ preserve_args="$preserve_args $opt $1"
|
|
+ func_enable_tag "$1" # tagname is set here
|
|
+ shift
|
|
+ ;;
|
|
+
|
|
+ # Separate optargs to long options:
|
|
+ -dlopen=*|--mode=*|--tag=*)
|
|
+ func_opt_split "$opt"
|
|
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
|
|
+ shift
|
|
+ ;;
|
|
+
|
|
+ -\?|-h) func_usage ;;
|
|
+ --help) opt_help=: ;;
|
|
+ --version) func_version ;;
|
|
+
|
|
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
|
|
+
|
|
+ *) nonopt="$opt"
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
|
|
+ # don't eliminate duplications in $postdeps and $predeps
|
|
+ opt_duplicate_compiler_generated_deps=:
|
|
+ ;;
|
|
+ *)
|
|
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Having warned about all mis-specified options, bail out if
|
|
+ # anything was wrong.
|
|
+ $exit_cmd $EXIT_FAILURE
|
|
+}
|
|
+
|
|
+# func_check_version_match
|
|
+# Ensure that we are using m4 macros, and libtool script from the same
|
|
+# release of libtool.
|
|
+func_check_version_match ()
|
|
+{
|
|
+ if test "$package_revision" != "$macro_revision"; then
|
|
+ if test "$VERSION" != "$macro_version"; then
|
|
+ if test -z "$macro_version"; then
|
|
+ cat >&2 <<_LT_EOF
|
|
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
|
|
+$progname: definition of this LT_INIT comes from an older release.
|
|
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
|
|
+$progname: and run autoconf again.
|
|
+_LT_EOF
|
|
+ else
|
|
+ cat >&2 <<_LT_EOF
|
|
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
|
|
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
|
|
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
|
|
+$progname: and run autoconf again.
|
|
+_LT_EOF
|
|
+ fi
|
|
+ else
|
|
+ cat >&2 <<_LT_EOF
|
|
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
|
|
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
|
|
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
|
|
+$progname: of $PACKAGE $VERSION and run autoconf again.
|
|
+_LT_EOF
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_MISMATCH
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+## ----------- ##
|
|
+## Main. ##
|
|
+## ----------- ##
|
|
+
|
|
+$opt_help || {
|
|
+ # Sanity checks first:
|
|
+ func_check_version_match
|
|
+
|
|
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
|
|
+ func_fatal_configuration "not configured to build any kind of library"
|
|
+ fi
|
|
+
|
|
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
|
|
+
|
|
+
|
|
+ # Darwin sucks
|
|
+ eval std_shrext=\"$shrext_cmds\"
|
|
+
|
|
+
|
|
+ # Only execute mode is allowed to have -dlopen flags.
|
|
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
|
|
+ func_error "unrecognized option \`-dlopen'"
|
|
+ $ECHO "$help" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ # Change the help message to a mode-specific one.
|
|
+ generic_help="$help"
|
|
+ help="Try \`$progname --help --mode=$mode' for more information."
|
|
+}
|
|
+
|
|
+
|
|
+# func_lalib_p file
|
|
+# True iff FILE is a libtool `.la' library or `.lo' object file.
|
|
+# This function is only a basic sanity check; it will hardly flush out
|
|
+# determined imposters.
|
|
+func_lalib_p ()
|
|
+{
|
|
+ test -f "$1" &&
|
|
+ $SED -e 4q "$1" 2>/dev/null \
|
|
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
|
|
+}
|
|
+
|
|
+# func_lalib_unsafe_p file
|
|
+# True iff FILE is a libtool `.la' library or `.lo' object file.
|
|
+# This function implements the same check as func_lalib_p without
|
|
+# resorting to external programs. To this end, it redirects stdin and
|
|
+# closes it afterwards, without saving the original file descriptor.
|
|
+# As a safety measure, use it only where a negative result would be
|
|
+# fatal anyway. Works if `file' does not exist.
|
|
+func_lalib_unsafe_p ()
|
|
+{
|
|
+ lalib_p=no
|
|
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
|
|
+ for lalib_p_l in 1 2 3 4
|
|
+ do
|
|
+ read lalib_p_line
|
|
+ case "$lalib_p_line" in
|
|
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
|
|
+ esac
|
|
+ done
|
|
+ exec 0<&5 5<&-
|
|
+ fi
|
|
+ test "$lalib_p" = yes
|
|
+}
|
|
+
|
|
+# func_ltwrapper_script_p file
|
|
+# True iff FILE is a libtool wrapper script
|
|
+# This function is only a basic sanity check; it will hardly flush out
|
|
+# determined imposters.
|
|
+func_ltwrapper_script_p ()
|
|
+{
|
|
+ func_lalib_p "$1"
|
|
+}
|
|
+
|
|
+# func_ltwrapper_executable_p file
|
|
+# True iff FILE is a libtool wrapper executable
|
|
+# This function is only a basic sanity check; it will hardly flush out
|
|
+# determined imposters.
|
|
+func_ltwrapper_executable_p ()
|
|
+{
|
|
+ func_ltwrapper_exec_suffix=
|
|
+ case $1 in
|
|
+ *.exe) ;;
|
|
+ *) func_ltwrapper_exec_suffix=.exe ;;
|
|
+ esac
|
|
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
|
|
+}
|
|
+
|
|
+# func_ltwrapper_scriptname file
|
|
+# Assumes file is an ltwrapper_executable
|
|
+# uses $file to determine the appropriate filename for a
|
|
+# temporary ltwrapper_script.
|
|
+func_ltwrapper_scriptname ()
|
|
+{
|
|
+ func_ltwrapper_scriptname_result=""
|
|
+ if func_ltwrapper_executable_p "$1"; then
|
|
+ func_dirname_and_basename "$1" "" "."
|
|
+ func_stripname '' '.exe' "$func_basename_result"
|
|
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
|
|
+ fi
|
|
+}
|
|
+
|
|
+# func_ltwrapper_p file
|
|
+# True iff FILE is a libtool wrapper script or wrapper executable
|
|
+# This function is only a basic sanity check; it will hardly flush out
|
|
+# determined imposters.
|
|
+func_ltwrapper_p ()
|
|
+{
|
|
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
|
|
+}
|
|
+
|
|
+
|
|
+# func_execute_cmds commands fail_cmd
|
|
+# Execute tilde-delimited COMMANDS.
|
|
+# If FAIL_CMD is given, eval that upon failure.
|
|
+# FAIL_CMD may read-access the current command in variable CMD!
|
|
+func_execute_cmds ()
|
|
+{
|
|
+ $opt_debug
|
|
+ save_ifs=$IFS; IFS='~'
|
|
+ for cmd in $1; do
|
|
+ IFS=$save_ifs
|
|
+ eval cmd=\"$cmd\"
|
|
+ func_show_eval "$cmd" "${2-:}"
|
|
+ done
|
|
+ IFS=$save_ifs
|
|
+}
|
|
+
|
|
+
|
|
+# func_source file
|
|
+# Source FILE, adding directory component if necessary.
|
|
+# Note that it is not necessary on cygwin/mingw to append a dot to
|
|
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
|
|
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
|
|
+# `FILE.' does not work on cygwin managed mounts.
|
|
+func_source ()
|
|
+{
|
|
+ $opt_debug
|
|
+ case $1 in
|
|
+ */* | *\\*) . "$1" ;;
|
|
+ *) . "./$1" ;;
|
|
+ esac
|
|
+}
|
|
+
|
|
+
|
|
+# func_infer_tag arg
|
|
+# Infer tagged configuration to use if any are available and
|
|
+# if one wasn't chosen via the "--tag" command line option.
|
|
+# Only attempt this if the compiler in the base compile
|
|
+# command doesn't match the default compiler.
|
|
+# arg is usually of the form 'gcc ...'
|
|
+func_infer_tag ()
|
|
+{
|
|
+ $opt_debug
|
|
+ if test -n "$available_tags" && test -z "$tagname"; then
|
|
+ CC_quoted=
|
|
+ for arg in $CC; do
|
|
+ func_quote_for_eval "$arg"
|
|
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
|
|
+ done
|
|
+ case $@ in
|
|
+ # Blanks in the command may have been stripped by the calling shell,
|
|
+ # but not from the CC environment variable when configure was run.
|
|
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
|
|
+ # Blanks at the start of $base_compile will cause this to fail
|
|
+ # if we don't check for them as well.
|
|
+ *)
|
|
+ for z in $available_tags; do
|
|
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
|
|
+ # Evaluate the configuration.
|
|
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
|
|
+ CC_quoted=
|
|
+ for arg in $CC; do
|
|
+ # Double-quote args containing other shell metacharacters.
|
|
+ func_quote_for_eval "$arg"
|
|
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
|
|
+ done
|
|
+ case "$@ " in
|
|
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
|
|
+ # The compiler in the base compile command matches
|
|
+ # the one in the tagged configuration.
|
|
+ # Assume this is the tagged configuration we want.
|
|
+ tagname=$z
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # If $tagname still isn't set, then no tagged configuration
|
|
+ # was found and let the user know that the "--tag" command
|
|
+ # line option must be used.
|
|
+ if test -z "$tagname"; then
|
|
+ func_echo "unable to infer tagged configuration"
|
|
+ func_fatal_error "specify a tag with \`--tag'"
|
|
+# else
|
|
+# func_verbose "using $tagname tagged configuration"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+
|
|
+# func_write_libtool_object output_name pic_name nonpic_name
|
|
+# Create a libtool object file (analogous to a ".la" file),
|
|
+# but don't create it if we're doing a dry run.
|
|
+func_write_libtool_object ()
|
|
+{
|
|
+ write_libobj=${1}
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ write_lobj=\'${2}\'
|
|
+ else
|
|
+ write_lobj=none
|
|
+ fi
|
|
+
|
|
+ if test "$build_old_libs" = yes; then
|
|
+ write_oldobj=\'${3}\'
|
|
+ else
|
|
+ write_oldobj=none
|
|
+ fi
|
|
+
|
|
+ $opt_dry_run || {
|
|
+ cat >${write_libobj}T <<EOF
|
|
+# $write_libobj - a libtool object file
|
|
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
|
|
+#
|
|
+# Please DO NOT delete this file!
|
|
+# It is necessary for linking the library.
|
|
+
|
|
+# Name of the PIC object.
|
|
+pic_object=$write_lobj
|
|
+
|
|
+# Name of the non-PIC object
|
|
+non_pic_object=$write_oldobj
|
|
+
|
|
+EOF
|
|
+ $MV "${write_libobj}T" "${write_libobj}"
|
|
+ }
|
|
+}
|
|
+
|
|
+# 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)
|
|
+ pie_flag="$pie_flag $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -shared | -static | -prefer-pic | -prefer-non-pic)
|
|
+ later="$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_quote_for_eval "$arg"
|
|
+ lastarg="$lastarg $func_quote_for_eval_result"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ func_stripname ' ' '' "$lastarg"
|
|
+ lastarg=$func_stripname_result
|
|
+
|
|
+ # Add the arguments to base_compile.
|
|
+ base_compile="$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_quote_for_eval "$lastarg"
|
|
+ base_compile="$base_compile $func_quote_for_eval_result"
|
|
+ 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 | *.obj | *.sx)
|
|
+ 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
|
|
+ lockfile="$output_obj.lock"
|
|
+ else
|
|
+ output_obj=
|
|
+ need_locks=no
|
|
+ lockfile=
|
|
+ fi
|
|
+
|
|
+ # Lock this critical section if it is needed
|
|
+ # We use this script file to make the link, it avoids creating a new file
|
|
+ if test "$need_locks" = yes; then
|
|
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
|
|
+ func_echo "Waiting for $lockfile to be removed"
|
|
+ sleep 2
|
|
+ done
|
|
+ elif test "$need_locks" = warn; then
|
|
+ if test -f "$lockfile"; then
|
|
+ $ECHO "\
|
|
+*** ERROR, $lockfile exists and contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+repeat this compilation, it may succeed, by chance, but you had better
|
|
+avoid parallel builds (make -j) in this platform, or get a better
|
|
+compiler."
|
|
+
|
|
+ $opt_dry_run || $RM $removelist
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+ removelist="$removelist $output_obj"
|
|
+ $ECHO "$srcfile" > "$lockfile"
|
|
+ fi
|
|
+
|
|
+ $opt_dry_run || $RM $removelist
|
|
+ removelist="$removelist $lockfile"
|
|
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
|
|
+
|
|
+ if test -n "$fix_srcfile_path"; then
|
|
+ eval srcfile=\"$fix_srcfile_path\"
|
|
+ fi
|
|
+ func_quote_for_eval "$srcfile"
|
|
+ qsrcfile=$func_quote_for_eval_result
|
|
+
|
|
+ # Only build a PIC object if we are building libtool libraries.
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ # Without this assignment, base_compile gets emptied.
|
|
+ fbsd_hideous_sh_bug=$base_compile
|
|
+
|
|
+ if test "$pic_mode" != no; then
|
|
+ command="$base_compile $qsrcfile $pic_flag"
|
|
+ else
|
|
+ # Don't build PIC code
|
|
+ command="$base_compile $qsrcfile"
|
|
+ fi
|
|
+
|
|
+ func_mkdir_p "$xdir$objdir"
|
|
+
|
|
+ if test -z "$output_obj"; then
|
|
+ # Place PIC objects in $objdir
|
|
+ command="$command -o $lobj"
|
|
+ fi
|
|
+
|
|
+ func_show_eval_locale "$command" \
|
|
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
|
|
+
|
|
+ if test "$need_locks" = warn &&
|
|
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
|
|
+ $ECHO "\
|
|
+*** ERROR, $lockfile contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+but it should contain:
|
|
+$srcfile
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+repeat this compilation, it may succeed, by chance, but you had better
|
|
+avoid parallel builds (make -j) in this platform, or get a better
|
|
+compiler."
|
|
+
|
|
+ $opt_dry_run || $RM $removelist
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ # Just move the object if needed, then go on to compile the next one
|
|
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
|
|
+ func_show_eval '$MV "$output_obj" "$lobj"' \
|
|
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
|
|
+ fi
|
|
+
|
|
+ # Allow error messages only from the first compilation.
|
|
+ if test "$suppress_opt" = yes; then
|
|
+ suppress_output=' >/dev/null 2>&1'
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Only build a position-dependent object if we build old libraries.
|
|
+ if test "$build_old_libs" = yes; then
|
|
+ if test "$pic_mode" != yes; then
|
|
+ # Don't build PIC code
|
|
+ command="$base_compile $qsrcfile$pie_flag"
|
|
+ else
|
|
+ command="$base_compile $qsrcfile $pic_flag"
|
|
+ fi
|
|
+ if test "$compiler_c_o" = yes; then
|
|
+ command="$command -o $obj"
|
|
+ fi
|
|
+
|
|
+ # Suppress compiler output if we already did a PIC compilation.
|
|
+ command="$command$suppress_output"
|
|
+ func_show_eval_locale "$command" \
|
|
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
|
|
+
|
|
+ if test "$need_locks" = warn &&
|
|
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
|
|
+ $ECHO "\
|
|
+*** ERROR, $lockfile contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+but it should contain:
|
|
+$srcfile
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+repeat this compilation, it may succeed, by chance, but you had better
|
|
+avoid parallel builds (make -j) in this platform, or get a better
|
|
+compiler."
|
|
+
|
|
+ $opt_dry_run || $RM $removelist
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ # Just move the object if needed
|
|
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
|
|
+ func_show_eval '$MV "$output_obj" "$obj"' \
|
|
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ $opt_dry_run || {
|
|
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
|
|
+
|
|
+ # Unlock the critical section if it was locked
|
|
+ if test "$need_locks" != no; then
|
|
+ removelist=$lockfile
|
|
+ $RM "$lockfile"
|
|
+ fi
|
|
+ }
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+}
|
|
+
|
|
+$opt_help || {
|
|
+test "$mode" = compile && func_mode_compile ${1+"$@"}
|
|
+}
|
|
+
|
|
+func_mode_help ()
|
|
+{
|
|
+ # We need to display help for each of the modes.
|
|
+ case $mode in
|
|
+ "")
|
|
+ # Generic help is extracted from the usage comments
|
|
+ # at the start of this file.
|
|
+ func_help
|
|
+ ;;
|
|
+
|
|
+ clean)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
|
|
+
|
|
+Remove files from the build directory.
|
|
+
|
|
+RM is the name of the program to use to delete files associated with each FILE
|
|
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
|
|
+to RM.
|
|
+
|
|
+If FILE is a libtool library, object or program, all the files associated
|
|
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
|
|
+ ;;
|
|
+
|
|
+ compile)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
|
|
+
|
|
+Compile a source file into a libtool library object.
|
|
+
|
|
+This mode accepts the following additional options:
|
|
+
|
|
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
|
|
+ -no-suppress do not suppress compiler output for multiple passes
|
|
+ -prefer-pic try to building PIC objects only
|
|
+ -prefer-non-pic try to building non-PIC objects only
|
|
+ -shared do not build a \`.o' file suitable for static linking
|
|
+ -static only build a \`.o' file suitable for static linking
|
|
+
|
|
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
|
|
+from the given SOURCEFILE.
|
|
+
|
|
+The output file name is determined by removing the directory component from
|
|
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
|
|
+library object suffix, \`.lo'."
|
|
+ ;;
|
|
+
|
|
+ execute)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
|
|
+
|
|
+Automatically set library path, then run a program.
|
|
+
|
|
+This mode accepts the following additional options:
|
|
+
|
|
+ -dlopen FILE add the directory containing FILE to the library path
|
|
+
|
|
+This mode sets the library path environment variable according to \`-dlopen'
|
|
+flags.
|
|
+
|
|
+If any of the ARGS are libtool executable wrappers, then they are translated
|
|
+into their corresponding uninstalled binary, and any of their required library
|
|
+directories are added to the library path.
|
|
+
|
|
+Then, COMMAND is executed, with ARGS as arguments."
|
|
+ ;;
|
|
+
|
|
+ finish)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
|
|
+
|
|
+Complete the installation of libtool libraries.
|
|
+
|
|
+Each LIBDIR is a directory that contains libtool libraries.
|
|
+
|
|
+The commands that this mode executes may require superuser privileges. Use
|
|
+the \`--dry-run' option if you just want to see what would be executed."
|
|
+ ;;
|
|
+
|
|
+ install)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
|
|
+
|
|
+Install executables or libraries.
|
|
+
|
|
+INSTALL-COMMAND is the installation command. The first component should be
|
|
+either the \`install' or \`cp' program.
|
|
+
|
|
+The following components of INSTALL-COMMAND are treated specially:
|
|
+
|
|
+ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
|
|
+
|
|
+The rest of the components are interpreted as arguments to that command (only
|
|
+BSD-compatible install options are recognized)."
|
|
+ ;;
|
|
+
|
|
+ link)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
|
|
+
|
|
+Link object files or libraries together to form another library, or to
|
|
+create an executable program.
|
|
+
|
|
+LINK-COMMAND is a command using the C compiler that you would use to create
|
|
+a program from several object files.
|
|
+
|
|
+The following components of LINK-COMMAND are treated specially:
|
|
+
|
|
+ -all-static do not do any dynamic linking at all
|
|
+ -avoid-version do not add a version suffix if possible
|
|
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
|
|
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
|
|
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
|
|
+ -export-symbols SYMFILE
|
|
+ try to export only the symbols listed in SYMFILE
|
|
+ -export-symbols-regex REGEX
|
|
+ try to export only the symbols matching REGEX
|
|
+ -LLIBDIR search LIBDIR for required installed libraries
|
|
+ -lNAME OUTPUT-FILE requires the installed library libNAME
|
|
+ -module build a library that can dlopened
|
|
+ -no-fast-install disable the fast-install mode
|
|
+ -no-install link a not-installable executable
|
|
+ -no-undefined declare that a library does not refer to external symbols
|
|
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
|
|
+ -objectlist FILE Use a list of object files found in FILE to specify objects
|
|
+ -precious-files-regex REGEX
|
|
+ don't remove output files matching REGEX
|
|
+ -release RELEASE specify package release information
|
|
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
|
|
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
|
|
+ -shared only do dynamic linking of libtool libraries
|
|
+ -shrext SUFFIX override the standard shared library file extension
|
|
+ -static do not do any dynamic linking of uninstalled libtool libraries
|
|
+ -static-libtool-libs
|
|
+ do not do any dynamic linking of libtool libraries
|
|
+ -version-info CURRENT[:REVISION[:AGE]]
|
|
+ specify library version info [each variable defaults to 0]
|
|
+ -weak LIBNAME declare that the target provides the LIBNAME interface
|
|
+
|
|
+All other options (arguments beginning with \`-') are ignored.
|
|
+
|
|
+Every other argument is treated as a filename. Files ending in \`.la' are
|
|
+treated as uninstalled libtool libraries, other files are standard or library
|
|
+object files.
|
|
+
|
|
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
|
|
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
|
|
+required, except when creating a convenience library.
|
|
+
|
|
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
|
|
+using \`ar' and \`ranlib', or on Windows using \`lib'.
|
|
+
|
|
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
|
|
+is created, otherwise an executable program is created."
|
|
+ ;;
|
|
+
|
|
+ uninstall)
|
|
+ $ECHO \
|
|
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
|
|
+
|
|
+Remove libraries from an installation directory.
|
|
+
|
|
+RM is the name of the program to use to delete files associated with each FILE
|
|
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
|
|
+to RM.
|
|
+
|
|
+If FILE is a libtool library, all the files associated with it are deleted.
|
|
+Otherwise, only FILE itself is deleted using RM."
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ func_fatal_help "invalid operation mode \`$mode'"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ $ECHO
|
|
+ $ECHO "Try \`$progname --help' for more information about other modes."
|
|
+
|
|
+ exit $?
|
|
+}
|
|
+
|
|
+ # Now that we've collected a possible --mode arg, show help if necessary
|
|
+ $opt_help && func_mode_help
|
|
+
|
|
+
|
|
+# func_mode_execute arg...
|
|
+func_mode_execute ()
|
|
+{
|
|
+ $opt_debug
|
|
+ # The first argument is the command name.
|
|
+ cmd="$nonopt"
|
|
+ test -z "$cmd" && \
|
|
+ func_fatal_help "you must specify a COMMAND"
|
|
+
|
|
+ # Handle -dlopen flags immediately.
|
|
+ for file in $execute_dlfiles; do
|
|
+ test -f "$file" \
|
|
+ || func_fatal_help "\`$file' is not a file"
|
|
+
|
|
+ dir=
|
|
+ case $file in
|
|
+ *.la)
|
|
+ # Check to see that this really is a libtool archive.
|
|
+ func_lalib_unsafe_p "$file" \
|
|
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
|
|
+
|
|
+ # Read the libtool library.
|
|
+ dlname=
|
|
+ library_names=
|
|
+ func_source "$file"
|
|
+
|
|
+ # Skip this library if it cannot be dlopened.
|
|
+ if test -z "$dlname"; then
|
|
+ # Warn if it was a shared library.
|
|
+ test -n "$library_names" && \
|
|
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ func_dirname "$file" "" "."
|
|
+ dir="$func_dirname_result"
|
|
+
|
|
+ if test -f "$dir/$objdir/$dlname"; then
|
|
+ dir="$dir/$objdir"
|
|
+ else
|
|
+ if test ! -f "$dir/$dlname"; then
|
|
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *.lo)
|
|
+ # Just add the directory containing the .lo file.
|
|
+ func_dirname "$file" "" "."
|
|
+ dir="$func_dirname_result"
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Get the absolute pathname.
|
|
+ absdir=`cd "$dir" && pwd`
|
|
+ test -n "$absdir" && dir="$absdir"
|
|
+
|
|
+ # Now add the directory to shlibpath_var.
|
|
+ if eval "test -z \"\$$shlibpath_var\""; then
|
|
+ eval "$shlibpath_var=\"\$dir\""
|
|
+ else
|
|
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ # This variable tells wrapper scripts just to set shlibpath_var
|
|
+ # rather than running their programs.
|
|
+ libtool_execute_magic="$magic"
|
|
+
|
|
+ # Check if any of the arguments is a wrapper script.
|
|
+ args=
|
|
+ for file
|
|
+ do
|
|
+ case $file in
|
|
+ -*) ;;
|
|
+ *)
|
|
+ # Do a test to see if this is really a libtool program.
|
|
+ if func_ltwrapper_script_p "$file"; then
|
|
+ func_source "$file"
|
|
+ # Transform arg to wrapped name.
|
|
+ file="$progdir/$program"
|
|
+ elif func_ltwrapper_executable_p "$file"; then
|
|
+ func_ltwrapper_scriptname "$file"
|
|
+ func_source "$func_ltwrapper_scriptname_result"
|
|
+ # Transform arg to wrapped name.
|
|
+ file="$progdir/$program"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ # Quote arguments (to preserve shell metacharacters).
|
|
+ func_quote_for_eval "$file"
|
|
+ args="$args $func_quote_for_eval_result"
|
|
+ done
|
|
+
|
|
+ if test "X$opt_dry_run" = Xfalse; then
|
|
+ if test -n "$shlibpath_var"; then
|
|
+ # Export the shlibpath_var.
|
|
+ eval "export $shlibpath_var"
|
|
+ fi
|
|
+
|
|
+ # Restore saved environment variables
|
|
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
|
|
+ do
|
|
+ eval "if test \"\${save_$lt_var+set}\" = set; then
|
|
+ $lt_var=\$save_$lt_var; export $lt_var
|
|
+ else
|
|
+ $lt_unset $lt_var
|
|
+ fi"
|
|
+ done
|
|
+
|
|
+ # Now prepare to actually exec the command.
|
|
+ exec_cmd="\$cmd$args"
|
|
+ else
|
|
+ # Display what would be done.
|
|
+ if test -n "$shlibpath_var"; then
|
|
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
|
|
+ $ECHO "export $shlibpath_var"
|
|
+ fi
|
|
+ $ECHO "$cmd$args"
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+}
|
|
+
|
|
+test "$mode" = execute && func_mode_execute ${1+"$@"}
|
|
+
|
|
+
|
|
+# func_mode_finish arg...
|
|
+func_mode_finish ()
|
|
+{
|
|
+ $opt_debug
|
|
+ libdirs="$nonopt"
|
|
+ admincmds=
|
|
+
|
|
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
|
|
+ for dir
|
|
+ do
|
|
+ libdirs="$libdirs $dir"
|
|
+ done
|
|
+
|
|
+ for libdir in $libdirs; do
|
|
+ if test -n "$finish_cmds"; then
|
|
+ # Do each command in the finish commands.
|
|
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
|
|
+'"$cmd"'"'
|
|
+ fi
|
|
+ if test -n "$finish_eval"; then
|
|
+ # Do the single finish_eval.
|
|
+ eval cmds=\"$finish_eval\"
|
|
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
|
|
+ $cmds"
|
|
+ fi
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ # Exit here if they wanted silent mode.
|
|
+ $opt_silent && exit $EXIT_SUCCESS
|
|
+
|
|
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
|
|
+ $ECHO "Libraries have been installed in:"
|
|
+ for libdir in $libdirs; do
|
|
+ $ECHO " $libdir"
|
|
+ done
|
|
+ $ECHO
|
|
+ $ECHO "If you ever happen to want to link against installed libraries"
|
|
+ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
|
|
+ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
|
|
+ $ECHO "flag during linking and do at least one of the following:"
|
|
+ if test -n "$shlibpath_var"; then
|
|
+ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
|
|
+ $ECHO " during execution"
|
|
+ fi
|
|
+ if test -n "$runpath_var"; then
|
|
+ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
|
|
+ $ECHO " during linking"
|
|
+ fi
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ libdir=LIBDIR
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+
|
|
+ $ECHO " - use the \`$flag' linker flag"
|
|
+ fi
|
|
+ if test -n "$admincmds"; then
|
|
+ $ECHO " - have your system administrator run these commands:$admincmds"
|
|
+ fi
|
|
+ if test -f /etc/ld.so.conf; then
|
|
+ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
|
|
+ fi
|
|
+ $ECHO
|
|
+
|
|
+ $ECHO "See any operating system documentation about shared libraries for"
|
|
+ case $host in
|
|
+ solaris2.[6789]|solaris2.1[0-9])
|
|
+ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
|
|
+ $ECHO "pages."
|
|
+ ;;
|
|
+ *)
|
|
+ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
|
|
+ ;;
|
|
+ esac
|
|
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
|
|
+ exit $EXIT_SUCCESS
|
|
+}
|
|
+
|
|
+test "$mode" = finish && func_mode_finish ${1+"$@"}
|
|
+
|
|
+
|
|
+# func_mode_install arg...
|
|
+func_mode_install ()
|
|
+{
|
|
+ $opt_debug
|
|
+ # There may be an optional sh(1) argument at the beginning of
|
|
+ # install_prog (especially on Windows NT).
|
|
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
|
|
+ # Allow the use of GNU shtool's install command.
|
|
+ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
|
|
+ # Aesthetically quote it.
|
|
+ func_quote_for_eval "$nonopt"
|
|
+ install_prog="$func_quote_for_eval_result "
|
|
+ arg=$1
|
|
+ shift
|
|
+ else
|
|
+ install_prog=
|
|
+ arg=$nonopt
|
|
+ fi
|
|
+
|
|
+ # The real first argument should be the name of the installation program.
|
|
+ # Aesthetically quote it.
|
|
+ func_quote_for_eval "$arg"
|
|
+ install_prog="$install_prog$func_quote_for_eval_result"
|
|
+
|
|
+ # We need to accept at least all the BSD install flags.
|
|
+ dest=
|
|
+ files=
|
|
+ opts=
|
|
+ prev=
|
|
+ install_type=
|
|
+ isdir=no
|
|
+ stripme=
|
|
+ for arg
|
|
+ do
|
|
+ if test -n "$dest"; then
|
|
+ files="$files $dest"
|
|
+ dest=$arg
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ case $arg in
|
|
+ -d) isdir=yes ;;
|
|
+ -f)
|
|
+ case " $install_prog " in
|
|
+ *[\\\ /]cp\ *) ;;
|
|
+ *) prev=$arg ;;
|
|
+ esac
|
|
+ ;;
|
|
+ -g | -m | -o)
|
|
+ prev=$arg
|
|
+ ;;
|
|
+ -s)
|
|
+ stripme=" -s"
|
|
+ continue
|
|
+ ;;
|
|
+ -*)
|
|
+ ;;
|
|
+ *)
|
|
+ # If the previous option needed an argument, then skip it.
|
|
+ if test -n "$prev"; then
|
|
+ prev=
|
|
+ else
|
|
+ dest=$arg
|
|
+ continue
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Aesthetically quote the argument.
|
|
+ func_quote_for_eval "$arg"
|
|
+ install_prog="$install_prog $func_quote_for_eval_result"
|
|
+ done
|
|
+
|
|
+ test -z "$install_prog" && \
|
|
+ func_fatal_help "you must specify an install program"
|
|
+
|
|
+ test -n "$prev" && \
|
|
+ func_fatal_help "the \`$prev' option requires an argument"
|
|
+
|
|
+ if test -z "$files"; then
|
|
+ if test -z "$dest"; then
|
|
+ func_fatal_help "no file or destination specified"
|
|
+ else
|
|
+ func_fatal_help "you must specify a destination"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Strip any trailing slash from the destination.
|
|
+ func_stripname '' '/' "$dest"
|
|
+ dest=$func_stripname_result
|
|
+
|
|
+ # Check to see that the destination is a directory.
|
|
+ test -d "$dest" && isdir=yes
|
|
+ if test "$isdir" = yes; then
|
|
+ destdir="$dest"
|
|
+ destname=
|
|
+ else
|
|
+ func_dirname_and_basename "$dest" "" "."
|
|
+ destdir="$func_dirname_result"
|
|
+ destname="$func_basename_result"
|
|
+
|
|
+ # Not a directory, so check to see that there is only one file specified.
|
|
+ set dummy $files; shift
|
|
+ test "$#" -gt 1 && \
|
|
+ func_fatal_help "\`$dest' is not a directory"
|
|
+ fi
|
|
+ case $destdir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
|
|
+ *)
|
|
+ for file in $files; do
|
|
+ case $file in
|
|
+ *.lo) ;;
|
|
+ *)
|
|
+ func_fatal_help "\`$destdir' must be an absolute directory name"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # This variable tells wrapper scripts just to set variables rather
|
|
+ # than running their programs.
|
|
+ libtool_install_magic="$magic"
|
|
+
|
|
+ staticlibs=
|
|
+ future_libdirs=
|
|
+ current_libdirs=
|
|
+ for file in $files; do
|
|
+
|
|
+ # Do each installation.
|
|
+ case $file in
|
|
+ *.$libext)
|
|
+ # Do the static libraries later.
|
|
+ staticlibs="$staticlibs $file"
|
|
+ ;;
|
|
+
|
|
+ *.la)
|
|
+ # Check to see that this really is a libtool archive.
|
|
+ func_lalib_unsafe_p "$file" \
|
|
+ || func_fatal_help "\`$file' is not a valid libtool archive"
|
|
+
|
|
+ library_names=
|
|
+ old_library=
|
|
+ relink_command=
|
|
+ func_source "$file"
|
|
+
|
|
+ # Add the libdir to current_libdirs if it is the destination.
|
|
+ if test "X$destdir" = "X$libdir"; then
|
|
+ case "$current_libdirs " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) current_libdirs="$current_libdirs $libdir" ;;
|
|
+ esac
|
|
+ else
|
|
+ # Note the libdir as a future libdir.
|
|
+ case "$future_libdirs " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) future_libdirs="$future_libdirs $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ func_dirname "$file" "/" ""
|
|
+ dir="$func_dirname_result"
|
|
+ dir="$dir$objdir"
|
|
+
|
|
+ if test -n "$relink_command"; then
|
|
+ # Determine the prefix the user has applied to our future dir.
|
|
+ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
|
|
+
|
|
+ # Don't allow the user to place us outside of our expected
|
|
+ # location b/c this prevents finding dependent libraries that
|
|
+ # are installed to the same prefix.
|
|
+ # At present, this check doesn't affect windows .dll's that
|
|
+ # are installed into $libdir/../bin (currently, that works fine)
|
|
+ # but it's something to keep an eye on.
|
|
+ test "$inst_prefix_dir" = "$destdir" && \
|
|
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
|
|
+
|
|
+ if test -n "$inst_prefix_dir"; then
|
|
+ # Stick the inst_prefix_dir data into the link command.
|
|
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
|
|
+ else
|
|
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
|
|
+ fi
|
|
+
|
|
+ func_warning "relinking \`$file'"
|
|
+ func_show_eval "$relink_command" \
|
|
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
|
|
+ fi
|
|
+
|
|
+ # See the names of the shared library.
|
|
+ set dummy $library_names; shift
|
|
+ if test -n "$1"; then
|
|
+ realname="$1"
|
|
+ shift
|
|
+
|
|
+ srcname="$realname"
|
|
+ test -n "$relink_command" && srcname="$realname"T
|
|
+
|
|
+ # Install the shared library and build the symlinks.
|
|
+ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
|
|
+ 'exit $?'
|
|
+ tstripme="$stripme"
|
|
+ case $host_os in
|
|
+ cygwin* | mingw* | pw32* | cegcc*)
|
|
+ case $realname in
|
|
+ *.dll.a)
|
|
+ tstripme=""
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ if test -n "$tstripme" && test -n "$striplib"; then
|
|
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ if test "$#" -gt 0; then
|
|
+ # Delete the old symlinks, and create new ones.
|
|
+ # Try `ln -sf' first, because the `ln' binary might depend on
|
|
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
|
|
+ # so we also need to try rm && ln -s.
|
|
+ for linkname
|
|
+ do
|
|
+ test "$linkname" != "$realname" \
|
|
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ # Do each command in the postinstall commands.
|
|
+ lib="$destdir/$realname"
|
|
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ # Install the pseudo-library for information purposes.
|
|
+ func_basename "$file"
|
|
+ name="$func_basename_result"
|
|
+ instname="$dir/$name"i
|
|
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
|
|
+
|
|
+ # Maybe install the static library, too.
|
|
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
|
|
+ ;;
|
|
+
|
|
+ *.lo)
|
|
+ # Install (i.e. copy) a libtool object.
|
|
+
|
|
+ # Figure out destination file name, if it wasn't already specified.
|
|
+ if test -n "$destname"; then
|
|
+ destfile="$destdir/$destname"
|
|
+ else
|
|
+ func_basename "$file"
|
|
+ destfile="$func_basename_result"
|
|
+ destfile="$destdir/$destfile"
|
|
+ fi
|
|
+
|
|
+ # Deduce the name of the destination old-style object file.
|
|
+ case $destfile in
|
|
+ *.lo)
|
|
+ func_lo2o "$destfile"
|
|
+ staticdest=$func_lo2o_result
|
|
+ ;;
|
|
+ *.$objext)
|
|
+ staticdest="$destfile"
|
|
+ destfile=
|
|
+ ;;
|
|
+ *)
|
|
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Install the libtool object if requested.
|
|
+ test -n "$destfile" && \
|
|
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
|
|
+
|
|
+ # Install the old object if enabled.
|
|
+ if test "$build_old_libs" = yes; then
|
|
+ # Deduce the name of the old-style object file.
|
|
+ func_lo2o "$file"
|
|
+ staticobj=$func_lo2o_result
|
|
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
|
|
+ fi
|
|
+ exit $EXIT_SUCCESS
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ # Figure out destination file name, if it wasn't already specified.
|
|
+ if test -n "$destname"; then
|
|
+ destfile="$destdir/$destname"
|
|
+ else
|
|
+ func_basename "$file"
|
|
+ destfile="$func_basename_result"
|
|
+ destfile="$destdir/$destfile"
|
|
+ fi
|
|
+
|
|
+ # If the file is missing, and there is a .exe on the end, strip it
|
|
+ # because it is most likely a libtool script we actually want to
|
|
+ # install
|
|
+ stripped_ext=""
|
|
+ case $file in
|
|
+ *.exe)
|
|
+ if test ! -f "$file"; then
|
|
+ func_stripname '' '.exe' "$file"
|
|
+ file=$func_stripname_result
|
|
+ stripped_ext=".exe"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Do a test to see if this is really a libtool program.
|
|
+ case $host in
|
|
+ *cygwin* | *mingw*)
|
|
+ if func_ltwrapper_executable_p "$file"; then
|
|
+ func_ltwrapper_scriptname "$file"
|
|
+ wrapper=$func_ltwrapper_scriptname_result
|
|
+ else
|
|
+ func_stripname '' '.exe' "$file"
|
|
+ wrapper=$func_stripname_result
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ wrapper=$file
|
|
+ ;;
|
|
+ esac
|
|
+ if func_ltwrapper_script_p "$wrapper"; then
|
|
+ notinst_deplibs=
|
|
+ relink_command=
|
|
+
|
|
+ func_source "$wrapper"
|
|
+
|
|
+ # Check the variables that should have been set.
|
|
+ test -z "$generated_by_libtool_version" && \
|
|
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
|
|
+
|
|
+ finalize=yes
|
|
+ for lib in $notinst_deplibs; do
|
|
+ # Check to see that each library is installed.
|
|
+ libdir=
|
|
+ if test -f "$lib"; then
|
|
+ func_source "$lib"
|
|
+ fi
|
|
+ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
|
|
+ if test -n "$libdir" && test ! -f "$libfile"; then
|
|
+ func_warning "\`$lib' has not been installed in \`$libdir'"
|
|
+ finalize=no
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ relink_command=
|
|
+ func_source "$wrapper"
|
|
+
|
|
+ outputname=
|
|
+ if test "$fast_install" = no && test -n "$relink_command"; then
|
|
+ $opt_dry_run || {
|
|
+ if test "$finalize" = yes; then
|
|
+ tmpdir=`func_mktempdir`
|
|
+ func_basename "$file$stripped_ext"
|
|
+ file="$func_basename_result"
|
|
+ outputname="$tmpdir/$file"
|
|
+ # Replace the output file specification.
|
|
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
|
|
+
|
|
+ $opt_silent || {
|
|
+ func_quote_for_expand "$relink_command"
|
|
+ eval "func_echo $func_quote_for_expand_result"
|
|
+ }
|
|
+ if eval "$relink_command"; then :
|
|
+ else
|
|
+ func_error "error: relink \`$file' with the above command before installing it"
|
|
+ $opt_dry_run || ${RM}r "$tmpdir"
|
|
+ continue
|
|
+ fi
|
|
+ file="$outputname"
|
|
+ else
|
|
+ func_warning "cannot relink \`$file'"
|
|
+ fi
|
|
+ }
|
|
+ else
|
|
+ # Install the binary that we compiled earlier.
|
|
+ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # remove .exe since cygwin /usr/bin/install will append another
|
|
+ # one anyway
|
|
+ case $install_prog,$host in
|
|
+ */usr/bin/install*,*cygwin*)
|
|
+ case $file:$destfile in
|
|
+ *.exe:*.exe)
|
|
+ # this is ok
|
|
+ ;;
|
|
+ *.exe:*)
|
|
+ destfile=$destfile.exe
|
|
+ ;;
|
|
+ *:*.exe)
|
|
+ func_stripname '' '.exe' "$destfile"
|
|
+ destfile=$func_stripname_result
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
|
|
+ $opt_dry_run || if test -n "$outputname"; then
|
|
+ ${RM}r "$tmpdir"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ for file in $staticlibs; do
|
|
+ func_basename "$file"
|
|
+ name="$func_basename_result"
|
|
+
|
|
+ # Set up the ranlib parameters.
|
|
+ oldlib="$destdir/$name"
|
|
+
|
|
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
|
|
+
|
|
+ if test -n "$stripme" && test -n "$old_striplib"; then
|
|
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ # Do each command in the postinstall commands.
|
|
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
|
|
+ done
|
|
+
|
|
+ test -n "$future_libdirs" && \
|
|
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
|
|
+
|
|
+ if test -n "$current_libdirs"; then
|
|
+ # Maybe just do a dry run.
|
|
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
|
|
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
|
|
+ else
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+}
|
|
+
|
|
+test "$mode" = install && func_mode_install ${1+"$@"}
|
|
+
|
|
+
|
|
+# func_generate_dlsyms outputname originator pic_p
|
|
+# Extract symbols from dlprefiles and create ${outputname}S.o with
|
|
+# a dlpreopen symbol table.
|
|
+func_generate_dlsyms ()
|
|
+{
|
|
+ $opt_debug
|
|
+ my_outputname="$1"
|
|
+ my_originator="$2"
|
|
+ my_pic_p="${3-no}"
|
|
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
|
|
+ my_dlsyms=
|
|
+
|
|
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
|
|
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
|
|
+ my_dlsyms="${my_outputname}S.c"
|
|
+ else
|
|
+ func_error "not configured to extract global symbols from dlpreopened files"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test -n "$my_dlsyms"; then
|
|
+ case $my_dlsyms in
|
|
+ "") ;;
|
|
+ *.c)
|
|
+ # Discover the nlist of each of the dlfiles.
|
|
+ nlist="$output_objdir/${my_outputname}.nm"
|
|
+
|
|
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
|
|
+
|
|
+ # Parse the name list into a source file.
|
|
+ func_verbose "creating $output_objdir/$my_dlsyms"
|
|
+
|
|
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
|
|
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
|
|
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern \"C\" {
|
|
+#endif
|
|
+
|
|
+/* External symbol declarations for the compiler. */\
|
|
+"
|
|
+
|
|
+ if test "$dlself" = yes; then
|
|
+ func_verbose "generating symbol list for \`$output'"
|
|
+
|
|
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
|
|
+
|
|
+ # Add our own program objects to the symbol list.
|
|
+ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
|
|
+ for progfile in $progfiles; do
|
|
+ func_verbose "extracting global C symbols from \`$progfile'"
|
|
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
|
|
+ done
|
|
+
|
|
+ if test -n "$exclude_expsyms"; then
|
|
+ $opt_dry_run || {
|
|
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
|
|
+ eval '$MV "$nlist"T "$nlist"'
|
|
+ }
|
|
+ fi
|
|
+
|
|
+ if test -n "$export_symbols_regex"; then
|
|
+ $opt_dry_run || {
|
|
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
|
|
+ eval '$MV "$nlist"T "$nlist"'
|
|
+ }
|
|
+ fi
|
|
+
|
|
+ # Prepare the list of exported symbols
|
|
+ if test -z "$export_symbols"; then
|
|
+ export_symbols="$output_objdir/$outputname.exp"
|
|
+ $opt_dry_run || {
|
|
+ $RM $export_symbols
|
|
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* | *cegcc* )
|
|
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
|
|
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
|
|
+ ;;
|
|
+ esac
|
|
+ }
|
|
+ else
|
|
+ $opt_dry_run || {
|
|
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
|
|
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
|
|
+ eval '$MV "$nlist"T "$nlist"'
|
|
+ case $host in
|
|
+ *cygwin | *mingw* | *cegcc* )
|
|
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
|
|
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
|
|
+ ;;
|
|
+ esac
|
|
+ }
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ for dlprefile in $dlprefiles; do
|
|
+ func_verbose "extracting global C symbols from \`$dlprefile'"
|
|
+ func_basename "$dlprefile"
|
|
+ name="$func_basename_result"
|
|
+ $opt_dry_run || {
|
|
+ eval '$ECHO ": $name " >> "$nlist"'
|
|
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
|
|
+ }
|
|
+ done
|
|
+
|
|
+ $opt_dry_run || {
|
|
+ # Make sure we have at least an empty file.
|
|
+ test -f "$nlist" || : > "$nlist"
|
|
+
|
|
+ if test -n "$exclude_expsyms"; then
|
|
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
|
|
+ $MV "$nlist"T "$nlist"
|
|
+ fi
|
|
+
|
|
+ # Try sorting and uniquifying the output.
|
|
+ if $GREP -v "^: " < "$nlist" |
|
|
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
|
|
+ sort -k 3
|
|
+ else
|
|
+ sort +2
|
|
+ fi |
|
|
+ uniq > "$nlist"S; then
|
|
+ :
|
|
+ else
|
|
+ $GREP -v "^: " < "$nlist" > "$nlist"S
|
|
+ fi
|
|
+
|
|
+ if test -f "$nlist"S; then
|
|
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
|
|
+ else
|
|
+ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
|
|
+ fi
|
|
+
|
|
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
|
|
+
|
|
+/* The mapping between symbol names and symbols. */
|
|
+typedef struct {
|
|
+ const char *name;
|
|
+ void *address;
|
|
+} lt_dlsymlist;
|
|
+"
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* | *cegcc* )
|
|
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
|
|
+/* DATA imports from DLLs on WIN32 con't be const, because
|
|
+ runtime relocations are performed -- see ld's documentation
|
|
+ on pseudo-relocs. */"
|
|
+ lt_dlsym_const= ;;
|
|
+ *osf5*)
|
|
+ echo >> "$output_objdir/$my_dlsyms" "\
|
|
+/* This system does not cope well with relocations in const data */"
|
|
+ lt_dlsym_const= ;;
|
|
+ *)
|
|
+ lt_dlsym_const=const ;;
|
|
+ esac
|
|
+
|
|
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
|
|
+extern $lt_dlsym_const lt_dlsymlist
|
|
+lt_${my_prefix}_LTX_preloaded_symbols[];
|
|
+$lt_dlsym_const lt_dlsymlist
|
|
+lt_${my_prefix}_LTX_preloaded_symbols[] =
|
|
+{\
|
|
+ { \"$my_originator\", (void *) 0 },"
|
|
+
|
|
+ case $need_lib_prefix in
|
|
+ no)
|
|
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
|
|
+ ;;
|
|
+ *)
|
|
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
|
|
+ ;;
|
|
+ esac
|
|
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
|
|
+ {0, (void *) 0}
|
|
+};
|
|
+
|
|
+/* This works around a problem in FreeBSD linker */
|
|
+#ifdef FREEBSD_WORKAROUND
|
|
+static const void *lt_preloaded_setup() {
|
|
+ return lt_${my_prefix}_LTX_preloaded_symbols;
|
|
+}
|
|
+#endif
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif\
|
|
+"
|
|
+ } # !$opt_dry_run
|
|
+
|
|
+ pic_flag_for_symtable=
|
|
+ case "$compile_command " in
|
|
+ *" -static "*) ;;
|
|
+ *)
|
|
+ case $host in
|
|
+ # compiling the symbol table file with pic_flag works around
|
|
+ # a FreeBSD bug that causes programs to crash when -lm is
|
|
+ # linked before any other PIC object. But we must not use
|
|
+ # pic_flag when linking with -static. The problem exists in
|
|
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
|
|
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
|
|
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
|
|
+ *-*-hpux*)
|
|
+ pic_flag_for_symtable=" $pic_flag" ;;
|
|
+ *)
|
|
+ if test "X$my_pic_p" != Xno; then
|
|
+ pic_flag_for_symtable=" $pic_flag"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ symtab_cflags=
|
|
+ for arg in $LTCFLAGS; do
|
|
+ case $arg in
|
|
+ -pie | -fpie | -fPIE) ;;
|
|
+ *) symtab_cflags="$symtab_cflags $arg" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # Now compile the dynamic symbol file.
|
|
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
|
|
+
|
|
+ # Clean up the generated files.
|
|
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
|
|
+
|
|
+ # Transform the symbol file into the correct name.
|
|
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* | *cegcc* )
|
|
+ if test -f "$output_objdir/$my_outputname.def"; then
|
|
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
|
|
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
|
|
+ else
|
|
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
|
|
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
|
|
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *)
|
|
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ # We keep going just in case the user didn't refer to
|
|
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
|
|
+ # really was required.
|
|
+
|
|
+ # Nullify the symbol file.
|
|
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
|
|
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
|
|
+ fi
|
|
+}
|
|
+
|
|
+# func_win32_libid arg
|
|
+# return the library type of file 'arg'
|
|
+#
|
|
+# Need a lot of goo to handle *both* DLLs and import libs
|
|
+# Has to be a shell function in order to 'eat' the argument
|
|
+# that is supplied when $file_magic_command is called.
|
|
+func_win32_libid ()
|
|
+{
|
|
+ $opt_debug
|
|
+ win32_libid_type="unknown"
|
|
+ win32_fileres=`file -L $1 2>/dev/null`
|
|
+ case $win32_fileres in
|
|
+ *ar\ archive\ import\ library*) # definitely import
|
|
+ win32_libid_type="x86 archive import"
|
|
+ ;;
|
|
+ *ar\ archive*) # could be an import, or static
|
|
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
|
|
+ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
|
|
+ win32_nmres=`eval $NM -f posix -A $1 |
|
|
+ $SED -n -e '
|
|
+ 1,100{
|
|
+ / I /{
|
|
+ s,.*,import,
|
|
+ p
|
|
+ q
|
|
+ }
|
|
+ }'`
|
|
+ case $win32_nmres in
|
|
+ import*) win32_libid_type="x86 archive import";;
|
|
+ *) win32_libid_type="x86 archive static";;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+ *DLL*)
|
|
+ win32_libid_type="x86 DLL"
|
|
+ ;;
|
|
+ *executable*) # but shell scripts are "executable" too...
|
|
+ case $win32_fileres in
|
|
+ *MS\ Windows\ PE\ Intel*)
|
|
+ win32_libid_type="x86 DLL"
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ $ECHO "$win32_libid_type"
|
|
+}
|
|
+
|
|
+
|
|
+
|
|
+# func_extract_an_archive dir oldlib
|
|
+func_extract_an_archive ()
|
|
+{
|
|
+ $opt_debug
|
|
+ f_ex_an_ar_dir="$1"; shift
|
|
+ f_ex_an_ar_oldlib="$1"
|
|
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
|
|
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
|
|
+ :
|
|
+ else
|
|
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+# func_extract_archives gentop oldlib ...
|
|
+func_extract_archives ()
|
|
+{
|
|
+ $opt_debug
|
|
+ my_gentop="$1"; shift
|
|
+ my_oldlibs=${1+"$@"}
|
|
+ my_oldobjs=""
|
|
+ my_xlib=""
|
|
+ my_xabs=""
|
|
+ my_xdir=""
|
|
+
|
|
+ for my_xlib in $my_oldlibs; do
|
|
+ # Extract the objects.
|
|
+ case $my_xlib in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
|
|
+ *) my_xabs=`pwd`"/$my_xlib" ;;
|
|
+ esac
|
|
+ func_basename "$my_xlib"
|
|
+ my_xlib="$func_basename_result"
|
|
+ my_xlib_u=$my_xlib
|
|
+ while :; do
|
|
+ case " $extracted_archives " in
|
|
+ *" $my_xlib_u "*)
|
|
+ func_arith $extracted_serial + 1
|
|
+ extracted_serial=$func_arith_result
|
|
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
|
|
+ *) break ;;
|
|
+ esac
|
|
+ done
|
|
+ extracted_archives="$extracted_archives $my_xlib_u"
|
|
+ my_xdir="$my_gentop/$my_xlib_u"
|
|
+
|
|
+ func_mkdir_p "$my_xdir"
|
|
+
|
|
+ case $host in
|
|
+ *-darwin*)
|
|
+ func_verbose "Extracting $my_xabs"
|
|
+ # Do not bother doing anything if just a dry run
|
|
+ $opt_dry_run || {
|
|
+ darwin_orig_dir=`pwd`
|
|
+ cd $my_xdir || exit $?
|
|
+ darwin_archive=$my_xabs
|
|
+ darwin_curdir=`pwd`
|
|
+ darwin_base_archive=`basename "$darwin_archive"`
|
|
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
|
|
+ if test -n "$darwin_arches"; then
|
|
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
|
|
+ darwin_arch=
|
|
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
|
|
+ for darwin_arch in $darwin_arches ; do
|
|
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
|
|
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
|
|
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
|
|
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
|
|
+ cd "$darwin_curdir"
|
|
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
|
|
+ done # $darwin_arches
|
|
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
|
|
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
|
|
+ darwin_file=
|
|
+ darwin_files=
|
|
+ for darwin_file in $darwin_filelist; do
|
|
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
|
|
+ $LIPO -create -output "$darwin_file" $darwin_files
|
|
+ done # $darwin_filelist
|
|
+ $RM -rf unfat-$$
|
|
+ cd "$darwin_orig_dir"
|
|
+ else
|
|
+ cd $darwin_orig_dir
|
|
+ func_extract_an_archive "$my_xdir" "$my_xabs"
|
|
+ fi # $darwin_arches
|
|
+ } # !$opt_dry_run
|
|
+ ;;
|
|
+ *)
|
|
+ func_extract_an_archive "$my_xdir" "$my_xabs"
|
|
+ ;;
|
|
+ esac
|
|
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
|
|
+ done
|
|
+
|
|
+ func_extract_archives_result="$my_oldobjs"
|
|
+}
|
|
+
|
|
+
|
|
+
|
|
+# func_emit_wrapper_part1 [arg=no]
|
|
+#
|
|
+# Emit the first part of a libtool wrapper script on stdout.
|
|
+# For more information, see the description associated with
|
|
+# func_emit_wrapper(), below.
|
|
+func_emit_wrapper_part1 ()
|
|
+{
|
|
+ func_emit_wrapper_part1_arg1=no
|
|
+ if test -n "$1" ; then
|
|
+ func_emit_wrapper_part1_arg1=$1
|
|
+ fi
|
|
+
|
|
+ $ECHO "\
|
|
+#! $SHELL
|
|
+
|
|
+# $output - temporary wrapper script for $objdir/$outputname
|
|
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
|
|
+#
|
|
+# The $output program cannot be directly executed until all the libtool
|
|
+# libraries that it depends on are installed.
|
|
+#
|
|
+# This wrapper script should never be moved out of the build directory.
|
|
+# If it is, it will not operate correctly.
|
|
+
|
|
+# Sed substitution that helps us do robust quoting. It backslashifies
|
|
+# metacharacters that are still active within double-quoted strings.
|
|
+Xsed='${SED} -e 1s/^X//'
|
|
+sed_quote_subst='$sed_quote_subst'
|
|
+
|
|
+# Be Bourne compatible
|
|
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
|
|
+ emulate sh
|
|
+ NULLCMD=:
|
|
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
|
|
+ # is contrary to our usage. Disable this feature.
|
|
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
|
|
+ setopt NO_GLOB_SUBST
|
|
+else
|
|
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
|
|
+fi
|
|
+BIN_SH=xpg4; export BIN_SH # for Tru64
|
|
+DUALCASE=1; export DUALCASE # for MKS sh
|
|
+
|
|
+# The HP-UX ksh and POSIX shell print the target directory to stdout
|
|
+# if CDPATH is set.
|
|
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
|
+
|
|
+relink_command=\"$relink_command\"
|
|
+
|
|
+# This environment variable determines our operation mode.
|
|
+if test \"\$libtool_install_magic\" = \"$magic\"; then
|
|
+ # install mode needs the following variables:
|
|
+ generated_by_libtool_version='$macro_version'
|
|
+ notinst_deplibs='$notinst_deplibs'
|
|
+else
|
|
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
|
|
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
|
|
+ ECHO=\"$qecho\"
|
|
+ file=\"\$0\"
|
|
+ # Make sure echo works.
|
|
+ if test \"X\$1\" = X--no-reexec; then
|
|
+ # Discard the --no-reexec flag, and continue.
|
|
+ shift
|
|
+ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
|
|
+ # Yippee, \$ECHO works!
|
|
+ :
|
|
+ else
|
|
+ # Restart under the correct shell, and then maybe \$ECHO will work.
|
|
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
|
|
+ fi
|
|
+ fi\
|
|
+"
|
|
+ $ECHO "\
|
|
+
|
|
+ # Find the directory that this script lives in.
|
|
+ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
|
|
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
|
|
+
|
|
+ # Follow symbolic links until we get to the real thisdir.
|
|
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
|
|
+ while test -n \"\$file\"; do
|
|
+ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
|
|
+
|
|
+ # If there was a directory component, then change thisdir.
|
|
+ if test \"x\$destdir\" != \"x\$file\"; then
|
|
+ case \"\$destdir\" in
|
|
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
|
|
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
|
|
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
|
|
+ done
|
|
+"
|
|
+}
|
|
+# end: func_emit_wrapper_part1
|
|
+
|
|
+# func_emit_wrapper_part2 [arg=no]
|
|
+#
|
|
+# Emit the second part of a libtool wrapper script on stdout.
|
|
+# For more information, see the description associated with
|
|
+# func_emit_wrapper(), below.
|
|
+func_emit_wrapper_part2 ()
|
|
+{
|
|
+ func_emit_wrapper_part2_arg1=no
|
|
+ if test -n "$1" ; then
|
|
+ func_emit_wrapper_part2_arg1=$1
|
|
+ fi
|
|
+
|
|
+ $ECHO "\
|
|
+
|
|
+ # Usually 'no', except on cygwin/mingw when embedded into
|
|
+ # the cwrapper.
|
|
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
|
|
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
|
|
+ # special case for '.'
|
|
+ if test \"\$thisdir\" = \".\"; then
|
|
+ thisdir=\`pwd\`
|
|
+ fi
|
|
+ # remove .libs from thisdir
|
|
+ case \"\$thisdir\" in
|
|
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
|
|
+ $objdir ) thisdir=. ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Try to get the absolute directory name.
|
|
+ absdir=\`cd \"\$thisdir\" && pwd\`
|
|
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
|
|
+"
|
|
+
|
|
+ if test "$fast_install" = yes; then
|
|
+ $ECHO "\
|
|
+ program=lt-'$outputname'$exeext
|
|
+ progdir=\"\$thisdir/$objdir\"
|
|
+
|
|
+ if test ! -f \"\$progdir/\$program\" ||
|
|
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
|
|
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
|
|
+
|
|
+ file=\"\$\$-\$program\"
|
|
+
|
|
+ if test ! -d \"\$progdir\"; then
|
|
+ $MKDIR \"\$progdir\"
|
|
+ else
|
|
+ $RM \"\$progdir/\$file\"
|
|
+ fi"
|
|
+
|
|
+ $ECHO "\
|
|
+
|
|
+ # relink executable if necessary
|
|
+ if test -n \"\$relink_command\"; then
|
|
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
|
|
+ else
|
|
+ $ECHO \"\$relink_command_output\" >&2
|
|
+ $RM \"\$progdir/\$file\"
|
|
+ exit 1
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
|
|
+ { $RM \"\$progdir/\$program\";
|
|
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
|
|
+ $RM \"\$progdir/\$file\"
|
|
+ fi"
|
|
+ else
|
|
+ $ECHO "\
|
|
+ program='$outputname'
|
|
+ progdir=\"\$thisdir/$objdir\"
|
|
+"
|
|
+ fi
|
|
+
|
|
+ $ECHO "\
|
|
+
|
|
+ if test -f \"\$progdir/\$program\"; then"
|
|
+
|
|
+ # Export our shlibpath_var if we have one.
|
|
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
|
|
+ $ECHO "\
|
|
+ # Add our own library path to $shlibpath_var
|
|
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
|
|
+
|
|
+ # Some systems cannot cope with colon-terminated $shlibpath_var
|
|
+ # The second colon is a workaround for a bug in BeOS R4 sed
|
|
+ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
|
|
+
|
|
+ export $shlibpath_var
|
|
+"
|
|
+ fi
|
|
+
|
|
+ # fixup the dll searchpath if we need to.
|
|
+ if test -n "$dllsearchpath"; then
|
|
+ $ECHO "\
|
|
+ # Add the dll search path components to the executable PATH
|
|
+ PATH=$dllsearchpath:\$PATH
|
|
+"
|
|
+ fi
|
|
+
|
|
+ $ECHO "\
|
|
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
|
|
+ # Run the actual program with our arguments.
|
|
+"
|
|
+ case $host in
|
|
+ # Backslashes separate directories on plain windows
|
|
+ *-*-mingw | *-*-os2* | *-cegcc*)
|
|
+ $ECHO "\
|
|
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
|
|
+"
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ $ECHO "\
|
|
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
|
|
+"
|
|
+ ;;
|
|
+ esac
|
|
+ $ECHO "\
|
|
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
|
|
+ exit 1
|
|
+ fi
|
|
+ else
|
|
+ # The program doesn't exist.
|
|
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
|
|
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
|
|
+ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
|
|
+ exit 1
|
|
+ fi
|
|
+fi\
|
|
+"
|
|
+}
|
|
+# end: func_emit_wrapper_part2
|
|
+
|
|
+
|
|
+# func_emit_wrapper [arg=no]
|
|
+#
|
|
+# Emit a libtool wrapper script on stdout.
|
|
+# Don't directly open a file because we may want to
|
|
+# incorporate the script contents within a cygwin/mingw
|
|
+# wrapper executable. Must ONLY be called from within
|
|
+# func_mode_link because it depends on a number of variables
|
|
+# set therein.
|
|
+#
|
|
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
|
|
+# variable will take. If 'yes', then the emitted script
|
|
+# will assume that the directory in which it is stored is
|
|
+# the $objdir directory. This is a cygwin/mingw-specific
|
|
+# behavior.
|
|
+func_emit_wrapper ()
|
|
+{
|
|
+ func_emit_wrapper_arg1=no
|
|
+ if test -n "$1" ; then
|
|
+ func_emit_wrapper_arg1=$1
|
|
+ fi
|
|
+
|
|
+ # split this up so that func_emit_cwrapperexe_src
|
|
+ # can call each part independently.
|
|
+ func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
|
|
+ func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
|
|
+}
|
|
+
|
|
+
|
|
+# func_to_host_path arg
|
|
+#
|
|
+# Convert paths to host format when used with build tools.
|
|
+# Intended for use with "native" mingw (where libtool itself
|
|
+# is running under the msys shell), or in the following cross-
|
|
+# build environments:
|
|
+# $build $host
|
|
+# mingw (msys) mingw [e.g. native]
|
|
+# cygwin mingw
|
|
+# *nix + wine mingw
|
|
+# where wine is equipped with the `winepath' executable.
|
|
+# In the native mingw case, the (msys) shell automatically
|
|
+# converts paths for any non-msys applications it launches,
|
|
+# but that facility isn't available from inside the cwrapper.
|
|
+# Similar accommodations are necessary for $host mingw and
|
|
+# $build cygwin. Calling this function does no harm for other
|
|
+# $host/$build combinations not listed above.
|
|
+#
|
|
+# ARG is the path (on $build) that should be converted to
|
|
+# the proper representation for $host. The result is stored
|
|
+# in $func_to_host_path_result.
|
|
+func_to_host_path ()
|
|
+{
|
|
+ func_to_host_path_result="$1"
|
|
+ if test -n "$1" ; then
|
|
+ case $host in
|
|
+ *mingw* )
|
|
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
|
|
+ case $build in
|
|
+ *mingw* ) # actually, msys
|
|
+ # awkward: cmd appends spaces to result
|
|
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
|
|
+ func_to_host_path_tmp1=`( cmd //c echo "$1" |\
|
|
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
|
|
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
|
|
+ $SED -e "$lt_sed_naive_backslashify"`
|
|
+ ;;
|
|
+ *cygwin* )
|
|
+ func_to_host_path_tmp1=`cygpath -w "$1"`
|
|
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
|
|
+ $SED -e "$lt_sed_naive_backslashify"`
|
|
+ ;;
|
|
+ * )
|
|
+ # Unfortunately, winepath does not exit with a non-zero
|
|
+ # error code, so we are forced to check the contents of
|
|
+ # stdout. On the other hand, if the command is not
|
|
+ # found, the shell will set an exit code of 127 and print
|
|
+ # *an error message* to stdout. So we must check for both
|
|
+ # error code of zero AND non-empty stdout, which explains
|
|
+ # the odd construction:
|
|
+ func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
|
|
+ if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
|
|
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
|
|
+ $SED -e "$lt_sed_naive_backslashify"`
|
|
+ else
|
|
+ # Allow warning below.
|
|
+ func_to_host_path_result=""
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ if test -z "$func_to_host_path_result" ; then
|
|
+ func_error "Could not determine host path corresponding to"
|
|
+ func_error " '$1'"
|
|
+ func_error "Continuing, but uninstalled executables may not work."
|
|
+ # Fallback:
|
|
+ func_to_host_path_result="$1"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+}
|
|
+# end: func_to_host_path
|
|
+
|
|
+# func_to_host_pathlist arg
|
|
+#
|
|
+# Convert pathlists to host format when used with build tools.
|
|
+# See func_to_host_path(), above. This function supports the
|
|
+# following $build/$host combinations (but does no harm for
|
|
+# combinations not listed here):
|
|
+# $build $host
|
|
+# mingw (msys) mingw [e.g. native]
|
|
+# cygwin mingw
|
|
+# *nix + wine mingw
|
|
+#
|
|
+# Path separators are also converted from $build format to
|
|
+# $host format. If ARG begins or ends with a path separator
|
|
+# character, it is preserved (but converted to $host format)
|
|
+# on output.
|
|
+#
|
|
+# ARG is a pathlist (on $build) that should be converted to
|
|
+# the proper representation on $host. The result is stored
|
|
+# in $func_to_host_pathlist_result.
|
|
+func_to_host_pathlist ()
|
|
+{
|
|
+ func_to_host_pathlist_result="$1"
|
|
+ if test -n "$1" ; then
|
|
+ case $host in
|
|
+ *mingw* )
|
|
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
|
|
+ # Remove leading and trailing path separator characters from
|
|
+ # ARG. msys behavior is inconsistent here, cygpath turns them
|
|
+ # into '.;' and ';.', and winepath ignores them completely.
|
|
+ func_to_host_pathlist_tmp2="$1"
|
|
+ # Once set for this call, this variable should not be
|
|
+ # reassigned. It is used in tha fallback case.
|
|
+ func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
|
|
+ $SED -e 's|^:*||' -e 's|:*$||'`
|
|
+ case $build in
|
|
+ *mingw* ) # Actually, msys.
|
|
+ # Awkward: cmd appends spaces to result.
|
|
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
|
|
+ func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
|
|
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
|
|
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
|
|
+ $SED -e "$lt_sed_naive_backslashify"`
|
|
+ ;;
|
|
+ *cygwin* )
|
|
+ func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
|
|
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
|
|
+ $SED -e "$lt_sed_naive_backslashify"`
|
|
+ ;;
|
|
+ * )
|
|
+ # unfortunately, winepath doesn't convert pathlists
|
|
+ func_to_host_pathlist_result=""
|
|
+ func_to_host_pathlist_oldIFS=$IFS
|
|
+ IFS=:
|
|
+ for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
|
|
+ IFS=$func_to_host_pathlist_oldIFS
|
|
+ if test -n "$func_to_host_pathlist_f" ; then
|
|
+ func_to_host_path "$func_to_host_pathlist_f"
|
|
+ if test -n "$func_to_host_path_result" ; then
|
|
+ if test -z "$func_to_host_pathlist_result" ; then
|
|
+ func_to_host_pathlist_result="$func_to_host_path_result"
|
|
+ else
|
|
+ func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ IFS=:
|
|
+ done
|
|
+ IFS=$func_to_host_pathlist_oldIFS
|
|
+ ;;
|
|
+ esac
|
|
+ if test -z "$func_to_host_pathlist_result" ; then
|
|
+ func_error "Could not determine the host path(s) corresponding to"
|
|
+ func_error " '$1'"
|
|
+ func_error "Continuing, but uninstalled executables may not work."
|
|
+ # Fallback. This may break if $1 contains DOS-style drive
|
|
+ # specifications. The fix is not to complicate the expression
|
|
+ # below, but for the user to provide a working wine installation
|
|
+ # with winepath so that path translation in the cross-to-mingw
|
|
+ # case works properly.
|
|
+ lt_replace_pathsep_nix_to_dos="s|:|;|g"
|
|
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
|
|
+ $SED -e "$lt_replace_pathsep_nix_to_dos"`
|
|
+ fi
|
|
+ # Now, add the leading and trailing path separators back
|
|
+ case "$1" in
|
|
+ :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
|
|
+ ;;
|
|
+ esac
|
|
+ case "$1" in
|
|
+ *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+}
|
|
+# end: func_to_host_pathlist
|
|
+
|
|
+# func_emit_cwrapperexe_src
|
|
+# emit the source code for a wrapper executable on stdout
|
|
+# Must ONLY be called from within func_mode_link because
|
|
+# it depends on a number of variable set therein.
|
|
+func_emit_cwrapperexe_src ()
|
|
+{
|
|
+ cat <<EOF
|
|
+
|
|
+/* $cwrappersource - temporary wrapper executable 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 executable should never be moved out of the build directory.
|
|
+ If it is, it will not operate correctly.
|
|
+
|
|
+ Currently, it simply execs the wrapper *script* "$SHELL $output",
|
|
+ but could eventually absorb all of the scripts functionality and
|
|
+ exec $objdir/$outputname directly.
|
|
+*/
|
|
+EOF
|
|
+ cat <<"EOF"
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#ifdef _MSC_VER
|
|
+# include <direct.h>
|
|
+# include <process.h>
|
|
+# include <io.h>
|
|
+# define setmode _setmode
|
|
+#else
|
|
+# include <unistd.h>
|
|
+# include <stdint.h>
|
|
+# ifdef __CYGWIN__
|
|
+# include <io.h>
|
|
+# define HAVE_SETENV
|
|
+# ifdef __STRICT_ANSI__
|
|
+char *realpath (const char *, char *);
|
|
+int putenv (char *);
|
|
+int setenv (const char *, const char *, int);
|
|
+# endif
|
|
+# endif
|
|
+#endif
|
|
+#include <malloc.h>
|
|
+#include <stdarg.h>
|
|
+#include <assert.h>
|
|
+#include <string.h>
|
|
+#include <ctype.h>
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <sys/stat.h>
|
|
+
|
|
+#if defined(PATH_MAX)
|
|
+# define LT_PATHMAX PATH_MAX
|
|
+#elif defined(MAXPATHLEN)
|
|
+# define LT_PATHMAX MAXPATHLEN
|
|
+#else
|
|
+# define LT_PATHMAX 1024
|
|
+#endif
|
|
+
|
|
+#ifndef S_IXOTH
|
|
+# define S_IXOTH 0
|
|
+#endif
|
|
+#ifndef S_IXGRP
|
|
+# define S_IXGRP 0
|
|
+#endif
|
|
+
|
|
+#ifdef _MSC_VER
|
|
+# define S_IXUSR _S_IEXEC
|
|
+# define stat _stat
|
|
+# ifndef _INTPTR_T_DEFINED
|
|
+# define intptr_t int
|
|
+# endif
|
|
+#endif
|
|
+
|
|
+#ifndef DIR_SEPARATOR
|
|
+# define DIR_SEPARATOR '/'
|
|
+# define PATH_SEPARATOR ':'
|
|
+#endif
|
|
+
|
|
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
|
|
+ defined (__OS2__)
|
|
+# define HAVE_DOS_BASED_FILE_SYSTEM
|
|
+# define FOPEN_WB "wb"
|
|
+# ifndef DIR_SEPARATOR_2
|
|
+# define DIR_SEPARATOR_2 '\\'
|
|
+# endif
|
|
+# ifndef PATH_SEPARATOR_2
|
|
+# define PATH_SEPARATOR_2 ';'
|
|
+# endif
|
|
+#endif
|
|
+
|
|
+#ifndef DIR_SEPARATOR_2
|
|
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
|
|
+#else /* DIR_SEPARATOR_2 */
|
|
+# define IS_DIR_SEPARATOR(ch) \
|
|
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
|
|
+#endif /* DIR_SEPARATOR_2 */
|
|
+
|
|
+#ifndef PATH_SEPARATOR_2
|
|
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
|
|
+#else /* PATH_SEPARATOR_2 */
|
|
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
|
|
+#endif /* PATH_SEPARATOR_2 */
|
|
+
|
|
+#ifdef __CYGWIN__
|
|
+# define FOPEN_WB "wb"
|
|
+#endif
|
|
+
|
|
+#ifndef FOPEN_WB
|
|
+# define FOPEN_WB "w"
|
|
+#endif
|
|
+#ifndef _O_BINARY
|
|
+# define _O_BINARY 0
|
|
+#endif
|
|
+
|
|
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
|
|
+#define XFREE(stale) do { \
|
|
+ if (stale) { free ((void *) stale); stale = 0; } \
|
|
+} while (0)
|
|
+
|
|
+#undef LTWRAPPER_DEBUGPRINTF
|
|
+#if defined DEBUGWRAPPER
|
|
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
|
|
+static void
|
|
+ltwrapper_debugprintf (const char *fmt, ...)
|
|
+{
|
|
+ va_list args;
|
|
+ va_start (args, fmt);
|
|
+ (void) vfprintf (stderr, fmt, args);
|
|
+ va_end (args);
|
|
+}
|
|
+#else
|
|
+# define LTWRAPPER_DEBUGPRINTF(args)
|
|
+#endif
|
|
+
|
|
+const char *program_name = NULL;
|
|
+
|
|
+void *xmalloc (size_t num);
|
|
+char *xstrdup (const char *string);
|
|
+const char *base_name (const char *name);
|
|
+char *find_executable (const char *wrapper);
|
|
+char *chase_symlinks (const char *pathspec);
|
|
+int make_executable (const char *path);
|
|
+int check_executable (const char *path);
|
|
+char *strendzap (char *str, const char *pat);
|
|
+void lt_fatal (const char *message, ...);
|
|
+void lt_setenv (const char *name, const char *value);
|
|
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
|
|
+void lt_opt_process_env_set (const char *arg);
|
|
+void lt_opt_process_env_prepend (const char *arg);
|
|
+void lt_opt_process_env_append (const char *arg);
|
|
+int lt_split_name_value (const char *arg, char** name, char** value);
|
|
+void lt_update_exe_path (const char *name, const char *value);
|
|
+void lt_update_lib_path (const char *name, const char *value);
|
|
+
|
|
+static const char *script_text_part1 =
|
|
+EOF
|
|
+
|
|
+ func_emit_wrapper_part1 yes |
|
|
+ $SED -e 's/\([\\"]\)/\\\1/g' \
|
|
+ -e 's/^/ "/' -e 's/$/\\n"/'
|
|
+ echo ";"
|
|
+ cat <<EOF
|
|
+
|
|
+static const char *script_text_part2 =
|
|
+EOF
|
|
+ func_emit_wrapper_part2 yes |
|
|
+ $SED -e 's/\([\\"]\)/\\\1/g' \
|
|
+ -e 's/^/ "/' -e 's/$/\\n"/'
|
|
+ echo ";"
|
|
+
|
|
+ cat <<EOF
|
|
+const char * MAGIC_EXE = "$magic_exe";
|
|
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
|
|
+EOF
|
|
+
|
|
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
|
|
+ func_to_host_pathlist "$temp_rpath"
|
|
+ cat <<EOF
|
|
+const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
|
|
+EOF
|
|
+ else
|
|
+ cat <<"EOF"
|
|
+const char * LIB_PATH_VALUE = "";
|
|
+EOF
|
|
+ fi
|
|
+
|
|
+ if test -n "$dllsearchpath"; then
|
|
+ func_to_host_pathlist "$dllsearchpath:"
|
|
+ cat <<EOF
|
|
+const char * EXE_PATH_VARNAME = "PATH";
|
|
+const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
|
|
+EOF
|
|
+ else
|
|
+ cat <<"EOF"
|
|
+const char * EXE_PATH_VARNAME = "";
|
|
+const char * EXE_PATH_VALUE = "";
|
|
+EOF
|
|
+ fi
|
|
+
|
|
+ if test "$fast_install" = yes; then
|
|
+ cat <<EOF
|
|
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
|
|
+EOF
|
|
+ else
|
|
+ cat <<EOF
|
|
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
|
|
+EOF
|
|
+ fi
|
|
+
|
|
+
|
|
+ cat <<"EOF"
|
|
+
|
|
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
|
|
+#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
|
|
+
|
|
+static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
|
|
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
|
|
+
|
|
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
|
|
+
|
|
+static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
|
|
+static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
|
|
+ /* argument is putenv-style "foo=bar", value of foo is set to bar */
|
|
+
|
|
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
|
|
+static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
|
|
+ /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
|
|
+
|
|
+static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
|
|
+static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
|
|
+ /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
|
|
+
|
|
+int
|
|
+main (int argc, char *argv[])
|
|
+{
|
|
+ char **newargz;
|
|
+ int newargc;
|
|
+ char *tmp_pathspec;
|
|
+ char *actual_cwrapper_path;
|
|
+ char *actual_cwrapper_name;
|
|
+ char *target_name;
|
|
+ char *lt_argv_zero;
|
|
+ intptr_t rval = 127;
|
|
+
|
|
+ int i;
|
|
+
|
|
+ program_name = (char *) xstrdup (base_name (argv[0]));
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
|
|
+
|
|
+ /* very simple arg parsing; don't want to rely on getopt */
|
|
+ for (i = 1; i < argc; i++)
|
|
+ {
|
|
+ if (strcmp (argv[i], dumpscript_opt) == 0)
|
|
+ {
|
|
+EOF
|
|
+ case "$host" in
|
|
+ *mingw* | *cygwin* )
|
|
+ # make stdout use "unix" line endings
|
|
+ echo " setmode(1,_O_BINARY);"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ cat <<"EOF"
|
|
+ printf ("%s", script_text_part1);
|
|
+ printf ("%s", script_text_part2);
|
|
+ return 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ newargz = XMALLOC (char *, argc + 1);
|
|
+ tmp_pathspec = find_executable (argv[0]);
|
|
+ if (tmp_pathspec == NULL)
|
|
+ lt_fatal ("Couldn't find %s", argv[0]);
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
|
|
+ tmp_pathspec));
|
|
+
|
|
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
|
|
+ actual_cwrapper_path));
|
|
+ XFREE (tmp_pathspec);
|
|
+
|
|
+ actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
|
|
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
|
|
+
|
|
+ /* wrapper name transforms */
|
|
+ strendzap (actual_cwrapper_name, ".exe");
|
|
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
|
|
+ XFREE (actual_cwrapper_name);
|
|
+ actual_cwrapper_name = tmp_pathspec;
|
|
+ tmp_pathspec = 0;
|
|
+
|
|
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
|
|
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
|
|
+ strendzap (target_name, ".exe");
|
|
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
|
|
+ XFREE (target_name);
|
|
+ target_name = tmp_pathspec;
|
|
+ tmp_pathspec = 0;
|
|
+
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
|
|
+ target_name));
|
|
+EOF
|
|
+
|
|
+ cat <<EOF
|
|
+ newargz[0] =
|
|
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
|
|
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
|
|
+ strcpy (newargz[0], actual_cwrapper_path);
|
|
+ strcat (newargz[0], "$objdir");
|
|
+ strcat (newargz[0], "/");
|
|
+EOF
|
|
+
|
|
+ cat <<"EOF"
|
|
+ /* stop here, and copy so we don't have to do this twice */
|
|
+ tmp_pathspec = xstrdup (newargz[0]);
|
|
+
|
|
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
|
|
+ strcat (newargz[0], actual_cwrapper_name);
|
|
+
|
|
+ /* DO want the lt- prefix here if it exists, so use target_name */
|
|
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
|
|
+ XFREE (tmp_pathspec);
|
|
+ tmp_pathspec = NULL;
|
|
+EOF
|
|
+
|
|
+ case $host_os in
|
|
+ mingw*)
|
|
+ cat <<"EOF"
|
|
+ {
|
|
+ char* p;
|
|
+ while ((p = strchr (newargz[0], '\\')) != NULL)
|
|
+ {
|
|
+ *p = '/';
|
|
+ }
|
|
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
|
|
+ {
|
|
+ *p = '/';
|
|
+ }
|
|
+ }
|
|
+EOF
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ cat <<"EOF"
|
|
+ XFREE (target_name);
|
|
+ XFREE (actual_cwrapper_path);
|
|
+ XFREE (actual_cwrapper_name);
|
|
+
|
|
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
|
|
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
|
|
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
|
|
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
|
|
+
|
|
+ newargc=0;
|
|
+ for (i = 1; i < argc; i++)
|
|
+ {
|
|
+ if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
|
|
+ {
|
|
+ if (argv[i][env_set_opt_len] == '=')
|
|
+ {
|
|
+ const char *p = argv[i] + env_set_opt_len + 1;
|
|
+ lt_opt_process_env_set (p);
|
|
+ }
|
|
+ else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
|
|
+ {
|
|
+ lt_opt_process_env_set (argv[++i]); /* don't copy */
|
|
+ }
|
|
+ else
|
|
+ lt_fatal ("%s missing required argument", env_set_opt);
|
|
+ continue;
|
|
+ }
|
|
+ if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
|
|
+ {
|
|
+ if (argv[i][env_prepend_opt_len] == '=')
|
|
+ {
|
|
+ const char *p = argv[i] + env_prepend_opt_len + 1;
|
|
+ lt_opt_process_env_prepend (p);
|
|
+ }
|
|
+ else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
|
|
+ {
|
|
+ lt_opt_process_env_prepend (argv[++i]); /* don't copy */
|
|
+ }
|
|
+ else
|
|
+ lt_fatal ("%s missing required argument", env_prepend_opt);
|
|
+ continue;
|
|
+ }
|
|
+ if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
|
|
+ {
|
|
+ if (argv[i][env_append_opt_len] == '=')
|
|
+ {
|
|
+ const char *p = argv[i] + env_append_opt_len + 1;
|
|
+ lt_opt_process_env_append (p);
|
|
+ }
|
|
+ else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
|
|
+ {
|
|
+ lt_opt_process_env_append (argv[++i]); /* don't copy */
|
|
+ }
|
|
+ else
|
|
+ lt_fatal ("%s missing required argument", env_append_opt);
|
|
+ continue;
|
|
+ }
|
|
+ if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
|
|
+ {
|
|
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
|
|
+ namespace, but it is not one of the ones we know about and
|
|
+ have already dealt with, above (inluding dump-script), then
|
|
+ report an error. Otherwise, targets might begin to believe
|
|
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
|
|
+ namespace. The first time any user complains about this, we'll
|
|
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
|
|
+ or a configure.ac-settable value.
|
|
+ */
|
|
+ lt_fatal ("Unrecognized option in %s namespace: '%s'",
|
|
+ ltwrapper_option_prefix, argv[i]);
|
|
+ }
|
|
+ /* otherwise ... */
|
|
+ newargz[++newargc] = xstrdup (argv[i]);
|
|
+ }
|
|
+ newargz[++newargc] = NULL;
|
|
+
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
|
|
+ for (i = 0; i < newargc; i++)
|
|
+ {
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
|
|
+ }
|
|
+
|
|
+EOF
|
|
+
|
|
+ case $host_os in
|
|
+ mingw*)
|
|
+ cat <<"EOF"
|
|
+ /* execv doesn't actually work on mingw as expected on unix */
|
|
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
|
|
+ if (rval == -1)
|
|
+ {
|
|
+ /* failed to start process */
|
|
+ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
|
|
+ return 127;
|
|
+ }
|
|
+ return rval;
|
|
+EOF
|
|
+ ;;
|
|
+ *)
|
|
+ cat <<"EOF"
|
|
+ execv (lt_argv_zero, newargz);
|
|
+ return rval; /* =127, but avoids unused variable warning */
|
|
+EOF
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ cat <<"EOF"
|
|
+}
|
|
+
|
|
+void *
|
|
+xmalloc (size_t num)
|
|
+{
|
|
+ void *p = (void *) malloc (num);
|
|
+ if (!p)
|
|
+ lt_fatal ("Memory exhausted");
|
|
+
|
|
+ return p;
|
|
+}
|
|
+
|
|
+char *
|
|
+xstrdup (const char *string)
|
|
+{
|
|
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
|
|
+ string) : NULL;
|
|
+}
|
|
+
|
|
+const char *
|
|
+base_name (const char *name)
|
|
+{
|
|
+ const char *base;
|
|
+
|
|
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
|
+ /* Skip over the disk name in MSDOS pathnames. */
|
|
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
|
|
+ name += 2;
|
|
+#endif
|
|
+
|
|
+ for (base = name; *name; name++)
|
|
+ if (IS_DIR_SEPARATOR (*name))
|
|
+ base = name + 1;
|
|
+ return base;
|
|
+}
|
|
+
|
|
+int
|
|
+check_executable (const char *path)
|
|
+{
|
|
+ struct stat st;
|
|
+
|
|
+ LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
|
|
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
|
|
+ if ((!path) || (!*path))
|
|
+ return 0;
|
|
+
|
|
+ if ((stat (path, &st) >= 0)
|
|
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
|
|
+ return 1;
|
|
+ else
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int
|
|
+make_executable (const char *path)
|
|
+{
|
|
+ int rval = 0;
|
|
+ struct stat st;
|
|
+
|
|
+ LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
|
|
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
|
|
+ if ((!path) || (!*path))
|
|
+ return 0;
|
|
+
|
|
+ if (stat (path, &st) >= 0)
|
|
+ {
|
|
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
|
|
+ }
|
|
+ return rval;
|
|
+}
|
|
+
|
|
+/* Searches for the full path of the wrapper. Returns
|
|
+ newly allocated full path name if found, NULL otherwise
|
|
+ Does not chase symlinks, even on platforms that support them.
|
|
+*/
|
|
+char *
|
|
+find_executable (const char *wrapper)
|
|
+{
|
|
+ int has_slash = 0;
|
|
+ const char *p;
|
|
+ const char *p_next;
|
|
+ /* static buffer for getcwd */
|
|
+ char tmp[LT_PATHMAX + 1];
|
|
+ int tmp_len;
|
|
+ char *concat_name;
|
|
+
|
|
+ LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
|
|
+ wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
|
|
+
|
|
+ if ((wrapper == NULL) || (*wrapper == '\0'))
|
|
+ return NULL;
|
|
+
|
|
+ /* Absolute path? */
|
|
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
|
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
|
|
+ {
|
|
+ concat_name = xstrdup (wrapper);
|
|
+ if (check_executable (concat_name))
|
|
+ return concat_name;
|
|
+ XFREE (concat_name);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+#endif
|
|
+ if (IS_DIR_SEPARATOR (wrapper[0]))
|
|
+ {
|
|
+ concat_name = xstrdup (wrapper);
|
|
+ if (check_executable (concat_name))
|
|
+ return concat_name;
|
|
+ XFREE (concat_name);
|
|
+ }
|
|
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
|
+ }
|
|
+#endif
|
|
+
|
|
+ for (p = wrapper; *p; p++)
|
|
+ if (*p == '/')
|
|
+ {
|
|
+ has_slash = 1;
|
|
+ break;
|
|
+ }
|
|
+ if (!has_slash)
|
|
+ {
|
|
+ /* no slashes; search PATH */
|
|
+ const char *path = getenv ("PATH");
|
|
+ if (path != NULL)
|
|
+ {
|
|
+ for (p = path; *p; p = p_next)
|
|
+ {
|
|
+ const char *q;
|
|
+ size_t p_len;
|
|
+ for (q = p; *q; q++)
|
|
+ if (IS_PATH_SEPARATOR (*q))
|
|
+ break;
|
|
+ p_len = q - p;
|
|
+ p_next = (*q == '\0' ? q : q + 1);
|
|
+ if (p_len == 0)
|
|
+ {
|
|
+ /* empty path: current directory */
|
|
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
|
|
+ lt_fatal ("getcwd failed");
|
|
+ tmp_len = strlen (tmp);
|
|
+ concat_name =
|
|
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
|
|
+ memcpy (concat_name, tmp, tmp_len);
|
|
+ concat_name[tmp_len] = '/';
|
|
+ strcpy (concat_name + tmp_len + 1, wrapper);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ concat_name =
|
|
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
|
|
+ memcpy (concat_name, p, p_len);
|
|
+ concat_name[p_len] = '/';
|
|
+ strcpy (concat_name + p_len + 1, wrapper);
|
|
+ }
|
|
+ if (check_executable (concat_name))
|
|
+ return concat_name;
|
|
+ XFREE (concat_name);
|
|
+ }
|
|
+ }
|
|
+ /* not found in PATH; assume curdir */
|
|
+ }
|
|
+ /* Relative path | not found in path: prepend cwd */
|
|
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
|
|
+ lt_fatal ("getcwd failed");
|
|
+ tmp_len = strlen (tmp);
|
|
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
|
|
+ memcpy (concat_name, tmp, tmp_len);
|
|
+ concat_name[tmp_len] = '/';
|
|
+ strcpy (concat_name + tmp_len + 1, wrapper);
|
|
+
|
|
+ if (check_executable (concat_name))
|
|
+ return concat_name;
|
|
+ XFREE (concat_name);
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+char *
|
|
+chase_symlinks (const char *pathspec)
|
|
+{
|
|
+#ifndef S_ISLNK
|
|
+ return xstrdup (pathspec);
|
|
+#else
|
|
+ char buf[LT_PATHMAX];
|
|
+ struct stat s;
|
|
+ char *tmp_pathspec = xstrdup (pathspec);
|
|
+ char *p;
|
|
+ int has_symlinks = 0;
|
|
+ while (strlen (tmp_pathspec) && !has_symlinks)
|
|
+ {
|
|
+ LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
|
|
+ tmp_pathspec));
|
|
+ if (lstat (tmp_pathspec, &s) == 0)
|
|
+ {
|
|
+ if (S_ISLNK (s.st_mode) != 0)
|
|
+ {
|
|
+ has_symlinks = 1;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ /* search backwards for last DIR_SEPARATOR */
|
|
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
|
|
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
|
|
+ p--;
|
|
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
|
|
+ {
|
|
+ /* no more DIR_SEPARATORS left */
|
|
+ break;
|
|
+ }
|
|
+ *p = '\0';
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ char *errstr = strerror (errno);
|
|
+ lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
|
|
+ }
|
|
+ }
|
|
+ XFREE (tmp_pathspec);
|
|
+
|
|
+ if (!has_symlinks)
|
|
+ {
|
|
+ return xstrdup (pathspec);
|
|
+ }
|
|
+
|
|
+ tmp_pathspec = realpath (pathspec, buf);
|
|
+ if (tmp_pathspec == 0)
|
|
+ {
|
|
+ lt_fatal ("Could not follow symlinks for %s", pathspec);
|
|
+ }
|
|
+ return xstrdup (tmp_pathspec);
|
|
+#endif
|
|
+}
|
|
+
|
|
+char *
|
|
+strendzap (char *str, const char *pat)
|
|
+{
|
|
+ size_t len, patlen;
|
|
+
|
|
+ assert (str != NULL);
|
|
+ assert (pat != NULL);
|
|
+
|
|
+ len = strlen (str);
|
|
+ patlen = strlen (pat);
|
|
+
|
|
+ if (patlen <= len)
|
|
+ {
|
|
+ str += len - patlen;
|
|
+ if (strcmp (str, pat) == 0)
|
|
+ *str = '\0';
|
|
+ }
|
|
+ return str;
|
|
+}
|
|
+
|
|
+static void
|
|
+lt_error_core (int exit_status, const char *mode,
|
|
+ const char *message, va_list ap)
|
|
+{
|
|
+ fprintf (stderr, "%s: %s: ", program_name, mode);
|
|
+ vfprintf (stderr, message, ap);
|
|
+ fprintf (stderr, ".\n");
|
|
+
|
|
+ if (exit_status >= 0)
|
|
+ exit (exit_status);
|
|
+}
|
|
+
|
|
+void
|
|
+lt_fatal (const char *message, ...)
|
|
+{
|
|
+ va_list ap;
|
|
+ va_start (ap, message);
|
|
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
|
|
+ va_end (ap);
|
|
+}
|
|
+
|
|
+void
|
|
+lt_setenv (const char *name, const char *value)
|
|
+{
|
|
+ LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
|
|
+ (name ? name : "<NULL>"),
|
|
+ (value ? value : "<NULL>")));
|
|
+ {
|
|
+#ifdef HAVE_SETENV
|
|
+ /* always make a copy, for consistency with !HAVE_SETENV */
|
|
+ char *str = xstrdup (value);
|
|
+ setenv (name, str, 1);
|
|
+#else
|
|
+ int len = strlen (name) + 1 + strlen (value) + 1;
|
|
+ char *str = XMALLOC (char, len);
|
|
+ sprintf (str, "%s=%s", name, value);
|
|
+ if (putenv (str) != EXIT_SUCCESS)
|
|
+ {
|
|
+ XFREE (str);
|
|
+ }
|
|
+#endif
|
|
+ }
|
|
+}
|
|
+
|
|
+char *
|
|
+lt_extend_str (const char *orig_value, const char *add, int to_end)
|
|
+{
|
|
+ char *new_value;
|
|
+ if (orig_value && *orig_value)
|
|
+ {
|
|
+ int orig_value_len = strlen (orig_value);
|
|
+ int add_len = strlen (add);
|
|
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
|
|
+ if (to_end)
|
|
+ {
|
|
+ strcpy (new_value, orig_value);
|
|
+ strcpy (new_value + orig_value_len, add);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ strcpy (new_value, add);
|
|
+ strcpy (new_value + add_len, orig_value);
|
|
+ }
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ new_value = xstrdup (add);
|
|
+ }
|
|
+ return new_value;
|
|
+}
|
|
+
|
|
+int
|
|
+lt_split_name_value (const char *arg, char** name, char** value)
|
|
+{
|
|
+ const char *p;
|
|
+ int len;
|
|
+ if (!arg || !*arg)
|
|
+ return 1;
|
|
+
|
|
+ p = strchr (arg, (int)'=');
|
|
+
|
|
+ if (!p)
|
|
+ return 1;
|
|
+
|
|
+ *value = xstrdup (++p);
|
|
+
|
|
+ len = strlen (arg) - strlen (*value);
|
|
+ *name = XMALLOC (char, len);
|
|
+ strncpy (*name, arg, len-1);
|
|
+ (*name)[len - 1] = '\0';
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void
|
|
+lt_opt_process_env_set (const char *arg)
|
|
+{
|
|
+ char *name = NULL;
|
|
+ char *value = NULL;
|
|
+
|
|
+ if (lt_split_name_value (arg, &name, &value) != 0)
|
|
+ {
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+ lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
|
|
+ }
|
|
+
|
|
+ lt_setenv (name, value);
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+}
|
|
+
|
|
+void
|
|
+lt_opt_process_env_prepend (const char *arg)
|
|
+{
|
|
+ char *name = NULL;
|
|
+ char *value = NULL;
|
|
+ char *new_value = NULL;
|
|
+
|
|
+ if (lt_split_name_value (arg, &name, &value) != 0)
|
|
+ {
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+ lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
|
|
+ }
|
|
+
|
|
+ new_value = lt_extend_str (getenv (name), value, 0);
|
|
+ lt_setenv (name, new_value);
|
|
+ XFREE (new_value);
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+}
|
|
+
|
|
+void
|
|
+lt_opt_process_env_append (const char *arg)
|
|
+{
|
|
+ char *name = NULL;
|
|
+ char *value = NULL;
|
|
+ char *new_value = NULL;
|
|
+
|
|
+ if (lt_split_name_value (arg, &name, &value) != 0)
|
|
+ {
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+ lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
|
|
+ }
|
|
+
|
|
+ new_value = lt_extend_str (getenv (name), value, 1);
|
|
+ lt_setenv (name, new_value);
|
|
+ XFREE (new_value);
|
|
+ XFREE (name);
|
|
+ XFREE (value);
|
|
+}
|
|
+
|
|
+void
|
|
+lt_update_exe_path (const char *name, const char *value)
|
|
+{
|
|
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
|
|
+ (name ? name : "<NULL>"),
|
|
+ (value ? value : "<NULL>")));
|
|
+
|
|
+ if (name && *name && value && *value)
|
|
+ {
|
|
+ char *new_value = lt_extend_str (getenv (name), value, 0);
|
|
+ /* some systems can't cope with a ':'-terminated path #' */
|
|
+ int len = strlen (new_value);
|
|
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
|
|
+ {
|
|
+ new_value[len-1] = '\0';
|
|
+ }
|
|
+ lt_setenv (name, new_value);
|
|
+ XFREE (new_value);
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
+lt_update_lib_path (const char *name, const char *value)
|
|
+{
|
|
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
|
|
+ (name ? name : "<NULL>"),
|
|
+ (value ? value : "<NULL>")));
|
|
+
|
|
+ if (name && *name && value && *value)
|
|
+ {
|
|
+ char *new_value = lt_extend_str (getenv (name), value, 0);
|
|
+ lt_setenv (name, new_value);
|
|
+ XFREE (new_value);
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
+EOF
|
|
+}
|
|
+# end: func_emit_cwrapperexe_src
|
|
+
|
|
+# func_mode_link arg...
|
|
+func_mode_link ()
|
|
+{
|
|
+ $opt_debug
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
|
|
+ # It is impossible to link a dll without this setting, and
|
|
+ # we shouldn't force the makefile maintainer to figure out
|
|
+ # which system we are compiling for in order to pass an extra
|
|
+ # flag for every libtool invocation.
|
|
+ # allow_undefined=no
|
|
+
|
|
+ # FIXME: Unfortunately, there are problems with the above when trying
|
|
+ # to make a dll which has undefined symbols, in which case not
|
|
+ # even a static library is built. For now, we need to specify
|
|
+ # -no-undefined on the libtool link line when we can be certain
|
|
+ # that all symbols are satisfied, otherwise we get a static library.
|
|
+ allow_undefined=yes
|
|
+ ;;
|
|
+ *)
|
|
+ allow_undefined=yes
|
|
+ ;;
|
|
+ esac
|
|
+ libtool_args=$nonopt
|
|
+ base_compile="$nonopt $@"
|
|
+ compile_command=$nonopt
|
|
+ finalize_command=$nonopt
|
|
+
|
|
+ compile_rpath=
|
|
+ finalize_rpath=
|
|
+ compile_shlibpath=
|
|
+ finalize_shlibpath=
|
|
+ convenience=
|
|
+ old_convenience=
|
|
+ deplibs=
|
|
+ old_deplibs=
|
|
+ compiler_flags=
|
|
+ linker_flags=
|
|
+ dllsearchpath=
|
|
+ lib_search_path=`pwd`
|
|
+ inst_prefix_dir=
|
|
+ new_inherited_linker_flags=
|
|
+
|
|
+ avoid_version=no
|
|
+ dlfiles=
|
|
+ dlprefiles=
|
|
+ dlself=no
|
|
+ export_dynamic=no
|
|
+ export_symbols=
|
|
+ export_symbols_regex=
|
|
+ generated=
|
|
+ libobjs=
|
|
+ ltlibs=
|
|
+ module=no
|
|
+ no_install=no
|
|
+ objs=
|
|
+ non_pic_objects=
|
|
+ precious_files_regex=
|
|
+ prefer_static_libs=no
|
|
+ preload=no
|
|
+ prev=
|
|
+ prevarg=
|
|
+ release=
|
|
+ rpath=
|
|
+ xrpath=
|
|
+ perm_rpath=
|
|
+ temp_rpath=
|
|
+ thread_safe=no
|
|
+ vinfo=
|
|
+ vinfo_number=no
|
|
+ weak_libs=
|
|
+ single_module="${wl}-single_module"
|
|
+ func_infer_tag $base_compile
|
|
+
|
|
+ # We need to know -static, to get the right output filenames.
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -shared)
|
|
+ test "$build_libtool_libs" != yes && \
|
|
+ func_fatal_configuration "can not build a shared library"
|
|
+ build_old_libs=no
|
|
+ break
|
|
+ ;;
|
|
+ -all-static | -static | -static-libtool-libs)
|
|
+ case $arg in
|
|
+ -all-static)
|
|
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
|
|
+ func_warning "complete static linking is impossible in this configuration"
|
|
+ fi
|
|
+ if test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=yes
|
|
+ ;;
|
|
+ -static)
|
|
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=built
|
|
+ ;;
|
|
+ -static-libtool-libs)
|
|
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=yes
|
|
+ ;;
|
|
+ esac
|
|
+ build_libtool_libs=no
|
|
+ build_old_libs=yes
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # See if our shared archives depend on static archives.
|
|
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
|
|
+
|
|
+ # Go through the arguments, transforming them on the way.
|
|
+ while test "$#" -gt 0; do
|
|
+ arg="$1"
|
|
+ shift
|
|
+ func_quote_for_eval "$arg"
|
|
+ qarg=$func_quote_for_eval_unquoted_result
|
|
+ func_append libtool_args " $func_quote_for_eval_result"
|
|
+
|
|
+ # If the previous option needs an argument, assign it.
|
|
+ if test -n "$prev"; then
|
|
+ case $prev in
|
|
+ output)
|
|
+ func_append compile_command " @OUTPUT@"
|
|
+ func_append finalize_command " @OUTPUT@"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case $prev in
|
|
+ dlfiles|dlprefiles)
|
|
+ if test "$preload" = no; then
|
|
+ # Add the symbol object into the linking commands.
|
|
+ func_append compile_command " @SYMFILE@"
|
|
+ func_append finalize_command " @SYMFILE@"
|
|
+ preload=yes
|
|
+ fi
|
|
+ case $arg in
|
|
+ *.la | *.lo) ;; # We handle these cases below.
|
|
+ force)
|
|
+ if test "$dlself" = no; then
|
|
+ dlself=needless
|
|
+ export_dynamic=yes
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ self)
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ dlself=yes
|
|
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
|
|
+ dlself=yes
|
|
+ else
|
|
+ dlself=needless
|
|
+ export_dynamic=yes
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$prev" = dlfiles; then
|
|
+ dlfiles="$dlfiles $arg"
|
|
+ else
|
|
+ dlprefiles="$dlprefiles $arg"
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ expsyms)
|
|
+ export_symbols="$arg"
|
|
+ test -f "$arg" \
|
|
+ || func_fatal_error "symbol file \`$arg' does not exist"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ expsyms_regex)
|
|
+ export_symbols_regex="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ framework)
|
|
+ case $host in
|
|
+ *-*-darwin*)
|
|
+ case "$deplibs " in
|
|
+ *" $qarg.ltframework "*) ;;
|
|
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ inst_prefix)
|
|
+ inst_prefix_dir="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ objectlist)
|
|
+ if test -f "$arg"; then
|
|
+ save_arg=$arg
|
|
+ moreargs=
|
|
+ for fil in `cat "$save_arg"`
|
|
+ do
|
|
+# moreargs="$moreargs $fil"
|
|
+ arg=$fil
|
|
+ # A libtool-controlled object.
|
|
+
|
|
+ # Check to see that this really is a libtool object.
|
|
+ if func_lalib_unsafe_p "$arg"; then
|
|
+ pic_object=
|
|
+ non_pic_object=
|
|
+
|
|
+ # Read the .lo file
|
|
+ func_source "$arg"
|
|
+
|
|
+ if test -z "$pic_object" ||
|
|
+ test -z "$non_pic_object" ||
|
|
+ test "$pic_object" = none &&
|
|
+ test "$non_pic_object" = none; then
|
|
+ func_fatal_error "cannot find name of object for \`$arg'"
|
|
+ fi
|
|
+
|
|
+ # Extract subdirectory from the argument.
|
|
+ func_dirname "$arg" "/" ""
|
|
+ xdir="$func_dirname_result"
|
|
+
|
|
+ if test "$pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ pic_object="$xdir$pic_object"
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
|
|
+ dlfiles="$dlfiles $pic_object"
|
|
+ prev=
|
|
+ continue
|
|
+ else
|
|
+ # If libtool objects are unsupported, then we need to preload.
|
|
+ prev=dlprefiles
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # CHECK ME: I think I busted this. -Ossama
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ # Preload the old-style object.
|
|
+ dlprefiles="$dlprefiles $pic_object"
|
|
+ prev=
|
|
+ fi
|
|
+
|
|
+ # A PIC object.
|
|
+ func_append libobjs " $pic_object"
|
|
+ arg="$pic_object"
|
|
+ fi
|
|
+
|
|
+ # Non-PIC object.
|
|
+ if test "$non_pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ non_pic_object="$xdir$non_pic_object"
|
|
+
|
|
+ # A standard non-PIC object
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ if test -z "$pic_object" || test "$pic_object" = none ; then
|
|
+ arg="$non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # If the PIC object exists, use it instead.
|
|
+ # $xdir was prepended to $pic_object above.
|
|
+ non_pic_object="$pic_object"
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # Only an error if not doing a dry-run.
|
|
+ if $opt_dry_run; then
|
|
+ # Extract subdirectory from the argument.
|
|
+ func_dirname "$arg" "/" ""
|
|
+ xdir="$func_dirname_result"
|
|
+
|
|
+ func_lo2o "$arg"
|
|
+ pic_object=$xdir$objdir/$func_lo2o_result
|
|
+ non_pic_object=$xdir$func_lo2o_result
|
|
+ func_append libobjs " $pic_object"
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ else
|
|
+ func_fatal_error "\`$arg' is not a valid libtool object"
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+ else
|
|
+ func_fatal_error "link input file \`$arg' does not exist"
|
|
+ fi
|
|
+ arg=$save_arg
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ precious_regex)
|
|
+ precious_files_regex="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ release)
|
|
+ release="-$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ rpath | xrpath)
|
|
+ # We need an absolute path.
|
|
+ case $arg in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
|
|
+ *)
|
|
+ func_fatal_error "only absolute run-paths are allowed"
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$prev" = rpath; then
|
|
+ case "$rpath " in
|
|
+ *" $arg "*) ;;
|
|
+ *) rpath="$rpath $arg" ;;
|
|
+ esac
|
|
+ else
|
|
+ case "$xrpath " in
|
|
+ *" $arg "*) ;;
|
|
+ *) xrpath="$xrpath $arg" ;;
|
|
+ esac
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ shrext)
|
|
+ shrext_cmds="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ weak)
|
|
+ weak_libs="$weak_libs $arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ xcclinker)
|
|
+ linker_flags="$linker_flags $qarg"
|
|
+ compiler_flags="$compiler_flags $qarg"
|
|
+ prev=
|
|
+ func_append compile_command " $qarg"
|
|
+ func_append finalize_command " $qarg"
|
|
+ continue
|
|
+ ;;
|
|
+ xcompiler)
|
|
+ compiler_flags="$compiler_flags $qarg"
|
|
+ prev=
|
|
+ func_append compile_command " $qarg"
|
|
+ func_append finalize_command " $qarg"
|
|
+ continue
|
|
+ ;;
|
|
+ xlinker)
|
|
+ linker_flags="$linker_flags $qarg"
|
|
+ compiler_flags="$compiler_flags $wl$qarg"
|
|
+ prev=
|
|
+ func_append compile_command " $wl$qarg"
|
|
+ func_append finalize_command " $wl$qarg"
|
|
+ continue
|
|
+ ;;
|
|
+ *)
|
|
+ eval "$prev=\"\$arg\""
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ fi # test -n "$prev"
|
|
+
|
|
+ prevarg="$arg"
|
|
+
|
|
+ case $arg in
|
|
+ -all-static)
|
|
+ if test -n "$link_static_flag"; then
|
|
+ # See comment for -static flag below, for more details.
|
|
+ func_append compile_command " $link_static_flag"
|
|
+ func_append finalize_command " $link_static_flag"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -allow-undefined)
|
|
+ # FIXME: remove this flag sometime in the future.
|
|
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
|
|
+ ;;
|
|
+
|
|
+ -avoid-version)
|
|
+ avoid_version=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -dlopen)
|
|
+ prev=dlfiles
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -dlpreopen)
|
|
+ prev=dlprefiles
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -export-dynamic)
|
|
+ export_dynamic=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -export-symbols | -export-symbols-regex)
|
|
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
|
|
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
|
|
+ fi
|
|
+ if test "X$arg" = "X-export-symbols"; then
|
|
+ prev=expsyms
|
|
+ else
|
|
+ prev=expsyms_regex
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -framework)
|
|
+ prev=framework
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -inst-prefix-dir)
|
|
+ prev=inst_prefix
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
|
|
+ # so, if we see these flags be careful not to treat them like -L
|
|
+ -L[A-Z][A-Z]*:*)
|
|
+ case $with_gcc/$host in
|
|
+ no/*-*-irix* | /*-*-irix*)
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -L*)
|
|
+ func_stripname '-L' '' "$arg"
|
|
+ dir=$func_stripname_result
|
|
+ if test -z "$dir"; then
|
|
+ if test "$#" -gt 0; then
|
|
+ func_fatal_error "require no space between \`-L' and \`$1'"
|
|
+ else
|
|
+ func_fatal_error "need path for \`-L' option"
|
|
+ fi
|
|
+ fi
|
|
+ # We need an absolute path.
|
|
+ case $dir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
|
|
+ *)
|
|
+ absdir=`cd "$dir" && pwd`
|
|
+ test -z "$absdir" && \
|
|
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
|
|
+ dir="$absdir"
|
|
+ ;;
|
|
+ esac
|
|
+ case "$deplibs " in
|
|
+ *" -L$dir "*) ;;
|
|
+ *)
|
|
+ deplibs="$deplibs -L$dir"
|
|
+ lib_search_path="$lib_search_path $dir"
|
|
+ ;;
|
|
+ esac
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
|
|
+ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
|
|
+ case :$dllsearchpath: in
|
|
+ *":$dir:"*) ;;
|
|
+ ::) dllsearchpath=$dir;;
|
|
+ *) dllsearchpath="$dllsearchpath:$dir";;
|
|
+ esac
|
|
+ case :$dllsearchpath: in
|
|
+ *":$testbindir:"*) ;;
|
|
+ ::) dllsearchpath=$testbindir;;
|
|
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -l*)
|
|
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
|
|
+ # These systems don't actually have a C or math library (as such)
|
|
+ continue
|
|
+ ;;
|
|
+ *-*-os2*)
|
|
+ # These systems don't actually have a C library (as such)
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc due to us having libc/libc_r.
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-rhapsody* | *-*-darwin1.[012])
|
|
+ # Rhapsody C and math libraries are in the System framework
|
|
+ deplibs="$deplibs System.ltframework"
|
|
+ continue
|
|
+ ;;
|
|
+ *-*-sco3.2v5* | *-*-sco5v6*)
|
|
+ # Causes problems with __ctype
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
|
|
+ # Compiler inserts libc in the correct place for threads to work
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ esac
|
|
+ elif test "X$arg" = "X-lc_r"; then
|
|
+ case $host in
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc_r directly, use -pthread flag.
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ deplibs="$deplibs $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -module)
|
|
+ module=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
|
|
+ # classes, name mangling, and exception handling.
|
|
+ # Darwin uses the -arch flag to determine output architecture.
|
|
+ -model|-arch|-isysroot)
|
|
+ compiler_flags="$compiler_flags $arg"
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ prev=xcompiler
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
|
|
+ compiler_flags="$compiler_flags $arg"
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ case "$new_inherited_linker_flags " in
|
|
+ *" $arg "*) ;;
|
|
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -multi_module)
|
|
+ single_module="${wl}-multi_module"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -no-fast-install)
|
|
+ fast_install=no
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -no-install)
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
|
|
+ # The PATH hackery in wrapper scripts is required on Windows
|
|
+ # and Darwin in order for the loader to find any dlls it needs.
|
|
+ func_warning "\`-no-install' is ignored for $host"
|
|
+ func_warning "assuming \`-no-fast-install' instead"
|
|
+ fast_install=no
|
|
+ ;;
|
|
+ *) no_install=yes ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -no-undefined)
|
|
+ allow_undefined=no
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -objectlist)
|
|
+ prev=objectlist
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -o) prev=output ;;
|
|
+
|
|
+ -precious-files-regex)
|
|
+ prev=precious_regex
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -release)
|
|
+ prev=release
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -rpath)
|
|
+ prev=rpath
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -R)
|
|
+ prev=xrpath
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -R*)
|
|
+ func_stripname '-R' '' "$arg"
|
|
+ dir=$func_stripname_result
|
|
+ # We need an absolute path.
|
|
+ case $dir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
|
|
+ *)
|
|
+ func_fatal_error "only absolute run-paths are allowed"
|
|
+ ;;
|
|
+ esac
|
|
+ case "$xrpath " in
|
|
+ *" $dir "*) ;;
|
|
+ *) xrpath="$xrpath $dir" ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -shared)
|
|
+ # The effects of -shared are defined in a previous loop.
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -shrext)
|
|
+ prev=shrext
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -static | -static-libtool-libs)
|
|
+ # The effects of -static are defined in a previous loop.
|
|
+ # We used to do the same as -all-static on platforms that
|
|
+ # didn't have a PIC flag, but the assumption that the effects
|
|
+ # would be equivalent was wrong. It would break on at least
|
|
+ # Digital Unix and AIX.
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -thread-safe)
|
|
+ thread_safe=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -version-info)
|
|
+ prev=vinfo
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -version-number)
|
|
+ prev=vinfo
|
|
+ vinfo_number=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -weak)
|
|
+ prev=weak
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -Wc,*)
|
|
+ func_stripname '-Wc,' '' "$arg"
|
|
+ args=$func_stripname_result
|
|
+ arg=
|
|
+ save_ifs="$IFS"; IFS=','
|
|
+ for flag in $args; do
|
|
+ IFS="$save_ifs"
|
|
+ func_quote_for_eval "$flag"
|
|
+ arg="$arg $wl$func_quote_for_eval_result"
|
|
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ func_stripname ' ' '' "$arg"
|
|
+ arg=$func_stripname_result
|
|
+ ;;
|
|
+
|
|
+ -Wl,*)
|
|
+ func_stripname '-Wl,' '' "$arg"
|
|
+ args=$func_stripname_result
|
|
+ arg=
|
|
+ save_ifs="$IFS"; IFS=','
|
|
+ for flag in $args; do
|
|
+ IFS="$save_ifs"
|
|
+ func_quote_for_eval "$flag"
|
|
+ arg="$arg $wl$func_quote_for_eval_result"
|
|
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
|
|
+ linker_flags="$linker_flags $func_quote_for_eval_result"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ func_stripname ' ' '' "$arg"
|
|
+ arg=$func_stripname_result
|
|
+ ;;
|
|
+
|
|
+ -Xcompiler)
|
|
+ prev=xcompiler
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -Xlinker)
|
|
+ prev=xlinker
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -XCClinker)
|
|
+ prev=xcclinker
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # -msg_* for osf cc
|
|
+ -msg_*)
|
|
+ func_quote_for_eval "$arg"
|
|
+ arg="$func_quote_for_eval_result"
|
|
+ ;;
|
|
+
|
|
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
|
|
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
|
|
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
|
|
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
|
|
+ # -q* pass through compiler args for the IBM compiler
|
|
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
|
|
+ # compiler args for GCC
|
|
+ # -F/path gives path to uninstalled frameworks, gcc on darwin
|
|
+ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
|
|
+ # @file GCC response files
|
|
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
|
|
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
|
|
+ func_quote_for_eval "$arg"
|
|
+ arg="$func_quote_for_eval_result"
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ compiler_flags="$compiler_flags $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # Some other compiler flag.
|
|
+ -* | +*)
|
|
+ func_quote_for_eval "$arg"
|
|
+ arg="$func_quote_for_eval_result"
|
|
+ ;;
|
|
+
|
|
+ *.$objext)
|
|
+ # A standard object.
|
|
+ objs="$objs $arg"
|
|
+ ;;
|
|
+
|
|
+ *.lo)
|
|
+ # A libtool-controlled object.
|
|
+
|
|
+ # Check to see that this really is a libtool object.
|
|
+ if func_lalib_unsafe_p "$arg"; then
|
|
+ pic_object=
|
|
+ non_pic_object=
|
|
+
|
|
+ # Read the .lo file
|
|
+ func_source "$arg"
|
|
+
|
|
+ if test -z "$pic_object" ||
|
|
+ test -z "$non_pic_object" ||
|
|
+ test "$pic_object" = none &&
|
|
+ test "$non_pic_object" = none; then
|
|
+ func_fatal_error "cannot find name of object for \`$arg'"
|
|
+ fi
|
|
+
|
|
+ # Extract subdirectory from the argument.
|
|
+ func_dirname "$arg" "/" ""
|
|
+ xdir="$func_dirname_result"
|
|
+
|
|
+ if test "$pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ pic_object="$xdir$pic_object"
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
|
|
+ dlfiles="$dlfiles $pic_object"
|
|
+ prev=
|
|
+ continue
|
|
+ else
|
|
+ # If libtool objects are unsupported, then we need to preload.
|
|
+ prev=dlprefiles
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # CHECK ME: I think I busted this. -Ossama
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ # Preload the old-style object.
|
|
+ dlprefiles="$dlprefiles $pic_object"
|
|
+ prev=
|
|
+ fi
|
|
+
|
|
+ # A PIC object.
|
|
+ func_append libobjs " $pic_object"
|
|
+ arg="$pic_object"
|
|
+ fi
|
|
+
|
|
+ # Non-PIC object.
|
|
+ if test "$non_pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ non_pic_object="$xdir$non_pic_object"
|
|
+
|
|
+ # A standard non-PIC object
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ if test -z "$pic_object" || test "$pic_object" = none ; then
|
|
+ arg="$non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # If the PIC object exists, use it instead.
|
|
+ # $xdir was prepended to $pic_object above.
|
|
+ non_pic_object="$pic_object"
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # Only an error if not doing a dry-run.
|
|
+ if $opt_dry_run; then
|
|
+ # Extract subdirectory from the argument.
|
|
+ func_dirname "$arg" "/" ""
|
|
+ xdir="$func_dirname_result"
|
|
+
|
|
+ func_lo2o "$arg"
|
|
+ pic_object=$xdir$objdir/$func_lo2o_result
|
|
+ non_pic_object=$xdir$func_lo2o_result
|
|
+ func_append libobjs " $pic_object"
|
|
+ func_append non_pic_objects " $non_pic_object"
|
|
+ else
|
|
+ func_fatal_error "\`$arg' is not a valid libtool object"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *.$libext)
|
|
+ # An archive.
|
|
+ deplibs="$deplibs $arg"
|
|
+ old_deplibs="$old_deplibs $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ *.la)
|
|
+ # A libtool-controlled library.
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ # This library was specified with -dlopen.
|
|
+ dlfiles="$dlfiles $arg"
|
|
+ prev=
|
|
+ elif test "$prev" = dlprefiles; then
|
|
+ # The library was specified with -dlpreopen.
|
|
+ dlprefiles="$dlprefiles $arg"
|
|
+ prev=
|
|
+ else
|
|
+ deplibs="$deplibs $arg"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # Some other compiler argument.
|
|
+ *)
|
|
+ # Unknown arguments in both finalize_command and compile_command need
|
|
+ # to be aesthetically quoted because they are evaled later.
|
|
+ func_quote_for_eval "$arg"
|
|
+ arg="$func_quote_for_eval_result"
|
|
+ ;;
|
|
+ esac # arg
|
|
+
|
|
+ # Now actually substitute the argument into the commands.
|
|
+ if test -n "$arg"; then
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ fi
|
|
+ done # argument parsing loop
|
|
+
|
|
+ test -n "$prev" && \
|
|
+ func_fatal_help "the \`$prevarg' option requires an argument"
|
|
+
|
|
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
|
|
+ eval arg=\"$export_dynamic_flag_spec\"
|
|
+ func_append compile_command " $arg"
|
|
+ func_append finalize_command " $arg"
|
|
+ fi
|
|
+
|
|
+ oldlibs=
|
|
+ # calculate the name of the file, without its directory
|
|
+ func_basename "$output"
|
|
+ outputname="$func_basename_result"
|
|
+ libobjs_save="$libobjs"
|
|
+
|
|
+ if test -n "$shlibpath_var"; then
|
|
+ # get the directories listed in $shlibpath_var
|
|
+ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
|
|
+ else
|
|
+ shlib_search_path=
|
|
+ fi
|
|
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
|
|
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
|
|
+
|
|
+ func_dirname "$output" "/" ""
|
|
+ output_objdir="$func_dirname_result$objdir"
|
|
+ # Create the object directory.
|
|
+ func_mkdir_p "$output_objdir"
|
|
+
|
|
+ # Determine the type of output
|
|
+ case $output in
|
|
+ "")
|
|
+ func_fatal_help "you must specify an output file"
|
|
+ ;;
|
|
+ *.$libext) linkmode=oldlib ;;
|
|
+ *.lo | *.$objext) linkmode=obj ;;
|
|
+ *.la) linkmode=lib ;;
|
|
+ *) linkmode=prog ;; # Anything else should be a program.
|
|
+ esac
|
|
+
|
|
+ specialdeplibs=
|
|
+
|
|
+ libs=
|
|
+ # Find all interdependent deplibs by searching for libraries
|
|
+ # that are linked more than once (e.g. -la -lb -la)
|
|
+ for deplib in $deplibs; do
|
|
+ if $opt_duplicate_deps ; then
|
|
+ case "$libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ libs="$libs $deplib"
|
|
+ done
|
|
+
|
|
+ if test "$linkmode" = lib; then
|
|
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
|
|
+
|
|
+ # Compute libraries that are listed more than once in $predeps
|
|
+ # $postdeps and mark them as special (i.e., whose duplicates are
|
|
+ # not to be eliminated).
|
|
+ pre_post_deps=
|
|
+ if $opt_duplicate_compiler_generated_deps; then
|
|
+ for pre_post_dep in $predeps $postdeps; do
|
|
+ case "$pre_post_deps " in
|
|
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
|
|
+ esac
|
|
+ pre_post_deps="$pre_post_deps $pre_post_dep"
|
|
+ done
|
|
+ fi
|
|
+ pre_post_deps=
|
|
+ fi
|
|
+
|
|
+ deplibs=
|
|
+ newdependency_libs=
|
|
+ newlib_search_path=
|
|
+ need_relink=no # whether we're linking any uninstalled libtool libraries
|
|
+ notinst_deplibs= # not-installed libtool libraries
|
|
+ notinst_path= # paths that contain not-installed libtool libraries
|
|
+
|
|
+ case $linkmode in
|
|
+ lib)
|
|
+ passes="conv dlpreopen link"
|
|
+ for file in $dlfiles $dlprefiles; do
|
|
+ case $file in
|
|
+ *.la) ;;
|
|
+ *)
|
|
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ ;;
|
|
+ prog)
|
|
+ compile_deplibs=
|
|
+ finalize_deplibs=
|
|
+ alldeplibs=no
|
|
+ newdlfiles=
|
|
+ newdlprefiles=
|
|
+ passes="conv scan dlopen dlpreopen link"
|
|
+ ;;
|
|
+ *) passes="conv"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ for pass in $passes; do
|
|
+ # The preopen pass in lib mode reverses $deplibs; put it back here
|
|
+ # so that -L comes before libs that need it for instance...
|
|
+ if test "$linkmode,$pass" = "lib,link"; then
|
|
+ ## FIXME: Find the place where the list is rebuilt in the wrong
|
|
+ ## order, and fix it there properly
|
|
+ tmp_deplibs=
|
|
+ for deplib in $deplibs; do
|
|
+ tmp_deplibs="$deplib $tmp_deplibs"
|
|
+ done
|
|
+ deplibs="$tmp_deplibs"
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode,$pass" = "lib,link" ||
|
|
+ test "$linkmode,$pass" = "prog,scan"; then
|
|
+ libs="$deplibs"
|
|
+ deplibs=
|
|
+ fi
|
|
+ if test "$linkmode" = prog; then
|
|
+ case $pass in
|
|
+ dlopen) libs="$dlfiles" ;;
|
|
+ dlpreopen) libs="$dlprefiles" ;;
|
|
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
|
|
+ # Collect and forward deplibs of preopened libtool libs
|
|
+ for lib in $dlprefiles; do
|
|
+ # Ignore non-libtool-libs
|
|
+ dependency_libs=
|
|
+ case $lib in
|
|
+ *.la) func_source "$lib" ;;
|
|
+ esac
|
|
+
|
|
+ # Collect preopened libtool deplibs, except any this library
|
|
+ # has declared as weak libs
|
|
+ for deplib in $dependency_libs; do
|
|
+ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
|
|
+ case " $weak_libs " in
|
|
+ *" $deplib_base "*) ;;
|
|
+ *) deplibs="$deplibs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ done
|
|
+ libs="$dlprefiles"
|
|
+ fi
|
|
+ if test "$pass" = dlopen; then
|
|
+ # Collect dlpreopened libraries
|
|
+ save_deplibs="$deplibs"
|
|
+ deplibs=
|
|
+ fi
|
|
+
|
|
+ for deplib in $libs; do
|
|
+ lib=
|
|
+ found=no
|
|
+ case $deplib in
|
|
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ compiler_flags="$compiler_flags $deplib"
|
|
+ if test "$linkmode" = lib ; then
|
|
+ case "$new_inherited_linker_flags " in
|
|
+ *" $deplib "*) ;;
|
|
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ -l*)
|
|
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
|
|
+ func_warning "\`-l' is ignored for archives/objects"
|
|
+ continue
|
|
+ fi
|
|
+ func_stripname '-l' '' "$deplib"
|
|
+ name=$func_stripname_result
|
|
+ if test "$linkmode" = lib; then
|
|
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
|
|
+ else
|
|
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
|
|
+ fi
|
|
+ for searchdir in $searchdirs; do
|
|
+ for search_ext in .la $std_shrext .so .a; do
|
|
+ # Search the libtool library
|
|
+ lib="$searchdir/lib${name}${search_ext}"
|
|
+ if test -f "$lib"; then
|
|
+ if test "$search_ext" = ".la"; then
|
|
+ found=yes
|
|
+ else
|
|
+ found=no
|
|
+ fi
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ if test "$found" != yes; then
|
|
+ # deplib doesn't seem to be a libtool library
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$deplib $deplibs"
|
|
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ continue
|
|
+ else # deplib is a libtool library
|
|
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
|
|
+ # We need to do some special things here, and not later.
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $deplib "*)
|
|
+ if func_lalib_p "$lib"; then
|
|
+ library_names=
|
|
+ old_library=
|
|
+ func_source "$lib"
|
|
+ for l in $old_library $library_names; do
|
|
+ ll="$l"
|
|
+ done
|
|
+ if test "X$ll" = "X$old_library" ; then # only static version available
|
|
+ found=no
|
|
+ func_dirname "$lib" "" "."
|
|
+ ladir="$func_dirname_result"
|
|
+ lib=$ladir/$old_library
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$deplib $deplibs"
|
|
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *) ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ ;; # -l
|
|
+ *.ltframework)
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$deplib $deplibs"
|
|
+ if test "$linkmode" = lib ; then
|
|
+ case "$new_inherited_linker_flags " in
|
|
+ *" $deplib "*) ;;
|
|
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ -L*)
|
|
+ case $linkmode in
|
|
+ lib)
|
|
+ deplibs="$deplib $deplibs"
|
|
+ test "$pass" = conv && continue
|
|
+ newdependency_libs="$deplib $newdependency_libs"
|
|
+ func_stripname '-L' '' "$deplib"
|
|
+ newlib_search_path="$newlib_search_path $func_stripname_result"
|
|
+ ;;
|
|
+ prog)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ fi
|
|
+ if test "$pass" = scan; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ fi
|
|
+ func_stripname '-L' '' "$deplib"
|
|
+ newlib_search_path="$newlib_search_path $func_stripname_result"
|
|
+ ;;
|
|
+ *)
|
|
+ func_warning "\`-L' is ignored for archives/objects"
|
|
+ ;;
|
|
+ esac # linkmode
|
|
+ continue
|
|
+ ;; # -L
|
|
+ -R*)
|
|
+ if test "$pass" = link; then
|
|
+ func_stripname '-R' '' "$deplib"
|
|
+ dir=$func_stripname_result
|
|
+ # Make sure the xrpath contains only unique directories.
|
|
+ case "$xrpath " in
|
|
+ *" $dir "*) ;;
|
|
+ *) xrpath="$xrpath $dir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ ;;
|
|
+ *.la) lib="$deplib" ;;
|
|
+ *.$libext)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ fi
|
|
+ case $linkmode in
|
|
+ lib)
|
|
+ # Linking convenience modules into shared libraries is allowed,
|
|
+ # but linking other static libraries is non-portable.
|
|
+ case " $dlpreconveniencelibs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *)
|
|
+ valid_a_lib=no
|
|
+ case $deplibs_check_method in
|
|
+ match_pattern*)
|
|
+ set dummy $deplibs_check_method; shift
|
|
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
|
|
+ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
|
|
+ | $EGREP "$match_pattern_regex" > /dev/null; then
|
|
+ valid_a_lib=yes
|
|
+ fi
|
|
+ ;;
|
|
+ pass_all)
|
|
+ valid_a_lib=yes
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$valid_a_lib" != yes; then
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
|
|
+ $ECHO "*** I have the capability to make that library automatically link in when"
|
|
+ $ECHO "*** you link to this library. But I can only do this if you have a"
|
|
+ $ECHO "*** shared version of the library, which you do not appear to have"
|
|
+ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
|
|
+ $ECHO "*** that it is just a static archive that I should not use here."
|
|
+ else
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: Linking the shared library $output against the"
|
|
+ $ECHO "*** static library $deplib is not portable!"
|
|
+ deplibs="$deplib $deplibs"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+ prog)
|
|
+ if test "$pass" != link; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ esac # linkmode
|
|
+ ;; # *.$libext
|
|
+ *.lo | *.$objext)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ elif test "$linkmode" = prog; then
|
|
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
|
|
+ # If there is no dlopen support or we're linking statically,
|
|
+ # we need to preload.
|
|
+ newdlprefiles="$newdlprefiles $deplib"
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ newdlfiles="$newdlfiles $deplib"
|
|
+ fi
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ %DEPLIBS%)
|
|
+ alldeplibs=yes
|
|
+ continue
|
|
+ ;;
|
|
+ esac # case $deplib
|
|
+
|
|
+ if test "$found" = yes || test -f "$lib"; then :
|
|
+ else
|
|
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
|
|
+ fi
|
|
+
|
|
+ # Check to see that this really is a libtool archive.
|
|
+ func_lalib_unsafe_p "$lib" \
|
|
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
|
|
+
|
|
+ func_dirname "$lib" "" "."
|
|
+ ladir="$func_dirname_result"
|
|
+
|
|
+ dlname=
|
|
+ dlopen=
|
|
+ dlpreopen=
|
|
+ libdir=
|
|
+ library_names=
|
|
+ old_library=
|
|
+ inherited_linker_flags=
|
|
+ # If the library was installed with an old release of libtool,
|
|
+ # it will not redefine variables installed, or shouldnotlink
|
|
+ installed=yes
|
|
+ shouldnotlink=no
|
|
+ avoidtemprpath=
|
|
+
|
|
+
|
|
+ # Read the .la file
|
|
+ func_source "$lib"
|
|
+
|
|
+ # Convert "-framework foo" to "foo.ltframework"
|
|
+ if test -n "$inherited_linker_flags"; then
|
|
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
|
|
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
|
|
+ case " $new_inherited_linker_flags " in
|
|
+ *" $tmp_inherited_linker_flag "*) ;;
|
|
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
|
|
+ esac
|
|
+ done
|
|
+ fi
|
|
+ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ if test "$linkmode,$pass" = "lib,link" ||
|
|
+ test "$linkmode,$pass" = "prog,scan" ||
|
|
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
|
|
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
|
|
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
|
|
+ fi
|
|
+
|
|
+ if test "$pass" = conv; then
|
|
+ # Only check for convenience libraries
|
|
+ deplibs="$lib $deplibs"
|
|
+ if test -z "$libdir"; then
|
|
+ if test -z "$old_library"; then
|
|
+ func_fatal_error "cannot find name of link library for \`$lib'"
|
|
+ fi
|
|
+ # It is a libtool convenience library, so add in its objects.
|
|
+ convenience="$convenience $ladir/$objdir/$old_library"
|
|
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
|
|
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
|
|
+ func_fatal_error "\`$lib' is not a convenience library"
|
|
+ fi
|
|
+ tmp_libs=
|
|
+ for deplib in $dependency_libs; do
|
|
+ deplibs="$deplib $deplibs"
|
|
+ if $opt_duplicate_deps ; then
|
|
+ case "$tmp_libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ tmp_libs="$tmp_libs $deplib"
|
|
+ done
|
|
+ continue
|
|
+ fi # $pass = conv
|
|
+
|
|
+
|
|
+ # Get the name of the library we link against.
|
|
+ linklib=
|
|
+ for l in $old_library $library_names; do
|
|
+ linklib="$l"
|
|
+ done
|
|
+ if test -z "$linklib"; then
|
|
+ func_fatal_error "cannot find name of link library for \`$lib'"
|
|
+ fi
|
|
+
|
|
+ # This library was specified with -dlopen.
|
|
+ if test "$pass" = dlopen; then
|
|
+ if test -z "$libdir"; then
|
|
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
|
|
+ fi
|
|
+ if test -z "$dlname" ||
|
|
+ test "$dlopen_support" != yes ||
|
|
+ test "$build_libtool_libs" = no; then
|
|
+ # If there is no dlname, no dlopen support or we're linking
|
|
+ # statically, we need to preload. We also need to preload any
|
|
+ # dependent libraries so libltdl's deplib preloader doesn't
|
|
+ # bomb out in the load deplibs phase.
|
|
+ dlprefiles="$dlprefiles $lib $dependency_libs"
|
|
+ else
|
|
+ newdlfiles="$newdlfiles $lib"
|
|
+ fi
|
|
+ continue
|
|
+ fi # $pass = dlopen
|
|
+
|
|
+ # We need an absolute path.
|
|
+ case $ladir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
|
|
+ *)
|
|
+ abs_ladir=`cd "$ladir" && pwd`
|
|
+ if test -z "$abs_ladir"; then
|
|
+ func_warning "cannot determine absolute directory name of \`$ladir'"
|
|
+ func_warning "passing it literally to the linker, although it might fail"
|
|
+ abs_ladir="$ladir"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ func_basename "$lib"
|
|
+ laname="$func_basename_result"
|
|
+
|
|
+ # Find the relevant object directory and library name.
|
|
+ if test "X$installed" = Xyes; then
|
|
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
|
|
+ func_warning "library \`$lib' was moved."
|
|
+ dir="$ladir"
|
|
+ absdir="$abs_ladir"
|
|
+ libdir="$abs_ladir"
|
|
+ else
|
|
+ dir="$libdir"
|
|
+ absdir="$libdir"
|
|
+ fi
|
|
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
|
|
+ else
|
|
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
|
|
+ dir="$ladir"
|
|
+ absdir="$abs_ladir"
|
|
+ # Remove this search path later
|
|
+ notinst_path="$notinst_path $abs_ladir"
|
|
+ else
|
|
+ dir="$ladir/$objdir"
|
|
+ absdir="$abs_ladir/$objdir"
|
|
+ # Remove this search path later
|
|
+ notinst_path="$notinst_path $abs_ladir"
|
|
+ fi
|
|
+ fi # $installed = yes
|
|
+ func_stripname 'lib' '.la' "$laname"
|
|
+ name=$func_stripname_result
|
|
+
|
|
+ # This library was specified with -dlpreopen.
|
|
+ if test "$pass" = dlpreopen; then
|
|
+ if test -z "$libdir" && test "$linkmode" = prog; then
|
|
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
|
|
+ fi
|
|
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
|
|
+ # are required to link).
|
|
+ if test -n "$old_library"; then
|
|
+ newdlprefiles="$newdlprefiles $dir/$old_library"
|
|
+ # Keep a list of preopened convenience libraries to check
|
|
+ # that they are being used correctly in the link pass.
|
|
+ test -z "$libdir" && \
|
|
+ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
|
|
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
|
|
+ elif test -n "$dlname"; then
|
|
+ newdlprefiles="$newdlprefiles $dir/$dlname"
|
|
+ else
|
|
+ newdlprefiles="$newdlprefiles $dir/$linklib"
|
|
+ fi
|
|
+ fi # $pass = dlpreopen
|
|
+
|
|
+ if test -z "$libdir"; then
|
|
+ # Link the convenience library
|
|
+ if test "$linkmode" = lib; then
|
|
+ deplibs="$dir/$old_library $deplibs"
|
|
+ elif test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$dir/$old_library $compile_deplibs"
|
|
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$lib $deplibs" # used for prog,scan pass
|
|
+ fi
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+
|
|
+ if test "$linkmode" = prog && test "$pass" != link; then
|
|
+ newlib_search_path="$newlib_search_path $ladir"
|
|
+ deplibs="$lib $deplibs"
|
|
+
|
|
+ linkalldeplibs=no
|
|
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
|
|
+ test "$build_libtool_libs" = no; then
|
|
+ linkalldeplibs=yes
|
|
+ fi
|
|
+
|
|
+ tmp_libs=
|
|
+ for deplib in $dependency_libs; do
|
|
+ case $deplib in
|
|
+ -L*) func_stripname '-L' '' "$deplib"
|
|
+ newlib_search_path="$newlib_search_path $func_stripname_result"
|
|
+ ;;
|
|
+ esac
|
|
+ # Need to link against all dependency_libs?
|
|
+ if test "$linkalldeplibs" = yes; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ # Need to hardcode shared library paths
|
|
+ # or/and link against static libraries
|
|
+ newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ if $opt_duplicate_deps ; then
|
|
+ case "$tmp_libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ tmp_libs="$tmp_libs $deplib"
|
|
+ done # for deplib
|
|
+ continue
|
|
+ fi # $linkmode = prog...
|
|
+
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ if test -n "$library_names" &&
|
|
+ { { test "$prefer_static_libs" = no ||
|
|
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
|
|
+ test -z "$old_library"; }; then
|
|
+ # We need to hardcode the library path
|
|
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
|
|
+ # Make sure the rpath contains only unique directories.
|
|
+ case "$temp_rpath:" in
|
|
+ *"$absdir:"*) ;;
|
|
+ *) temp_rpath="$temp_rpath$absdir:" ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Hardcode the library path.
|
|
+ # Skip directories that are in the system default run-time
|
|
+ # search path.
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $absdir "*) ;;
|
|
+ *)
|
|
+ case "$compile_rpath " in
|
|
+ *" $absdir "*) ;;
|
|
+ *) compile_rpath="$compile_rpath $absdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $libdir "*) ;;
|
|
+ *)
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ fi # $linkmode,$pass = prog,link...
|
|
+
|
|
+ if test "$alldeplibs" = yes &&
|
|
+ { test "$deplibs_check_method" = pass_all ||
|
|
+ { test "$build_libtool_libs" = yes &&
|
|
+ test -n "$library_names"; }; }; then
|
|
+ # We only need to search for static libraries
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ link_static=no # Whether the deplib will be linked statically
|
|
+ use_static_libs=$prefer_static_libs
|
|
+ if test "$use_static_libs" = built && test "$installed" = yes; then
|
|
+ use_static_libs=no
|
|
+ fi
|
|
+ if test -n "$library_names" &&
|
|
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* | *cegcc*)
|
|
+ # No point in relinking DLLs because paths are not encoded
|
|
+ notinst_deplibs="$notinst_deplibs $lib"
|
|
+ need_relink=no
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$installed" = no; then
|
|
+ notinst_deplibs="$notinst_deplibs $lib"
|
|
+ need_relink=yes
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ # This is a shared library
|
|
+
|
|
+ # Warn about portability, can't link against -module's on some
|
|
+ # systems (darwin). Don't bleat about dlopened modules though!
|
|
+ dlopenmodule=""
|
|
+ for dlpremoduletest in $dlprefiles; do
|
|
+ if test "X$dlpremoduletest" = "X$lib"; then
|
|
+ dlopenmodule="$dlpremoduletest"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
|
|
+ $ECHO
|
|
+ if test "$linkmode" = prog; then
|
|
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
|
|
+ else
|
|
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
|
|
+ fi
|
|
+ $ECHO "*** $linklib is not portable!"
|
|
+ fi
|
|
+ if test "$linkmode" = lib &&
|
|
+ test "$hardcode_into_libs" = yes; then
|
|
+ # Hardcode the library path.
|
|
+ # Skip directories that are in the system default run-time
|
|
+ # search path.
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $absdir "*) ;;
|
|
+ *)
|
|
+ case "$compile_rpath " in
|
|
+ *" $absdir "*) ;;
|
|
+ *) compile_rpath="$compile_rpath $absdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $libdir "*) ;;
|
|
+ *)
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ if test -n "$old_archive_from_expsyms_cmds"; then
|
|
+ # figure out the soname
|
|
+ set dummy $library_names
|
|
+ shift
|
|
+ realname="$1"
|
|
+ shift
|
|
+ libname=`eval "\\$ECHO \"$libname_spec\""`
|
|
+ # use dlname if we got it. it's perfectly good, no?
|
|
+ if test -n "$dlname"; then
|
|
+ soname="$dlname"
|
|
+ elif test -n "$soname_spec"; then
|
|
+ # bleh windows
|
|
+ case $host in
|
|
+ *cygwin* | mingw* | *cegcc*)
|
|
+ func_arith $current - $age
|
|
+ major=$func_arith_result
|
|
+ versuffix="-$major"
|
|
+ ;;
|
|
+ esac
|
|
+ eval soname=\"$soname_spec\"
|
|
+ else
|
|
+ soname="$realname"
|
|
+ fi
|
|
+
|
|
+ # Make a new name for the extract_expsyms_cmds to use
|
|
+ soroot="$soname"
|
|
+ func_basename "$soroot"
|
|
+ soname="$func_basename_result"
|
|
+ func_stripname 'lib' '.dll' "$soname"
|
|
+ newlib=libimp-$func_stripname_result.a
|
|
+
|
|
+ # If the library has no export list, then create one now
|
|
+ if test -f "$output_objdir/$soname-def"; then :
|
|
+ else
|
|
+ func_verbose "extracting exported symbol list from \`$soname'"
|
|
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ # Create $newlib
|
|
+ if test -f "$output_objdir/$newlib"; then :; else
|
|
+ func_verbose "generating import library for \`$soname'"
|
|
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
|
|
+ fi
|
|
+ # make sure the library variables are pointing to the new library
|
|
+ dir=$output_objdir
|
|
+ linklib=$newlib
|
|
+ fi # test -n "$old_archive_from_expsyms_cmds"
|
|
+
|
|
+ if test "$linkmode" = prog || test "$mode" != relink; then
|
|
+ add_shlibpath=
|
|
+ add_dir=
|
|
+ add=
|
|
+ lib_linked=yes
|
|
+ case $hardcode_action in
|
|
+ immediate | unsupported)
|
|
+ if test "$hardcode_direct" = no; then
|
|
+ add="$dir/$linklib"
|
|
+ case $host in
|
|
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
|
|
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
|
|
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
|
|
+ *-*-unixware7*) add_dir="-L$dir" ;;
|
|
+ *-*-darwin* )
|
|
+ # if the lib is a (non-dlopened) module then we can not
|
|
+ # link against it, someone is ignoring the earlier warnings
|
|
+ if /usr/bin/file -L $add 2> /dev/null |
|
|
+ $GREP ": [^:]* bundle" >/dev/null ; then
|
|
+ if test "X$dlopenmodule" != "X$lib"; then
|
|
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
|
|
+ if test -z "$old_library" ; then
|
|
+ $ECHO
|
|
+ $ECHO "*** And there doesn't seem to be a static archive available"
|
|
+ $ECHO "*** The link will probably fail, sorry"
|
|
+ else
|
|
+ add="$dir/$old_library"
|
|
+ fi
|
|
+ elif test -n "$old_library"; then
|
|
+ add="$dir/$old_library"
|
|
+ fi
|
|
+ fi
|
|
+ esac
|
|
+ elif test "$hardcode_minus_L" = no; then
|
|
+ case $host in
|
|
+ *-*-sunos*) add_shlibpath="$dir" ;;
|
|
+ esac
|
|
+ add_dir="-L$dir"
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = no; then
|
|
+ add_shlibpath="$dir"
|
|
+ add="-l$name"
|
|
+ else
|
|
+ lib_linked=no
|
|
+ fi
|
|
+ ;;
|
|
+ relink)
|
|
+ if test "$hardcode_direct" = yes &&
|
|
+ test "$hardcode_direct_absolute" = no; then
|
|
+ add="$dir/$linklib"
|
|
+ elif test "$hardcode_minus_L" = yes; then
|
|
+ add_dir="-L$dir"
|
|
+ # Try looking first in the location we're being installed to.
|
|
+ if test -n "$inst_prefix_dir"; then
|
|
+ case $libdir in
|
|
+ [\\/]*)
|
|
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = yes; then
|
|
+ add_shlibpath="$dir"
|
|
+ add="-l$name"
|
|
+ else
|
|
+ lib_linked=no
|
|
+ fi
|
|
+ ;;
|
|
+ *) lib_linked=no ;;
|
|
+ esac
|
|
+
|
|
+ if test "$lib_linked" != yes; then
|
|
+ func_fatal_configuration "unsupported hardcode properties"
|
|
+ fi
|
|
+
|
|
+ if test -n "$add_shlibpath"; then
|
|
+ case :$compile_shlibpath: in
|
|
+ *":$add_shlibpath:"*) ;;
|
|
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test "$linkmode" = prog; then
|
|
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
|
|
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
|
|
+ else
|
|
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
|
|
+ test -n "$add" && deplibs="$add $deplibs"
|
|
+ if test "$hardcode_direct" != yes &&
|
|
+ test "$hardcode_minus_L" != yes &&
|
|
+ test "$hardcode_shlibpath_var" = yes; then
|
|
+ case :$finalize_shlibpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode" = prog || test "$mode" = relink; then
|
|
+ add_shlibpath=
|
|
+ add_dir=
|
|
+ add=
|
|
+ # Finalize command for both is simple: just hardcode it.
|
|
+ if test "$hardcode_direct" = yes &&
|
|
+ test "$hardcode_direct_absolute" = no; then
|
|
+ add="$libdir/$linklib"
|
|
+ elif test "$hardcode_minus_L" = yes; then
|
|
+ add_dir="-L$libdir"
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = yes; then
|
|
+ case :$finalize_shlibpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
|
|
+ esac
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_automatic" = yes; then
|
|
+ if test -n "$inst_prefix_dir" &&
|
|
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
|
|
+ add="$inst_prefix_dir$libdir/$linklib"
|
|
+ else
|
|
+ add="$libdir/$linklib"
|
|
+ fi
|
|
+ else
|
|
+ # We cannot seem to hardcode it, guess we'll fake it.
|
|
+ add_dir="-L$libdir"
|
|
+ # Try looking first in the location we're being installed to.
|
|
+ if test -n "$inst_prefix_dir"; then
|
|
+ case $libdir in
|
|
+ [\\/]*)
|
|
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ add="-l$name"
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode" = prog; then
|
|
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
|
|
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
|
|
+ else
|
|
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
|
|
+ test -n "$add" && deplibs="$add $deplibs"
|
|
+ fi
|
|
+ fi
|
|
+ elif test "$linkmode" = prog; then
|
|
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
|
|
+ # is not unsupported. This is valid on all known static and
|
|
+ # shared platforms.
|
|
+ if test "$hardcode_direct" != unsupported; then
|
|
+ test -n "$old_library" && linklib="$old_library"
|
|
+ compile_deplibs="$dir/$linklib $compile_deplibs"
|
|
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
|
|
+ else
|
|
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
|
|
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
|
|
+ fi
|
|
+ elif test "$build_libtool_libs" = yes; then
|
|
+ # Not a shared library
|
|
+ if test "$deplibs_check_method" != pass_all; then
|
|
+ # We're trying link a shared library against a static one
|
|
+ # but the system doesn't support it.
|
|
+
|
|
+ # Just print a warning and add the library to dependency_libs so
|
|
+ # that the program can be linked against the static library.
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
|
|
+ $ECHO "*** I have the capability to make that library automatically link in when"
|
|
+ $ECHO "*** you link to this library. But I can only do this if you have a"
|
|
+ $ECHO "*** shared version of the library, which you do not appear to have."
|
|
+ if test "$module" = yes; then
|
|
+ $ECHO "*** But as you try to build a module library, libtool will still create "
|
|
+ $ECHO "*** a static module, that should work as long as the dlopening application"
|
|
+ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
|
|
+ if test -z "$global_symbol_pipe"; then
|
|
+ $ECHO
|
|
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
|
|
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
|
|
+ $ECHO "*** not find such a program. So, this module is probably useless."
|
|
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
|
|
+ fi
|
|
+ if test "$build_old_libs" = no; then
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ build_libtool_libs=no
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ deplibs="$dir/$old_library $deplibs"
|
|
+ link_static=yes
|
|
+ fi
|
|
+ fi # link shared/static library?
|
|
+
|
|
+ if test "$linkmode" = lib; then
|
|
+ if test -n "$dependency_libs" &&
|
|
+ { test "$hardcode_into_libs" != yes ||
|
|
+ test "$build_old_libs" = yes ||
|
|
+ test "$link_static" = yes; }; then
|
|
+ # Extract -R from dependency_libs
|
|
+ temp_deplibs=
|
|
+ for libdir in $dependency_libs; do
|
|
+ case $libdir in
|
|
+ -R*) func_stripname '-R' '' "$libdir"
|
|
+ temp_xrpath=$func_stripname_result
|
|
+ case " $xrpath " in
|
|
+ *" $temp_xrpath "*) ;;
|
|
+ *) xrpath="$xrpath $temp_xrpath";;
|
|
+ esac;;
|
|
+ *) temp_deplibs="$temp_deplibs $libdir";;
|
|
+ esac
|
|
+ done
|
|
+ dependency_libs="$temp_deplibs"
|
|
+ fi
|
|
+
|
|
+ newlib_search_path="$newlib_search_path $absdir"
|
|
+ # Link against this library
|
|
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
|
|
+ # ... and its dependency_libs
|
|
+ tmp_libs=
|
|
+ for deplib in $dependency_libs; do
|
|
+ newdependency_libs="$deplib $newdependency_libs"
|
|
+ if $opt_duplicate_deps ; then
|
|
+ case "$tmp_libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ tmp_libs="$tmp_libs $deplib"
|
|
+ done
|
|
+
|
|
+ if test "$link_all_deplibs" != no; then
|
|
+ # Add the search paths of all dependency libraries
|
|
+ for deplib in $dependency_libs; do
|
|
+ case $deplib in
|
|
+ -L*) path="$deplib" ;;
|
|
+ *.la)
|
|
+ func_dirname "$deplib" "" "."
|
|
+ dir="$func_dirname_result"
|
|
+ # We need an absolute path.
|
|
+ case $dir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
|
|
+ *)
|
|
+ absdir=`cd "$dir" && pwd`
|
|
+ if test -z "$absdir"; then
|
|
+ func_warning "cannot determine absolute directory name of \`$dir'"
|
|
+ absdir="$dir"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ if $GREP "^installed=no" $deplib > /dev/null; then
|
|
+ case $host in
|
|
+ *-*-darwin*)
|
|
+ depdepl=
|
|
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
|
|
+ if test -n "$deplibrary_names" ; then
|
|
+ for tmp in $deplibrary_names ; do
|
|
+ depdepl=$tmp
|
|
+ done
|
|
+ if test -f "$absdir/$objdir/$depdepl" ; then
|
|
+ depdepl="$absdir/$objdir/$depdepl"
|
|
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
|
|
+ if test -z "$darwin_install_name"; then
|
|
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
|
|
+ fi
|
|
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
|
|
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
|
|
+ path=
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ path="-L$absdir/$objdir"
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
|
|
+ test -z "$libdir" && \
|
|
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
|
|
+ test "$absdir" != "$libdir" && \
|
|
+ func_warning "\`$deplib' seems to be moved"
|
|
+
|
|
+ path="-L$absdir"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ case " $deplibs " in
|
|
+ *" $path "*) ;;
|
|
+ *) deplibs="$path $deplibs" ;;
|
|
+ esac
|
|
+ done
|
|
+ fi # link_all_deplibs != no
|
|
+ fi # linkmode = lib
|
|
+ done # for deplib in $libs
|
|
+ if test "$pass" = link; then
|
|
+ if test "$linkmode" = "prog"; then
|
|
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
|
|
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
|
|
+ else
|
|
+ compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ fi
|
|
+ fi
|
|
+ dependency_libs="$newdependency_libs"
|
|
+ if test "$pass" = dlpreopen; then
|
|
+ # Link the dlpreopened libraries before other libraries
|
|
+ for deplib in $save_deplibs; do
|
|
+ deplibs="$deplib $deplibs"
|
|
+ done
|
|
+ fi
|
|
+ if test "$pass" != dlopen; then
|
|
+ if test "$pass" != conv; then
|
|
+ # Make sure lib_search_path contains only unique directories.
|
|
+ lib_search_path=
|
|
+ for dir in $newlib_search_path; do
|
|
+ case "$lib_search_path " in
|
|
+ *" $dir "*) ;;
|
|
+ *) lib_search_path="$lib_search_path $dir" ;;
|
|
+ esac
|
|
+ done
|
|
+ newlib_search_path=
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode,$pass" != "prog,link"; then
|
|
+ vars="deplibs"
|
|
+ else
|
|
+ vars="compile_deplibs finalize_deplibs"
|
|
+ fi
|
|
+ for var in $vars dependency_libs; do
|
|
+ # Add libraries to $var in reverse order
|
|
+ eval tmp_libs=\"\$$var\"
|
|
+ new_libs=
|
|
+ for deplib in $tmp_libs; do
|
|
+ # FIXME: Pedantically, this is the right thing to do, so
|
|
+ # that some nasty dependency loop isn't accidentally
|
|
+ # broken:
|
|
+ #new_libs="$deplib $new_libs"
|
|
+ # Pragmatically, this seems to cause very few problems in
|
|
+ # practice:
|
|
+ case $deplib in
|
|
+ -L*) new_libs="$deplib $new_libs" ;;
|
|
+ -R*) ;;
|
|
+ *)
|
|
+ # And here is the reason: when a library appears more
|
|
+ # than once as an explicit dependence of a library, or
|
|
+ # is implicitly linked in more than once by the
|
|
+ # compiler, it is considered special, and multiple
|
|
+ # occurrences thereof are not removed. Compare this
|
|
+ # with having the same library being listed as a
|
|
+ # dependency of multiple other libraries: in this case,
|
|
+ # we know (pedantically, we assume) the library does not
|
|
+ # need to be listed more than once, so we keep only the
|
|
+ # last copy. This is not always right, but it is rare
|
|
+ # enough that we require users that really mean to play
|
|
+ # such unportable linking tricks to link the library
|
|
+ # using -Wl,-lname, so that libtool does not consider it
|
|
+ # for duplicate removal.
|
|
+ case " $specialdeplibs " in
|
|
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
|
|
+ *)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$deplib $new_libs" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ tmp_libs=
|
|
+ for deplib in $new_libs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $tmp_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) tmp_libs="$tmp_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) tmp_libs="$tmp_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ eval $var=\"$tmp_libs\"
|
|
+ done # for var
|
|
+ fi
|
|
+ # Last step: remove runtime libs from dependency_libs
|
|
+ # (they stay in deplibs)
|
|
+ tmp_libs=
|
|
+ for i in $dependency_libs ; do
|
|
+ case " $predeps $postdeps $compiler_lib_search_path " in
|
|
+ *" $i "*)
|
|
+ i=""
|
|
+ ;;
|
|
+ esac
|
|
+ if test -n "$i" ; then
|
|
+ tmp_libs="$tmp_libs $i"
|
|
+ fi
|
|
+ done
|
|
+ dependency_libs=$tmp_libs
|
|
+ done # for pass
|
|
+ if test "$linkmode" = prog; then
|
|
+ dlfiles="$newdlfiles"
|
|
+ fi
|
|
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ fi
|
|
+
|
|
+ case $linkmode in
|
|
+ oldlib)
|
|
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
|
|
+ func_warning "\`-dlopen' is ignored for archives"
|
|
+ fi
|
|
+
|
|
+ case " $deplibs" in
|
|
+ *\ -l* | *\ -L*)
|
|
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
|
|
+ esac
|
|
+
|
|
+ test -n "$rpath" && \
|
|
+ func_warning "\`-rpath' is ignored for archives"
|
|
+
|
|
+ test -n "$xrpath" && \
|
|
+ func_warning "\`-R' is ignored for archives"
|
|
+
|
|
+ test -n "$vinfo" && \
|
|
+ func_warning "\`-version-info/-version-number' is ignored for archives"
|
|
+
|
|
+ test -n "$release" && \
|
|
+ func_warning "\`-release' is ignored for archives"
|
|
+
|
|
+ test -n "$export_symbols$export_symbols_regex" && \
|
|
+ func_warning "\`-export-symbols' is ignored for archives"
|
|
+
|
|
+ # Now set the variables for building old libraries.
|
|
+ build_libtool_libs=no
|
|
+ oldlibs="$output"
|
|
+ objs="$objs$old_deplibs"
|
|
+ ;;
|
|
+
|
|
+ lib)
|
|
+ # Make sure we only generate libraries of the form `libNAME.la'.
|
|
+ case $outputname in
|
|
+ lib*)
|
|
+ func_stripname 'lib' '.la' "$outputname"
|
|
+ name=$func_stripname_result
|
|
+ eval shared_ext=\"$shrext_cmds\"
|
|
+ eval libname=\"$libname_spec\"
|
|
+ ;;
|
|
+ *)
|
|
+ test "$module" = no && \
|
|
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
|
|
+
|
|
+ if test "$need_lib_prefix" != no; then
|
|
+ # Add the "lib" prefix for modules if required
|
|
+ func_stripname '' '.la' "$outputname"
|
|
+ name=$func_stripname_result
|
|
+ eval shared_ext=\"$shrext_cmds\"
|
|
+ eval libname=\"$libname_spec\"
|
|
+ else
|
|
+ func_stripname '' '.la' "$outputname"
|
|
+ libname=$func_stripname_result
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test -n "$objs"; then
|
|
+ if test "$deplibs_check_method" != pass_all; then
|
|
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
|
|
+ else
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
|
|
+ $ECHO "*** objects $objs is not portable!"
|
|
+ libobjs="$libobjs $objs"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ test "$dlself" != no && \
|
|
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
|
|
+
|
|
+ set dummy $rpath
|
|
+ shift
|
|
+ test "$#" -gt 1 && \
|
|
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
|
|
+
|
|
+ install_libdir="$1"
|
|
+
|
|
+ oldlibs=
|
|
+ if test -z "$rpath"; then
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ # Building a libtool convenience library.
|
|
+ # Some compilers have problems with a `.al' extension so
|
|
+ # convenience libraries should have the same extension an
|
|
+ # archive normally would.
|
|
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
|
|
+ build_libtool_libs=convenience
|
|
+ build_old_libs=yes
|
|
+ fi
|
|
+
|
|
+ test -n "$vinfo" && \
|
|
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
|
|
+
|
|
+ test -n "$release" && \
|
|
+ func_warning "\`-release' is ignored for convenience libraries"
|
|
+ else
|
|
+
|
|
+ # Parse the version information argument.
|
|
+ save_ifs="$IFS"; IFS=':'
|
|
+ set dummy $vinfo 0 0 0
|
|
+ shift
|
|
+ IFS="$save_ifs"
|
|
+
|
|
+ test -n "$7" && \
|
|
+ func_fatal_help "too many parameters to \`-version-info'"
|
|
+
|
|
+ # convert absolute version numbers to libtool ages
|
|
+ # this retains compatibility with .la files and attempts
|
|
+ # to make the code below a bit more comprehensible
|
|
+
|
|
+ case $vinfo_number in
|
|
+ yes)
|
|
+ number_major="$1"
|
|
+ number_minor="$2"
|
|
+ number_revision="$3"
|
|
+ #
|
|
+ # There are really only two kinds -- those that
|
|
+ # use the current revision as the major version
|
|
+ # and those that subtract age and use age as
|
|
+ # a minor version. But, then there is irix
|
|
+ # which has an extra 1 added just for fun
|
|
+ #
|
|
+ case $version_type in
|
|
+ darwin|linux|osf|windows|none)
|
|
+ func_arith $number_major + $number_minor
|
|
+ current=$func_arith_result
|
|
+ age="$number_minor"
|
|
+ revision="$number_revision"
|
|
+ ;;
|
|
+ freebsd-aout|freebsd-elf|sunos)
|
|
+ current="$number_major"
|
|
+ revision="$number_minor"
|
|
+ age="0"
|
|
+ ;;
|
|
+ irix|nonstopux)
|
|
+ func_arith $number_major + $number_minor
|
|
+ current=$func_arith_result
|
|
+ age="$number_minor"
|
|
+ revision="$number_minor"
|
|
+ lt_irix_increment=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ no)
|
|
+ current="$1"
|
|
+ revision="$2"
|
|
+ age="$3"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Check that each of the things are valid numbers.
|
|
+ case $current in
|
|
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
|
|
+ *)
|
|
+ func_error "CURRENT \`$current' must be a nonnegative integer"
|
|
+ func_fatal_error "\`$vinfo' is not valid version information"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case $revision in
|
|
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
|
|
+ *)
|
|
+ func_error "REVISION \`$revision' must be a nonnegative integer"
|
|
+ func_fatal_error "\`$vinfo' is not valid version information"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case $age in
|
|
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
|
|
+ *)
|
|
+ func_error "AGE \`$age' must be a nonnegative integer"
|
|
+ func_fatal_error "\`$vinfo' is not valid version information"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test "$age" -gt "$current"; then
|
|
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
|
|
+ func_fatal_error "\`$vinfo' is not valid version information"
|
|
+ fi
|
|
+
|
|
+ # Calculate the version variables.
|
|
+ major=
|
|
+ versuffix=
|
|
+ verstring=
|
|
+ case $version_type in
|
|
+ none) ;;
|
|
+
|
|
+ darwin)
|
|
+ # Like Linux, but with the current version available in
|
|
+ # verstring for coding it into the library header
|
|
+ func_arith $current - $age
|
|
+ major=.$func_arith_result
|
|
+ versuffix="$major.$age.$revision"
|
|
+ # Darwin ld doesn't like 0 for these options...
|
|
+ func_arith $current + 1
|
|
+ minor_current=$func_arith_result
|
|
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
|
|
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
|
|
+ ;;
|
|
+
|
|
+ freebsd-aout)
|
|
+ major=".$current"
|
|
+ versuffix=".$current.$revision";
|
|
+ ;;
|
|
+
|
|
+ freebsd-elf)
|
|
+ major=".$current"
|
|
+ versuffix=".$current"
|
|
+ ;;
|
|
+
|
|
+ irix | nonstopux)
|
|
+ if test "X$lt_irix_increment" = "Xno"; then
|
|
+ func_arith $current - $age
|
|
+ else
|
|
+ func_arith $current - $age + 1
|
|
+ fi
|
|
+ major=$func_arith_result
|
|
+
|
|
+ case $version_type in
|
|
+ nonstopux) verstring_prefix=nonstopux ;;
|
|
+ *) verstring_prefix=sgi ;;
|
|
+ esac
|
|
+ verstring="$verstring_prefix$major.$revision"
|
|
+
|
|
+ # Add in all the interfaces that we are compatible with.
|
|
+ loop=$revision
|
|
+ while test "$loop" -ne 0; do
|
|
+ func_arith $revision - $loop
|
|
+ iface=$func_arith_result
|
|
+ func_arith $loop - 1
|
|
+ loop=$func_arith_result
|
|
+ verstring="$verstring_prefix$major.$iface:$verstring"
|
|
+ done
|
|
+
|
|
+ # Before this point, $major must not contain `.'.
|
|
+ major=.$major
|
|
+ versuffix="$major.$revision"
|
|
+ ;;
|
|
+
|
|
+ linux)
|
|
+ func_arith $current - $age
|
|
+ major=.$func_arith_result
|
|
+ versuffix="$major.$age.$revision"
|
|
+ ;;
|
|
+
|
|
+ osf)
|
|
+ func_arith $current - $age
|
|
+ major=.$func_arith_result
|
|
+ versuffix=".$current.$age.$revision"
|
|
+ verstring="$current.$age.$revision"
|
|
+
|
|
+ # Add in all the interfaces that we are compatible with.
|
|
+ loop=$age
|
|
+ while test "$loop" -ne 0; do
|
|
+ func_arith $current - $loop
|
|
+ iface=$func_arith_result
|
|
+ func_arith $loop - 1
|
|
+ loop=$func_arith_result
|
|
+ verstring="$verstring:${iface}.0"
|
|
+ done
|
|
+
|
|
+ # Make executables depend on our current version.
|
|
+ verstring="$verstring:${current}.0"
|
|
+ ;;
|
|
+
|
|
+ qnx)
|
|
+ major=".$current"
|
|
+ versuffix=".$current"
|
|
+ ;;
|
|
+
|
|
+ sunos)
|
|
+ major=".$current"
|
|
+ versuffix=".$current.$revision"
|
|
+ ;;
|
|
+
|
|
+ windows)
|
|
+ # Use '-' rather than '.', since we only want one
|
|
+ # extension on DOS 8.3 filesystems.
|
|
+ func_arith $current - $age
|
|
+ major=$func_arith_result
|
|
+ versuffix="-$major"
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ func_fatal_configuration "unknown library version type \`$version_type'"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Clear the version info if we defaulted, and they specified a release.
|
|
+ if test -z "$vinfo" && test -n "$release"; then
|
|
+ major=
|
|
+ case $version_type in
|
|
+ darwin)
|
|
+ # we can't check for "0.0" in archive_cmds due to quoting
|
|
+ # problems, so we reset it completely
|
|
+ verstring=
|
|
+ ;;
|
|
+ *)
|
|
+ verstring="0.0"
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$need_version" = no; then
|
|
+ versuffix=
|
|
+ else
|
|
+ versuffix=".0.0"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Remove version info from name if versioning should be avoided
|
|
+ if test "$avoid_version" = yes && test "$need_version" = no; then
|
|
+ major=
|
|
+ versuffix=
|
|
+ verstring=""
|
|
+ fi
|
|
+
|
|
+ # Check to see if the archive will have undefined symbols.
|
|
+ if test "$allow_undefined" = yes; then
|
|
+ if test "$allow_undefined_flag" = unsupported; then
|
|
+ func_warning "undefined symbols not allowed in $host shared libraries"
|
|
+ build_libtool_libs=no
|
|
+ build_old_libs=yes
|
|
+ fi
|
|
+ else
|
|
+ # Don't allow undefined symbols.
|
|
+ allow_undefined_flag="$no_undefined_flag"
|
|
+ fi
|
|
+
|
|
+ fi
|
|
+
|
|
+ func_generate_dlsyms "$libname" "$libname" "yes"
|
|
+ libobjs="$libobjs $symfileobj"
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+
|
|
+ if test "$mode" != relink; then
|
|
+ # Remove our outputs, but don't remove object files since they
|
|
+ # may have been created when compiling PIC objects.
|
|
+ removelist=
|
|
+ tempremovelist=`$ECHO "$output_objdir/*"`
|
|
+ for p in $tempremovelist; do
|
|
+ case $p in
|
|
+ *.$objext | *.gcno)
|
|
+ ;;
|
|
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
|
|
+ if test "X$precious_files_regex" != "X"; then
|
|
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
|
|
+ then
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+ removelist="$removelist $p"
|
|
+ ;;
|
|
+ *) ;;
|
|
+ esac
|
|
+ done
|
|
+ test -n "$removelist" && \
|
|
+ func_show_eval "${RM}r \$removelist"
|
|
+ fi
|
|
+
|
|
+ # Now set the variables for building old libraries.
|
|
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
|
|
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
|
|
+
|
|
+ # Transform .lo files to .o files.
|
|
+ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
|
|
+ fi
|
|
+
|
|
+ # Eliminate all temporary directories.
|
|
+ #for path in $notinst_path; do
|
|
+ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
|
|
+ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
|
|
+ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
|
|
+ #done
|
|
+
|
|
+ if test -n "$xrpath"; then
|
|
+ # If the user specified any rpath flags, then add them.
|
|
+ temp_xrpath=
|
|
+ for libdir in $xrpath; do
|
|
+ temp_xrpath="$temp_xrpath -R$libdir"
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
|
|
+ esac
|
|
+ done
|
|
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
|
|
+ dependency_libs="$temp_xrpath $dependency_libs"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
|
|
+ old_dlfiles="$dlfiles"
|
|
+ dlfiles=
|
|
+ for lib in $old_dlfiles; do
|
|
+ case " $dlprefiles $dlfiles " in
|
|
+ *" $lib "*) ;;
|
|
+ *) dlfiles="$dlfiles $lib" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # Make sure dlprefiles contains only unique files
|
|
+ old_dlprefiles="$dlprefiles"
|
|
+ dlprefiles=
|
|
+ for lib in $old_dlprefiles; do
|
|
+ case "$dlprefiles " in
|
|
+ *" $lib "*) ;;
|
|
+ *) dlprefiles="$dlprefiles $lib" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ if test -n "$rpath"; then
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
|
|
+ # these systems don't actually have a c library (as such)!
|
|
+ ;;
|
|
+ *-*-rhapsody* | *-*-darwin1.[012])
|
|
+ # Rhapsody C library is in the System framework
|
|
+ deplibs="$deplibs System.ltframework"
|
|
+ ;;
|
|
+ *-*-netbsd*)
|
|
+ # Don't link with libc until the a.out ld.so is fixed.
|
|
+ ;;
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc due to us having libc/libc_r.
|
|
+ ;;
|
|
+ *-*-sco3.2v5* | *-*-sco5v6*)
|
|
+ # Causes problems with __ctype
|
|
+ ;;
|
|
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
|
|
+ # Compiler inserts libc in the correct place for threads to work
|
|
+ ;;
|
|
+ *)
|
|
+ # Add libc to deplibs on all other systems if necessary.
|
|
+ if test "$build_libtool_need_lc" = "yes"; then
|
|
+ deplibs="$deplibs -lc"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Transform deplibs into only deplibs that can be linked in shared.
|
|
+ name_save=$name
|
|
+ libname_save=$libname
|
|
+ release_save=$release
|
|
+ versuffix_save=$versuffix
|
|
+ major_save=$major
|
|
+ # I'm not sure if I'm treating the release correctly. I think
|
|
+ # release should show up in the -l (ie -lgmp5) so we don't want to
|
|
+ # add it in twice. Is that correct?
|
|
+ release=""
|
|
+ versuffix=""
|
|
+ major=""
|
|
+ newdeplibs=
|
|
+ droppeddeps=no
|
|
+ case $deplibs_check_method in
|
|
+ pass_all)
|
|
+ # Don't check for shared/static. Everything works.
|
|
+ # This might be a little naive. We might want to check
|
|
+ # whether the library exists or not. But this is on
|
|
+ # osf3 & osf4 and I'm not really sure... Just
|
|
+ # implementing what was already the behavior.
|
|
+ newdeplibs=$deplibs
|
|
+ ;;
|
|
+ test_compile)
|
|
+ # This code stresses the "libraries are programs" paradigm to its
|
|
+ # limits. Maybe even breaks it. We compile a program, linking it
|
|
+ # against the deplibs as a proxy for the library. Then we can check
|
|
+ # whether they linked in statically or dynamically with ldd.
|
|
+ $opt_dry_run || $RM conftest.c
|
|
+ cat > conftest.c <<EOF
|
|
+ int main() { return 0; }
|
|
+EOF
|
|
+ $opt_dry_run || $RM conftest
|
|
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
|
|
+ ldd_output=`ldd conftest`
|
|
+ for i in $deplibs; do
|
|
+ case $i in
|
|
+ -l*)
|
|
+ func_stripname -l '' "$i"
|
|
+ name=$func_stripname_result
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $i "*)
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ i=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$i" ; then
|
|
+ libname=`eval "\\$ECHO \"$libname_spec\""`
|
|
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
|
|
+ set dummy $deplib_matches; shift
|
|
+ deplib_match=$1
|
|
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ else
|
|
+ droppeddeps=yes
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
|
|
+ $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 I believe you do not have"
|
|
+ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
|
|
+ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ else
|
|
+ # Error occurred in the first compile. Let's try to salvage
|
|
+ # the situation: Compile a separate program for each library.
|
|
+ for i in $deplibs; do
|
|
+ case $i in
|
|
+ -l*)
|
|
+ func_stripname -l '' "$i"
|
|
+ name=$func_stripname_result
|
|
+ $opt_dry_run || $RM conftest
|
|
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
|
|
+ ldd_output=`ldd conftest`
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $i "*)
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ i=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$i" ; then
|
|
+ libname=`eval "\\$ECHO \"$libname_spec\""`
|
|
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
|
|
+ set dummy $deplib_matches; shift
|
|
+ deplib_match=$1
|
|
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ else
|
|
+ droppeddeps=yes
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
|
|
+ $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 a test_compile did reveal that the linker did not use this one"
|
|
+ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ droppeddeps=yes
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
|
|
+ $ECHO "*** make it link in! You will probably need to install it or some"
|
|
+ $ECHO "*** library that it depends on before this library will be fully"
|
|
+ $ECHO "*** functional. Installing it before continuing would be even better."
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ fi
|
|
+ ;;
|
|
+ file_magic*)
|
|
+ set dummy $deplibs_check_method; shift
|
|
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
|
|
+ for a_deplib in $deplibs; do
|
|
+ case $a_deplib in
|
|
+ -l*)
|
|
+ func_stripname -l '' "$a_deplib"
|
|
+ name=$func_stripname_result
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $a_deplib "*)
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ libname=`eval "\\$ECHO \"$libname_spec\""`
|
|
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
|
|
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
|
|
+ for potent_lib in $potential_libs; do
|
|
+ # Follow soft links.
|
|
+ if ls -lLd "$potent_lib" 2>/dev/null |
|
|
+ $GREP " -> " >/dev/null; then
|
|
+ continue
|
|
+ fi
|
|
+ # The statement above tries to avoid entering an
|
|
+ # endless loop below, in case of cyclic links.
|
|
+ # We might still enter an endless loop, since a link
|
|
+ # loop can be closed while we follow links,
|
|
+ # but so what?
|
|
+ potlib="$potent_lib"
|
|
+ while test -h "$potlib" 2>/dev/null; do
|
|
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
|
|
+ case $potliblink in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
|
|
+ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
|
|
+ esac
|
|
+ done
|
|
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
|
|
+ $SED -e 10q |
|
|
+ $EGREP "$file_magic_regex" > /dev/null; then
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ droppeddeps=yes
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
|
|
+ $ECHO "*** I have the capability to make that library automatically link in when"
|
|
+ $ECHO "*** you link to this library. But I can only do this if you have a"
|
|
+ $ECHO "*** shared version of the library, which you do not appear to have"
|
|
+ $ECHO "*** because I did check the linker path looking for a file starting"
|
|
+ if test -z "$potlib" ; then
|
|
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
|
|
+ else
|
|
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
|
|
+ $ECHO "*** using a file magic. Last file checked: $potlib"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ # Add a -L argument.
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ ;;
|
|
+ esac
|
|
+ done # Gone through all deplibs.
|
|
+ ;;
|
|
+ match_pattern*)
|
|
+ set dummy $deplibs_check_method; shift
|
|
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
|
|
+ for a_deplib in $deplibs; do
|
|
+ case $a_deplib in
|
|
+ -l*)
|
|
+ func_stripname -l '' "$a_deplib"
|
|
+ name=$func_stripname_result
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $a_deplib "*)
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ libname=`eval "\\$ECHO \"$libname_spec\""`
|
|
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
|
|
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
|
|
+ for potent_lib in $potential_libs; do
|
|
+ potlib="$potent_lib" # see symlink-check above in file_magic test
|
|
+ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
|
|
+ $EGREP "$match_pattern_regex" > /dev/null; then
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ droppeddeps=yes
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
|
|
+ $ECHO "*** I have the capability to make that library automatically link in when"
|
|
+ $ECHO "*** you link to this library. But I can only do this if you have a"
|
|
+ $ECHO "*** shared version of the library, which you do not appear to have"
|
|
+ $ECHO "*** because I did check the linker path looking for a file starting"
|
|
+ if test -z "$potlib" ; then
|
|
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
|
|
+ else
|
|
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
|
|
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ # Add a -L argument.
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ ;;
|
|
+ esac
|
|
+ done # Gone through all deplibs.
|
|
+ ;;
|
|
+ none | unknown | *)
|
|
+ newdeplibs=""
|
|
+ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
|
|
+ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ for i in $predeps $postdeps ; do
|
|
+ # can't use Xsed below, because $i might contain '/'
|
|
+ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
|
|
+ done
|
|
+ fi
|
|
+ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
|
|
+ $GREP . >/dev/null; then
|
|
+ $ECHO
|
|
+ if test "X$deplibs_check_method" = "Xnone"; then
|
|
+ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
|
|
+ else
|
|
+ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
|
|
+ fi
|
|
+ $ECHO "*** All declared inter-library dependencies are being dropped."
|
|
+ droppeddeps=yes
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ versuffix=$versuffix_save
|
|
+ major=$major_save
|
|
+ release=$release_save
|
|
+ libname=$libname_save
|
|
+ name=$name_save
|
|
+
|
|
+ case $host in
|
|
+ *-*-rhapsody* | *-*-darwin1.[012])
|
|
+ # On Rhapsody replace the C library with the System framework
|
|
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test "$droppeddeps" = yes; then
|
|
+ if test "$module" = yes; then
|
|
+ $ECHO
|
|
+ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
|
|
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
|
|
+ $ECHO "*** a static module, that should work as long as the dlopening"
|
|
+ $ECHO "*** application is linked with the -dlopen flag."
|
|
+ if test -z "$global_symbol_pipe"; then
|
|
+ $ECHO
|
|
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
|
|
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
|
|
+ $ECHO "*** not find such a program. So, this module is probably useless."
|
|
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
|
|
+ fi
|
|
+ if test "$build_old_libs" = no; then
|
|
+ oldlibs="$output_objdir/$libname.$libext"
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ build_libtool_libs=no
|
|
+ fi
|
|
+ else
|
|
+ $ECHO "*** The inter-library dependencies that have been dropped here will be"
|
|
+ $ECHO "*** automatically added whenever a program is linked with this library"
|
|
+ $ECHO "*** or is declared to -dlopen it."
|
|
+
|
|
+ if test "$allow_undefined" = no; then
|
|
+ $ECHO
|
|
+ $ECHO "*** Since this library must not contain undefined symbols,"
|
|
+ $ECHO "*** because either the platform does not support them or"
|
|
+ $ECHO "*** it was explicitly requested with -no-undefined,"
|
|
+ $ECHO "*** libtool will only create a static version of it."
|
|
+ if test "$build_old_libs" = no; then
|
|
+ oldlibs="$output_objdir/$libname.$libext"
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ build_libtool_libs=no
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ # Done checking deplibs!
|
|
+ deplibs=$newdeplibs
|
|
+ fi
|
|
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
|
|
+ case $host in
|
|
+ *-*-darwin*)
|
|
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # move library search paths that coincide with paths to not yet
|
|
+ # installed libraries to the beginning of the library search list
|
|
+ new_libs=
|
|
+ for path in $notinst_path; do
|
|
+ case " $new_libs " in
|
|
+ *" -L$path/$objdir "*) ;;
|
|
+ *)
|
|
+ case " $deplibs " in
|
|
+ *" -L$path/$objdir "*)
|
|
+ new_libs="$new_libs -L$path/$objdir" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ for deplib in $deplibs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ deplibs="$new_libs"
|
|
+
|
|
+ # All the library-specific variables (install_libdir is set above).
|
|
+ library_names=
|
|
+ old_library=
|
|
+ dlname=
|
|
+
|
|
+ # Test again, we may have decided not to build it any more
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ if test "$hardcode_into_libs" = yes; then
|
|
+ # Hardcode the library paths
|
|
+ hardcode_libdirs=
|
|
+ dep_rpath=
|
|
+ rpath="$finalize_rpath"
|
|
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
|
|
+ for libdir in $rpath; do
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ if test -n "$hardcode_libdir_separator"; then
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ dep_rpath="$dep_rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) perm_rpath="$perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
|
|
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
|
|
+ else
|
|
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ fi
|
|
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
|
|
+ fi
|
|
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
|
|
+ fi
|
|
+
|
|
+ shlibpath="$finalize_shlibpath"
|
|
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
|
|
+ if test -n "$shlibpath"; then
|
|
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
|
|
+ fi
|
|
+
|
|
+ # Get the real and link names of the library.
|
|
+ eval shared_ext=\"$shrext_cmds\"
|
|
+ eval library_names=\"$library_names_spec\"
|
|
+ set dummy $library_names
|
|
+ shift
|
|
+ realname="$1"
|
|
+ shift
|
|
+
|
|
+ if test -n "$soname_spec"; then
|
|
+ eval soname=\"$soname_spec\"
|
|
+ else
|
|
+ soname="$realname"
|
|
+ fi
|
|
+ if test -z "$dlname"; then
|
|
+ dlname=$soname
|
|
+ fi
|
|
+
|
|
+ lib="$output_objdir/$realname"
|
|
+ linknames=
|
|
+ for link
|
|
+ do
|
|
+ linknames="$linknames $link"
|
|
+ done
|
|
+
|
|
+ # Use standard objects if they are pic
|
|
+ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+
|
|
+ delfiles=
|
|
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
|
|
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
|
|
+ export_symbols="$output_objdir/$libname.uexp"
|
|
+ delfiles="$delfiles $export_symbols"
|
|
+ fi
|
|
+
|
|
+ orig_export_symbols=
|
|
+ case $host_os in
|
|
+ cygwin* | mingw* | cegcc*)
|
|
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
|
|
+ # exporting using user supplied symfile
|
|
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
|
|
+ # and it's NOT already a .def file. Must figure out
|
|
+ # which of the given symbols are data symbols and tag
|
|
+ # them as such. So, trigger use of export_symbols_cmds.
|
|
+ # export_symbols gets reassigned inside the "prepare
|
|
+ # the list of exported symbols" if statement, so the
|
|
+ # include_expsyms logic still works.
|
|
+ orig_export_symbols="$export_symbols"
|
|
+ export_symbols=
|
|
+ always_export_symbols=yes
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Prepare the list of exported symbols
|
|
+ if test -z "$export_symbols"; then
|
|
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
|
|
+ func_verbose "generating symbol list for \`$libname.la'"
|
|
+ export_symbols="$output_objdir/$libname.exp"
|
|
+ $opt_dry_run || $RM $export_symbols
|
|
+ cmds=$export_symbols_cmds
|
|
+ save_ifs="$IFS"; IFS='~'
|
|
+ for cmd in $cmds; do
|
|
+ IFS="$save_ifs"
|
|
+ eval cmd=\"$cmd\"
|
|
+ func_len " $cmd"
|
|
+ len=$func_len_result
|
|
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
|
|
+ func_show_eval "$cmd" 'exit $?'
|
|
+ skipped_export=false
|
|
+ else
|
|
+ # The command line is too long to execute in one step.
|
|
+ func_verbose "using reloadable object file for export list..."
|
|
+ skipped_export=:
|
|
+ # Break out early, otherwise skipped_export may be
|
|
+ # set to false by a later but shorter cmd.
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
|
|
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
|
|
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
|
|
+ tmp_export_symbols="$export_symbols"
|
|
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
|
|
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
|
|
+ fi
|
|
+
|
|
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
|
|
+ # The given exports_symbols file has to be filtered, so filter it.
|
|
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
|
|
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
|
|
+ # 's' commands which not all seds can handle. GNU sed should be fine
|
|
+ # though. Also, the filter scales superlinearly with the number of
|
|
+ # global variables. join(1) would be nice here, but unfortunately
|
|
+ # isn't a blessed tool.
|
|
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
|
|
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
|
|
+ export_symbols=$output_objdir/$libname.def
|
|
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
|
|
+ fi
|
|
+
|
|
+ tmp_deplibs=
|
|
+ for test_deplib in $deplibs; do
|
|
+ case " $convenience " in
|
|
+ *" $test_deplib "*) ;;
|
|
+ *)
|
|
+ tmp_deplibs="$tmp_deplibs $test_deplib"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ deplibs="$tmp_deplibs"
|
|
+
|
|
+ if test -n "$convenience"; then
|
|
+ if test -n "$whole_archive_flag_spec" &&
|
|
+ test "$compiler_needs_object" = yes &&
|
|
+ test -z "$libobjs"; then
|
|
+ # extract the archives, so we have objects to list.
|
|
+ # TODO: could optimize this to just extract one archive.
|
|
+ whole_archive_flag_spec=
|
|
+ fi
|
|
+ if test -n "$whole_archive_flag_spec"; then
|
|
+ save_libobjs=$libobjs
|
|
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+ else
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $convenience
|
|
+ libobjs="$libobjs $func_extract_archives_result"
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
|
|
+ eval flag=\"$thread_safe_flag_spec\"
|
|
+ linker_flags="$linker_flags $flag"
|
|
+ fi
|
|
+
|
|
+ # Make a backup of the uninstalled library when relinking
|
|
+ if test "$mode" = relink; then
|
|
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
|
|
+ fi
|
|
+
|
|
+ # Do each of the archive commands.
|
|
+ if test "$module" = yes && test -n "$module_cmds" ; then
|
|
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
|
|
+ eval test_cmds=\"$module_expsym_cmds\"
|
|
+ cmds=$module_expsym_cmds
|
|
+ else
|
|
+ eval test_cmds=\"$module_cmds\"
|
|
+ cmds=$module_cmds
|
|
+ fi
|
|
+ else
|
|
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
|
|
+ eval test_cmds=\"$archive_expsym_cmds\"
|
|
+ cmds=$archive_expsym_cmds
|
|
+ else
|
|
+ eval test_cmds=\"$archive_cmds\"
|
|
+ cmds=$archive_cmds
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "X$skipped_export" != "X:" &&
|
|
+ func_len " $test_cmds" &&
|
|
+ len=$func_len_result &&
|
|
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
|
|
+ :
|
|
+ else
|
|
+ # The command line is too long to link in one step, link piecewise
|
|
+ # or, if using GNU ld and skipped_export is not :, use a linker
|
|
+ # script.
|
|
+
|
|
+ # Save the value of $output and $libobjs because we want to
|
|
+ # use them later. If we have whole_archive_flag_spec, we
|
|
+ # want to use save_libobjs as it was before
|
|
+ # whole_archive_flag_spec was expanded, because we can't
|
|
+ # assume the linker understands whole_archive_flag_spec.
|
|
+ # This may have to be revisited, in case too many
|
|
+ # convenience libraries get linked in and end up exceeding
|
|
+ # the spec.
|
|
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
|
|
+ save_libobjs=$libobjs
|
|
+ fi
|
|
+ save_output=$output
|
|
+ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
|
|
+
|
|
+ # Clear the reloadable object creation command queue and
|
|
+ # initialize k to one.
|
|
+ test_cmds=
|
|
+ concat_cmds=
|
|
+ objlist=
|
|
+ last_robj=
|
|
+ k=1
|
|
+
|
|
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
|
|
+ output=${output_objdir}/${output_la}.lnkscript
|
|
+ func_verbose "creating GNU ld script: $output"
|
|
+ $ECHO 'INPUT (' > $output
|
|
+ for obj in $save_libobjs
|
|
+ do
|
|
+ $ECHO "$obj" >> $output
|
|
+ done
|
|
+ $ECHO ')' >> $output
|
|
+ delfiles="$delfiles $output"
|
|
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
|
|
+ output=${output_objdir}/${output_la}.lnk
|
|
+ func_verbose "creating linker input file list: $output"
|
|
+ : > $output
|
|
+ set x $save_libobjs
|
|
+ shift
|
|
+ firstobj=
|
|
+ if test "$compiler_needs_object" = yes; then
|
|
+ firstobj="$1 "
|
|
+ shift
|
|
+ fi
|
|
+ for obj
|
|
+ do
|
|
+ $ECHO "$obj" >> $output
|
|
+ done
|
|
+ delfiles="$delfiles $output"
|
|
+ output=$firstobj\"$file_list_spec$output\"
|
|
+ else
|
|
+ if test -n "$save_libobjs"; then
|
|
+ func_verbose "creating reloadable object files..."
|
|
+ output=$output_objdir/$output_la-${k}.$objext
|
|
+ eval test_cmds=\"$reload_cmds\"
|
|
+ func_len " $test_cmds"
|
|
+ len0=$func_len_result
|
|
+ len=$len0
|
|
+
|
|
+ # Loop over the list of objects to be linked.
|
|
+ for obj in $save_libobjs
|
|
+ do
|
|
+ func_len " $obj"
|
|
+ func_arith $len + $func_len_result
|
|
+ len=$func_arith_result
|
|
+ if test "X$objlist" = X ||
|
|
+ test "$len" -lt "$max_cmd_len"; then
|
|
+ func_append objlist " $obj"
|
|
+ else
|
|
+ # The command $test_cmds is almost too long, add a
|
|
+ # command to the queue.
|
|
+ if test "$k" -eq 1 ; then
|
|
+ # The first file doesn't have a previous command to add.
|
|
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
|
|
+ else
|
|
+ # All subsequent reloadable object files will link in
|
|
+ # the last one created.
|
|
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
|
|
+ fi
|
|
+ last_robj=$output_objdir/$output_la-${k}.$objext
|
|
+ func_arith $k + 1
|
|
+ k=$func_arith_result
|
|
+ output=$output_objdir/$output_la-${k}.$objext
|
|
+ objlist=$obj
|
|
+ func_len " $last_robj"
|
|
+ func_arith $len0 + $func_len_result
|
|
+ len=$func_arith_result
|
|
+ fi
|
|
+ done
|
|
+ # Handle the remaining objects by creating one last
|
|
+ # reloadable object file. All subsequent reloadable object
|
|
+ # files will link in the last one created.
|
|
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
|
|
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
|
|
+ if test -n "$last_robj"; then
|
|
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
|
|
+ fi
|
|
+ delfiles="$delfiles $output"
|
|
+
|
|
+ else
|
|
+ output=
|
|
+ fi
|
|
+
|
|
+ if ${skipped_export-false}; then
|
|
+ func_verbose "generating symbol list for \`$libname.la'"
|
|
+ export_symbols="$output_objdir/$libname.exp"
|
|
+ $opt_dry_run || $RM $export_symbols
|
|
+ libobjs=$output
|
|
+ # Append the command to create the export file.
|
|
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
|
|
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
|
|
+ if test -n "$last_robj"; then
|
|
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ test -n "$save_libobjs" &&
|
|
+ func_verbose "creating a temporary reloadable object file: $output"
|
|
+
|
|
+ # Loop through the commands generated above and execute them.
|
|
+ save_ifs="$IFS"; IFS='~'
|
|
+ for cmd in $concat_cmds; do
|
|
+ IFS="$save_ifs"
|
|
+ $opt_silent || {
|
|
+ func_quote_for_expand "$cmd"
|
|
+ eval "func_echo $func_quote_for_expand_result"
|
|
+ }
|
|
+ $opt_dry_run || eval "$cmd" || {
|
|
+ lt_exit=$?
|
|
+
|
|
+ # Restore the uninstalled library and exit
|
|
+ if test "$mode" = relink; then
|
|
+ ( cd "$output_objdir" && \
|
|
+ $RM "${realname}T" && \
|
|
+ $MV "${realname}U" "$realname" )
|
|
+ fi
|
|
+
|
|
+ exit $lt_exit
|
|
+ }
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+
|
|
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
|
|
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
|
|
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if ${skipped_export-false}; then
|
|
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
|
|
+ tmp_export_symbols="$export_symbols"
|
|
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
|
|
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
|
|
+ fi
|
|
+
|
|
+ if test -n "$orig_export_symbols"; then
|
|
+ # The given exports_symbols file has to be filtered, so filter it.
|
|
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
|
|
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
|
|
+ # 's' commands which not all seds can handle. GNU sed should be fine
|
|
+ # though. Also, the filter scales superlinearly with the number of
|
|
+ # global variables. join(1) would be nice here, but unfortunately
|
|
+ # isn't a blessed tool.
|
|
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
|
|
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
|
|
+ export_symbols=$output_objdir/$libname.def
|
|
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ libobjs=$output
|
|
+ # Restore the value of output.
|
|
+ output=$save_output
|
|
+
|
|
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
|
|
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+ fi
|
|
+ # Expand the library linking commands again to reset the
|
|
+ # value of $libobjs for piecewise linking.
|
|
+
|
|
+ # Do each of the archive commands.
|
|
+ if test "$module" = yes && test -n "$module_cmds" ; then
|
|
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
|
|
+ cmds=$module_expsym_cmds
|
|
+ else
|
|
+ cmds=$module_cmds
|
|
+ fi
|
|
+ else
|
|
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
|
|
+ cmds=$archive_expsym_cmds
|
|
+ else
|
|
+ cmds=$archive_cmds
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test -n "$delfiles"; then
|
|
+ # Append the command to remove temporary files to $cmds.
|
|
+ eval cmds=\"\$cmds~\$RM $delfiles\"
|
|
+ fi
|
|
+
|
|
+ # Add any objects from preloaded convenience libraries
|
|
+ if test -n "$dlprefiles"; then
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $dlprefiles
|
|
+ libobjs="$libobjs $func_extract_archives_result"
|
|
+ test "X$libobjs" = "X " && libobjs=
|
|
+ fi
|
|
+
|
|
+ save_ifs="$IFS"; IFS='~'
|
|
+ for cmd in $cmds; do
|
|
+ IFS="$save_ifs"
|
|
+ eval cmd=\"$cmd\"
|
|
+ $opt_silent || {
|
|
+ func_quote_for_expand "$cmd"
|
|
+ eval "func_echo $func_quote_for_expand_result"
|
|
+ }
|
|
+ $opt_dry_run || eval "$cmd" || {
|
|
+ lt_exit=$?
|
|
+
|
|
+ # Restore the uninstalled library and exit
|
|
+ if test "$mode" = relink; then
|
|
+ ( cd "$output_objdir" && \
|
|
+ $RM "${realname}T" && \
|
|
+ $MV "${realname}U" "$realname" )
|
|
+ fi
|
|
+
|
|
+ exit $lt_exit
|
|
+ }
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+
|
|
+ # Restore the uninstalled library and exit
|
|
+ if test "$mode" = relink; then
|
|
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
|
|
+
|
|
+ if test -n "$convenience"; then
|
|
+ if test -z "$whole_archive_flag_spec"; then
|
|
+ func_show_eval '${RM}r "$gentop"'
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ # Create links to the real library.
|
|
+ for linkname in $linknames; do
|
|
+ if test "$realname" != "$linkname"; then
|
|
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ # If -module or -export-dynamic was specified, set the dlname.
|
|
+ if test "$module" = yes || test "$export_dynamic" = yes; then
|
|
+ # On all known operating systems, these are identical.
|
|
+ dlname="$soname"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ obj)
|
|
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
|
|
+ func_warning "\`-dlopen' is ignored for objects"
|
|
+ fi
|
|
+
|
|
+ case " $deplibs" in
|
|
+ *\ -l* | *\ -L*)
|
|
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
|
|
+ esac
|
|
+
|
|
+ test -n "$rpath" && \
|
|
+ func_warning "\`-rpath' is ignored for objects"
|
|
+
|
|
+ test -n "$xrpath" && \
|
|
+ func_warning "\`-R' is ignored for objects"
|
|
+
|
|
+ test -n "$vinfo" && \
|
|
+ func_warning "\`-version-info' is ignored for objects"
|
|
+
|
|
+ test -n "$release" && \
|
|
+ func_warning "\`-release' is ignored for objects"
|
|
+
|
|
+ case $output in
|
|
+ *.lo)
|
|
+ test -n "$objs$old_deplibs" && \
|
|
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
|
|
+
|
|
+ libobj=$output
|
|
+ func_lo2o "$libobj"
|
|
+ obj=$func_lo2o_result
|
|
+ ;;
|
|
+ *)
|
|
+ libobj=
|
|
+ obj="$output"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Delete the old objects.
|
|
+ $opt_dry_run || $RM $obj $libobj
|
|
+
|
|
+ # Objects from convenience libraries. This assumes
|
|
+ # single-version convenience libraries. Whenever we create
|
|
+ # different ones for PIC/non-PIC, this we'll have to duplicate
|
|
+ # the extraction.
|
|
+ reload_conv_objs=
|
|
+ gentop=
|
|
+ # reload_cmds runs $LD directly, so let us get rid of
|
|
+ # -Wl from whole_archive_flag_spec and hope we can get by with
|
|
+ # turning comma into space..
|
|
+ wl=
|
|
+
|
|
+ if test -n "$convenience"; then
|
|
+ if test -n "$whole_archive_flag_spec"; then
|
|
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
|
|
+ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
|
|
+ else
|
|
+ gentop="$output_objdir/${obj}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $convenience
|
|
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Create the old-style object.
|
|
+ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
|
|
+
|
|
+ output="$obj"
|
|
+ func_execute_cmds "$reload_cmds" 'exit $?'
|
|
+
|
|
+ # Exit if we aren't doing a library object file.
|
|
+ if test -z "$libobj"; then
|
|
+ if test -n "$gentop"; then
|
|
+ func_show_eval '${RM}r "$gentop"'
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test "$build_libtool_libs" != yes; then
|
|
+ if test -n "$gentop"; then
|
|
+ func_show_eval '${RM}r "$gentop"'
|
|
+ fi
|
|
+
|
|
+ # Create an invalid libtool object if no PIC, so that we don't
|
|
+ # accidentally link it into a program.
|
|
+ # $show "echo timestamp > $libobj"
|
|
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
|
|
+ # Only do commands if we really have different PIC objects.
|
|
+ reload_objs="$libobjs $reload_conv_objs"
|
|
+ output="$libobj"
|
|
+ func_execute_cmds "$reload_cmds" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ if test -n "$gentop"; then
|
|
+ func_show_eval '${RM}r "$gentop"'
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ ;;
|
|
+
|
|
+ prog)
|
|
+ case $host in
|
|
+ *cygwin*) func_stripname '' '.exe' "$output"
|
|
+ output=$func_stripname_result.exe;;
|
|
+ esac
|
|
+ test -n "$vinfo" && \
|
|
+ func_warning "\`-version-info' is ignored for programs"
|
|
+
|
|
+ test -n "$release" && \
|
|
+ func_warning "\`-release' is ignored for programs"
|
|
+
|
|
+ test "$preload" = yes \
|
|
+ && test "$dlopen_support" = unknown \
|
|
+ && test "$dlopen_self" = unknown \
|
|
+ && test "$dlopen_self_static" = unknown && \
|
|
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
|
|
+
|
|
+ case $host in
|
|
+ *-*-rhapsody* | *-*-darwin1.[012])
|
|
+ # On Rhapsody replace the C library is the System framework
|
|
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
|
|
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case $host in
|
|
+ *-*-darwin*)
|
|
+ # Don't allow lazy linking, it breaks C++ global constructors
|
|
+ # But is supposedly fixed on 10.4 or later (yay!).
|
|
+ if test "$tagname" = CXX ; then
|
|
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
|
|
+ 10.[0123])
|
|
+ compile_command="$compile_command ${wl}-bind_at_load"
|
|
+ finalize_command="$finalize_command ${wl}-bind_at_load"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
|
|
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+
|
|
+ # move library search paths that coincide with paths to not yet
|
|
+ # installed libraries to the beginning of the library search list
|
|
+ new_libs=
|
|
+ for path in $notinst_path; do
|
|
+ case " $new_libs " in
|
|
+ *" -L$path/$objdir "*) ;;
|
|
+ *)
|
|
+ case " $compile_deplibs " in
|
|
+ *" -L$path/$objdir "*)
|
|
+ new_libs="$new_libs -L$path/$objdir" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ for deplib in $compile_deplibs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ compile_deplibs="$new_libs"
|
|
+
|
|
+
|
|
+ compile_command="$compile_command $compile_deplibs"
|
|
+ finalize_command="$finalize_command $finalize_deplibs"
|
|
+
|
|
+ if test -n "$rpath$xrpath"; then
|
|
+ # If the user specified any rpath flags, then add them.
|
|
+ for libdir in $rpath $xrpath; do
|
|
+ # This is the magic to use -rpath.
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
|
|
+ esac
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ # Now hardcode the library paths
|
|
+ rpath=
|
|
+ hardcode_libdirs=
|
|
+ for libdir in $compile_rpath $finalize_rpath; do
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ if test -n "$hardcode_libdir_separator"; then
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ rpath="$rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) perm_rpath="$perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
|
|
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
|
|
+ case :$dllsearchpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ ::) dllsearchpath=$libdir;;
|
|
+ *) dllsearchpath="$dllsearchpath:$libdir";;
|
|
+ esac
|
|
+ case :$dllsearchpath: in
|
|
+ *":$testbindir:"*) ;;
|
|
+ ::) dllsearchpath=$testbindir;;
|
|
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ eval rpath=\" $hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ compile_rpath="$rpath"
|
|
+
|
|
+ rpath=
|
|
+ hardcode_libdirs=
|
|
+ for libdir in $finalize_rpath; do
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ if test -n "$hardcode_libdir_separator"; then
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ rpath="$rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$finalize_perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ eval rpath=\" $hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ finalize_rpath="$rpath"
|
|
+
|
|
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
|
|
+ # Transform all the library objects into standard objects.
|
|
+ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
|
|
+ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
|
|
+ fi
|
|
+
|
|
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
|
|
+
|
|
+ # template prelinking step
|
|
+ if test -n "$prelink_cmds"; then
|
|
+ func_execute_cmds "$prelink_cmds" 'exit $?'
|
|
+ fi
|
|
+
|
|
+ wrappers_required=yes
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* )
|
|
+ if test "$build_libtool_libs" != yes; then
|
|
+ wrappers_required=no
|
|
+ fi
|
|
+ ;;
|
|
+ *cegcc)
|
|
+ # Disable wrappers for cegcc, we are cross compiling anyway.
|
|
+ wrappers_required=no
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
|
|
+ wrappers_required=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$wrappers_required" = no; then
|
|
+ # Replace the output file specification.
|
|
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
|
|
+ link_command="$compile_command$compile_rpath"
|
|
+
|
|
+ # We have no uninstalled library dependencies, so finalize right now.
|
|
+ exit_status=0
|
|
+ func_show_eval "$link_command" 'exit_status=$?'
|
|
+
|
|
+ # Delete the generated files.
|
|
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
|
|
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
|
|
+ fi
|
|
+
|
|
+ exit $exit_status
|
|
+ fi
|
|
+
|
|
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
|
|
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
|
|
+ fi
|
|
+ if test -n "$finalize_shlibpath"; then
|
|
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
|
|
+ fi
|
|
+
|
|
+ compile_var=
|
|
+ finalize_var=
|
|
+ if test -n "$runpath_var"; then
|
|
+ if test -n "$perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
|
|
+ fi
|
|
+ if test -n "$finalize_perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $finalize_perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$no_install" = yes; then
|
|
+ # We don't need to create a wrapper script.
|
|
+ link_command="$compile_var$compile_command$compile_rpath"
|
|
+ # Replace the output file specification.
|
|
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
|
|
+ # Delete the old output file.
|
|
+ $opt_dry_run || $RM $output
|
|
+ # Link the executable and exit
|
|
+ func_show_eval "$link_command" 'exit $?'
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test "$hardcode_action" = relink; then
|
|
+ # Fast installation is not supported
|
|
+ link_command="$compile_var$compile_command$compile_rpath"
|
|
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
|
|
+
|
|
+ func_warning "this platform does not like uninstalled shared libraries"
|
|
+ func_warning "\`$output' will be relinked during installation"
|
|
+ else
|
|
+ if test "$fast_install" != no; then
|
|
+ link_command="$finalize_var$compile_command$finalize_rpath"
|
|
+ if test "$fast_install" = yes; then
|
|
+ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
|
|
+ else
|
|
+ # fast_install is set to needless
|
|
+ relink_command=
|
|
+ fi
|
|
+ else
|
|
+ link_command="$compile_var$compile_command$compile_rpath"
|
|
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Replace the output file specification.
|
|
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
|
|
+
|
|
+ # Delete the old output files.
|
|
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
|
|
+
|
|
+ func_show_eval "$link_command" 'exit $?'
|
|
+
|
|
+ # Now create the wrapper script.
|
|
+ func_verbose "creating $output"
|
|
+
|
|
+ # Quote the relink command for shipping.
|
|
+ if test -n "$relink_command"; then
|
|
+ # Preserve any variables that may affect compiler behavior
|
|
+ for var in $variables_saved_for_relink; do
|
|
+ if eval test -z \"\${$var+set}\"; then
|
|
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
|
|
+ elif eval var_value=\$$var; test -z "$var_value"; then
|
|
+ relink_command="$var=; export $var; $relink_command"
|
|
+ else
|
|
+ func_quote_for_eval "$var_value"
|
|
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
|
|
+ fi
|
|
+ done
|
|
+ relink_command="(cd `pwd`; $relink_command)"
|
|
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
|
|
+ fi
|
|
+
|
|
+ # Quote $ECHO for shipping.
|
|
+ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
|
|
+ case $progpath in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
|
|
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
|
|
+ esac
|
|
+ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
|
|
+ else
|
|
+ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
|
|
+ fi
|
|
+
|
|
+ # Only actually do things if not in dry run mode.
|
|
+ $opt_dry_run || {
|
|
+ # win32 will think the script is a binary if it has
|
|
+ # a .exe suffix, so we strip it off here.
|
|
+ case $output in
|
|
+ *.exe) func_stripname '' '.exe' "$output"
|
|
+ output=$func_stripname_result ;;
|
|
+ esac
|
|
+ # test for cygwin because mv fails w/o .exe extensions
|
|
+ case $host in
|
|
+ *cygwin*)
|
|
+ exeext=.exe
|
|
+ func_stripname '' '.exe' "$outputname"
|
|
+ outputname=$func_stripname_result ;;
|
|
+ *) exeext= ;;
|
|
+ esac
|
|
+ case $host in
|
|
+ *cygwin* | *mingw* )
|
|
+ func_dirname_and_basename "$output" "" "."
|
|
+ output_name=$func_basename_result
|
|
+ output_path=$func_dirname_result
|
|
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
|
|
+ cwrapper="$output_path/$output_name.exe"
|
|
+ $RM $cwrappersource $cwrapper
|
|
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
|
|
+
|
|
+ func_emit_cwrapperexe_src > $cwrappersource
|
|
+
|
|
+ # The wrapper executable is built using the $host compiler,
|
|
+ # because it contains $host paths and files. If cross-
|
|
+ # compiling, it, like the target executable, must be
|
|
+ # executed on the $host or under an emulation environment.
|
|
+ $opt_dry_run || {
|
|
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
|
|
+ $STRIP $cwrapper
|
|
+ }
|
|
+
|
|
+ # Now, create the wrapper script for func_source use:
|
|
+ func_ltwrapper_scriptname $cwrapper
|
|
+ $RM $func_ltwrapper_scriptname_result
|
|
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
|
|
+ $opt_dry_run || {
|
|
+ # note: this script will not be executed, so do not chmod.
|
|
+ if test "x$build" = "x$host" ; then
|
|
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
|
|
+ else
|
|
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
|
|
+ fi
|
|
+ }
|
|
+ ;;
|
|
+ * )
|
|
+ $RM $output
|
|
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
|
|
+
|
|
+ func_emit_wrapper no > $output
|
|
+ chmod +x $output
|
|
+ ;;
|
|
+ esac
|
|
+ }
|
|
+ exit $EXIT_SUCCESS
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # See if we need to build an old-fashioned archive.
|
|
+ for oldlib in $oldlibs; do
|
|
+
|
|
+ if test "$build_libtool_libs" = convenience; then
|
|
+ oldobjs="$libobjs_save $symfileobj"
|
|
+ addlibs="$convenience"
|
|
+ build_libtool_libs=no
|
|
+ else
|
|
+ if test "$build_libtool_libs" = module; then
|
|
+ oldobjs="$libobjs_save"
|
|
+ build_libtool_libs=no
|
|
+ else
|
|
+ oldobjs="$old_deplibs $non_pic_objects"
|
|
+ if test "$preload" = yes && test -f "$symfileobj"; then
|
|
+ oldobjs="$oldobjs $symfileobj"
|
|
+ fi
|
|
+ fi
|
|
+ addlibs="$old_convenience"
|
|
+ fi
|
|
+
|
|
+ if test -n "$addlibs"; then
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $addlibs
|
|
+ oldobjs="$oldobjs $func_extract_archives_result"
|
|
+ fi
|
|
+
|
|
+ # Do each command in the archive commands.
|
|
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
|
|
+ cmds=$old_archive_from_new_cmds
|
|
+ else
|
|
+
|
|
+ # Add any objects from preloaded convenience libraries
|
|
+ if test -n "$dlprefiles"; then
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $dlprefiles
|
|
+ oldobjs="$oldobjs $func_extract_archives_result"
|
|
+ fi
|
|
+
|
|
+ # POSIX demands no paths to be encoded in archives. We have
|
|
+ # to avoid creating archives with duplicate basenames if we
|
|
+ # might have to extract them afterwards, e.g., when creating a
|
|
+ # static archive out of a convenience library, or when linking
|
|
+ # the entirety of a libtool archive into another (currently
|
|
+ # not supported by libtool).
|
|
+ if (for obj in $oldobjs
|
|
+ do
|
|
+ func_basename "$obj"
|
|
+ $ECHO "$func_basename_result"
|
|
+ done | sort | sort -uc >/dev/null 2>&1); then
|
|
+ :
|
|
+ else
|
|
+ $ECHO "copying selected object files to avoid basename conflicts..."
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+ func_mkdir_p "$gentop"
|
|
+ save_oldobjs=$oldobjs
|
|
+ oldobjs=
|
|
+ counter=1
|
|
+ for obj in $save_oldobjs
|
|
+ do
|
|
+ func_basename "$obj"
|
|
+ objbase="$func_basename_result"
|
|
+ case " $oldobjs " in
|
|
+ " ") oldobjs=$obj ;;
|
|
+ *[\ /]"$objbase "*)
|
|
+ while :; do
|
|
+ # Make sure we don't pick an alternate name that also
|
|
+ # overlaps.
|
|
+ newobj=lt$counter-$objbase
|
|
+ func_arith $counter + 1
|
|
+ counter=$func_arith_result
|
|
+ case " $oldobjs " in
|
|
+ *[\ /]"$newobj "*) ;;
|
|
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
|
|
+ esac
|
|
+ done
|
|
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
|
|
+ oldobjs="$oldobjs $gentop/$newobj"
|
|
+ ;;
|
|
+ *) oldobjs="$oldobjs $obj" ;;
|
|
+ esac
|
|
+ done
|
|
+ fi
|
|
+ eval cmds=\"$old_archive_cmds\"
|
|
+
|
|
+ func_len " $cmds"
|
|
+ len=$func_len_result
|
|
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
|
|
+ cmds=$old_archive_cmds
|
|
+ else
|
|
+ # the command line is too long to link in one step, link in parts
|
|
+ func_verbose "using piecewise archive linking..."
|
|
+ save_RANLIB=$RANLIB
|
|
+ RANLIB=:
|
|
+ objlist=
|
|
+ concat_cmds=
|
|
+ save_oldobjs=$oldobjs
|
|
+ oldobjs=
|
|
+ # Is there a better way of finding the last object in the list?
|
|
+ for obj in $save_oldobjs
|
|
+ do
|
|
+ last_oldobj=$obj
|
|
+ done
|
|
+ eval test_cmds=\"$old_archive_cmds\"
|
|
+ func_len " $test_cmds"
|
|
+ len0=$func_len_result
|
|
+ len=$len0
|
|
+ for obj in $save_oldobjs
|
|
+ do
|
|
+ func_len " $obj"
|
|
+ func_arith $len + $func_len_result
|
|
+ len=$func_arith_result
|
|
+ func_append objlist " $obj"
|
|
+ if test "$len" -lt "$max_cmd_len"; then
|
|
+ :
|
|
+ else
|
|
+ # the above command should be used before it gets too long
|
|
+ oldobjs=$objlist
|
|
+ if test "$obj" = "$last_oldobj" ; then
|
|
+ RANLIB=$save_RANLIB
|
|
+ fi
|
|
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
|
|
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
|
|
+ objlist=
|
|
+ len=$len0
|
|
+ fi
|
|
+ done
|
|
+ RANLIB=$save_RANLIB
|
|
+ oldobjs=$objlist
|
|
+ if test "X$oldobjs" = "X" ; then
|
|
+ eval cmds=\"\$concat_cmds\"
|
|
+ else
|
|
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ func_execute_cmds "$cmds" 'exit $?'
|
|
+ done
|
|
+
|
|
+ test -n "$generated" && \
|
|
+ func_show_eval "${RM}r$generated"
|
|
+
|
|
+ # Now create the libtool archive.
|
|
+ case $output in
|
|
+ *.la)
|
|
+ old_library=
|
|
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
|
|
+ func_verbose "creating $output"
|
|
+
|
|
+ # Preserve any variables that may affect compiler behavior
|
|
+ for var in $variables_saved_for_relink; do
|
|
+ if eval test -z \"\${$var+set}\"; then
|
|
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
|
|
+ elif eval var_value=\$$var; test -z "$var_value"; then
|
|
+ relink_command="$var=; export $var; $relink_command"
|
|
+ else
|
|
+ func_quote_for_eval "$var_value"
|
|
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
|
|
+ fi
|
|
+ done
|
|
+ # Quote the link command for shipping.
|
|
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
|
|
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
|
|
+ if test "$hardcode_automatic" = yes ; then
|
|
+ relink_command=
|
|
+ fi
|
|
+
|
|
+ # Only create the output if not a dry run.
|
|
+ $opt_dry_run || {
|
|
+ for installed in no yes; do
|
|
+ if test "$installed" = yes; then
|
|
+ if test -z "$install_libdir"; then
|
|
+ break
|
|
+ fi
|
|
+ output="$output_objdir/$outputname"i
|
|
+ # Replace all uninstalled libtool libraries with the installed ones
|
|
+ newdependency_libs=
|
|
+ for deplib in $dependency_libs; do
|
|
+ case $deplib in
|
|
+ *.la)
|
|
+ func_basename "$deplib"
|
|
+ name="$func_basename_result"
|
|
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
|
|
+ test -z "$libdir" && \
|
|
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
|
|
+ newdependency_libs="$newdependency_libs $libdir/$name"
|
|
+ ;;
|
|
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ dependency_libs="$newdependency_libs"
|
|
+ newdlfiles=
|
|
+
|
|
+ for lib in $dlfiles; do
|
|
+ case $lib in
|
|
+ *.la)
|
|
+ func_basename "$lib"
|
|
+ name="$func_basename_result"
|
|
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
|
|
+ test -z "$libdir" && \
|
|
+ func_fatal_error "\`$lib' is not a valid libtool archive"
|
|
+ newdlfiles="$newdlfiles $libdir/$name"
|
|
+ ;;
|
|
+ *) newdlfiles="$newdlfiles $lib" ;;
|
|
+ esac
|
|
+ done
|
|
+ dlfiles="$newdlfiles"
|
|
+ newdlprefiles=
|
|
+ for lib in $dlprefiles; do
|
|
+ case $lib in
|
|
+ *.la)
|
|
+ # Only pass preopened files to the pseudo-archive (for
|
|
+ # eventual linking with the app. that links it) if we
|
|
+ # didn't already link the preopened objects directly into
|
|
+ # the library:
|
|
+ func_basename "$lib"
|
|
+ name="$func_basename_result"
|
|
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
|
|
+ test -z "$libdir" && \
|
|
+ func_fatal_error "\`$lib' is not a valid libtool archive"
|
|
+ newdlprefiles="$newdlprefiles $libdir/$name"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ else
|
|
+ newdlfiles=
|
|
+ for lib in $dlfiles; do
|
|
+ case $lib in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
|
|
+ *) abs=`pwd`"/$lib" ;;
|
|
+ esac
|
|
+ newdlfiles="$newdlfiles $abs"
|
|
+ done
|
|
+ dlfiles="$newdlfiles"
|
|
+ newdlprefiles=
|
|
+ for lib in $dlprefiles; do
|
|
+ case $lib in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
|
|
+ *) abs=`pwd`"/$lib" ;;
|
|
+ esac
|
|
+ newdlprefiles="$newdlprefiles $abs"
|
|
+ done
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ fi
|
|
+ $RM $output
|
|
+ # place dlname in correct position for cygwin
|
|
+ tdlname=$dlname
|
|
+ case $host,$output,$installed,$module,$dlname in
|
|
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
|
|
+ esac
|
|
+ $ECHO > $output "\
|
|
+# $outputname - a libtool library file
|
|
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
|
|
+#
|
|
+# Please DO NOT delete this file!
|
|
+# It is necessary for linking the library.
|
|
+
|
|
+# The name that we can dlopen(3).
|
|
+dlname='$tdlname'
|
|
+
|
|
+# Names of this library.
|
|
+library_names='$library_names'
|
|
+
|
|
+# The name of the static archive.
|
|
+old_library='$old_library'
|
|
+
|
|
+# Linker flags that can not go in dependency_libs.
|
|
+inherited_linker_flags='$new_inherited_linker_flags'
|
|
+
|
|
+# Libraries that this one depends upon.
|
|
+dependency_libs='$dependency_libs'
|
|
+
|
|
+# Names of additional weak libraries provided by this library
|
|
+weak_library_names='$weak_libs'
|
|
+
|
|
+# Version information for $libname.
|
|
+current=$current
|
|
+age=$age
|
|
+revision=$revision
|
|
+
|
|
+# Is this an already installed library?
|
|
+installed=$installed
|
|
+
|
|
+# Should we warn about portability when linking against -modules?
|
|
+shouldnotlink=$module
|
|
+
|
|
+# Files to dlopen/dlpreopen
|
|
+dlopen='$dlfiles'
|
|
+dlpreopen='$dlprefiles'
|
|
+
|
|
+# Directory that this library needs to be installed in:
|
|
+libdir='$install_libdir'"
|
|
+ if test "$installed" = no && test "$need_relink" = yes; then
|
|
+ $ECHO >> $output "\
|
|
+relink_command=\"$relink_command\""
|
|
+ fi
|
|
+ done
|
|
+ }
|
|
+
|
|
+ # Do a symbolic link so that the libtool archive can be found in
|
|
+ # LD_LIBRARY_PATH before the program is installed.
|
|
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
|
|
+ ;;
|
|
+ esac
|
|
+ exit $EXIT_SUCCESS
|
|
+}
|
|
+
|
|
+{ test "$mode" = link || test "$mode" = relink; } &&
|
|
+ func_mode_link ${1+"$@"}
|
|
+
|
|
+
|
|
+# func_mode_uninstall arg...
|
|
+func_mode_uninstall ()
|
|
+{
|
|
+ $opt_debug
|
|
+ RM="$nonopt"
|
|
+ files=
|
|
+ rmforce=
|
|
+ exit_status=0
|
|
+
|
|
+ # This variable tells wrapper scripts just to set variables rather
|
|
+ # than running their programs.
|
|
+ libtool_install_magic="$magic"
|
|
+
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -f) RM="$RM $arg"; rmforce=yes ;;
|
|
+ -*) RM="$RM $arg" ;;
|
|
+ *) files="$files $arg" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ test -z "$RM" && \
|
|
+ func_fatal_help "you must specify an RM program"
|
|
+
|
|
+ rmdirs=
|
|
+
|
|
+ origobjdir="$objdir"
|
|
+ for file in $files; do
|
|
+ func_dirname "$file" "" "."
|
|
+ dir="$func_dirname_result"
|
|
+ if test "X$dir" = X.; then
|
|
+ objdir="$origobjdir"
|
|
+ else
|
|
+ objdir="$dir/$origobjdir"
|
|
+ fi
|
|
+ func_basename "$file"
|
|
+ name="$func_basename_result"
|
|
+ test "$mode" = uninstall && objdir="$dir"
|
|
+
|
|
+ # Remember objdir for removal later, being careful to avoid duplicates
|
|
+ if test "$mode" = clean; then
|
|
+ case " $rmdirs " in
|
|
+ *" $objdir "*) ;;
|
|
+ *) rmdirs="$rmdirs $objdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Don't error if the file doesn't exist and rm -f was used.
|
|
+ if { test -L "$file"; } >/dev/null 2>&1 ||
|
|
+ { test -h "$file"; } >/dev/null 2>&1 ||
|
|
+ test -f "$file"; then
|
|
+ :
|
|
+ elif test -d "$file"; then
|
|
+ exit_status=1
|
|
+ continue
|
|
+ elif test "$rmforce" = yes; then
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ rmfiles="$file"
|
|
+
|
|
+ case $name in
|
|
+ *.la)
|
|
+ # Possibly a libtool archive, so verify it.
|
|
+ if func_lalib_p "$file"; then
|
|
+ func_source $dir/$name
|
|
+
|
|
+ # Delete the libtool libraries and symlinks.
|
|
+ for n in $library_names; do
|
|
+ rmfiles="$rmfiles $objdir/$n"
|
|
+ done
|
|
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
|
|
+
|
|
+ case "$mode" in
|
|
+ clean)
|
|
+ case " $library_names " in
|
|
+ # " " in the beginning catches empty $dlname
|
|
+ *" $dlname "*) ;;
|
|
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
|
|
+ esac
|
|
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
|
|
+ ;;
|
|
+ uninstall)
|
|
+ if test -n "$library_names"; then
|
|
+ # Do each command in the postuninstall commands.
|
|
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
|
|
+ fi
|
|
+
|
|
+ if test -n "$old_library"; then
|
|
+ # Do each command in the old_postuninstall commands.
|
|
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
|
|
+ fi
|
|
+ # FIXME: should reinstall the best remaining shared library.
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *.lo)
|
|
+ # Possibly a libtool object, so verify it.
|
|
+ if func_lalib_p "$file"; then
|
|
+
|
|
+ # Read the .lo file
|
|
+ func_source $dir/$name
|
|
+
|
|
+ # Add PIC object to the list of files to remove.
|
|
+ if test -n "$pic_object" &&
|
|
+ test "$pic_object" != none; then
|
|
+ rmfiles="$rmfiles $dir/$pic_object"
|
|
+ fi
|
|
+
|
|
+ # Add non-PIC object to the list of files to remove.
|
|
+ if test -n "$non_pic_object" &&
|
|
+ test "$non_pic_object" != none; then
|
|
+ rmfiles="$rmfiles $dir/$non_pic_object"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if test "$mode" = clean ; then
|
|
+ noexename=$name
|
|
+ case $file in
|
|
+ *.exe)
|
|
+ func_stripname '' '.exe' "$file"
|
|
+ file=$func_stripname_result
|
|
+ func_stripname '' '.exe' "$name"
|
|
+ noexename=$func_stripname_result
|
|
+ # $file with .exe has already been added to rmfiles,
|
|
+ # add $file without .exe
|
|
+ rmfiles="$rmfiles $file"
|
|
+ ;;
|
|
+ esac
|
|
+ # Do a test to see if this is a libtool program.
|
|
+ if func_ltwrapper_p "$file"; then
|
|
+ if func_ltwrapper_executable_p "$file"; then
|
|
+ func_ltwrapper_scriptname "$file"
|
|
+ relink_command=
|
|
+ func_source $func_ltwrapper_scriptname_result
|
|
+ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
|
|
+ else
|
|
+ relink_command=
|
|
+ func_source $dir/$noexename
|
|
+ fi
|
|
+
|
|
+ # note $name still contains .exe if it was in $file originally
|
|
+ # as does the version of $file that was added into $rmfiles
|
|
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
|
|
+ if test "$fast_install" = yes && test -n "$relink_command"; then
|
|
+ rmfiles="$rmfiles $objdir/lt-$name"
|
|
+ fi
|
|
+ if test "X$noexename" != "X$name" ; then
|
|
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
|
|
+ done
|
|
+ objdir="$origobjdir"
|
|
+
|
|
+ # Try to remove the ${objdir}s in the directories where we deleted files
|
|
+ for dir in $rmdirs; do
|
|
+ if test -d "$dir"; then
|
|
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ exit $exit_status
|
|
+}
|
|
+
|
|
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
|
|
+ func_mode_uninstall ${1+"$@"}
|
|
+
|
|
+test -z "$mode" && {
|
|
+ help="$generic_help"
|
|
+ func_fatal_help "you must specify a MODE"
|
|
+}
|
|
+
|
|
+test -z "$exec_cmd" && \
|
|
+ func_fatal_help "invalid operation mode \`$mode'"
|
|
+
|
|
+if test -n "$exec_cmd"; then
|
|
+ eval exec "$exec_cmd"
|
|
+ exit $EXIT_FAILURE
|
|
+fi
|
|
+
|
|
+exit $exit_status
|
|
+
|
|
+
|
|
+# The TAGs below are defined such that we never get into a situation
|
|
+# in which we disable both kinds of libraries. Given conflicting
|
|
+# choices, we go for a static library, that is the most portable,
|
|
+# since we can't tell whether shared libraries were disabled because
|
|
+# the user asked for that or because the platform doesn't support
|
|
+# them. This is particularly important on AIX, because we don't
|
|
+# support having both static and shared libraries enabled at the same
|
|
+# time on that platform, so we default to a shared-only configuration.
|
|
+# If a disable-shared tag is given, we'll fallback to a static-only
|
|
+# configuration. But we'll never go from static-only to shared-only.
|
|
+
|
|
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
|
|
+build_libtool_libs=no
|
|
+build_old_libs=yes
|
|
+# ### END LIBTOOL TAG CONFIG: disable-shared
|
|
+
|
|
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
|
|
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
|
|
+# ### END LIBTOOL TAG CONFIG: disable-static
|
|
+
|
|
+# Local Variables:
|
|
+# mode:shell-script
|
|
+# sh-indentation:2
|
|
+# End:
|
|
+# vi:sw=2
|
|
+
|
|
Index: libffi/mdate-sh
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/mdate-sh
|
|
@@ -0,0 +1,201 @@
|
|
+#!/bin/sh
|
|
+# Get modification time of a file or directory and pretty-print it.
|
|
+
|
|
+scriptversion=2005-06-29.22
|
|
+
|
|
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
|
|
+# Foundation, Inc.
|
|
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
|
|
+#
|
|
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+# This file is maintained in Automake, please report
|
|
+# bugs to <bug-automake@gnu.org> or send patches to
|
|
+# <automake-patches@gnu.org>.
|
|
+
|
|
+case $1 in
|
|
+ '')
|
|
+ echo "$0: No file. Try \`$0 --help' for more information." 1>&2
|
|
+ exit 1;
|
|
+ ;;
|
|
+ -h | --h*)
|
|
+ cat <<\EOF
|
|
+Usage: mdate-sh [--help] [--version] FILE
|
|
+
|
|
+Pretty-print the modification time of FILE.
|
|
+
|
|
+Report bugs to <bug-automake@gnu.org>.
|
|
+EOF
|
|
+ exit $?
|
|
+ ;;
|
|
+ -v | --v*)
|
|
+ echo "mdate-sh $scriptversion"
|
|
+ exit $?
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Prevent date giving response in another language.
|
|
+LANG=C
|
|
+export LANG
|
|
+LC_ALL=C
|
|
+export LC_ALL
|
|
+LC_TIME=C
|
|
+export LC_TIME
|
|
+
|
|
+# GNU ls changes its time format in response to the TIME_STYLE
|
|
+# variable. Since we cannot assume `unset' works, revert this
|
|
+# variable to its documented default.
|
|
+if test "${TIME_STYLE+set}" = set; then
|
|
+ TIME_STYLE=posix-long-iso
|
|
+ export TIME_STYLE
|
|
+fi
|
|
+
|
|
+save_arg1=$1
|
|
+
|
|
+# Find out how to get the extended ls output of a file or directory.
|
|
+if ls -L /dev/null 1>/dev/null 2>&1; then
|
|
+ ls_command='ls -L -l -d'
|
|
+else
|
|
+ ls_command='ls -l -d'
|
|
+fi
|
|
+
|
|
+# A `ls -l' line looks as follows on OS/2.
|
|
+# drwxrwx--- 0 Aug 11 2001 foo
|
|
+# This differs from Unix, which adds ownership information.
|
|
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
|
|
+#
|
|
+# To find the date, we split the line on spaces and iterate on words
|
|
+# until we find a month. This cannot work with files whose owner is a
|
|
+# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
|
|
+# will be owned by a user whose name is a month. So we first look at
|
|
+# the extended ls output of the root directory to decide how many
|
|
+# words should be skipped to get the date.
|
|
+
|
|
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
|
|
+set x`ls -l -d /`
|
|
+
|
|
+# Find which argument is the month.
|
|
+month=
|
|
+command=
|
|
+until test $month
|
|
+do
|
|
+ shift
|
|
+ # Add another shift to the command.
|
|
+ command="$command shift;"
|
|
+ case $1 in
|
|
+ Jan) month=January; nummonth=1;;
|
|
+ Feb) month=February; nummonth=2;;
|
|
+ Mar) month=March; nummonth=3;;
|
|
+ Apr) month=April; nummonth=4;;
|
|
+ May) month=May; nummonth=5;;
|
|
+ Jun) month=June; nummonth=6;;
|
|
+ Jul) month=July; nummonth=7;;
|
|
+ Aug) month=August; nummonth=8;;
|
|
+ Sep) month=September; nummonth=9;;
|
|
+ Oct) month=October; nummonth=10;;
|
|
+ Nov) month=November; nummonth=11;;
|
|
+ Dec) month=December; nummonth=12;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+# Get the extended ls output of the file or directory.
|
|
+set dummy x`eval "$ls_command \"\$save_arg1\""`
|
|
+
|
|
+# Remove all preceding arguments
|
|
+eval $command
|
|
+
|
|
+# Because of the dummy argument above, month is in $2.
|
|
+#
|
|
+# On a POSIX system, we should have
|
|
+#
|
|
+# $# = 5
|
|
+# $1 = file size
|
|
+# $2 = month
|
|
+# $3 = day
|
|
+# $4 = year or time
|
|
+# $5 = filename
|
|
+#
|
|
+# On Darwin 7.7.0 and 7.6.0, we have
|
|
+#
|
|
+# $# = 4
|
|
+# $1 = day
|
|
+# $2 = month
|
|
+# $3 = year or time
|
|
+# $4 = filename
|
|
+
|
|
+# Get the month.
|
|
+case $2 in
|
|
+ Jan) month=January; nummonth=1;;
|
|
+ Feb) month=February; nummonth=2;;
|
|
+ Mar) month=March; nummonth=3;;
|
|
+ Apr) month=April; nummonth=4;;
|
|
+ May) month=May; nummonth=5;;
|
|
+ Jun) month=June; nummonth=6;;
|
|
+ Jul) month=July; nummonth=7;;
|
|
+ Aug) month=August; nummonth=8;;
|
|
+ Sep) month=September; nummonth=9;;
|
|
+ Oct) month=October; nummonth=10;;
|
|
+ Nov) month=November; nummonth=11;;
|
|
+ Dec) month=December; nummonth=12;;
|
|
+esac
|
|
+
|
|
+case $3 in
|
|
+ ???*) day=$1;;
|
|
+ *) day=$3; shift;;
|
|
+esac
|
|
+
|
|
+# Here we have to deal with the problem that the ls output gives either
|
|
+# the time of day or the year.
|
|
+case $3 in
|
|
+ *:*) set `date`; eval year=\$$#
|
|
+ case $2 in
|
|
+ Jan) nummonthtod=1;;
|
|
+ Feb) nummonthtod=2;;
|
|
+ Mar) nummonthtod=3;;
|
|
+ Apr) nummonthtod=4;;
|
|
+ May) nummonthtod=5;;
|
|
+ Jun) nummonthtod=6;;
|
|
+ Jul) nummonthtod=7;;
|
|
+ Aug) nummonthtod=8;;
|
|
+ Sep) nummonthtod=9;;
|
|
+ Oct) nummonthtod=10;;
|
|
+ Nov) nummonthtod=11;;
|
|
+ Dec) nummonthtod=12;;
|
|
+ esac
|
|
+ # For the first six month of the year the time notation can also
|
|
+ # be used for files modified in the last year.
|
|
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
|
|
+ then
|
|
+ year=`expr $year - 1`
|
|
+ fi;;
|
|
+ *) year=$3;;
|
|
+esac
|
|
+
|
|
+# The result.
|
|
+echo $day $month $year
|
|
+
|
|
+# 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-end: "$"
|
|
+# End:
|
|
Index: libffi/missing
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/missing
|
|
@@ -0,0 +1,360 @@
|
|
+#! /bin/sh
|
|
+# Common stub for a few missing GNU programs while installing.
|
|
+
|
|
+scriptversion=2005-06-08.21
|
|
+
|
|
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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, write to the Free Software
|
|
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
+# 02110-1301, USA.
|
|
+
|
|
+# As a special exception to the GNU General Public License, if you
|
|
+# distribute this file as part of a program that contains a
|
|
+# configuration script generated by Autoconf, you may include it under
|
|
+# the same distribution terms that you use for the rest of that program.
|
|
+
|
|
+if test $# -eq 0; then
|
|
+ echo 1>&2 "Try \`$0 --help' for more information"
|
|
+ exit 1
|
|
+fi
|
|
+
|
|
+run=:
|
|
+
|
|
+# 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'
|
|
+ automake touch all \`Makefile.in' files
|
|
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
|
+ flex create \`lex.yy.c', if possible, from existing .c
|
|
+ help2man touch the output file
|
|
+ lex create \`lex.yy.c', if possible, from existing .c
|
|
+ makeinfo touch the output file
|
|
+ tar try tar, gnutar, gtar, then tar without non-portable flags
|
|
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
|
+
|
|
+Send bug reports to <bug-automake@gnu.org>."
|
|
+ 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
|
|
+
|
|
+# 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).
|
|
+case "$1" in
|
|
+ lex|yacc)
|
|
+ # Not GNU programs, they don't have --version.
|
|
+ ;;
|
|
+
|
|
+ tar)
|
|
+ if test -n "$run"; then
|
|
+ echo 1>&2 "ERROR: \`tar' requires --run"
|
|
+ exit 1
|
|
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
|
+ # We have it, but it failed.
|
|
+ exit 1
|
|
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
|
+ # Could not run --version or --help. This is probably someone
|
|
+ # running `$TOOL --version' or `$TOOL --help' to check whether
|
|
+ # $TOOL exists and not knowing $TOOL uses missing.
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# If it does not exist, or fails to run (possibly an outdated version),
|
|
+# try to emulate it.
|
|
+case "$1" 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 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
|
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
|
+ 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 [ $# -ne 1 ]; then
|
|
+ eval LASTARG="\${$#}"
|
|
+ case "$LASTARG" in
|
|
+ *.y)
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
|
+ if [ -f "$SRCFILE" ]; then
|
|
+ cp "$SRCFILE" y.tab.c
|
|
+ fi
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
|
+ if [ -f "$SRCFILE" ]; then
|
|
+ cp "$SRCFILE" y.tab.h
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if [ ! -f y.tab.h ]; then
|
|
+ echo >y.tab.h
|
|
+ fi
|
|
+ if [ ! -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 [ $# -ne 1 ]; then
|
|
+ eval LASTARG="\${$#}"
|
|
+ case "$LASTARG" in
|
|
+ *.l)
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
|
+ if [ -f "$SRCFILE" ]; then
|
|
+ cp "$SRCFILE" lex.yy.c
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if [ ! -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 's/.*-o \([^ ]*\).*/\1/p'`
|
|
+ if test -z "$file"; then
|
|
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
|
+ fi
|
|
+ if [ -f "$file" ]; then
|
|
+ touch $file
|
|
+ else
|
|
+ test -z "$file" || exec >$file
|
|
+ echo ".ab help2man is required to generate this page"
|
|
+ exit 1
|
|
+ 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 's/.*-o \([^ ]*\).*/\1/p'`
|
|
+ if test -z "$file"; then
|
|
+ # ... or it is the one specified with @setfilename ...
|
|
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
|
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
|
|
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
|
|
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
|
+ fi
|
|
+ # If the file does not exist, the user really needs makeinfo;
|
|
+ # let's fail without touching anything.
|
|
+ test -f $file || exit 1
|
|
+ touch $file
|
|
+ ;;
|
|
+
|
|
+ tar)
|
|
+ shift
|
|
+
|
|
+ # We have already tried tar in the generic part.
|
|
+ # Look for gnutar/gtar before invocation to avoid ugly error
|
|
+ # messages.
|
|
+ if (gnutar --version > /dev/null 2>&1); then
|
|
+ gnutar "$@" && exit 0
|
|
+ fi
|
|
+ if (gtar --version > /dev/null 2>&1); then
|
|
+ gtar "$@" && exit 0
|
|
+ fi
|
|
+ firstarg="$1"
|
|
+ if shift; then
|
|
+ case "$firstarg" in
|
|
+ *o*)
|
|
+ firstarg=`echo "$firstarg" | sed s/o//`
|
|
+ tar "$firstarg" "$@" && exit 0
|
|
+ ;;
|
|
+ esac
|
|
+ case "$firstarg" in
|
|
+ *h*)
|
|
+ firstarg=`echo "$firstarg" | sed s/h//`
|
|
+ tar "$firstarg" "$@" && exit 0
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ echo 1>&2 "\
|
|
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
|
+ You may want to install GNU tar or Free paxutils, or check the
|
|
+ command line arguments."
|
|
+ exit 1
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is needed, and is $msg.
|
|
+ You might have modified some files without having the
|
|
+ proper tools for further handling them. Check the \`README' file,
|
|
+ it often tells you about the needed prerequisites for installing
|
|
+ this package. You may also peek at any GNU archive site, in case
|
|
+ some other package would contain this missing \`$1' program."
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+exit 0
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "scriptversion="
|
|
+# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+# time-stamp-end: "$"
|
|
+# End:
|
|
Index: libffi/texinfo.tex
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/texinfo.tex
|
|
@@ -0,0 +1,7210 @@
|
|
+% texinfo.tex -- TeX macros to handle Texinfo files.
|
|
+%
|
|
+% Load plain if necessary, i.e., if running under initex.
|
|
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
|
+%
|
|
+\def\texinfoversion{2005-07-05.19}
|
|
+%
|
|
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
|
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
|
+% Foundation, Inc.
|
|
+%
|
|
+% This texinfo.tex 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, or (at
|
|
+% your option) any later version.
|
|
+%
|
|
+% This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write
|
|
+% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
+% Boston, MA 02110-1301, USA.
|
|
+%
|
|
+% As a special exception, when this file is read by TeX when processing
|
|
+% a Texinfo source document, you may use the result without
|
|
+% restriction. (This has been our intent since Texinfo was invented.)
|
|
+%
|
|
+% Please try the latest version of texinfo.tex before submitting bug
|
|
+% reports; you can get the latest version from:
|
|
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
|
|
+% ftp://tug.org/tex/texinfo.tex
|
|
+% (and all CTAN mirrors, see http://www.ctan.org).
|
|
+% The texinfo.tex in any given distribution could well be out
|
|
+% of date, so if that's what you're using, please check.
|
|
+%
|
|
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
|
|
+% complete document in each bug report with which we can reproduce the
|
|
+% problem. Patches are, of course, greatly appreciated.
|
|
+%
|
|
+% To process a Texinfo manual with TeX, it's most reliable to use the
|
|
+% texi2dvi shell script that comes with the distribution. For a simple
|
|
+% manual foo.texi, however, you can get away with this:
|
|
+% tex foo.texi
|
|
+% texindex foo.??
|
|
+% tex foo.texi
|
|
+% tex foo.texi
|
|
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
|
|
+% The extra TeX runs get the cross-reference information correct.
|
|
+% Sometimes one run after texindex suffices, and sometimes you need more
|
|
+% than two; texi2dvi does it as many times as necessary.
|
|
+%
|
|
+% It is possible to adapt texinfo.tex for other languages, to some
|
|
+% extent. You can get the existing language-specific files from the
|
|
+% full Texinfo distribution.
|
|
+%
|
|
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
|
|
+
|
|
+
|
|
+\message{Loading texinfo [version \texinfoversion]:}
|
|
+
|
|
+% If in a .fmt file, print the version number
|
|
+% and turn on active characters that we couldn't do earlier because
|
|
+% they might have appeared in the input file name.
|
|
+\everyjob{\message{[Texinfo version \texinfoversion]}%
|
|
+ \catcode`+=\active \catcode`\_=\active}
|
|
+
|
|
+\message{Basics,}
|
|
+\chardef\other=12
|
|
+
|
|
+% We never want plain's \outer definition of \+ in Texinfo.
|
|
+% For @tex, we can use \tabalign.
|
|
+\let\+ = \relax
|
|
+
|
|
+% Save some plain tex macros whose names we will redefine.
|
|
+\let\ptexb=\b
|
|
+\let\ptexbullet=\bullet
|
|
+\let\ptexc=\c
|
|
+\let\ptexcomma=\,
|
|
+\let\ptexdot=\.
|
|
+\let\ptexdots=\dots
|
|
+\let\ptexend=\end
|
|
+\let\ptexequiv=\equiv
|
|
+\let\ptexexclam=\!
|
|
+\let\ptexfootnote=\footnote
|
|
+\let\ptexgtr=>
|
|
+\let\ptexhat=^
|
|
+\let\ptexi=\i
|
|
+\let\ptexindent=\indent
|
|
+\let\ptexinsert=\insert
|
|
+\let\ptexlbrace=\{
|
|
+\let\ptexless=<
|
|
+\let\ptexnewwrite\newwrite
|
|
+\let\ptexnoindent=\noindent
|
|
+\let\ptexplus=+
|
|
+\let\ptexrbrace=\}
|
|
+\let\ptexslash=\/
|
|
+\let\ptexstar=\*
|
|
+\let\ptext=\t
|
|
+
|
|
+% If this character appears in an error message or help string, it
|
|
+% starts a new line in the output.
|
|
+\newlinechar = `^^J
|
|
+
|
|
+% Use TeX 3.0's \inputlineno to get the line number, for better error
|
|
+% messages, but if we're using an old version of TeX, don't do anything.
|
|
+%
|
|
+\ifx\inputlineno\thisisundefined
|
|
+ \let\linenumber = \empty % Pre-3.0.
|
|
+\else
|
|
+ \def\linenumber{l.\the\inputlineno:\space}
|
|
+\fi
|
|
+
|
|
+% Set up fixed words for English if not already set.
|
|
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
|
|
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
|
|
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
|
|
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
|
|
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
|
|
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
|
|
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
|
|
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
|
|
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
|
|
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
|
|
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
|
|
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
|
|
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
|
|
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
|
|
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
|
|
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
|
|
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
|
|
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
|
|
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
|
|
+%
|
|
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
|
|
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
|
|
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
|
|
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
|
|
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
|
|
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
|
|
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
|
|
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
|
|
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
|
|
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
|
|
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
|
|
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
|
|
+%
|
|
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
|
|
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
|
|
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
|
|
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
|
|
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
|
|
+
|
|
+% In some macros, we cannot use the `\? notation---the left quote is
|
|
+% in some cases the escape char.
|
|
+\chardef\backChar = `\\
|
|
+\chardef\colonChar = `\:
|
|
+\chardef\commaChar = `\,
|
|
+\chardef\dotChar = `\.
|
|
+\chardef\exclamChar= `\!
|
|
+\chardef\plusChar = `\+
|
|
+\chardef\questChar = `\?
|
|
+\chardef\semiChar = `\;
|
|
+\chardef\underChar = `\_
|
|
+
|
|
+\chardef\spaceChar = `\ %
|
|
+\chardef\spacecat = 10
|
|
+\def\spaceisspace{\catcode\spaceChar=\spacecat}
|
|
+
|
|
+{% for help with debugging.
|
|
+ % example usage: \expandafter\show\activebackslash
|
|
+ \catcode`\! = 0 \catcode`\\ = \active
|
|
+ !global!def!activebackslash{\}
|
|
+}
|
|
+
|
|
+% Ignore a token.
|
|
+%
|
|
+\def\gobble#1{}
|
|
+
|
|
+% The following is used inside several \edef's.
|
|
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
|
|
+
|
|
+% Hyphenation fixes.
|
|
+\hyphenation{
|
|
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
|
|
+ ap-pen-dix bit-map bit-maps
|
|
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
|
|
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
|
|
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
|
|
+ spell-ing spell-ings
|
|
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
|
|
+ wide-spread wrap-around
|
|
+}
|
|
+
|
|
+% Margin to add to right of even pages, to left of odd pages.
|
|
+\newdimen\bindingoffset
|
|
+\newdimen\normaloffset
|
|
+\newdimen\pagewidth \newdimen\pageheight
|
|
+
|
|
+% For a final copy, take out the rectangles
|
|
+% that mark overfull boxes (in case you have decided
|
|
+% that the text looks ok even though it passes the margin).
|
|
+%
|
|
+\def\finalout{\overfullrule=0pt}
|
|
+
|
|
+% @| inserts a changebar to the left of the current line. It should
|
|
+% surround any changed text. This approach does *not* work if the
|
|
+% change spans more than two lines of output. To handle that, we would
|
|
+% have adopt a much more difficult approach (putting marks into the main
|
|
+% vertical list for the beginning and end of each change).
|
|
+%
|
|
+\def\|{%
|
|
+ % \vadjust can only be used in horizontal mode.
|
|
+ \leavevmode
|
|
+ %
|
|
+ % Append this vertical mode material after the current line in the output.
|
|
+ \vadjust{%
|
|
+ % We want to insert a rule with the height and depth of the current
|
|
+ % leading; that is exactly what \strutbox is supposed to record.
|
|
+ \vskip-\baselineskip
|
|
+ %
|
|
+ % \vadjust-items are inserted at the left edge of the type. So
|
|
+ % the \llap here moves out into the left-hand margin.
|
|
+ \llap{%
|
|
+ %
|
|
+ % For a thicker or thinner bar, change the `1pt'.
|
|
+ \vrule height\baselineskip width1pt
|
|
+ %
|
|
+ % This is the space between the bar and the text.
|
|
+ \hskip 12pt
|
|
+ }%
|
|
+ }%
|
|
+}
|
|
+
|
|
+% Sometimes it is convenient to have everything in the transcript file
|
|
+% and nothing on the terminal. We don't just call \tracingall here,
|
|
+% since that produces some useless output on the terminal. We also make
|
|
+% some effort to order the tracing commands to reduce output in the log
|
|
+% file; cf. trace.sty in LaTeX.
|
|
+%
|
|
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
|
|
+\def\loggingall{%
|
|
+ \tracingstats2
|
|
+ \tracingpages1
|
|
+ \tracinglostchars2 % 2 gives us more in etex
|
|
+ \tracingparagraphs1
|
|
+ \tracingoutput1
|
|
+ \tracingmacros2
|
|
+ \tracingrestores1
|
|
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
|
|
+ \ifx\eTeXversion\undefined\else % etex gives us more logging
|
|
+ \tracingscantokens1
|
|
+ \tracingifs1
|
|
+ \tracinggroups1
|
|
+ \tracingnesting2
|
|
+ \tracingassigns1
|
|
+ \fi
|
|
+ \tracingcommands3 % 3 gives us more in etex
|
|
+ \errorcontextlines16
|
|
+}%
|
|
+
|
|
+% add check for \lastpenalty to plain's definitions. If the last thing
|
|
+% we did was a \nobreak, we don't want to insert more space.
|
|
+%
|
|
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
|
|
+ \removelastskip\penalty-50\smallskip\fi\fi}
|
|
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
|
|
+ \removelastskip\penalty-100\medskip\fi\fi}
|
|
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
|
|
+ \removelastskip\penalty-200\bigskip\fi\fi}
|
|
+
|
|
+% For @cropmarks command.
|
|
+% Do @cropmarks to get crop marks.
|
|
+%
|
|
+\newif\ifcropmarks
|
|
+\let\cropmarks = \cropmarkstrue
|
|
+%
|
|
+% Dimensions to add cropmarks at corners.
|
|
+% Added by P. A. MacKay, 12 Nov. 1986
|
|
+%
|
|
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
|
|
+\newdimen\cornerlong \cornerlong=1pc
|
|
+\newdimen\cornerthick \cornerthick=.3pt
|
|
+\newdimen\topandbottommargin \topandbottommargin=.75in
|
|
+
|
|
+% Main output routine.
|
|
+\chardef\PAGE = 255
|
|
+\output = {\onepageout{\pagecontents\PAGE}}
|
|
+
|
|
+\newbox\headlinebox
|
|
+\newbox\footlinebox
|
|
+
|
|
+% \onepageout takes a vbox as an argument. Note that \pagecontents
|
|
+% does insertions, but you have to call it yourself.
|
|
+\def\onepageout#1{%
|
|
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
|
|
+ %
|
|
+ \ifodd\pageno \advance\hoffset by \bindingoffset
|
|
+ \else \advance\hoffset by -\bindingoffset\fi
|
|
+ %
|
|
+ % Do this outside of the \shipout so @code etc. will be expanded in
|
|
+ % the headline as they should be, not taken literally (outputting ''code).
|
|
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
|
|
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
|
|
+ %
|
|
+ {%
|
|
+ % Have to do this stuff outside the \shipout because we want it to
|
|
+ % take effect in \write's, yet the group defined by the \vbox ends
|
|
+ % before the \shipout runs.
|
|
+ %
|
|
+ \indexdummies % don't expand commands in the output.
|
|
+ \shipout\vbox{%
|
|
+ % Do this early so pdf references go to the beginning of the page.
|
|
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
|
|
+ %
|
|
+ \ifcropmarks \vbox to \outervsize\bgroup
|
|
+ \hsize = \outerhsize
|
|
+ \vskip-\topandbottommargin
|
|
+ \vtop to0pt{%
|
|
+ \line{\ewtop\hfil\ewtop}%
|
|
+ \nointerlineskip
|
|
+ \line{%
|
|
+ \vbox{\moveleft\cornerthick\nstop}%
|
|
+ \hfill
|
|
+ \vbox{\moveright\cornerthick\nstop}%
|
|
+ }%
|
|
+ \vss}%
|
|
+ \vskip\topandbottommargin
|
|
+ \line\bgroup
|
|
+ \hfil % center the page within the outer (page) hsize.
|
|
+ \ifodd\pageno\hskip\bindingoffset\fi
|
|
+ \vbox\bgroup
|
|
+ \fi
|
|
+ %
|
|
+ \unvbox\headlinebox
|
|
+ \pagebody{#1}%
|
|
+ \ifdim\ht\footlinebox > 0pt
|
|
+ % Only leave this space if the footline is nonempty.
|
|
+ % (We lessened \vsize for it in \oddfootingxxx.)
|
|
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
|
|
+ \vskip 2\baselineskip
|
|
+ \unvbox\footlinebox
|
|
+ \fi
|
|
+ %
|
|
+ \ifcropmarks
|
|
+ \egroup % end of \vbox\bgroup
|
|
+ \hfil\egroup % end of (centering) \line\bgroup
|
|
+ \vskip\topandbottommargin plus1fill minus1fill
|
|
+ \boxmaxdepth = \cornerthick
|
|
+ \vbox to0pt{\vss
|
|
+ \line{%
|
|
+ \vbox{\moveleft\cornerthick\nsbot}%
|
|
+ \hfill
|
|
+ \vbox{\moveright\cornerthick\nsbot}%
|
|
+ }%
|
|
+ \nointerlineskip
|
|
+ \line{\ewbot\hfil\ewbot}%
|
|
+ }%
|
|
+ \egroup % \vbox from first cropmarks clause
|
|
+ \fi
|
|
+ }% end of \shipout\vbox
|
|
+ }% end of group with \indexdummies
|
|
+ \advancepageno
|
|
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
|
|
+}
|
|
+
|
|
+\newinsert\margin \dimen\margin=\maxdimen
|
|
+
|
|
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
|
|
+{\catcode`\@ =11
|
|
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
|
|
+% marginal hacks, juha@viisa.uucp (Juha Takala)
|
|
+\ifvoid\margin\else % marginal info is present
|
|
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
|
|
+\dimen@=\dp#1 \unvbox#1
|
|
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
|
|
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
|
|
+}
|
|
+
|
|
+% Here are the rules for the cropmarks. Note that they are
|
|
+% offset so that the space between them is truly \outerhsize or \outervsize
|
|
+% (P. A. MacKay, 12 November, 1986)
|
|
+%
|
|
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
|
|
+\def\nstop{\vbox
|
|
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
|
|
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
|
|
+\def\nsbot{\vbox
|
|
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
|
|
+
|
|
+% Parse an argument, then pass it to #1. The argument is the rest of
|
|
+% the input line (except we remove a trailing comment). #1 should be a
|
|
+% macro which expects an ordinary undelimited TeX argument.
|
|
+%
|
|
+\def\parsearg{\parseargusing{}}
|
|
+\def\parseargusing#1#2{%
|
|
+ \def\next{#2}%
|
|
+ \begingroup
|
|
+ \obeylines
|
|
+ \spaceisspace
|
|
+ #1%
|
|
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
|
|
+}
|
|
+
|
|
+{\obeylines %
|
|
+ \gdef\parseargline#1^^M{%
|
|
+ \endgroup % End of the group started in \parsearg.
|
|
+ \argremovecomment #1\comment\ArgTerm%
|
|
+ }%
|
|
+}
|
|
+
|
|
+% First remove any @comment, then any @c comment.
|
|
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
|
|
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
|
|
+
|
|
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
|
|
+%
|
|
+% \argremovec might leave us with trailing space, e.g.,
|
|
+% @end itemize @c foo
|
|
+% This space token undergoes the same procedure and is eventually removed
|
|
+% by \finishparsearg.
|
|
+%
|
|
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
|
|
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
|
|
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
|
|
+ \def\temp{#3}%
|
|
+ \ifx\temp\empty
|
|
+ % We cannot use \next here, as it holds the macro to run;
|
|
+ % thus we reuse \temp.
|
|
+ \let\temp\finishparsearg
|
|
+ \else
|
|
+ \let\temp\argcheckspaces
|
|
+ \fi
|
|
+ % Put the space token in:
|
|
+ \temp#1 #3\ArgTerm
|
|
+}
|
|
+
|
|
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
|
|
+% to get _exactly_ the rest of the line, we had to prevent such situation.
|
|
+% We prepended an \empty token at the very beginning and we expand it now,
|
|
+% just before passing the control to \next.
|
|
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
|
|
+% either the null string, or it ends with \^^M---thus there is no danger
|
|
+% that a pair of braces would be stripped.
|
|
+%
|
|
+% But first, we have to remove the trailing space token.
|
|
+%
|
|
+\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
|
|
+
|
|
+% \parseargdef\foo{...}
|
|
+% is roughly equivalent to
|
|
+% \def\foo{\parsearg\Xfoo}
|
|
+% \def\Xfoo#1{...}
|
|
+%
|
|
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
|
|
+% favourite TeX trick. --kasal, 16nov03
|
|
+
|
|
+\def\parseargdef#1{%
|
|
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
|
|
+}
|
|
+\def\doparseargdef#1#2{%
|
|
+ \def#2{\parsearg#1}%
|
|
+ \def#1##1%
|
|
+}
|
|
+
|
|
+% Several utility definitions with active space:
|
|
+{
|
|
+ \obeyspaces
|
|
+ \gdef\obeyedspace{ }
|
|
+
|
|
+ % Make each space character in the input produce a normal interword
|
|
+ % space in the output. Don't allow a line break at this space, as this
|
|
+ % is used only in environments like @example, where each line of input
|
|
+ % should produce a line of output anyway.
|
|
+ %
|
|
+ \gdef\sepspaces{\obeyspaces\let =\tie}
|
|
+
|
|
+ % If an index command is used in an @example environment, any spaces
|
|
+ % therein should become regular spaces in the raw index file, not the
|
|
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
|
|
+ \gdef\unsepspaces{\let =\space}
|
|
+}
|
|
+
|
|
+
|
|
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
|
|
+
|
|
+% Define the framework for environments in texinfo.tex. It's used like this:
|
|
+%
|
|
+% \envdef\foo{...}
|
|
+% \def\Efoo{...}
|
|
+%
|
|
+% It's the responsibility of \envdef to insert \begingroup before the
|
|
+% actual body; @end closes the group after calling \Efoo. \envdef also
|
|
+% defines \thisenv, so the current environment is known; @end checks
|
|
+% whether the environment name matches. The \checkenv macro can also be
|
|
+% used to check whether the current environment is the one expected.
|
|
+%
|
|
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
|
|
+% are not treated as enviroments; they don't open a group. (The
|
|
+% implementation of @end takes care not to call \endgroup in this
|
|
+% special case.)
|
|
+
|
|
+
|
|
+% At runtime, environments start with this:
|
|
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
|
|
+% initialize
|
|
+\let\thisenv\empty
|
|
+
|
|
+% ... but they get defined via ``\envdef\foo{...}'':
|
|
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
|
|
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
|
|
+
|
|
+% Check whether we're in the right environment:
|
|
+\def\checkenv#1{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\thisenv\temp
|
|
+ \else
|
|
+ \badenverr
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% Evironment mismatch, #1 expected:
|
|
+\def\badenverr{%
|
|
+ \errhelp = \EMsimple
|
|
+ \errmessage{This command can appear only \inenvironment\temp,
|
|
+ not \inenvironment\thisenv}%
|
|
+}
|
|
+\def\inenvironment#1{%
|
|
+ \ifx#1\empty
|
|
+ out of any environment%
|
|
+ \else
|
|
+ in environment \expandafter\string#1%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @end foo executes the definition of \Efoo.
|
|
+% But first, it executes a specialized version of \checkenv
|
|
+%
|
|
+\parseargdef\end{%
|
|
+ \if 1\csname iscond.#1\endcsname
|
|
+ \else
|
|
+ % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
|
|
+ \expandafter\checkenv\csname#1\endcsname
|
|
+ \csname E#1\endcsname
|
|
+ \endgroup
|
|
+ \fi
|
|
+}
|
|
+
|
|
+\newhelp\EMsimple{Press RETURN to continue.}
|
|
+
|
|
+
|
|
+%% Simple single-character @ commands
|
|
+
|
|
+% @@ prints an @
|
|
+% Kludge this until the fonts are right (grr).
|
|
+\def\@{{\tt\char64}}
|
|
+
|
|
+% This is turned off because it was never documented
|
|
+% and you can use @w{...} around a quote to suppress ligatures.
|
|
+%% Define @` and @' to be the same as ` and '
|
|
+%% but suppressing ligatures.
|
|
+%\def\`{{`}}
|
|
+%\def\'{{'}}
|
|
+
|
|
+% Used to generate quoted braces.
|
|
+\def\mylbrace {{\tt\char123}}
|
|
+\def\myrbrace {{\tt\char125}}
|
|
+\let\{=\mylbrace
|
|
+\let\}=\myrbrace
|
|
+\begingroup
|
|
+ % Definitions to produce \{ and \} commands for indices,
|
|
+ % and @{ and @} for the aux/toc files.
|
|
+ \catcode`\{ = \other \catcode`\} = \other
|
|
+ \catcode`\[ = 1 \catcode`\] = 2
|
|
+ \catcode`\! = 0 \catcode`\\ = \other
|
|
+ !gdef!lbracecmd[\{]%
|
|
+ !gdef!rbracecmd[\}]%
|
|
+ !gdef!lbraceatcmd[@{]%
|
|
+ !gdef!rbraceatcmd[@}]%
|
|
+!endgroup
|
|
+
|
|
+% @comma{} to avoid , parsing problems.
|
|
+\let\comma = ,
|
|
+
|
|
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
|
|
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
|
|
+\let\, = \c
|
|
+\let\dotaccent = \.
|
|
+\def\ringaccent#1{{\accent23 #1}}
|
|
+\let\tieaccent = \t
|
|
+\let\ubaraccent = \b
|
|
+\let\udotaccent = \d
|
|
+
|
|
+% Other special characters: @questiondown @exclamdown @ordf @ordm
|
|
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
|
|
+\def\questiondown{?`}
|
|
+\def\exclamdown{!`}
|
|
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
|
|
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
|
|
+
|
|
+% Dotless i and dotless j, used for accents.
|
|
+\def\imacro{i}
|
|
+\def\jmacro{j}
|
|
+\def\dotless#1{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\imacro \ptexi
|
|
+ \else\ifx\temp\jmacro \j
|
|
+ \else \errmessage{@dotless can be used only with i or j}%
|
|
+ \fi\fi
|
|
+}
|
|
+
|
|
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
|
|
+% period following counts as ending a sentence. (Idea found in latex.)
|
|
+%
|
|
+\edef\TeX{\TeX \spacefactor=1000 }
|
|
+
|
|
+% @LaTeX{} logo. Not quite the same results as the definition in
|
|
+% latex.ltx, since we use a different font for the raised A; it's most
|
|
+% convenient for us to use an explicitly smaller font, rather than using
|
|
+% the \scriptstyle font (since we don't reset \scriptstyle and
|
|
+% \scriptscriptstyle).
|
|
+%
|
|
+\def\LaTeX{%
|
|
+ L\kern-.36em
|
|
+ {\setbox0=\hbox{T}%
|
|
+ \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
|
|
+ \kern-.15em
|
|
+ \TeX
|
|
+}
|
|
+
|
|
+% Be sure we're in horizontal mode when doing a tie, since we make space
|
|
+% equivalent to this in @example-like environments. Otherwise, a space
|
|
+% at the beginning of a line will start with \penalty -- and
|
|
+% since \penalty is valid in vertical mode, we'd end up putting the
|
|
+% penalty on the vertical list instead of in the new paragraph.
|
|
+{\catcode`@ = 11
|
|
+ % Avoid using \@M directly, because that causes trouble
|
|
+ % if the definition is written into an index file.
|
|
+ \global\let\tiepenalty = \@M
|
|
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
|
|
+}
|
|
+
|
|
+% @: forces normal size whitespace following.
|
|
+\def\:{\spacefactor=1000 }
|
|
+
|
|
+% @* forces a line break.
|
|
+\def\*{\hfil\break\hbox{}\ignorespaces}
|
|
+
|
|
+% @/ allows a line break.
|
|
+\let\/=\allowbreak
|
|
+
|
|
+% @. is an end-of-sentence period.
|
|
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
|
|
+
|
|
+% @! is an end-of-sentence bang.
|
|
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
|
|
+
|
|
+% @? is an end-of-sentence query.
|
|
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
|
|
+
|
|
+% @frenchspacing on|off says whether to put extra space after punctuation.
|
|
+%
|
|
+\def\onword{on}
|
|
+\def\offword{off}
|
|
+%
|
|
+\parseargdef\frenchspacing{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\onword \plainfrenchspacing
|
|
+ \else\ifx\temp\offword \plainnonfrenchspacing
|
|
+ \else
|
|
+ \errhelp = \EMsimple
|
|
+ \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
|
|
+ \fi\fi
|
|
+}
|
|
+
|
|
+% @w prevents a word break. Without the \leavevmode, @w at the
|
|
+% beginning of a paragraph, when TeX is still in vertical mode, would
|
|
+% produce a whole line of output instead of starting the paragraph.
|
|
+\def\w#1{\leavevmode\hbox{#1}}
|
|
+
|
|
+% @group ... @end group forces ... to be all on one page, by enclosing
|
|
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
|
|
+% to keep its height that of a normal line. According to the rules for
|
|
+% \topskip (p.114 of the TeXbook), the glue inserted is
|
|
+% max (\topskip - \ht (first item), 0). If that height is large,
|
|
+% therefore, no glue is inserted, and the space between the headline and
|
|
+% the text is small, which looks bad.
|
|
+%
|
|
+% Another complication is that the group might be very large. This can
|
|
+% cause the glue on the previous page to be unduly stretched, because it
|
|
+% does not have much material. In this case, it's better to add an
|
|
+% explicit \vfill so that the extra space is at the bottom. The
|
|
+% threshold for doing this is if the group is more than \vfilllimit
|
|
+% percent of a page (\vfilllimit can be changed inside of @tex).
|
|
+%
|
|
+\newbox\groupbox
|
|
+\def\vfilllimit{0.7}
|
|
+%
|
|
+\envdef\group{%
|
|
+ \ifnum\catcode`\^^M=\active \else
|
|
+ \errhelp = \groupinvalidhelp
|
|
+ \errmessage{@group invalid in context where filling is enabled}%
|
|
+ \fi
|
|
+ \startsavinginserts
|
|
+ %
|
|
+ \setbox\groupbox = \vtop\bgroup
|
|
+ % Do @comment since we are called inside an environment such as
|
|
+ % @example, where each end-of-line in the input causes an
|
|
+ % end-of-line in the output. We don't want the end-of-line after
|
|
+ % the `@group' to put extra space in the output. Since @group
|
|
+ % should appear on a line by itself (according to the Texinfo
|
|
+ % manual), we don't worry about eating any user text.
|
|
+ \comment
|
|
+}
|
|
+%
|
|
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
|
|
+% \baselineskip glue before it, and (when the next line of text is done)
|
|
+% \lineskip glue after it. Thus, space below is not quite equal to space
|
|
+% above. But it's pretty close.
|
|
+\def\Egroup{%
|
|
+ % To get correct interline space between the last line of the group
|
|
+ % and the first line afterwards, we have to propagate \prevdepth.
|
|
+ \endgraf % Not \par, as it may have been set to \lisppar.
|
|
+ \global\dimen1 = \prevdepth
|
|
+ \egroup % End the \vtop.
|
|
+ % \dimen0 is the vertical size of the group's box.
|
|
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
|
|
+ % \dimen2 is how much space is left on the page (more or less).
|
|
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
|
|
+ % if the group doesn't fit on the current page, and it's a big big
|
|
+ % group, force a page break.
|
|
+ \ifdim \dimen0 > \dimen2
|
|
+ \ifdim \pagetotal < \vfilllimit\pageheight
|
|
+ \page
|
|
+ \fi
|
|
+ \fi
|
|
+ \box\groupbox
|
|
+ \prevdepth = \dimen1
|
|
+ \checkinserts
|
|
+}
|
|
+%
|
|
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
|
|
+% message, so this ends up printing `@group can only ...'.
|
|
+%
|
|
+\newhelp\groupinvalidhelp{%
|
|
+group can only be used in environments such as @example,^^J%
|
|
+where each line of input produces a line of output.}
|
|
+
|
|
+% @need space-in-mils
|
|
+% forces a page break if there is not space-in-mils remaining.
|
|
+
|
|
+\newdimen\mil \mil=0.001in
|
|
+
|
|
+% Old definition--didn't work.
|
|
+%\parseargdef\need{\par %
|
|
+%% This method tries to make TeX break the page naturally
|
|
+%% if the depth of the box does not fit.
|
|
+%{\baselineskip=0pt%
|
|
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
|
|
+%\prevdepth=-1000pt
|
|
+%}}
|
|
+
|
|
+\parseargdef\need{%
|
|
+ % Ensure vertical mode, so we don't make a big box in the middle of a
|
|
+ % paragraph.
|
|
+ \par
|
|
+ %
|
|
+ % If the @need value is less than one line space, it's useless.
|
|
+ \dimen0 = #1\mil
|
|
+ \dimen2 = \ht\strutbox
|
|
+ \advance\dimen2 by \dp\strutbox
|
|
+ \ifdim\dimen0 > \dimen2
|
|
+ %
|
|
+ % Do a \strut just to make the height of this box be normal, so the
|
|
+ % normal leading is inserted relative to the preceding line.
|
|
+ % And a page break here is fine.
|
|
+ \vtop to #1\mil{\strut\vfil}%
|
|
+ %
|
|
+ % TeX does not even consider page breaks if a penalty added to the
|
|
+ % main vertical list is 10000 or more. But in order to see if the
|
|
+ % empty box we just added fits on the page, we must make it consider
|
|
+ % page breaks. On the other hand, we don't want to actually break the
|
|
+ % page after the empty box. So we use a penalty of 9999.
|
|
+ %
|
|
+ % There is an extremely small chance that TeX will actually break the
|
|
+ % page at this \penalty, if there are no other feasible breakpoints in
|
|
+ % sight. (If the user is using lots of big @group commands, which
|
|
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
|
|
+ % good page breaking, for example.) However, I could not construct an
|
|
+ % example where a page broke at this \penalty; if it happens in a real
|
|
+ % document, then we can reconsider our strategy.
|
|
+ \penalty9999
|
|
+ %
|
|
+ % Back up by the size of the box, whether we did a page break or not.
|
|
+ \kern -#1\mil
|
|
+ %
|
|
+ % Do not allow a page break right after this kern.
|
|
+ \nobreak
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @br forces paragraph break (and is undocumented).
|
|
+
|
|
+\let\br = \par
|
|
+
|
|
+% @page forces the start of a new page.
|
|
+%
|
|
+\def\page{\par\vfill\supereject}
|
|
+
|
|
+% @exdent text....
|
|
+% outputs text on separate line in roman font, starting at standard page margin
|
|
+
|
|
+% This records the amount of indent in the innermost environment.
|
|
+% That's how much \exdent should take out.
|
|
+\newskip\exdentamount
|
|
+
|
|
+% This defn is used inside fill environments such as @defun.
|
|
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
|
|
+
|
|
+% This defn is used inside nofill environments such as @example.
|
|
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
|
|
+ \leftline{\hskip\leftskip{\rm#1}}}}
|
|
+
|
|
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
|
|
+% paragraph. For more general purposes, use the \margin insertion
|
|
+% class. WHICH is `l' or `r'.
|
|
+%
|
|
+\newskip\inmarginspacing \inmarginspacing=1cm
|
|
+\def\strutdepth{\dp\strutbox}
|
|
+%
|
|
+\def\doinmargin#1#2{\strut\vadjust{%
|
|
+ \nobreak
|
|
+ \kern-\strutdepth
|
|
+ \vtop to \strutdepth{%
|
|
+ \baselineskip=\strutdepth
|
|
+ \vss
|
|
+ % if you have multiple lines of stuff to put here, you'll need to
|
|
+ % make the vbox yourself of the appropriate size.
|
|
+ \ifx#1l%
|
|
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
|
|
+ \else
|
|
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
|
|
+ \fi
|
|
+ \null
|
|
+ }%
|
|
+}}
|
|
+\def\inleftmargin{\doinmargin l}
|
|
+\def\inrightmargin{\doinmargin r}
|
|
+%
|
|
+% @inmargin{TEXT [, RIGHT-TEXT]}
|
|
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
|
|
+% else use TEXT for both).
|
|
+%
|
|
+\def\inmargin#1{\parseinmargin #1,,\finish}
|
|
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
|
|
+ \setbox0 = \hbox{\ignorespaces #2}%
|
|
+ \ifdim\wd0 > 0pt
|
|
+ \def\lefttext{#1}% have both texts
|
|
+ \def\righttext{#2}%
|
|
+ \else
|
|
+ \def\lefttext{#1}% have only one text
|
|
+ \def\righttext{#1}%
|
|
+ \fi
|
|
+ %
|
|
+ \ifodd\pageno
|
|
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
|
|
+ \else
|
|
+ \def\temp{\inleftmargin\lefttext}%
|
|
+ \fi
|
|
+ \temp
|
|
+}
|
|
+
|
|
+% @include file insert text of that file as input.
|
|
+%
|
|
+\def\include{\parseargusing\filenamecatcodes\includezzz}
|
|
+\def\includezzz#1{%
|
|
+ \pushthisfilestack
|
|
+ \def\thisfile{#1}%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \def\temp{\input #1 }%
|
|
+ \expandafter
|
|
+ }\temp
|
|
+ \popthisfilestack
|
|
+}
|
|
+\def\filenamecatcodes{%
|
|
+ \catcode`\\=\other
|
|
+ \catcode`~=\other
|
|
+ \catcode`^=\other
|
|
+ \catcode`_=\other
|
|
+ \catcode`|=\other
|
|
+ \catcode`<=\other
|
|
+ \catcode`>=\other
|
|
+ \catcode`+=\other
|
|
+ \catcode`-=\other
|
|
+}
|
|
+
|
|
+\def\pushthisfilestack{%
|
|
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
|
|
+}
|
|
+\def\pushthisfilestackX{%
|
|
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
|
|
+}
|
|
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
|
|
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
|
|
+}
|
|
+
|
|
+\def\popthisfilestack{\errthisfilestackempty}
|
|
+\def\errthisfilestackempty{\errmessage{Internal error:
|
|
+ the stack of filenames is empty.}}
|
|
+
|
|
+\def\thisfile{}
|
|
+
|
|
+% @center line
|
|
+% outputs that line, centered.
|
|
+%
|
|
+\parseargdef\center{%
|
|
+ \ifhmode
|
|
+ \let\next\centerH
|
|
+ \else
|
|
+ \let\next\centerV
|
|
+ \fi
|
|
+ \next{\hfil \ignorespaces#1\unskip \hfil}%
|
|
+}
|
|
+\def\centerH#1{%
|
|
+ {%
|
|
+ \hfil\break
|
|
+ \advance\hsize by -\leftskip
|
|
+ \advance\hsize by -\rightskip
|
|
+ \line{#1}%
|
|
+ \break
|
|
+ }%
|
|
+}
|
|
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
|
|
+
|
|
+% @sp n outputs n lines of vertical space
|
|
+
|
|
+\parseargdef\sp{\vskip #1\baselineskip}
|
|
+
|
|
+% @comment ...line which is ignored...
|
|
+% @c is the same as @comment
|
|
+% @ignore ... @end ignore is another way to write a comment
|
|
+
|
|
+\def\comment{\begingroup \catcode`\^^M=\other%
|
|
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
|
|
+\commentxxx}
|
|
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
|
|
+
|
|
+\let\c=\comment
|
|
+
|
|
+% @paragraphindent NCHARS
|
|
+% We'll use ems for NCHARS, close enough.
|
|
+% NCHARS can also be the word `asis' or `none'.
|
|
+% We cannot feasibly implement @paragraphindent asis, though.
|
|
+%
|
|
+\def\asisword{asis} % no translation, these are keywords
|
|
+\def\noneword{none}
|
|
+%
|
|
+\parseargdef\paragraphindent{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\asisword
|
|
+ \else
|
|
+ \ifx\temp\noneword
|
|
+ \defaultparindent = 0pt
|
|
+ \else
|
|
+ \defaultparindent = #1em
|
|
+ \fi
|
|
+ \fi
|
|
+ \parindent = \defaultparindent
|
|
+}
|
|
+
|
|
+% @exampleindent NCHARS
|
|
+% We'll use ems for NCHARS like @paragraphindent.
|
|
+% It seems @exampleindent asis isn't necessary, but
|
|
+% I preserve it to make it similar to @paragraphindent.
|
|
+\parseargdef\exampleindent{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\asisword
|
|
+ \else
|
|
+ \ifx\temp\noneword
|
|
+ \lispnarrowing = 0pt
|
|
+ \else
|
|
+ \lispnarrowing = #1em
|
|
+ \fi
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @firstparagraphindent WORD
|
|
+% If WORD is `none', then suppress indentation of the first paragraph
|
|
+% after a section heading. If WORD is `insert', then do indent at such
|
|
+% paragraphs.
|
|
+%
|
|
+% The paragraph indentation is suppressed or not by calling
|
|
+% \suppressfirstparagraphindent, which the sectioning commands do.
|
|
+% We switch the definition of this back and forth according to WORD.
|
|
+% By default, we suppress indentation.
|
|
+%
|
|
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
|
|
+\def\insertword{insert}
|
|
+%
|
|
+\parseargdef\firstparagraphindent{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\noneword
|
|
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
|
|
+ \else\ifx\temp\insertword
|
|
+ \let\suppressfirstparagraphindent = \relax
|
|
+ \else
|
|
+ \errhelp = \EMsimple
|
|
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
|
|
+ \fi\fi
|
|
+}
|
|
+
|
|
+% Here is how we actually suppress indentation. Redefine \everypar to
|
|
+% \kern backwards by \parindent, and then reset itself to empty.
|
|
+%
|
|
+% We also make \indent itself not actually do anything until the next
|
|
+% paragraph.
|
|
+%
|
|
+\gdef\dosuppressfirstparagraphindent{%
|
|
+ \gdef\indent{%
|
|
+ \restorefirstparagraphindent
|
|
+ \indent
|
|
+ }%
|
|
+ \gdef\noindent{%
|
|
+ \restorefirstparagraphindent
|
|
+ \noindent
|
|
+ }%
|
|
+ \global\everypar = {%
|
|
+ \kern -\parindent
|
|
+ \restorefirstparagraphindent
|
|
+ }%
|
|
+}
|
|
+
|
|
+\gdef\restorefirstparagraphindent{%
|
|
+ \global \let \indent = \ptexindent
|
|
+ \global \let \noindent = \ptexnoindent
|
|
+ \global \everypar = {}%
|
|
+}
|
|
+
|
|
+
|
|
+% @asis just yields its argument. Used with @table, for example.
|
|
+%
|
|
+\def\asis#1{#1}
|
|
+
|
|
+% @math outputs its argument in math mode.
|
|
+%
|
|
+% One complication: _ usually means subscripts, but it could also mean
|
|
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
|
|
+% _ active, and distinguish by seeing if the current family is \slfam,
|
|
+% which is what @var uses.
|
|
+{
|
|
+ \catcode\underChar = \active
|
|
+ \gdef\mathunderscore{%
|
|
+ \catcode\underChar=\active
|
|
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
|
|
+ }
|
|
+}
|
|
+% Another complication: we want \\ (and @\) to output a \ character.
|
|
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
|
|
+% this is not advertised and we don't care. Texinfo does not
|
|
+% otherwise define @\.
|
|
+%
|
|
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
|
|
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
|
|
+%
|
|
+\def\math{%
|
|
+ \tex
|
|
+ \mathunderscore
|
|
+ \let\\ = \mathbackslash
|
|
+ \mathactive
|
|
+ $\finishmath
|
|
+}
|
|
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
|
|
+
|
|
+% Some active characters (such as <) are spaced differently in math.
|
|
+% We have to reset their definitions in case the @math was an argument
|
|
+% to a command which sets the catcodes (such as @item or @section).
|
|
+%
|
|
+{
|
|
+ \catcode`^ = \active
|
|
+ \catcode`< = \active
|
|
+ \catcode`> = \active
|
|
+ \catcode`+ = \active
|
|
+ \gdef\mathactive{%
|
|
+ \let^ = \ptexhat
|
|
+ \let< = \ptexless
|
|
+ \let> = \ptexgtr
|
|
+ \let+ = \ptexplus
|
|
+ }
|
|
+}
|
|
+
|
|
+% @bullet and @minus need the same treatment as @math, just above.
|
|
+\def\bullet{$\ptexbullet$}
|
|
+\def\minus{$-$}
|
|
+
|
|
+% @dots{} outputs an ellipsis using the current font.
|
|
+% We do .5em per period so that it has the same spacing in a typewriter
|
|
+% font as three actual period characters.
|
|
+%
|
|
+\def\dots{%
|
|
+ \leavevmode
|
|
+ \hbox to 1.5em{%
|
|
+ \hskip 0pt plus 0.25fil
|
|
+ .\hfil.\hfil.%
|
|
+ \hskip 0pt plus 0.5fil
|
|
+ }%
|
|
+}
|
|
+
|
|
+% @enddots{} is an end-of-sentence ellipsis.
|
|
+%
|
|
+\def\enddots{%
|
|
+ \dots
|
|
+ \spacefactor=\endofsentencespacefactor
|
|
+}
|
|
+
|
|
+% @comma{} is so commas can be inserted into text without messing up
|
|
+% Texinfo's parsing.
|
|
+%
|
|
+\let\comma = ,
|
|
+
|
|
+% @refill is a no-op.
|
|
+\let\refill=\relax
|
|
+
|
|
+% If working on a large document in chapters, it is convenient to
|
|
+% be able to disable indexing, cross-referencing, and contents, for test runs.
|
|
+% This is done with @novalidate (before @setfilename).
|
|
+%
|
|
+\newif\iflinks \linkstrue % by default we want the aux files.
|
|
+\let\novalidate = \linksfalse
|
|
+
|
|
+% @setfilename is done at the beginning of every texinfo file.
|
|
+% So open here the files we need to have open while reading the input.
|
|
+% This makes it possible to make a .fmt file for texinfo.
|
|
+\def\setfilename{%
|
|
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
|
|
+ \iflinks
|
|
+ \tryauxfile
|
|
+ % Open the new aux file. TeX will close it automatically at exit.
|
|
+ \immediate\openout\auxfile=\jobname.aux
|
|
+ \fi % \openindices needs to do some work in any case.
|
|
+ \openindices
|
|
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
|
|
+ %
|
|
+ % If texinfo.cnf is present on the system, read it.
|
|
+ % Useful for site-wide @afourpaper, etc.
|
|
+ \openin 1 texinfo.cnf
|
|
+ \ifeof 1 \else \input texinfo.cnf \fi
|
|
+ \closein 1
|
|
+ %
|
|
+ \comment % Ignore the actual filename.
|
|
+}
|
|
+
|
|
+% Called from \setfilename.
|
|
+%
|
|
+\def\openindices{%
|
|
+ \newindex{cp}%
|
|
+ \newcodeindex{fn}%
|
|
+ \newcodeindex{vr}%
|
|
+ \newcodeindex{tp}%
|
|
+ \newcodeindex{ky}%
|
|
+ \newcodeindex{pg}%
|
|
+}
|
|
+
|
|
+% @bye.
|
|
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
|
|
+
|
|
+
|
|
+\message{pdf,}
|
|
+% adobe `portable' document format
|
|
+\newcount\tempnum
|
|
+\newcount\lnkcount
|
|
+\newtoks\filename
|
|
+\newcount\filenamelength
|
|
+\newcount\pgn
|
|
+\newtoks\toksA
|
|
+\newtoks\toksB
|
|
+\newtoks\toksC
|
|
+\newtoks\toksD
|
|
+\newbox\boxA
|
|
+\newcount\countA
|
|
+\newif\ifpdf
|
|
+\newif\ifpdfmakepagedest
|
|
+
|
|
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
|
|
+% can be set). So we test for \relax and 0 as well as \undefined,
|
|
+% borrowed from ifpdf.sty.
|
|
+\ifx\pdfoutput\undefined
|
|
+\else
|
|
+ \ifx\pdfoutput\relax
|
|
+ \else
|
|
+ \ifcase\pdfoutput
|
|
+ \else
|
|
+ \pdftrue
|
|
+ \fi
|
|
+ \fi
|
|
+\fi
|
|
+
|
|
+% PDF uses PostScript string constants for the names of xref targets, to
|
|
+% for display in the outlines, and in other places. Thus, we have to
|
|
+% double any backslashes. Otherwise, a name like "\node" will be
|
|
+% interpreted as a newline (\n), followed by o, d, e. Not good.
|
|
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
|
|
+% (and related messages, the final outcome is that it is up to the TeX
|
|
+% user to double the backslashes and otherwise make the string valid, so
|
|
+% that's we do).
|
|
+
|
|
+% double active backslashes.
|
|
+%
|
|
+{\catcode`\@=0 \catcode`\\=\active
|
|
+ @gdef@activebackslash{@catcode`@\=@active @otherbackslash}
|
|
+ @gdef@activebackslashdouble{%
|
|
+ @catcode@backChar=@active
|
|
+ @let\=@doublebackslash}
|
|
+}
|
|
+
|
|
+% To handle parens, we must adopt a different approach, since parens are
|
|
+% not active characters. hyperref.dtx (which has the same problem as
|
|
+% us) handles it with this amazing macro to replace tokens. I've
|
|
+% tinkered with it a little for texinfo, but it's definitely from there.
|
|
+%
|
|
+% #1 is the tokens to replace.
|
|
+% #2 is the replacement.
|
|
+% #3 is the control sequence with the string.
|
|
+%
|
|
+\def\HyPsdSubst#1#2#3{%
|
|
+ \def\HyPsdReplace##1#1##2\END{%
|
|
+ ##1%
|
|
+ \ifx\\##2\\%
|
|
+ \else
|
|
+ #2%
|
|
+ \HyReturnAfterFi{%
|
|
+ \HyPsdReplace##2\END
|
|
+ }%
|
|
+ \fi
|
|
+ }%
|
|
+ \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
|
|
+}
|
|
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
|
|
+
|
|
+% #1 is a control sequence in which to do the replacements.
|
|
+\def\backslashparens#1{%
|
|
+ \xdef#1{#1}% redefine it as its expansion; the definition is simply
|
|
+ % \lastnode when called from \setref -> \pdfmkdest.
|
|
+ \HyPsdSubst{(}{\backslashlparen}{#1}%
|
|
+ \HyPsdSubst{)}{\backslashrparen}{#1}%
|
|
+}
|
|
+
|
|
+{\catcode\exclamChar = 0 \catcode\backChar = \other
|
|
+ !gdef!backslashlparen{\(}%
|
|
+ !gdef!backslashrparen{\)}%
|
|
+}
|
|
+
|
|
+\ifpdf
|
|
+ \input pdfcolor
|
|
+ \pdfcatalog{/PageMode /UseOutlines}%
|
|
+ \def\dopdfimage#1#2#3{%
|
|
+ \def\imagewidth{#2}%
|
|
+ \def\imageheight{#3}%
|
|
+ % without \immediate, pdftex seg faults when the same image is
|
|
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
|
|
+ \ifnum\pdftexversion < 14
|
|
+ \immediate\pdfimage
|
|
+ \else
|
|
+ \immediate\pdfximage
|
|
+ \fi
|
|
+ \ifx\empty\imagewidth\else width \imagewidth \fi
|
|
+ \ifx\empty\imageheight\else height \imageheight \fi
|
|
+ \ifnum\pdftexversion<13
|
|
+ #1.pdf%
|
|
+ \else
|
|
+ {#1.pdf}%
|
|
+ \fi
|
|
+ \ifnum\pdftexversion < 14 \else
|
|
+ \pdfrefximage \pdflastximage
|
|
+ \fi}
|
|
+ \def\pdfmkdest#1{{%
|
|
+ % We have to set dummies so commands such as @code, and characters
|
|
+ % such as \, aren't expanded when present in a section title.
|
|
+ \atdummies
|
|
+ \activebackslashdouble
|
|
+ \def\pdfdestname{#1}%
|
|
+ \backslashparens\pdfdestname
|
|
+ \pdfdest name{\pdfdestname} xyz%
|
|
+ }}%
|
|
+ %
|
|
+ % used to mark target names; must be expandable.
|
|
+ \def\pdfmkpgn#1{#1}%
|
|
+ %
|
|
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
|
|
+ \def\endlink{\Black\pdfendlink}
|
|
+ % Adding outlines to PDF; macros for calculating structure of outlines
|
|
+ % come from Petr Olsak
|
|
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
|
|
+ \else \csname#1\endcsname \fi}
|
|
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
|
|
+ \advance\tempnum by 1
|
|
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
|
|
+ %
|
|
+ % #1 is the section text, which is what will be displayed in the
|
|
+ % outline by the pdf viewer. #2 is the pdf expression for the number
|
|
+ % of subentries (or empty, for subsubsections). #3 is the node text,
|
|
+ % which might be empty if this toc entry had no corresponding node.
|
|
+ % #4 is the page number
|
|
+ %
|
|
+ \def\dopdfoutline#1#2#3#4{%
|
|
+ % Generate a link to the node text if that exists; else, use the
|
|
+ % page number. We could generate a destination for the section
|
|
+ % text in the case where a section has no node, but it doesn't
|
|
+ % seem worth the trouble, since most documents are normally structured.
|
|
+ \def\pdfoutlinedest{#3}%
|
|
+ \ifx\pdfoutlinedest\empty
|
|
+ \def\pdfoutlinedest{#4}%
|
|
+ \else
|
|
+ % Doubled backslashes in the name.
|
|
+ {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
|
|
+ \backslashparens\pdfoutlinedest}%
|
|
+ \fi
|
|
+ %
|
|
+ % Also double the backslashes in the display string.
|
|
+ {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
|
|
+ \backslashparens\pdfoutlinetext}%
|
|
+ %
|
|
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
|
|
+ }
|
|
+ %
|
|
+ \def\pdfmakeoutlines{%
|
|
+ \begingroup
|
|
+ % Thanh's hack / proper braces in bookmarks
|
|
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
|
|
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
|
|
+ %
|
|
+ % Read toc silently, to get counts of subentries for \pdfoutline.
|
|
+ \def\numchapentry##1##2##3##4{%
|
|
+ \def\thischapnum{##2}%
|
|
+ \def\thissecnum{0}%
|
|
+ \def\thissubsecnum{0}%
|
|
+ }%
|
|
+ \def\numsecentry##1##2##3##4{%
|
|
+ \advancenumber{chap\thischapnum}%
|
|
+ \def\thissecnum{##2}%
|
|
+ \def\thissubsecnum{0}%
|
|
+ }%
|
|
+ \def\numsubsecentry##1##2##3##4{%
|
|
+ \advancenumber{sec\thissecnum}%
|
|
+ \def\thissubsecnum{##2}%
|
|
+ }%
|
|
+ \def\numsubsubsecentry##1##2##3##4{%
|
|
+ \advancenumber{subsec\thissubsecnum}%
|
|
+ }%
|
|
+ \def\thischapnum{0}%
|
|
+ \def\thissecnum{0}%
|
|
+ \def\thissubsecnum{0}%
|
|
+ %
|
|
+ % use \def rather than \let here because we redefine \chapentry et
|
|
+ % al. a second time, below.
|
|
+ \def\appentry{\numchapentry}%
|
|
+ \def\appsecentry{\numsecentry}%
|
|
+ \def\appsubsecentry{\numsubsecentry}%
|
|
+ \def\appsubsubsecentry{\numsubsubsecentry}%
|
|
+ \def\unnchapentry{\numchapentry}%
|
|
+ \def\unnsecentry{\numsecentry}%
|
|
+ \def\unnsubsecentry{\numsubsecentry}%
|
|
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
|
|
+ \readdatafile{toc}%
|
|
+ %
|
|
+ % Read toc second time, this time actually producing the outlines.
|
|
+ % The `-' means take the \expnumber as the absolute number of
|
|
+ % subentries, which we calculated on our first read of the .toc above.
|
|
+ %
|
|
+ % We use the node names as the destinations.
|
|
+ \def\numchapentry##1##2##3##4{%
|
|
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
|
|
+ \def\numsecentry##1##2##3##4{%
|
|
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
|
|
+ \def\numsubsecentry##1##2##3##4{%
|
|
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
|
|
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
|
|
+ \dopdfoutline{##1}{}{##3}{##4}}%
|
|
+ %
|
|
+ % PDF outlines are displayed using system fonts, instead of
|
|
+ % document fonts. Therefore we cannot use special characters,
|
|
+ % since the encoding is unknown. For example, the eogonek from
|
|
+ % Latin 2 (0xea) gets translated to a | character. Info from
|
|
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
|
|
+ %
|
|
+ % xx to do this right, we have to translate 8-bit characters to
|
|
+ % their "best" equivalent, based on the @documentencoding. Right
|
|
+ % now, I guess we'll just let the pdf reader have its way.
|
|
+ \indexnofonts
|
|
+ \setupdatafile
|
|
+ \activebackslash
|
|
+ \input \jobname.toc
|
|
+ \endgroup
|
|
+ }
|
|
+ %
|
|
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
|
|
+ \ifx\PP\D\let\nextsp\relax
|
|
+ \else\let\nextsp\skipspaces
|
|
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
|
|
+ \advance\filenamelength by 1
|
|
+ \fi
|
|
+ \fi
|
|
+ \nextsp}
|
|
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
|
|
+ \ifnum\pdftexversion < 14
|
|
+ \let \startlink \pdfannotlink
|
|
+ \else
|
|
+ \let \startlink \pdfstartlink
|
|
+ \fi
|
|
+ \def\pdfurl#1{%
|
|
+ \begingroup
|
|
+ \normalturnoffactive\def\@{@}%
|
|
+ \makevalueexpandable
|
|
+ \leavevmode\Red
|
|
+ \startlink attr{/Border [0 0 0]}%
|
|
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
|
|
+ \endgroup}
|
|
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
|
|
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
|
|
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
|
|
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
|
|
+ \def\maketoks{%
|
|
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
|
|
+ \ifx\first0\adn0
|
|
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
|
|
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
|
|
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
|
|
+ \else
|
|
+ \ifnum0=\countA\else\makelink\fi
|
|
+ \ifx\first.\let\next=\done\else
|
|
+ \let\next=\maketoks
|
|
+ \addtokens{\toksB}{\the\toksD}
|
|
+ \ifx\first,\addtokens{\toksB}{\space}\fi
|
|
+ \fi
|
|
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
|
|
+ \next}
|
|
+ \def\makelink{\addtokens{\toksB}%
|
|
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
|
|
+ \def\pdflink#1{%
|
|
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
|
|
+ \linkcolor #1\endlink}
|
|
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
|
|
+\else
|
|
+ \let\pdfmkdest = \gobble
|
|
+ \let\pdfurl = \gobble
|
|
+ \let\endlink = \relax
|
|
+ \let\linkcolor = \relax
|
|
+ \let\pdfmakeoutlines = \relax
|
|
+\fi % \ifx\pdfoutput
|
|
+
|
|
+
|
|
+\message{fonts,}
|
|
+
|
|
+% Change the current font style to #1, remembering it in \curfontstyle.
|
|
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
|
|
+% italics, not bold italics.
|
|
+%
|
|
+\def\setfontstyle#1{%
|
|
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
|
|
+ \csname ten#1\endcsname % change the current font
|
|
+}
|
|
+
|
|
+% Select #1 fonts with the current style.
|
|
+%
|
|
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
|
|
+
|
|
+\def\rm{\fam=0 \setfontstyle{rm}}
|
|
+\def\it{\fam=\itfam \setfontstyle{it}}
|
|
+\def\sl{\fam=\slfam \setfontstyle{sl}}
|
|
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
|
|
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
|
|
+
|
|
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
|
|
+% So we set up a \sf.
|
|
+\newfam\sffam
|
|
+\def\sf{\fam=\sffam \setfontstyle{sf}}
|
|
+\let\li = \sf % Sometimes we call it \li, not \sf.
|
|
+
|
|
+% We don't need math for this font style.
|
|
+\def\ttsl{\setfontstyle{ttsl}}
|
|
+
|
|
+% Default leading.
|
|
+\newdimen\textleading \textleading = 13.2pt
|
|
+
|
|
+% Set the baselineskip to #1, and the lineskip and strut size
|
|
+% correspondingly. There is no deep meaning behind these magic numbers
|
|
+% used as factors; they just match (closely enough) what Knuth defined.
|
|
+%
|
|
+\def\lineskipfactor{.08333}
|
|
+\def\strutheightpercent{.70833}
|
|
+\def\strutdepthpercent {.29167}
|
|
+%
|
|
+\def\setleading#1{%
|
|
+ \normalbaselineskip = #1\relax
|
|
+ \normallineskip = \lineskipfactor\normalbaselineskip
|
|
+ \normalbaselines
|
|
+ \setbox\strutbox =\hbox{%
|
|
+ \vrule width0pt height\strutheightpercent\baselineskip
|
|
+ depth \strutdepthpercent \baselineskip
|
|
+ }%
|
|
+}
|
|
+
|
|
+% Set the font macro #1 to the font named #2, adding on the
|
|
+% specified font prefix (normally `cm').
|
|
+% #3 is the font's design size, #4 is a scale factor
|
|
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
|
|
+
|
|
+% Use cm as the default font prefix.
|
|
+% To specify the font prefix, you must define \fontprefix
|
|
+% before you read in texinfo.tex.
|
|
+\ifx\fontprefix\undefined
|
|
+\def\fontprefix{cm}
|
|
+\fi
|
|
+% Support font families that don't use the same naming scheme as CM.
|
|
+\def\rmshape{r}
|
|
+\def\rmbshape{bx} %where the normal face is bold
|
|
+\def\bfshape{b}
|
|
+\def\bxshape{bx}
|
|
+\def\ttshape{tt}
|
|
+\def\ttbshape{tt}
|
|
+\def\ttslshape{sltt}
|
|
+\def\itshape{ti}
|
|
+\def\itbshape{bxti}
|
|
+\def\slshape{sl}
|
|
+\def\slbshape{bxsl}
|
|
+\def\sfshape{ss}
|
|
+\def\sfbshape{ss}
|
|
+\def\scshape{csc}
|
|
+\def\scbshape{csc}
|
|
+
|
|
+% Text fonts (11.2pt, magstep1).
|
|
+\def\textnominalsize{11pt}
|
|
+\edef\mainmagstep{\magstephalf}
|
|
+\setfont\textrm\rmshape{10}{\mainmagstep}
|
|
+\setfont\texttt\ttshape{10}{\mainmagstep}
|
|
+\setfont\textbf\bfshape{10}{\mainmagstep}
|
|
+\setfont\textit\itshape{10}{\mainmagstep}
|
|
+\setfont\textsl\slshape{10}{\mainmagstep}
|
|
+\setfont\textsf\sfshape{10}{\mainmagstep}
|
|
+\setfont\textsc\scshape{10}{\mainmagstep}
|
|
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
|
|
+\font\texti=cmmi10 scaled \mainmagstep
|
|
+\font\textsy=cmsy10 scaled \mainmagstep
|
|
+
|
|
+% A few fonts for @defun names and args.
|
|
+\setfont\defbf\bfshape{10}{\magstep1}
|
|
+\setfont\deftt\ttshape{10}{\magstep1}
|
|
+\setfont\defttsl\ttslshape{10}{\magstep1}
|
|
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
|
|
+
|
|
+% Fonts for indices, footnotes, small examples (9pt).
|
|
+\def\smallnominalsize{9pt}
|
|
+\setfont\smallrm\rmshape{9}{1000}
|
|
+\setfont\smalltt\ttshape{9}{1000}
|
|
+\setfont\smallbf\bfshape{10}{900}
|
|
+\setfont\smallit\itshape{9}{1000}
|
|
+\setfont\smallsl\slshape{9}{1000}
|
|
+\setfont\smallsf\sfshape{9}{1000}
|
|
+\setfont\smallsc\scshape{10}{900}
|
|
+\setfont\smallttsl\ttslshape{10}{900}
|
|
+\font\smalli=cmmi9
|
|
+\font\smallsy=cmsy9
|
|
+
|
|
+% Fonts for small examples (8pt).
|
|
+\def\smallernominalsize{8pt}
|
|
+\setfont\smallerrm\rmshape{8}{1000}
|
|
+\setfont\smallertt\ttshape{8}{1000}
|
|
+\setfont\smallerbf\bfshape{10}{800}
|
|
+\setfont\smallerit\itshape{8}{1000}
|
|
+\setfont\smallersl\slshape{8}{1000}
|
|
+\setfont\smallersf\sfshape{8}{1000}
|
|
+\setfont\smallersc\scshape{10}{800}
|
|
+\setfont\smallerttsl\ttslshape{10}{800}
|
|
+\font\smalleri=cmmi8
|
|
+\font\smallersy=cmsy8
|
|
+
|
|
+% Fonts for title page (20.4pt):
|
|
+\def\titlenominalsize{20pt}
|
|
+\setfont\titlerm\rmbshape{12}{\magstep3}
|
|
+\setfont\titleit\itbshape{10}{\magstep4}
|
|
+\setfont\titlesl\slbshape{10}{\magstep4}
|
|
+\setfont\titlett\ttbshape{12}{\magstep3}
|
|
+\setfont\titlettsl\ttslshape{10}{\magstep4}
|
|
+\setfont\titlesf\sfbshape{17}{\magstep1}
|
|
+\let\titlebf=\titlerm
|
|
+\setfont\titlesc\scbshape{10}{\magstep4}
|
|
+\font\titlei=cmmi12 scaled \magstep3
|
|
+\font\titlesy=cmsy10 scaled \magstep4
|
|
+\def\authorrm{\secrm}
|
|
+\def\authortt{\sectt}
|
|
+
|
|
+% Chapter (and unnumbered) fonts (17.28pt).
|
|
+\def\chapnominalsize{17pt}
|
|
+\setfont\chaprm\rmbshape{12}{\magstep2}
|
|
+\setfont\chapit\itbshape{10}{\magstep3}
|
|
+\setfont\chapsl\slbshape{10}{\magstep3}
|
|
+\setfont\chaptt\ttbshape{12}{\magstep2}
|
|
+\setfont\chapttsl\ttslshape{10}{\magstep3}
|
|
+\setfont\chapsf\sfbshape{17}{1000}
|
|
+\let\chapbf=\chaprm
|
|
+\setfont\chapsc\scbshape{10}{\magstep3}
|
|
+\font\chapi=cmmi12 scaled \magstep2
|
|
+\font\chapsy=cmsy10 scaled \magstep3
|
|
+
|
|
+% Section fonts (14.4pt).
|
|
+\def\secnominalsize{14pt}
|
|
+\setfont\secrm\rmbshape{12}{\magstep1}
|
|
+\setfont\secit\itbshape{10}{\magstep2}
|
|
+\setfont\secsl\slbshape{10}{\magstep2}
|
|
+\setfont\sectt\ttbshape{12}{\magstep1}
|
|
+\setfont\secttsl\ttslshape{10}{\magstep2}
|
|
+\setfont\secsf\sfbshape{12}{\magstep1}
|
|
+\let\secbf\secrm
|
|
+\setfont\secsc\scbshape{10}{\magstep2}
|
|
+\font\seci=cmmi12 scaled \magstep1
|
|
+\font\secsy=cmsy10 scaled \magstep2
|
|
+
|
|
+% Subsection fonts (13.15pt).
|
|
+\def\ssecnominalsize{13pt}
|
|
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
|
|
+\setfont\ssecit\itbshape{10}{1315}
|
|
+\setfont\ssecsl\slbshape{10}{1315}
|
|
+\setfont\ssectt\ttbshape{12}{\magstephalf}
|
|
+\setfont\ssecttsl\ttslshape{10}{1315}
|
|
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
|
|
+\let\ssecbf\ssecrm
|
|
+\setfont\ssecsc\scbshape{10}{1315}
|
|
+\font\sseci=cmmi12 scaled \magstephalf
|
|
+\font\ssecsy=cmsy10 scaled 1315
|
|
+
|
|
+% Reduced fonts for @acro in text (10pt).
|
|
+\def\reducednominalsize{10pt}
|
|
+\setfont\reducedrm\rmshape{10}{1000}
|
|
+\setfont\reducedtt\ttshape{10}{1000}
|
|
+\setfont\reducedbf\bfshape{10}{1000}
|
|
+\setfont\reducedit\itshape{10}{1000}
|
|
+\setfont\reducedsl\slshape{10}{1000}
|
|
+\setfont\reducedsf\sfshape{10}{1000}
|
|
+\setfont\reducedsc\scshape{10}{1000}
|
|
+\setfont\reducedttsl\ttslshape{10}{1000}
|
|
+\font\reducedi=cmmi10
|
|
+\font\reducedsy=cmsy10
|
|
+
|
|
+% In order for the font changes to affect most math symbols and letters,
|
|
+% we have to define the \textfont of the standard families. Since
|
|
+% texinfo doesn't allow for producing subscripts and superscripts except
|
|
+% in the main text, we don't bother to reset \scriptfont and
|
|
+% \scriptscriptfont (which would also require loading a lot more fonts).
|
|
+%
|
|
+\def\resetmathfonts{%
|
|
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
|
|
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
|
|
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
|
|
+}
|
|
+
|
|
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
|
|
+% of just \STYLE. We do this because \STYLE needs to also set the
|
|
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
|
|
+% \tenSTYLE to set the current font.
|
|
+%
|
|
+% Each font-changing command also sets the names \lsize (one size lower)
|
|
+% and \lllsize (three sizes lower). These relative commands are used in
|
|
+% the LaTeX logo and acronyms.
|
|
+%
|
|
+% This all needs generalizing, badly.
|
|
+%
|
|
+\def\textfonts{%
|
|
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
|
|
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
|
|
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
|
|
+ \let\tenttsl=\textttsl
|
|
+ \def\curfontsize{text}%
|
|
+ \def\lsize{reduced}\def\lllsize{smaller}%
|
|
+ \resetmathfonts \setleading{\textleading}}
|
|
+\def\titlefonts{%
|
|
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
|
|
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
|
|
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
|
|
+ \let\tenttsl=\titlettsl
|
|
+ \def\curfontsize{title}%
|
|
+ \def\lsize{chap}\def\lllsize{subsec}%
|
|
+ \resetmathfonts \setleading{25pt}}
|
|
+\def\titlefont#1{{\titlefonts\rm #1}}
|
|
+\def\chapfonts{%
|
|
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
|
|
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
|
|
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
|
|
+ \let\tenttsl=\chapttsl
|
|
+ \def\curfontsize{chap}%
|
|
+ \def\lsize{sec}\def\lllsize{text}%
|
|
+ \resetmathfonts \setleading{19pt}}
|
|
+\def\secfonts{%
|
|
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
|
|
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
|
|
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
|
|
+ \let\tenttsl=\secttsl
|
|
+ \def\curfontsize{sec}%
|
|
+ \def\lsize{subsec}\def\lllsize{reduced}%
|
|
+ \resetmathfonts \setleading{16pt}}
|
|
+\def\subsecfonts{%
|
|
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
|
|
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
|
|
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
|
|
+ \let\tenttsl=\ssecttsl
|
|
+ \def\curfontsize{ssec}%
|
|
+ \def\lsize{text}\def\lllsize{small}%
|
|
+ \resetmathfonts \setleading{15pt}}
|
|
+\let\subsubsecfonts = \subsecfonts
|
|
+\def\reducedfonts{%
|
|
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
|
|
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
|
|
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
|
|
+ \let\tenttsl=\reducedttsl
|
|
+ \def\curfontsize{reduced}%
|
|
+ \def\lsize{small}\def\lllsize{smaller}%
|
|
+ \resetmathfonts \setleading{10.5pt}}
|
|
+\def\smallfonts{%
|
|
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
|
|
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
|
|
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
|
|
+ \let\tenttsl=\smallttsl
|
|
+ \def\curfontsize{small}%
|
|
+ \def\lsize{smaller}\def\lllsize{smaller}%
|
|
+ \resetmathfonts \setleading{10.5pt}}
|
|
+\def\smallerfonts{%
|
|
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
|
|
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
|
|
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
|
|
+ \let\tenttsl=\smallerttsl
|
|
+ \def\curfontsize{smaller}%
|
|
+ \def\lsize{smaller}\def\lllsize{smaller}%
|
|
+ \resetmathfonts \setleading{9.5pt}}
|
|
+
|
|
+% Set the fonts to use with the @small... environments.
|
|
+\let\smallexamplefonts = \smallfonts
|
|
+
|
|
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
|
|
+% can fit this many characters:
|
|
+% 8.5x11=86 smallbook=72 a4=90 a5=69
|
|
+% If we use \scriptfonts (8pt), then we can fit this many characters:
|
|
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
|
|
+% For me, subjectively, the few extra characters that fit aren't worth
|
|
+% the additional smallness of 8pt. So I'm making the default 9pt.
|
|
+%
|
|
+% By the way, for comparison, here's what fits with @example (10pt):
|
|
+% 8.5x11=71 smallbook=60 a4=75 a5=58
|
|
+%
|
|
+% I wish the USA used A4 paper.
|
|
+% --karl, 24jan03.
|
|
+
|
|
+
|
|
+% Set up the default fonts, so we can use them for creating boxes.
|
|
+%
|
|
+\textfonts \rm
|
|
+
|
|
+% Define these so they can be easily changed for other fonts.
|
|
+\def\angleleft{$\langle$}
|
|
+\def\angleright{$\rangle$}
|
|
+
|
|
+% Count depth in font-changes, for error checks
|
|
+\newcount\fontdepth \fontdepth=0
|
|
+
|
|
+% Fonts for short table of contents.
|
|
+\setfont\shortcontrm\rmshape{12}{1000}
|
|
+\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
|
|
+\setfont\shortcontsl\slshape{12}{1000}
|
|
+\setfont\shortconttt\ttshape{12}{1000}
|
|
+
|
|
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
|
|
+%% serif) and @ii for TeX italic
|
|
+
|
|
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
|
|
+% unless the following character is such as not to need one.
|
|
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
|
|
+ \ptexslash\fi\fi\fi}
|
|
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
|
|
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
|
|
+
|
|
+% like \smartslanted except unconditionally uses \ttsl.
|
|
+% @var is set to this for defun arguments.
|
|
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
|
|
+
|
|
+% like \smartslanted except unconditionally use \sl. We never want
|
|
+% ttsl for book titles, do we?
|
|
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
|
|
+
|
|
+\let\i=\smartitalic
|
|
+\let\slanted=\smartslanted
|
|
+\let\var=\smartslanted
|
|
+\let\dfn=\smartslanted
|
|
+\let\emph=\smartitalic
|
|
+
|
|
+% @b, explicit bold.
|
|
+\def\b#1{{\bf #1}}
|
|
+\let\strong=\b
|
|
+
|
|
+% @sansserif, explicit sans.
|
|
+\def\sansserif#1{{\sf #1}}
|
|
+
|
|
+% We can't just use \exhyphenpenalty, because that only has effect at
|
|
+% the end of a paragraph. Restore normal hyphenation at the end of the
|
|
+% group within which \nohyphenation is presumably called.
|
|
+%
|
|
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
|
|
+\def\restorehyphenation{\hyphenchar\font = `- }
|
|
+
|
|
+% Set sfcode to normal for the chars that usually have another value.
|
|
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
|
|
+% sometimes \x has an active definition that messes things up.
|
|
+%
|
|
+\catcode`@=11
|
|
+ \def\plainfrenchspacing{%
|
|
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
|
|
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
|
|
+ \def\endofsentencespacefactor{1000}% for @. and friends
|
|
+ }
|
|
+ \def\plainnonfrenchspacing{%
|
|
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
|
|
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
|
|
+ \def\endofsentencespacefactor{3000}% for @. and friends
|
|
+ }
|
|
+\catcode`@=\other
|
|
+\def\endofsentencespacefactor{3000}% default
|
|
+
|
|
+\def\t#1{%
|
|
+ {\tt \rawbackslash \plainfrenchspacing #1}%
|
|
+ \null
|
|
+}
|
|
+\def\samp#1{`\tclose{#1}'\null}
|
|
+\setfont\keyrm\rmshape{8}{1000}
|
|
+\font\keysy=cmsy9
|
|
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
|
|
+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
|
|
+ \vbox{\hrule\kern-0.4pt
|
|
+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
|
|
+ \kern-0.4pt\hrule}%
|
|
+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
|
|
+% The old definition, with no lozenge:
|
|
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
|
|
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
|
|
+
|
|
+% @file, @option are the same as @samp.
|
|
+\let\file=\samp
|
|
+\let\option=\samp
|
|
+
|
|
+% @code is a modification of @t,
|
|
+% which makes spaces the same size as normal in the surrounding text.
|
|
+\def\tclose#1{%
|
|
+ {%
|
|
+ % Change normal interword space to be same as for the current font.
|
|
+ \spaceskip = \fontdimen2\font
|
|
+ %
|
|
+ % Switch to typewriter.
|
|
+ \tt
|
|
+ %
|
|
+ % But `\ ' produces the large typewriter interword space.
|
|
+ \def\ {{\spaceskip = 0pt{} }}%
|
|
+ %
|
|
+ % Turn off hyphenation.
|
|
+ \nohyphenation
|
|
+ %
|
|
+ \rawbackslash
|
|
+ \plainfrenchspacing
|
|
+ #1%
|
|
+ }%
|
|
+ \null
|
|
+}
|
|
+
|
|
+% We *must* turn on hyphenation at `-' and `_' in @code.
|
|
+% Otherwise, it is too hard to avoid overfull hboxes
|
|
+% in the Emacs manual, the Library manual, etc.
|
|
+
|
|
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
|
|
+% both hyphenation at - and hyphenation within words.
|
|
+% We must therefore turn them both off (\tclose does that)
|
|
+% and arrange explicitly to hyphenate at a dash.
|
|
+% -- rms.
|
|
+{
|
|
+ \catcode`\-=\active
|
|
+ \catcode`\_=\active
|
|
+ %
|
|
+ \global\def\code{\begingroup
|
|
+ \catcode`\-=\active \catcode`\_=\active
|
|
+ \ifallowcodebreaks
|
|
+ \let-\codedash
|
|
+ \let_\codeunder
|
|
+ \else
|
|
+ \let-\realdash
|
|
+ \let_\realunder
|
|
+ \fi
|
|
+ \codex
|
|
+ }
|
|
+}
|
|
+
|
|
+\def\realdash{-}
|
|
+\def\codedash{-\discretionary{}{}{}}
|
|
+\def\codeunder{%
|
|
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
|
|
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
|
|
+ % will therefore expand the active definition of _, which is us
|
|
+ % (inside @code that is), therefore an endless loop.
|
|
+ \ifusingtt{\ifmmode
|
|
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
|
|
+ \else\normalunderscore \fi
|
|
+ \discretionary{}{}{}}%
|
|
+ {\_}%
|
|
+}
|
|
+\def\codex #1{\tclose{#1}\endgroup}
|
|
+
|
|
+% An additional complication: the above will allow breaks after, e.g.,
|
|
+% each of the four underscores in __typeof__. This is undesirable in
|
|
+% some manuals, especially if they don't have long identifiers in
|
|
+% general. @allowcodebreaks provides a way to control this.
|
|
+%
|
|
+\newif\ifallowcodebreaks \allowcodebreakstrue
|
|
+
|
|
+\def\keywordtrue{true}
|
|
+\def\keywordfalse{false}
|
|
+
|
|
+\parseargdef\allowcodebreaks{%
|
|
+ \def\txiarg{#1}%
|
|
+ \ifx\txiarg\keywordtrue
|
|
+ \allowcodebreakstrue
|
|
+ \else\ifx\txiarg\keywordfalse
|
|
+ \allowcodebreaksfalse
|
|
+ \else
|
|
+ \errhelp = \EMsimple
|
|
+ \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
|
|
+ \fi\fi
|
|
+}
|
|
+
|
|
+% @kbd is like @code, except that if the argument is just one @key command,
|
|
+% then @kbd has no effect.
|
|
+
|
|
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
|
|
+% `example' (@kbd uses ttsl only inside of @example and friends),
|
|
+% or `code' (@kbd uses normal tty font always).
|
|
+\parseargdef\kbdinputstyle{%
|
|
+ \def\txiarg{#1}%
|
|
+ \ifx\txiarg\worddistinct
|
|
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
|
|
+ \else\ifx\txiarg\wordexample
|
|
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
|
|
+ \else\ifx\txiarg\wordcode
|
|
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
|
|
+ \else
|
|
+ \errhelp = \EMsimple
|
|
+ \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
|
|
+ \fi\fi\fi
|
|
+}
|
|
+\def\worddistinct{distinct}
|
|
+\def\wordexample{example}
|
|
+\def\wordcode{code}
|
|
+
|
|
+% Default is `distinct.'
|
|
+\kbdinputstyle distinct
|
|
+
|
|
+\def\xkey{\key}
|
|
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
|
|
+\ifx\one\xkey\ifx\threex\three \key{#2}%
|
|
+\else{\tclose{\kbdfont\look}}\fi
|
|
+\else{\tclose{\kbdfont\look}}\fi}
|
|
+
|
|
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
|
|
+\let\indicateurl=\code
|
|
+\let\env=\code
|
|
+\let\command=\code
|
|
+
|
|
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
|
|
+% second argument specifying the text to display and an optional third
|
|
+% arg as text to display instead of (rather than in addition to) the url
|
|
+% itself. First (mandatory) arg is the url. Perhaps eventually put in
|
|
+% a hypertex \special here.
|
|
+%
|
|
+\def\uref#1{\douref #1,,,\finish}
|
|
+\def\douref#1,#2,#3,#4\finish{\begingroup
|
|
+ \unsepspaces
|
|
+ \pdfurl{#1}%
|
|
+ \setbox0 = \hbox{\ignorespaces #3}%
|
|
+ \ifdim\wd0 > 0pt
|
|
+ \unhbox0 % third arg given, show only that
|
|
+ \else
|
|
+ \setbox0 = \hbox{\ignorespaces #2}%
|
|
+ \ifdim\wd0 > 0pt
|
|
+ \ifpdf
|
|
+ \unhbox0 % PDF: 2nd arg given, show only it
|
|
+ \else
|
|
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
|
|
+ \fi
|
|
+ \else
|
|
+ \code{#1}% only url given, so show it
|
|
+ \fi
|
|
+ \fi
|
|
+ \endlink
|
|
+\endgroup}
|
|
+
|
|
+% @url synonym for @uref, since that's how everyone uses it.
|
|
+%
|
|
+\let\url=\uref
|
|
+
|
|
+% rms does not like angle brackets --karl, 17may97.
|
|
+% So now @email is just like @uref, unless we are pdf.
|
|
+%
|
|
+%\def\email#1{\angleleft{\tt #1}\angleright}
|
|
+\ifpdf
|
|
+ \def\email#1{\doemail#1,,\finish}
|
|
+ \def\doemail#1,#2,#3\finish{\begingroup
|
|
+ \unsepspaces
|
|
+ \pdfurl{mailto:#1}%
|
|
+ \setbox0 = \hbox{\ignorespaces #2}%
|
|
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
|
|
+ \endlink
|
|
+ \endgroup}
|
|
+\else
|
|
+ \let\email=\uref
|
|
+\fi
|
|
+
|
|
+% Check if we are currently using a typewriter font. Since all the
|
|
+% Computer Modern typewriter fonts have zero interword stretch (and
|
|
+% shrink), and it is reasonable to expect all typewriter fonts to have
|
|
+% this property, we can check that font parameter.
|
|
+%
|
|
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
|
|
+
|
|
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
|
|
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
|
|
+%
|
|
+\def\dmn#1{\thinspace #1}
|
|
+
|
|
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
|
|
+
|
|
+% @l was never documented to mean ``switch to the Lisp font'',
|
|
+% and it is not used as such in any manual I can find. We need it for
|
|
+% Polish suppressed-l. --karl, 22sep96.
|
|
+%\def\l#1{{\li #1}\null}
|
|
+
|
|
+% Explicit font changes: @r, @sc, undocumented @ii.
|
|
+\def\r#1{{\rm #1}} % roman font
|
|
+\def\sc#1{{\smallcaps#1}} % smallcaps font
|
|
+\def\ii#1{{\it #1}} % italic font
|
|
+
|
|
+% @acronym for "FBI", "NATO", and the like.
|
|
+% We print this one point size smaller, since it's intended for
|
|
+% all-uppercase.
|
|
+%
|
|
+\def\acronym#1{\doacronym #1,,\finish}
|
|
+\def\doacronym#1,#2,#3\finish{%
|
|
+ {\selectfonts\lsize #1}%
|
|
+ \def\temp{#2}%
|
|
+ \ifx\temp\empty \else
|
|
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @abbr for "Comput. J." and the like.
|
|
+% No font change, but don't do end-of-sentence spacing.
|
|
+%
|
|
+\def\abbr#1{\doabbr #1,,\finish}
|
|
+\def\doabbr#1,#2,#3\finish{%
|
|
+ {\plainfrenchspacing #1}%
|
|
+ \def\temp{#2}%
|
|
+ \ifx\temp\empty \else
|
|
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
|
|
+%
|
|
+\def\pounds{{\it\$}}
|
|
+
|
|
+% @euro{} comes from a separate font, depending on the current style.
|
|
+% We use the free feym* fonts from the eurosym package by Henrik
|
|
+% Theiling, which support regular, slanted, bold and bold slanted (and
|
|
+% "outlined" (blackboard board, sort of) versions, which we don't need).
|
|
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
|
|
+%
|
|
+% Although only regular is the truly official Euro symbol, we ignore
|
|
+% that. The Euro is designed to be slightly taller than the regular
|
|
+% font height.
|
|
+%
|
|
+% feymr - regular
|
|
+% feymo - slanted
|
|
+% feybr - bold
|
|
+% feybo - bold slanted
|
|
+%
|
|
+% There is no good (free) typewriter version, to my knowledge.
|
|
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
|
|
+% Hmm.
|
|
+%
|
|
+% Also doesn't work in math. Do we need to do math with euro symbols?
|
|
+% Hope not.
|
|
+%
|
|
+%
|
|
+\def\euro{{\eurofont e}}
|
|
+\def\eurofont{%
|
|
+ % We set the font at each command, rather than predefining it in
|
|
+ % \textfonts and the other font-switching commands, so that
|
|
+ % installations which never need the symbol don't have to have the
|
|
+ % font installed.
|
|
+ %
|
|
+ % There is only one designed size (nominal 10pt), so we always scale
|
|
+ % that to the current nominal size.
|
|
+ %
|
|
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
|
|
+ % does not work for cmbx10 and other extended/shrunken fonts.
|
|
+ %
|
|
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
|
|
+ %
|
|
+ \ifx\curfontstyle\bfstylename
|
|
+ % bold:
|
|
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
|
|
+ \else
|
|
+ % regular:
|
|
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
|
|
+ \fi
|
|
+ \thiseurofont
|
|
+}
|
|
+
|
|
+% @registeredsymbol - R in a circle. The font for the R should really
|
|
+% be smaller yet, but lllsize is the best we can do for now.
|
|
+% Adapted from the plain.tex definition of \copyright.
|
|
+%
|
|
+\def\registeredsymbol{%
|
|
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
|
|
+ \hfil\crcr\Orb}}%
|
|
+ }$%
|
|
+}
|
|
+
|
|
+% Laurent Siebenmann reports \Orb undefined with:
|
|
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
|
|
+% so we'll define it if necessary.
|
|
+%
|
|
+\ifx\Orb\undefined
|
|
+\def\Orb{\mathhexbox20D}
|
|
+\fi
|
|
+
|
|
+
|
|
+\message{page headings,}
|
|
+
|
|
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
|
|
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
|
|
+
|
|
+% First the title page. Must do @settitle before @titlepage.
|
|
+\newif\ifseenauthor
|
|
+\newif\iffinishedtitlepage
|
|
+
|
|
+% Do an implicit @contents or @shortcontents after @end titlepage if the
|
|
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
|
|
+%
|
|
+\newif\ifsetcontentsaftertitlepage
|
|
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
|
|
+\newif\ifsetshortcontentsaftertitlepage
|
|
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
|
|
+
|
|
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
|
|
+ \endgroup\page\hbox{}\page}
|
|
+
|
|
+\envdef\titlepage{%
|
|
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
|
|
+ \begingroup
|
|
+ \parindent=0pt \textfonts
|
|
+ % Leave some space at the very top of the page.
|
|
+ \vglue\titlepagetopglue
|
|
+ % No rule at page bottom unless we print one at the top with @title.
|
|
+ \finishedtitlepagetrue
|
|
+ %
|
|
+ % Most title ``pages'' are actually two pages long, with space
|
|
+ % at the top of the second. We don't want the ragged left on the second.
|
|
+ \let\oldpage = \page
|
|
+ \def\page{%
|
|
+ \iffinishedtitlepage\else
|
|
+ \finishtitlepage
|
|
+ \fi
|
|
+ \let\page = \oldpage
|
|
+ \page
|
|
+ \null
|
|
+ }%
|
|
+}
|
|
+
|
|
+\def\Etitlepage{%
|
|
+ \iffinishedtitlepage\else
|
|
+ \finishtitlepage
|
|
+ \fi
|
|
+ % It is important to do the page break before ending the group,
|
|
+ % because the headline and footline are only empty inside the group.
|
|
+ % If we use the new definition of \page, we always get a blank page
|
|
+ % after the title page, which we certainly don't want.
|
|
+ \oldpage
|
|
+ \endgroup
|
|
+ %
|
|
+ % Need this before the \...aftertitlepage checks so that if they are
|
|
+ % in effect the toc pages will come out with page numbers.
|
|
+ \HEADINGSon
|
|
+ %
|
|
+ % If they want short, they certainly want long too.
|
|
+ \ifsetshortcontentsaftertitlepage
|
|
+ \shortcontents
|
|
+ \contents
|
|
+ \global\let\shortcontents = \relax
|
|
+ \global\let\contents = \relax
|
|
+ \fi
|
|
+ %
|
|
+ \ifsetcontentsaftertitlepage
|
|
+ \contents
|
|
+ \global\let\contents = \relax
|
|
+ \global\let\shortcontents = \relax
|
|
+ \fi
|
|
+}
|
|
+
|
|
+\def\finishtitlepage{%
|
|
+ \vskip4pt \hrule height 2pt width \hsize
|
|
+ \vskip\titlepagebottomglue
|
|
+ \finishedtitlepagetrue
|
|
+}
|
|
+
|
|
+%%% Macros to be used within @titlepage:
|
|
+
|
|
+\let\subtitlerm=\tenrm
|
|
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
|
|
+
|
|
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
|
|
+ \let\tt=\authortt}
|
|
+
|
|
+\parseargdef\title{%
|
|
+ \checkenv\titlepage
|
|
+ \leftline{\titlefonts\rm #1}
|
|
+ % print a rule at the page bottom also.
|
|
+ \finishedtitlepagefalse
|
|
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
|
|
+}
|
|
+
|
|
+\parseargdef\subtitle{%
|
|
+ \checkenv\titlepage
|
|
+ {\subtitlefont \rightline{#1}}%
|
|
+}
|
|
+
|
|
+% @author should come last, but may come many times.
|
|
+% It can also be used inside @quotation.
|
|
+%
|
|
+\parseargdef\author{%
|
|
+ \def\temp{\quotation}%
|
|
+ \ifx\thisenv\temp
|
|
+ \def\quotationauthor{#1}% printed in \Equotation.
|
|
+ \else
|
|
+ \checkenv\titlepage
|
|
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
|
|
+ {\authorfont \leftline{#1}}%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+
|
|
+%%% Set up page headings and footings.
|
|
+
|
|
+\let\thispage=\folio
|
|
+
|
|
+\newtoks\evenheadline % headline on even pages
|
|
+\newtoks\oddheadline % headline on odd pages
|
|
+\newtoks\evenfootline % footline on even pages
|
|
+\newtoks\oddfootline % footline on odd pages
|
|
+
|
|
+% Now make TeX use those variables
|
|
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
|
|
+ \else \the\evenheadline \fi}}
|
|
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
|
|
+ \else \the\evenfootline \fi}\HEADINGShook}
|
|
+\let\HEADINGShook=\relax
|
|
+
|
|
+% Commands to set those variables.
|
|
+% For example, this is what @headings on does
|
|
+% @evenheading @thistitle|@thispage|@thischapter
|
|
+% @oddheading @thischapter|@thispage|@thistitle
|
|
+% @evenfooting @thisfile||
|
|
+% @oddfooting ||@thisfile
|
|
+
|
|
+
|
|
+\def\evenheading{\parsearg\evenheadingxxx}
|
|
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
|
|
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
|
|
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
|
|
+
|
|
+\def\oddheading{\parsearg\oddheadingxxx}
|
|
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
|
|
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
|
|
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
|
|
+
|
|
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
|
|
+
|
|
+\def\evenfooting{\parsearg\evenfootingxxx}
|
|
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
|
|
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
|
|
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
|
|
+
|
|
+\def\oddfooting{\parsearg\oddfootingxxx}
|
|
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
|
|
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
|
|
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
|
|
+ %
|
|
+ % Leave some space for the footline. Hopefully ok to assume
|
|
+ % @evenfooting will not be used by itself.
|
|
+ \global\advance\pageheight by -\baselineskip
|
|
+ \global\advance\vsize by -\baselineskip
|
|
+}
|
|
+
|
|
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
|
|
+
|
|
+
|
|
+% @headings double turns headings on for double-sided printing.
|
|
+% @headings single turns headings on for single-sided printing.
|
|
+% @headings off turns them off.
|
|
+% @headings on same as @headings double, retained for compatibility.
|
|
+% @headings after turns on double-sided headings after this page.
|
|
+% @headings doubleafter turns on double-sided headings after this page.
|
|
+% @headings singleafter turns on single-sided headings after this page.
|
|
+% By default, they are off at the start of a document,
|
|
+% and turned `on' after @end titlepage.
|
|
+
|
|
+\def\headings #1 {\csname HEADINGS#1\endcsname}
|
|
+
|
|
+\def\HEADINGSoff{%
|
|
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
|
|
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
|
|
+\HEADINGSoff
|
|
+% When we turn headings on, set the page number to 1.
|
|
+% For double-sided printing, put current file name in lower left corner,
|
|
+% chapter name on inside top of right hand pages, document
|
|
+% title on inside top of left hand pages, and page numbers on outside top
|
|
+% edge of all pages.
|
|
+\def\HEADINGSdouble{%
|
|
+\global\pageno=1
|
|
+\global\evenfootline={\hfil}
|
|
+\global\oddfootline={\hfil}
|
|
+\global\evenheadline={\line{\folio\hfil\thistitle}}
|
|
+\global\oddheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\let\contentsalignmacro = \chapoddpage
|
|
+}
|
|
+\let\contentsalignmacro = \chappager
|
|
+
|
|
+% For single-sided printing, chapter title goes across top left of page,
|
|
+% page number on top right.
|
|
+\def\HEADINGSsingle{%
|
|
+\global\pageno=1
|
|
+\global\evenfootline={\hfil}
|
|
+\global\oddfootline={\hfil}
|
|
+\global\evenheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\oddheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\let\contentsalignmacro = \chappager
|
|
+}
|
|
+\def\HEADINGSon{\HEADINGSdouble}
|
|
+
|
|
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
|
|
+\let\HEADINGSdoubleafter=\HEADINGSafter
|
|
+\def\HEADINGSdoublex{%
|
|
+\global\evenfootline={\hfil}
|
|
+\global\oddfootline={\hfil}
|
|
+\global\evenheadline={\line{\folio\hfil\thistitle}}
|
|
+\global\oddheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\let\contentsalignmacro = \chapoddpage
|
|
+}
|
|
+
|
|
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
|
|
+\def\HEADINGSsinglex{%
|
|
+\global\evenfootline={\hfil}
|
|
+\global\oddfootline={\hfil}
|
|
+\global\evenheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\oddheadline={\line{\thischapter\hfil\folio}}
|
|
+\global\let\contentsalignmacro = \chappager
|
|
+}
|
|
+
|
|
+% Subroutines used in generating headings
|
|
+% This produces Day Month Year style of output.
|
|
+% Only define if not already defined, in case a txi-??.tex file has set
|
|
+% up a different format (e.g., txi-cs.tex does this).
|
|
+\ifx\today\undefined
|
|
+\def\today{%
|
|
+ \number\day\space
|
|
+ \ifcase\month
|
|
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
|
|
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
|
|
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
|
|
+ \fi
|
|
+ \space\number\year}
|
|
+\fi
|
|
+
|
|
+% @settitle line... specifies the title of the document, for headings.
|
|
+% It generates no output of its own.
|
|
+\def\thistitle{\putwordNoTitle}
|
|
+\def\settitle{\parsearg{\gdef\thistitle}}
|
|
+
|
|
+
|
|
+\message{tables,}
|
|
+% Tables -- @table, @ftable, @vtable, @item(x).
|
|
+
|
|
+% default indentation of table text
|
|
+\newdimen\tableindent \tableindent=.8in
|
|
+% default indentation of @itemize and @enumerate text
|
|
+\newdimen\itemindent \itemindent=.3in
|
|
+% margin between end of table item and start of table text.
|
|
+\newdimen\itemmargin \itemmargin=.1in
|
|
+
|
|
+% used internally for \itemindent minus \itemmargin
|
|
+\newdimen\itemmax
|
|
+
|
|
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
|
|
+% these defs.
|
|
+% They also define \itemindex
|
|
+% to index the item name in whatever manner is desired (perhaps none).
|
|
+
|
|
+\newif\ifitemxneedsnegativevskip
|
|
+
|
|
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
|
|
+
|
|
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
|
|
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
|
|
+
|
|
+\def\itemzzz #1{\begingroup %
|
|
+ \advance\hsize by -\rightskip
|
|
+ \advance\hsize by -\tableindent
|
|
+ \setbox0=\hbox{\itemindicate{#1}}%
|
|
+ \itemindex{#1}%
|
|
+ \nobreak % This prevents a break before @itemx.
|
|
+ %
|
|
+ % If the item text does not fit in the space we have, put it on a line
|
|
+ % by itself, and do not allow a page break either before or after that
|
|
+ % line. We do not start a paragraph here because then if the next
|
|
+ % command is, e.g., @kindex, the whatsit would get put into the
|
|
+ % horizontal list on a line by itself, resulting in extra blank space.
|
|
+ \ifdim \wd0>\itemmax
|
|
+ %
|
|
+ % Make this a paragraph so we get the \parskip glue and wrapping,
|
|
+ % but leave it ragged-right.
|
|
+ \begingroup
|
|
+ \advance\leftskip by-\tableindent
|
|
+ \advance\hsize by\tableindent
|
|
+ \advance\rightskip by0pt plus1fil
|
|
+ \leavevmode\unhbox0\par
|
|
+ \endgroup
|
|
+ %
|
|
+ % We're going to be starting a paragraph, but we don't want the
|
|
+ % \parskip glue -- logically it's part of the @item we just started.
|
|
+ \nobreak \vskip-\parskip
|
|
+ %
|
|
+ % Stop a page break at the \parskip glue coming up. However, if
|
|
+ % what follows is an environment such as @example, there will be no
|
|
+ % \parskip glue; then the negative vskip we just inserted would
|
|
+ % cause the example and the item to crash together. So we use this
|
|
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
|
|
+ % \parskip glue after all. Section titles are handled this way also.
|
|
+ %
|
|
+ \penalty 10001
|
|
+ \endgroup
|
|
+ \itemxneedsnegativevskipfalse
|
|
+ \else
|
|
+ % The item text fits into the space. Start a paragraph, so that the
|
|
+ % following text (if any) will end up on the same line.
|
|
+ \noindent
|
|
+ % Do this with kerns and \unhbox so that if there is a footnote in
|
|
+ % the item text, it can migrate to the main vertical list and
|
|
+ % eventually be printed.
|
|
+ \nobreak\kern-\tableindent
|
|
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
|
|
+ \unhbox0
|
|
+ \nobreak\kern\dimen0
|
|
+ \endgroup
|
|
+ \itemxneedsnegativevskiptrue
|
|
+ \fi
|
|
+}
|
|
+
|
|
+\def\item{\errmessage{@item while not in a list environment}}
|
|
+\def\itemx{\errmessage{@itemx while not in a list environment}}
|
|
+
|
|
+% @table, @ftable, @vtable.
|
|
+\envdef\table{%
|
|
+ \let\itemindex\gobble
|
|
+ \tablecheck{table}%
|
|
+}
|
|
+\envdef\ftable{%
|
|
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
|
|
+ \tablecheck{ftable}%
|
|
+}
|
|
+\envdef\vtable{%
|
|
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
|
|
+ \tablecheck{vtable}%
|
|
+}
|
|
+\def\tablecheck#1{%
|
|
+ \ifnum \the\catcode`\^^M=\active
|
|
+ \endgroup
|
|
+ \errmessage{This command won't work in this context; perhaps the problem is
|
|
+ that we are \inenvironment\thisenv}%
|
|
+ \def\next{\doignore{#1}}%
|
|
+ \else
|
|
+ \let\next\tablex
|
|
+ \fi
|
|
+ \next
|
|
+}
|
|
+\def\tablex#1{%
|
|
+ \def\itemindicate{#1}%
|
|
+ \parsearg\tabley
|
|
+}
|
|
+\def\tabley#1{%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
|
|
+ \expandafter
|
|
+ }\temp \endtablez
|
|
+}
|
|
+\def\tablez #1 #2 #3 #4\endtablez{%
|
|
+ \aboveenvbreak
|
|
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
|
|
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
|
|
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
|
|
+ \itemmax=\tableindent
|
|
+ \advance \itemmax by -\itemmargin
|
|
+ \advance \leftskip by \tableindent
|
|
+ \exdentamount=\tableindent
|
|
+ \parindent = 0pt
|
|
+ \parskip = \smallskipamount
|
|
+ \ifdim \parskip=0pt \parskip=2pt \fi
|
|
+ \let\item = \internalBitem
|
|
+ \let\itemx = \internalBitemx
|
|
+}
|
|
+\def\Etable{\endgraf\afterenvbreak}
|
|
+\let\Eftable\Etable
|
|
+\let\Evtable\Etable
|
|
+\let\Eitemize\Etable
|
|
+\let\Eenumerate\Etable
|
|
+
|
|
+% This is the counter used by @enumerate, which is really @itemize
|
|
+
|
|
+\newcount \itemno
|
|
+
|
|
+\envdef\itemize{\parsearg\doitemize}
|
|
+
|
|
+\def\doitemize#1{%
|
|
+ \aboveenvbreak
|
|
+ \itemmax=\itemindent
|
|
+ \advance\itemmax by -\itemmargin
|
|
+ \advance\leftskip by \itemindent
|
|
+ \exdentamount=\itemindent
|
|
+ \parindent=0pt
|
|
+ \parskip=\smallskipamount
|
|
+ \ifdim\parskip=0pt \parskip=2pt \fi
|
|
+ \def\itemcontents{#1}%
|
|
+ % @itemize with no arg is equivalent to @itemize @bullet.
|
|
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
|
|
+ \let\item=\itemizeitem
|
|
+}
|
|
+
|
|
+% Definition of @item while inside @itemize and @enumerate.
|
|
+%
|
|
+\def\itemizeitem{%
|
|
+ \advance\itemno by 1 % for enumerations
|
|
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
|
|
+ {%
|
|
+ % If the document has an @itemize directly after a section title, a
|
|
+ % \nobreak will be last on the list, and \sectionheading will have
|
|
+ % done a \vskip-\parskip. In that case, we don't want to zero
|
|
+ % parskip, or the item text will crash with the heading. On the
|
|
+ % other hand, when there is normal text preceding the item (as there
|
|
+ % usually is), we do want to zero parskip, or there would be too much
|
|
+ % space. In that case, we won't have a \nobreak before. At least
|
|
+ % that's the theory.
|
|
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
|
|
+ \noindent
|
|
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
|
|
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
|
|
+ \flushcr
|
|
+}
|
|
+
|
|
+% \splitoff TOKENS\endmark defines \first to be the first token in
|
|
+% TOKENS, and \rest to be the remainder.
|
|
+%
|
|
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
|
|
+
|
|
+% Allow an optional argument of an uppercase letter, lowercase letter,
|
|
+% or number, to specify the first label in the enumerated list. No
|
|
+% argument is the same as `1'.
|
|
+%
|
|
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
|
|
+\def\enumeratey #1 #2\endenumeratey{%
|
|
+ % If we were given no argument, pretend we were given `1'.
|
|
+ \def\thearg{#1}%
|
|
+ \ifx\thearg\empty \def\thearg{1}\fi
|
|
+ %
|
|
+ % Detect if the argument is a single token. If so, it might be a
|
|
+ % letter. Otherwise, the only valid thing it can be is a number.
|
|
+ % (We will always have one token, because of the test we just made.
|
|
+ % This is a good thing, since \splitoff doesn't work given nothing at
|
|
+ % all -- the first parameter is undelimited.)
|
|
+ \expandafter\splitoff\thearg\endmark
|
|
+ \ifx\rest\empty
|
|
+ % Only one token in the argument. It could still be anything.
|
|
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
|
|
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
|
|
+ % not equal to itself.
|
|
+ % Otherwise, we assume it's a number.
|
|
+ %
|
|
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
|
|
+ % continuing to look for a <number>.
|
|
+ %
|
|
+ \ifnum\lccode\expandafter`\thearg=0\relax
|
|
+ \numericenumerate % a number (we hope)
|
|
+ \else
|
|
+ % It's a letter.
|
|
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
|
|
+ \lowercaseenumerate % lowercase letter
|
|
+ \else
|
|
+ \uppercaseenumerate % uppercase letter
|
|
+ \fi
|
|
+ \fi
|
|
+ \else
|
|
+ % Multiple tokens in the argument. We hope it's a number.
|
|
+ \numericenumerate
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% An @enumerate whose labels are integers. The starting integer is
|
|
+% given in \thearg.
|
|
+%
|
|
+\def\numericenumerate{%
|
|
+ \itemno = \thearg
|
|
+ \startenumeration{\the\itemno}%
|
|
+}
|
|
+
|
|
+% The starting (lowercase) letter is in \thearg.
|
|
+\def\lowercaseenumerate{%
|
|
+ \itemno = \expandafter`\thearg
|
|
+ \startenumeration{%
|
|
+ % Be sure we're not beyond the end of the alphabet.
|
|
+ \ifnum\itemno=0
|
|
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
|
|
+ alphabet}%
|
|
+ \fi
|
|
+ \char\lccode\itemno
|
|
+ }%
|
|
+}
|
|
+
|
|
+% The starting (uppercase) letter is in \thearg.
|
|
+\def\uppercaseenumerate{%
|
|
+ \itemno = \expandafter`\thearg
|
|
+ \startenumeration{%
|
|
+ % Be sure we're not beyond the end of the alphabet.
|
|
+ \ifnum\itemno=0
|
|
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
|
|
+ alphabet}
|
|
+ \fi
|
|
+ \char\uccode\itemno
|
|
+ }%
|
|
+}
|
|
+
|
|
+% Call \doitemize, adding a period to the first argument and supplying the
|
|
+% common last two arguments. Also subtract one from the initial value in
|
|
+% \itemno, since @item increments \itemno.
|
|
+%
|
|
+\def\startenumeration#1{%
|
|
+ \advance\itemno by -1
|
|
+ \doitemize{#1.}\flushcr
|
|
+}
|
|
+
|
|
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
|
|
+% to @enumerate.
|
|
+%
|
|
+\def\alphaenumerate{\enumerate{a}}
|
|
+\def\capsenumerate{\enumerate{A}}
|
|
+\def\Ealphaenumerate{\Eenumerate}
|
|
+\def\Ecapsenumerate{\Eenumerate}
|
|
+
|
|
+
|
|
+% @multitable macros
|
|
+% Amy Hendrickson, 8/18/94, 3/6/96
|
|
+%
|
|
+% @multitable ... @end multitable will make as many columns as desired.
|
|
+% Contents of each column will wrap at width given in preamble. Width
|
|
+% can be specified either with sample text given in a template line,
|
|
+% or in percent of \hsize, the current width of text on page.
|
|
+
|
|
+% Table can continue over pages but will only break between lines.
|
|
+
|
|
+% To make preamble:
|
|
+%
|
|
+% Either define widths of columns in terms of percent of \hsize:
|
|
+% @multitable @columnfractions .25 .3 .45
|
|
+% @item ...
|
|
+%
|
|
+% Numbers following @columnfractions are the percent of the total
|
|
+% current hsize to be used for each column. You may use as many
|
|
+% columns as desired.
|
|
+
|
|
+
|
|
+% Or use a template:
|
|
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
|
|
+% @item ...
|
|
+% using the widest term desired in each column.
|
|
+
|
|
+% Each new table line starts with @item, each subsequent new column
|
|
+% starts with @tab. Empty columns may be produced by supplying @tab's
|
|
+% with nothing between them for as many times as empty columns are needed,
|
|
+% ie, @tab@tab@tab will produce two empty columns.
|
|
+
|
|
+% @item, @tab do not need to be on their own lines, but it will not hurt
|
|
+% if they are.
|
|
+
|
|
+% Sample multitable:
|
|
+
|
|
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
|
|
+% @item first col stuff @tab second col stuff @tab third col
|
|
+% @item
|
|
+% first col stuff
|
|
+% @tab
|
|
+% second col stuff
|
|
+% @tab
|
|
+% third col
|
|
+% @item first col stuff @tab second col stuff
|
|
+% @tab Many paragraphs of text may be used in any column.
|
|
+%
|
|
+% They will wrap at the width determined by the template.
|
|
+% @item@tab@tab This will be in third column.
|
|
+% @end multitable
|
|
+
|
|
+% Default dimensions may be reset by user.
|
|
+% @multitableparskip is vertical space between paragraphs in table.
|
|
+% @multitableparindent is paragraph indent in table.
|
|
+% @multitablecolmargin is horizontal space to be left between columns.
|
|
+% @multitablelinespace is space to leave between table items, baseline
|
|
+% to baseline.
|
|
+% 0pt means it depends on current normal line spacing.
|
|
+%
|
|
+\newskip\multitableparskip
|
|
+\newskip\multitableparindent
|
|
+\newdimen\multitablecolspace
|
|
+\newskip\multitablelinespace
|
|
+\multitableparskip=0pt
|
|
+\multitableparindent=6pt
|
|
+\multitablecolspace=12pt
|
|
+\multitablelinespace=0pt
|
|
+
|
|
+% Macros used to set up halign preamble:
|
|
+%
|
|
+\let\endsetuptable\relax
|
|
+\def\xendsetuptable{\endsetuptable}
|
|
+\let\columnfractions\relax
|
|
+\def\xcolumnfractions{\columnfractions}
|
|
+\newif\ifsetpercent
|
|
+
|
|
+% #1 is the @columnfraction, usually a decimal number like .5, but might
|
|
+% be just 1. We just use it, whatever it is.
|
|
+%
|
|
+\def\pickupwholefraction#1 {%
|
|
+ \global\advance\colcount by 1
|
|
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
|
|
+ \setuptable
|
|
+}
|
|
+
|
|
+\newcount\colcount
|
|
+\def\setuptable#1{%
|
|
+ \def\firstarg{#1}%
|
|
+ \ifx\firstarg\xendsetuptable
|
|
+ \let\go = \relax
|
|
+ \else
|
|
+ \ifx\firstarg\xcolumnfractions
|
|
+ \global\setpercenttrue
|
|
+ \else
|
|
+ \ifsetpercent
|
|
+ \let\go\pickupwholefraction
|
|
+ \else
|
|
+ \global\advance\colcount by 1
|
|
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
|
|
+ % separator; typically that is always in the input, anyway.
|
|
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
|
|
+ \fi
|
|
+ \fi
|
|
+ \ifx\go\pickupwholefraction
|
|
+ % Put the argument back for the \pickupwholefraction call, so
|
|
+ % we'll always have a period there to be parsed.
|
|
+ \def\go{\pickupwholefraction#1}%
|
|
+ \else
|
|
+ \let\go = \setuptable
|
|
+ \fi%
|
|
+ \fi
|
|
+ \go
|
|
+}
|
|
+
|
|
+% multitable-only commands.
|
|
+%
|
|
+% @headitem starts a heading row, which we typeset in bold.
|
|
+% Assignments have to be global since we are inside the implicit group
|
|
+% of an alignment entry. Note that \everycr resets \everytab.
|
|
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
|
|
+%
|
|
+% A \tab used to include \hskip1sp. But then the space in a template
|
|
+% line is not enough. That is bad. So let's go back to just `&' until
|
|
+% we encounter the problem it was intended to solve again.
|
|
+% --karl, nathan@acm.org, 20apr99.
|
|
+\def\tab{\checkenv\multitable &\the\everytab}%
|
|
+
|
|
+% @multitable ... @end multitable definitions:
|
|
+%
|
|
+\newtoks\everytab % insert after every tab.
|
|
+%
|
|
+\envdef\multitable{%
|
|
+ \vskip\parskip
|
|
+ \startsavinginserts
|
|
+ %
|
|
+ % @item within a multitable starts a normal row.
|
|
+ % We use \def instead of \let so that if one of the multitable entries
|
|
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
|
|
+ % \endtemplate) expanding \doitemize.
|
|
+ \def\item{\crcr}%
|
|
+ %
|
|
+ \tolerance=9500
|
|
+ \hbadness=9500
|
|
+ \setmultitablespacing
|
|
+ \parskip=\multitableparskip
|
|
+ \parindent=\multitableparindent
|
|
+ \overfullrule=0pt
|
|
+ \global\colcount=0
|
|
+ %
|
|
+ \everycr = {%
|
|
+ \noalign{%
|
|
+ \global\everytab={}%
|
|
+ \global\colcount=0 % Reset the column counter.
|
|
+ % Check for saved footnotes, etc.
|
|
+ \checkinserts
|
|
+ % Keeps underfull box messages off when table breaks over pages.
|
|
+ %\filbreak
|
|
+ % Maybe so, but it also creates really weird page breaks when the
|
|
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
|
|
+ % problem manifests itself, so it can be fixed for real --karl.
|
|
+ }%
|
|
+ }%
|
|
+ %
|
|
+ \parsearg\domultitable
|
|
+}
|
|
+\def\domultitable#1{%
|
|
+ % To parse everything between @multitable and @item:
|
|
+ \setuptable#1 \endsetuptable
|
|
+ %
|
|
+ % This preamble sets up a generic column definition, which will
|
|
+ % be used as many times as user calls for columns.
|
|
+ % \vtop will set a single line and will also let text wrap and
|
|
+ % continue for many paragraphs if desired.
|
|
+ \halign\bgroup &%
|
|
+ \global\advance\colcount by 1
|
|
+ \multistrut
|
|
+ \vtop{%
|
|
+ % Use the current \colcount to find the correct column width:
|
|
+ \hsize=\expandafter\csname col\the\colcount\endcsname
|
|
+ %
|
|
+ % In order to keep entries from bumping into each other
|
|
+ % we will add a \leftskip of \multitablecolspace to all columns after
|
|
+ % the first one.
|
|
+ %
|
|
+ % If a template has been used, we will add \multitablecolspace
|
|
+ % to the width of each template entry.
|
|
+ %
|
|
+ % If the user has set preamble in terms of percent of \hsize we will
|
|
+ % use that dimension as the width of the column, and the \leftskip
|
|
+ % will keep entries from bumping into each other. Table will start at
|
|
+ % left margin and final column will justify at right margin.
|
|
+ %
|
|
+ % Make sure we don't inherit \rightskip from the outer environment.
|
|
+ \rightskip=0pt
|
|
+ \ifnum\colcount=1
|
|
+ % The first column will be indented with the surrounding text.
|
|
+ \advance\hsize by\leftskip
|
|
+ \else
|
|
+ \ifsetpercent \else
|
|
+ % If user has not set preamble in terms of percent of \hsize
|
|
+ % we will advance \hsize by \multitablecolspace.
|
|
+ \advance\hsize by \multitablecolspace
|
|
+ \fi
|
|
+ % In either case we will make \leftskip=\multitablecolspace:
|
|
+ \leftskip=\multitablecolspace
|
|
+ \fi
|
|
+ % Ignoring space at the beginning and end avoids an occasional spurious
|
|
+ % blank line, when TeX decides to break the line at the space before the
|
|
+ % box from the multistrut, so the strut ends up on a line by itself.
|
|
+ % For example:
|
|
+ % @multitable @columnfractions .11 .89
|
|
+ % @item @code{#}
|
|
+ % @tab Legal holiday which is valid in major parts of the whole country.
|
|
+ % Is automatically provided with highlighting sequences respectively
|
|
+ % marking characters.
|
|
+ \noindent\ignorespaces##\unskip\multistrut
|
|
+ }\cr
|
|
+}
|
|
+\def\Emultitable{%
|
|
+ \crcr
|
|
+ \egroup % end the \halign
|
|
+ \global\setpercentfalse
|
|
+}
|
|
+
|
|
+\def\setmultitablespacing{%
|
|
+ \def\multistrut{\strut}% just use the standard line spacing
|
|
+ %
|
|
+ % Compute \multitablelinespace (if not defined by user) for use in
|
|
+ % \multitableparskip calculation. We used define \multistrut based on
|
|
+ % this, but (ironically) that caused the spacing to be off.
|
|
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
|
|
+\ifdim\multitablelinespace=0pt
|
|
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
|
|
+\global\advance\multitablelinespace by-\ht0
|
|
+\fi
|
|
+%% Test to see if parskip is larger than space between lines of
|
|
+%% table. If not, do nothing.
|
|
+%% If so, set to same dimension as multitablelinespace.
|
|
+\ifdim\multitableparskip>\multitablelinespace
|
|
+\global\multitableparskip=\multitablelinespace
|
|
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
|
|
+ %% than skip between lines in the table.
|
|
+\fi%
|
|
+\ifdim\multitableparskip=0pt
|
|
+\global\multitableparskip=\multitablelinespace
|
|
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
|
|
+ %% than skip between lines in the table.
|
|
+\fi}
|
|
+
|
|
+
|
|
+\message{conditionals,}
|
|
+
|
|
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
|
|
+% @ifnotxml always succeed. They currently do nothing; we don't
|
|
+% attempt to check whether the conditionals are properly nested. But we
|
|
+% have to remember that they are conditionals, so that @end doesn't
|
|
+% attempt to close an environment group.
|
|
+%
|
|
+\def\makecond#1{%
|
|
+ \expandafter\let\csname #1\endcsname = \relax
|
|
+ \expandafter\let\csname iscond.#1\endcsname = 1
|
|
+}
|
|
+\makecond{iftex}
|
|
+\makecond{ifnotdocbook}
|
|
+\makecond{ifnothtml}
|
|
+\makecond{ifnotinfo}
|
|
+\makecond{ifnotplaintext}
|
|
+\makecond{ifnotxml}
|
|
+
|
|
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
|
|
+%
|
|
+\def\direntry{\doignore{direntry}}
|
|
+\def\documentdescription{\doignore{documentdescription}}
|
|
+\def\docbook{\doignore{docbook}}
|
|
+\def\html{\doignore{html}}
|
|
+\def\ifdocbook{\doignore{ifdocbook}}
|
|
+\def\ifhtml{\doignore{ifhtml}}
|
|
+\def\ifinfo{\doignore{ifinfo}}
|
|
+\def\ifnottex{\doignore{ifnottex}}
|
|
+\def\ifplaintext{\doignore{ifplaintext}}
|
|
+\def\ifxml{\doignore{ifxml}}
|
|
+\def\ignore{\doignore{ignore}}
|
|
+\def\menu{\doignore{menu}}
|
|
+\def\xml{\doignore{xml}}
|
|
+
|
|
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
|
|
+%
|
|
+% A count to remember the depth of nesting.
|
|
+\newcount\doignorecount
|
|
+
|
|
+\def\doignore#1{\begingroup
|
|
+ % Scan in ``verbatim'' mode:
|
|
+ \catcode`\@ = \other
|
|
+ \catcode`\{ = \other
|
|
+ \catcode`\} = \other
|
|
+ %
|
|
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
|
|
+ \spaceisspace
|
|
+ %
|
|
+ % Count number of #1's that we've seen.
|
|
+ \doignorecount = 0
|
|
+ %
|
|
+ % Swallow text until we reach the matching `@end #1'.
|
|
+ \dodoignore{#1}%
|
|
+}
|
|
+
|
|
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
|
|
+ \obeylines %
|
|
+ %
|
|
+ \gdef\dodoignore#1{%
|
|
+ % #1 contains the command name as a string, e.g., `ifinfo'.
|
|
+ %
|
|
+ % Define a command to find the next `@end #1', which must be on a line
|
|
+ % by itself.
|
|
+ \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
|
|
+ % And this command to find another #1 command, at the beginning of a
|
|
+ % line. (Otherwise, we would consider a line `@c @ifset', for
|
|
+ % example, to count as an @ifset for nesting.)
|
|
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
|
|
+ %
|
|
+ % And now expand that command.
|
|
+ \obeylines %
|
|
+ \doignoretext ^^M%
|
|
+ }%
|
|
+}
|
|
+
|
|
+\def\doignoreyyy#1{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\empty % Nothing found.
|
|
+ \let\next\doignoretextzzz
|
|
+ \else % Found a nested condition, ...
|
|
+ \advance\doignorecount by 1
|
|
+ \let\next\doignoretextyyy % ..., look for another.
|
|
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
|
|
+ \fi
|
|
+ \next #1% the token \_STOP_ is present just after this macro.
|
|
+}
|
|
+
|
|
+% We have to swallow the remaining "\_STOP_".
|
|
+%
|
|
+\def\doignoretextzzz#1{%
|
|
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
|
|
+ \let\next\enddoignore
|
|
+ \else % Still inside a nested condition.
|
|
+ \advance\doignorecount by -1
|
|
+ \let\next\doignoretext % Look for the next @end.
|
|
+ \fi
|
|
+ \next
|
|
+}
|
|
+
|
|
+% Finish off ignored text.
|
|
+\def\enddoignore{\endgroup\ignorespaces}
|
|
+
|
|
+
|
|
+% @set VAR sets the variable VAR to an empty value.
|
|
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
|
|
+%
|
|
+% Since we want to separate VAR from REST-OF-LINE (which might be
|
|
+% empty), we can't just use \parsearg; we have to insert a space of our
|
|
+% own to delimit the rest of the line, and then take it out again if we
|
|
+% didn't need it.
|
|
+% We rely on the fact that \parsearg sets \catcode`\ =10.
|
|
+%
|
|
+\parseargdef\set{\setyyy#1 \endsetyyy}
|
|
+\def\setyyy#1 #2\endsetyyy{%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \def\temp{#2}%
|
|
+ \edef\next{\gdef\makecsname{SET#1}}%
|
|
+ \ifx\temp\empty
|
|
+ \next{}%
|
|
+ \else
|
|
+ \setzzz#2\endsetzzz
|
|
+ \fi
|
|
+ }%
|
|
+}
|
|
+% Remove the trailing space \setxxx inserted.
|
|
+\def\setzzz#1 \endsetzzz{\next{#1}}
|
|
+
|
|
+% @clear VAR clears (i.e., unsets) the variable VAR.
|
|
+%
|
|
+\parseargdef\clear{%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \global\expandafter\let\csname SET#1\endcsname=\relax
|
|
+ }%
|
|
+}
|
|
+
|
|
+% @value{foo} gets the text saved in variable foo.
|
|
+\def\value{\begingroup\makevalueexpandable\valuexxx}
|
|
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
|
|
+{
|
|
+ \catcode`\- = \active \catcode`\_ = \active
|
|
+ %
|
|
+ \gdef\makevalueexpandable{%
|
|
+ \let\value = \expandablevalue
|
|
+ % We don't want these characters active, ...
|
|
+ \catcode`\-=\other \catcode`\_=\other
|
|
+ % ..., but we might end up with active ones in the argument if
|
|
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
|
|
+ % So \let them to their normal equivalents.
|
|
+ \let-\realdash \let_\normalunderscore
|
|
+ }
|
|
+}
|
|
+
|
|
+% We have this subroutine so that we can handle at least some @value's
|
|
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
|
|
+% The command has to be fully expandable (if the variable is set), since
|
|
+% the result winds up in the index file. This means that if the
|
|
+% variable's value contains other Texinfo commands, it's almost certain
|
|
+% it will fail (although perhaps we could fix that with sufficient work
|
|
+% to do a one-level expansion on the result, instead of complete).
|
|
+%
|
|
+\def\expandablevalue#1{%
|
|
+ \expandafter\ifx\csname SET#1\endcsname\relax
|
|
+ {[No value for ``#1'']}%
|
|
+ \message{Variable `#1', used in @value, is not set.}%
|
|
+ \else
|
|
+ \csname SET#1\endcsname
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
|
|
+% with @set.
|
|
+%
|
|
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
|
|
+%
|
|
+\makecond{ifset}
|
|
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
|
|
+\def\doifset#1#2{%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \let\next=\empty
|
|
+ \expandafter\ifx\csname SET#2\endcsname\relax
|
|
+ #1% If not set, redefine \next.
|
|
+ \fi
|
|
+ \expandafter
|
|
+ }\next
|
|
+}
|
|
+\def\ifsetfail{\doignore{ifset}}
|
|
+
|
|
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
|
|
+% defined with @set, or has been undefined with @clear.
|
|
+%
|
|
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
|
|
+% above code: if the variable is not set, do nothing, if it is set,
|
|
+% then redefine \next to \ifclearfail.
|
|
+%
|
|
+\makecond{ifclear}
|
|
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
|
|
+\def\ifclearfail{\doignore{ifclear}}
|
|
+
|
|
+% @dircategory CATEGORY -- specify a category of the dir file
|
|
+% which this file should belong to. Ignore this in TeX.
|
|
+\let\dircategory=\comment
|
|
+
|
|
+% @defininfoenclose.
|
|
+\let\definfoenclose=\comment
|
|
+
|
|
+
|
|
+\message{indexing,}
|
|
+% Index generation facilities
|
|
+
|
|
+% Define \newwrite to be identical to plain tex's \newwrite
|
|
+% except not \outer, so it can be used within macros and \if's.
|
|
+\edef\newwrite{\makecsname{ptexnewwrite}}
|
|
+
|
|
+% \newindex {foo} defines an index named foo.
|
|
+% It automatically defines \fooindex such that
|
|
+% \fooindex ...rest of line... puts an entry in the index foo.
|
|
+% It also defines \fooindfile to be the number of the output channel for
|
|
+% the file that accumulates this index. The file's extension is foo.
|
|
+% The name of an index should be no more than 2 characters long
|
|
+% for the sake of vms.
|
|
+%
|
|
+\def\newindex#1{%
|
|
+ \iflinks
|
|
+ \expandafter\newwrite \csname#1indfile\endcsname
|
|
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
|
|
+ \fi
|
|
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
|
|
+ \noexpand\doindex{#1}}
|
|
+}
|
|
+
|
|
+% @defindex foo == \newindex{foo}
|
|
+%
|
|
+\def\defindex{\parsearg\newindex}
|
|
+
|
|
+% Define @defcodeindex, like @defindex except put all entries in @code.
|
|
+%
|
|
+\def\defcodeindex{\parsearg\newcodeindex}
|
|
+%
|
|
+\def\newcodeindex#1{%
|
|
+ \iflinks
|
|
+ \expandafter\newwrite \csname#1indfile\endcsname
|
|
+ \openout \csname#1indfile\endcsname \jobname.#1
|
|
+ \fi
|
|
+ \expandafter\xdef\csname#1index\endcsname{%
|
|
+ \noexpand\docodeindex{#1}}%
|
|
+}
|
|
+
|
|
+
|
|
+% @synindex foo bar makes index foo feed into index bar.
|
|
+% Do this instead of @defindex foo if you don't want it as a separate index.
|
|
+%
|
|
+% @syncodeindex foo bar similar, but put all entries made for index foo
|
|
+% inside @code.
|
|
+%
|
|
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
|
|
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
|
|
+
|
|
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
|
|
+% #3 the target index (bar).
|
|
+\def\dosynindex#1#2#3{%
|
|
+ % Only do \closeout if we haven't already done it, else we'll end up
|
|
+ % closing the target index.
|
|
+ \expandafter \ifx\csname donesynindex#2\endcsname \undefined
|
|
+ % The \closeout helps reduce unnecessary open files; the limit on the
|
|
+ % Acorn RISC OS is a mere 16 files.
|
|
+ \expandafter\closeout\csname#2indfile\endcsname
|
|
+ \expandafter\let\csname\donesynindex#2\endcsname = 1
|
|
+ \fi
|
|
+ % redefine \fooindfile:
|
|
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
|
|
+ \expandafter\let\csname#2indfile\endcsname=\temp
|
|
+ % redefine \fooindex:
|
|
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
|
|
+}
|
|
+
|
|
+% Define \doindex, the driver for all \fooindex macros.
|
|
+% Argument #1 is generated by the calling \fooindex macro,
|
|
+% and it is "foo", the name of the index.
|
|
+
|
|
+% \doindex just uses \parsearg; it calls \doind for the actual work.
|
|
+% This is because \doind is more useful to call from other macros.
|
|
+
|
|
+% There is also \dosubind {index}{topic}{subtopic}
|
|
+% which makes an entry in a two-level index such as the operation index.
|
|
+
|
|
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
|
|
+\def\singleindexer #1{\doind{\indexname}{#1}}
|
|
+
|
|
+% like the previous two, but they put @code around the argument.
|
|
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
|
|
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
|
|
+
|
|
+% Take care of Texinfo commands that can appear in an index entry.
|
|
+% Since there are some commands we want to expand, and others we don't,
|
|
+% we have to laboriously prevent expansion for those that we don't.
|
|
+%
|
|
+\def\indexdummies{%
|
|
+ \escapechar = `\\ % use backslash in output files.
|
|
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
|
|
+ \def\ {\realbackslash\space }%
|
|
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
|
|
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
|
|
+ % braces and backslashes are used only as delimiters.
|
|
+ \let\{ = \mylbrace
|
|
+ \let\} = \myrbrace
|
|
+ %
|
|
+ % Do the redefinitions.
|
|
+ \commondummies
|
|
+}
|
|
+
|
|
+% For the aux and toc files, @ is the escape character. So we want to
|
|
+% redefine everything using @ as the escape character (instead of
|
|
+% \realbackslash, still used for index files). When everything uses @,
|
|
+% this will be simpler.
|
|
+%
|
|
+\def\atdummies{%
|
|
+ \def\@{@@}%
|
|
+ \def\ {@ }%
|
|
+ \let\{ = \lbraceatcmd
|
|
+ \let\} = \rbraceatcmd
|
|
+ %
|
|
+ % Do the redefinitions.
|
|
+ \commondummies
|
|
+}
|
|
+
|
|
+% Called from \indexdummies and \atdummies.
|
|
+%
|
|
+\def\commondummies{%
|
|
+ %
|
|
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
|
|
+ % preventing its expansion. This is used only for control% words,
|
|
+ % not control letters, because the \space would be incorrect for
|
|
+ % control characters, but is needed to separate the control word
|
|
+ % from whatever follows.
|
|
+ %
|
|
+ % For control letters, we have \definedummyletter, which omits the
|
|
+ % space.
|
|
+ %
|
|
+ % These can be used both for control words that take an argument and
|
|
+ % those that do not. If it is followed by {arg} in the input, then
|
|
+ % that will dutifully get written to the index (or wherever).
|
|
+ %
|
|
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
|
|
+ \def\definedummyletter##1{\def##1{\string##1}}%
|
|
+ \let\definedummyaccent\definedummyletter
|
|
+ %
|
|
+ \commondummiesnofonts
|
|
+ %
|
|
+ \definedummyletter\_%
|
|
+ %
|
|
+ % Non-English letters.
|
|
+ \definedummyword\AA
|
|
+ \definedummyword\AE
|
|
+ \definedummyword\L
|
|
+ \definedummyword\OE
|
|
+ \definedummyword\O
|
|
+ \definedummyword\aa
|
|
+ \definedummyword\ae
|
|
+ \definedummyword\l
|
|
+ \definedummyword\oe
|
|
+ \definedummyword\o
|
|
+ \definedummyword\ss
|
|
+ \definedummyword\exclamdown
|
|
+ \definedummyword\questiondown
|
|
+ \definedummyword\ordf
|
|
+ \definedummyword\ordm
|
|
+ %
|
|
+ % Although these internal commands shouldn't show up, sometimes they do.
|
|
+ \definedummyword\bf
|
|
+ \definedummyword\gtr
|
|
+ \definedummyword\hat
|
|
+ \definedummyword\less
|
|
+ \definedummyword\sf
|
|
+ \definedummyword\sl
|
|
+ \definedummyword\tclose
|
|
+ \definedummyword\tt
|
|
+ %
|
|
+ \definedummyword\LaTeX
|
|
+ \definedummyword\TeX
|
|
+ %
|
|
+ % Assorted special characters.
|
|
+ \definedummyword\bullet
|
|
+ \definedummyword\comma
|
|
+ \definedummyword\copyright
|
|
+ \definedummyword\registeredsymbol
|
|
+ \definedummyword\dots
|
|
+ \definedummyword\enddots
|
|
+ \definedummyword\equiv
|
|
+ \definedummyword\error
|
|
+ \definedummyword\euro
|
|
+ \definedummyword\expansion
|
|
+ \definedummyword\minus
|
|
+ \definedummyword\pounds
|
|
+ \definedummyword\point
|
|
+ \definedummyword\print
|
|
+ \definedummyword\result
|
|
+ %
|
|
+ % We want to disable all macros so that they are not expanded by \write.
|
|
+ \macrolist
|
|
+ %
|
|
+ \normalturnoffactive
|
|
+ %
|
|
+ % Handle some cases of @value -- where it does not contain any
|
|
+ % (non-fully-expandable) commands.
|
|
+ \makevalueexpandable
|
|
+}
|
|
+
|
|
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
|
|
+%
|
|
+% Better have this without active chars.
|
|
+{
|
|
+ \catcode`\~=\other
|
|
+ \gdef\commondummiesnofonts{%
|
|
+ % Control letters and accents.
|
|
+ \definedummyletter\!%
|
|
+ \definedummyaccent\"%
|
|
+ \definedummyaccent\'%
|
|
+ \definedummyletter\*%
|
|
+ \definedummyaccent\,%
|
|
+ \definedummyletter\.%
|
|
+ \definedummyletter\/%
|
|
+ \definedummyletter\:%
|
|
+ \definedummyaccent\=%
|
|
+ \definedummyletter\?%
|
|
+ \definedummyaccent\^%
|
|
+ \definedummyaccent\`%
|
|
+ \definedummyaccent\~%
|
|
+ \definedummyword\u
|
|
+ \definedummyword\v
|
|
+ \definedummyword\H
|
|
+ \definedummyword\dotaccent
|
|
+ \definedummyword\ringaccent
|
|
+ \definedummyword\tieaccent
|
|
+ \definedummyword\ubaraccent
|
|
+ \definedummyword\udotaccent
|
|
+ \definedummyword\dotless
|
|
+ %
|
|
+ % Texinfo font commands.
|
|
+ \definedummyword\b
|
|
+ \definedummyword\i
|
|
+ \definedummyword\r
|
|
+ \definedummyword\sc
|
|
+ \definedummyword\t
|
|
+ %
|
|
+ % Commands that take arguments.
|
|
+ \definedummyword\acronym
|
|
+ \definedummyword\cite
|
|
+ \definedummyword\code
|
|
+ \definedummyword\command
|
|
+ \definedummyword\dfn
|
|
+ \definedummyword\emph
|
|
+ \definedummyword\env
|
|
+ \definedummyword\file
|
|
+ \definedummyword\kbd
|
|
+ \definedummyword\key
|
|
+ \definedummyword\math
|
|
+ \definedummyword\option
|
|
+ \definedummyword\samp
|
|
+ \definedummyword\strong
|
|
+ \definedummyword\tie
|
|
+ \definedummyword\uref
|
|
+ \definedummyword\url
|
|
+ \definedummyword\var
|
|
+ \definedummyword\verb
|
|
+ \definedummyword\w
|
|
+ }
|
|
+}
|
|
+
|
|
+% \indexnofonts is used when outputting the strings to sort the index
|
|
+% by, and when constructing control sequence names. It eliminates all
|
|
+% control sequences and just writes whatever the best ASCII sort string
|
|
+% would be for a given command (usually its argument).
|
|
+%
|
|
+\def\indexnofonts{%
|
|
+ % Accent commands should become @asis.
|
|
+ \def\definedummyaccent##1{\let##1\asis}%
|
|
+ % We can just ignore other control letters.
|
|
+ \def\definedummyletter##1{\let##1\empty}%
|
|
+ % Hopefully, all control words can become @asis.
|
|
+ \let\definedummyword\definedummyaccent
|
|
+ %
|
|
+ \commondummiesnofonts
|
|
+ %
|
|
+ % Don't no-op \tt, since it isn't a user-level command
|
|
+ % and is used in the definitions of the active chars like <, >, |, etc.
|
|
+ % Likewise with the other plain tex font commands.
|
|
+ %\let\tt=\asis
|
|
+ %
|
|
+ \def\ { }%
|
|
+ \def\@{@}%
|
|
+ % how to handle braces?
|
|
+ \def\_{\normalunderscore}%
|
|
+ %
|
|
+ % Non-English letters.
|
|
+ \def\AA{AA}%
|
|
+ \def\AE{AE}%
|
|
+ \def\L{L}%
|
|
+ \def\OE{OE}%
|
|
+ \def\O{O}%
|
|
+ \def\aa{aa}%
|
|
+ \def\ae{ae}%
|
|
+ \def\l{l}%
|
|
+ \def\oe{oe}%
|
|
+ \def\o{o}%
|
|
+ \def\ss{ss}%
|
|
+ \def\exclamdown{!}%
|
|
+ \def\questiondown{?}%
|
|
+ \def\ordf{a}%
|
|
+ \def\ordm{o}%
|
|
+ %
|
|
+ \def\LaTeX{LaTeX}%
|
|
+ \def\TeX{TeX}%
|
|
+ %
|
|
+ % Assorted special characters.
|
|
+ % (The following {} will end up in the sort string, but that's ok.)
|
|
+ \def\bullet{bullet}%
|
|
+ \def\comma{,}%
|
|
+ \def\copyright{copyright}%
|
|
+ \def\registeredsymbol{R}%
|
|
+ \def\dots{...}%
|
|
+ \def\enddots{...}%
|
|
+ \def\equiv{==}%
|
|
+ \def\error{error}%
|
|
+ \def\euro{euro}%
|
|
+ \def\expansion{==>}%
|
|
+ \def\minus{-}%
|
|
+ \def\pounds{pounds}%
|
|
+ \def\point{.}%
|
|
+ \def\print{-|}%
|
|
+ \def\result{=>}%
|
|
+ %
|
|
+ % We need to get rid of all macros, leaving only the arguments (if present).
|
|
+ % Of course this is not nearly correct, but it is the best we can do for now.
|
|
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
|
|
+ % writing an index entry, and texindex isn't prepared for an index sort entry
|
|
+ % that starts with \.
|
|
+ %
|
|
+ % Since macro invocations are followed by braces, we can just redefine them
|
|
+ % to take a single TeX argument. The case of a macro invocation that
|
|
+ % goes to end-of-line is not handled.
|
|
+ %
|
|
+ \macrolist
|
|
+}
|
|
+
|
|
+\let\indexbackslash=0 %overridden during \printindex.
|
|
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
|
|
+
|
|
+% Most index entries go through here, but \dosubind is the general case.
|
|
+% #1 is the index name, #2 is the entry text.
|
|
+\def\doind#1#2{\dosubind{#1}{#2}{}}
|
|
+
|
|
+% Workhorse for all \fooindexes.
|
|
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
|
|
+% empty if called from \doind, as we usually are (the main exception
|
|
+% is with most defuns, which call us directly).
|
|
+%
|
|
+\def\dosubind#1#2#3{%
|
|
+ \iflinks
|
|
+ {%
|
|
+ % Store the main index entry text (including the third arg).
|
|
+ \toks0 = {#2}%
|
|
+ % If third arg is present, precede it with a space.
|
|
+ \def\thirdarg{#3}%
|
|
+ \ifx\thirdarg\empty \else
|
|
+ \toks0 = \expandafter{\the\toks0 \space #3}%
|
|
+ \fi
|
|
+ %
|
|
+ \edef\writeto{\csname#1indfile\endcsname}%
|
|
+ %
|
|
+ \ifvmode
|
|
+ \dosubindsanitize
|
|
+ \else
|
|
+ \dosubindwrite
|
|
+ \fi
|
|
+ }%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% Write the entry in \toks0 to the index file:
|
|
+%
|
|
+\def\dosubindwrite{%
|
|
+ % Put the index entry in the margin if desired.
|
|
+ \ifx\SETmarginindex\relax\else
|
|
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
|
|
+ \fi
|
|
+ %
|
|
+ % Remember, we are within a group.
|
|
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
|
|
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
|
|
+ % so it will be output as is; and it will print as backslash.
|
|
+ %
|
|
+ % Process the index entry with all font commands turned off, to
|
|
+ % get the string to sort by.
|
|
+ {\indexnofonts
|
|
+ \edef\temp{\the\toks0}% need full expansion
|
|
+ \xdef\indexsorttmp{\temp}%
|
|
+ }%
|
|
+ %
|
|
+ % Set up the complete index entry, with both the sort key and
|
|
+ % the original text, including any font commands. We write
|
|
+ % three arguments to \entry to the .?? file (four in the
|
|
+ % subentry case), texindex reduces to two when writing the .??s
|
|
+ % sorted result.
|
|
+ \edef\temp{%
|
|
+ \write\writeto{%
|
|
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
|
|
+ }%
|
|
+ \temp
|
|
+}
|
|
+
|
|
+% Take care of unwanted page breaks:
|
|
+%
|
|
+% If a skip is the last thing on the list now, preserve it
|
|
+% by backing up by \lastskip, doing the \write, then inserting
|
|
+% the skip again. Otherwise, the whatsit generated by the
|
|
+% \write will make \lastskip zero. The result is that sequences
|
|
+% like this:
|
|
+% @end defun
|
|
+% @tindex whatever
|
|
+% @defun ...
|
|
+% will have extra space inserted, because the \medbreak in the
|
|
+% start of the @defun won't see the skip inserted by the @end of
|
|
+% the previous defun.
|
|
+%
|
|
+% But don't do any of this if we're not in vertical mode. We
|
|
+% don't want to do a \vskip and prematurely end a paragraph.
|
|
+%
|
|
+% Avoid page breaks due to these extra skips, too.
|
|
+%
|
|
+% But wait, there is a catch there:
|
|
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
|
|
+% sufficient for this purpose, as it ignores stretch and shrink parts
|
|
+% of the skip. The only way seems to be to check the textual
|
|
+% representation of the skip.
|
|
+%
|
|
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
|
|
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
|
|
+%
|
|
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
|
|
+%
|
|
+% ..., ready, GO:
|
|
+%
|
|
+\def\dosubindsanitize{%
|
|
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
|
|
+ \skip0 = \lastskip
|
|
+ \edef\lastskipmacro{\the\lastskip}%
|
|
+ \count255 = \lastpenalty
|
|
+ %
|
|
+ % If \lastskip is nonzero, that means the last item was a
|
|
+ % skip. And since a skip is discardable, that means this
|
|
+ % -\skip0 glue we're inserting is preceded by a
|
|
+ % non-discardable item, therefore it is not a potential
|
|
+ % breakpoint, therefore no \nobreak needed.
|
|
+ \ifx\lastskipmacro\zeroskipmacro
|
|
+ \else
|
|
+ \vskip-\skip0
|
|
+ \fi
|
|
+ %
|
|
+ \dosubindwrite
|
|
+ %
|
|
+ \ifx\lastskipmacro\zeroskipmacro
|
|
+ % If \lastskip was zero, perhaps the last item was a penalty, and
|
|
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
|
|
+ % to re-insert the same penalty (values >10000 are used for various
|
|
+ % signals); since we just inserted a non-discardable item, any
|
|
+ % following glue (such as a \parskip) would be a breakpoint. For example:
|
|
+ %
|
|
+ % @deffn deffn-whatever
|
|
+ % @vindex index-whatever
|
|
+ % Description.
|
|
+ % would allow a break between the index-whatever whatsit
|
|
+ % and the "Description." paragraph.
|
|
+ \ifnum\count255>9999 \penalty\count255 \fi
|
|
+ \else
|
|
+ % On the other hand, if we had a nonzero \lastskip,
|
|
+ % this make-up glue would be preceded by a non-discardable item
|
|
+ % (the whatsit from the \write), so we must insert a \nobreak.
|
|
+ \nobreak\vskip\skip0
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% The index entry written in the file actually looks like
|
|
+% \entry {sortstring}{page}{topic}
|
|
+% or
|
|
+% \entry {sortstring}{page}{topic}{subtopic}
|
|
+% The texindex program reads in these files and writes files
|
|
+% containing these kinds of lines:
|
|
+% \initial {c}
|
|
+% before the first topic whose initial is c
|
|
+% \entry {topic}{pagelist}
|
|
+% for a topic that is used without subtopics
|
|
+% \primary {topic}
|
|
+% for the beginning of a topic that is used with subtopics
|
|
+% \secondary {subtopic}{pagelist}
|
|
+% for each subtopic.
|
|
+
|
|
+% Define the user-accessible indexing commands
|
|
+% @findex, @vindex, @kindex, @cindex.
|
|
+
|
|
+\def\findex {\fnindex}
|
|
+\def\kindex {\kyindex}
|
|
+\def\cindex {\cpindex}
|
|
+\def\vindex {\vrindex}
|
|
+\def\tindex {\tpindex}
|
|
+\def\pindex {\pgindex}
|
|
+
|
|
+\def\cindexsub {\begingroup\obeylines\cindexsub}
|
|
+{\obeylines %
|
|
+\gdef\cindexsub "#1" #2^^M{\endgroup %
|
|
+\dosubind{cp}{#2}{#1}}}
|
|
+
|
|
+% Define the macros used in formatting output of the sorted index material.
|
|
+
|
|
+% @printindex causes a particular index (the ??s file) to get printed.
|
|
+% It does not print any chapter heading (usually an @unnumbered).
|
|
+%
|
|
+\parseargdef\printindex{\begingroup
|
|
+ \dobreak \chapheadingskip{10000}%
|
|
+ %
|
|
+ \smallfonts \rm
|
|
+ \tolerance = 9500
|
|
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
|
|
+ %
|
|
+ % See if the index file exists and is nonempty.
|
|
+ % Change catcode of @ here so that if the index file contains
|
|
+ % \initial {@}
|
|
+ % as its first line, TeX doesn't complain about mismatched braces
|
|
+ % (because it thinks @} is a control sequence).
|
|
+ \catcode`\@ = 11
|
|
+ \openin 1 \jobname.#1s
|
|
+ \ifeof 1
|
|
+ % \enddoublecolumns gets confused if there is no text in the index,
|
|
+ % and it loses the chapter title and the aux file entries for the
|
|
+ % index. The easiest way to prevent this problem is to make sure
|
|
+ % there is some text.
|
|
+ \putwordIndexNonexistent
|
|
+ \else
|
|
+ %
|
|
+ % If the index file exists but is empty, then \openin leaves \ifeof
|
|
+ % false. We have to make TeX try to read something from the file, so
|
|
+ % it can discover if there is anything in it.
|
|
+ \read 1 to \temp
|
|
+ \ifeof 1
|
|
+ \putwordIndexIsEmpty
|
|
+ \else
|
|
+ % Index files are almost Texinfo source, but we use \ as the escape
|
|
+ % character. It would be better to use @, but that's too big a change
|
|
+ % to make right now.
|
|
+ \def\indexbackslash{\backslashcurfont}%
|
|
+ \catcode`\\ = 0
|
|
+ \escapechar = `\\
|
|
+ \begindoublecolumns
|
|
+ \input \jobname.#1s
|
|
+ \enddoublecolumns
|
|
+ \fi
|
|
+ \fi
|
|
+ \closein 1
|
|
+\endgroup}
|
|
+
|
|
+% These macros are used by the sorted index file itself.
|
|
+% Change them to control the appearance of the index.
|
|
+
|
|
+\def\initial#1{{%
|
|
+ % Some minor font changes for the special characters.
|
|
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
|
|
+ %
|
|
+ % Remove any glue we may have, we'll be inserting our own.
|
|
+ \removelastskip
|
|
+ %
|
|
+ % We like breaks before the index initials, so insert a bonus.
|
|
+ \nobreak
|
|
+ \vskip 0pt plus 3\baselineskip
|
|
+ \penalty 0
|
|
+ \vskip 0pt plus -3\baselineskip
|
|
+ %
|
|
+ % Typeset the initial. Making this add up to a whole number of
|
|
+ % baselineskips increases the chance of the dots lining up from column
|
|
+ % to column. It still won't often be perfect, because of the stretch
|
|
+ % we need before each entry, but it's better.
|
|
+ %
|
|
+ % No shrink because it confuses \balancecolumns.
|
|
+ \vskip 1.67\baselineskip plus .5\baselineskip
|
|
+ \leftline{\secbf #1}%
|
|
+ % Do our best not to break after the initial.
|
|
+ \nobreak
|
|
+ \vskip .33\baselineskip plus .1\baselineskip
|
|
+}}
|
|
+
|
|
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
|
|
+% then page number (#2) flushed to the right margin. It is used for index
|
|
+% and table of contents entries. The paragraph is indented by \leftskip.
|
|
+%
|
|
+% A straightforward implementation would start like this:
|
|
+% \def\entry#1#2{...
|
|
+% But this frozes the catcodes in the argument, and can cause problems to
|
|
+% @code, which sets - active. This problem was fixed by a kludge---
|
|
+% ``-'' was active throughout whole index, but this isn't really right.
|
|
+%
|
|
+% The right solution is to prevent \entry from swallowing the whole text.
|
|
+% --kasal, 21nov03
|
|
+\def\entry{%
|
|
+ \begingroup
|
|
+ %
|
|
+ % Start a new paragraph if necessary, so our assignments below can't
|
|
+ % affect previous text.
|
|
+ \par
|
|
+ %
|
|
+ % Do not fill out the last line with white space.
|
|
+ \parfillskip = 0in
|
|
+ %
|
|
+ % No extra space above this paragraph.
|
|
+ \parskip = 0in
|
|
+ %
|
|
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
|
|
+ \finalhyphendemerits = 0
|
|
+ %
|
|
+ % \hangindent is only relevant when the entry text and page number
|
|
+ % don't both fit on one line. In that case, bob suggests starting the
|
|
+ % dots pretty far over on the line. Unfortunately, a large
|
|
+ % indentation looks wrong when the entry text itself is broken across
|
|
+ % lines. So we use a small indentation and put up with long leaders.
|
|
+ %
|
|
+ % \hangafter is reset to 1 (which is the value we want) at the start
|
|
+ % of each paragraph, so we need not do anything with that.
|
|
+ \hangindent = 2em
|
|
+ %
|
|
+ % When the entry text needs to be broken, just fill out the first line
|
|
+ % with blank space.
|
|
+ \rightskip = 0pt plus1fil
|
|
+ %
|
|
+ % A bit of stretch before each entry for the benefit of balancing
|
|
+ % columns.
|
|
+ \vskip 0pt plus1pt
|
|
+ %
|
|
+ % Swallow the left brace of the text (first parameter):
|
|
+ \afterassignment\doentry
|
|
+ \let\temp =
|
|
+}
|
|
+\def\doentry{%
|
|
+ \bgroup % Instead of the swallowed brace.
|
|
+ \noindent
|
|
+ \aftergroup\finishentry
|
|
+ % And now comes the text of the entry.
|
|
+}
|
|
+\def\finishentry#1{%
|
|
+ % #1 is the page number.
|
|
+ %
|
|
+ % The following is kludged to not output a line of dots in the index if
|
|
+ % there are no page numbers. The next person who breaks this will be
|
|
+ % cursed by a Unix daemon.
|
|
+ \def\tempa{{\rm }}%
|
|
+ \def\tempb{#1}%
|
|
+ \edef\tempc{\tempa}%
|
|
+ \edef\tempd{\tempb}%
|
|
+ \ifx\tempc\tempd
|
|
+ \ %
|
|
+ \else
|
|
+ %
|
|
+ % If we must, put the page number on a line of its own, and fill out
|
|
+ % this line with blank space. (The \hfil is overwhelmed with the
|
|
+ % fill leaders glue in \indexdotfill if the page number does fit.)
|
|
+ \hfil\penalty50
|
|
+ \null\nobreak\indexdotfill % Have leaders before the page number.
|
|
+ %
|
|
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
|
|
+ % part of (the primitive) \par. Without it, a spurious underfull
|
|
+ % \hbox ensues.
|
|
+ \ifpdf
|
|
+ \pdfgettoks#1.%
|
|
+ \ \the\toksA
|
|
+ \else
|
|
+ \ #1%
|
|
+ \fi
|
|
+ \fi
|
|
+ \par
|
|
+ \endgroup
|
|
+}
|
|
+
|
|
+% Like \dotfill except takes at least 1 em.
|
|
+\def\indexdotfill{\cleaders
|
|
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
|
|
+
|
|
+\def\primary #1{\line{#1\hfil}}
|
|
+
|
|
+\newskip\secondaryindent \secondaryindent=0.5cm
|
|
+\def\secondary#1#2{{%
|
|
+ \parfillskip=0in
|
|
+ \parskip=0in
|
|
+ \hangindent=1in
|
|
+ \hangafter=1
|
|
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
|
|
+ \ifpdf
|
|
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
|
|
+ \else
|
|
+ #2
|
|
+ \fi
|
|
+ \par
|
|
+}}
|
|
+
|
|
+% Define two-column mode, which we use to typeset indexes.
|
|
+% Adapted from the TeXbook, page 416, which is to say,
|
|
+% the manmac.tex format used to print the TeXbook itself.
|
|
+\catcode`\@=11
|
|
+
|
|
+\newbox\partialpage
|
|
+\newdimen\doublecolumnhsize
|
|
+
|
|
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
|
|
+ % Grab any single-column material above us.
|
|
+ \output = {%
|
|
+ %
|
|
+ % Here is a possibility not foreseen in manmac: if we accumulate a
|
|
+ % whole lot of material, we might end up calling this \output
|
|
+ % routine twice in a row (see the doublecol-lose test, which is
|
|
+ % essentially a couple of indexes with @setchapternewpage off). In
|
|
+ % that case we just ship out what is in \partialpage with the normal
|
|
+ % output routine. Generally, \partialpage will be empty when this
|
|
+ % runs and this will be a no-op. See the indexspread.tex test case.
|
|
+ \ifvoid\partialpage \else
|
|
+ \onepageout{\pagecontents\partialpage}%
|
|
+ \fi
|
|
+ %
|
|
+ \global\setbox\partialpage = \vbox{%
|
|
+ % Unvbox the main output page.
|
|
+ \unvbox\PAGE
|
|
+ \kern-\topskip \kern\baselineskip
|
|
+ }%
|
|
+ }%
|
|
+ \eject % run that output routine to set \partialpage
|
|
+ %
|
|
+ % Use the double-column output routine for subsequent pages.
|
|
+ \output = {\doublecolumnout}%
|
|
+ %
|
|
+ % Change the page size parameters. We could do this once outside this
|
|
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
|
|
+ % format, but then we repeat the same computation. Repeating a couple
|
|
+ % of assignments once per index is clearly meaningless for the
|
|
+ % execution time, so we may as well do it in one place.
|
|
+ %
|
|
+ % First we halve the line length, less a little for the gutter between
|
|
+ % the columns. We compute the gutter based on the line length, so it
|
|
+ % changes automatically with the paper format. The magic constant
|
|
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
|
|
+ % as it did when we hard-coded it.
|
|
+ %
|
|
+ % We put the result in a separate register, \doublecolumhsize, so we
|
|
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
|
|
+ % been clobbered.
|
|
+ %
|
|
+ \doublecolumnhsize = \hsize
|
|
+ \advance\doublecolumnhsize by -.04154\hsize
|
|
+ \divide\doublecolumnhsize by 2
|
|
+ \hsize = \doublecolumnhsize
|
|
+ %
|
|
+ % Double the \vsize as well. (We don't need a separate register here,
|
|
+ % since nobody clobbers \vsize.)
|
|
+ \vsize = 2\vsize
|
|
+}
|
|
+
|
|
+% The double-column output routine for all double-column pages except
|
|
+% the last.
|
|
+%
|
|
+\def\doublecolumnout{%
|
|
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
|
|
+ % Get the available space for the double columns -- the normal
|
|
+ % (undoubled) page height minus any material left over from the
|
|
+ % previous page.
|
|
+ \dimen@ = \vsize
|
|
+ \divide\dimen@ by 2
|
|
+ \advance\dimen@ by -\ht\partialpage
|
|
+ %
|
|
+ % box0 will be the left-hand column, box2 the right.
|
|
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
|
|
+ \onepageout\pagesofar
|
|
+ \unvbox255
|
|
+ \penalty\outputpenalty
|
|
+}
|
|
+%
|
|
+% Re-output the contents of the output page -- any previous material,
|
|
+% followed by the two boxes we just split, in box0 and box2.
|
|
+\def\pagesofar{%
|
|
+ \unvbox\partialpage
|
|
+ %
|
|
+ \hsize = \doublecolumnhsize
|
|
+ \wd0=\hsize \wd2=\hsize
|
|
+ \hbox to\pagewidth{\box0\hfil\box2}%
|
|
+}
|
|
+%
|
|
+% All done with double columns.
|
|
+\def\enddoublecolumns{%
|
|
+ \output = {%
|
|
+ % Split the last of the double-column material. Leave it on the
|
|
+ % current page, no automatic page break.
|
|
+ \balancecolumns
|
|
+ %
|
|
+ % If we end up splitting too much material for the current page,
|
|
+ % though, there will be another page break right after this \output
|
|
+ % invocation ends. Having called \balancecolumns once, we do not
|
|
+ % want to call it again. Therefore, reset \output to its normal
|
|
+ % definition right away. (We hope \balancecolumns will never be
|
|
+ % called on to balance too much material, but if it is, this makes
|
|
+ % the output somewhat more palatable.)
|
|
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
|
|
+ }%
|
|
+ \eject
|
|
+ \endgroup % started in \begindoublecolumns
|
|
+ %
|
|
+ % \pagegoal was set to the doubled \vsize above, since we restarted
|
|
+ % the current page. We're now back to normal single-column
|
|
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
|
|
+ % \endgroup where \vsize got restored).
|
|
+ \pagegoal = \vsize
|
|
+}
|
|
+%
|
|
+% Called at the end of the double column material.
|
|
+\def\balancecolumns{%
|
|
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
|
|
+ \dimen@ = \ht0
|
|
+ \advance\dimen@ by \topskip
|
|
+ \advance\dimen@ by-\baselineskip
|
|
+ \divide\dimen@ by 2 % target to split to
|
|
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
|
|
+ \splittopskip = \topskip
|
|
+ % Loop until we get a decent breakpoint.
|
|
+ {%
|
|
+ \vbadness = 10000
|
|
+ \loop
|
|
+ \global\setbox3 = \copy0
|
|
+ \global\setbox1 = \vsplit3 to \dimen@
|
|
+ \ifdim\ht3>\dimen@
|
|
+ \global\advance\dimen@ by 1pt
|
|
+ \repeat
|
|
+ }%
|
|
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
|
|
+ \setbox0=\vbox to\dimen@{\unvbox1}%
|
|
+ \setbox2=\vbox to\dimen@{\unvbox3}%
|
|
+ %
|
|
+ \pagesofar
|
|
+}
|
|
+\catcode`\@ = \other
|
|
+
|
|
+
|
|
+\message{sectioning,}
|
|
+% Chapters, sections, etc.
|
|
+
|
|
+% \unnumberedno is an oxymoron, of course. But we count the unnumbered
|
|
+% sections so that we can refer to them unambiguously in the pdf
|
|
+% outlines by their "section number". We avoid collisions with chapter
|
|
+% numbers by starting them at 10000. (If a document ever has 10000
|
|
+% chapters, we're in trouble anyway, I'm sure.)
|
|
+\newcount\unnumberedno \unnumberedno = 10000
|
|
+\newcount\chapno
|
|
+\newcount\secno \secno=0
|
|
+\newcount\subsecno \subsecno=0
|
|
+\newcount\subsubsecno \subsubsecno=0
|
|
+
|
|
+% This counter is funny since it counts through charcodes of letters A, B, ...
|
|
+\newcount\appendixno \appendixno = `\@
|
|
+%
|
|
+% \def\appendixletter{\char\the\appendixno}
|
|
+% We do the following ugly conditional instead of the above simple
|
|
+% construct for the sake of pdftex, which needs the actual
|
|
+% letter in the expansion, not just typeset.
|
|
+%
|
|
+\def\appendixletter{%
|
|
+ \ifnum\appendixno=`A A%
|
|
+ \else\ifnum\appendixno=`B B%
|
|
+ \else\ifnum\appendixno=`C C%
|
|
+ \else\ifnum\appendixno=`D D%
|
|
+ \else\ifnum\appendixno=`E E%
|
|
+ \else\ifnum\appendixno=`F F%
|
|
+ \else\ifnum\appendixno=`G G%
|
|
+ \else\ifnum\appendixno=`H H%
|
|
+ \else\ifnum\appendixno=`I I%
|
|
+ \else\ifnum\appendixno=`J J%
|
|
+ \else\ifnum\appendixno=`K K%
|
|
+ \else\ifnum\appendixno=`L L%
|
|
+ \else\ifnum\appendixno=`M M%
|
|
+ \else\ifnum\appendixno=`N N%
|
|
+ \else\ifnum\appendixno=`O O%
|
|
+ \else\ifnum\appendixno=`P P%
|
|
+ \else\ifnum\appendixno=`Q Q%
|
|
+ \else\ifnum\appendixno=`R R%
|
|
+ \else\ifnum\appendixno=`S S%
|
|
+ \else\ifnum\appendixno=`T T%
|
|
+ \else\ifnum\appendixno=`U U%
|
|
+ \else\ifnum\appendixno=`V V%
|
|
+ \else\ifnum\appendixno=`W W%
|
|
+ \else\ifnum\appendixno=`X X%
|
|
+ \else\ifnum\appendixno=`Y Y%
|
|
+ \else\ifnum\appendixno=`Z Z%
|
|
+ % The \the is necessary, despite appearances, because \appendixletter is
|
|
+ % expanded while writing the .toc file. \char\appendixno is not
|
|
+ % expandable, thus it is written literally, thus all appendixes come out
|
|
+ % with the same letter (or @) in the toc without it.
|
|
+ \else\char\the\appendixno
|
|
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
|
|
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
|
|
+
|
|
+% Each @chapter defines this as the name of the chapter.
|
|
+% page headings and footings can use it. @section does likewise.
|
|
+% However, they are not reliable, because we don't use marks.
|
|
+\def\thischapter{}
|
|
+\def\thissection{}
|
|
+
|
|
+\newcount\absseclevel % used to calculate proper heading level
|
|
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
|
|
+
|
|
+% @raisesections: treat @section as chapter, @subsection as section, etc.
|
|
+\def\raisesections{\global\advance\secbase by -1}
|
|
+\let\up=\raisesections % original BFox name
|
|
+
|
|
+% @lowersections: treat @chapter as section, @section as subsection, etc.
|
|
+\def\lowersections{\global\advance\secbase by 1}
|
|
+\let\down=\lowersections % original BFox name
|
|
+
|
|
+% we only have subsub.
|
|
+\chardef\maxseclevel = 3
|
|
+%
|
|
+% A numbered section within an unnumbered changes to unnumbered too.
|
|
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
|
|
+\chardef\unmlevel = \maxseclevel
|
|
+%
|
|
+% Trace whether the current chapter is an appendix or not:
|
|
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
|
|
+\def\chapheadtype{N}
|
|
+
|
|
+% Choose a heading macro
|
|
+% #1 is heading type
|
|
+% #2 is heading level
|
|
+% #3 is text for heading
|
|
+\def\genhead#1#2#3{%
|
|
+ % Compute the abs. sec. level:
|
|
+ \absseclevel=#2
|
|
+ \advance\absseclevel by \secbase
|
|
+ % Make sure \absseclevel doesn't fall outside the range:
|
|
+ \ifnum \absseclevel < 0
|
|
+ \absseclevel = 0
|
|
+ \else
|
|
+ \ifnum \absseclevel > 3
|
|
+ \absseclevel = 3
|
|
+ \fi
|
|
+ \fi
|
|
+ % The heading type:
|
|
+ \def\headtype{#1}%
|
|
+ \if \headtype U%
|
|
+ \ifnum \absseclevel < \unmlevel
|
|
+ \chardef\unmlevel = \absseclevel
|
|
+ \fi
|
|
+ \else
|
|
+ % Check for appendix sections:
|
|
+ \ifnum \absseclevel = 0
|
|
+ \edef\chapheadtype{\headtype}%
|
|
+ \else
|
|
+ \if \headtype A\if \chapheadtype N%
|
|
+ \errmessage{@appendix... within a non-appendix chapter}%
|
|
+ \fi\fi
|
|
+ \fi
|
|
+ % Check for numbered within unnumbered:
|
|
+ \ifnum \absseclevel > \unmlevel
|
|
+ \def\headtype{U}%
|
|
+ \else
|
|
+ \chardef\unmlevel = 3
|
|
+ \fi
|
|
+ \fi
|
|
+ % Now print the heading:
|
|
+ \if \headtype U%
|
|
+ \ifcase\absseclevel
|
|
+ \unnumberedzzz{#3}%
|
|
+ \or \unnumberedseczzz{#3}%
|
|
+ \or \unnumberedsubseczzz{#3}%
|
|
+ \or \unnumberedsubsubseczzz{#3}%
|
|
+ \fi
|
|
+ \else
|
|
+ \if \headtype A%
|
|
+ \ifcase\absseclevel
|
|
+ \appendixzzz{#3}%
|
|
+ \or \appendixsectionzzz{#3}%
|
|
+ \or \appendixsubseczzz{#3}%
|
|
+ \or \appendixsubsubseczzz{#3}%
|
|
+ \fi
|
|
+ \else
|
|
+ \ifcase\absseclevel
|
|
+ \chapterzzz{#3}%
|
|
+ \or \seczzz{#3}%
|
|
+ \or \numberedsubseczzz{#3}%
|
|
+ \or \numberedsubsubseczzz{#3}%
|
|
+ \fi
|
|
+ \fi
|
|
+ \fi
|
|
+ \suppressfirstparagraphindent
|
|
+}
|
|
+
|
|
+% an interface:
|
|
+\def\numhead{\genhead N}
|
|
+\def\apphead{\genhead A}
|
|
+\def\unnmhead{\genhead U}
|
|
+
|
|
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
|
|
+% all lower-level sectioning counters to zero.
|
|
+%
|
|
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
|
|
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
|
|
+\let\chaplevelprefix = \empty
|
|
+%
|
|
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
|
|
+\def\chapterzzz#1{%
|
|
+ % section resetting is \global in case the chapter is in a group, such
|
|
+ % as an @include file.
|
|
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
|
|
+ \global\advance\chapno by 1
|
|
+ %
|
|
+ % Used for \float.
|
|
+ \gdef\chaplevelprefix{\the\chapno.}%
|
|
+ \resetallfloatnos
|
|
+ %
|
|
+ \message{\putwordChapter\space \the\chapno}%
|
|
+ %
|
|
+ % Write the actual heading.
|
|
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
|
|
+ %
|
|
+ % So @section and the like are numbered underneath this chapter.
|
|
+ \global\let\section = \numberedsec
|
|
+ \global\let\subsection = \numberedsubsec
|
|
+ \global\let\subsubsection = \numberedsubsubsec
|
|
+}
|
|
+
|
|
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
|
|
+\def\appendixzzz#1{%
|
|
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
|
|
+ \global\advance\appendixno by 1
|
|
+ \gdef\chaplevelprefix{\appendixletter.}%
|
|
+ \resetallfloatnos
|
|
+ %
|
|
+ \def\appendixnum{\putwordAppendix\space \appendixletter}%
|
|
+ \message{\appendixnum}%
|
|
+ %
|
|
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
|
|
+ %
|
|
+ \global\let\section = \appendixsec
|
|
+ \global\let\subsection = \appendixsubsec
|
|
+ \global\let\subsubsection = \appendixsubsubsec
|
|
+}
|
|
+
|
|
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
|
|
+\def\unnumberedzzz#1{%
|
|
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
|
|
+ \global\advance\unnumberedno by 1
|
|
+ %
|
|
+ % Since an unnumbered has no number, no prefix for figures.
|
|
+ \global\let\chaplevelprefix = \empty
|
|
+ \resetallfloatnos
|
|
+ %
|
|
+ % This used to be simply \message{#1}, but TeX fully expands the
|
|
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
|
|
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
|
|
+ % expanded @cite (which turns out to cause errors because \cite is meant
|
|
+ % to be executed, not expanded).
|
|
+ %
|
|
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
|
|
+ % as a result of the \message, we just want `@cite' itself. We use
|
|
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
|
|
+ % simply yielding the contents of <toks register>. (We also do this for
|
|
+ % the toc entries.)
|
|
+ \toks0 = {#1}%
|
|
+ \message{(\the\toks0)}%
|
|
+ %
|
|
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
|
|
+ %
|
|
+ \global\let\section = \unnumberedsec
|
|
+ \global\let\subsection = \unnumberedsubsec
|
|
+ \global\let\subsubsection = \unnumberedsubsubsec
|
|
+}
|
|
+
|
|
+% @centerchap is like @unnumbered, but the heading is centered.
|
|
+\outer\parseargdef\centerchap{%
|
|
+ % Well, we could do the following in a group, but that would break
|
|
+ % an assumption that \chapmacro is called at the outermost level.
|
|
+ % Thus we are safer this way: --kasal, 24feb04
|
|
+ \let\centerparametersmaybe = \centerparameters
|
|
+ \unnmhead0{#1}%
|
|
+ \let\centerparametersmaybe = \relax
|
|
+}
|
|
+
|
|
+% @top is like @unnumbered.
|
|
+\let\top\unnumbered
|
|
+
|
|
+% Sections.
|
|
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
|
|
+\def\seczzz#1{%
|
|
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
|
|
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
|
|
+}
|
|
+
|
|
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
|
|
+\def\appendixsectionzzz#1{%
|
|
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
|
|
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
|
|
+}
|
|
+\let\appendixsec\appendixsection
|
|
+
|
|
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
|
|
+\def\unnumberedseczzz#1{%
|
|
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
|
|
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
|
|
+}
|
|
+
|
|
+% Subsections.
|
|
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
|
|
+\def\numberedsubseczzz#1{%
|
|
+ \global\subsubsecno=0 \global\advance\subsecno by 1
|
|
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
|
|
+}
|
|
+
|
|
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
|
|
+\def\appendixsubseczzz#1{%
|
|
+ \global\subsubsecno=0 \global\advance\subsecno by 1
|
|
+ \sectionheading{#1}{subsec}{Yappendix}%
|
|
+ {\appendixletter.\the\secno.\the\subsecno}%
|
|
+}
|
|
+
|
|
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
|
|
+\def\unnumberedsubseczzz#1{%
|
|
+ \global\subsubsecno=0 \global\advance\subsecno by 1
|
|
+ \sectionheading{#1}{subsec}{Ynothing}%
|
|
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
|
|
+}
|
|
+
|
|
+% Subsubsections.
|
|
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
|
|
+\def\numberedsubsubseczzz#1{%
|
|
+ \global\advance\subsubsecno by 1
|
|
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
|
|
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
|
|
+}
|
|
+
|
|
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
|
|
+\def\appendixsubsubseczzz#1{%
|
|
+ \global\advance\subsubsecno by 1
|
|
+ \sectionheading{#1}{subsubsec}{Yappendix}%
|
|
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
|
|
+}
|
|
+
|
|
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
|
|
+\def\unnumberedsubsubseczzz#1{%
|
|
+ \global\advance\subsubsecno by 1
|
|
+ \sectionheading{#1}{subsubsec}{Ynothing}%
|
|
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
|
|
+}
|
|
+
|
|
+% These macros control what the section commands do, according
|
|
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
|
|
+% Define them by default for a numbered chapter.
|
|
+\let\section = \numberedsec
|
|
+\let\subsection = \numberedsubsec
|
|
+\let\subsubsection = \numberedsubsubsec
|
|
+
|
|
+% Define @majorheading, @heading and @subheading
|
|
+
|
|
+% NOTE on use of \vbox for chapter headings, section headings, and such:
|
|
+% 1) We use \vbox rather than the earlier \line to permit
|
|
+% overlong headings to fold.
|
|
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
|
|
+% heading is obnoxious; this forbids it.
|
|
+% 3) Likewise, headings look best if no \parindent is used, and
|
|
+% if justification is not attempted. Hence \raggedright.
|
|
+
|
|
+
|
|
+\def\majorheading{%
|
|
+ {\advance\chapheadingskip by 10pt \chapbreak }%
|
|
+ \parsearg\chapheadingzzz
|
|
+}
|
|
+
|
|
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
|
|
+\def\chapheadingzzz#1{%
|
|
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
+ \parindent=0pt\raggedright
|
|
+ \rm #1\hfill}}%
|
|
+ \bigskip \par\penalty 200\relax
|
|
+ \suppressfirstparagraphindent
|
|
+}
|
|
+
|
|
+% @heading, @subheading, @subsubheading.
|
|
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
|
|
+ \suppressfirstparagraphindent}
|
|
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
|
|
+ \suppressfirstparagraphindent}
|
|
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
|
|
+ \suppressfirstparagraphindent}
|
|
+
|
|
+% These macros generate a chapter, section, etc. heading only
|
|
+% (including whitespace, linebreaking, etc. around it),
|
|
+% given all the information in convenient, parsed form.
|
|
+
|
|
+%%% Args are the skip and penalty (usually negative)
|
|
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
|
|
+
|
|
+%%% Define plain chapter starts, and page on/off switching for it
|
|
+% Parameter controlling skip before chapter headings (if needed)
|
|
+
|
|
+\newskip\chapheadingskip
|
|
+
|
|
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
|
|
+\def\chappager{\par\vfill\supereject}
|
|
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
|
|
+
|
|
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
|
|
+
|
|
+\def\CHAPPAGoff{%
|
|
+\global\let\contentsalignmacro = \chappager
|
|
+\global\let\pchapsepmacro=\chapbreak
|
|
+\global\let\pagealignmacro=\chappager}
|
|
+
|
|
+\def\CHAPPAGon{%
|
|
+\global\let\contentsalignmacro = \chappager
|
|
+\global\let\pchapsepmacro=\chappager
|
|
+\global\let\pagealignmacro=\chappager
|
|
+\global\def\HEADINGSon{\HEADINGSsingle}}
|
|
+
|
|
+\def\CHAPPAGodd{%
|
|
+\global\let\contentsalignmacro = \chapoddpage
|
|
+\global\let\pchapsepmacro=\chapoddpage
|
|
+\global\let\pagealignmacro=\chapoddpage
|
|
+\global\def\HEADINGSon{\HEADINGSdouble}}
|
|
+
|
|
+\CHAPPAGon
|
|
+
|
|
+% Chapter opening.
|
|
+%
|
|
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
|
|
+% Yappendix, Yomitfromtoc), #3 the chapter number.
|
|
+%
|
|
+% To test against our argument.
|
|
+\def\Ynothingkeyword{Ynothing}
|
|
+\def\Yomitfromtockeyword{Yomitfromtoc}
|
|
+\def\Yappendixkeyword{Yappendix}
|
|
+%
|
|
+\def\chapmacro#1#2#3{%
|
|
+ \pchapsepmacro
|
|
+ {%
|
|
+ \chapfonts \rm
|
|
+ %
|
|
+ % Have to define \thissection before calling \donoderef, because the
|
|
+ % xref code eventually uses it. On the other hand, it has to be called
|
|
+ % after \pchapsepmacro, or the headline will change too soon.
|
|
+ \gdef\thissection{#1}%
|
|
+ \gdef\thischaptername{#1}%
|
|
+ %
|
|
+ % Only insert the separating space if we have a chapter/appendix
|
|
+ % number, and don't print the unnumbered ``number''.
|
|
+ \def\temptype{#2}%
|
|
+ \ifx\temptype\Ynothingkeyword
|
|
+ \setbox0 = \hbox{}%
|
|
+ \def\toctype{unnchap}%
|
|
+ \gdef\thischapter{#1}%
|
|
+ \else\ifx\temptype\Yomitfromtockeyword
|
|
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
|
|
+ \def\toctype{omit}%
|
|
+ \gdef\thischapter{}%
|
|
+ \else\ifx\temptype\Yappendixkeyword
|
|
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
|
|
+ \def\toctype{app}%
|
|
+ % We don't substitute the actual chapter name into \thischapter
|
|
+ % because we don't want its macros evaluated now. And we don't
|
|
+ % use \thissection because that changes with each section.
|
|
+ %
|
|
+ \xdef\thischapter{\putwordAppendix{} \appendixletter:
|
|
+ \noexpand\thischaptername}%
|
|
+ \else
|
|
+ \setbox0 = \hbox{#3\enspace}%
|
|
+ \def\toctype{numchap}%
|
|
+ \xdef\thischapter{\putwordChapter{} \the\chapno:
|
|
+ \noexpand\thischaptername}%
|
|
+ \fi\fi\fi
|
|
+ %
|
|
+ % Write the toc entry for this chapter. Must come before the
|
|
+ % \donoderef, because we include the current node name in the toc
|
|
+ % entry, and \donoderef resets it to empty.
|
|
+ \writetocentry{\toctype}{#1}{#3}%
|
|
+ %
|
|
+ % For pdftex, we have to write out the node definition (aka, make
|
|
+ % the pdfdest) after any page break, but before the actual text has
|
|
+ % been typeset. If the destination for the pdf outline is after the
|
|
+ % text, then jumping from the outline may wind up with the text not
|
|
+ % being visible, for instance under high magnification.
|
|
+ \donoderef{#2}%
|
|
+ %
|
|
+ % Typeset the actual heading.
|
|
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
|
|
+ \hangindent=\wd0 \centerparametersmaybe
|
|
+ \unhbox0 #1\par}%
|
|
+ }%
|
|
+ \nobreak\bigskip % no page break after a chapter title
|
|
+ \nobreak
|
|
+}
|
|
+
|
|
+% @centerchap -- centered and unnumbered.
|
|
+\let\centerparametersmaybe = \relax
|
|
+\def\centerparameters{%
|
|
+ \advance\rightskip by 3\rightskip
|
|
+ \leftskip = \rightskip
|
|
+ \parfillskip = 0pt
|
|
+}
|
|
+
|
|
+
|
|
+% I don't think this chapter style is supported any more, so I'm not
|
|
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
|
|
+%
|
|
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
|
|
+%
|
|
+\def\unnchfopen #1{%
|
|
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
+ \parindent=0pt\raggedright
|
|
+ \rm #1\hfill}}\bigskip \par\nobreak
|
|
+}
|
|
+\def\chfopen #1#2{\chapoddpage {\chapfonts
|
|
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
|
|
+\par\penalty 5000 %
|
|
+}
|
|
+\def\centerchfopen #1{%
|
|
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
+ \parindent=0pt
|
|
+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
|
|
+}
|
|
+\def\CHAPFopen{%
|
|
+ \global\let\chapmacro=\chfopen
|
|
+ \global\let\centerchapmacro=\centerchfopen}
|
|
+
|
|
+
|
|
+% Section titles. These macros combine the section number parts and
|
|
+% call the generic \sectionheading to do the printing.
|
|
+%
|
|
+\newskip\secheadingskip
|
|
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
|
|
+
|
|
+% Subsection titles.
|
|
+\newskip\subsecheadingskip
|
|
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
|
|
+
|
|
+% Subsubsection titles.
|
|
+\def\subsubsecheadingskip{\subsecheadingskip}
|
|
+\def\subsubsecheadingbreak{\subsecheadingbreak}
|
|
+
|
|
+
|
|
+% Print any size, any type, section title.
|
|
+%
|
|
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
|
|
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
|
|
+% section number.
|
|
+%
|
|
+\def\sectionheading#1#2#3#4{%
|
|
+ {%
|
|
+ % Switch to the right set of fonts.
|
|
+ \csname #2fonts\endcsname \rm
|
|
+ %
|
|
+ % Insert space above the heading.
|
|
+ \csname #2headingbreak\endcsname
|
|
+ %
|
|
+ % Only insert the space after the number if we have a section number.
|
|
+ \def\sectionlevel{#2}%
|
|
+ \def\temptype{#3}%
|
|
+ %
|
|
+ \ifx\temptype\Ynothingkeyword
|
|
+ \setbox0 = \hbox{}%
|
|
+ \def\toctype{unn}%
|
|
+ \gdef\thissection{#1}%
|
|
+ \else\ifx\temptype\Yomitfromtockeyword
|
|
+ % for @headings -- no section number, don't include in toc,
|
|
+ % and don't redefine \thissection.
|
|
+ \setbox0 = \hbox{}%
|
|
+ \def\toctype{omit}%
|
|
+ \let\sectionlevel=\empty
|
|
+ \else\ifx\temptype\Yappendixkeyword
|
|
+ \setbox0 = \hbox{#4\enspace}%
|
|
+ \def\toctype{app}%
|
|
+ \gdef\thissection{#1}%
|
|
+ \else
|
|
+ \setbox0 = \hbox{#4\enspace}%
|
|
+ \def\toctype{num}%
|
|
+ \gdef\thissection{#1}%
|
|
+ \fi\fi\fi
|
|
+ %
|
|
+ % Write the toc entry (before \donoderef). See comments in \chfplain.
|
|
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
|
|
+ %
|
|
+ % Write the node reference (= pdf destination for pdftex).
|
|
+ % Again, see comments in \chfplain.
|
|
+ \donoderef{#3}%
|
|
+ %
|
|
+ % Output the actual section heading.
|
|
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
|
|
+ \hangindent=\wd0 % zero if no section number
|
|
+ \unhbox0 #1}%
|
|
+ }%
|
|
+ % Add extra space after the heading -- half of whatever came above it.
|
|
+ % Don't allow stretch, though.
|
|
+ \kern .5 \csname #2headingskip\endcsname
|
|
+ %
|
|
+ % Do not let the kern be a potential breakpoint, as it would be if it
|
|
+ % was followed by glue.
|
|
+ \nobreak
|
|
+ %
|
|
+ % We'll almost certainly start a paragraph next, so don't let that
|
|
+ % glue accumulate. (Not a breakpoint because it's preceded by a
|
|
+ % discardable item.)
|
|
+ \vskip-\parskip
|
|
+ %
|
|
+ % This is purely so the last item on the list is a known \penalty >
|
|
+ % 10000. This is so \startdefun can avoid allowing breakpoints after
|
|
+ % section headings. Otherwise, it would insert a valid breakpoint between:
|
|
+ %
|
|
+ % @section sec-whatever
|
|
+ % @deffn def-whatever
|
|
+ \penalty 10001
|
|
+}
|
|
+
|
|
+
|
|
+\message{toc,}
|
|
+% Table of contents.
|
|
+\newwrite\tocfile
|
|
+
|
|
+% Write an entry to the toc file, opening it if necessary.
|
|
+% Called from @chapter, etc.
|
|
+%
|
|
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
|
|
+% We append the current node name (if any) and page number as additional
|
|
+% arguments for the \{chap,sec,...}entry macros which will eventually
|
|
+% read this. The node name is used in the pdf outlines as the
|
|
+% destination to jump to.
|
|
+%
|
|
+% We open the .toc file for writing here instead of at @setfilename (or
|
|
+% any other fixed time) so that @contents can be anywhere in the document.
|
|
+% But if #1 is `omit', then we don't do anything. This is used for the
|
|
+% table of contents chapter openings themselves.
|
|
+%
|
|
+\newif\iftocfileopened
|
|
+\def\omitkeyword{omit}%
|
|
+%
|
|
+\def\writetocentry#1#2#3{%
|
|
+ \edef\writetoctype{#1}%
|
|
+ \ifx\writetoctype\omitkeyword \else
|
|
+ \iftocfileopened\else
|
|
+ \immediate\openout\tocfile = \jobname.toc
|
|
+ \global\tocfileopenedtrue
|
|
+ \fi
|
|
+ %
|
|
+ \iflinks
|
|
+ {\atdummies
|
|
+ \edef\temp{%
|
|
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
|
|
+ \temp
|
|
+ }
|
|
+ \fi
|
|
+ \fi
|
|
+ %
|
|
+ % Tell \shipout to create a pdf destination on each page, if we're
|
|
+ % writing pdf. These are used in the table of contents. We can't
|
|
+ % just write one on every page because the title pages are numbered
|
|
+ % 1 and 2 (the page numbers aren't printed), and so are the first
|
|
+ % two pages of the document. Thus, we'd have two destinations named
|
|
+ % `1', and two named `2'.
|
|
+ \ifpdf \global\pdfmakepagedesttrue \fi
|
|
+}
|
|
+
|
|
+
|
|
+% These characters do not print properly in the Computer Modern roman
|
|
+% fonts, so we must take special care. This is more or less redundant
|
|
+% with the Texinfo input format setup at the end of this file.
|
|
+%
|
|
+\def\activecatcodes{%
|
|
+ \catcode`\"=\active
|
|
+ \catcode`\$=\active
|
|
+ \catcode`\<=\active
|
|
+ \catcode`\>=\active
|
|
+ \catcode`\\=\active
|
|
+ \catcode`\^=\active
|
|
+ \catcode`\_=\active
|
|
+ \catcode`\|=\active
|
|
+ \catcode`\~=\active
|
|
+}
|
|
+
|
|
+
|
|
+% Read the toc file, which is essentially Texinfo input.
|
|
+\def\readtocfile{%
|
|
+ \setupdatafile
|
|
+ \activecatcodes
|
|
+ \input \jobname.toc
|
|
+}
|
|
+
|
|
+\newskip\contentsrightmargin \contentsrightmargin=1in
|
|
+\newcount\savepageno
|
|
+\newcount\lastnegativepageno \lastnegativepageno = -1
|
|
+
|
|
+% Prepare to read what we've written to \tocfile.
|
|
+%
|
|
+\def\startcontents#1{%
|
|
+ % If @setchapternewpage on, and @headings double, the contents should
|
|
+ % start on an odd page, unlike chapters. Thus, we maintain
|
|
+ % \contentsalignmacro in parallel with \pagealignmacro.
|
|
+ % From: Torbjorn Granlund <tege@matematik.su.se>
|
|
+ \contentsalignmacro
|
|
+ \immediate\closeout\tocfile
|
|
+ %
|
|
+ % Don't need to put `Contents' or `Short Contents' in the headline.
|
|
+ % It is abundantly clear what they are.
|
|
+ \def\thischapter{}%
|
|
+ \chapmacro{#1}{Yomitfromtoc}{}%
|
|
+ %
|
|
+ \savepageno = \pageno
|
|
+ \begingroup % Set up to handle contents files properly.
|
|
+ \raggedbottom % Worry more about breakpoints than the bottom.
|
|
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
|
|
+ %
|
|
+ % Roman numerals for page numbers.
|
|
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
|
|
+}
|
|
+
|
|
+
|
|
+% Normal (long) toc.
|
|
+\def\contents{%
|
|
+ \startcontents{\putwordTOC}%
|
|
+ \openin 1 \jobname.toc
|
|
+ \ifeof 1 \else
|
|
+ \readtocfile
|
|
+ \fi
|
|
+ \vfill \eject
|
|
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
|
|
+ \ifeof 1 \else
|
|
+ \pdfmakeoutlines
|
|
+ \fi
|
|
+ \closein 1
|
|
+ \endgroup
|
|
+ \lastnegativepageno = \pageno
|
|
+ \global\pageno = \savepageno
|
|
+}
|
|
+
|
|
+% And just the chapters.
|
|
+\def\summarycontents{%
|
|
+ \startcontents{\putwordShortTOC}%
|
|
+ %
|
|
+ \let\numchapentry = \shortchapentry
|
|
+ \let\appentry = \shortchapentry
|
|
+ \let\unnchapentry = \shortunnchapentry
|
|
+ % We want a true roman here for the page numbers.
|
|
+ \secfonts
|
|
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
|
|
+ \let\sl=\shortcontsl \let\tt=\shortconttt
|
|
+ \rm
|
|
+ \hyphenpenalty = 10000
|
|
+ \advance\baselineskip by 1pt % Open it up a little.
|
|
+ \def\numsecentry##1##2##3##4{}
|
|
+ \let\appsecentry = \numsecentry
|
|
+ \let\unnsecentry = \numsecentry
|
|
+ \let\numsubsecentry = \numsecentry
|
|
+ \let\appsubsecentry = \numsecentry
|
|
+ \let\unnsubsecentry = \numsecentry
|
|
+ \let\numsubsubsecentry = \numsecentry
|
|
+ \let\appsubsubsecentry = \numsecentry
|
|
+ \let\unnsubsubsecentry = \numsecentry
|
|
+ \openin 1 \jobname.toc
|
|
+ \ifeof 1 \else
|
|
+ \readtocfile
|
|
+ \fi
|
|
+ \closein 1
|
|
+ \vfill \eject
|
|
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
|
|
+ \endgroup
|
|
+ \lastnegativepageno = \pageno
|
|
+ \global\pageno = \savepageno
|
|
+}
|
|
+\let\shortcontents = \summarycontents
|
|
+
|
|
+% Typeset the label for a chapter or appendix for the short contents.
|
|
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
|
|
+%
|
|
+\def\shortchaplabel#1{%
|
|
+ % This space should be enough, since a single number is .5em, and the
|
|
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
|
|
+ % But use \hss just in case.
|
|
+ % (This space doesn't include the extra space that gets added after
|
|
+ % the label; that gets put in by \shortchapentry above.)
|
|
+ %
|
|
+ % We'd like to right-justify chapter numbers, but that looks strange
|
|
+ % with appendix letters. And right-justifying numbers and
|
|
+ % left-justifying letters looks strange when there is less than 10
|
|
+ % chapters. Have to read the whole toc once to know how many chapters
|
|
+ % there are before deciding ...
|
|
+ \hbox to 1em{#1\hss}%
|
|
+}
|
|
+
|
|
+% These macros generate individual entries in the table of contents.
|
|
+% The first argument is the chapter or section name.
|
|
+% The last argument is the page number.
|
|
+% The arguments in between are the chapter number, section number, ...
|
|
+
|
|
+% Chapters, in the main contents.
|
|
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
|
|
+%
|
|
+% Chapters, in the short toc.
|
|
+% See comments in \dochapentry re vbox and related settings.
|
|
+\def\shortchapentry#1#2#3#4{%
|
|
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
|
|
+}
|
|
+
|
|
+% Appendices, in the main contents.
|
|
+% Need the word Appendix, and a fixed-size box.
|
|
+%
|
|
+\def\appendixbox#1{%
|
|
+ % We use M since it's probably the widest letter.
|
|
+ \setbox0 = \hbox{\putwordAppendix{} M}%
|
|
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
|
|
+%
|
|
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
|
|
+
|
|
+% Unnumbered chapters.
|
|
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
|
|
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
|
|
+
|
|
+% Sections.
|
|
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
|
|
+\let\appsecentry=\numsecentry
|
|
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
|
|
+
|
|
+% Subsections.
|
|
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
|
|
+\let\appsubsecentry=\numsubsecentry
|
|
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
|
|
+
|
|
+% And subsubsections.
|
|
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
|
|
+\let\appsubsubsecentry=\numsubsubsecentry
|
|
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
|
|
+
|
|
+% This parameter controls the indentation of the various levels.
|
|
+% Same as \defaultparindent.
|
|
+\newdimen\tocindent \tocindent = 15pt
|
|
+
|
|
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
|
|
+% page number.
|
|
+%
|
|
+% If the toc has to be broken over pages, we want it to be at chapters
|
|
+% if at all possible; hence the \penalty.
|
|
+\def\dochapentry#1#2{%
|
|
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
|
|
+ \begingroup
|
|
+ \chapentryfonts
|
|
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
|
+ \endgroup
|
|
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
|
|
+}
|
|
+
|
|
+\def\dosecentry#1#2{\begingroup
|
|
+ \secentryfonts \leftskip=\tocindent
|
|
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
|
+\endgroup}
|
|
+
|
|
+\def\dosubsecentry#1#2{\begingroup
|
|
+ \subsecentryfonts \leftskip=2\tocindent
|
|
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
|
+\endgroup}
|
|
+
|
|
+\def\dosubsubsecentry#1#2{\begingroup
|
|
+ \subsubsecentryfonts \leftskip=3\tocindent
|
|
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
|
+\endgroup}
|
|
+
|
|
+% We use the same \entry macro as for the index entries.
|
|
+\let\tocentry = \entry
|
|
+
|
|
+% Space between chapter (or whatever) number and the title.
|
|
+\def\labelspace{\hskip1em \relax}
|
|
+
|
|
+\def\dopageno#1{{\rm #1}}
|
|
+\def\doshortpageno#1{{\rm #1}}
|
|
+
|
|
+\def\chapentryfonts{\secfonts \rm}
|
|
+\def\secentryfonts{\textfonts}
|
|
+\def\subsecentryfonts{\textfonts}
|
|
+\def\subsubsecentryfonts{\textfonts}
|
|
+
|
|
+
|
|
+\message{environments,}
|
|
+% @foo ... @end foo.
|
|
+
|
|
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
|
|
+%
|
|
+% Since these characters are used in examples, it should be an even number of
|
|
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
|
|
+%
|
|
+\def\point{$\star$}
|
|
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
|
|
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
|
|
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
|
|
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
|
|
+
|
|
+% The @error{} command.
|
|
+% Adapted from the TeXbook's \boxit.
|
|
+%
|
|
+\newbox\errorbox
|
|
+%
|
|
+{\tentt \global\dimen0 = 3em}% Width of the box.
|
|
+\dimen2 = .55pt % Thickness of rules
|
|
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
|
|
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
|
|
+%
|
|
+\setbox\errorbox=\hbox to \dimen0{\hfil
|
|
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
|
|
+ \advance\hsize by -2\dimen2 % Rules.
|
|
+ \vbox{%
|
|
+ \hrule height\dimen2
|
|
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
|
|
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
|
|
+ \kern3pt\vrule width\dimen2}% Space to right.
|
|
+ \hrule height\dimen2}
|
|
+ \hfil}
|
|
+%
|
|
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
|
|
+
|
|
+% @tex ... @end tex escapes into raw Tex temporarily.
|
|
+% One exception: @ is still an escape character, so that @end tex works.
|
|
+% But \@ or @@ will get a plain tex @ character.
|
|
+
|
|
+\envdef\tex{%
|
|
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
|
|
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
|
|
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
|
|
+ \catcode `\%=14
|
|
+ \catcode `\+=\other
|
|
+ \catcode `\"=\other
|
|
+ \catcode `\|=\other
|
|
+ \catcode `\<=\other
|
|
+ \catcode `\>=\other
|
|
+ \escapechar=`\\
|
|
+ %
|
|
+ \let\b=\ptexb
|
|
+ \let\bullet=\ptexbullet
|
|
+ \let\c=\ptexc
|
|
+ \let\,=\ptexcomma
|
|
+ \let\.=\ptexdot
|
|
+ \let\dots=\ptexdots
|
|
+ \let\equiv=\ptexequiv
|
|
+ \let\!=\ptexexclam
|
|
+ \let\i=\ptexi
|
|
+ \let\indent=\ptexindent
|
|
+ \let\noindent=\ptexnoindent
|
|
+ \let\{=\ptexlbrace
|
|
+ \let\+=\tabalign
|
|
+ \let\}=\ptexrbrace
|
|
+ \let\/=\ptexslash
|
|
+ \let\*=\ptexstar
|
|
+ \let\t=\ptext
|
|
+ \let\frenchspacing=\plainfrenchspacing
|
|
+ %
|
|
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
|
|
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
|
|
+ \def\@{@}%
|
|
+}
|
|
+% There is no need to define \Etex.
|
|
+
|
|
+% Define @lisp ... @end lisp.
|
|
+% @lisp environment forms a group so it can rebind things,
|
|
+% including the definition of @end lisp (which normally is erroneous).
|
|
+
|
|
+% Amount to narrow the margins by for @lisp.
|
|
+\newskip\lispnarrowing \lispnarrowing=0.4in
|
|
+
|
|
+% This is the definition that ^^M gets inside @lisp, @example, and other
|
|
+% such environments. \null is better than a space, since it doesn't
|
|
+% have any width.
|
|
+\def\lisppar{\null\endgraf}
|
|
+
|
|
+% This space is always present above and below environments.
|
|
+\newskip\envskipamount \envskipamount = 0pt
|
|
+
|
|
+% Make spacing and below environment symmetrical. We use \parskip here
|
|
+% to help in doing that, since in @example-like environments \parskip
|
|
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
|
|
+% start of the next paragraph will insert \parskip.
|
|
+%
|
|
+\def\aboveenvbreak{{%
|
|
+ % =10000 instead of <10000 because of a special case in \itemzzz and
|
|
+ % \sectionheading, q.v.
|
|
+ \ifnum \lastpenalty=10000 \else
|
|
+ \advance\envskipamount by \parskip
|
|
+ \endgraf
|
|
+ \ifdim\lastskip<\envskipamount
|
|
+ \removelastskip
|
|
+ % it's not a good place to break if the last penalty was \nobreak
|
|
+ % or better ...
|
|
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
|
|
+ \vskip\envskipamount
|
|
+ \fi
|
|
+ \fi
|
|
+}}
|
|
+
|
|
+\let\afterenvbreak = \aboveenvbreak
|
|
+
|
|
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
|
|
+% also clear it, so that its embedded environments do the narrowing again.
|
|
+\let\nonarrowing=\relax
|
|
+
|
|
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
|
|
+% environment contents.
|
|
+\font\circle=lcircle10
|
|
+\newdimen\circthick
|
|
+\newdimen\cartouter\newdimen\cartinner
|
|
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
|
|
+\circthick=\fontdimen8\circle
|
|
+%
|
|
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
|
|
+\def\ctr{{\hskip 6pt\circle\char'010}}
|
|
+\def\cbl{{\circle\char'012\hskip -6pt}}
|
|
+\def\cbr{{\hskip 6pt\circle\char'011}}
|
|
+\def\carttop{\hbox to \cartouter{\hskip\lskip
|
|
+ \ctl\leaders\hrule height\circthick\hfil\ctr
|
|
+ \hskip\rskip}}
|
|
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
|
|
+ \cbl\leaders\hrule height\circthick\hfil\cbr
|
|
+ \hskip\rskip}}
|
|
+%
|
|
+\newskip\lskip\newskip\rskip
|
|
+
|
|
+\envdef\cartouche{%
|
|
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
|
|
+ \startsavinginserts
|
|
+ \lskip=\leftskip \rskip=\rightskip
|
|
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
|
|
+ \cartinner=\hsize \advance\cartinner by-\lskip
|
|
+ \advance\cartinner by-\rskip
|
|
+ \cartouter=\hsize
|
|
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
|
|
+ % side, and for 6pt waste from
|
|
+ % each corner char, and rule thickness
|
|
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
|
|
+ % Flag to tell @lisp, etc., not to narrow margin.
|
|
+ \let\nonarrowing = t%
|
|
+ \vbox\bgroup
|
|
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
|
|
+ \carttop
|
|
+ \hbox\bgroup
|
|
+ \hskip\lskip
|
|
+ \vrule\kern3pt
|
|
+ \vbox\bgroup
|
|
+ \kern3pt
|
|
+ \hsize=\cartinner
|
|
+ \baselineskip=\normbskip
|
|
+ \lineskip=\normlskip
|
|
+ \parskip=\normpskip
|
|
+ \vskip -\parskip
|
|
+ \comment % For explanation, see the end of \def\group.
|
|
+}
|
|
+\def\Ecartouche{%
|
|
+ \ifhmode\par\fi
|
|
+ \kern3pt
|
|
+ \egroup
|
|
+ \kern3pt\vrule
|
|
+ \hskip\rskip
|
|
+ \egroup
|
|
+ \cartbot
|
|
+ \egroup
|
|
+ \checkinserts
|
|
+}
|
|
+
|
|
+
|
|
+% This macro is called at the beginning of all the @example variants,
|
|
+% inside a group.
|
|
+\def\nonfillstart{%
|
|
+ \aboveenvbreak
|
|
+ \hfuzz = 12pt % Don't be fussy
|
|
+ \sepspaces % Make spaces be word-separators rather than space tokens.
|
|
+ \let\par = \lisppar % don't ignore blank lines
|
|
+ \obeylines % each line of input is a line of output
|
|
+ \parskip = 0pt
|
|
+ \parindent = 0pt
|
|
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
|
|
+ \ifx\nonarrowing\relax
|
|
+ \advance \leftskip by \lispnarrowing
|
|
+ \exdentamount=\lispnarrowing
|
|
+ \else
|
|
+ \let\nonarrowing = \relax
|
|
+ \fi
|
|
+ \let\exdent=\nofillexdent
|
|
+}
|
|
+
|
|
+% If you want all examples etc. small: @set dispenvsize small.
|
|
+% If you want even small examples the full size: @set dispenvsize nosmall.
|
|
+% This affects the following displayed environments:
|
|
+% @example, @display, @format, @lisp
|
|
+%
|
|
+\def\smallword{small}
|
|
+\def\nosmallword{nosmall}
|
|
+\let\SETdispenvsize\relax
|
|
+\def\setnormaldispenv{%
|
|
+ \ifx\SETdispenvsize\smallword
|
|
+ \smallexamplefonts \rm
|
|
+ \fi
|
|
+}
|
|
+\def\setsmalldispenv{%
|
|
+ \ifx\SETdispenvsize\nosmallword
|
|
+ \else
|
|
+ \smallexamplefonts \rm
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% We often define two environments, @foo and @smallfoo.
|
|
+% Let's do it by one command:
|
|
+\def\makedispenv #1#2{
|
|
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
|
|
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
|
|
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
|
|
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
|
|
+}
|
|
+
|
|
+% Define two synonyms:
|
|
+\def\maketwodispenvs #1#2#3{
|
|
+ \makedispenv{#1}{#3}
|
|
+ \makedispenv{#2}{#3}
|
|
+}
|
|
+
|
|
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
|
|
+%
|
|
+% @smallexample and @smalllisp: use smaller fonts.
|
|
+% Originally contributed by Pavel@xerox.
|
|
+%
|
|
+\maketwodispenvs {lisp}{example}{%
|
|
+ \nonfillstart
|
|
+ \tt
|
|
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
|
|
+ \gobble % eat return
|
|
+}
|
|
+
|
|
+% @display/@smalldisplay: same as @lisp except keep current font.
|
|
+%
|
|
+\makedispenv {display}{%
|
|
+ \nonfillstart
|
|
+ \gobble
|
|
+}
|
|
+
|
|
+% @format/@smallformat: same as @display except don't narrow margins.
|
|
+%
|
|
+\makedispenv{format}{%
|
|
+ \let\nonarrowing = t%
|
|
+ \nonfillstart
|
|
+ \gobble
|
|
+}
|
|
+
|
|
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
|
|
+\envdef\flushleft{%
|
|
+ \let\nonarrowing = t%
|
|
+ \nonfillstart
|
|
+ \gobble
|
|
+}
|
|
+\let\Eflushleft = \afterenvbreak
|
|
+
|
|
+% @flushright.
|
|
+%
|
|
+\envdef\flushright{%
|
|
+ \let\nonarrowing = t%
|
|
+ \nonfillstart
|
|
+ \advance\leftskip by 0pt plus 1fill
|
|
+ \gobble
|
|
+}
|
|
+\let\Eflushright = \afterenvbreak
|
|
+
|
|
+
|
|
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
|
|
+% and narrows the margins. We keep \parskip nonzero in general, since
|
|
+% we're doing normal filling. So, when using \aboveenvbreak and
|
|
+% \afterenvbreak, temporarily make \parskip 0.
|
|
+%
|
|
+\envdef\quotation{%
|
|
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
|
|
+ \parindent=0pt
|
|
+ %
|
|
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
|
|
+ \ifx\nonarrowing\relax
|
|
+ \advance\leftskip by \lispnarrowing
|
|
+ \advance\rightskip by \lispnarrowing
|
|
+ \exdentamount = \lispnarrowing
|
|
+ \else
|
|
+ \let\nonarrowing = \relax
|
|
+ \fi
|
|
+ \parsearg\quotationlabel
|
|
+}
|
|
+
|
|
+% We have retained a nonzero parskip for the environment, since we're
|
|
+% doing normal filling.
|
|
+%
|
|
+\def\Equotation{%
|
|
+ \par
|
|
+ \ifx\quotationauthor\undefined\else
|
|
+ % indent a bit.
|
|
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
|
|
+ \fi
|
|
+ {\parskip=0pt \afterenvbreak}%
|
|
+}
|
|
+
|
|
+% If we're given an argument, typeset it in bold with a colon after.
|
|
+\def\quotationlabel#1{%
|
|
+ \def\temp{#1}%
|
|
+ \ifx\temp\empty \else
|
|
+ {\bf #1: }%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+
|
|
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
|
|
+% If we want to allow any <char> as delimiter,
|
|
+% we need the curly braces so that makeinfo sees the @verb command, eg:
|
|
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
|
|
+%
|
|
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
|
|
+%
|
|
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
|
|
+% active too. Otherwise, they get lost as the first character on a
|
|
+% verbatim line.
|
|
+\def\dospecials{%
|
|
+ \do\ \do\\\do\{\do\}\do\$\do\&%
|
|
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
|
|
+ \do\<\do\>\do\|\do\@\do+\do\"%
|
|
+}
|
|
+%
|
|
+% [Knuth] p. 380
|
|
+\def\uncatcodespecials{%
|
|
+ \def\do##1{\catcode`##1=\other}\dospecials}
|
|
+%
|
|
+% [Knuth] pp. 380,381,391
|
|
+% Disable Spanish ligatures ?` and !` of \tt font
|
|
+\begingroup
|
|
+ \catcode`\`=\active\gdef`{\relax\lq}
|
|
+\endgroup
|
|
+%
|
|
+% Setup for the @verb command.
|
|
+%
|
|
+% Eight spaces for a tab
|
|
+\begingroup
|
|
+ \catcode`\^^I=\active
|
|
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
|
|
+\endgroup
|
|
+%
|
|
+\def\setupverb{%
|
|
+ \tt % easiest (and conventionally used) font for verbatim
|
|
+ \def\par{\leavevmode\endgraf}%
|
|
+ \catcode`\`=\active
|
|
+ \tabeightspaces
|
|
+ % Respect line breaks,
|
|
+ % print special symbols as themselves, and
|
|
+ % make each space count
|
|
+ % must do in this order:
|
|
+ \obeylines \uncatcodespecials \sepspaces
|
|
+}
|
|
+
|
|
+% Setup for the @verbatim environment
|
|
+%
|
|
+% Real tab expansion
|
|
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
|
|
+%
|
|
+\def\starttabbox{\setbox0=\hbox\bgroup}
|
|
+\begingroup
|
|
+ \catcode`\^^I=\active
|
|
+ \gdef\tabexpand{%
|
|
+ \catcode`\^^I=\active
|
|
+ \def^^I{\leavevmode\egroup
|
|
+ \dimen0=\wd0 % the width so far, or since the previous tab
|
|
+ \divide\dimen0 by\tabw
|
|
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
|
|
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
|
|
+ \wd0=\dimen0 \box0 \starttabbox
|
|
+ }%
|
|
+ }
|
|
+\endgroup
|
|
+\def\setupverbatim{%
|
|
+ \let\nonarrowing = t%
|
|
+ \nonfillstart
|
|
+ % Easiest (and conventionally used) font for verbatim
|
|
+ \tt
|
|
+ \def\par{\leavevmode\egroup\box0\endgraf}%
|
|
+ \catcode`\`=\active
|
|
+ \tabexpand
|
|
+ % Respect line breaks,
|
|
+ % print special symbols as themselves, and
|
|
+ % make each space count
|
|
+ % must do in this order:
|
|
+ \obeylines \uncatcodespecials \sepspaces
|
|
+ \everypar{\starttabbox}%
|
|
+}
|
|
+
|
|
+% Do the @verb magic: verbatim text is quoted by unique
|
|
+% delimiter characters. Before first delimiter expect a
|
|
+% right brace, after last delimiter expect closing brace:
|
|
+%
|
|
+% \def\doverb'{'<char>#1<char>'}'{#1}
|
|
+%
|
|
+% [Knuth] p. 382; only eat outer {}
|
|
+\begingroup
|
|
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
|
|
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
|
|
+\endgroup
|
|
+%
|
|
+\def\verb{\begingroup\setupverb\doverb}
|
|
+%
|
|
+%
|
|
+% Do the @verbatim magic: define the macro \doverbatim so that
|
|
+% the (first) argument ends when '@end verbatim' is reached, ie:
|
|
+%
|
|
+% \def\doverbatim#1@end verbatim{#1}
|
|
+%
|
|
+% For Texinfo it's a lot easier than for LaTeX,
|
|
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
|
|
+% we need not redefine '\', '{' and '}'.
|
|
+%
|
|
+% Inspired by LaTeX's verbatim command set [latex.ltx]
|
|
+%
|
|
+\begingroup
|
|
+ \catcode`\ =\active
|
|
+ \obeylines %
|
|
+ % ignore everything up to the first ^^M, that's the newline at the end
|
|
+ % of the @verbatim input line itself. Otherwise we get an extra blank
|
|
+ % line in the output.
|
|
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
|
|
+ % We really want {...\end verbatim} in the body of the macro, but
|
|
+ % without the active space; thus we have to use \xdef and \gobble.
|
|
+\endgroup
|
|
+%
|
|
+\envdef\verbatim{%
|
|
+ \setupverbatim\doverbatim
|
|
+}
|
|
+\let\Everbatim = \afterenvbreak
|
|
+
|
|
+
|
|
+% @verbatiminclude FILE - insert text of file in verbatim environment.
|
|
+%
|
|
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
|
|
+%
|
|
+\def\doverbatiminclude#1{%
|
|
+ {%
|
|
+ \makevalueexpandable
|
|
+ \setupverbatim
|
|
+ \input #1
|
|
+ \afterenvbreak
|
|
+ }%
|
|
+}
|
|
+
|
|
+% @copying ... @end copying.
|
|
+% Save the text away for @insertcopying later.
|
|
+%
|
|
+% We save the uninterpreted tokens, rather than creating a box.
|
|
+% Saving the text in a box would be much easier, but then all the
|
|
+% typesetting commands (@smallbook, font changes, etc.) have to be done
|
|
+% beforehand -- and a) we want @copying to be done first in the source
|
|
+% file; b) letting users define the frontmatter in as flexible order as
|
|
+% possible is very desirable.
|
|
+%
|
|
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
|
|
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
|
|
+%
|
|
+\def\insertcopying{%
|
|
+ \begingroup
|
|
+ \parindent = 0pt % paragraph indentation looks wrong on title page
|
|
+ \scanexp\copyingtext
|
|
+ \endgroup
|
|
+}
|
|
+
|
|
+\message{defuns,}
|
|
+% @defun etc.
|
|
+
|
|
+\newskip\defbodyindent \defbodyindent=.4in
|
|
+\newskip\defargsindent \defargsindent=50pt
|
|
+\newskip\deflastargmargin \deflastargmargin=18pt
|
|
+
|
|
+% Start the processing of @deffn:
|
|
+\def\startdefun{%
|
|
+ \ifnum\lastpenalty<10000
|
|
+ \medbreak
|
|
+ \else
|
|
+ % If there are two @def commands in a row, we'll have a \nobreak,
|
|
+ % which is there to keep the function description together with its
|
|
+ % header. But if there's nothing but headers, we need to allow a
|
|
+ % break somewhere. Check specifically for penalty 10002, inserted
|
|
+ % by \defargscommonending, instead of 10000, since the sectioning
|
|
+ % commands also insert a nobreak penalty, and we don't want to allow
|
|
+ % a break between a section heading and a defun.
|
|
+ %
|
|
+ \ifnum\lastpenalty=10002 \penalty2000 \fi
|
|
+ %
|
|
+ % Similarly, after a section heading, do not allow a break.
|
|
+ % But do insert the glue.
|
|
+ \medskip % preceded by discardable penalty, so not a breakpoint
|
|
+ \fi
|
|
+ %
|
|
+ \parindent=0in
|
|
+ \advance\leftskip by \defbodyindent
|
|
+ \exdentamount=\defbodyindent
|
|
+}
|
|
+
|
|
+\def\dodefunx#1{%
|
|
+ % First, check whether we are in the right environment:
|
|
+ \checkenv#1%
|
|
+ %
|
|
+ % As above, allow line break if we have multiple x headers in a row.
|
|
+ % It's not a great place, though.
|
|
+ \ifnum\lastpenalty=10002 \penalty3000 \fi
|
|
+ %
|
|
+ % And now, it's time to reuse the body of the original defun:
|
|
+ \expandafter\gobbledefun#1%
|
|
+}
|
|
+\def\gobbledefun#1\startdefun{}
|
|
+
|
|
+% \printdefunline \deffnheader{text}
|
|
+%
|
|
+\def\printdefunline#1#2{%
|
|
+ \begingroup
|
|
+ % call \deffnheader:
|
|
+ #1#2 \endheader
|
|
+ % common ending:
|
|
+ \interlinepenalty = 10000
|
|
+ \advance\rightskip by 0pt plus 1fil
|
|
+ \endgraf
|
|
+ \nobreak\vskip -\parskip
|
|
+ \penalty 10002 % signal to \startdefun and \dodefunx
|
|
+ % Some of the @defun-type tags do not enable magic parentheses,
|
|
+ % rendering the following check redundant. But we don't optimize.
|
|
+ \checkparencounts
|
|
+ \endgroup
|
|
+}
|
|
+
|
|
+\def\Edefun{\endgraf\medbreak}
|
|
+
|
|
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
|
|
+% the only thing remainnig is to define \deffnheader.
|
|
+%
|
|
+\def\makedefun#1{%
|
|
+ \expandafter\let\csname E#1\endcsname = \Edefun
|
|
+ \edef\temp{\noexpand\domakedefun
|
|
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
|
|
+ \temp
|
|
+}
|
|
+
|
|
+% \domakedefun \deffn \deffnx \deffnheader
|
|
+%
|
|
+% Define \deffn and \deffnx, without parameters.
|
|
+% \deffnheader has to be defined explicitly.
|
|
+%
|
|
+\def\domakedefun#1#2#3{%
|
|
+ \envdef#1{%
|
|
+ \startdefun
|
|
+ \parseargusing\activeparens{\printdefunline#3}%
|
|
+ }%
|
|
+ \def#2{\dodefunx#1}%
|
|
+ \def#3%
|
|
+}
|
|
+
|
|
+%%% Untyped functions:
|
|
+
|
|
+% @deffn category name args
|
|
+\makedefun{deffn}{\deffngeneral{}}
|
|
+
|
|
+% @deffn category class name args
|
|
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
|
|
+
|
|
+% \defopon {category on}class name args
|
|
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
|
|
+
|
|
+% \deffngeneral {subind}category name args
|
|
+%
|
|
+\def\deffngeneral#1#2 #3 #4\endheader{%
|
|
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
|
|
+ \dosubind{fn}{\code{#3}}{#1}%
|
|
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
|
|
+}
|
|
+
|
|
+%%% Typed functions:
|
|
+
|
|
+% @deftypefn category type name args
|
|
+\makedefun{deftypefn}{\deftypefngeneral{}}
|
|
+
|
|
+% @deftypeop category class type name args
|
|
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
|
|
+
|
|
+% \deftypeopon {category on}class type name args
|
|
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
|
|
+
|
|
+% \deftypefngeneral {subind}category type name args
|
|
+%
|
|
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
|
|
+ \dosubind{fn}{\code{#4}}{#1}%
|
|
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
|
|
+}
|
|
+
|
|
+%%% Typed variables:
|
|
+
|
|
+% @deftypevr category type var args
|
|
+\makedefun{deftypevr}{\deftypecvgeneral{}}
|
|
+
|
|
+% @deftypecv category class type var args
|
|
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
|
|
+
|
|
+% \deftypecvof {category of}class type var args
|
|
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
|
|
+
|
|
+% \deftypecvgeneral {subind}category type var args
|
|
+%
|
|
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
|
|
+ \dosubind{vr}{\code{#4}}{#1}%
|
|
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
|
|
+}
|
|
+
|
|
+%%% Untyped variables:
|
|
+
|
|
+% @defvr category var args
|
|
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
|
|
+
|
|
+% @defcv category class var args
|
|
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
|
|
+
|
|
+% \defcvof {category of}class var args
|
|
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
|
|
+
|
|
+%%% Type:
|
|
+% @deftp category name args
|
|
+\makedefun{deftp}#1 #2 #3\endheader{%
|
|
+ \doind{tp}{\code{#2}}%
|
|
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
|
|
+}
|
|
+
|
|
+% Remaining @defun-like shortcuts:
|
|
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
|
|
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
|
|
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
|
|
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
|
|
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
|
|
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
|
|
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
|
|
+\makedefun{defmethod}{\defopon\putwordMethodon}
|
|
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
|
|
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
|
|
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
|
|
+
|
|
+% \defname, which formats the name of the @def (not the args).
|
|
+% #1 is the category, such as "Function".
|
|
+% #2 is the return type, if any.
|
|
+% #3 is the function name.
|
|
+%
|
|
+% We are followed by (but not passed) the arguments, if any.
|
|
+%
|
|
+\def\defname#1#2#3{%
|
|
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
|
|
+ \advance\leftskip by -\defbodyindent
|
|
+ %
|
|
+ % How we'll format the type name. Putting it in brackets helps
|
|
+ % distinguish it from the body text that may end up on the next line
|
|
+ % just below it.
|
|
+ \def\temp{#1}%
|
|
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
|
|
+ %
|
|
+ % Figure out line sizes for the paragraph shape.
|
|
+ % The first line needs space for \box0; but if \rightskip is nonzero,
|
|
+ % we need only space for the part of \box0 which exceeds it:
|
|
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
|
|
+ % The continuations:
|
|
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
|
|
+ % (plain.tex says that \dimen1 should be used only as global.)
|
|
+ \parshape 2 0in \dimen0 \defargsindent \dimen2
|
|
+ %
|
|
+ % Put the type name to the right margin.
|
|
+ \noindent
|
|
+ \hbox to 0pt{%
|
|
+ \hfil\box0 \kern-\hsize
|
|
+ % \hsize has to be shortened this way:
|
|
+ \kern\leftskip
|
|
+ % Intentionally do not respect \rightskip, since we need the space.
|
|
+ }%
|
|
+ %
|
|
+ % Allow all lines to be underfull without complaint:
|
|
+ \tolerance=10000 \hbadness=10000
|
|
+ \exdentamount=\defbodyindent
|
|
+ {%
|
|
+ % defun fonts. We use typewriter by default (used to be bold) because:
|
|
+ % . we're printing identifiers, they should be in tt in principle.
|
|
+ % . in languages with many accents, such as Czech or French, it's
|
|
+ % common to leave accents off identifiers. The result looks ok in
|
|
+ % tt, but exceedingly strange in rm.
|
|
+ % . we don't want -- and --- to be treated as ligatures.
|
|
+ % . this still does not fix the ?` and !` ligatures, but so far no
|
|
+ % one has made identifiers using them :).
|
|
+ \df \tt
|
|
+ \def\temp{#2}% return value type
|
|
+ \ifx\temp\empty\else \tclose{\temp} \fi
|
|
+ #3% output function name
|
|
+ }%
|
|
+ {\rm\enskip}% hskip 0.5 em of \tenrm
|
|
+ %
|
|
+ \boldbrax
|
|
+ % arguments will be output next, if any.
|
|
+}
|
|
+
|
|
+% Print arguments in slanted roman (not ttsl), inconsistently with using
|
|
+% tt for the name. This is because literal text is sometimes needed in
|
|
+% the argument list (groff manual), and ttsl and tt are not very
|
|
+% distinguishable. Prevent hyphenation at `-' chars.
|
|
+%
|
|
+\def\defunargs#1{%
|
|
+ % use sl by default (not ttsl),
|
|
+ % tt for the names.
|
|
+ \df \sl \hyphenchar\font=0
|
|
+ %
|
|
+ % On the other hand, if an argument has two dashes (for instance), we
|
|
+ % want a way to get ttsl. Let's try @var for that.
|
|
+ \let\var=\ttslanted
|
|
+ #1%
|
|
+ \sl\hyphenchar\font=45
|
|
+}
|
|
+
|
|
+% We want ()&[] to print specially on the defun line.
|
|
+%
|
|
+\def\activeparens{%
|
|
+ \catcode`\(=\active \catcode`\)=\active
|
|
+ \catcode`\[=\active \catcode`\]=\active
|
|
+ \catcode`\&=\active
|
|
+}
|
|
+
|
|
+% Make control sequences which act like normal parenthesis chars.
|
|
+\let\lparen = ( \let\rparen = )
|
|
+
|
|
+% Be sure that we always have a definition for `(', etc. For example,
|
|
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
|
|
+% so TeX would otherwise complain about undefined control sequence.
|
|
+{
|
|
+ \activeparens
|
|
+ \global\let(=\lparen \global\let)=\rparen
|
|
+ \global\let[=\lbrack \global\let]=\rbrack
|
|
+ \global\let& = \&
|
|
+
|
|
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
|
|
+ \gdef\magicamp{\let&=\amprm}
|
|
+}
|
|
+
|
|
+\newcount\parencount
|
|
+
|
|
+% If we encounter &foo, then turn on ()-hacking afterwards
|
|
+\newif\ifampseen
|
|
+\def\amprm#1 {\ampseentrue{\bf\ }}
|
|
+
|
|
+\def\parenfont{%
|
|
+ \ifampseen
|
|
+ % At the first level, print parens in roman,
|
|
+ % otherwise use the default font.
|
|
+ \ifnum \parencount=1 \rm \fi
|
|
+ \else
|
|
+ % The \sf parens (in \boldbrax) actually are a little bolder than
|
|
+ % the contained text. This is especially needed for [ and ] .
|
|
+ \sf
|
|
+ \fi
|
|
+}
|
|
+\def\infirstlevel#1{%
|
|
+ \ifampseen
|
|
+ \ifnum\parencount=1
|
|
+ #1%
|
|
+ \fi
|
|
+ \fi
|
|
+}
|
|
+\def\bfafterword#1 {#1 \bf}
|
|
+
|
|
+\def\opnr{%
|
|
+ \global\advance\parencount by 1
|
|
+ {\parenfont(}%
|
|
+ \infirstlevel \bfafterword
|
|
+}
|
|
+\def\clnr{%
|
|
+ {\parenfont)}%
|
|
+ \infirstlevel \sl
|
|
+ \global\advance\parencount by -1
|
|
+}
|
|
+
|
|
+\newcount\brackcount
|
|
+\def\lbrb{%
|
|
+ \global\advance\brackcount by 1
|
|
+ {\bf[}%
|
|
+}
|
|
+\def\rbrb{%
|
|
+ {\bf]}%
|
|
+ \global\advance\brackcount by -1
|
|
+}
|
|
+
|
|
+\def\checkparencounts{%
|
|
+ \ifnum\parencount=0 \else \badparencount \fi
|
|
+ \ifnum\brackcount=0 \else \badbrackcount \fi
|
|
+}
|
|
+\def\badparencount{%
|
|
+ \errmessage{Unbalanced parentheses in @def}%
|
|
+ \global\parencount=0
|
|
+}
|
|
+\def\badbrackcount{%
|
|
+ \errmessage{Unbalanced square braces in @def}%
|
|
+ \global\brackcount=0
|
|
+}
|
|
+
|
|
+
|
|
+\message{macros,}
|
|
+% @macro.
|
|
+
|
|
+% To do this right we need a feature of e-TeX, \scantokens,
|
|
+% which we arrange to emulate with a temporary file in ordinary TeX.
|
|
+\ifx\eTeXversion\undefined
|
|
+ \newwrite\macscribble
|
|
+ \def\scantokens#1{%
|
|
+ \toks0={#1}%
|
|
+ \immediate\openout\macscribble=\jobname.tmp
|
|
+ \immediate\write\macscribble{\the\toks0}%
|
|
+ \immediate\closeout\macscribble
|
|
+ \input \jobname.tmp
|
|
+ }
|
|
+\fi
|
|
+
|
|
+\def\scanmacro#1{%
|
|
+ \begingroup
|
|
+ \newlinechar`\^^M
|
|
+ \let\xeatspaces\eatspaces
|
|
+ % Undo catcode changes of \startcontents and \doprintindex
|
|
+ % When called from @insertcopying or (short)caption, we need active
|
|
+ % backslash to get it printed correctly. Previously, we had
|
|
+ % \catcode`\\=\other instead. We'll see whether a problem appears
|
|
+ % with macro expansion. --kasal, 19aug04
|
|
+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
|
|
+ % ... and \example
|
|
+ \spaceisspace
|
|
+ %
|
|
+ % Append \endinput to make sure that TeX does not see the ending newline.
|
|
+ %
|
|
+ % I've verified that it is necessary both for e-TeX and for ordinary TeX
|
|
+ % --kasal, 29nov03
|
|
+ \scantokens{#1\endinput}%
|
|
+ \endgroup
|
|
+}
|
|
+
|
|
+\def\scanexp#1{%
|
|
+ \edef\temp{\noexpand\scanmacro{#1}}%
|
|
+ \temp
|
|
+}
|
|
+
|
|
+\newcount\paramno % Count of parameters
|
|
+\newtoks\macname % Macro name
|
|
+\newif\ifrecursive % Is it recursive?
|
|
+
|
|
+% List of all defined macros in the form
|
|
+% \definedummyword\macro1\definedummyword\macro2...
|
|
+% Currently is also contains all @aliases; the list can be split
|
|
+% if there is a need.
|
|
+\def\macrolist{}
|
|
+
|
|
+% Add the macro to \macrolist
|
|
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
|
|
+\def\addtomacrolistxxx#1{%
|
|
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
|
|
+ \xdef\macrolist{\the\toks0}%
|
|
+}
|
|
+
|
|
+% Utility routines.
|
|
+% This does \let #1 = #2, with \csnames; that is,
|
|
+% \let \csname#1\endcsname = \csname#2\endcsname
|
|
+% (except of course we have to play expansion games).
|
|
+%
|
|
+\def\cslet#1#2{%
|
|
+ \expandafter\let
|
|
+ \csname#1\expandafter\endcsname
|
|
+ \csname#2\endcsname
|
|
+}
|
|
+
|
|
+% Trim leading and trailing spaces off a string.
|
|
+% Concepts from aro-bend problem 15 (see CTAN).
|
|
+{\catcode`\@=11
|
|
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
|
|
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
|
|
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
|
|
+\def\unbrace#1{#1}
|
|
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
|
|
+}
|
|
+
|
|
+% Trim a single trailing ^^M off a string.
|
|
+{\catcode`\^^M=\other \catcode`\Q=3%
|
|
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
|
|
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
|
|
+\gdef\eatcrb#1Q#2Q{#1}%
|
|
+}
|
|
+
|
|
+% Macro bodies are absorbed as an argument in a context where
|
|
+% all characters are catcode 10, 11 or 12, except \ which is active
|
|
+% (as in normal texinfo). It is necessary to change the definition of \.
|
|
+
|
|
+% It's necessary to have hard CRs when the macro is executed. This is
|
|
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
|
|
+% body, and then making it the \newlinechar in \scanmacro.
|
|
+
|
|
+\def\scanctxt{%
|
|
+ \catcode`\"=\other
|
|
+ \catcode`\+=\other
|
|
+ \catcode`\<=\other
|
|
+ \catcode`\>=\other
|
|
+ \catcode`\@=\other
|
|
+ \catcode`\^=\other
|
|
+ \catcode`\_=\other
|
|
+ \catcode`\|=\other
|
|
+ \catcode`\~=\other
|
|
+}
|
|
+
|
|
+\def\scanargctxt{%
|
|
+ \scanctxt
|
|
+ \catcode`\\=\other
|
|
+ \catcode`\^^M=\other
|
|
+}
|
|
+
|
|
+\def\macrobodyctxt{%
|
|
+ \scanctxt
|
|
+ \catcode`\{=\other
|
|
+ \catcode`\}=\other
|
|
+ \catcode`\^^M=\other
|
|
+ \usembodybackslash
|
|
+}
|
|
+
|
|
+\def\macroargctxt{%
|
|
+ \scanctxt
|
|
+ \catcode`\\=\other
|
|
+}
|
|
+
|
|
+% \mbodybackslash is the definition of \ in @macro bodies.
|
|
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
|
|
+% where N is the macro parameter number.
|
|
+% We define \csname macarg.\endcsname to be \realbackslash, so
|
|
+% \\ in macro replacement text gets you a backslash.
|
|
+
|
|
+{\catcode`@=0 @catcode`@\=@active
|
|
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
|
|
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
|
|
+}
|
|
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
|
|
+
|
|
+\def\macro{\recursivefalse\parsearg\macroxxx}
|
|
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
|
|
+
|
|
+\def\macroxxx#1{%
|
|
+ \getargs{#1}% now \macname is the macname and \argl the arglist
|
|
+ \ifx\argl\empty % no arguments
|
|
+ \paramno=0%
|
|
+ \else
|
|
+ \expandafter\parsemargdef \argl;%
|
|
+ \fi
|
|
+ \if1\csname ismacro.\the\macname\endcsname
|
|
+ \message{Warning: redefining \the\macname}%
|
|
+ \else
|
|
+ \expandafter\ifx\csname \the\macname\endcsname \relax
|
|
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
|
|
+ \global\cslet{macsave.\the\macname}{\the\macname}%
|
|
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
|
|
+ \addtomacrolist{\the\macname}%
|
|
+ \fi
|
|
+ \begingroup \macrobodyctxt
|
|
+ \ifrecursive \expandafter\parsermacbody
|
|
+ \else \expandafter\parsemacbody
|
|
+ \fi}
|
|
+
|
|
+\parseargdef\unmacro{%
|
|
+ \if1\csname ismacro.#1\endcsname
|
|
+ \global\cslet{#1}{macsave.#1}%
|
|
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
|
|
+ % Remove the macro name from \macrolist:
|
|
+ \begingroup
|
|
+ \expandafter\let\csname#1\endcsname \relax
|
|
+ \let\definedummyword\unmacrodo
|
|
+ \xdef\macrolist{\macrolist}%
|
|
+ \endgroup
|
|
+ \else
|
|
+ \errmessage{Macro #1 not defined}%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% Called by \do from \dounmacro on each macro. The idea is to omit any
|
|
+% macro definitions that have been changed to \relax.
|
|
+%
|
|
+\def\unmacrodo#1{%
|
|
+ \ifx #1\relax
|
|
+ % remove this
|
|
+ \else
|
|
+ \noexpand\definedummyword \noexpand#1%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% This makes use of the obscure feature that if the last token of a
|
|
+% <parameter list> is #, then the preceding argument is delimited by
|
|
+% an opening brace, and that opening brace is not consumed.
|
|
+\def\getargs#1{\getargsxxx#1{}}
|
|
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
|
|
+\def\getmacname #1 #2\relax{\macname={#1}}
|
|
+\def\getmacargs#1{\def\argl{#1}}
|
|
+
|
|
+% Parse the optional {params} list. Set up \paramno and \paramlist
|
|
+% so \defmacro knows what to do. Define \macarg.blah for each blah
|
|
+% in the params list, to be ##N where N is the position in that list.
|
|
+% That gets used by \mbodybackslash (above).
|
|
+
|
|
+% We need to get `macro parameter char #' into several definitions.
|
|
+% The technique used is stolen from LaTeX: let \hash be something
|
|
+% unexpandable, insert that wherever you need a #, and then redefine
|
|
+% it to # just before using the token list produced.
|
|
+%
|
|
+% The same technique is used to protect \eatspaces till just before
|
|
+% the macro is used.
|
|
+
|
|
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
|
|
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
|
|
+\def\parsemargdefxxx#1,{%
|
|
+ \if#1;\let\next=\relax
|
|
+ \else \let\next=\parsemargdefxxx
|
|
+ \advance\paramno by 1%
|
|
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
|
|
+ {\xeatspaces{\hash\the\paramno}}%
|
|
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
|
|
+ \fi\next}
|
|
+
|
|
+% These two commands read recursive and nonrecursive macro bodies.
|
|
+% (They're different since rec and nonrec macros end differently.)
|
|
+
|
|
+\long\def\parsemacbody#1@end macro%
|
|
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
|
|
+\long\def\parsermacbody#1@end rmacro%
|
|
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
|
|
+
|
|
+% This defines the macro itself. There are six cases: recursive and
|
|
+% nonrecursive macros of zero, one, and many arguments.
|
|
+% Much magic with \expandafter here.
|
|
+% \xdef is used so that macro definitions will survive the file
|
|
+% they're defined in; @include reads the file inside a group.
|
|
+\def\defmacro{%
|
|
+ \let\hash=##% convert placeholders to macro parameter chars
|
|
+ \ifrecursive
|
|
+ \ifcase\paramno
|
|
+ % 0
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \noexpand\scanmacro{\temp}}%
|
|
+ \or % 1
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \bgroup\noexpand\macroargctxt
|
|
+ \noexpand\braceorline
|
|
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
|
|
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
|
|
+ \egroup\noexpand\scanmacro{\temp}}%
|
|
+ \else % many
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \bgroup\noexpand\macroargctxt
|
|
+ \noexpand\csname\the\macname xx\endcsname}%
|
|
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
|
|
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
|
|
+ \expandafter\expandafter
|
|
+ \expandafter\xdef
|
|
+ \expandafter\expandafter
|
|
+ \csname\the\macname xxx\endcsname
|
|
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
|
|
+ \fi
|
|
+ \else
|
|
+ \ifcase\paramno
|
|
+ % 0
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \noexpand\norecurse{\the\macname}%
|
|
+ \noexpand\scanmacro{\temp}\egroup}%
|
|
+ \or % 1
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \bgroup\noexpand\macroargctxt
|
|
+ \noexpand\braceorline
|
|
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
|
|
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
|
|
+ \egroup
|
|
+ \noexpand\norecurse{\the\macname}%
|
|
+ \noexpand\scanmacro{\temp}\egroup}%
|
|
+ \else % many
|
|
+ \expandafter\xdef\csname\the\macname\endcsname{%
|
|
+ \bgroup\noexpand\macroargctxt
|
|
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
|
|
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
|
|
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
|
|
+ \expandafter\expandafter
|
|
+ \expandafter\xdef
|
|
+ \expandafter\expandafter
|
|
+ \csname\the\macname xxx\endcsname
|
|
+ \paramlist{%
|
|
+ \egroup
|
|
+ \noexpand\norecurse{\the\macname}%
|
|
+ \noexpand\scanmacro{\temp}\egroup}%
|
|
+ \fi
|
|
+ \fi}
|
|
+
|
|
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
|
|
+
|
|
+% \braceorline decides whether the next nonwhitespace character is a
|
|
+% {. If so it reads up to the closing }, if not, it reads the whole
|
|
+% line. Whatever was read is then fed to the next control sequence
|
|
+% as an argument (by \parsebrace or \parsearg)
|
|
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
|
|
+\def\braceorlinexxx{%
|
|
+ \ifx\nchar\bgroup\else
|
|
+ \expandafter\parsearg
|
|
+ \fi \next}
|
|
+
|
|
+
|
|
+% @alias.
|
|
+% We need some trickery to remove the optional spaces around the equal
|
|
+% sign. Just make them active and then expand them all to nothing.
|
|
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
|
|
+\def\aliasxxx #1{\aliasyyy#1\relax}
|
|
+\def\aliasyyy #1=#2\relax{%
|
|
+ {%
|
|
+ \expandafter\let\obeyedspace=\empty
|
|
+ \addtomacrolist{#1}%
|
|
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
|
|
+ }%
|
|
+ \next
|
|
+}
|
|
+
|
|
+
|
|
+\message{cross references,}
|
|
+
|
|
+\newwrite\auxfile
|
|
+
|
|
+\newif\ifhavexrefs % True if xref values are known.
|
|
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
|
|
+
|
|
+% @inforef is relatively simple.
|
|
+\def\inforef #1{\inforefzzz #1,,,,**}
|
|
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
|
|
+ node \samp{\ignorespaces#1{}}}
|
|
+
|
|
+% @node's only job in TeX is to define \lastnode, which is used in
|
|
+% cross-references. The @node line might or might not have commas, and
|
|
+% might or might not have spaces before the first comma, like:
|
|
+% @node foo , bar , ...
|
|
+% We don't want such trailing spaces in the node name.
|
|
+%
|
|
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
|
|
+%
|
|
+% also remove a trailing comma, in case of something like this:
|
|
+% @node Help-Cross, , , Cross-refs
|
|
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
|
|
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
|
|
+
|
|
+\let\nwnode=\node
|
|
+\let\lastnode=\empty
|
|
+
|
|
+% Write a cross-reference definition for the current node. #1 is the
|
|
+% type (Ynumbered, Yappendix, Ynothing).
|
|
+%
|
|
+\def\donoderef#1{%
|
|
+ \ifx\lastnode\empty\else
|
|
+ \setref{\lastnode}{#1}%
|
|
+ \global\let\lastnode=\empty
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @anchor{NAME} -- define xref target at arbitrary point.
|
|
+%
|
|
+\newcount\savesfregister
|
|
+%
|
|
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
|
|
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
|
|
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
|
|
+
|
|
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
|
|
+% anchor), which consists of three parts:
|
|
+% 1) NAME-title - the current sectioning name taken from \thissection,
|
|
+% or the anchor name.
|
|
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
|
|
+% empty for anchors.
|
|
+% 3) NAME-pg - the page number.
|
|
+%
|
|
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
|
|
+% floats, there is an additional part, which is not written here:
|
|
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
|
|
+%
|
|
+\def\setref#1#2{%
|
|
+ \pdfmkdest{#1}%
|
|
+ \iflinks
|
|
+ {%
|
|
+ \atdummies % preserve commands, but don't expand them
|
|
+ \edef\writexrdef##1##2{%
|
|
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
|
|
+ ##1}{##2}}% these are parameters of \writexrdef
|
|
+ }%
|
|
+ \toks0 = \expandafter{\thissection}%
|
|
+ \immediate \writexrdef{title}{\the\toks0 }%
|
|
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
|
|
+ \writexrdef{pg}{\folio}% will be written later, during \shipout
|
|
+ }%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
|
|
+% the node name, #2 the name of the Info cross-reference, #3 the printed
|
|
+% node name, #4 the name of the Info file, #5 the name of the printed
|
|
+% manual. All but the node name can be omitted.
|
|
+%
|
|
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
|
|
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
|
|
+\def\ref#1{\xrefX[#1,,,,,,,]}
|
|
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
|
|
+ \unsepspaces
|
|
+ \def\printedmanual{\ignorespaces #5}%
|
|
+ \def\printedrefname{\ignorespaces #3}%
|
|
+ \setbox1=\hbox{\printedmanual\unskip}%
|
|
+ \setbox0=\hbox{\printedrefname\unskip}%
|
|
+ \ifdim \wd0 = 0pt
|
|
+ % No printed node name was explicitly given.
|
|
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
|
|
+ % Use the node name inside the square brackets.
|
|
+ \def\printedrefname{\ignorespaces #1}%
|
|
+ \else
|
|
+ % Use the actual chapter/section title appear inside
|
|
+ % the square brackets. Use the real section title if we have it.
|
|
+ \ifdim \wd1 > 0pt
|
|
+ % It is in another manual, so we don't have it.
|
|
+ \def\printedrefname{\ignorespaces #1}%
|
|
+ \else
|
|
+ \ifhavexrefs
|
|
+ % We know the real title if we have the xref values.
|
|
+ \def\printedrefname{\refx{#1-title}{}}%
|
|
+ \else
|
|
+ % Otherwise just copy the Info node name.
|
|
+ \def\printedrefname{\ignorespaces #1}%
|
|
+ \fi%
|
|
+ \fi
|
|
+ \fi
|
|
+ \fi
|
|
+ %
|
|
+ % Make link in pdf output.
|
|
+ \ifpdf
|
|
+ \leavevmode
|
|
+ \getfilename{#4}%
|
|
+ {\turnoffactive
|
|
+ % See comments at \activebackslashdouble.
|
|
+ {\activebackslashdouble \xdef\pdfxrefdest{#1}%
|
|
+ \backslashparens\pdfxrefdest}%
|
|
+ %
|
|
+ \ifnum\filenamelength>0
|
|
+ \startlink attr{/Border [0 0 0]}%
|
|
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
|
|
+ \else
|
|
+ \startlink attr{/Border [0 0 0]}%
|
|
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
|
|
+ \fi
|
|
+ }%
|
|
+ \linkcolor
|
|
+ \fi
|
|
+ %
|
|
+ % Float references are printed completely differently: "Figure 1.2"
|
|
+ % instead of "[somenode], p.3". We distinguish them by the
|
|
+ % LABEL-title being set to a magic string.
|
|
+ {%
|
|
+ % Have to otherify everything special to allow the \csname to
|
|
+ % include an _ in the xref name, etc.
|
|
+ \indexnofonts
|
|
+ \turnoffactive
|
|
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
|
|
+ \csname XR#1-title\endcsname
|
|
+ }%
|
|
+ \iffloat\Xthisreftitle
|
|
+ % If the user specified the print name (third arg) to the ref,
|
|
+ % print it instead of our usual "Figure 1.2".
|
|
+ \ifdim\wd0 = 0pt
|
|
+ \refx{#1-snt}%
|
|
+ \else
|
|
+ \printedrefname
|
|
+ \fi
|
|
+ %
|
|
+ % if the user also gave the printed manual name (fifth arg), append
|
|
+ % "in MANUALNAME".
|
|
+ \ifdim \wd1 > 0pt
|
|
+ \space \putwordin{} \cite{\printedmanual}%
|
|
+ \fi
|
|
+ \else
|
|
+ % node/anchor (non-float) references.
|
|
+ %
|
|
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
|
|
+ % insert empty discretionaries after hyphens, which means that it will
|
|
+ % not find a line break at a hyphen in a node names. Since some manuals
|
|
+ % are best written with fairly long node names, containing hyphens, this
|
|
+ % is a loss. Therefore, we give the text of the node name again, so it
|
|
+ % is as if TeX is seeing it for the first time.
|
|
+ \ifdim \wd1 > 0pt
|
|
+ \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
|
|
+ \else
|
|
+ % _ (for example) has to be the character _ for the purposes of the
|
|
+ % control sequence corresponding to the node, but it has to expand
|
|
+ % into the usual \leavevmode...\vrule stuff for purposes of
|
|
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
|
|
+ % printing, back off for the \refx-pg.
|
|
+ {\turnoffactive
|
|
+ % Only output a following space if the -snt ref is nonempty; for
|
|
+ % @unnumbered and @anchor, it won't be.
|
|
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
|
|
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
|
|
+ }%
|
|
+ % output the `[mynode]' via a macro so it can be overridden.
|
|
+ \xrefprintnodename\printedrefname
|
|
+ %
|
|
+ % But we always want a comma and a space:
|
|
+ ,\space
|
|
+ %
|
|
+ % output the `page 3'.
|
|
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
|
|
+ \fi
|
|
+ \fi
|
|
+ \endlink
|
|
+\endgroup}
|
|
+
|
|
+% This macro is called from \xrefX for the `[nodename]' part of xref
|
|
+% output. It's a separate macro only so it can be changed more easily,
|
|
+% since square brackets don't work well in some documents. Particularly
|
|
+% one that Bob is working on :).
|
|
+%
|
|
+\def\xrefprintnodename#1{[#1]}
|
|
+
|
|
+% Things referred to by \setref.
|
|
+%
|
|
+\def\Ynothing{}
|
|
+\def\Yomitfromtoc{}
|
|
+\def\Ynumbered{%
|
|
+ \ifnum\secno=0
|
|
+ \putwordChapter@tie \the\chapno
|
|
+ \else \ifnum\subsecno=0
|
|
+ \putwordSection@tie \the\chapno.\the\secno
|
|
+ \else \ifnum\subsubsecno=0
|
|
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
|
|
+ \else
|
|
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
|
|
+ \fi\fi\fi
|
|
+}
|
|
+\def\Yappendix{%
|
|
+ \ifnum\secno=0
|
|
+ \putwordAppendix@tie @char\the\appendixno{}%
|
|
+ \else \ifnum\subsecno=0
|
|
+ \putwordSection@tie @char\the\appendixno.\the\secno
|
|
+ \else \ifnum\subsubsecno=0
|
|
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
|
|
+ \else
|
|
+ \putwordSection@tie
|
|
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
|
|
+ \fi\fi\fi
|
|
+}
|
|
+
|
|
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
|
|
+% If its value is nonempty, SUFFIX is output afterward.
|
|
+%
|
|
+\def\refx#1#2{%
|
|
+ {%
|
|
+ \indexnofonts
|
|
+ \otherbackslash
|
|
+ \expandafter\global\expandafter\let\expandafter\thisrefX
|
|
+ \csname XR#1\endcsname
|
|
+ }%
|
|
+ \ifx\thisrefX\relax
|
|
+ % If not defined, say something at least.
|
|
+ \angleleft un\-de\-fined\angleright
|
|
+ \iflinks
|
|
+ \ifhavexrefs
|
|
+ \message{\linenumber Undefined cross reference `#1'.}%
|
|
+ \else
|
|
+ \ifwarnedxrefs\else
|
|
+ \global\warnedxrefstrue
|
|
+ \message{Cross reference values unknown; you must run TeX again.}%
|
|
+ \fi
|
|
+ \fi
|
|
+ \fi
|
|
+ \else
|
|
+ % It's defined, so just use it.
|
|
+ \thisrefX
|
|
+ \fi
|
|
+ #2% Output the suffix in any case.
|
|
+}
|
|
+
|
|
+% This is the macro invoked by entries in the aux file. Usually it's
|
|
+% just a \def (we prepend XR to the control sequence name to avoid
|
|
+% collisions). But if this is a float type, we have more work to do.
|
|
+%
|
|
+\def\xrdef#1#2{%
|
|
+ \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
|
|
+ %
|
|
+ % Was that xref control sequence that we just defined for a float?
|
|
+ \expandafter\iffloat\csname XR#1\endcsname
|
|
+ % it was a float, and we have the (safe) float type in \iffloattype.
|
|
+ \expandafter\let\expandafter\floatlist
|
|
+ \csname floatlist\iffloattype\endcsname
|
|
+ %
|
|
+ % Is this the first time we've seen this float type?
|
|
+ \expandafter\ifx\floatlist\relax
|
|
+ \toks0 = {\do}% yes, so just \do
|
|
+ \else
|
|
+ % had it before, so preserve previous elements in list.
|
|
+ \toks0 = \expandafter{\floatlist\do}%
|
|
+ \fi
|
|
+ %
|
|
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
|
|
+ % for later use in \listoffloats.
|
|
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% Read the last existing aux file, if any. No error if none exists.
|
|
+%
|
|
+\def\tryauxfile{%
|
|
+ \openin 1 \jobname.aux
|
|
+ \ifeof 1 \else
|
|
+ \readdatafile{aux}%
|
|
+ \global\havexrefstrue
|
|
+ \fi
|
|
+ \closein 1
|
|
+}
|
|
+
|
|
+\def\setupdatafile{%
|
|
+ \catcode`\^^@=\other
|
|
+ \catcode`\^^A=\other
|
|
+ \catcode`\^^B=\other
|
|
+ \catcode`\^^C=\other
|
|
+ \catcode`\^^D=\other
|
|
+ \catcode`\^^E=\other
|
|
+ \catcode`\^^F=\other
|
|
+ \catcode`\^^G=\other
|
|
+ \catcode`\^^H=\other
|
|
+ \catcode`\^^K=\other
|
|
+ \catcode`\^^L=\other
|
|
+ \catcode`\^^N=\other
|
|
+ \catcode`\^^P=\other
|
|
+ \catcode`\^^Q=\other
|
|
+ \catcode`\^^R=\other
|
|
+ \catcode`\^^S=\other
|
|
+ \catcode`\^^T=\other
|
|
+ \catcode`\^^U=\other
|
|
+ \catcode`\^^V=\other
|
|
+ \catcode`\^^W=\other
|
|
+ \catcode`\^^X=\other
|
|
+ \catcode`\^^Z=\other
|
|
+ \catcode`\^^[=\other
|
|
+ \catcode`\^^\=\other
|
|
+ \catcode`\^^]=\other
|
|
+ \catcode`\^^^=\other
|
|
+ \catcode`\^^_=\other
|
|
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
|
|
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
|
|
+ % supported in the main text, it doesn't seem desirable. Furthermore,
|
|
+ % that is not enough: for node names that actually contain a ^
|
|
+ % character, we would end up writing a line like this: 'xrdef {'hat
|
|
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
|
|
+ % argument, and \hat is not an expandable control sequence. It could
|
|
+ % all be worked out, but why? Either we support ^^ or we don't.
|
|
+ %
|
|
+ % The other change necessary for this was to define \auxhat:
|
|
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
|
|
+ % and then to call \auxhat in \setq.
|
|
+ %
|
|
+ \catcode`\^=\other
|
|
+ %
|
|
+ % Special characters. Should be turned off anyway, but...
|
|
+ \catcode`\~=\other
|
|
+ \catcode`\[=\other
|
|
+ \catcode`\]=\other
|
|
+ \catcode`\"=\other
|
|
+ \catcode`\_=\other
|
|
+ \catcode`\|=\other
|
|
+ \catcode`\<=\other
|
|
+ \catcode`\>=\other
|
|
+ \catcode`\$=\other
|
|
+ \catcode`\#=\other
|
|
+ \catcode`\&=\other
|
|
+ \catcode`\%=\other
|
|
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
|
|
+ %
|
|
+ % This is to support \ in node names and titles, since the \
|
|
+ % characters end up in a \csname. It's easier than
|
|
+ % leaving it active and making its active definition an actual \
|
|
+ % character. What I don't understand is why it works in the *value*
|
|
+ % of the xrdef. Seems like it should be a catcode12 \, and that
|
|
+ % should not typeset properly. But it works, so I'm moving on for
|
|
+ % now. --karl, 15jan04.
|
|
+ \catcode`\\=\other
|
|
+ %
|
|
+ % Make the characters 128-255 be printing characters.
|
|
+ {%
|
|
+ \count1=128
|
|
+ \def\loop{%
|
|
+ \catcode\count1=\other
|
|
+ \advance\count1 by 1
|
|
+ \ifnum \count1<256 \loop \fi
|
|
+ }%
|
|
+ }%
|
|
+ %
|
|
+ % @ is our escape character in .aux files, and we need braces.
|
|
+ \catcode`\{=1
|
|
+ \catcode`\}=2
|
|
+ \catcode`\@=0
|
|
+}
|
|
+
|
|
+\def\readdatafile#1{%
|
|
+\begingroup
|
|
+ \setupdatafile
|
|
+ \input\jobname.#1
|
|
+\endgroup}
|
|
+
|
|
+\message{insertions,}
|
|
+% including footnotes.
|
|
+
|
|
+\newcount \footnoteno
|
|
+
|
|
+% The trailing space in the following definition for supereject is
|
|
+% vital for proper filling; pages come out unaligned when you do a
|
|
+% pagealignmacro call if that space before the closing brace is
|
|
+% removed. (Generally, numeric constants should always be followed by a
|
|
+% space to prevent strange expansion errors.)
|
|
+\def\supereject{\par\penalty -20000\footnoteno =0 }
|
|
+
|
|
+% @footnotestyle is meaningful for info output only.
|
|
+\let\footnotestyle=\comment
|
|
+
|
|
+{\catcode `\@=11
|
|
+%
|
|
+% Auto-number footnotes. Otherwise like plain.
|
|
+\gdef\footnote{%
|
|
+ \let\indent=\ptexindent
|
|
+ \let\noindent=\ptexnoindent
|
|
+ \global\advance\footnoteno by \@ne
|
|
+ \edef\thisfootno{$^{\the\footnoteno}$}%
|
|
+ %
|
|
+ % In case the footnote comes at the end of a sentence, preserve the
|
|
+ % extra spacing after we do the footnote number.
|
|
+ \let\@sf\empty
|
|
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
|
|
+ %
|
|
+ % Remove inadvertent blank space before typesetting the footnote number.
|
|
+ \unskip
|
|
+ \thisfootno\@sf
|
|
+ \dofootnote
|
|
+}%
|
|
+
|
|
+% Don't bother with the trickery in plain.tex to not require the
|
|
+% footnote text as a parameter. Our footnotes don't need to be so general.
|
|
+%
|
|
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
|
|
+% \parseargline) fails inside footnotes because the tokens are fixed when
|
|
+% the footnote is read. --karl, 16nov96.
|
|
+%
|
|
+\gdef\dofootnote{%
|
|
+ \insert\footins\bgroup
|
|
+ % We want to typeset this text as a normal paragraph, even if the
|
|
+ % footnote reference occurs in (for example) a display environment.
|
|
+ % So reset some parameters.
|
|
+ \hsize=\pagewidth
|
|
+ \interlinepenalty\interfootnotelinepenalty
|
|
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
|
|
+ \splitmaxdepth\dp\strutbox
|
|
+ \floatingpenalty\@MM
|
|
+ \leftskip\z@skip
|
|
+ \rightskip\z@skip
|
|
+ \spaceskip\z@skip
|
|
+ \xspaceskip\z@skip
|
|
+ \parindent\defaultparindent
|
|
+ %
|
|
+ \smallfonts \rm
|
|
+ %
|
|
+ % Because we use hanging indentation in footnotes, a @noindent appears
|
|
+ % to exdent this text, so make it be a no-op. makeinfo does not use
|
|
+ % hanging indentation so @noindent can still be needed within footnote
|
|
+ % text after an @example or the like (not that this is good style).
|
|
+ \let\noindent = \relax
|
|
+ %
|
|
+ % Hang the footnote text off the number. Use \everypar in case the
|
|
+ % footnote extends for more than one paragraph.
|
|
+ \everypar = {\hang}%
|
|
+ \textindent{\thisfootno}%
|
|
+ %
|
|
+ % Don't crash into the line above the footnote text. Since this
|
|
+ % expands into a box, it must come within the paragraph, lest it
|
|
+ % provide a place where TeX can split the footnote.
|
|
+ \footstrut
|
|
+ \futurelet\next\fo@t
|
|
+}
|
|
+}%end \catcode `\@=11
|
|
+
|
|
+% In case a @footnote appears in a vbox, save the footnote text and create
|
|
+% the real \insert just after the vbox finished. Otherwise, the insertion
|
|
+% would be lost.
|
|
+% Similarily, if a @footnote appears inside an alignment, save the footnote
|
|
+% text to a box and make the \insert when a row of the table is finished.
|
|
+% And the same can be done for other insert classes. --kasal, 16nov03.
|
|
+
|
|
+% Replace the \insert primitive by a cheating macro.
|
|
+% Deeper inside, just make sure that the saved insertions are not spilled
|
|
+% out prematurely.
|
|
+%
|
|
+\def\startsavinginserts{%
|
|
+ \ifx \insert\ptexinsert
|
|
+ \let\insert\saveinsert
|
|
+ \else
|
|
+ \let\checkinserts\relax
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% This \insert replacement works for both \insert\footins{foo} and
|
|
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
|
|
+%
|
|
+\def\saveinsert#1{%
|
|
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
|
|
+ \afterassignment\next
|
|
+ % swallow the left brace
|
|
+ \let\temp =
|
|
+}
|
|
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
|
|
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
|
|
+
|
|
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
|
|
+
|
|
+\def\placesaveins#1{%
|
|
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
|
|
+ {\box#1}%
|
|
+}
|
|
+
|
|
+% eat @SAVE -- beware, all of them have catcode \other:
|
|
+{
|
|
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
|
|
+ \gdef\gobblesave @SAVE{}
|
|
+}
|
|
+
|
|
+% initialization:
|
|
+\def\newsaveins #1{%
|
|
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
|
|
+ \next
|
|
+}
|
|
+\def\newsaveinsX #1{%
|
|
+ \csname newbox\endcsname #1%
|
|
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
|
|
+ \checksaveins #1}%
|
|
+}
|
|
+
|
|
+% initialize:
|
|
+\let\checkinserts\empty
|
|
+\newsaveins\footins
|
|
+\newsaveins\margin
|
|
+
|
|
+
|
|
+% @image. We use the macros from epsf.tex to support this.
|
|
+% If epsf.tex is not installed and @image is used, we complain.
|
|
+%
|
|
+% Check for and read epsf.tex up front. If we read it only at @image
|
|
+% time, we might be inside a group, and then its definitions would get
|
|
+% undone and the next image would fail.
|
|
+\openin 1 = epsf.tex
|
|
+\ifeof 1 \else
|
|
+ % Do not bother showing banner with epsf.tex v2.7k (available in
|
|
+ % doc/epsf.tex and on ctan).
|
|
+ \def\epsfannounce{\toks0 = }%
|
|
+ \input epsf.tex
|
|
+\fi
|
|
+\closein 1
|
|
+%
|
|
+% We will only complain once about lack of epsf.tex.
|
|
+\newif\ifwarnednoepsf
|
|
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
|
|
+ work. It is also included in the Texinfo distribution, or you can get
|
|
+ it from ftp://tug.org/tex/epsf.tex.}
|
|
+%
|
|
+\def\image#1{%
|
|
+ \ifx\epsfbox\undefined
|
|
+ \ifwarnednoepsf \else
|
|
+ \errhelp = \noepsfhelp
|
|
+ \errmessage{epsf.tex not found, images will be ignored}%
|
|
+ \global\warnednoepsftrue
|
|
+ \fi
|
|
+ \else
|
|
+ \imagexxx #1,,,,,\finish
|
|
+ \fi
|
|
+}
|
|
+%
|
|
+% Arguments to @image:
|
|
+% #1 is (mandatory) image filename; we tack on .eps extension.
|
|
+% #2 is (optional) width, #3 is (optional) height.
|
|
+% #4 is (ignored optional) html alt text.
|
|
+% #5 is (ignored optional) extension.
|
|
+% #6 is just the usual extra ignored arg for parsing this stuff.
|
|
+\newif\ifimagevmode
|
|
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
|
|
+ \catcode`\^^M = 5 % in case we're inside an example
|
|
+ \normalturnoffactive % allow _ et al. in names
|
|
+ % If the image is by itself, center it.
|
|
+ \ifvmode
|
|
+ \imagevmodetrue
|
|
+ \nobreak\bigskip
|
|
+ % Usually we'll have text after the image which will insert
|
|
+ % \parskip glue, so insert it here too to equalize the space
|
|
+ % above and below.
|
|
+ \nobreak\vskip\parskip
|
|
+ \nobreak
|
|
+ \line\bgroup\hss
|
|
+ \fi
|
|
+ %
|
|
+ % Output the image.
|
|
+ \ifpdf
|
|
+ \dopdfimage{#1}{#2}{#3}%
|
|
+ \else
|
|
+ % \epsfbox itself resets \epsf?size at each figure.
|
|
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
|
|
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
|
|
+ \epsfbox{#1.eps}%
|
|
+ \fi
|
|
+ %
|
|
+ \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
|
|
+\endgroup}
|
|
+
|
|
+
|
|
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
|
|
+% etc. We don't actually implement floating yet, we always include the
|
|
+% float "here". But it seemed the best name for the future.
|
|
+%
|
|
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
|
|
+
|
|
+% There may be a space before second and/or third parameter; delete it.
|
|
+\def\eatcommaspace#1, {#1,}
|
|
+
|
|
+% #1 is the optional FLOATTYPE, the text label for this float, typically
|
|
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
|
|
+% this float will not be numbered and cannot be referred to.
|
|
+%
|
|
+% #2 is the optional xref label. Also must be present for the float to
|
|
+% be referable.
|
|
+%
|
|
+% #3 is the optional positioning argument; for now, it is ignored. It
|
|
+% will somehow specify the positions allowed to float to (here, top, bottom).
|
|
+%
|
|
+% We keep a separate counter for each FLOATTYPE, which we reset at each
|
|
+% chapter-level command.
|
|
+\let\resetallfloatnos=\empty
|
|
+%
|
|
+\def\dofloat#1,#2,#3,#4\finish{%
|
|
+ \let\thiscaption=\empty
|
|
+ \let\thisshortcaption=\empty
|
|
+ %
|
|
+ % don't lose footnotes inside @float.
|
|
+ %
|
|
+ % BEWARE: when the floats start float, we have to issue warning whenever an
|
|
+ % insert appears inside a float which could possibly float. --kasal, 26may04
|
|
+ %
|
|
+ \startsavinginserts
|
|
+ %
|
|
+ % We can't be used inside a paragraph.
|
|
+ \par
|
|
+ %
|
|
+ \vtop\bgroup
|
|
+ \def\floattype{#1}%
|
|
+ \def\floatlabel{#2}%
|
|
+ \def\floatloc{#3}% we do nothing with this yet.
|
|
+ %
|
|
+ \ifx\floattype\empty
|
|
+ \let\safefloattype=\empty
|
|
+ \else
|
|
+ {%
|
|
+ % the floattype might have accents or other special characters,
|
|
+ % but we need to use it in a control sequence name.
|
|
+ \indexnofonts
|
|
+ \turnoffactive
|
|
+ \xdef\safefloattype{\floattype}%
|
|
+ }%
|
|
+ \fi
|
|
+ %
|
|
+ % If label is given but no type, we handle that as the empty type.
|
|
+ \ifx\floatlabel\empty \else
|
|
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
|
|
+ % Table 1, Figure 2, ...). (And if no label, no number.)
|
|
+ %
|
|
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
|
|
+ \global\advance\floatno by 1
|
|
+ %
|
|
+ {%
|
|
+ % This magic value for \thissection is output by \setref as the
|
|
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
|
|
+ % labels (which have a completely different output format) from
|
|
+ % node and anchor labels. And \xrdef uses it to construct the
|
|
+ % lists of floats.
|
|
+ %
|
|
+ \edef\thissection{\floatmagic=\safefloattype}%
|
|
+ \setref{\floatlabel}{Yfloat}%
|
|
+ }%
|
|
+ \fi
|
|
+ %
|
|
+ % start with \parskip glue, I guess.
|
|
+ \vskip\parskip
|
|
+ %
|
|
+ % Don't suppress indentation if a float happens to start a section.
|
|
+ \restorefirstparagraphindent
|
|
+}
|
|
+
|
|
+% we have these possibilities:
|
|
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
|
|
+% @float Foo,lbl & no caption: Foo 1.1
|
|
+% @float Foo & @caption{Cap}: Foo: Cap
|
|
+% @float Foo & no caption: Foo
|
|
+% @float ,lbl & Caption{Cap}: 1.1: Cap
|
|
+% @float ,lbl & no caption: 1.1
|
|
+% @float & @caption{Cap}: Cap
|
|
+% @float & no caption:
|
|
+%
|
|
+\def\Efloat{%
|
|
+ \let\floatident = \empty
|
|
+ %
|
|
+ % In all cases, if we have a float type, it comes first.
|
|
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
|
|
+ %
|
|
+ % If we have an xref label, the number comes next.
|
|
+ \ifx\floatlabel\empty \else
|
|
+ \ifx\floattype\empty \else % if also had float type, need tie first.
|
|
+ \appendtomacro\floatident{\tie}%
|
|
+ \fi
|
|
+ % the number.
|
|
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
|
|
+ \fi
|
|
+ %
|
|
+ % Start the printed caption with what we've constructed in
|
|
+ % \floatident, but keep it separate; we need \floatident again.
|
|
+ \let\captionline = \floatident
|
|
+ %
|
|
+ \ifx\thiscaption\empty \else
|
|
+ \ifx\floatident\empty \else
|
|
+ \appendtomacro\captionline{: }% had ident, so need a colon between
|
|
+ \fi
|
|
+ %
|
|
+ % caption text.
|
|
+ \appendtomacro\captionline{\scanexp\thiscaption}%
|
|
+ \fi
|
|
+ %
|
|
+ % If we have anything to print, print it, with space before.
|
|
+ % Eventually this needs to become an \insert.
|
|
+ \ifx\captionline\empty \else
|
|
+ \vskip.5\parskip
|
|
+ \captionline
|
|
+ %
|
|
+ % Space below caption.
|
|
+ \vskip\parskip
|
|
+ \fi
|
|
+ %
|
|
+ % If have an xref label, write the list of floats info. Do this
|
|
+ % after the caption, to avoid chance of it being a breakpoint.
|
|
+ \ifx\floatlabel\empty \else
|
|
+ % Write the text that goes in the lof to the aux file as
|
|
+ % \floatlabel-lof. Besides \floatident, we include the short
|
|
+ % caption if specified, else the full caption if specified, else nothing.
|
|
+ {%
|
|
+ \atdummies
|
|
+ % since we read the caption text in the macro world, where ^^M
|
|
+ % is turned into a normal character, we have to scan it back, so
|
|
+ % we don't write the literal three characters "^^M" into the aux file.
|
|
+ \scanexp{%
|
|
+ \xdef\noexpand\gtemp{%
|
|
+ \ifx\thisshortcaption\empty
|
|
+ \thiscaption
|
|
+ \else
|
|
+ \thisshortcaption
|
|
+ \fi
|
|
+ }%
|
|
+ }%
|
|
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
|
|
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
|
|
+ }%
|
|
+ \fi
|
|
+ \egroup % end of \vtop
|
|
+ %
|
|
+ % place the captured inserts
|
|
+ %
|
|
+ % BEWARE: when the floats start float, we have to issue warning whenever an
|
|
+ % insert appears inside a float which could possibly float. --kasal, 26may04
|
|
+ %
|
|
+ \checkinserts
|
|
+}
|
|
+
|
|
+% Append the tokens #2 to the definition of macro #1, not expanding either.
|
|
+%
|
|
+\def\appendtomacro#1#2{%
|
|
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
|
|
+}
|
|
+
|
|
+% @caption, @shortcaption
|
|
+%
|
|
+\def\caption{\docaption\thiscaption}
|
|
+\def\shortcaption{\docaption\thisshortcaption}
|
|
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
|
|
+\def\defcaption#1#2{\egroup \def#1{#2}}
|
|
+
|
|
+% The parameter is the control sequence identifying the counter we are
|
|
+% going to use. Create it if it doesn't exist and assign it to \floatno.
|
|
+\def\getfloatno#1{%
|
|
+ \ifx#1\relax
|
|
+ % Haven't seen this figure type before.
|
|
+ \csname newcount\endcsname #1%
|
|
+ %
|
|
+ % Remember to reset this floatno at the next chap.
|
|
+ \expandafter\gdef\expandafter\resetallfloatnos
|
|
+ \expandafter{\resetallfloatnos #1=0 }%
|
|
+ \fi
|
|
+ \let\floatno#1%
|
|
+}
|
|
+
|
|
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
|
|
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
|
|
+% first read the @float command.
|
|
+%
|
|
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
|
|
+
|
|
+% Magic string used for the XREFLABEL-title value, so \xrefX can
|
|
+% distinguish floats from other xref types.
|
|
+\def\floatmagic{!!float!!}
|
|
+
|
|
+% #1 is the control sequence we are passed; we expand into a conditional
|
|
+% which is true if #1 represents a float ref. That is, the magic
|
|
+% \thissection value which we \setref above.
|
|
+%
|
|
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
|
|
+%
|
|
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
|
|
+% (safe) float type for this float. We set \iffloattype to #2.
|
|
+%
|
|
+\def\doiffloat#1=#2=#3\finish{%
|
|
+ \def\temp{#1}%
|
|
+ \def\iffloattype{#2}%
|
|
+ \ifx\temp\floatmagic
|
|
+}
|
|
+
|
|
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
|
|
+%
|
|
+\parseargdef\listoffloats{%
|
|
+ \def\floattype{#1}% floattype
|
|
+ {%
|
|
+ % the floattype might have accents or other special characters,
|
|
+ % but we need to use it in a control sequence name.
|
|
+ \indexnofonts
|
|
+ \turnoffactive
|
|
+ \xdef\safefloattype{\floattype}%
|
|
+ }%
|
|
+ %
|
|
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
|
|
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
|
|
+ \ifhavexrefs
|
|
+ % if the user said @listoffloats foo but never @float foo.
|
|
+ \message{\linenumber No `\safefloattype' floats to list.}%
|
|
+ \fi
|
|
+ \else
|
|
+ \begingroup
|
|
+ \leftskip=\tocindent % indent these entries like a toc
|
|
+ \let\do=\listoffloatsdo
|
|
+ \csname floatlist\safefloattype\endcsname
|
|
+ \endgroup
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% This is called on each entry in a list of floats. We're passed the
|
|
+% xref label, in the form LABEL-title, which is how we save it in the
|
|
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
|
|
+% has the text we're supposed to typeset here.
|
|
+%
|
|
+% Figures without xref labels will not be included in the list (since
|
|
+% they won't appear in the aux file).
|
|
+%
|
|
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
|
|
+\def\listoffloatsdoentry#1-title\finish{{%
|
|
+ % Can't fully expand XR#1-lof because it can contain anything. Just
|
|
+ % pass the control sequence. On the other hand, XR#1-pg is just the
|
|
+ % page number, and we want to fully expand that so we can get a link
|
|
+ % in pdf output.
|
|
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
|
|
+ %
|
|
+ % use the same \entry macro we use to generate the TOC and index.
|
|
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
|
|
+ \writeentry
|
|
+}}
|
|
+
|
|
+\message{localization,}
|
|
+% and i18n.
|
|
+
|
|
+% @documentlanguage is usually given very early, just after
|
|
+% @setfilename. If done too late, it may not override everything
|
|
+% properly. Single argument is the language abbreviation.
|
|
+% It would be nice if we could set up a hyphenation file here.
|
|
+%
|
|
+\parseargdef\documentlanguage{%
|
|
+ \tex % read txi-??.tex file in plain TeX.
|
|
+ % Read the file if it exists.
|
|
+ \openin 1 txi-#1.tex
|
|
+ \ifeof 1
|
|
+ \errhelp = \nolanghelp
|
|
+ \errmessage{Cannot read language file txi-#1.tex}%
|
|
+ \else
|
|
+ \input txi-#1.tex
|
|
+ \fi
|
|
+ \closein 1
|
|
+ \endgroup
|
|
+}
|
|
+\newhelp\nolanghelp{The given language definition file cannot be found or
|
|
+is empty. Maybe you need to install it? In the current directory
|
|
+should work if nowhere else does.}
|
|
+
|
|
+
|
|
+% @documentencoding should change something in TeX eventually, most
|
|
+% likely, but for now just recognize it.
|
|
+\let\documentencoding = \comment
|
|
+
|
|
+
|
|
+% Page size parameters.
|
|
+%
|
|
+\newdimen\defaultparindent \defaultparindent = 15pt
|
|
+
|
|
+\chapheadingskip = 15pt plus 4pt minus 2pt
|
|
+\secheadingskip = 12pt plus 3pt minus 2pt
|
|
+\subsecheadingskip = 9pt plus 2pt minus 2pt
|
|
+
|
|
+% Prevent underfull vbox error messages.
|
|
+\vbadness = 10000
|
|
+
|
|
+% Don't be so finicky about underfull hboxes, either.
|
|
+\hbadness = 2000
|
|
+
|
|
+% Following George Bush, just get rid of widows and orphans.
|
|
+\widowpenalty=10000
|
|
+\clubpenalty=10000
|
|
+
|
|
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
|
|
+% using an old version of TeX, don't do anything. We want the amount of
|
|
+% stretch added to depend on the line length, hence the dependence on
|
|
+% \hsize. We call this whenever the paper size is set.
|
|
+%
|
|
+\def\setemergencystretch{%
|
|
+ \ifx\emergencystretch\thisisundefined
|
|
+ % Allow us to assign to \emergencystretch anyway.
|
|
+ \def\emergencystretch{\dimen0}%
|
|
+ \else
|
|
+ \emergencystretch = .15\hsize
|
|
+ \fi
|
|
+}
|
|
+
|
|
+% Parameters in order: 1) textheight; 2) textwidth;
|
|
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
|
|
+% 7) physical page height; 8) physical page width.
|
|
+%
|
|
+% We also call \setleading{\textleading}, so the caller should define
|
|
+% \textleading. The caller should also set \parskip.
|
|
+%
|
|
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
|
|
+ \voffset = #3\relax
|
|
+ \topskip = #6\relax
|
|
+ \splittopskip = \topskip
|
|
+ %
|
|
+ \vsize = #1\relax
|
|
+ \advance\vsize by \topskip
|
|
+ \outervsize = \vsize
|
|
+ \advance\outervsize by 2\topandbottommargin
|
|
+ \pageheight = \vsize
|
|
+ %
|
|
+ \hsize = #2\relax
|
|
+ \outerhsize = \hsize
|
|
+ \advance\outerhsize by 0.5in
|
|
+ \pagewidth = \hsize
|
|
+ %
|
|
+ \normaloffset = #4\relax
|
|
+ \bindingoffset = #5\relax
|
|
+ %
|
|
+ \ifpdf
|
|
+ \pdfpageheight #7\relax
|
|
+ \pdfpagewidth #8\relax
|
|
+ \fi
|
|
+ %
|
|
+ \setleading{\textleading}
|
|
+ %
|
|
+ \parindent = \defaultparindent
|
|
+ \setemergencystretch
|
|
+}
|
|
+
|
|
+% @letterpaper (the default).
|
|
+\def\letterpaper{{\globaldefs = 1
|
|
+ \parskip = 3pt plus 2pt minus 1pt
|
|
+ \textleading = 13.2pt
|
|
+ %
|
|
+ % If page is nothing but text, make it come out even.
|
|
+ \internalpagesizes{46\baselineskip}{6in}%
|
|
+ {\voffset}{.25in}%
|
|
+ {\bindingoffset}{36pt}%
|
|
+ {11in}{8.5in}%
|
|
+}}
|
|
+
|
|
+% Use @smallbook to reset parameters for 7x9.25 trim size.
|
|
+\def\smallbook{{\globaldefs = 1
|
|
+ \parskip = 2pt plus 1pt
|
|
+ \textleading = 12pt
|
|
+ %
|
|
+ \internalpagesizes{7.5in}{5in}%
|
|
+ {\voffset}{.25in}%
|
|
+ {\bindingoffset}{16pt}%
|
|
+ {9.25in}{7in}%
|
|
+ %
|
|
+ \lispnarrowing = 0.3in
|
|
+ \tolerance = 700
|
|
+ \hfuzz = 1pt
|
|
+ \contentsrightmargin = 0pt
|
|
+ \defbodyindent = .5cm
|
|
+}}
|
|
+
|
|
+% Use @smallerbook to reset parameters for 6x9 trim size.
|
|
+% (Just testing, parameters still in flux.)
|
|
+\def\smallerbook{{\globaldefs = 1
|
|
+ \parskip = 1.5pt plus 1pt
|
|
+ \textleading = 12pt
|
|
+ %
|
|
+ \internalpagesizes{7.4in}{4.8in}%
|
|
+ {-.2in}{-.4in}%
|
|
+ {0pt}{14pt}%
|
|
+ {9in}{6in}%
|
|
+ %
|
|
+ \lispnarrowing = 0.25in
|
|
+ \tolerance = 700
|
|
+ \hfuzz = 1pt
|
|
+ \contentsrightmargin = 0pt
|
|
+ \defbodyindent = .4cm
|
|
+}}
|
|
+
|
|
+% Use @afourpaper to print on European A4 paper.
|
|
+\def\afourpaper{{\globaldefs = 1
|
|
+ \parskip = 3pt plus 2pt minus 1pt
|
|
+ \textleading = 13.2pt
|
|
+ %
|
|
+ % Double-side printing via postscript on Laserjet 4050
|
|
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
|
|
+ % To change the settings for a different printer or situation, adjust
|
|
+ % \normaloffset until the front-side and back-side texts align. Then
|
|
+ % do the same for \bindingoffset. You can set these for testing in
|
|
+ % your texinfo source file like this:
|
|
+ % @tex
|
|
+ % \global\normaloffset = -6mm
|
|
+ % \global\bindingoffset = 10mm
|
|
+ % @end tex
|
|
+ \internalpagesizes{51\baselineskip}{160mm}
|
|
+ {\voffset}{\hoffset}%
|
|
+ {\bindingoffset}{44pt}%
|
|
+ {297mm}{210mm}%
|
|
+ %
|
|
+ \tolerance = 700
|
|
+ \hfuzz = 1pt
|
|
+ \contentsrightmargin = 0pt
|
|
+ \defbodyindent = 5mm
|
|
+}}
|
|
+
|
|
+% Use @afivepaper to print on European A5 paper.
|
|
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
|
|
+% He also recommends making @example and @lisp be small.
|
|
+\def\afivepaper{{\globaldefs = 1
|
|
+ \parskip = 2pt plus 1pt minus 0.1pt
|
|
+ \textleading = 12.5pt
|
|
+ %
|
|
+ \internalpagesizes{160mm}{120mm}%
|
|
+ {\voffset}{\hoffset}%
|
|
+ {\bindingoffset}{8pt}%
|
|
+ {210mm}{148mm}%
|
|
+ %
|
|
+ \lispnarrowing = 0.2in
|
|
+ \tolerance = 800
|
|
+ \hfuzz = 1.2pt
|
|
+ \contentsrightmargin = 0pt
|
|
+ \defbodyindent = 2mm
|
|
+ \tableindent = 12mm
|
|
+}}
|
|
+
|
|
+% A specific text layout, 24x15cm overall, intended for A4 paper.
|
|
+\def\afourlatex{{\globaldefs = 1
|
|
+ \afourpaper
|
|
+ \internalpagesizes{237mm}{150mm}%
|
|
+ {\voffset}{4.6mm}%
|
|
+ {\bindingoffset}{7mm}%
|
|
+ {297mm}{210mm}%
|
|
+ %
|
|
+ % Must explicitly reset to 0 because we call \afourpaper.
|
|
+ \globaldefs = 0
|
|
+}}
|
|
+
|
|
+% Use @afourwide to print on A4 paper in landscape format.
|
|
+\def\afourwide{{\globaldefs = 1
|
|
+ \afourpaper
|
|
+ \internalpagesizes{241mm}{165mm}%
|
|
+ {\voffset}{-2.95mm}%
|
|
+ {\bindingoffset}{7mm}%
|
|
+ {297mm}{210mm}%
|
|
+ \globaldefs = 0
|
|
+}}
|
|
+
|
|
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
|
|
+% Perhaps we should allow setting the margins, \topskip, \parskip,
|
|
+% and/or leading, also. Or perhaps we should compute them somehow.
|
|
+%
|
|
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
|
|
+\def\pagesizesyyy#1,#2,#3\finish{{%
|
|
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
|
|
+ \globaldefs = 1
|
|
+ %
|
|
+ \parskip = 3pt plus 2pt minus 1pt
|
|
+ \setleading{\textleading}%
|
|
+ %
|
|
+ \dimen0 = #1
|
|
+ \advance\dimen0 by \voffset
|
|
+ %
|
|
+ \dimen2 = \hsize
|
|
+ \advance\dimen2 by \normaloffset
|
|
+ %
|
|
+ \internalpagesizes{#1}{\hsize}%
|
|
+ {\voffset}{\normaloffset}%
|
|
+ {\bindingoffset}{44pt}%
|
|
+ {\dimen0}{\dimen2}%
|
|
+}}
|
|
+
|
|
+% Set default to letter.
|
|
+%
|
|
+\letterpaper
|
|
+
|
|
+
|
|
+\message{and turning on texinfo input format.}
|
|
+
|
|
+% Define macros to output various characters with catcode for normal text.
|
|
+\catcode`\"=\other
|
|
+\catcode`\~=\other
|
|
+\catcode`\^=\other
|
|
+\catcode`\_=\other
|
|
+\catcode`\|=\other
|
|
+\catcode`\<=\other
|
|
+\catcode`\>=\other
|
|
+\catcode`\+=\other
|
|
+\catcode`\$=\other
|
|
+\def\normaldoublequote{"}
|
|
+\def\normaltilde{~}
|
|
+\def\normalcaret{^}
|
|
+\def\normalunderscore{_}
|
|
+\def\normalverticalbar{|}
|
|
+\def\normalless{<}
|
|
+\def\normalgreater{>}
|
|
+\def\normalplus{+}
|
|
+\def\normaldollar{$}%$ font-lock fix
|
|
+
|
|
+% This macro is used to make a character print one way in \tt
|
|
+% (where it can probably be output as-is), and another way in other fonts,
|
|
+% where something hairier probably needs to be done.
|
|
+%
|
|
+% #1 is what to print if we are indeed using \tt; #2 is what to print
|
|
+% otherwise. Since all the Computer Modern typewriter fonts have zero
|
|
+% interword stretch (and shrink), and it is reasonable to expect all
|
|
+% typewriter fonts to have this, we can check that font parameter.
|
|
+%
|
|
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
|
|
+
|
|
+% Same as above, but check for italic font. Actually this also catches
|
|
+% non-italic slanted fonts since it is impossible to distinguish them from
|
|
+% italic fonts. But since this is only used by $ and it uses \sl anyway
|
|
+% this is not a problem.
|
|
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
|
|
+
|
|
+% Turn off all special characters except @
|
|
+% (and those which the user can use as if they were ordinary).
|
|
+% Most of these we simply print from the \tt font, but for some, we can
|
|
+% use math or other variants that look better in normal text.
|
|
+
|
|
+\catcode`\"=\active
|
|
+\def\activedoublequote{{\tt\char34}}
|
|
+\let"=\activedoublequote
|
|
+\catcode`\~=\active
|
|
+\def~{{\tt\char126}}
|
|
+\chardef\hat=`\^
|
|
+\catcode`\^=\active
|
|
+\def^{{\tt \hat}}
|
|
+
|
|
+\catcode`\_=\active
|
|
+\def_{\ifusingtt\normalunderscore\_}
|
|
+\let\realunder=_
|
|
+% Subroutine for the previous macro.
|
|
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
|
|
+
|
|
+\catcode`\|=\active
|
|
+\def|{{\tt\char124}}
|
|
+\chardef \less=`\<
|
|
+\catcode`\<=\active
|
|
+\def<{{\tt \less}}
|
|
+\chardef \gtr=`\>
|
|
+\catcode`\>=\active
|
|
+\def>{{\tt \gtr}}
|
|
+\catcode`\+=\active
|
|
+\def+{{\tt \char 43}}
|
|
+\catcode`\$=\active
|
|
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
|
|
+
|
|
+% If a .fmt file is being used, characters that might appear in a file
|
|
+% name cannot be active until we have parsed the command line.
|
|
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
|
|
+% \otherifyactive is called near the end of this file.
|
|
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
|
|
+
|
|
+\catcode`\@=0
|
|
+
|
|
+% \backslashcurfont outputs one backslash character in current font,
|
|
+% as in \char`\\.
|
|
+\global\chardef\backslashcurfont=`\\
|
|
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
|
|
+
|
|
+% \rawbackslash defines an active \ to do \backslashcurfont.
|
|
+% \otherbackslash defines an active \ to be a literal `\' character with
|
|
+% catcode other.
|
|
+{\catcode`\\=\active
|
|
+ @gdef@rawbackslash{@let\=@backslashcurfont}
|
|
+ @gdef@otherbackslash{@let\=@realbackslash}
|
|
+}
|
|
+
|
|
+% \realbackslash is an actual character `\' with catcode other, and
|
|
+% \doublebackslash is two of them (for the pdf outlines).
|
|
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
|
|
+
|
|
+% \normalbackslash outputs one backslash in fixed width font.
|
|
+\def\normalbackslash{{\tt\backslashcurfont}}
|
|
+
|
|
+\catcode`\\=\active
|
|
+
|
|
+% Used sometimes to turn off (effectively) the active characters
|
|
+% even after parsing them.
|
|
+@def@turnoffactive{%
|
|
+ @let"=@normaldoublequote
|
|
+ @let\=@realbackslash
|
|
+ @let~=@normaltilde
|
|
+ @let^=@normalcaret
|
|
+ @let_=@normalunderscore
|
|
+ @let|=@normalverticalbar
|
|
+ @let<=@normalless
|
|
+ @let>=@normalgreater
|
|
+ @let+=@normalplus
|
|
+ @let$=@normaldollar %$ font-lock fix
|
|
+ @unsepspaces
|
|
+}
|
|
+
|
|
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
|
|
+% the literal character `\'. (Thus, \ is not expandable when this is in
|
|
+% effect.)
|
|
+%
|
|
+@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
|
|
+
|
|
+% Make _ and + \other characters, temporarily.
|
|
+% This is canceled by @fixbackslash.
|
|
+@otherifyactive
|
|
+
|
|
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
|
|
+% That is what \eatinput is for; after that, the `\' should revert to printing
|
|
+% a backslash.
|
|
+%
|
|
+@gdef@eatinput input texinfo{@fixbackslash}
|
|
+@global@let\ = @eatinput
|
|
+
|
|
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
|
|
+% the first `\{ in the file would cause an error. This macro tries to fix
|
|
+% that, assuming it is called before the first `\' could plausibly occur.
|
|
+% Also turn back on active characters that might appear in the input
|
|
+% file name, in case not using a pre-dumped format.
|
|
+%
|
|
+@gdef@fixbackslash{%
|
|
+ @ifx\@eatinput @let\ = @normalbackslash @fi
|
|
+ @catcode`+=@active
|
|
+ @catcode`@_=@active
|
|
+}
|
|
+
|
|
+% Say @foo, not \foo, in error messages.
|
|
+@escapechar = `@@
|
|
+
|
|
+% These look ok in all fonts, so just make them not special.
|
|
+@catcode`@& = @other
|
|
+@catcode`@# = @other
|
|
+@catcode`@% = @other
|
|
+
|
|
+
|
|
+@c Local variables:
|
|
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+@c page-delimiter: "^\\\\message"
|
|
+@c time-stamp-start: "def\\\\texinfoversion{"
|
|
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+@c time-stamp-end: "}"
|
|
+@c End:
|
|
+
|
|
+@c vim:sw=2:
|
|
+
|
|
+@ignore
|
|
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
|
|
+@end ignore
|
|
Index: libffi/testsuite/lib/libffi-dg.exp
|
|
===================================================================
|
|
--- libffi.orig/testsuite/lib/libffi-dg.exp
|
|
+++ libffi/testsuite/lib/libffi-dg.exp
|
|
@@ -11,12 +11,12 @@
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
-# along with this program; see the file COPYING3. If not see
|
|
-# <http://www.gnu.org/licenses/>.
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
proc load_gcc_lib { filename } {
|
|
global srcdir
|
|
- load_file $srcdir/../../gcc/testsuite/lib/$filename
|
|
+ load_file $srcdir/lib/$filename
|
|
}
|
|
|
|
load_lib dg.exp
|
|
@@ -94,7 +94,6 @@ proc libffi-init { args } {
|
|
global srcdir
|
|
global blddirffi
|
|
global objdir
|
|
- global blddircxx
|
|
global TOOL_OPTIONS
|
|
global tool
|
|
global libffi_include
|
|
@@ -102,10 +101,8 @@ proc libffi-init { args } {
|
|
global tool_root_dir
|
|
global ld_library_path
|
|
|
|
- set blddirffi [lookfor_file [get_multilibs] libffi]
|
|
+ set blddirffi [pwd]/..
|
|
verbose "libffi $blddirffi"
|
|
- set blddircxx [lookfor_file [get_multilibs] libstdc++-v3]
|
|
- verbose "libstdc++ $blddircxx"
|
|
|
|
set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
|
|
if {$gccdir != ""} {
|
|
@@ -132,8 +129,6 @@ proc libffi-init { args } {
|
|
}
|
|
# add the library path for libffi.
|
|
append ld_library_path ":${blddirffi}/.libs"
|
|
- # add the library path for libstdc++ as well.
|
|
- append ld_library_path ":${blddircxx}/src/.libs"
|
|
|
|
verbose "ld_library_path: $ld_library_path"
|
|
|
|
@@ -146,7 +141,6 @@ proc libffi-init { args } {
|
|
if { $libffi_dir != "" } {
|
|
set libffi_dir [file dirname ${libffi_dir}]
|
|
set libffi_link_flags "-L${libffi_dir}/.libs"
|
|
- lappend libffi_link_flags "-L${blddircxx}/src/.libs"
|
|
}
|
|
|
|
set_ld_library_path_env_vars
|
|
Index: libffi/testsuite/lib/target-libpath.exp
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/testsuite/lib/target-libpath.exp
|
|
@@ -0,0 +1,263 @@
|
|
+# Copyright (C) 2004, 2005, 2007 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 3 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with GCC; see the file COPYING3. If not see
|
|
+# <http://www.gnu.org/licenses/>.
|
|
+
|
|
+# This file was contributed by John David Anglin (dave.anglin@nrc-cnrc.gc.ca)
|
|
+
|
|
+set orig_environment_saved 0
|
|
+set orig_ld_library_path_saved 0
|
|
+set orig_ld_run_path_saved 0
|
|
+set orig_shlib_path_saved 0
|
|
+set orig_ld_libraryn32_path_saved 0
|
|
+set orig_ld_library64_path_saved 0
|
|
+set orig_ld_library_path_32_saved 0
|
|
+set orig_ld_library_path_64_saved 0
|
|
+set orig_dyld_library_path_saved 0
|
|
+
|
|
+
|
|
+#######################################
|
|
+# proc set_ld_library_path_env_vars { }
|
|
+#######################################
|
|
+
|
|
+proc set_ld_library_path_env_vars { } {
|
|
+ global ld_library_path
|
|
+ global orig_environment_saved
|
|
+ global orig_ld_library_path_saved
|
|
+ global orig_ld_run_path_saved
|
|
+ global orig_shlib_path_saved
|
|
+ global orig_ld_libraryn32_path_saved
|
|
+ global orig_ld_library64_path_saved
|
|
+ global orig_ld_library_path_32_saved
|
|
+ global orig_ld_library_path_64_saved
|
|
+ global orig_dyld_library_path_saved
|
|
+ global orig_ld_library_path
|
|
+ global orig_ld_run_path
|
|
+ global orig_shlib_path
|
|
+ global orig_ld_libraryn32_path
|
|
+ global orig_ld_library64_path
|
|
+ global orig_ld_library_path_32
|
|
+ global orig_ld_library_path_64
|
|
+ global orig_dyld_library_path
|
|
+ global GCC_EXEC_PREFIX
|
|
+
|
|
+ # Set the relocated compiler prefix, but only if the user hasn't specified one.
|
|
+ if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } {
|
|
+ setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX"
|
|
+ }
|
|
+
|
|
+ # Setting the ld library path causes trouble when testing cross-compilers.
|
|
+ if { [is_remote target] } {
|
|
+ return
|
|
+ }
|
|
+
|
|
+ if { $orig_environment_saved == 0 } {
|
|
+ global env
|
|
+
|
|
+ set orig_environment_saved 1
|
|
+
|
|
+ # Save the original environment.
|
|
+ if [info exists env(LD_LIBRARY_PATH)] {
|
|
+ set orig_ld_library_path "$env(LD_LIBRARY_PATH)"
|
|
+ set orig_ld_library_path_saved 1
|
|
+ }
|
|
+ if [info exists env(LD_RUN_PATH)] {
|
|
+ set orig_ld_run_path "$env(LD_RUN_PATH)"
|
|
+ set orig_ld_run_path_saved 1
|
|
+ }
|
|
+ if [info exists env(SHLIB_PATH)] {
|
|
+ set orig_shlib_path "$env(SHLIB_PATH)"
|
|
+ set orig_shlib_path_saved 1
|
|
+ }
|
|
+ if [info exists env(LD_LIBRARYN32_PATH)] {
|
|
+ set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)"
|
|
+ set orig_ld_libraryn32_path_saved 1
|
|
+ }
|
|
+ if [info exists env(LD_LIBRARY64_PATH)] {
|
|
+ set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)"
|
|
+ set orig_ld_library64_path_saved 1
|
|
+ }
|
|
+ if [info exists env(LD_LIBRARY_PATH_32)] {
|
|
+ set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)"
|
|
+ set orig_ld_library_path_32_saved 1
|
|
+ }
|
|
+ if [info exists env(LD_LIBRARY_PATH_64)] {
|
|
+ set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)"
|
|
+ set orig_ld_library_path_64_saved 1
|
|
+ }
|
|
+ if [info exists env(DYLD_LIBRARY_PATH)] {
|
|
+ set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)"
|
|
+ set orig_dyld_library_path_saved 1
|
|
+ }
|
|
+ }
|
|
+
|
|
+ # We need to set ld library path in the environment. Currently,
|
|
+ # unix.exp doesn't set the environment correctly for all systems.
|
|
+ # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a
|
|
+ # program. We also need the environment set for compilations, etc.
|
|
+ #
|
|
+ # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
|
|
+ # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
|
|
+ # (for the 64-bit ABI). The same applies to Darwin (DYLD_LIBRARY_PATH),
|
|
+ # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64),
|
|
+ # and HP-UX (SHLIB_PATH). In some cases, the variables are independent
|
|
+ # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the
|
|
+ # variable is not defined.
|
|
+ #
|
|
+ # Doing this is somewhat of a hack as ld_library_path gets repeated in
|
|
+ # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables.
|
|
+ if { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path"
|
|
+ } else {
|
|
+ setenv LD_LIBRARY_PATH "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_ld_run_path_saved } {
|
|
+ setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path"
|
|
+ } else {
|
|
+ setenv LD_RUN_PATH "$ld_library_path"
|
|
+ }
|
|
+ # The default shared library dynamic path search for 64-bit
|
|
+ # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH.
|
|
+ # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we
|
|
+ # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent.
|
|
+ if { $orig_shlib_path_saved } {
|
|
+ setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path"
|
|
+ } else {
|
|
+ setenv SHLIB_PATH "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_ld_libraryn32_path_saved } {
|
|
+ setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path"
|
|
+ } elseif { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path"
|
|
+ } else {
|
|
+ setenv LD_LIBRARYN32_PATH "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_ld_library64_path_saved } {
|
|
+ setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path"
|
|
+ } elseif { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path"
|
|
+ } else {
|
|
+ setenv LD_LIBRARY64_PATH "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_ld_library_path_32_saved } {
|
|
+ setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32"
|
|
+ } elseif { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path"
|
|
+ } else {
|
|
+ setenv LD_LIBRARY_PATH_32 "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_ld_library_path_64_saved } {
|
|
+ setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64"
|
|
+ } elseif { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path"
|
|
+ } else {
|
|
+ setenv LD_LIBRARY_PATH_64 "$ld_library_path"
|
|
+ }
|
|
+ if { $orig_dyld_library_path_saved } {
|
|
+ setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path"
|
|
+ } else {
|
|
+ setenv DYLD_LIBRARY_PATH "$ld_library_path"
|
|
+ }
|
|
+
|
|
+ verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path"
|
|
+}
|
|
+
|
|
+#######################################
|
|
+# proc restore_ld_library_path_env_vars { }
|
|
+#######################################
|
|
+
|
|
+proc restore_ld_library_path_env_vars { } {
|
|
+ global orig_environment_saved
|
|
+ global orig_ld_library_path_saved
|
|
+ global orig_ld_run_path_saved
|
|
+ global orig_shlib_path_saved
|
|
+ global orig_ld_libraryn32_path_saved
|
|
+ global orig_ld_library64_path_saved
|
|
+ global orig_ld_library_path_32_saved
|
|
+ global orig_ld_library_path_64_saved
|
|
+ global orig_dyld_library_path_saved
|
|
+ global orig_ld_library_path
|
|
+ global orig_ld_run_path
|
|
+ global orig_shlib_path
|
|
+ global orig_ld_libraryn32_path
|
|
+ global orig_ld_library64_path
|
|
+ global orig_ld_library_path_32
|
|
+ global orig_ld_library_path_64
|
|
+ global orig_dyld_library_path
|
|
+
|
|
+ if { $orig_environment_saved == 0 } {
|
|
+ return
|
|
+ }
|
|
+
|
|
+ if { $orig_ld_library_path_saved } {
|
|
+ setenv LD_LIBRARY_PATH "$orig_ld_library_path"
|
|
+ } elseif [info exists env(LD_LIBRARY_PATH)] {
|
|
+ unsetenv LD_LIBRARY_PATH
|
|
+ }
|
|
+ if { $orig_ld_run_path_saved } {
|
|
+ setenv LD_RUN_PATH "$orig_ld_run_path"
|
|
+ } elseif [info exists env(LD_RUN_PATH)] {
|
|
+ unsetenv LD_RUN_PATH
|
|
+ }
|
|
+ if { $orig_shlib_path_saved } {
|
|
+ setenv SHLIB_PATH "$orig_shlib_path"
|
|
+ } elseif [info exists env(SHLIB_PATH)] {
|
|
+ unsetenv SHLIB_PATH
|
|
+ }
|
|
+ if { $orig_ld_libraryn32_path_saved } {
|
|
+ setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path"
|
|
+ } elseif [info exists env(LD_LIBRARYN32_PATH)] {
|
|
+ unsetenv LD_LIBRARYN32_PATH
|
|
+ }
|
|
+ if { $orig_ld_library64_path_saved } {
|
|
+ setenv LD_LIBRARY64_PATH "$orig_ld_library64_path"
|
|
+ } elseif [info exists env(LD_LIBRARY64_PATH)] {
|
|
+ unsetenv LD_LIBRARY64_PATH
|
|
+ }
|
|
+ if { $orig_ld_library_path_32_saved } {
|
|
+ setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32"
|
|
+ } elseif [info exists env(LD_LIBRARY_PATH_32)] {
|
|
+ unsetenv LD_LIBRARY_PATH_32
|
|
+ }
|
|
+ if { $orig_ld_library_path_64_saved } {
|
|
+ setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64"
|
|
+ } elseif [info exists env(LD_LIBRARY_PATH_64)] {
|
|
+ unsetenv LD_LIBRARY_PATH_64
|
|
+ }
|
|
+ if { $orig_dyld_library_path_saved } {
|
|
+ setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path"
|
|
+ } elseif [info exists env(DYLD_LIBRARY_PATH)] {
|
|
+ unsetenv DYLD_LIBRARY_PATH
|
|
+ }
|
|
+}
|
|
+
|
|
+#######################################
|
|
+# proc get_shlib_extension { }
|
|
+#######################################
|
|
+
|
|
+proc get_shlib_extension { } {
|
|
+ global shlib_ext
|
|
+
|
|
+ if { [ istarget *-*-darwin* ] } {
|
|
+ set shlib_ext "dylib"
|
|
+ } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } {
|
|
+ set shlib_ext "dll"
|
|
+ } elseif { [ istarget hppa*-*-hpux* ] } {
|
|
+ set shlib_ext "sl"
|
|
+ } else {
|
|
+ set shlib_ext "so"
|
|
+ }
|
|
+ return $shlib_ext
|
|
+}
|
|
+
|
|
Index: libffi/testsuite/lib/wrapper.exp
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ libffi/testsuite/lib/wrapper.exp
|
|
@@ -0,0 +1,45 @@
|
|
+# Copyright (C) 2004, 2007 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 3 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with GCC; see the file COPYING3. If not see
|
|
+# <http://www.gnu.org/licenses/>.
|
|
+
|
|
+# This file contains GCC-specifics for status wrappers for test programs.
|
|
+
|
|
+# ${tool}_maybe_build_wrapper -- Build wrapper object if the target
|
|
+# needs it. FILENAME is the path to the wrapper file. If there are
|
|
+# additional arguments, they are command-line options to provide to
|
|
+# the compiler when compiling FILENAME.
|
|
+
|
|
+proc ${tool}_maybe_build_wrapper { filename args } {
|
|
+ global gluefile wrap_flags
|
|
+
|
|
+ if { [target_info needs_status_wrapper] != "" \
|
|
+ && [target_info needs_status_wrapper] != "0" \
|
|
+ && ![info exists gluefile] } {
|
|
+ set saved_wrap_compile_flags [target_info wrap_compile_flags]
|
|
+ set flags [join $args " "]
|
|
+ # The wrapper code may contain code that gcc objects on. This
|
|
+ # became true for dejagnu-1.4.4. The set of warnings and code
|
|
+ # that gcc objects on may change, so just make sure -w is always
|
|
+ # passed to turn off all warnings.
|
|
+ set_currtarget_info wrap_compile_flags \
|
|
+ "$saved_wrap_compile_flags -w $flags"
|
|
+ set result [build_wrapper $filename]
|
|
+ set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags"
|
|
+ if { $result != "" } {
|
|
+ set gluefile [lindex $result 0]
|
|
+ set wrap_flags [lindex $result 1]
|
|
+ }
|
|
+ }
|
|
+}
|
|
Index: libffi/include/Makefile.am
|
|
===================================================================
|
|
--- libffi.orig/include/Makefile.am
|
|
+++ libffi/include/Makefile.am
|
|
@@ -5,8 +5,5 @@ AUTOMAKE_OPTIONS=foreign
|
|
DISTCLEANFILES=ffitarget.h
|
|
EXTRA_DIST=ffi.h.in ffi_common.h
|
|
|
|
-# Where generated headers like ffitarget.h get installed.
|
|
-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
|
|
-toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
|
|
-
|
|
-toollibffi_HEADERS = ffi.h ffitarget.h
|
|
+includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
|
|
+nodist_includes_HEADERS = ffi.h ffitarget.h
|
|
Index: libffi/README
|
|
===================================================================
|
|
--- libffi.orig/README
|
|
+++ libffi/README
|
|
@@ -1,10 +1,7 @@
|
|
-This directory contains the libffi package, which is not part of GCC but
|
|
-shipped with GCC as convenience.
|
|
-
|
|
Status
|
|
======
|
|
|
|
-libffi-3.0.9 was released on December 31, 2009. Check the libffi web
|
|
+libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web
|
|
page for updates: <URL:http://sourceware.org/libffi/>.
|
|
|
|
|
|
@@ -46,7 +43,7 @@ Libffi has been ported to many different
|
|
For specific configuration details and testing status, please
|
|
refer to the wiki page here:
|
|
|
|
- http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9
|
|
+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10
|
|
|
|
At the time of release, the following basic configurations have been
|
|
tested:
|
|
@@ -55,6 +52,7 @@ tested:
|
|
| Architecture | Operating System |
|
|
|--------------+------------------|
|
|
| Alpha | Linux |
|
|
+| Alpha | Tru64 |
|
|
| ARM | Linux |
|
|
| AVR32 | Linux |
|
|
| HPPA | HPUX |
|
|
@@ -83,6 +81,7 @@ tested:
|
|
| X86-64 | FreeBSD |
|
|
| X86-64 | Linux |
|
|
| X86-64 | OpenBSD |
|
|
+| X86-64 | Windows/MingW |
|
|
|--------------+------------------|
|
|
|
|
Please send additional platform test results to
|
|
@@ -126,6 +125,10 @@ History
|
|
|
|
See the ChangeLog files for details.
|
|
|
|
+3.0.10 ???-??-??
|
|
+ Fix the N64 build on mips-sgi-irix6.5.
|
|
+ Testsuite fixes for Tru64 Unix.
|
|
+
|
|
3.0.9 Dec-31-09
|
|
Add AVR32 and win64 ports. Add ARM softfp support.
|
|
Many fixes for AIX, Solaris, HP-UX, *BSD.
|
|
Index: libffi/testsuite/Makefile.am
|
|
===================================================================
|
|
--- libffi.orig/testsuite/Makefile.am
|
|
+++ libffi/testsuite/Makefile.am
|
|
@@ -14,3 +14,67 @@ RUNTEST = `if [ -f $(top_srcdir)/../deja
|
|
AM_RUNTESTFLAGS =
|
|
|
|
CLEANFILES = *.exe core* *.log *.sum
|
|
+
|
|
+EXTRA_DIST = libffi.special/special.exp \
|
|
+libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \
|
|
+libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \
|
|
+lib/libffi-dg.exp lib/wrapper.exp libffi.call/float.c \
|
|
+libffi.call/cls_multi_schar.c libffi.call/float3.c \
|
|
+libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \
|
|
+libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \
|
|
+libffi.call/promotion.c libffi.call/cls_dbls_struct.c \
|
|
+libffi.call/nested_struct.c libffi.call/closure_fn1.c \
|
|
+libffi.call/cls_4_1byte.c libffi.call/cls_float.c \
|
|
+libffi.call/cls_2byte.c libffi.call/closure_fn4.c \
|
|
+libffi.call/return_fl2.c libffi.call/nested_struct7.c \
|
|
+libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \
|
|
+libffi.call/float1.c libffi.call/cls_19byte.c \
|
|
+libffi.call/nested_struct1.c libffi.call/cls_4byte.c \
|
|
+libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \
|
|
+libffi.call/nested_struct4.c libffi.call/nested_struct3.c \
|
|
+libffi.call/struct7.c libffi.call/nested_struct9.c \
|
|
+libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \
|
|
+libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \
|
|
+libffi.call/testclosure.c libffi.call/cls_3byte1.c \
|
|
+libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \
|
|
+libffi.call/cls_ushort.c libffi.call/stret_medium2.c \
|
|
+libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \
|
|
+libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \
|
|
+libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c \
|
|
+libffi.call/return_ll.c libffi.call/cls_pointer.c \
|
|
+libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \
|
|
+libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c \
|
|
+libffi.call/return_sl.c libffi.call/cls_1_1byte.c \
|
|
+libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \
|
|
+libffi.call/cls_double.c libffi.call/many_win32.c \
|
|
+libffi.call/cls_16byte.c libffi.call/cls_align_double.c \
|
|
+libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c \
|
|
+libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \
|
|
+libffi.call/closure_stdcall.c libffi.call/return_fl.c \
|
|
+libffi.call/strlen_win32.c libffi.call/return_ldl.c \
|
|
+libffi.call/cls_align_float.c libffi.call/struct3.c \
|
|
+libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \
|
|
+libffi.call/cls_align_longdouble_split.c \
|
|
+libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \
|
|
+libffi.call/stret_large.c libffi.call/cls_align_sint16.c \
|
|
+libffi.call/nested_struct6.c libffi.call/cls_5byte.c \
|
|
+libffi.call/return_dbl.c libffi.call/cls_20byte.c \
|
|
+libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c \
|
|
+libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \
|
|
+libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \
|
|
+libffi.call/cls_18byte.c libffi.call/closure_fn3.c \
|
|
+libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c \
|
|
+libffi.call/struct2.c libffi.call/cls_3byte2.c \
|
|
+libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \
|
|
+libffi.call/return_fl3.c libffi.call/cls_align_uint32.c \
|
|
+libffi.call/problem1.c libffi.call/float4.c \
|
|
+libffi.call/cls_align_uint64.c libffi.call/struct9.c \
|
|
+libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \
|
|
+libffi.call/closure_fn0.c libffi.call/closure_fn6.c \
|
|
+libffi.call/struct4.c libffi.call/nested_struct2.c \
|
|
+libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \
|
|
+libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \
|
|
+libffi.call/cls_12byte.c libffi.call/cls_double_va.c \
|
|
+libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \
|
|
+libffi.call/nested_struct10.c libffi.call/nested_struct5.c \
|
|
+libffi.call/huge_struct.c
|