Commit f28af782 authored by Yann E. MORIN's avatar Yann E. MORIN Committed by Peter Korsgaard
Browse files

package/mono: fix install with parallel builds

Due to a race in the 'install' utility, installing the same file twice
in parallel often results in one of the install calls to fail.

Ensure proper ordering of conflicting rules.

Fixes:
    http://autobuild.buildroot.org/results/c32/c3288c5d1fb94474f14a4a889e76135878d403bc/
    http://autobuild.buildroot.org/results/f70/f708e89f613ec0b42cdf49ccbef39b02f4a271fb/
    http://autobuild.buildroot.org/results/3cb/3cb99e5c5672cbaa2a86020129a05dfde47cdb8f/


    ...

Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Angelo Compagnucci <angelo.compagnucci@gmail.com>
Signed-off-by: default avatarPeter Korsgaard <peter@korsgaard.com>
parent 01dfbb48
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
mcs: fix installation with parallel make

In mcs/ the install of xbuild_12 and xbuild_14 will end-up installing
the same files:
    ${NETFRAMEWORK_DIR}/v2.0/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v3.0/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v3.5/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v4.0/Profile/Client/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v4.0/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v4.5.1/RedistList/FrameworkList.xml
    ${NETFRAMEWORK_DIR}/v4.5/RedistList/FrameworkList.xml

This is because there is no atomicity when installing each file, and
xbuild_12 and xbuild_14 may well run in parallel, each trying to install
each of those files; but the 'install' utility will first check if the
target file exists or not, and behaves differently if it does than if it
does not, thus leading to build failures like so:
    http://autobuild.buildroot.org/results/c32/c3288c5d1fb94474f14a4a889e76135878d403bc/build-end.log

So, ensure ordering of the install of xbuild_12 and xbuild_14 (the
ordering is completely arbitrary, either way gives the same installed
files).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Angelo Compagnucci <angelo.compagnucci@gmail.com>

diff -durN host-mono-4.0.0.orig/mcs/Makefile host-mono-4.0.0/mcs/Makefile
--- host-mono-4.0.0.orig/mcs/Makefile	2015-04-09 16:55:53.000000000 +0200
+++ host-mono-4.0.0/mcs/Makefile	2015-05-16 17:25:44.475542483 +0200
@@ -43,6 +43,10 @@
 profile-do--%:
 	$(MAKE) PROFILE=$(subst --, ,$*)
 
+# xbuild_12 and xbuild_14 will try to install the same files, so they need
+# to be ordered
+profile-do--xbuild_14--install: profile-do--xbuild_12--install
+
 # We don't want to run the tests in parallel.  We want behaviour like -k.
 profiles-do--run-test:
 	ret=:; $(foreach p,$(PROFILES), { $(MAKE) PROFILE=$(p) run-test || ret=false; }; ) $$ret