mirror of
git://git.savannah.gnu.org/libtool.git
synced 2025-01-18 14:16:00 +08:00
313 lines
11 KiB
Plaintext
313 lines
11 KiB
Plaintext
From nobody Wed Oct 14 16:45:23 1998
|
|
X-From-Line: gord@gnu.org Fri Apr 17 23:33:23 1998
|
|
Return-Path: <gord@gnu.org>
|
|
Delivered-To: gord@trick.profitpress.com
|
|
Received: (qmail 23433 invoked from network); 17 Apr 1998 23:33:18 -0000
|
|
Received: from unknown (HELO bambam.m-tech.ab.ca) (127.0.0.1)
|
|
by 127.0.0.1 with SMTP; 17 Apr 1998 23:33:18 -0000
|
|
Received: from mescaline.gnu.org (gateway.m-tech.ab.ca [10.0.0.1]) by bambam.m-tech.ab.ca (8.8.5/8.6.9) with ESMTP id OAA06968 for <gord@m-tech.ab.ca>; Fri, 17 Apr 1998 14:24:44 -0600
|
|
Received: from tweedledumb.cygnus.com by mescaline.gnu.org (8.8.5/8.6.12GNU) with ESMTP id QAA24530 for <bug-libtool@gnu.org>; Fri, 17 Apr 1998 16:28:50 -0400
|
|
Received: from subrogation.cygnus.com (subrogation.cygnus.com [192.80.44.76])
|
|
by tweedledumb.cygnus.com (8.8.5/8.8.5) with ESMTP id QAA18910
|
|
for <bug-libtool@gnu.org>; Fri, 17 Apr 1998 16:28:46 -0400 (EDT)
|
|
Received: (ian@localhost) by subrogation.cygnus.com (950413.SGI.8.6.12/8.6.4) id QAA08423; Fri, 17 Apr 1998 16:28:45 -0400
|
|
Date: Fri, 17 Apr 1998 16:28:45 -0400
|
|
Message-Id: <199804172028.QAA08423@subrogation.cygnus.com>
|
|
From: Ian Lance Taylor <ian@cygnus.com>
|
|
To: bug-libtool@gnu.org
|
|
Subject: cygwin32 support in libtool
|
|
Xref: trick.profitpress.com mail.libtool:1336
|
|
Lines: 290
|
|
X-Gnus-Article-Number: 1 Mon Nov 2 17:17:26 1998
|
|
|
|
Here are the libtool patches I've worked up for cygwin32 support.
|
|
These should be relative to the 1.2 release.
|
|
|
|
These patches have some bogosities.
|
|
|
|
I needed to build a C file to compile when building the DLL. That C
|
|
file naturally includes semicolons. I could not figure out how to get
|
|
a semicolon into archive_cmds; the various approaches I tried all
|
|
failed, because ltmain splits archive_cmds at semicolons. So I wound
|
|
up just creating libtool.c in ltconfig. This libtool.c file never
|
|
gets deleted.
|
|
|
|
Both archive_cmds and old_archive_from_new_cmds need to use the same
|
|
definitions file. I created it in archive_cmds and deleted it in
|
|
old_archive_from_new_cmds.
|
|
|
|
Ian
|
|
|
|
Index: ltconfig.in
|
|
===================================================================
|
|
RCS file: /cvs/cvsfiles/devo/libtool/ltconfig.in,v
|
|
retrieving revision 1.6
|
|
retrieving revision 1.8
|
|
diff -p -r1.6 -r1.8
|
|
*** ltconfig.in 1998/03/23 18:28:53 1.6
|
|
--- ltconfig.in 1998/04/17 20:20:13 1.8
|
|
*************** old_LD="$LD"
|
|
*** 97,102 ****
|
|
--- 97,104 ----
|
|
old_LN_S="$LN_S"
|
|
old_NM="$NM"
|
|
old_RANLIB="$RANLIB"
|
|
+ old_DLLTOOL="$DLLTOOL"
|
|
+ old_AS="$AS"
|
|
|
|
# Parse the command line options.
|
|
args=
|
|
*************** if test -n "$RANLIB"; then
|
|
*** 351,356 ****
|
|
--- 353,362 ----
|
|
old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds"
|
|
fi
|
|
|
|
+ # Set sane defaults for `DLLTOOL' and `AS', used on cygwin32.
|
|
+ test -z "$DLLTOOL" && DLLTOOL=dlltool
|
|
+ test -z "$AS" && AS=as
|
|
+
|
|
# Check to see if we are using GCC.
|
|
if test "$with_gcc" != yes || test -z "$CC"; then
|
|
# If CC is not set, then try to find GCC or a usable CC.
|
|
*************** if test "$with_gcc" = yes; then
|
|
*** 456,462 ****
|
|
aix3* | aix4* | irix5* | irix6* | osf3* | osf4*)
|
|
# PIC is the default for these OSes.
|
|
;;
|
|
! os2*)
|
|
# We can build DLLs from non-PIC.
|
|
;;
|
|
amigaos*)
|
|
--- 462,468 ----
|
|
aix3* | aix4* | irix5* | irix6* | osf3* | osf4*)
|
|
# PIC is the default for these OSes.
|
|
;;
|
|
! cygwin32* | os2*)
|
|
# We can build DLLs from non-PIC.
|
|
;;
|
|
amigaos*)
|
|
*************** else
|
|
*** 490,496 ****
|
|
# PIC (with -KPIC) is the default.
|
|
;;
|
|
|
|
! os2*)
|
|
# We can build DLLs from non-PIC.
|
|
;;
|
|
|
|
--- 496,502 ----
|
|
# PIC (with -KPIC) is the default.
|
|
;;
|
|
|
|
! cygwin32* | os2*)
|
|
# We can build DLLs from non-PIC.
|
|
;;
|
|
|
|
*************** hardcode_shlibpath_var=unsupported
|
|
*** 702,708 ****
|
|
runpath_var=
|
|
|
|
case "$host_os" in
|
|
! amigaos* | sunos4*)
|
|
# On these operating systems, we should treat GNU ld like the system ld.
|
|
gnu_ld_acts_native=yes
|
|
;;
|
|
--- 708,714 ----
|
|
runpath_var=
|
|
|
|
case "$host_os" in
|
|
! amigaos* | sunos4* | cygwin32*)
|
|
# On these operating systems, we should treat GNU ld like the system ld.
|
|
gnu_ld_acts_native=yes
|
|
;;
|
|
*************** else
|
|
*** 756,761 ****
|
|
--- 762,788 ----
|
|
hardcode_minus_L=yes
|
|
;;
|
|
|
|
+ cygwin32*)
|
|
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
|
|
+ # no search path for DLLs.
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ allow_undefined_flag=unsupported
|
|
+ # Very, very bogus.
|
|
+ echo '
|
|
+ #include <windows.h>
|
|
+
|
|
+ struct _reent *_impure_ptr;
|
|
+ extern struct _reent *__imp_reent_data;
|
|
+ BOOL APIENTRY
|
|
+ __dll_entry (HINSTANCE hinst, DWORD reason, LPVOID reserved)
|
|
+ {
|
|
+ _impure_ptr = __imp_reent_data;
|
|
+ }
|
|
+ ' > libtool.c
|
|
+ archive_cmds='$CC -c libtool.c;echo EXPORTS > $soname-def;$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' >> $soname-def;$LD -s --base-file $soname-base --dll -e ___dll_entry@12 -o $lib libtool.o$libobjs$deplibs;$DLLTOOL --as=$AS --dllname $soname --def $soname-def --base-file $soname-base --output-exp $soname-exp;$LD -s --base-file $soname-base $soname-exp --dll -e ___dll_entry@12 -o $lib libtool.o$libobjs$deplibs;$DLLTOOL --as=$AS --dllname $soname --def $soname-def --base-file $soname-base --output-exp $soname-exp;$LD $soname-exp --dll -e ___dll_entry@12 -o $lib libtool.o$libobjs$deplibs;$rm libtool.o $soname-base $soname-exp'
|
|
+ old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $soname-def --output-lib $objdir/$libname.a;$rm $soname-def'
|
|
+ ;;
|
|
+
|
|
# FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
|
|
# support. Future versions do this automatically, but an explicit c++rt0.o
|
|
# does not break anything, and helps significantly (at the cost of a little
|
|
*************** case "$host_os" in
|
|
*** 936,941 ****
|
|
--- 963,972 ----
|
|
aix*)
|
|
symcode='[BCDTU]'
|
|
;;
|
|
+ cygwin32*)
|
|
+ sympat='_\([_A-Za-z][_A-Za-z0-9]*\)'
|
|
+ symxfrm='_\1 \1'
|
|
+ ;;
|
|
irix*)
|
|
# Cannot use undefined symbols on IRIX because inlined functions mess us up.
|
|
symcode='[BCDEGRST]'
|
|
*************** if $NM -V 2>&1 | egrep '(GNU|with BFD)'
|
|
*** 950,955 ****
|
|
--- 981,994 ----
|
|
symcode='[ABCDGISTUW]'
|
|
fi
|
|
|
|
+ case "$host_os" in
|
|
+ cygwin32*)
|
|
+ # We do not want undefined symbols on cygwin32. The user must
|
|
+ # arrange to define them via -l arguments.
|
|
+ symcode='[ABCDGISTW]'
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
# Write the raw and C identifiers.
|
|
global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'"
|
|
|
|
*************** amigaos*)
|
|
*** 1123,1128 ****
|
|
--- 1162,1174 ----
|
|
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'
|
|
;;
|
|
|
|
+ cygwin32*)
|
|
+ version_type=windows
|
|
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
|
|
+ dynamic_linker='Win32 ld.exe'
|
|
+ shlibpath_var=PATH
|
|
+ ;;
|
|
+
|
|
freebsd2* | freebsd3*)
|
|
version_type=sunos
|
|
library_names_spec='${libname}${release}.so.$versuffix $libname.so'
|
|
*************** ltecho="$echo"
|
|
*** 1285,1293 ****
|
|
|
|
# Now quote all the things that may contain metacharacters.
|
|
for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \
|
|
! old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \
|
|
! link_static_flag no_builtin_flag export_dynamic_flag_spec \
|
|
! libname_spec library_names_spec soname_spec RANLIB \
|
|
old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
|
|
old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \
|
|
allow_undefined_flag no_undefined_flag \
|
|
--- 1331,1339 ----
|
|
|
|
# Now quote all the things that may contain metacharacters.
|
|
for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \
|
|
! old_LN_S old_DLLTOOL old_AS AR CC LD LN_S NM DLLTOOL AS reload_flag \
|
|
! reload_cmds wl pic_flag link_static_flag no_builtin_flag \
|
|
! export_dynamic_flag_spec libname_spec library_names_spec soname_spec RANLIB \
|
|
old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
|
|
old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \
|
|
allow_undefined_flag no_undefined_flag \
|
|
*************** cat <<EOF > $ofile
|
|
*** 1345,1350 ****
|
|
--- 1391,1397 ----
|
|
#
|
|
# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\
|
|
# LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\
|
|
+ # DLLTOOL="$old_DLLTOOL" AS="$old_AS" \\
|
|
# $0$ltconfig_args
|
|
#
|
|
# Compiler and other test output produced by $progname, useful for
|
|
*************** LN_S="$LN_S"
|
|
*** 1390,1395 ****
|
|
--- 1437,1448 ----
|
|
|
|
# A BSD-compatible nm program.
|
|
NM="$NM"
|
|
+
|
|
+ # Used on cygwin32: DLL creation program.
|
|
+ DLLTOOL="$DLLTOOL"
|
|
+
|
|
+ # Used on cygwin32: assembler.
|
|
+ AS="$AS"
|
|
|
|
# The name of the directory that contains temporary libtool files.
|
|
objdir="$objdir"
|
|
Index: ltmain.in
|
|
===================================================================
|
|
RCS file: /cvs/cvsfiles/devo/libtool/ltmain.in,v
|
|
retrieving revision 1.3
|
|
retrieving revision 1.4
|
|
diff -p -r1.3 -r1.4
|
|
*** ltmain.in 1998/03/20 23:35:33 1.3
|
|
--- ltmain.in 1998/04/17 20:20:14 1.4
|
|
*************** if test -z "$show_help"; then
|
|
*** 967,972 ****
|
|
--- 967,980 ----
|
|
versuffix="$current.$revision"
|
|
;;
|
|
|
|
+ windows)
|
|
+ # Like Linux, but with '-' rather than '.', and with a leading
|
|
+ # '-', since we only want one extension on Windows 95.
|
|
+ version_vars="$version_vars major versuffix"
|
|
+ major=`expr $current - $age`
|
|
+ versuffix="-$major-$age-$revision"
|
|
+ ;;
|
|
+
|
|
*)
|
|
$echo "$modename: unknown library version type \`$version_type'" 1>&2
|
|
echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
|
|
Index: libtool.m4
|
|
===================================================================
|
|
RCS file: /cvs/cvsfiles/devo/libtool/libtool.m4,v
|
|
retrieving revision 1.11
|
|
retrieving revision 1.12
|
|
diff -p -r1.11 -r1.12
|
|
*** libtool.m4 1998/04/13 16:09:14 1.11
|
|
--- libtool.m4 1998/04/13 20:44:46 1.12
|
|
*************** case "$host" in
|
|
*** 70,80 ****
|
|
--- 70,86 ----
|
|
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
|
|
CFLAGS="$CFLAGS -belf"
|
|
;;
|
|
+
|
|
+ *-*-cygwin32*)
|
|
+ AM_SYS_LIBTOOL_CYGWIN32
|
|
+ ;;
|
|
+
|
|
esac
|
|
|
|
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
|
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
|
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
|
+ DLLTOOL="$DLLTOOL" AS="$AS" \
|
|
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \
|
|
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
|
|| AC_MSG_ERROR([libtool configure failed])
|
|
*************** fi])
|
|
*** 255,258 ****
|
|
--- 261,270 ----
|
|
NM="$ac_cv_path_NM"
|
|
AC_MSG_RESULT([$NM])
|
|
AC_SUBST(NM)
|
|
+ ])
|
|
+
|
|
+ # AM_SYS_LIBTOOL_CYGWIN32 - find tools needed on cygwin32
|
|
+ AC_DEFUN(AM_SYS_LIBTOOL_CYGWIN32,
|
|
+ [AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
|
+ AC_CHECK_TOOL(AS, as, false)
|
|
])
|
|
|