diff --git a/Makefile.am b/Makefile.am index 18484022..71046b2f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,6 +36,7 @@ DISTCHECK_CONFIGURE_FLAGS = EXTRA_DIST = autogen.sh autogen.rc gpgme.spec.in \ ChangeLog-2011 m4/ChangeLog-2011 \ + build-aux/libtool-patch.sed \ conf/whatisthis VERSION LICENSES # This artificial line is to put a dependency to conf/config.h for 'all' diff --git a/build-aux/libtool-patch.sed b/build-aux/libtool-patch.sed new file mode 100644 index 00000000..ac5a3bad --- /dev/null +++ b/build-aux/libtool-patch.sed @@ -0,0 +1,68 @@ +# +# This is a sed script to patch the generated libtool, +# which works well against both of libtool 2.4.2 and 2.4.7. +# +# You may use this work under the terms of a Creative Commons CC0 1.0 +# License/Waiver. +# +# CC0 Public Domain Dedication +# https://creativecommons.org/publicdomain/zero/1.0/ + +# +# This sed script applys two hunks of the patch: +# +# Part1: after the comment "# bleh windows" +# Part2: after the comment "#extension on DOS 8.3..." +# +# Only when those two parts are patched correctly, it exits with 0 or +# else, it exits with 1 +# + +# Find the part 1, by the comment +/^[ \t]*# bleh windows$/b part1_start +# Not found the part1, raise an error +$ q1 +b + +:part1_start +n +# The first line in the part 1 must be the begining of the case statement. +/^[ \t]*case \$host in$/! q1 +n +# Insert the entry for x86_64-*mingw32*, for modified versuffix. +i\ + x86_64-*mingw32*) +i\ + func_arith $current - $age +i\ + major=$func_arith_result +i\ + versuffix="6-$major" +i\ + ;; +:part1_0 +# Find the end of the case statement +/^[ \t]*esac$/b find_part2 +# Not found the end of the case statement, raise an error +$ q1 +n +b part1_0 + +:find_part2 +/^[ \t]*# extension on DOS 8.3 file.*systems.$/b part2_process +# Not found the part2, raise an error +$ q1 +n +b find_part2 + +:part2_process +$ q1 +s/^[ \t]*\(versuffix=\)\(.*\)\(-$major\)\(.*\)$/\t case \$host in\n\t x86_64-*mingw32*)\n\t \1\26\3\4\n\t ;;\n\t *)\n\t \1\2\3\4\n\t ;;\n\t esac/ +t part2_done +n +b part2_process + +:part2_done +$ q0 +n +b part2_done diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh index c3bcdc06..77963a93 100644 --- a/build-aux/ltmain.sh +++ b/build-aux/ltmain.sh @@ -6766,11 +6766,6 @@ func_mode_link () elif test -n "$soname_spec"; then # bleh windows case $host in - x86_64-*mingw32*) - func_arith $current - $age - major=$func_arith_result - versuffix="6-$major" - ;; *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result @@ -7504,14 +7499,6 @@ func_mode_link () func_arith $current - $age major=$func_arith_result versuffix="-$major" - case $host in - x86_64-*mingw32*) - versuffix="6-$major" - ;; - *) - versuffix="-$major" - ;; - esac ;; *) diff --git a/configure.ac b/configure.ac index d7396a27..7ddb1b4f 100644 --- a/configure.ac +++ b/configure.ac @@ -206,6 +206,44 @@ esac AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") +# +# Specify how we support our local modification of libtool for Windows +# 64-bit. Options are: +# +# (1) apply: when appying patch fails, it results failure of entire build +# (2) never: never apply the patch (no try) +# (3) try: use patched if it goes well, use original if fails +# +AC_ARG_WITH([libtool-modification], + AS_HELP_STRING([--with-libtool-modification=apply|never|try], + [how to handle libtool modification (default=apply)]), + build_libtool_modification=$withval, + build_libtool_modification=apply) + +# +# Apply a patch (locally maintained one of ours) to libtool +# +case $host in + x86_64-*mingw32*) +AC_CONFIG_COMMANDS([libtool-patch],[[ + if test "$build_selection" = never; then + echo "patch not applied" + elif (mv -f libtool libtool.orig; \ + sed -f $srcdir/build-aux/libtool-patch.sed libtool.orig >libtool); then + echo "applied successfully" + elif test "$build_selection" = try; then + mv -f libtool.orig libtool + echo "patch failed, thus, using original" + else + echo "patch failed" + as_fn_exit 1 + fi +]],[build_selection=$build_libtool_modification]) + ;; + *) + ;; +esac + GPG_DEFAULT=no GPGSM_DEFAULT=no GPGCONF_DEFAULT=no