diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-10-05 14:17:23 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-10-18 12:13:46 +0100 |
commit | c0bf72308911a8d1c23f43d60788d82aff453883 (patch) | |
tree | 430e6ca3f76c0c046233b340d8aa77a243109973 /meta/classes/autotools.bbclass | |
parent | 81be7c898b01afcf61b019466306fa776b1e6334 (diff) | |
download | poky-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.bbclass | 22 |
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 |