commit: ec76f6e000bdfdc91f4b5da7fa05c57a39cc3f27 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Sat Apr 22 07:03:47 2017 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Sat Apr 22 07:27:26 2017 +0000 URL: https://gitweb.gentoo.org/proj/elt-patches.git/commit/?id=ec76f6e0
Add application script, and a Makefile Makefile | 47 ++ eltpatch.in | 488 +++++++++++++++++++++ {aixrtl => patches/aixrtl}/1.5.0-cmds-c | 0 {aixrtl => patches/aixrtl}/1.5.0-cmds-cxx | 0 {aixrtl => patches/aixrtl}/1.5.0-expsym-c | 0 {aixrtl => patches/aixrtl}/1.5.0-expsym-cxx | 0 {aixrtl => patches/aixrtl}/1.5.0-noundef-c | 0 {aixrtl => patches/aixrtl}/1.5.0-noundef-cxx | 0 {aixrtl => patches/aixrtl}/1.5.0-soname | 0 {aixrtl => patches/aixrtl}/1.5.0-usertl-c | 0 {aixrtl => patches/aixrtl}/1.5.0-usertl-cxx | 0 {aixrtl => patches/aixrtl}/1.5.22-cmds-c | 0 {aixrtl => patches/aixrtl}/1.5.22-cmds-cxx | 0 {aixrtl => patches/aixrtl}/2.0.0-fpic-c | 0 {aixrtl => patches/aixrtl}/2.0.0-fpic-cxx | 0 {aixrtl => patches/aixrtl}/2.2.0-cmds-c | 0 {aixrtl => patches/aixrtl}/2.2.0-cmds-cxx | 0 {aixrtl => patches/aixrtl}/2.2.0-expsym-c | 0 {aixrtl => patches/aixrtl}/2.2.0-expsym-cxx | 0 {aixrtl => patches/aixrtl}/2.2.0-noundef-c | 0 {aixrtl => patches/aixrtl}/2.2.0-noundef-cxx | 0 {aixrtl => patches/aixrtl}/2.2.0-usertl-cxx | 0 {aixrtl => patches/aixrtl}/2.2.8-cmds-c | 0 {aixrtl => patches/aixrtl}/2.2.8-cmds-cxx | 0 {aixrtl => patches/aixrtl}/2.4.0-expsym-c | 0 {aixrtl => patches/aixrtl}/2.4.0-expsym-cxx | 0 {aixrtl => patches/aixrtl}/2.4.2.418-cmds-c | 0 {aixrtl => patches/aixrtl}/2.4.2.418-cmds-cxx | 0 {aixrtl => patches/aixrtl}/2.4.2.418-soname | 0 {aixrtl => patches/aixrtl}/2.4.4-expsym-c | 0 {aixrtl => patches/aixrtl}/2.4.4-expsym-cxx | 0 {aixrtl => patches/aixrtl}/2.4.4-with-svr4 | 0 {as-needed => patches/as-needed}/1.5 | 0 {as-needed => patches/as-needed}/1.5.26 | 0 {as-needed => patches/as-needed}/2.2.6 | 0 {as-needed => patches/as-needed}/2.4.2 | 0 {as-needed => patches/as-needed}/2.4.3 | 0 {cross => patches/cross}/2.2 | 0 {cross => patches/cross}/2.4 | 0 {cross => patches/cross}/2.4.3 | 0 {darwin-conf => patches/darwin-conf}/1.5 | 0 {darwin-conf => patches/darwin-conf}/1.5b | 0 {darwin-conf => patches/darwin-conf}/2.2.4 | 0 {darwin-conf => patches/darwin-conf}/2.2.6 | 0 {darwin-conf => patches/darwin-conf}/2.4.6 | 0 {darwin-ltconf => patches/darwin-ltconf}/1.2.0 | 0 {darwin-ltconf => patches/darwin-ltconf}/1.3.0 | 0 {darwin-ltmain => patches/darwin-ltmain}/1.2.0 | 0 {darwin-ltmain => patches/darwin-ltmain}/1.3.0 | 0 {deplibs => patches/deplibs}/1.5 | 0 {deplibs => patches/deplibs}/2.1b | 0 {fbsd-conf => patches/fbsd-conf}/00broken-libglade | 0 {fbsd-conf => patches/fbsd-conf}/1.4.0 | 0 {fbsd-conf => patches/fbsd-conf}/1.5.10 | 0 {fbsd-conf => patches/fbsd-conf}/1.5.18 | 0 {fbsd-conf => patches/fbsd-conf}/1.5.20 | 0 {fbsd-conf => patches/fbsd-conf}/1.5.20b | 0 {fbsd-conf => patches/fbsd-conf}/1.9f | 0 {fbsd-ltconf => patches/fbsd-ltconf}/1.2.0 | 0 {fbsd-ltconf => patches/fbsd-ltconf}/1.3.0 | 0 {fbsd-ltconf => patches/fbsd-ltconf}/1.4a | 0 {fbsd-ltconf => patches/fbsd-ltconf}/1.4a-GCC3.0 | 0 {fix-relink => patches/fix-relink}/1.4.0 | 0 {fix-relink => patches/fix-relink}/1.4.3 | 0 {fix-relink => patches/fix-relink}/1.5.0 | 0 {gold-conf => patches/gold-conf}/2.2.6 | 0 {hardcode-relink => patches/hardcode-relink}/1.3d | 0 {hardcode => patches/hardcode}/1.3d | 0 {hardcode => patches/hardcode}/2.1b | 0 {hc-flag-ld => patches/hc-flag-ld}/1.5 | 0 {hpux-conf => patches/hpux-conf}/1.5.22-syslibpath | 0 {install-sh => patches/install-sh}/1.5 | 0 {install-sh => patches/install-sh}/1.5.4 | 0 {install-sh => patches/install-sh}/1.5.6 | 0 {irix-ltmain => patches/irix-ltmain}/2.2.6 | 0 {ltmain => patches/ltmain}/1.5 | 0 {max_cmd_len => patches/max_cmd_len}/1.5.0 | 0 {max_cmd_len => patches/max_cmd_len}/1.5.14 | 0 {max_cmd_len => patches/max_cmd_len}/1.5.20 | 0 {mint-conf => patches/mint-conf}/2.2.6 | 0 {no-lc => patches/no-lc}/1.3d | 0 {no-lc => patches/no-lc}/1.5.22 | 0 {nocxx => patches/nocxx}/nocxx-2.64.patch | 0 {nocxx => patches/nocxx}/nocxx.patch | 0 {portage => patches/portage}/1.2.0 | 0 {portage => patches/portage}/1.3.0c | 0 {portage => patches/portage}/1.3.3 | 0 {portage => patches/portage}/1.4.0 | 0 {portage => patches/portage}/1.5.10 | 0 {portage => patches/portage}/2.2 | 0 {ppc64le => patches/ppc64le}/2.4.2 | 0 {ppc64le => patches/ppc64le}/2.4.4 | 0 {relink-prog => patches/relink-prog}/1.3d | 0 {relink-prog => patches/relink-prog}/2.1b | 0 {relink => patches/relink}/1.4.0a | 0 {relink => patches/relink}/1.4.0a-GCC3.0-1 | 0 {relink => patches/relink}/1.4.0a-GCC3.0-2 | 0 {relink => patches/relink}/1.4.1 | 0 {relink => patches/relink}/1.4.2 | 0 {relink => patches/relink}/1.4.3 | 0 {rem-int-dep => patches/rem-int-dep}/1.3.5 | 0 {sed => patches/sed}/1.3.4 | 0 {sed => patches/sed}/1.4.0 | 0 {sed => patches/sed}/1.5.6 | 0 {sol2-conf => patches/sol2-conf}/2.4.2 | 0 {sol2-ltmain => patches/sol2-ltmain}/2.4.2 | 0 {sys-lib-dlsearch => patches/sys-lib-dlsearch}/2.4 | 0 {target-nm => patches/target-nm}/2.4.2 | 0 {test => patches/test}/1.4.0 | 0 {test => patches/test}/1.4.2 | 0 {tmp => patches/tmp}/1.3.5 | 0 {uclibc-conf => patches/uclibc-conf}/1.2.0 | 0 {uclibc-conf => patches/uclibc-conf}/1.3.0c | 0 {uclibc-ltconf => patches/uclibc-ltconf}/1.2.0 | 0 {uclibc-ltconf => patches/uclibc-ltconf}/1.3.0 | 0 115 files changed, 535 insertions(+) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..05a8b7e --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +DESTDIR = +prefix = /usr +bindir = $(prefix)/bin +libdirname = lib +datadir = $(prefix)/share +patchdir = $(datadir)/elt-patches + +all: eltpatch +install: install-bin install-patch +distclean: clean + +eltpatch: eltpatch.in + rm -f $@ $@.tmp + sed -e 's^@ELT_patchdir@^$(patchdir)^' \ + -e 's^@ELT_libdir@^$(libdirname)^' \ + $< > $@.tmp + chmod +x $@.tmp + mv $@.tmp $@ + +clean: + rm -f eltpatch + +install-bin: eltpatch + install -d $(DESTDIR)$(bindir) + install -m0755 $< $(DESTDIR)$(bindir) + +install-patch: + install -d $(DESTDIR)$(patchdir) + cd patches && \ + for dir in */; do \ + install -d $(DESTDIR)$(patchdir)/$${dir} || exit 1; \ + for file in $${dir}/*; do \ + install -m0644 $${file} $(DESTDIR)$(patchdir)/$${dir} \ + || exit 1; \ + done; \ + done + +dist: + rm -f elt-patches-$$(date +%Y%m%d).tar.xz elt-patches-$$(date +%Y%m%d).tar + git archive -o elt-patches-$$(date +%Y%m%d).tar \ + --prefix=elt-patches-$$(date +%Y%m%d)/ \ + --format=tar \ + HEAD + xz -9 elt-patches-$$(date +%Y%m%d).tar diff --git a/eltpatch.in b/eltpatch.in new file mode 100644 index 0000000..7dae4bb --- /dev/null +++ b/eltpatch.in @@ -0,0 +1,488 @@ +#!/bin/bash +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +source "/lib/gentoo/functions.sh" || exit 1 + +die() { + eerror "${@}" + exit 1 +} + +# +# See if we can apply $2 on $1, and if so, do it +# +ELT_try_and_apply_patch() { + local ret=0 + local file=$1 + local patch=$2 + local src=$3 + local disp="${src} patch" + local log="${ELT_LOGDIR:-${TMPDIR}}/elibtool.log" + + if [[ -z ${_ELT_NOTED_TMP} ]] ; then + _ELT_NOTED_TMP=true + printf 'temp patch: %s\n' "${patch}" > "${log}" + fi + printf '\nTrying %s\n' "${disp}" >> "${log}" + + if [[ ! -e ${file} ]] ; then + echo "File not found: ${file}" >> "${log}" + return 1 + fi + + # Save file for permission restoration. `patch` sometimes resets things. + # Ideally we'd want 'stat -c %a', but stat is highly non portable and we are + # guaranted to have GNU find, so use that instead. + local perms="$(find ${file} -maxdepth 0 -printf '%m')" + # We only support patchlevel of 0 - why worry if its static patches? + if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1 ; then + einfo " Applying ${disp} ..." + patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1 + ret=$? + ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}" + else + ret=1 + fi + chmod "${perms}" "${file}" + + return "${ret}" +} + +# +# Get string version of ltmain.sh or ltconfig (passed as $1) +# +ELT_libtool_version() { + ( + unset VERSION + eval $(grep -e '^[[:space:]]*VERSION=' "$1") + echo "${VERSION:-0}" + ) +} + +# +# Run through the patches in $2 and see if any +# apply to $1 ... +# +ELT_walk_patches() { + local patch tmp + local ret=1 + local file=$1 + local patch_set=$2 + local patch_dir="@ELT_patchdir@/${patch_set}" + local rem_int_dep=$3 + + [[ -z ${patch_set} ]] && return 1 + [[ ! -d ${patch_dir} ]] && return 1 + + # Allow patches to use @GENTOO_LIBDIR@ replacements + local sed_args=( -e "s:@GENTOO_LIBDIR@:@ELT_libdir@:g" ) + if [[ -n ${rem_int_dep} ]] ; then + # replace @REM_INT_DEP@ with what was passed + # to --remove-internal-dep + sed_args+=( -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ) + fi + + pushd "@ELT_patchdir@" >/dev/null || die "pushd to elt-patch dir failed" + + # Go through the patches in reverse order (newer version to older) + for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r) ; do + tmp="${TMPDIR}/libtool-elt.patch" + sed "${sed_args[@]}" "${patch}" > "${tmp}" || die "sed on patch ${patch} failed" + if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}" ; then + # Break to unwind w/popd rather than return directly + ret=0 + break + fi + done + + popd >/dev/null + return ${ret} +} + +# @FUNCTION: elibtoolize +# @USAGE: [dirs] [--portage] [--reverse-deps] [--patch-only] [--remove-internal-dep=xxx] [--shallow] [--no-uclibc] +# @DESCRIPTION: +# Apply a smorgasbord of patches to bundled libtool files. This function +# should always be safe to run. If no directories are specified, then +# ${S} will be searched for appropriate files. +# +# If the --shallow option is used, then only ${S}/ltmain.sh will be patched. +# +# The other options should be avoided in general unless you know what's going on. +elibtoolize() { + local x + local dirs=() + local do_portage="no" + local do_reversedeps="yes" + local do_only_patches="no" + local do_uclibc="yes" + local deptoremove= + local do_shallow="no" + local force="false" + local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed target-nm ppc64le" + + for x in "$@" ; do + case ${x} in + --portage) + # Only apply portage patch, and don't + # 'libtoolize --copy --force' if all patches fail. + do_portage="yes" + ;; + --reverse-deps) + # Apply the reverse-deps patch + # http://bugzilla.gnome.org/show_bug.cgi?id=75635 + do_reversedeps="yes" + elt_patches+=" fix-relink" + ;; + --patch-only) + # Do not run libtoolize if none of the patches apply .. + do_only_patches="yes" + ;; + --remove-internal-dep=*) + # We will replace @REM_INT_DEP@ with what is needed + # in ELT_walk_patches() ... + deptoremove=${x#--remove-internal-dep=} + + # Add the patch for this ... + [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep" + ;; + --shallow) + # Only patch the ltmain.sh in ${S} + do_shallow="yes" + ;; + --no-uclibc) + do_uclibc="no" + ;; + --force) + force="true" + ;; + -*) + die "Invalid elibtoolize option: ${x}" + ;; + *) dirs+=( "${x}" ) + esac + done + + [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf" + + case ${CHOST} in + *-aix*) elt_patches+=" hardcode aixrtl" ;; #213277 + *-darwin*) elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf" ;; + *-solaris*) elt_patches+=" sol2-conf sol2-ltmain" ;; + *-freebsd*) elt_patches+=" fbsd-conf fbsd-ltconf" ;; + *-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" ;; + esac + + if ${LD} --version 2>&1 | grep -qs 'GNU gold'; then + elt_patches+=" gold-conf" + fi + + # Find out what dirs to scan. + if [[ ${do_shallow} == "yes" ]] ; then + [[ ${#dirs[@]} -ne 0 ]] && die "Using --shallow with explicit dirs doesn't make sense" + [[ -f ${S}/ltmain.sh || -f ${S}/configure ]] && dirs+=( "${S}" ) + else + [[ ${#dirs[@]} -eq 0 ]] && dirs+=( "${S}" ) + dirs=( $(find "${dirs[@]}" '(' -name ltmain.sh -o -name configure ')' -printf '%h\n' | sort -u) ) + fi + + local d p ret + for d in "${dirs[@]}" ; do + ELT_APPLIED_PATCHES= + + if [[ -f ${d}/.elibtoolized ]] ; then + ${force} || continue + fi + + local outfunc="einfo" + [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn" + ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/" + if [[ ${outfunc} == "ewarn" ]] ; then + ewarn " We've already been run in this tree; you should" + ewarn " avoid this if possible (perhaps by filing a bug)" + fi + + # patching ltmain.sh + [[ -f ${d}/ltmain.sh ]] && + for p in ${elt_patches} ; do + ret=0 + + case ${p} in + portage) + # Stupid test to see if its already applied ... + if ! grep -qs 'We do not want portage' "${d}/ltmain.sh" ; then + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + fi + ;; + rem-int-dep) + ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}" + ret=$? + ;; + fix-relink) + # Do not apply if we do not have the relink patch applied ... + if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" ; then + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + fi + ;; + max_cmd_len) + # Do not apply if $max_cmd_len is not used ... + if grep -qs 'max_cmd_len' "${d}/ltmain.sh" ; then + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + fi + ;; + as-needed) + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + ;; + uclibc-ltconf) + # Newer libtoolize clears ltconfig, as not used anymore + if [[ -s ${d}/ltconfig ]] ; then + ELT_walk_patches "${d}/ltconfig" "${p}" + ret=$? + fi + ;; + fbsd-ltconf) + if [[ -s ${d}/ltconfig ]] ; then + ELT_walk_patches "${d}/ltconfig" "${p}" + ret=$? + fi + ;; + darwin-ltconf) + # Newer libtoolize clears ltconfig, as not used anymore + if [[ -s ${d}/ltconfig ]] ; then + ELT_walk_patches "${d}/ltconfig" "${p}" + ret=$? + fi + ;; + darwin-ltmain) + # special case to avoid false positives (failing to apply + # ltmain.sh path message), newer libtools have this patch + # built in, so not much to patch around then + if [[ -e ${d}/ltmain.sh ]] && \ + ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh" ; then + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + fi + ;; + install-sh) + ELT_walk_patches "${d}/install-sh" "${p}" + ret=$? + ;; + cross) + if [[ ${CBUILD:-${CHOST}} != ${CHOST} ]] ; then + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + fi + ;; + *) + ELT_walk_patches "${d}/ltmain.sh" "${p}" + ret=$? + ;; + esac + + if [[ ${ret} -ne 0 ]] ; then + case ${p} in + relink) + local version=$(ELT_libtool_version "${d}/ltmain.sh") + # Critical patch, but could be applied ... + # FIXME: Still need a patch for ltmain.sh > 1.4.0 + if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && \ + [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then + ewarn " Could not apply relink.patch!" + fi + ;; + portage) + # Critical patch - for this one we abort, as it can really + # cause breakage without it applied! + if [[ ${do_portage} == "yes" ]] ; then + # Stupid test to see if its already applied ... + if ! grep -qs 'We do not want portage' "${d}/ltmain.sh" ; then + echo + eerror "Portage patch requested, but failed to apply!" + eerror "Please file a bug report to add a proper patch." + die "Portage patch requested, but failed to apply!" + fi + else + if grep -qs 'We do not want portage' "${d}/ltmain.sh" ; then + # ewarn " Portage patch seems to be already applied." + # ewarn " Please verify that it is not needed." + : + else + local version=$(ELT_libtool_version "${d}"/ltmain.sh) + echo + eerror "Portage patch failed to apply (ltmain.sh version ${version})!" + die "Please file a bug report to add a proper patch." + fi + # We do not want to run libtoolize ... + ELT_APPLIED_PATCHES="portage" + fi + ;; + darwin-*) + [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!" + ;; + esac + fi + done + + # makes sense for ltmain.sh patches only + [[ -f ${d}/ltmain.sh ]] && + if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then + if [[ ${do_portage} == "no" && \ + ${do_reversedeps} == "no" && \ + ${do_only_patches} == "no" && \ + ${deptoremove} == "" ]] + then + die "Cannot apply any patches, please file a bug about this" + fi + fi + + # patching configure + [[ -f ${d}/configure ]] && + for p in ${elt_patches} ; do + ret=0 + + case ${p} in + uclibc-conf) + if grep -qs 'Transform linux' "${d}/configure" ; then + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + fi + ;; + fbsd-conf) + if grep -qs 'version_type=freebsd-' "${d}/configure" ; then + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + fi + ;; + darwin-conf) + if grep -qs '&& echo \.so ||' "${d}/configure" ; then + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + fi + ;; + aixrtl|hpux-conf) + ret=1 + local subret=0 + # apply multiple patches as often as they match + while [[ $subret -eq 0 ]]; do + subret=1 + if [[ -e ${d}/configure ]]; then + ELT_walk_patches "${d}/configure" "${p}" + subret=$? + fi + if [[ $subret -eq 0 ]]; then + # have at least one patch succeeded. + ret=0 + fi + done + ;; + mint-conf|gold-conf|sol2-conf) + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + ;; + target-nm) + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + ;; + ppc64le) + ELT_walk_patches "${d}/configure" "${p}" + ret=$? + ;; + *) + # ltmain.sh patches are applied above + ;; + esac + + if [[ ${ret} -ne 0 ]] ; then + case ${p} in + uclibc-*) + [[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!" + ;; + fbsd-*) + if [[ ${CHOST} == *-freebsd* ]] ; then + if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \ + "${d}/configure" 2>/dev/null) ]]; then + die " FreeBSD patch set '${p}' failed to apply!" + fi + fi + ;; + darwin-*) + [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!" + ;; + esac + fi + done + + rm -f "${d}/libtool" + + echo "${ELT_APPLIED_PATCHES}" > "${d}/.elibtoolized" + done +} + +# char *VER_major(string) +# +# Return the Major (X of X.Y.Z) version +# +VER_major() { + [[ -z $1 ]] && return 1 + + local VER=$@ + echo "${VER%%[^[:digit:]]*}" +} + +# char *VER_minor(string) +# +# Return the Minor (Y of X.Y.Z) version +# +VER_minor() { + [[ -z $1 ]] && return 1 + + local VER=$@ + VER=${VER#*.} + echo "${VER%%[^[:digit:]]*}" +} + +# char *VER_micro(string) +# +# Return the Micro (Z of X.Y.Z) version. +# +VER_micro() { + [[ -z $1 ]] && return 1 + + local VER=$@ + VER=${VER#*.*.} + echo "${VER%%[^[:digit:]]*}" +} + +# int VER_to_int(string) +# +# Convert a string type version (2.4.0) to an int (132096) +# for easy compairing or versions ... +# +VER_to_int() { + [[ -z $1 ]] && return 1 + + local VER_MAJOR=$(VER_major "$1") + local VER_MINOR=$(VER_minor "$1") + local VER_MICRO=$(VER_micro "$1") + local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )) + + # We make version 1.0.0 the minimum version we will handle as + # a sanity check ... if its less, we fail ... + if [[ ${VER_int} -ge 65536 ]] ; then + echo "${VER_int}" + return 0 + fi + + echo 1 + return 1 +} + +elibtoolize "${@}" +exit 0 diff --git a/aixrtl/1.5.0-cmds-c b/patches/aixrtl/1.5.0-cmds-c similarity index 100% rename from aixrtl/1.5.0-cmds-c rename to patches/aixrtl/1.5.0-cmds-c diff --git a/aixrtl/1.5.0-cmds-cxx b/patches/aixrtl/1.5.0-cmds-cxx similarity index 100% rename from aixrtl/1.5.0-cmds-cxx rename to patches/aixrtl/1.5.0-cmds-cxx diff --git a/aixrtl/1.5.0-expsym-c b/patches/aixrtl/1.5.0-expsym-c similarity index 100% rename from aixrtl/1.5.0-expsym-c rename to patches/aixrtl/1.5.0-expsym-c diff --git a/aixrtl/1.5.0-expsym-cxx b/patches/aixrtl/1.5.0-expsym-cxx similarity index 100% rename from aixrtl/1.5.0-expsym-cxx rename to patches/aixrtl/1.5.0-expsym-cxx diff --git a/aixrtl/1.5.0-noundef-c b/patches/aixrtl/1.5.0-noundef-c similarity index 100% rename from aixrtl/1.5.0-noundef-c rename to patches/aixrtl/1.5.0-noundef-c diff --git a/aixrtl/1.5.0-noundef-cxx b/patches/aixrtl/1.5.0-noundef-cxx similarity index 100% rename from aixrtl/1.5.0-noundef-cxx rename to patches/aixrtl/1.5.0-noundef-cxx diff --git a/aixrtl/1.5.0-soname b/patches/aixrtl/1.5.0-soname similarity index 100% rename from aixrtl/1.5.0-soname rename to patches/aixrtl/1.5.0-soname diff --git a/aixrtl/1.5.0-usertl-c b/patches/aixrtl/1.5.0-usertl-c similarity index 100% rename from aixrtl/1.5.0-usertl-c rename to patches/aixrtl/1.5.0-usertl-c diff --git a/aixrtl/1.5.0-usertl-cxx b/patches/aixrtl/1.5.0-usertl-cxx similarity index 100% rename from aixrtl/1.5.0-usertl-cxx rename to patches/aixrtl/1.5.0-usertl-cxx diff --git a/aixrtl/1.5.22-cmds-c b/patches/aixrtl/1.5.22-cmds-c similarity index 100% rename from aixrtl/1.5.22-cmds-c rename to patches/aixrtl/1.5.22-cmds-c diff --git a/aixrtl/1.5.22-cmds-cxx b/patches/aixrtl/1.5.22-cmds-cxx similarity index 100% rename from aixrtl/1.5.22-cmds-cxx rename to patches/aixrtl/1.5.22-cmds-cxx diff --git a/aixrtl/2.0.0-fpic-c b/patches/aixrtl/2.0.0-fpic-c similarity index 100% rename from aixrtl/2.0.0-fpic-c rename to patches/aixrtl/2.0.0-fpic-c diff --git a/aixrtl/2.0.0-fpic-cxx b/patches/aixrtl/2.0.0-fpic-cxx similarity index 100% rename from aixrtl/2.0.0-fpic-cxx rename to patches/aixrtl/2.0.0-fpic-cxx diff --git a/aixrtl/2.2.0-cmds-c b/patches/aixrtl/2.2.0-cmds-c similarity index 100% rename from aixrtl/2.2.0-cmds-c rename to patches/aixrtl/2.2.0-cmds-c diff --git a/aixrtl/2.2.0-cmds-cxx b/patches/aixrtl/2.2.0-cmds-cxx similarity index 100% rename from aixrtl/2.2.0-cmds-cxx rename to patches/aixrtl/2.2.0-cmds-cxx diff --git a/aixrtl/2.2.0-expsym-c b/patches/aixrtl/2.2.0-expsym-c similarity index 100% rename from aixrtl/2.2.0-expsym-c rename to patches/aixrtl/2.2.0-expsym-c diff --git a/aixrtl/2.2.0-expsym-cxx b/patches/aixrtl/2.2.0-expsym-cxx similarity index 100% rename from aixrtl/2.2.0-expsym-cxx rename to patches/aixrtl/2.2.0-expsym-cxx diff --git a/aixrtl/2.2.0-noundef-c b/patches/aixrtl/2.2.0-noundef-c similarity index 100% rename from aixrtl/2.2.0-noundef-c rename to patches/aixrtl/2.2.0-noundef-c diff --git a/aixrtl/2.2.0-noundef-cxx b/patches/aixrtl/2.2.0-noundef-cxx similarity index 100% rename from aixrtl/2.2.0-noundef-cxx rename to patches/aixrtl/2.2.0-noundef-cxx diff --git a/aixrtl/2.2.0-usertl-cxx b/patches/aixrtl/2.2.0-usertl-cxx similarity index 100% rename from aixrtl/2.2.0-usertl-cxx rename to patches/aixrtl/2.2.0-usertl-cxx diff --git a/aixrtl/2.2.8-cmds-c b/patches/aixrtl/2.2.8-cmds-c similarity index 100% rename from aixrtl/2.2.8-cmds-c rename to patches/aixrtl/2.2.8-cmds-c diff --git a/aixrtl/2.2.8-cmds-cxx b/patches/aixrtl/2.2.8-cmds-cxx similarity index 100% rename from aixrtl/2.2.8-cmds-cxx rename to patches/aixrtl/2.2.8-cmds-cxx diff --git a/aixrtl/2.4.0-expsym-c b/patches/aixrtl/2.4.0-expsym-c similarity index 100% rename from aixrtl/2.4.0-expsym-c rename to patches/aixrtl/2.4.0-expsym-c diff --git a/aixrtl/2.4.0-expsym-cxx b/patches/aixrtl/2.4.0-expsym-cxx similarity index 100% rename from aixrtl/2.4.0-expsym-cxx rename to patches/aixrtl/2.4.0-expsym-cxx diff --git a/aixrtl/2.4.2.418-cmds-c b/patches/aixrtl/2.4.2.418-cmds-c similarity index 100% rename from aixrtl/2.4.2.418-cmds-c rename to patches/aixrtl/2.4.2.418-cmds-c diff --git a/aixrtl/2.4.2.418-cmds-cxx b/patches/aixrtl/2.4.2.418-cmds-cxx similarity index 100% rename from aixrtl/2.4.2.418-cmds-cxx rename to patches/aixrtl/2.4.2.418-cmds-cxx diff --git a/aixrtl/2.4.2.418-soname b/patches/aixrtl/2.4.2.418-soname similarity index 100% rename from aixrtl/2.4.2.418-soname rename to patches/aixrtl/2.4.2.418-soname diff --git a/aixrtl/2.4.4-expsym-c b/patches/aixrtl/2.4.4-expsym-c similarity index 100% rename from aixrtl/2.4.4-expsym-c rename to patches/aixrtl/2.4.4-expsym-c diff --git a/aixrtl/2.4.4-expsym-cxx b/patches/aixrtl/2.4.4-expsym-cxx similarity index 100% rename from aixrtl/2.4.4-expsym-cxx rename to patches/aixrtl/2.4.4-expsym-cxx diff --git a/aixrtl/2.4.4-with-svr4 b/patches/aixrtl/2.4.4-with-svr4 similarity index 100% rename from aixrtl/2.4.4-with-svr4 rename to patches/aixrtl/2.4.4-with-svr4 diff --git a/as-needed/1.5 b/patches/as-needed/1.5 similarity index 100% rename from as-needed/1.5 rename to patches/as-needed/1.5 diff --git a/as-needed/1.5.26 b/patches/as-needed/1.5.26 similarity index 100% rename from as-needed/1.5.26 rename to patches/as-needed/1.5.26 diff --git a/as-needed/2.2.6 b/patches/as-needed/2.2.6 similarity index 100% rename from as-needed/2.2.6 rename to patches/as-needed/2.2.6 diff --git a/as-needed/2.4.2 b/patches/as-needed/2.4.2 similarity index 100% rename from as-needed/2.4.2 rename to patches/as-needed/2.4.2 diff --git a/as-needed/2.4.3 b/patches/as-needed/2.4.3 similarity index 100% rename from as-needed/2.4.3 rename to patches/as-needed/2.4.3 diff --git a/cross/2.2 b/patches/cross/2.2 similarity index 100% rename from cross/2.2 rename to patches/cross/2.2 diff --git a/cross/2.4 b/patches/cross/2.4 similarity index 100% rename from cross/2.4 rename to patches/cross/2.4 diff --git a/cross/2.4.3 b/patches/cross/2.4.3 similarity index 100% rename from cross/2.4.3 rename to patches/cross/2.4.3 diff --git a/darwin-conf/1.5 b/patches/darwin-conf/1.5 similarity index 100% rename from darwin-conf/1.5 rename to patches/darwin-conf/1.5 diff --git a/darwin-conf/1.5b b/patches/darwin-conf/1.5b similarity index 100% rename from darwin-conf/1.5b rename to patches/darwin-conf/1.5b diff --git a/darwin-conf/2.2.4 b/patches/darwin-conf/2.2.4 similarity index 100% rename from darwin-conf/2.2.4 rename to patches/darwin-conf/2.2.4 diff --git a/darwin-conf/2.2.6 b/patches/darwin-conf/2.2.6 similarity index 100% rename from darwin-conf/2.2.6 rename to patches/darwin-conf/2.2.6 diff --git a/darwin-conf/2.4.6 b/patches/darwin-conf/2.4.6 similarity index 100% rename from darwin-conf/2.4.6 rename to patches/darwin-conf/2.4.6 diff --git a/darwin-ltconf/1.2.0 b/patches/darwin-ltconf/1.2.0 similarity index 100% rename from darwin-ltconf/1.2.0 rename to patches/darwin-ltconf/1.2.0 diff --git a/darwin-ltconf/1.3.0 b/patches/darwin-ltconf/1.3.0 similarity index 100% rename from darwin-ltconf/1.3.0 rename to patches/darwin-ltconf/1.3.0 diff --git a/darwin-ltmain/1.2.0 b/patches/darwin-ltmain/1.2.0 similarity index 100% rename from darwin-ltmain/1.2.0 rename to patches/darwin-ltmain/1.2.0 diff --git a/darwin-ltmain/1.3.0 b/patches/darwin-ltmain/1.3.0 similarity index 100% rename from darwin-ltmain/1.3.0 rename to patches/darwin-ltmain/1.3.0 diff --git a/deplibs/1.5 b/patches/deplibs/1.5 similarity index 100% rename from deplibs/1.5 rename to patches/deplibs/1.5 diff --git a/deplibs/2.1b b/patches/deplibs/2.1b similarity index 100% rename from deplibs/2.1b rename to patches/deplibs/2.1b diff --git a/fbsd-conf/00broken-libglade b/patches/fbsd-conf/00broken-libglade similarity index 100% rename from fbsd-conf/00broken-libglade rename to patches/fbsd-conf/00broken-libglade diff --git a/fbsd-conf/1.4.0 b/patches/fbsd-conf/1.4.0 similarity index 100% rename from fbsd-conf/1.4.0 rename to patches/fbsd-conf/1.4.0 diff --git a/fbsd-conf/1.5.10 b/patches/fbsd-conf/1.5.10 similarity index 100% rename from fbsd-conf/1.5.10 rename to patches/fbsd-conf/1.5.10 diff --git a/fbsd-conf/1.5.18 b/patches/fbsd-conf/1.5.18 similarity index 100% rename from fbsd-conf/1.5.18 rename to patches/fbsd-conf/1.5.18 diff --git a/fbsd-conf/1.5.20 b/patches/fbsd-conf/1.5.20 similarity index 100% rename from fbsd-conf/1.5.20 rename to patches/fbsd-conf/1.5.20 diff --git a/fbsd-conf/1.5.20b b/patches/fbsd-conf/1.5.20b similarity index 100% rename from fbsd-conf/1.5.20b rename to patches/fbsd-conf/1.5.20b diff --git a/fbsd-conf/1.9f b/patches/fbsd-conf/1.9f similarity index 100% rename from fbsd-conf/1.9f rename to patches/fbsd-conf/1.9f diff --git a/fbsd-ltconf/1.2.0 b/patches/fbsd-ltconf/1.2.0 similarity index 100% rename from fbsd-ltconf/1.2.0 rename to patches/fbsd-ltconf/1.2.0 diff --git a/fbsd-ltconf/1.3.0 b/patches/fbsd-ltconf/1.3.0 similarity index 100% rename from fbsd-ltconf/1.3.0 rename to patches/fbsd-ltconf/1.3.0 diff --git a/fbsd-ltconf/1.4a b/patches/fbsd-ltconf/1.4a similarity index 100% rename from fbsd-ltconf/1.4a rename to patches/fbsd-ltconf/1.4a diff --git a/fbsd-ltconf/1.4a-GCC3.0 b/patches/fbsd-ltconf/1.4a-GCC3.0 similarity index 100% rename from fbsd-ltconf/1.4a-GCC3.0 rename to patches/fbsd-ltconf/1.4a-GCC3.0 diff --git a/fix-relink/1.4.0 b/patches/fix-relink/1.4.0 similarity index 100% rename from fix-relink/1.4.0 rename to patches/fix-relink/1.4.0 diff --git a/fix-relink/1.4.3 b/patches/fix-relink/1.4.3 similarity index 100% rename from fix-relink/1.4.3 rename to patches/fix-relink/1.4.3 diff --git a/fix-relink/1.5.0 b/patches/fix-relink/1.5.0 similarity index 100% rename from fix-relink/1.5.0 rename to patches/fix-relink/1.5.0 diff --git a/gold-conf/2.2.6 b/patches/gold-conf/2.2.6 similarity index 100% rename from gold-conf/2.2.6 rename to patches/gold-conf/2.2.6 diff --git a/hardcode-relink/1.3d b/patches/hardcode-relink/1.3d similarity index 100% rename from hardcode-relink/1.3d rename to patches/hardcode-relink/1.3d diff --git a/hardcode/1.3d b/patches/hardcode/1.3d similarity index 100% rename from hardcode/1.3d rename to patches/hardcode/1.3d diff --git a/hardcode/2.1b b/patches/hardcode/2.1b similarity index 100% rename from hardcode/2.1b rename to patches/hardcode/2.1b diff --git a/hc-flag-ld/1.5 b/patches/hc-flag-ld/1.5 similarity index 100% rename from hc-flag-ld/1.5 rename to patches/hc-flag-ld/1.5 diff --git a/hpux-conf/1.5.22-syslibpath b/patches/hpux-conf/1.5.22-syslibpath similarity index 100% rename from hpux-conf/1.5.22-syslibpath rename to patches/hpux-conf/1.5.22-syslibpath diff --git a/install-sh/1.5 b/patches/install-sh/1.5 similarity index 100% rename from install-sh/1.5 rename to patches/install-sh/1.5 diff --git a/install-sh/1.5.4 b/patches/install-sh/1.5.4 similarity index 100% rename from install-sh/1.5.4 rename to patches/install-sh/1.5.4 diff --git a/install-sh/1.5.6 b/patches/install-sh/1.5.6 similarity index 100% rename from install-sh/1.5.6 rename to patches/install-sh/1.5.6 diff --git a/irix-ltmain/2.2.6 b/patches/irix-ltmain/2.2.6 similarity index 100% rename from irix-ltmain/2.2.6 rename to patches/irix-ltmain/2.2.6 diff --git a/ltmain/1.5 b/patches/ltmain/1.5 similarity index 100% rename from ltmain/1.5 rename to patches/ltmain/1.5 diff --git a/max_cmd_len/1.5.0 b/patches/max_cmd_len/1.5.0 similarity index 100% rename from max_cmd_len/1.5.0 rename to patches/max_cmd_len/1.5.0 diff --git a/max_cmd_len/1.5.14 b/patches/max_cmd_len/1.5.14 similarity index 100% rename from max_cmd_len/1.5.14 rename to patches/max_cmd_len/1.5.14 diff --git a/max_cmd_len/1.5.20 b/patches/max_cmd_len/1.5.20 similarity index 100% rename from max_cmd_len/1.5.20 rename to patches/max_cmd_len/1.5.20 diff --git a/mint-conf/2.2.6 b/patches/mint-conf/2.2.6 similarity index 100% rename from mint-conf/2.2.6 rename to patches/mint-conf/2.2.6 diff --git a/no-lc/1.3d b/patches/no-lc/1.3d similarity index 100% rename from no-lc/1.3d rename to patches/no-lc/1.3d diff --git a/no-lc/1.5.22 b/patches/no-lc/1.5.22 similarity index 100% rename from no-lc/1.5.22 rename to patches/no-lc/1.5.22 diff --git a/nocxx/nocxx-2.64.patch b/patches/nocxx/nocxx-2.64.patch similarity index 100% rename from nocxx/nocxx-2.64.patch rename to patches/nocxx/nocxx-2.64.patch diff --git a/nocxx/nocxx.patch b/patches/nocxx/nocxx.patch similarity index 100% rename from nocxx/nocxx.patch rename to patches/nocxx/nocxx.patch diff --git a/portage/1.2.0 b/patches/portage/1.2.0 similarity index 100% rename from portage/1.2.0 rename to patches/portage/1.2.0 diff --git a/portage/1.3.0c b/patches/portage/1.3.0c similarity index 100% rename from portage/1.3.0c rename to patches/portage/1.3.0c diff --git a/portage/1.3.3 b/patches/portage/1.3.3 similarity index 100% rename from portage/1.3.3 rename to patches/portage/1.3.3 diff --git a/portage/1.4.0 b/patches/portage/1.4.0 similarity index 100% rename from portage/1.4.0 rename to patches/portage/1.4.0 diff --git a/portage/1.5.10 b/patches/portage/1.5.10 similarity index 100% rename from portage/1.5.10 rename to patches/portage/1.5.10 diff --git a/portage/2.2 b/patches/portage/2.2 similarity index 100% rename from portage/2.2 rename to patches/portage/2.2 diff --git a/ppc64le/2.4.2 b/patches/ppc64le/2.4.2 similarity index 100% rename from ppc64le/2.4.2 rename to patches/ppc64le/2.4.2 diff --git a/ppc64le/2.4.4 b/patches/ppc64le/2.4.4 similarity index 100% rename from ppc64le/2.4.4 rename to patches/ppc64le/2.4.4 diff --git a/relink-prog/1.3d b/patches/relink-prog/1.3d similarity index 100% rename from relink-prog/1.3d rename to patches/relink-prog/1.3d diff --git a/relink-prog/2.1b b/patches/relink-prog/2.1b similarity index 100% rename from relink-prog/2.1b rename to patches/relink-prog/2.1b diff --git a/relink/1.4.0a b/patches/relink/1.4.0a similarity index 100% rename from relink/1.4.0a rename to patches/relink/1.4.0a diff --git a/relink/1.4.0a-GCC3.0-1 b/patches/relink/1.4.0a-GCC3.0-1 similarity index 100% rename from relink/1.4.0a-GCC3.0-1 rename to patches/relink/1.4.0a-GCC3.0-1 diff --git a/relink/1.4.0a-GCC3.0-2 b/patches/relink/1.4.0a-GCC3.0-2 similarity index 100% rename from relink/1.4.0a-GCC3.0-2 rename to patches/relink/1.4.0a-GCC3.0-2 diff --git a/relink/1.4.1 b/patches/relink/1.4.1 similarity index 100% rename from relink/1.4.1 rename to patches/relink/1.4.1 diff --git a/relink/1.4.2 b/patches/relink/1.4.2 similarity index 100% rename from relink/1.4.2 rename to patches/relink/1.4.2 diff --git a/relink/1.4.3 b/patches/relink/1.4.3 similarity index 100% rename from relink/1.4.3 rename to patches/relink/1.4.3 diff --git a/rem-int-dep/1.3.5 b/patches/rem-int-dep/1.3.5 similarity index 100% rename from rem-int-dep/1.3.5 rename to patches/rem-int-dep/1.3.5 diff --git a/sed/1.3.4 b/patches/sed/1.3.4 similarity index 100% rename from sed/1.3.4 rename to patches/sed/1.3.4 diff --git a/sed/1.4.0 b/patches/sed/1.4.0 similarity index 100% rename from sed/1.4.0 rename to patches/sed/1.4.0 diff --git a/sed/1.5.6 b/patches/sed/1.5.6 similarity index 100% rename from sed/1.5.6 rename to patches/sed/1.5.6 diff --git a/sol2-conf/2.4.2 b/patches/sol2-conf/2.4.2 similarity index 100% rename from sol2-conf/2.4.2 rename to patches/sol2-conf/2.4.2 diff --git a/sol2-ltmain/2.4.2 b/patches/sol2-ltmain/2.4.2 similarity index 100% rename from sol2-ltmain/2.4.2 rename to patches/sol2-ltmain/2.4.2 diff --git a/sys-lib-dlsearch/2.4 b/patches/sys-lib-dlsearch/2.4 similarity index 100% rename from sys-lib-dlsearch/2.4 rename to patches/sys-lib-dlsearch/2.4 diff --git a/target-nm/2.4.2 b/patches/target-nm/2.4.2 similarity index 100% rename from target-nm/2.4.2 rename to patches/target-nm/2.4.2 diff --git a/test/1.4.0 b/patches/test/1.4.0 similarity index 100% rename from test/1.4.0 rename to patches/test/1.4.0 diff --git a/test/1.4.2 b/patches/test/1.4.2 similarity index 100% rename from test/1.4.2 rename to patches/test/1.4.2 diff --git a/tmp/1.3.5 b/patches/tmp/1.3.5 similarity index 100% rename from tmp/1.3.5 rename to patches/tmp/1.3.5 diff --git a/uclibc-conf/1.2.0 b/patches/uclibc-conf/1.2.0 similarity index 100% rename from uclibc-conf/1.2.0 rename to patches/uclibc-conf/1.2.0 diff --git a/uclibc-conf/1.3.0c b/patches/uclibc-conf/1.3.0c similarity index 100% rename from uclibc-conf/1.3.0c rename to patches/uclibc-conf/1.3.0c diff --git a/uclibc-ltconf/1.2.0 b/patches/uclibc-ltconf/1.2.0 similarity index 100% rename from uclibc-ltconf/1.2.0 rename to patches/uclibc-ltconf/1.2.0 diff --git a/uclibc-ltconf/1.3.0 b/patches/uclibc-ltconf/1.3.0 similarity index 100% rename from uclibc-ltconf/1.3.0 rename to patches/uclibc-ltconf/1.3.0