summaryrefslogtreecommitdiffstats
path: root/meta/classes/autotools.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-10-05 14:17:23 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-10-18 12:13:46 +0100
commitc0bf72308911a8d1c23f43d60788d82aff453883 (patch)
tree430e6ca3f76c0c046233b340d8aa77a243109973 /meta/classes/autotools.bbclass
parent81be7c898b01afcf61b019466306fa776b1e6334 (diff)
downloadpoky-c0bf72308911a8d1c23f43d60788d82aff453883.tar.gz
autotools: Fix race over aclocal macro directory
The previous steps taken to address races over the aclocal macro directory and the removal of files hasn't been sufficient since aclocal still looks at that directory as part of its default search path. This patch passes the aclocal-copy directory into aclocal as its system directory, removing any chance of it accessing the original aclocal directory. Hopefully this should therefore fix the race issues once and for all. In order to do this, cp-noerror needs to not error if the directory already exists. Its also been noticed that aclocal defaults to using STAGING_DATADIR_NATIVE even when building for the target. Only using the target directory would cause errors such as missing pkgconfig macros (since we only depend on pkgconfig-native, not pkgconfig). This patch processes both sets of macros maintaining existing behaviour. At a future date we could look into potentially optimsing this. [YOCTO #3216] (From OE-Core rev: ad29b331e0d61708e68ef772cdb19154956fa67e) (From OE-Core rev: f362cc419e5a480acd16c71c802636dbedc932d9) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/autotools.bbclass')
-rw-r--r--meta/classes/autotools.bbclass22
1 files changed, 13 insertions, 9 deletions
diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass
index e4e034b623..7c99bbdbac 100644
--- a/meta/classes/autotools.bbclass
+++ b/meta/classes/autotools.bbclass
@@ -127,10 +127,11 @@ autotools_do_configure() {
127 cd ${S} 127 cd ${S}
128 # Remove any previous copy of the m4 macros 128 # Remove any previous copy of the m4 macros
129 rm -rf ${B}/aclocal-copy/ 129 rm -rf ${B}/aclocal-copy/
130 ACLOCAL="aclocal --system-acdir=${B}/aclocal-copy/"
130 if [ x"${acpaths}" = xdefault ]; then 131 if [ x"${acpaths}" = xdefault ]; then
131 acpaths= 132 acpaths=
132 for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \ 133 for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \
133 grep -v 'acinclude.m4' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do 134 grep -v 'acinclude.m4' | grep -v 'aclocal-copy' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do
134 acpaths="$acpaths -I $i" 135 acpaths="$acpaths -I $i"
135 done 136 done
136 else 137 else
@@ -140,16 +141,19 @@ autotools_do_configure() {
140 automake --version 141 automake --version
141 echo "AUTOV is $AUTOV" 142 echo "AUTOV is $AUTOV"
142 if [ -d ${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV ]; then 143 if [ -d ${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV ]; then
143 acpaths="$acpaths -I${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV" 144 ACLOCAL="$ACLOCAL --automake-acdir=${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV"
144 fi 145 fi
145 # The aclocal directory could get modified by other processes 146 # The aclocal directory could get modified by other processes
146 # uninstalling data from the sysroot. See Yocto #861 for details. 147 # uninstalling data from the sysroot. See Yocto #861 for details.
147 # We avoid this by taking a copy here and then files cannot disappear. 148 # We avoid this by taking a copy here and then files cannot disappear.
148 if [ -d ${STAGING_DATADIR}/aclocal ]; then 149 # We copy native first, then target. This avoids certain races since cp-noerror
149 # for scratch build this directory can be empty 150 # won't overwrite existing files.
150 # so avoid cp's no files to copy error 151 mkdir -p ${B}/aclocal-copy/
151 cp-noerror ${STAGING_DATADIR}/aclocal ${B}/aclocal-copy/ 152 if [ -d ${STAGING_DATADIR_NATIVE}/aclocal ]; then
152 acpaths="$acpaths -I ${B}/aclocal-copy/" 153 cp-noerror ${STAGING_DATADIR_NATIVE}/aclocal/ ${B}/aclocal-copy/
154 fi
155 if [ -d ${STAGING_DATADIR}/aclocal -a "${STAGING_DATADIR_NATIVE}/aclocal" != "${STAGING_DATADIR}/aclocal" ]; then
156 cp-noerror ${STAGING_DATADIR}/aclocal/ ${B}/aclocal-copy/
153 fi 157 fi
154 # autoreconf is too shy to overwrite aclocal.m4 if it doesn't look 158 # autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
155 # like it was auto-generated. Work around this by blowing it away 159 # like it was auto-generated. Work around this by blowing it away
@@ -184,8 +188,8 @@ autotools_do_configure() {
184 bbnote Executing intltoolize --copy --force --automake 188 bbnote Executing intltoolize --copy --force --automake
185 intltoolize --copy --force --automake 189 intltoolize --copy --force --automake
186 fi 190 fi
187 bbnote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths 191 bbnote Executing ACLOCAL=\"$ACLOCAL\" autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
188 autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || bbfatal "autoreconf execution failed." 192 ACLOCAL="$ACLOCAL" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || bbfatal "autoreconf execution failed."
189 cd $olddir 193 cd $olddir
190 fi 194 fi
191 if [ -e ${S}/configure ]; then 195 if [ -e ${S}/configure ]; then