public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
@ 2020-03-12  8:06 haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 1/4] add lt-2.4.6 winnt patches for use with parity-2 haubi
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: haubi @ 2020-03-12  8:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: haubi

Hello fellow Gentoo devs!

As some of you may already know, in Prefix we are able to build native
Win32 binaries using the Visual Studio toolchain, nowadays driven by
Prefix on Cygwin as the build environment, using sys-devel/parity to
have a gcc like commandline interface for cl.exe, link.exe and others.

For example, in sys-libs/zlib the Makefile for Linux does work without
modification to create the native Win32 library, even if the library
file name does not match the Win32 library naming scheme.

On the other hand, one would expect libtool to create libraries having
proper Win32 naming scheme.

Fortunately, parity does provide libtool patches already[1], but because
parity itself is not widely recognized yet, they are unlikely to be
accepted upstream right now.  Beyond that, some of the unrelated but
required patches are submitted upstream, but without response so far.

As this native Win32 support is considered highly experimental still, I
would like to apply the libtool patches for parity via elibtoolize only,
without applying them in sys-devel/libtool itself yet.

WDYT?

[1] https://github.com/mduft/parity/tree/master/parity.patches

Thanks!
/haubi/



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [gentoo-dev] [PATCH 1/4] add lt-2.4.6 winnt patches for use with parity-2
  2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
@ 2020-03-12  8:06 ` haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 2/4] add lt-2.4.6.42-b88ce " haubi
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: haubi @ 2020-03-12  8:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: haubi

From: Michael Haubenwallner <haubi@gentoo.org>

If a package does not have libtool-2.4.6 there is no guarantee things
will work, and the package should use eautoreconf instead.

Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
---
 eltpatch.in                             |   3 +-
 patches/winnt-conf/2.4.6-cmd-max-len    |  15 +
 patches/winnt-conf/2.4.6-deplibs-method |  15 +
 patches/winnt-conf/2.4.6-dlload         |  15 +
 patches/winnt-conf/2.4.6-dlopen-deplibs |  16 +
 patches/winnt-conf/2.4.6-dynlink        |  46 ++
 patches/winnt-conf/2.4.6-dynlink-c      |  46 ++
 patches/winnt-conf/2.4.6-global-syms    | 129 +++++
 patches/winnt-conf/2.4.6-pathconv       |  21 +
 patches/winnt-conf/2.4.6-pic-c          |  19 +
 patches/winnt-conf/2.4.6-pic-cxx        |  18 +
 patches/winnt-conf/2.4.6-setup          |  23 +
 patches/winnt-conf/2.4.6-shlibs         |  15 +
 patches/winnt-conf/2.4.6-shlibs-c       |  20 +
 patches/winnt-conf/2.4.6-shlibs-cxx     |  33 ++
 patches/winnt-conf/2.4.6-strip          |  30 ++
 patches/winnt-ltmain/2.4.6              | 683 ++++++++++++++++++++++++
 17 files changed, 1146 insertions(+), 1 deletion(-)
 create mode 100644 patches/winnt-conf/2.4.6-cmd-max-len
 create mode 100644 patches/winnt-conf/2.4.6-deplibs-method
 create mode 100644 patches/winnt-conf/2.4.6-dlload
 create mode 100644 patches/winnt-conf/2.4.6-dlopen-deplibs
 create mode 100644 patches/winnt-conf/2.4.6-dynlink
 create mode 100644 patches/winnt-conf/2.4.6-dynlink-c
 create mode 100644 patches/winnt-conf/2.4.6-global-syms
 create mode 100644 patches/winnt-conf/2.4.6-pathconv
 create mode 100644 patches/winnt-conf/2.4.6-pic-c
 create mode 100644 patches/winnt-conf/2.4.6-pic-cxx
 create mode 100644 patches/winnt-conf/2.4.6-setup
 create mode 100644 patches/winnt-conf/2.4.6-shlibs
 create mode 100644 patches/winnt-conf/2.4.6-shlibs-c
 create mode 100644 patches/winnt-conf/2.4.6-shlibs-cxx
 create mode 100644 patches/winnt-conf/2.4.6-strip
 create mode 100644 patches/winnt-ltmain/2.4.6

diff --git a/eltpatch.in b/eltpatch.in
index d8c847b..6b69216 100644
--- a/eltpatch.in
+++ b/eltpatch.in
@@ -179,6 +179,7 @@ elibtoolize() {
 		*-hpux*)    elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" ;;
 		*-irix*)    elt_patches+=" irix-ltmain" ;;
 		*-mint*)    elt_patches+=" mint-conf" ;;
+		*-winnt*)   elt_patches+=" winnt-conf winnt-ltmain" ;;
 	esac
 
 	if ${LD} --version 2>&1 | grep -qs 'GNU gold'; then
@@ -371,7 +372,7 @@ elibtoolize() {
 						ret=$?
 					fi
 					;;
-				aixrtl|hpux-conf)
+				aixrtl|hpux-conf|winnt-conf)
 					ret=1
 					local subret=0
 					# apply multiple patches as often as they match
diff --git a/patches/winnt-conf/2.4.6-cmd-max-len b/patches/winnt-conf/2.4.6-cmd-max-len
new file mode 100644
index 0000000..0b7b290
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-cmd-max-len
@@ -0,0 +1,15 @@
+--- configure
++++ configure
+@@ -5915,11 +5915,11 @@
+     # And add a safety zone
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+ 
+-  interix*)
++  interix* | winnt*)
+     # We know the value 262144 and hardcode it with a safety zone (like BSD)
+     lt_cv_sys_max_cmd_len=196608
+     ;;
+ 
+   os2*)
diff --git a/patches/winnt-conf/2.4.6-deplibs-method b/patches/winnt-conf/2.4.6-deplibs-method
new file mode 100644
index 0000000..92b2ac9
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-deplibs-method
@@ -0,0 +1,15 @@
+--- configure
++++ configure
+@@ -6285,11 +6285,11 @@
+   # func_win32_libid is a shell function defined in ltmain.sh
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+   ;;
+ 
+-mingw* | pw32*)
++mingw* | pw32* | winnt*)
+   # Base MSYS/MinGW do not provide the 'file' command needed by
+   # func_win32_libid shell function, so use a weaker test based on 'objdump',
+   # unless we find 'file', for example because we are cross-compiling.
+   if ( file / ) >/dev/null 2>&1; then
+     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
diff --git a/patches/winnt-conf/2.4.6-dlload b/patches/winnt-conf/2.4.6-dlload
new file mode 100644
index 0000000..ea9b804
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-dlload
@@ -0,0 +1,15 @@
+--- configure
++++ configure
+@@ -13596,11 +13716,11 @@
+ 
+   ;;
+ beos*)
+   LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+   ;;
+-cygwin* | mingw* | pw32*)
++cygwin* | mingw* | pw32* | winnt*)
+   ac_fn_c_check_decl "$LINENO" "cygwin_conv_path" "ac_cv_have_decl_cygwin_conv_path" "#include <sys/cygwin.h>
+ "
+ if test "x$ac_cv_have_decl_cygwin_conv_path" = xyes; then :
+   ac_have_decl=1
+ else
diff --git a/patches/winnt-conf/2.4.6-dlopen-deplibs b/patches/winnt-conf/2.4.6-dlopen-deplibs
new file mode 100644
index 0000000..c0b6404
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-dlopen-deplibs
@@ -0,0 +1,16 @@
+--- configure
++++ configure
+@@ -13935,10 +14055,13 @@
+     lt_cv_sys_dlopen_deplibs=yes
+     ;;
+   sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+     libltdl_cv_sys_dlopen_deplibs=yes
+     ;;
++  winnt*)
++    lt_cv_sys_dlopen_deplibs=yes
++    ;;
+   esac
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_dlopen_deplibs" >&5
+ $as_echo "$lt_cv_sys_dlopen_deplibs" >&6; }
diff --git a/patches/winnt-conf/2.4.6-dynlink b/patches/winnt-conf/2.4.6-dynlink
new file mode 100644
index 0000000..c786ec3
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-dynlink
@@ -0,0 +1,46 @@
+--- configure
++++ configure
+@@ -11728,10 +11769,43 @@
+       $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+   esac
+   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+ else
+   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
++  case $host_os in
++  winnt*)
++    sys_lib_search_path_spec=`$CC -print-search-dirs |
++      $AWK '/^libraries:/{sub(/^libraries: *=?/,""); print}'`
++    # The space separated shell string breaks on characters like blanks and
++    # parentheses often found in Windows directory names.  Fortunately, the
++    # 8.3 DOS format does not use these characters, but that might be disabled.
++    # First, convert to 8.3 DOS format to remove invalid characters eventually.
++    sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec"`
++    # Second, converting back to unix format does preserve 8.3 path parts.
++    sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec"`
++    # Finally, convert to the space separated list, but filter out path names
++    # with invalid characters: They were created while 8.3 DOS file name
++    # creation was disabled for that partition.
++    lt_search_path_spec=$sys_lib_search_path_spec
++    sys_lib_search_path_spec=
++    lt_save_ifs=$IFS;
++    IFS=$PATH_SEPARATOR
++    for lt_path in $lt_search_path_spec
++    do
++      IFS=$lt_save_ifs
++      case $lt_path in
++      *[' ()']*)
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: missing 8.3 path name to find libs in $lt_path" >&5
++$as_echo "$as_me: WARNING: missing 8.3 path name to find libs in $lt_path" >&2;}
++	continue
++	;;
++      esac
++      sys_lib_search_path_spec="$sys_lib_search_path_spec${sys_lib_search_path_spec:+ }$lt_path"
++    done
++    IFS=$lt_save_ifs
++    ;;
++  esac
+ fi
+ library_names_spec=
+ libname_spec='lib$name'
+ soname_spec=
+ shrext_cmds=.so
diff --git a/patches/winnt-conf/2.4.6-dynlink-c b/patches/winnt-conf/2.4.6-dynlink-c
new file mode 100644
index 0000000..b80f2c7
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-dynlink-c
@@ -0,0 +1,46 @@
+--- configure
++++ configure
+@@ -11890,10 +11967,43 @@
+   # the default ld.so.conf also contains /usr/contrib/lib and
+   # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+   # libtool to hard-code these into programs
+   ;;
+ 
++winnt*)
++  # The real dll is NAME.dll,
++  # the import lib is NAME.lib, but
++  # the static lib is libNAME.lib, which requires libname_spec=lib$name.
++  # Upon /path/to/*.lib, we use deplibs_check_method=file_magic to
++  # accept NAME.lib as import lib, but reject static libNAME.lib.
++  libext=lib
++  version_type=windows
++  need_version=no
++  need_lib_prefix=no
++  shrext_cmds=.dll
++  library_names_spec='${libname#lib}.$libext'
++  soname_spec='${libname#lib}$release$versuffix$shared_ext'
++  sys_lib_dlsearch_path_spec=
++  shlibpath_var=PATH
++  shlibpath_overrides_runpath=yes
++  # DLL is installed to $(libdir)/../bin by postinstall_cmds
++  postinstall_cmds='base_file=`basename \$file`~
++    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
++    dldir=$destdir/`dirname \$dlpath`~
++    test -d \$dldir || mkdir -p \$dldir~
++    $install_prog $dir/$dlname \$dldir/$dlname~
++    chmod a+x \$dldir/$dlname~
++    if test -f $dir/${dlname%.dll}.pdb; then $install_prog $dir/${dlname%.dll}.pdb \$dldir/${dlname%.dll}.pdb; fi~
++    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
++      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
++    fi'
++  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++    dlpath=$dir/\$dldll~
++    func_append rmfiles " \$dlpath \${dlpath%.dll}.pdb"'
++  dynamic_linker='Win32 link.exe with Parity extensions'
++  ;;
++
+ cygwin* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+   need_lib_prefix=no
diff --git a/patches/winnt-conf/2.4.6-global-syms b/patches/winnt-conf/2.4.6-global-syms
new file mode 100644
index 0000000..f84e6ab
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-global-syms
@@ -0,0 +1,129 @@
+--- configure
++++ configure
+@@ -7087,11 +7087,11 @@
+ # Define system-specific variables.
+ case $host_os in
+ aix*)
+   symcode='[BCDT]'
+   ;;
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | mingw* | pw32* | cegcc* | winnt*)
+   symcode='[ABCDGISTW]'
+   ;;
+ hpux*)
+   if test ia64 = "$host_cpu"; then
+     symcode='[ABCDEGRST]'
+@@ -7126,46 +7126,56 @@
+   symcode='[ABCDGIRSTW]' ;;
+ esac
+ 
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+   # Gets list of data symbols to import.
+-  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
++  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/\1/p'"
+   # Adjust the below global symbol transforms to fixup imported variables.
+-  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+-  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
++  lt_cdecl_hook=" -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern __declspec(dllimport) char \1;/p'"
++  lt_c_name_hook=" -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'"
+   lt_c_name_lib_hook="\
+-  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+-  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
++  -e 's/^I .* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'\
++  -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) 0},/p'"
+ else
+   # Disable hooks by default.
+   lt_cv_sys_global_symbol_to_import=
+   lt_cdecl_hook=
+   lt_c_name_hook=
+   lt_c_name_lib_hook=
++  case $host_os in
++  winnt*)
++    lt_cv_sys_global_symbol_to_import="sed -n -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/\1/p'"
++    lt_cdecl_hook=" -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern __declspec(dllimport) char \1;/p'"
++    lt_c_name_hook=" -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'"
++    lt_c_name_lib_hook="\
++    -e 's/^D [^ ]* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'\
++    -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) 0},/p'"
++    ;;
++  esac
+ fi
+ 
+ # Transform an extracted symbol line into a proper C declaration.
+ # Some systems (esp. on ia64) link data and code symbols differently,
+ # so use this general approach.
+ lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+ $lt_cdecl_hook\
+-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
++" -e 's/^T .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern int \1();/p'"\
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern char \1;/p'"
+ 
+ # Transform an extracted symbol line into symbol name and symbol address
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+ $lt_c_name_hook\
+ " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) \&\1},/p'"
+ 
+ # Transform an extracted symbol line into symbol name with lib prefix and
+ # symbol address.
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+ $lt_c_name_lib_hook\
+ " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+-" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
++" -e 's/^$symcode$symcode* .* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) \&\1},/p'"\
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+ 
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+ case $build_os in
+ mingw*)
+@@ -7175,35 +7185,43 @@
+ 
+ # Try without a prefix underscore, then with it.
+ for ac_symprfx in "" "_"; do
+ 
+   # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+-  symxfrm="\\1 $ac_symprfx\\2 \\2"
++  # In Windows import libraries, symbols may be prefixed with __imp_, as well
++  # as __nm_ when using GNU ld.  The leading underscore (in 32bit) comes after
++  # the __imp_ and __nm_ prefix, so make sure to strip the underscore from the
++  # symbol name instead of the __imp_ or __nm_ prefix, leaving these prefixes
++  # intact in the symbol pipe output.
++  symxfrm="\\1 \\2$ac_symprfx\\3 \\2\\3"
+ 
+   # Write the raw and C identifiers.
+   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+     # Fake it for dumpbin and say T for any non-static function,
+     # D for any global variable and I for any imported variable.
+     # Also find C++ and __fastcall symbols from MSVC++,
+-    # which start with @ or ?.
++    # which start with @ or ?.  And Cygwin gawk-4.1.4-3 and newer
++    # treats input as binary, have to drop carriage return first.
+     lt_cv_sys_global_symbol_pipe="$AWK '"\
++"     {sub(/\\r\$/,\"\")};"\
+ "     {last_section=section; section=\$ 3};"\
+ "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+ "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+ "     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+ "     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+ "     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+ "     \$ 0!~/External *\|/{next};"\
+ "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+ "     {if(hide[section]) next};"\
+ "     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
++"     \$ 0~/ [0-9a-fA-F]*[1-9a-fA-F][0-9a-fA-F]* UNDEF /{f=\"C\"};"\
+ "     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+ "     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+ "     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+ "     ' prfx=^$ac_symprfx"
+   else
+-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
++    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*\(__imp_\|__nm_\)\{0,1\}$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+   fi
+   lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ 
+   # Check to see that the pipe works correctly.
+   pipe_works=no
diff --git a/patches/winnt-conf/2.4.6-pathconv b/patches/winnt-conf/2.4.6-pathconv
new file mode 100644
index 0000000..444d4ad
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-pathconv
@@ -0,0 +1,21 @@
+--- configure
++++ configure
+@@ -6040,16 +6040,16 @@
+ $as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+ if ${lt_cv_to_host_file_cmd+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   case $host in
+-  *-*-mingw* )
++  *-*-mingw* | *-*-winnt* )
+     case $build in
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-winnt* )
+         lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+         ;;
+       * ) # otherwise, assume *nix
+         lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+         ;;
diff --git a/patches/winnt-conf/2.4.6-pic-c b/patches/winnt-conf/2.4.6-pic-c
new file mode 100644
index 0000000..2f15c5b
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-pic-c
@@ -0,0 +1,19 @@
+--- configure
++++ configure
+@@ -9709,10 +9737,16 @@
+ 	lt_prog_compiler_static='$wl-static'
+ 	;;
+       esac
+       ;;
+ 
++    winnt*)
++      lt_prog_compiler_pic='-DDLL_EXPORT'
++      lt_prog_compiler_wl='-Wl,'
++      lt_prog_compiler_static='-static'
++      ;;
++
+     hpux9* | hpux10* | hpux11*)
+       lt_prog_compiler_wl='-Wl,'
+       # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+       # not for PA HP-UX.
+       case $host_cpu in
diff --git a/patches/winnt-conf/2.4.6-pic-cxx b/patches/winnt-conf/2.4.6-pic-cxx
new file mode 100644
index 0000000..b99f526
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-pic-cxx
@@ -0,0 +1,18 @@
+--- configure
++++ configure
+@@ -16371,10 +16500,15 @@
+ 	  # Green Hills C++ Compiler
+ 	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ 	  ;;
+ 	esac
+ 	;;
++      winnt*)
++	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
++	lt_prog_compiler_wl_CXX='-Wl,'
++	lt_prog_compiler_static_CXX='-static'
++	;;
+       mingw* | cygwin* | os2* | pw32* | cegcc*)
+ 	# This hack is so that the source file can tell whether it is being
+ 	# built for inclusion in a dll (and should export symbols for example).
+ 	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ 	;;
diff --git a/patches/winnt-conf/2.4.6-setup b/patches/winnt-conf/2.4.6-setup
new file mode 100644
index 0000000..50c1939
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-setup
@@ -0,0 +1,23 @@
+--- configure
++++ configure
+@@ -9208,10 +9226,20 @@
+ 
+ 
+ 
+ 
+ 
++# On winnt, the Microsoft compiler (or compatible) is used behind the scenes.
++# While wrappers around it may be capable of resolving symbolic links, the
++# compiler (cl.exe) chokes on header files which are symlinked, as the
++# wrapper cannot know about them.
++# Everybody would be happy with ln -s, except libtoolize without --copy.
++# There ln -s breaks the testsuite, since it tries to compile symlinked
++# source, which is not supported by the compiler.
++case $LN_S,$host_os in
++,winnt*|"ln -s",winnt*) LN_S="cp -p" ;;
++esac
+ test -z "$LN_S" && LN_S="ln -s"
+ 
+ 
+ 
+ 
diff --git a/patches/winnt-conf/2.4.6-shlibs b/patches/winnt-conf/2.4.6-shlibs
new file mode 100644
index 0000000..1acd9d8
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-shlibs
@@ -0,0 +1,15 @@
+--- configure
++++ configure
+@@ -10200,11 +10234,11 @@
+   # preloaded symbol tables.
+   # Exclude shared library initialization/finalization symbols.
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | mingw* | pw32* | cegcc* | winnt*)
+     # FIXME: the MSVC++ port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++.
+     if test yes != "$GCC"; then
+       with_gnu_ld=no
diff --git a/patches/winnt-conf/2.4.6-shlibs-c b/patches/winnt-conf/2.4.6-shlibs-c
new file mode 100644
index 0000000..cba9709
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-shlibs-c
@@ -0,0 +1,20 @@
+--- configure
++++ configure
+@@ -10855,10 +10889,17 @@
+ 
+     bsdi[45]*)
+       export_dynamic_flag_spec=-rdynamic
+       ;;
+ 
++    winnt*)
++      exclude_expsyms='__NULL_IMPORT_DESCRIPTOR|__IMPORT_DESCRIPTOR_.*'
++      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags -o $output_objdir/$soname -Wl,--out-implib,$lib'
++      archive_cmds_need_lc=no
++      allow_undefined_flag=unsupported
++      ;;
++
+     cygwin* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+       # no search path for DLLs.
diff --git a/patches/winnt-conf/2.4.6-shlibs-cxx b/patches/winnt-conf/2.4.6-shlibs-cxx
new file mode 100644
index 0000000..fde2b39
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-shlibs-cxx
@@ -0,0 +1,33 @@
+--- configure
++++ configure
+@@ -15286,10 +15409,16 @@
+ 	  ld_shlibs_CXX=no
+ 	  ;;
+         esac
+         ;;
+ 
++      winnt*)
++	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags -o $output_objdir/$soname -Wl,--out-implib,$lib'
++	archive_cmds_need_lc_CXX=no
++	allow_undefined_flag_CXX=unsupported
++	;;
++
+       cygwin* | mingw* | pw32* | cegcc*)
+ 	case $GXX,$cc_basename in
+ 	,cl* | no,cl*)
+ 	  # Native MSVC
+ 	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -16860,10 +16994,13 @@
+     fi
+     ;;
+   pw32*)
+     export_symbols_cmds_CXX=$ltdll_cmds
+     ;;
++  winnt*)
++    exclude_expsyms_CXX='__NULL_IMPORT_DESCRIPTOR|__IMPORT_DESCRIPTOR_.*'
++    ;;
+   cygwin* | mingw* | cegcc*)
+     case $cc_basename in
+     cl*)
+       exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       ;;
diff --git a/patches/winnt-conf/2.4.6-strip b/patches/winnt-conf/2.4.6-strip
new file mode 100644
index 0000000..7cb0eec
--- /dev/null
+++ b/patches/winnt-conf/2.4.6-strip
@@ -0,0 +1,30 @@
+--- configure
++++ configure
+@@ -13171,14 +13281,24 @@
+ striplib=
+ old_striplib=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+ $as_echo_n "checking whether stripping libraries is possible... " >&6; }
+ if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++  case $host_os in
++  winnt*)
++    # Stripping is not save here, since POSIXish host utils may
++    # be detected, but we operate on native windows libraries.
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++    ;;
++  *)
++    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
++    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
++    ;;
++  esac
+ else
+ # FIXME - insert some real tests, host_os isn't really good enough
+   case $host_os in
+   darwin*)
+     if test -n "$STRIP"; then
diff --git a/patches/winnt-ltmain/2.4.6 b/patches/winnt-ltmain/2.4.6
new file mode 100644
index 0000000..ddb077c
--- /dev/null
+++ b/patches/winnt-ltmain/2.4.6
@@ -0,0 +1,683 @@
+--- ltmain.sh
++++ ltmain.sh
+@@ -2416,11 +2416,11 @@
+     test : = "$debug_cmd" || func_append preserve_args " --debug"
+ 
+     case $host in
+       # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+       # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+-      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
++      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2* | *winnt*)
+         # don't eliminate duplications in $postdeps and $predeps
+         opt_duplicate_compiler_generated_deps=:
+         ;;
+       *)
+         opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+@@ -3437,11 +3437,11 @@
+       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*)
++    cygwin* | mingw* | pw32* | os2* | cegcc* | winnt*)
+       pic_mode=default
+       ;;
+     esac
+     if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+       # non-PIC code in shared libraries is not supported
+@@ -4311,11 +4311,11 @@
+ 	  # Install the shared library and build the symlinks.
+ 	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 	      'exit $?'
+ 	  tstripme=$stripme
+ 	  case $host_os in
+-	  cygwin* | mingw* | pw32* | cegcc*)
++	  cygwin* | mingw* | pw32* | cegcc* | winnt*)
+ 	    case $realname in
+ 	    *.dll.a)
+ 	      tstripme=
+ 	      ;;
+ 	    esac
+@@ -4424,11 +4424,11 @@
+ 	    ;;
+ 	esac
+ 
+ 	# Do a test to see if this is really a libtool program.
+ 	case $host in
+-	*cygwin* | *mingw*)
++	*cygwin* | *mingw* | *winnt*)
+ 	    if func_ltwrapper_executable_p "$file"; then
+ 	      func_ltwrapper_scriptname "$file"
+ 	      wrapper=$func_ltwrapper_scriptname_result
+ 	    else
+ 	      func_stripname '' '.exe' "$file"
+@@ -4652,11 +4652,11 @@
+ 	    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* )
++	      *cygwin* | *mingw* | *cegcc*  | winnt*)
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ 	        ;;
+ 	      esac
+ 	    }
+@@ -4664,11 +4664,11 @@
+ 	    $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* )
++	        *cygwin* | *mingw* | *cegcc*  | winnt*)
+ 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ 	          ;;
+ 	      esac
+ 	    }
+@@ -4678,11 +4678,11 @@
+ 	for dlprefile in $dlprefiles; do
+ 	  func_verbose "extracting global C symbols from '$dlprefile'"
+ 	  func_basename "$dlprefile"
+ 	  name=$func_basename_result
+           case $host in
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *mingw* | *cegcc* | *winnt* )
+ 	      # if an import library, we need to obtain dlname
+ 	      if func_win32_import_lib_p "$dlprefile"; then
+ 	        func_tr_sh "$dlprefile"
+ 	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ 	        dlprefile_dlbasename=
+@@ -4705,11 +4705,11 @@
+ 	            func_warning "Could not compute DLL name from $name"
+ 	            eval '$ECHO ": $name " >> "$nlist"'
+ 	          fi
+ 	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ 	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+-	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
++	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/ __nm_/ /' >> '$nlist'"
+ 	        }
+ 	      else # not an import lib
+ 	        $opt_dry_run || {
+ 	          eval '$ECHO ": $name " >> "$nlist"'
+ 	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+@@ -4853,11 +4853,11 @@
+ 	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+ 
+ 	# Transform the symbol file into the correct name.
+ 	symfileobj=$output_objdir/${my_outputname}S.$objext
+ 	case $host in
+-	*cygwin* | *mingw* | *cegcc* )
++	*cygwin* | *mingw* | *cegcc*  | winnt*)
+ 	  if test -f "$output_objdir/$my_outputname.def"; then
+ 	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 	  else
+ 	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+@@ -4921,18 +4921,18 @@
+ func_win32_libid ()
+ {
+   $debug_cmd
+ 
+   win32_libid_type=unknown
+-  win32_fileres=`file -L $1 2>/dev/null`
++  win32_fileres=`file -L "$1" 2>/dev/null`
+   case $win32_fileres in
+   *ar\ archive\ import\ library*) # definitely import
+     win32_libid_type="x86 archive import"
+     ;;
+   *ar\ archive*) # could be an import, or static
+     # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
++    if eval $OBJDUMP -f \"\$1\" | $SED -e '10q' 2>/dev/null |
+        $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+       case $nm_interface in
+       "MS dumpbin")
+ 	if func_cygming_ms_implib_p "$1" ||
+ 	   func_cygming_gnu_implib_p "$1"
+@@ -4944,16 +4944,14 @@
+ 	;;
+       *)
+ 	func_to_tool_file "$1" func_convert_file_msys_to_w32
+ 	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ 	  $SED -n -e '
+-	    1,100{
+-		/ I /{
+-		    s|.*|import|
+-		    p
+-		    q
+-		}
++	    / I /{
++		s|.*|import|
++		p
++		q
+ 	    }'`
+ 	;;
+       esac
+       case $win32_nmres in
+       import*)  win32_libid_type="x86 archive import";;
+@@ -5328,11 +5326,11 @@
+ func_exec_program_core ()
+ {
+ "
+   case $host in
+   # Backslashes separate directories on plain windows
+-  *-*-mingw | *-*-os2* | *-cegcc*)
++  *-*-mingw | *-*-os2* | *-cegcc* | *-*-winnt*)
+     $ECHO "\
+       if test -n \"\$lt_option_debug\"; then
+         \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+         func_lt_dump_args \${1+\"\$@\"} 1>&2
+       fi
+@@ -5751,11 +5749,11 @@
+     {
+       if (STREQ (argv[i], dumpscript_opt))
+ 	{
+ EOF
+ 	    case $host in
+-	      *mingw* | *cygwin* )
++	      *mingw* | *cygwin* | *winnt*)
+ 		# make stdout use "unix" line endings
+ 		echo "          setmode(1,_O_BINARY);"
+ 		;;
+ 	      esac
+ 
+@@ -5854,11 +5852,11 @@
+   XFREE (tmp_pathspec);
+   tmp_pathspec = NULL;
+ EOF
+ 
+ 	    case $host_os in
+-	      mingw*)
++	      mingw* | winnt*)
+ 	    cat <<"EOF"
+   {
+     char* p;
+     while ((p = strchr (newargz[0], '\\')) != NULL)
+       {
+@@ -5896,11 +5894,11 @@
+     }
+ 
+ EOF
+ 
+ 	    case $host_os in
+-	      mingw*)
++	      mingw* | winnt*)
+ 		cat <<"EOF"
+   /* execv doesn't actually work on mingw as expected on unix */
+   newargz = prepare_spawn (newargz);
+   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+   if (rval == -1)
+@@ -6315,11 +6313,11 @@
+     }
+ }
+ 
+ EOF
+ 	    case $host_os in
+-	      mingw*)
++	      mingw* | winnt*)
+ 		cat <<"EOF"
+ 
+ /* Prepares an argument vector before calling spawn().
+    Note that spawn() does not by itself call the command interpreter
+      (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+@@ -6490,11 +6488,11 @@
+ func_mode_link ()
+ {
+     $debug_cmd
+ 
+     case $host in
+-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc* | *-*-winnt*)
+       # It is impossible to link a dll without this setting, and
+       # we shouldn't force the makefile maintainer to figure out
+       # what system we are compiling for in order to pass an extra
+       # flag for every libtool invocation.
+       # allow_undefined=no
+@@ -6605,10 +6603,13 @@
+     done
+ 
+     # See if our shared archives depend on static archives.
+     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+ 
++    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
++    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
++
+     # Go through the arguments, transforming them on the way.
+     while test "$#" -gt 0; do
+       arg=$1
+       shift
+       func_quote_for_eval "$arg"
+@@ -6989,11 +6990,11 @@
+ 	  esac
+ 	  func_append lib_search_path " $dir"
+ 	  ;;
+ 	esac
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc* | *-*-winnt*)
+ 	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$dir:"*) ;;
+ 	  ::) dllsearchpath=$dir;;
+ 	  *) func_append dllsearchpath ":$dir";;
+@@ -7009,11 +7010,11 @@
+ 	;;
+ 
+       -l*)
+ 	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku* | *-*-winnt*)
+ 	    # 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)
+@@ -7092,11 +7093,11 @@
+ 	continue
+ 	;;
+ 
+       -no-install)
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc* | *-*-winnt*)
+ 	  # 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
+@@ -7396,13 +7397,64 @@
+ 	  fi
+ 	fi
+ 	;;
+ 
+       *.$libext)
+-	# An archive.
+-	func_append deplibs " $arg"
+-	func_append old_deplibs " $arg"
++	# With MSVC cl.exe, even dynamic deplibs are added as NAME.lib,
++	# so we need to distinguish based on their file type whether we
++	# have to treat them as static archive or dynamic import lib.
++	found=
++	case $linkmode,$arg in
++	*,*[\\/]*)
++	  searchdirs=
++	  if test -f "$arg"; then
++	    found=$arg
++	  fi
++	  ;;
++	lib,*)
++	  searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
++	  ;;
++	*)
++	  searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
++	  ;;
++	esac
++	for searchdir in $searchdirs; do
++	  if test -f "$searchdir/$arg"; then
++	    found=$searchdir/$arg
++	    break
++	  fi
++	done
++	case $found,$deplibs_check_method in
++	,*) ;; # nothing found
++	*,file_magic*)
++	  file_magic_regex=`set dummy $deplibs_check_method; shift
++	    expr "$deplibs_check_method" : "\$1 \(.*\)"`
++	  while test -h "$found" 2>/dev/null; do
++	    # Follow soft links.
++	    if ls -lLd "$found" 2>/dev/null |
++	       $GREP " -> " >/dev/null; then
++	      break # found a soft link cycle
++	    fi
++	    foundlink=`ls -ld "$found" | $SED 's/.* -> //'`
++	    case $foundlink in
++	    [\\/]* | [A-Za-z]:[\\/]*) found=$foundlink;;
++	    *) found=`$ECHO "$found" | $SED 's|[^/]*$||'`"$foundlink";;
++	    esac
++	  done
++	  if eval $file_magic_cmd \"\$found\" |
++	     $SED -e 10q |
++	     $EGREP "$file_magic_regex" > /dev/null; then
++	    found=implib
++	  fi
++	  ;;
++	esac
++	if test implib = "$found"; then
++	  func_append deplibs " $arg"
++	else
++	  func_append deplibs " $arg"
++	  func_append old_deplibs " $arg"
++	fi
+ 	continue
+ 	;;
+ 
+       *.la)
+ 	# A libtool-controlled library.
+@@ -7457,12 +7509,10 @@
+       # get the directories listed in $shlibpath_var
+       eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+     else
+       shlib_search_path=
+     fi
+-    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+ 
+     # Definition is injected by LT_CONFIG during libtool generation.
+     func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+ 
+     func_dirname "$output" "/" ""
+@@ -7625,21 +7675,36 @@
+ 	    func_warning "'-l' is ignored for archives/objects"
+ 	    continue
+ 	  fi
+ 	  func_stripname '-l' '' "$deplib"
+ 	  name=$func_stripname_result
++	  release_save=$release
++	  major_save=$major
++	  versuffix_save=$versuffix
++	  module_save=$module
++	  release=
++	  major=
++	  versuffix=
++	  module=no
++	  eval shared_ext=\"$shrext_cmds\"
++	  eval libname=\"$libname_spec\"
++	  eval search_names=\"lib$name.la $library_names_spec lib$name$shared_ext lib$name.so $libname.$libext lib$name.$libext lib$name.a\"
++	  release=$release_save
++	  major=$major_save
++	  versuffix=$versuffix_save
++	  module=$module_save
+ 	  if test lib = "$linkmode"; then
+ 	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ 	  else
+ 	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ 	  fi
+ 	  for searchdir in $searchdirs; do
+-	    for search_ext in .la $std_shrext .so .a; do
++	    for search_name in $search_names; do
+ 	      # Search the libtool library
+-	      lib=$searchdir/lib$name$search_ext
++	      lib=$searchdir/$search_name
+ 	      if test -f "$lib"; then
+-		if test .la = "$search_ext"; then
++		if test "lib$name.la" = "$search_name"; then
+ 		  found=:
+ 		else
+ 		  found=false
+ 		fi
+ 		break 2
+@@ -7765,38 +7830,82 @@
+ 	    # Linking convenience modules into shared libraries is allowed,
+ 	    # but linking other static libraries is non-portable.
+ 	    case " $dlpreconveniencelibs " in
+ 	    *" $deplib "*) ;;
+ 	    *)
+-	      valid_a_lib=false
++	      valid_a_lib=no
+ 	      case $deplibs_check_method in
+ 		match_pattern*)
+ 		  set dummy $deplibs_check_method; shift
+ 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ 		    | $EGREP "$match_pattern_regex" > /dev/null; then
+-		    valid_a_lib=:
++		    valid_a_lib=warn
+ 		  fi
+ 		;;
+ 		pass_all)
+-		  valid_a_lib=:
++		  valid_a_lib=warn
++		;;
++		file_magic*)
++		  # Check for import lib having .$libext.
++		  potlib=
++		  case $deplib in
++		    */* | *\\*)
++		      potlib=$deplib
++		      ;;
++		    *)
++		      searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
++		      for searchdir in $searchdirs; do
++		        test -e "$searchdir/$deplib" || continue
++			potlib="$searchdir/$deplib"
++			break
++		      done
++		    ;;
++		  esac
++		  while test -h "$potlib" 2>/dev/null; do
++		    # Follow soft links.
++		    if ls -lLd "$potlib" 2>/dev/null |
++		       $GREP " -> " >/dev/null; then
++		      break # found a soft link cycle
++		    fi
++		    potliblink=`ls -ld "$potlib" | $SED 's/.* -> //'`
++		    case $potliblink in
++		    [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
++		    *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
++		    esac
++		  done
++		  set dummy $deplibs_check_method; shift
++		  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
++		  if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
++		     $SED -e 10q |
++		     $EGREP "$file_magic_regex" > /dev/null; then
++		    valid_a_lib=yes
++		  fi
+ 		;;
+ 	      esac
+-	      if $valid_a_lib; then
++	      case $valid_a_lib in
++	      yes)
++		# handle like a shared lib with -lNAME
++		deplibs="$deplib $deplibs"
++		newdependency_libs="$deplib $newdependency_libs"
++		;;
++	      warn)
+ 		echo
+ 		$ECHO "*** Warning: Linking the shared library $output against the"
+ 		$ECHO "*** static library $deplib is not portable!"
+ 		deplibs="$deplib $deplibs"
+-	      else
++	        ;;
++	      *)
+ 		echo
+ 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ 		echo "*** I have the capability to make that library automatically link in when"
+ 		echo "*** you link to this library.  But I can only do this if you have a"
+ 		echo "*** shared version of the library, which you do not appear to have"
+ 		echo "*** because the file extensions .$libext of this argument makes me believe"
+ 		echo "*** that it is just a static archive that I should not use here."
+-	      fi
++		;;
++	      esac
+ 	      ;;
+ 	    esac
+ 	    continue
+ 	    ;;
+ 	  prog)
+@@ -7986,11 +8095,11 @@
+ 	  if test -z "$libdir" && test prog = "$linkmode"; then
+ 	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ 	  fi
+ 	  case $host in
+ 	    # special handling for platforms with PE-DLLs.
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *mingw* | *cegcc* | *winnt* )
+ 	      # Linker will automatically link against shared library if both
+ 	      # static and shared are present.  Therefore, ensure we extract
+ 	      # symbols from the import library if a shared library is present
+ 	      # (otherwise, the dlopen module name will be incorrect).  We do
+ 	      # this by putting the import library name into $newdlprefiles.
+@@ -8130,11 +8239,11 @@
+ 	  use_static_libs=no
+ 	fi
+ 	if test -n "$library_names" &&
+ 	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ 	  case $host in
+-	  *cygwin* | *mingw* | *cegcc* | *os2*)
++	  *cygwin* | *mingw* | *cegcc* | *os2* | *winnt*)
+ 	      # No point in relinking DLLs because paths are not encoded
+ 	      func_append notinst_deplibs " $lib"
+ 	      need_relink=no
+ 	    ;;
+ 	  *)
+@@ -8200,11 +8309,11 @@
+ 	    if test -n "$dlname"; then
+ 	      soname=$dlname
+ 	    elif test -n "$soname_spec"; then
+ 	      # bleh windows
+ 	      case $host in
+-	      *cygwin* | mingw* | *cegcc* | *os2*)
++	      *cygwin* | mingw* | *cegcc* | *os2* | winnt*)
+ 	        func_arith $current - $age
+ 		major=$func_arith_result
+ 		versuffix=-$major
+ 		;;
+ 	      esac
+@@ -9110,11 +9219,11 @@
+       done
+ 
+       if test yes = "$build_libtool_libs"; then
+ 	if test -n "$rpath"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku* | *-*-winnt*)
+ 	    # these systems don't actually have a c library (as such)!
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+ 	    # Rhapsody C library is in the System framework
+ 	    func_append deplibs " System.ltframework"
+@@ -9280,24 +9389,33 @@
+ 		  a_deplib=
+ 		  ;;
+ 		esac
+ 	      fi
+ 	      if test -n "$a_deplib"; then
+-		libname=`eval "\\$ECHO \"$libname_spec\""`
++		module_save=$module
++		module=no
++		eval shared_ext=\"$shrext_cmds\"
++		eval libname=\"$libname_spec\"
++		eval search_names=\"$library_names_spec\"
++		module=$module_save
+ 		if test -n "$file_magic_glob"; then
+ 		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ 		else
+ 		  libnameglob=$libname
+ 		fi
+ 		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
++		  potential_libs=
++		  for search_name in $search_names; do
++		    potential_libs="$potential_libs `ls $i/$search_name 2>/dev/null`"
++		  done
+ 		  if test yes = "$want_nocaseglob"; then
+ 		    shopt -s nocaseglob
+-		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		    potential_libs="$potential_libs `ls $i/$libnameglob[.-]* 2>/dev/null`"
+ 		    $nocaseglob
+ 		  else
+-		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		    potential_libs="$potential_libs `ls $i/$libnameglob[.-]* 2>/dev/null`"
+ 		  fi
+ 		  for potent_lib in $potential_libs; do
+ 		      # Follow soft links.
+ 		      if ls -lLd "$potent_lib" 2>/dev/null |
+ 			 $GREP " -> " >/dev/null; then
+@@ -9308,11 +9426,11 @@
+ 		      # 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/.* -> //'`
++			potliblink=`ls -ld "$potlib" | $SED 's/.* -> //'`
+ 			case $potliblink in
+ 			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ 			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ 			esac
+ 		      done
+@@ -9624,11 +9742,11 @@
+ 	  func_append delfiles " $export_symbols"
+ 	fi
+ 
+ 	orig_export_symbols=
+ 	case $host_os in
+-	cygwin* | mingw* | cegcc*)
++	cygwin* | mingw* | cegcc* | winnt*)
+ 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ 	    # exporting using user supplied symfile
+ 	    func_dll_def_p "$export_symbols" || {
+ 	      # and it's NOT already a .def file. Must figure out
+ 	      # which of the given symbols are data symbols and tag
+@@ -10294,11 +10412,11 @@
+ 	  *" $libdir "*) ;;
+ 	  *) func_append perm_rpath " $libdir" ;;
+ 	  esac
+ 	fi
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc* | *-*-winnt*)
+ 	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$libdir:"*) ;;
+ 	  ::) dllsearchpath=$libdir;;
+ 	  *) func_append dllsearchpath ":$libdir";;
+@@ -10372,11 +10490,11 @@
+       case $host in
+       *cegcc* | *mingw32ce*)
+         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+         wrappers_required=false
+         ;;
+-      *cygwin* | *mingw* )
++      *cygwin* | *mingw* | *winnt* )
+         test yes = "$build_libtool_libs" || wrappers_required=false
+         ;;
+       *)
+         if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+           wrappers_required=false
+@@ -10525,11 +10643,11 @@
+ 	    func_stripname '' '.exe' "$outputname"
+ 	    outputname=$func_stripname_result ;;
+ 	  *) exeext= ;;
+ 	esac
+ 	case $host in
+-	  *cygwin* | *mingw* )
++	  *cygwin* | *mingw* | *winnt* )
+ 	    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
+@@ -10552,11 +10670,12 @@
+ 	    $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
++		# the running shell may be a Cygwin shell using binmode
++		$cwrapper --lt-dump-script | $SED -e "s/\\r//g" > $func_ltwrapper_scriptname_result
+ 	      else
+ 		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ 	      fi
+ 	    }
+ 	  ;;
+@@ -10857,11 +10976,11 @@
+ 	  # applies here; at the moment, that means platforms that use the PE
+ 	  # object format with DLL files.  See the long comment at the top of
+ 	  # tests/bindir.at for full details.
+ 	  tdlname=$dlname
+ 	  case $host,$output,$installed,$module,$dlname in
+-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
++	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll | *winnt*,*lai,yes,no,*.dll)
+ 	      # If a -bindir argument was supplied, place the dll there.
+ 	      if test -n "$bindir"; then
+ 		func_relative_path "$install_libdir" "$bindir"
+ 		tdlname=$func_relative_path_result/$dlname
+ 	      else
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [gentoo-dev] [PATCH 2/4] add lt-2.4.6.42-b88ce winnt patches for use with parity-2
  2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 1/4] add lt-2.4.6 winnt patches for use with parity-2 haubi
@ 2020-03-12  8:06 ` haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 3/4] winnt: enable WOE properties, found in intl.m4 haubi
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: haubi @ 2020-03-12  8:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: haubi

From: Michael Haubenwallner <haubi@gentoo.org>

If a package does not have libtool-2.4.6 or 2.4.6.42-b88c3 there is no
guarantee things will work, and the package should use eautoreconf.

Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
---
 patches/winnt-conf/2.4.6.42-global-syms | 129 ++++++++++++++++++++++++
 patches/winnt-conf/2.4.6.42-shlibs      |  15 +++
 patches/winnt-conf/2.4.6.42-shlibs-c    |  20 ++++
 patches/winnt-conf/2.4.6.42-shlibs-cxx  |  33 ++++++
 patches/winnt-conf/2.4.6.42-strip       |  30 ++++++
 5 files changed, 227 insertions(+)
 create mode 100644 patches/winnt-conf/2.4.6.42-global-syms
 create mode 100644 patches/winnt-conf/2.4.6.42-shlibs
 create mode 100644 patches/winnt-conf/2.4.6.42-shlibs-c
 create mode 100644 patches/winnt-conf/2.4.6.42-shlibs-cxx
 create mode 100644 patches/winnt-conf/2.4.6.42-strip

diff --git a/patches/winnt-conf/2.4.6.42-global-syms b/patches/winnt-conf/2.4.6.42-global-syms
new file mode 100644
index 0000000..704ee84
--- /dev/null
+++ b/patches/winnt-conf/2.4.6.42-global-syms
@@ -0,0 +1,129 @@
+--- configure
++++ configure
+@@ -7115,11 +7115,11 @@
+ # Define system-specific variables.
+ case $host_os in
+ aix*)
+   symcode='[BCDT]'
+   ;;
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | mingw* | pw32* | cegcc* | winnt*)
+   symcode='[ABCDGISTW]'
+   ;;
+ hpux*)
+   if test ia64 = "$host_cpu"; then
+     symcode='[ABCDEGRST]'
+@@ -7154,46 +7154,56 @@
+   symcode='[ABCDGIRSTW]' ;;
+ esac
+ 
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+   # Gets list of data symbols to import.
+-  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
++  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/\1/p'"
+   # Adjust the below global symbol transforms to fixup imported variables.
+-  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+-  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
++  lt_cdecl_hook=" -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern __declspec(dllimport) char \1;/p'"
++  lt_c_name_hook=" -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'"
+   lt_c_name_lib_hook="\
+-  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+-  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
++  -e 's/^I .* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'\
++  -e 's/^I .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) 0},/p'"
+ else
+   # Disable hooks by default.
+   lt_cv_sys_global_symbol_to_import=
+   lt_cdecl_hook=
+   lt_c_name_hook=
+   lt_c_name_lib_hook=
++  case $host_os in
++  winnt*)
++    lt_cv_sys_global_symbol_to_import="sed -n -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/\1/p'"
++    lt_cdecl_hook=" -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern __declspec(dllimport) char \1;/p'"
++    lt_c_name_hook=" -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'"
++    lt_c_name_lib_hook="\
++    -e 's/^D [^ ]* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) 0},/p'\
++    -e 's/^D [^ ]* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) 0},/p'"
++    ;;
++  esac
+ fi
+ 
+ # Transform an extracted symbol line into a proper C declaration.
+ # Some systems (esp. on ia64) link data and code symbols differently,
+ # so use this general approach.
+ lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+ $lt_cdecl_hook\
+-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
++" -e 's/^T .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern int \1();/p'"\
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/extern char \1;/p'"
+ 
+ # Transform an extracted symbol line into symbol name and symbol address
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+ $lt_c_name_hook\
+ " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) \&\1},/p'"
+ 
+ # Transform an extracted symbol line into symbol name with lib prefix and
+ # symbol address.
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+ $lt_c_name_lib_hook\
+ " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+-" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+-" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
++" -e 's/^$symcode$symcode* .* \(lib[a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"\1\", (void *) \&\1},/p'"\
++" -e 's/^$symcode$symcode* .* \([a-zA-Z_][0-9a-zA-Z_]*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+ 
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+ case $build_os in
+ mingw*)
+@@ -7203,35 +7213,43 @@
+ 
+ # Try without a prefix underscore, then with it.
+ for ac_symprfx in "" "_"; do
+ 
+   # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+-  symxfrm="\\1 $ac_symprfx\\2 \\2"
++  # In Windows import libraries, symbols may be prefixed with __imp_, as well
++  # as __nm_ when using GNU ld.  The leading underscore (in 32bit) comes after
++  # the __imp_ and __nm_ prefix, so make sure to strip the underscore from the
++  # symbol name instead of the __imp_ or __nm_ prefix, leaving these prefixes
++  # intact in the symbol pipe output.
++  symxfrm="\\1 \\2$ac_symprfx\\3 \\2\\3"
+ 
+   # Write the raw and C identifiers.
+   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+     # Fake it for dumpbin and say T for any non-static function,
+     # D for any global variable and I for any imported variable.
+     # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+-    # which start with @ or ?.
++    # which start with @ or ?.  And Cygwin gawk-4.1.4-3 and newer
++    # treats input as binary, have to drop carriage return first.
+     lt_cv_sys_global_symbol_pipe="$AWK '"\
++"     {sub(/\\r\$/,\"\")};"\
+ "     {last_section=section; section=\$ 3};"\
+ "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+ "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+ "     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+ "     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+ "     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+ "     \$ 0!~/External *\|/{next};"\
+ "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+ "     {if(hide[section]) next};"\
+ "     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
++"     \$ 0~/ [0-9a-fA-F]*[1-9a-fA-F][0-9a-fA-F]* UNDEF /{f=\"C\"};"\
+ "     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+ "     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+ "     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+ "     ' prfx=^$ac_symprfx"
+   else
+-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
++    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*\(__imp_\|__nm_\)\{0,1\}$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+   fi
+   lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ 
+   # Check to see that the pipe works correctly.
+   pipe_works=no
diff --git a/patches/winnt-conf/2.4.6.42-shlibs b/patches/winnt-conf/2.4.6.42-shlibs
new file mode 100644
index 0000000..840e867
--- /dev/null
+++ b/patches/winnt-conf/2.4.6.42-shlibs
@@ -0,0 +1,15 @@
+--- configure
++++ configure
+@@ -10228,11 +10262,11 @@
+   # preloaded symbol tables.
+   # Exclude shared library initialization/finalization symbols.
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | mingw* | pw32* | cegcc* | winnt*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+     if test yes != "$GCC"; then
+       with_gnu_ld=no
diff --git a/patches/winnt-conf/2.4.6.42-shlibs-c b/patches/winnt-conf/2.4.6.42-shlibs-c
new file mode 100644
index 0000000..ad16aad
--- /dev/null
+++ b/patches/winnt-conf/2.4.6.42-shlibs-c
@@ -0,0 +1,20 @@
+--- configure
++++ configure
+@@ -10884,10 +10918,17 @@
+ 
+     bsdi[45]*)
+       export_dynamic_flag_spec=-rdynamic
+       ;;
+ 
++    winnt*)
++      exclude_expsyms='__NULL_IMPORT_DESCRIPTOR|__IMPORT_DESCRIPTOR_.*'
++      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags -o $output_objdir/$soname -Wl,--out-implib,$lib'
++      archive_cmds_need_lc=no
++      allow_undefined_flag=unsupported
++      ;;
++
+     cygwin* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+       # no search path for DLLs.
diff --git a/patches/winnt-conf/2.4.6.42-shlibs-cxx b/patches/winnt-conf/2.4.6.42-shlibs-cxx
new file mode 100644
index 0000000..71db848
--- /dev/null
+++ b/patches/winnt-conf/2.4.6.42-shlibs-cxx
@@ -0,0 +1,33 @@
+--- configure
++++ configure
+@@ -15327,10 +15450,16 @@
+ 	  ld_shlibs_CXX=no
+ 	  ;;
+         esac
+         ;;
+ 
++      winnt*)
++	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags -o $output_objdir/$soname -Wl,--out-implib,$lib'
++	archive_cmds_need_lc_CXX=no
++	allow_undefined_flag_CXX=unsupported
++	;;
++
+       cygwin* | mingw* | pw32* | cegcc*)
+ 	case $GXX,$cc_basename in
+ 	,cl* | no,cl* | ,icl* | no,icl*)
+ 	  # Native MSVC or ICC
+ 	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -16902,10 +17036,13 @@
+     fi
+     ;;
+   pw32*)
+     export_symbols_cmds_CXX=$ltdll_cmds
+     ;;
++  winnt*)
++    exclude_expsyms_CXX='__NULL_IMPORT_DESCRIPTOR|__IMPORT_DESCRIPTOR_.*'
++    ;;
+   cygwin* | mingw* | cegcc*)
+     case $cc_basename in
+     cl* | icl*)
+       exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       ;;
diff --git a/patches/winnt-conf/2.4.6.42-strip b/patches/winnt-conf/2.4.6.42-strip
new file mode 100644
index 0000000..743a2fb
--- /dev/null
+++ b/patches/winnt-conf/2.4.6.42-strip
@@ -0,0 +1,30 @@
+--- configure
++++ configure
+@@ -13205,14 +13315,24 @@
+ if test -z "$STRIP"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ else
+   if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+-    old_striplib="$STRIP --strip-debug"
+-    striplib="$STRIP --strip-unneeded"
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++    case $host_os in
++    winnt*)
++      # Stripping is not save here, since POSIXish host utils may
++      # be detected, but we operate on native windows libraries.
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++      ;;
++    *)
++      old_striplib="$STRIP --strip-debug"
++      striplib="$STRIP --strip-unneeded"
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
++      ;;
++    esac
+   else
+     case $host_os in
+     darwin*)
+       # FIXME - insert some real tests, host_os isn't really good enough
+       striplib="$STRIP -x"
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [gentoo-dev] [PATCH 3/4] winnt: enable WOE properties, found in intl.m4
  2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 1/4] add lt-2.4.6 winnt patches for use with parity-2 haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 2/4] add lt-2.4.6.42-b88ce " haubi
@ 2020-03-12  8:06 ` haubi
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+ haubi
  2020-03-12 10:23 ` [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain Alexis Ballier
  4 siblings, 0 replies; 12+ messages in thread
From: haubi @ 2020-03-12  8:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: haubi

From: Michael Haubenwallner <haubi@gentoo.org>

Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
---
 patches/winnt-conf/woe32    | 11 +++++++++++
 patches/winnt-conf/woe32dll | 11 +++++++++++
 2 files changed, 22 insertions(+)
 create mode 100644 patches/winnt-conf/woe32
 create mode 100644 patches/winnt-conf/woe32dll

diff --git a/patches/winnt-conf/woe32 b/patches/winnt-conf/woe32
new file mode 100644
index 0000000..3eea6d1
--- /dev/null
+++ b/patches/winnt-conf/woe32
@@ -0,0 +1,11 @@
+--- configure
++++ configure
+@@ -14769,7 +14769,7 @@
+ 
+ 
+ case "$host_os" in
+-  mingw* | cygwin*) is_woe32=yes ;;
++  mingw* | cygwin* | winnt*) is_woe32=yes ;;
+   *) is_woe32=no ;;
+ esac
+ WOE32=$is_woe32
diff --git a/patches/winnt-conf/woe32dll b/patches/winnt-conf/woe32dll
new file mode 100644
index 0000000..b4fac5f
--- /dev/null
+++ b/patches/winnt-conf/woe32dll
@@ -0,0 +1,11 @@
+--- configure
++++ configure
+@@ -24762,7 +24762,7 @@
+ 
+ if test "$enable_shared" = yes; then
+   case "$host_os" in
+-    mingw* | cygwin*) is_woe32dll=yes ;;
++    mingw* | cygwin* | winnt*) is_woe32dll=yes ;;
+     *) is_woe32dll=no ;;
+   esac
+ else
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+
  2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
                   ` (2 preceding siblings ...)
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 3/4] winnt: enable WOE properties, found in intl.m4 haubi
@ 2020-03-12  8:06 ` haubi
  2020-03-12 20:48   ` James Le Cuirot
  2020-03-12 10:23 ` [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain Alexis Ballier
  4 siblings, 1 reply; 12+ messages in thread
From: haubi @ 2020-03-12  8:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: haubi

From: Michael Haubenwallner <haubi@gentoo.org>

Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
---
 eltpatch.in | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/eltpatch.in b/eltpatch.in
index 6b69216..e12f754 100644
--- a/eltpatch.in
+++ b/eltpatch.in
@@ -179,7 +179,7 @@ elibtoolize() {
 		*-hpux*)    elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" ;;
 		*-irix*)    elt_patches+=" irix-ltmain" ;;
 		*-mint*)    elt_patches+=" mint-conf" ;;
-		*-winnt*)   elt_patches+=" winnt-conf winnt-ltmain" ;;
+		*-winnt*)   elt_patches+=" winnt-ltmain winnt-conf" ;;
 	esac
 
 	if ${LD} --version 2>&1 | grep -qs 'GNU gold'; then
@@ -286,6 +286,18 @@ elibtoolize() {
 						ret=$?
 					fi
 					;;
+				winnt-ltmain)
+					local version=$(ELT_libtool_version "${d}/ltmain.sh")
+					case ${version} in
+					2.4.6 | 2.4.6[' .']* )
+						ELT_walk_patches "${d}/ltmain.sh" "${p}"
+						ret=$?
+						;;
+					*)
+						die "${p}: need libtool 2.4.6+ (not ${version}) in ${d}"
+						;;
+					esac
+					;;
 				*)
 					ELT_walk_patches "${d}/ltmain.sh" "${p}"
 					ret=$?
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
  2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
                   ` (3 preceding siblings ...)
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+ haubi
@ 2020-03-12 10:23 ` Alexis Ballier
  2020-03-12 20:59   ` James Le Cuirot
  2020-03-13 13:49   ` [gentoo-dev] " Michael Haubenwallner
  4 siblings, 2 replies; 12+ messages in thread
From: Alexis Ballier @ 2020-03-12 10:23 UTC (permalink / raw
  To: gentoo-dev

On Thu, 2020-03-12 at 09:06 +0100, haubi@gentoo.org wrote:
> As this native Win32 support is considered highly experimental still,
> I
> would like to apply the libtool patches for parity via elibtoolize
> only,
> without applying them in sys-devel/libtool itself yet.
> 

IIRC you need to do it this way, experimental or not: elibtoolize is
needed for packages whose autotools have been generated with an old
libtool (ie all of them for now). eautoreconf should call elibtoolize,
so, after having this in elt-patches, better focus on upstreaming this
in libtool itself so that the need for elibtoolize fades away with
time.

You will probably run into the same issues as in the old days with BSD:
not all packages run elibtoolize and you do not have a sane way to
force this besides editing ebuilds.


Alexis.



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+
  2020-03-12  8:06 ` [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+ haubi
@ 2020-03-12 20:48   ` James Le Cuirot
  2020-03-13 13:35     ` [gentoo-dev] " Michael Haubenwallner
  0 siblings, 1 reply; 12+ messages in thread
From: James Le Cuirot @ 2020-03-12 20:48 UTC (permalink / raw
  To: haubi; +Cc: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 950 bytes --]

On Thu, 12 Mar 2020 09:06:26 +0100
haubi@gentoo.org wrote:

> From: Michael Haubenwallner <haubi@gentoo.org>
> 
> Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
> ---
>  eltpatch.in | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/eltpatch.in b/eltpatch.in
> index 6b69216..e12f754 100644
> --- a/eltpatch.in
> +++ b/eltpatch.in
> @@ -179,7 +179,7 @@ elibtoolize() {
>  		*-hpux*)    elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" ;;
>  		*-irix*)    elt_patches+=" irix-ltmain" ;;
>  		*-mint*)    elt_patches+=" mint-conf" ;;
> -		*-winnt*)   elt_patches+=" winnt-conf winnt-ltmain" ;;
> +		*-winnt*)   elt_patches+=" winnt-ltmain winnt-conf" ;;
>  	esac
>  
>  	if ${LD} --version 2>&1 | grep -qs 'GNU gold'; then

This change reorders something you added in the first patch.

-- 
James Le Cuirot (chewi)
Gentoo Linux Developer

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
  2020-03-12 10:23 ` [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain Alexis Ballier
@ 2020-03-12 20:59   ` James Le Cuirot
  2020-03-12 21:00     ` James Le Cuirot
  2020-03-13  9:19     ` Alexis Ballier
  2020-03-13 13:49   ` [gentoo-dev] " Michael Haubenwallner
  1 sibling, 2 replies; 12+ messages in thread
From: James Le Cuirot @ 2020-03-12 20:59 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 1328 bytes --]

On Thu, 12 Mar 2020 11:23:04 +0100
Alexis Ballier <aballier@gentoo.org> wrote:

> On Thu, 2020-03-12 at 09:06 +0100, haubi@gentoo.org wrote:
> > As this native Win32 support is considered highly experimental still,
> > I
> > would like to apply the libtool patches for parity via elibtoolize
> > only,
> > without applying them in sys-devel/libtool itself yet.
> >   
> 
> IIRC you need to do it this way, experimental or not: elibtoolize is
> needed for packages whose autotools have been generated with an old
> libtool (ie all of them for now). eautoreconf should call elibtoolize,
> so, after having this in elt-patches, better focus on upstreaming this
> in libtool itself so that the need for elibtoolize fades away with
> time.
> 
> You will probably run into the same issues as in the old days with BSD:
> not all packages run elibtoolize and you do not have a sane way to
> force this besides editing ebuilds.

I've long wanted to automatically apply elibtoolize to fix other
cross-compile issues. I did come up with a rough prototype and it did
work though I imagine it might break some packages. Maybe it should be
opt-out rather than opt-in?

Without looking into the meat of the libtool patches themselves, the
changes seem good.

-- 
James Le Cuirot (chewi)
Gentoo Linux Developer

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
  2020-03-12 20:59   ` James Le Cuirot
@ 2020-03-12 21:00     ` James Le Cuirot
  2020-03-13  9:19     ` Alexis Ballier
  1 sibling, 0 replies; 12+ messages in thread
From: James Le Cuirot @ 2020-03-12 21:00 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 1328 bytes --]

On Thu, 12 Mar 2020 11:23:04 +0100
Alexis Ballier <aballier@gentoo.org> wrote:

> On Thu, 2020-03-12 at 09:06 +0100, haubi@gentoo.org wrote:
> > As this native Win32 support is considered highly experimental still,
> > I
> > would like to apply the libtool patches for parity via elibtoolize
> > only,
> > without applying them in sys-devel/libtool itself yet.
> >   
> 
> IIRC you need to do it this way, experimental or not: elibtoolize is
> needed for packages whose autotools have been generated with an old
> libtool (ie all of them for now). eautoreconf should call elibtoolize,
> so, after having this in elt-patches, better focus on upstreaming this
> in libtool itself so that the need for elibtoolize fades away with
> time.
> 
> You will probably run into the same issues as in the old days with BSD:
> not all packages run elibtoolize and you do not have a sane way to
> force this besides editing ebuilds.

I've long wanted to automatically apply elibtoolize to fix other
cross-compile issues. I did come up with a rough prototype and it did
work though I imagine it might break some packages. Maybe it should be
opt-out rather than opt-in?

Without looking into the meat of the libtool patches themselves, the
changes seem good.

-- 
James Le Cuirot (chewi)
Gentoo Linux Developer

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
  2020-03-12 20:59   ` James Le Cuirot
  2020-03-12 21:00     ` James Le Cuirot
@ 2020-03-13  9:19     ` Alexis Ballier
  1 sibling, 0 replies; 12+ messages in thread
From: Alexis Ballier @ 2020-03-13  9:19 UTC (permalink / raw
  To: gentoo-dev

On Thu, 2020-03-12 at 20:59 +0000, James Le Cuirot wrote:
> On Thu, 12 Mar 2020 11:23:04 +0100
> Alexis Ballier <aballier@gentoo.org> wrote:
> 
> > On Thu, 2020-03-12 at 09:06 +0100, haubi@gentoo.org wrote:
> > > As this native Win32 support is considered highly experimental
> > > still,
> > > I
> > > would like to apply the libtool patches for parity via
> > > elibtoolize
> > > only,
> > > without applying them in sys-devel/libtool itself yet.
> > >   
> > 
> > IIRC you need to do it this way, experimental or not: elibtoolize
> > is
> > needed for packages whose autotools have been generated with an old
> > libtool (ie all of them for now). eautoreconf should call
> > elibtoolize,
> > so, after having this in elt-patches, better focus on upstreaming
> > this
> > in libtool itself so that the need for elibtoolize fades away with
> > time.
> > 
> > You will probably run into the same issues as in the old days with
> > BSD:
> > not all packages run elibtoolize and you do not have a sane way to
> > force this besides editing ebuilds.
> 
> I've long wanted to automatically apply elibtoolize to fix other
> cross-compile issues. I did come up with a rough prototype and it did
> work though I imagine it might break some packages. Maybe it should
> be
> opt-out rather than opt-in?

If a patch in elibtoolize might break something then it should not be
there in the first place: the function is called by a lot of packages.
However, we can assume that such packages have been tested whereas by
magically calling elibtoolize they have not. A good solution to avoid
this could be to modify the default src_prepare in EAPI8 to call it.

I think some hacks were implemented for fbsd via profile.bashrc because
the pain caused by *not* calling elibtoolize (soname changes) was worse
than having untested packages that might break under a red moon.


Alexis.



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [gentoo-dev] Re: [PATCH 4/4] winnt: die if libtool version is not 2.4.6+
  2020-03-12 20:48   ` James Le Cuirot
@ 2020-03-13 13:35     ` Michael Haubenwallner
  0 siblings, 0 replies; 12+ messages in thread
From: Michael Haubenwallner @ 2020-03-13 13:35 UTC (permalink / raw
  To: gentoo-dev

On 3/12/20 9:48 PM, James Le Cuirot wrote:
> On Thu, 12 Mar 2020 09:06:26 +0100
> haubi@gentoo.org wrote:
> 
>> From: Michael Haubenwallner <haubi@gentoo.org>
>>
>> Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
>> ---
>>  eltpatch.in | 14 +++++++++++++-
>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/eltpatch.in b/eltpatch.in
>> index 6b69216..e12f754 100644
>> --- a/eltpatch.in
>> +++ b/eltpatch.in
>> @@ -179,7 +179,7 @@ elibtoolize() {
>>  		*-hpux*)    elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" ;;
>>  		*-irix*)    elt_patches+=" irix-ltmain" ;;
>>  		*-mint*)    elt_patches+=" mint-conf" ;;
>> -		*-winnt*)   elt_patches+=" winnt-conf winnt-ltmain" ;;
>> +		*-winnt*)   elt_patches+=" winnt-ltmain winnt-conf" ;;
>>  	esac
>>  
>>  	if ${LD} --version 2>&1 | grep -qs 'GNU gold'; then
> 
> This change reorders something you added in the first patch.
> 

This is to perform the version check earlier rather than later.

Otherwise, the order is irrelevant.

Thanks!
/haubi/


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [gentoo-dev] Re: [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain
  2020-03-12 10:23 ` [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain Alexis Ballier
  2020-03-12 20:59   ` James Le Cuirot
@ 2020-03-13 13:49   ` Michael Haubenwallner
  1 sibling, 0 replies; 12+ messages in thread
From: Michael Haubenwallner @ 2020-03-13 13:49 UTC (permalink / raw
  To: gentoo-dev

On 3/12/20 11:23 AM, Alexis Ballier wrote:
> On Thu, 2020-03-12 at 09:06 +0100, haubi@gentoo.org wrote:
>> As this native Win32 support is considered highly experimental still,
>> I
>> would like to apply the libtool patches for parity via elibtoolize
>> only,
>> without applying them in sys-devel/libtool itself yet.
>>
> 
> IIRC you need to do it this way, experimental or not: elibtoolize is
> needed for packages whose autotools have been generated with an old
> libtool (ie all of them for now). eautoreconf should call elibtoolize,
> so, after having this in elt-patches, better focus on upstreaming this
> in libtool itself so that the need for elibtoolize fades away with
> time.

Actually, sys-devel/libtool should only apply libtool patches that are
committed upstream already, to not confuse other distros and/or package
managers when package maintainers use libtoolize ('make dist') on Gentoo.

> 
> You will probably run into the same issues as in the old days with BSD:
> not all packages run elibtoolize and you do not have a sane way to
> force this besides editing ebuilds.

Yeah, we do face this issue in Prefix as well.

/haubi/


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-03-13 13:50 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-12  8:06 [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain haubi
2020-03-12  8:06 ` [gentoo-dev] [PATCH 1/4] add lt-2.4.6 winnt patches for use with parity-2 haubi
2020-03-12  8:06 ` [gentoo-dev] [PATCH 2/4] add lt-2.4.6.42-b88ce " haubi
2020-03-12  8:06 ` [gentoo-dev] [PATCH 3/4] winnt: enable WOE properties, found in intl.m4 haubi
2020-03-12  8:06 ` [gentoo-dev] [PATCH 4/4] winnt: die if libtool version is not 2.4.6+ haubi
2020-03-12 20:48   ` James Le Cuirot
2020-03-13 13:35     ` [gentoo-dev] " Michael Haubenwallner
2020-03-12 10:23 ` [gentoo-dev] [PATCH 0/4] elt-patches: support wrapped Win32 MSVC toolchain Alexis Ballier
2020-03-12 20:59   ` James Le Cuirot
2020-03-12 21:00     ` James Le Cuirot
2020-03-13  9:19     ` Alexis Ballier
2020-03-13 13:49   ` [gentoo-dev] " Michael Haubenwallner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox