+2002-10-30 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * libtool.m4 (AC_LIBTOOL_PROG_CC_C_O): use printf, not
+ echo. (AC_DEPLIBS_CHECK_METHOD): use new shell function
+ win32_libid on w32 platforms
+ * ltmain.in: add new section for shell functions. Add
+ win32_libid() shell function.
+ * f77demo/Makefile.am: add -no-undefined flag
+
+2002-10-30 Rob Browning <rlb@defaultvalue.org>
+
+ * ltdl.c (realloc): Remove custom realloc. (#define
+ rpl_realloc realloc) and comment out later code for custom
+ realloc. You can't define your own malloc unless you know
+ enough about the malloc in use to be able to tell how big
+ the src ptr is. The disabled code incorrectly used the
+ *destination* ptr to decide how much to copy. This
+ sometimes results in out-of-bound accesses which cause
+ segfaults. This is a quick hack for now; we may want
+ something cleaner later. (tryall_dlopen_module): check to
+ be sure (dirname_len > 0) before testing first character
+ against '/'. (try_dlopen): check for feof(file) in read
+ loop -- otherwise infloop?
+
2002-10-25 Robert Boehne <rboehne@gnu.org>
* ltmain.in (-XCClinker): New flag passes a linking option
noinst_LTLIBRARIES = libfoo.la libmix.la
libfoo_la_SOURCES = foof.f
+libfoo_la_LDFLAGS = -no-undefined
+
libmix_la_SOURCES = foof.f fooc.c
+libmix_la_LDFLAGS = -no-undefined
noinst_HEADERS = foo.h
static lt_ptr lt_emalloc LT_PARAMS((size_t size));
static lt_ptr lt_erealloc LT_PARAMS((lt_ptr addr, size_t size));
-static lt_ptr rpl_realloc LT_PARAMS((lt_ptr ptr, size_t size));
+/* static lt_ptr rpl_realloc LT_PARAMS((lt_ptr ptr, size_t size)); */
+#define rpl_realloc realloc
/* These are the pointers that can be changed by the caller: */
LT_GLOBAL_DATA lt_ptr (*lt_dlmalloc) LT_PARAMS((size_t size))
Instead implement our own version (with known boundary conditions)
using lt_dlmalloc and lt_dlfree. */
-#undef realloc
-#define realloc rpl_realloc
+/* #undef realloc
+ #define realloc rpl_realloc
+*/
+#if 0
+ /* You can't (re)define realloc unless you also (re)define malloc.
+ Right now, this code uses the size of the *destination* to decide
+ how much to copy. That's not right, but you can't know the size
+ of the source unless you know enough about, or wrote malloc. So
+ this code is disabled... */
static lt_ptr
realloc (ptr, size)
return mem;
}
}
+#endif
#if ! HAVE_ARGZ_APPEND
assert (strchr (dirname, LT_DIRSEP_CHAR) == 0);
#endif
- if (dirname[dirname_len -1] == '/')
- --dirname_len;
+ if (dirname_len > 0)
+ if (dirname[dirname_len -1] == '/')
+ --dirname_len;
filename_len = dirname_len + 1 + LT_STRLEN (dlname);
/* Allocate memory, and combine DIRNAME and MODULENAME into it.
/* Handle the case where we occasionally need to read a line
that is longer than the initial buffer size. */
- while (line[LT_STRLEN(line) -1] != '\n')
+ while ((line[LT_STRLEN(line) -1] != '\n') && (!feof (file)))
{
line = LT_DLREALLOC (char, line, line_len *2);
if (!fgets (&line[line_len -1], (int) line_len +1, file))
FFLAGS="$FFLAGS -o out/conftest2.$ac_objext"],
[$1],[GCJ],[save_GCJFLAGS="$CFLAGS"
CFLAGS="$GCJFLAGS -o out/conftest2.$ac_objext"])
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
# that will create temporary files in the current directory regardless of
;;
cygwin* | mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
;;
darwin* | rhapsody*)
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# 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.
+win32_libid () {
+ win32_libid_type="unknown"
+ if eval $OBJDUMP -f $1 2>/dev/null | \
+ grep -E 'file format pei+-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_libid_type="x86 DLL"
+ else
+ if eval $OBJDUMP -f $1 2>/dev/null | \
+ grep -E 'file format pei*-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_libid_type="x86"
+ if eval file $1 2>/dev/null | \
+ grep -E 'ar archive' >/dev/null; then
+ win32_libid_type="$win32_libid_type archive"
+ if eval $NM -f posix -A $1 | awk '{print $3}' | grep "I" >/dev/null ; then
+ win32_libid_type="$win32_libid_type import"
+ else
+ win32_libid_type="$win32_libid_type static"
+ fi
+ fi
+ fi
+ fi
+ echo $win32_libid_type
+}
+
+# End of Shell function definitions
+#####################################
+
+
# Parse our command line options once, thoroughly.
while test "$#" -gt 0
do