hc
2024-08-16 94ba65e25ce534ec0515708c9e0835242345bc7b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
fix parallel build issue
 
Build randomly fails since December 2017 on buildroot
(http://autobuild.buildroot.org/?reason=ecryptfs-utils-111):
 
make[5]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/ecryptfs-utils-111/src/utils'
  /bin/mkdir -p '/home/buildroot/autobuild/instance-2/output-1/target/sbin'
  /bin/bash ../../libtool   --mode=install /usr/bin/install -c mount.ecryptfs umount.ecryptfs mount.ecryptfs_private '/home/buildroot/autobuild/instance-2/output-1/target/sbin'
libtool: install: /usr/bin/install -c mount.ecryptfs /home/buildroot/autobuild/instance-2/output-1/target/sbin/mount.ecryptfs
/usr/bin/install: cannot create regular file '/home/buildroot/autobuild/instance-2/output-1/target/sbin/mount.ecryptfs': File exists
Makefile:832: recipe for target 'install-rootsbinPROGRAMS' failed
make[5]: *** [install-rootsbinPROGRAMS] Error 1
 
As spotted by Thomas Petazzoni, build failure happens because of the
following line in src/utils/Makefile.am:
 
install-exec-hook:      install-rootsbinPROGRAMS
        -rm -f "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private"
        $(LN_S) "mount.ecryptfs_private" "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private"
 
The install-exec-hook target should not have a dependency on
install-rootsbinPROGRAMS.
 
From https://www.gnu.org/software/automake/manual/html_node/Extending.html#Extending:
 
"""
In contrast, some rules also have a way to run another rule, called a
hook; hooks are always executed after the main rule’s work is done. The
hook is named after the principal target, with ‘-hook’ appended. The
targets allowing hooks are install-data, install-exec, uninstall, dist,
and distcheck.
 
For instance, here is how to create a hard link to an installed program:
 
install-exec-hook:
        ln $(DESTDIR)$(bindir)/program$(EXEEXT) \
           $(DESTDIR)$(bindir)/proglink$(EXEEXT)
 
"""
 
So, they explicitly say that these hooks are run after the main rule
work is done, which means the dependency on install-rootsbinPROGRAMS is
not needed. And the example they use to illustrate is *exactly* the
situation of ecryptfs-utils: creating a link to a program that was
installed.
 
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
[Upstream status: https://bugs.launchpad.net/ecryptfs/+bug/1857622]
 
diff -Nuar ecryptfs-utils-111-orig/src/utils/Makefile.in ecryptfs-utils-111/src/utils/Makefile.in
--- ecryptfs-utils-111-orig/src/utils/Makefile.in    2019-12-26 15:14:16.656146065 +0100
+++ ecryptfs-utils-111/src/utils/Makefile.in    2019-12-26 17:36:07.108496164 +0100
@@ -1522,7 +1522,7 @@
 .PRECIOUS: Makefile
 
 
-install-exec-hook:    install-rootsbinPROGRAMS
+install-exec-hook:
     -rm -f "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private"
     $(LN_S) "mount.ecryptfs_private" "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private"