core/pkg-autotools: don't use APPLY_PATCHES for libtool patches
authorRomain Naour <romain.naour@gmail.com>
Wed, 17 Aug 2016 16:01:08 +0000 (18:01 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Thu, 18 Aug 2016 21:52:47 +0000 (23:52 +0200)
Since [1] <package>-reconfigure target is broken.

$ make elementary-reconfigure
Applying buildroot-libtool-v2.4.4.patch using patch:
Error: duplicate filename 'buildroot-libtool-v2.4.4.patch'
Conflicting files are:
  already applied: buildroot/support/libtool/buildroot-libtool-v2.4.4.patch
  to be applied  : buildroot/support/libtool/buildroot-libtool-v2.4.4.patch

When a package uses AUTORECONF, the libtool patch can be applied a
second time on the same ltmain.sh in the same directory as the
<package>-reconfigure target is called. This is not a problem since
autoreconf will overwrite the previously patched files. But with the
check introduced by [1], apply-patches.sh throw an error when the
package is reconfigured since the libtool patch is already present in
.applied_patches_list.

In addition to this, the .applied_patches_list file generated by
apply-patches.sh while patching ltmain.sh is not in the top-level
package source directory. Instead a duplicated .applied_patches_list
is generated beside the patched ltmain.sh which can be in a
subdirectory.

As noticed by Arnout Vandecappelle [2], the apply-patches.sh script
doesn't bring anything for the libtool patches.

"apply_patches.sh does the following:

* It handles directories -> not needed here.
* It handles compressed patches and tarballs -> not needed.
* It handles series files -> not needed.
* It handles errors in case of multiple patches -> not needed since
it's only one patch.
* It detects errors based on *.rej files -> not needed since it's only
a single patch so patch exit code is OK.
* It writes the patch list -> for libtool, this is quite silly because
it will be written in the directory where ltmain.sh is found, not in the
top-level directory, so you have these patch lists spread over the
source tree."

So use patch directly rather than apply-patches.

[1] 19241598147e7555dce40b6dd44b28ef22b67ed9
[2] http://lists.busybox.net/pipermail/buildroot/2016-August/169810.html

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Tested-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/pkg-autotools.mk

index 75e2df001f78b0b20e97cf42ff6ec498067d87a4..d1cdb89fb565abf690da9a8e1e8bf87d379c381f 100644 (file)
@@ -65,14 +65,14 @@ define LIBTOOL_PATCH_HOOK
                ltmain_patchlevel=`sed -n '/^[ \t]*VERSION=/{s/^[ \t]*VERSION=//;p;q;}' $$i | \
                sed -e 's/\([0-9]*\.[0-9]*\.*\)\([0-9]*\).*/\2/' -e 's/\"//'`; \
                if test $${ltmain_version} = '1.5'; then \
-                       $(APPLY_PATCHES) $${i%/*} support/libtool buildroot-libtool-v1.5.patch; \
+                       patch -i support/libtool/buildroot-libtool-v1.5.patch $${i}; \
                elif test $${ltmain_version} = "2.2"; then\
-                       $(APPLY_PATCHES) $${i%/*} support/libtool buildroot-libtool-v2.2.patch; \
+                       patch -i support/libtool/buildroot-libtool-v2.2.patch $${i}; \
                elif test $${ltmain_version} = "2.4"; then\
                        if test $${ltmain_patchlevel:-0} -gt 2; then\
-                               $(APPLY_PATCHES) $${i%/*} support/libtool buildroot-libtool-v2.4.4.patch; \
+                               patch -i support/libtool/buildroot-libtool-v2.4.4.patch $${i}; \
                        else \
-                               $(APPLY_PATCHES) $${i%/*} support/libtool buildroot-libtool-v2.4.patch; \
+                               patch -i support/libtool/buildroot-libtool-v2.4.patch $${i}; \
                        fi \
                fi \
        done