mirror of
https://git.yoctoproject.org/poky
synced 2026-03-31 02:02:25 +02:00
gettext m4 macros don't use the usual versioning/serial mechanism used by aclocal. It therefore won't update them over and above any local version of the macro. Equally, we don't run gettextize due to it doing slightly crazy things to the build. When we put the aclocal directory as a -I option to aclocal, if this was found first compared to any recipe provided macros, the correct version of the gettext macro would still "win". With the switch so correctly override the system directory, older recipe provided macros may get used. This patch manually removes the problematic m4 macros in the case we're using gettext and need to use the correct m4 macros. This patch also always ensures the gettext manipulations happen, even in the -native case since missing or stale gettext files could cause build failures. (From OE-Core rev: e9645d2bbeabaa5251d49edd659ab320fd66d0ee) (From OE-Core rev: 841ea3c1c18e50e77fccbd5f44d6a79a50913b67) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
216 lines
7.3 KiB
Plaintext
216 lines
7.3 KiB
Plaintext
def autotools_dep_prepend(d):
|
|
if d.getVar('INHIBIT_AUTOTOOLS_DEPS', True):
|
|
return ''
|
|
|
|
pn = d.getVar('PN', True)
|
|
deps = ''
|
|
|
|
if pn in ['autoconf-native', 'automake-native', 'help2man-native']:
|
|
return deps
|
|
deps += 'autoconf-native automake-native '
|
|
|
|
if not pn in ['libtool', 'libtool-native'] and not pn.endswith("libtool-cross"):
|
|
deps += 'libtool-native '
|
|
if not bb.data.inherits_class('native', d) \
|
|
and not bb.data.inherits_class('nativesdk', d) \
|
|
and not bb.data.inherits_class('cross', d) \
|
|
and not d.getVar('INHIBIT_DEFAULT_DEPS', True):
|
|
deps += 'libtool-cross '
|
|
|
|
return deps + 'gnu-config-native '
|
|
|
|
EXTRA_OEMAKE = ""
|
|
|
|
DEPENDS_prepend = "${@autotools_dep_prepend(d)}"
|
|
|
|
inherit siteinfo
|
|
|
|
# Space separated list of shell scripts with variables defined to supply test
|
|
# results for autoconf tests we cannot run at build time.
|
|
export CONFIG_SITE = "${@siteinfo_get_files(d)}"
|
|
|
|
acpaths = "default"
|
|
EXTRA_AUTORECONF = "--exclude=autopoint"
|
|
|
|
export lt_cv_sys_lib_dlsearch_path_spec = "${libdir} ${base_libdir}"
|
|
|
|
def autotools_set_crosscompiling(d):
|
|
if not bb.data.inherits_class('native', d):
|
|
return " cross_compiling=yes"
|
|
return ""
|
|
|
|
def append_libtool_sysroot(d):
|
|
# Only supply libtool sysroot option for non-native packages
|
|
if not bb.data.inherits_class('native', d):
|
|
return '--with-libtool-sysroot=${STAGING_DIR_HOST}'
|
|
return ""
|
|
|
|
# EXTRA_OECONF_append = "${@autotools_set_crosscompiling(d)}"
|
|
|
|
CONFIGUREOPTS = " --build=${BUILD_SYS} \
|
|
--host=${HOST_SYS} \
|
|
--target=${TARGET_SYS} \
|
|
--prefix=${prefix} \
|
|
--exec_prefix=${exec_prefix} \
|
|
--bindir=${bindir} \
|
|
--sbindir=${sbindir} \
|
|
--libexecdir=${libexecdir} \
|
|
--datadir=${datadir} \
|
|
--sysconfdir=${sysconfdir} \
|
|
--sharedstatedir=${sharedstatedir} \
|
|
--localstatedir=${localstatedir} \
|
|
--libdir=${libdir} \
|
|
--includedir=${includedir} \
|
|
--oldincludedir=${oldincludedir} \
|
|
--infodir=${infodir} \
|
|
--mandir=${mandir} \
|
|
--disable-silent-rules \
|
|
${CONFIGUREOPT_DEPTRACK} \
|
|
${@append_libtool_sysroot(d)}"
|
|
CONFIGUREOPT_DEPTRACK = "--disable-dependency-tracking"
|
|
|
|
|
|
oe_runconf () {
|
|
cfgscript="${S}/configure"
|
|
if [ -x "$cfgscript" ] ; then
|
|
bbnote "Running $cfgscript ${CONFIGUREOPTS} ${EXTRA_OECONF} $@"
|
|
set +e
|
|
${CACHED_CONFIGUREVARS} $cfgscript ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@"
|
|
if [ "$?" != "0" ]; then
|
|
echo "Configure failed. The contents of all config.log files follows to aid debugging"
|
|
find ${S} -name config.log -print -exec cat {} \;
|
|
bbfatal "oe_runconf failed"
|
|
fi
|
|
set -e
|
|
else
|
|
bbfatal "no configure script found at $cfgscript"
|
|
fi
|
|
}
|
|
|
|
AUTOTOOLS_AUXDIR ?= "${S}"
|
|
|
|
CONFIGURESTAMPFILE = "${WORKDIR}/configure.sstate"
|
|
|
|
autotools_preconfigure() {
|
|
if [ -n "${CONFIGURESTAMPFILE}" -a -e "${CONFIGURESTAMPFILE}" ]; then
|
|
if [ "`cat ${CONFIGURESTAMPFILE}`" != "${BB_TASKHASH}" -a "${S}" != "${B}" ]; then
|
|
echo "Previously configured separate build directory detected, cleaning ${B}"
|
|
rm -rf ${B}
|
|
mkdir ${B}
|
|
fi
|
|
fi
|
|
}
|
|
|
|
autotools_postconfigure(){
|
|
if [ -n "${CONFIGURESTAMPFILE}" ]; then
|
|
echo ${BB_TASKHASH} > ${CONFIGURESTAMPFILE}
|
|
fi
|
|
}
|
|
|
|
do_configure[prefuncs] += "autotools_preconfigure"
|
|
do_configure[postfuncs] += "autotools_postconfigure"
|
|
|
|
autotools_do_configure() {
|
|
# WARNING: gross hack follows:
|
|
# An autotools built package generally needs these scripts, however only
|
|
# automake or libtoolize actually install the current versions of them.
|
|
# This is a problem in builds that do not use libtool or automake, in the case
|
|
# where we -need- the latest version of these scripts. e.g. running a build
|
|
# for a package whose autotools are old, on an x86_64 machine, which the old
|
|
# config.sub does not support. Work around this by installing them manually
|
|
# regardless.
|
|
( for ac in `find ${S} -name configure.in -o -name configure.ac`; do
|
|
rm -f `dirname $ac`/configure
|
|
done )
|
|
if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then
|
|
olddir=`pwd`
|
|
cd ${S}
|
|
# Remove any previous copy of the m4 macros
|
|
rm -rf ${B}/aclocal-copy/
|
|
ACLOCAL="aclocal --system-acdir=${B}/aclocal-copy/"
|
|
if [ x"${acpaths}" = xdefault ]; then
|
|
acpaths=
|
|
for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \
|
|
grep -v 'acinclude.m4' | grep -v 'aclocal-copy' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do
|
|
acpaths="$acpaths -I $i"
|
|
done
|
|
else
|
|
acpaths="${acpaths}"
|
|
fi
|
|
AUTOV=`automake --version |head -n 1 |sed "s/.* //;s/\.[0-9]\+$//"`
|
|
automake --version
|
|
echo "AUTOV is $AUTOV"
|
|
if [ -d ${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV ]; then
|
|
ACLOCAL="$ACLOCAL --automake-acdir=${STAGING_DATADIR_NATIVE}/aclocal-$AUTOV"
|
|
fi
|
|
# The aclocal directory could get modified by other processes
|
|
# uninstalling data from the sysroot. See Yocto #861 for details.
|
|
# We avoid this by taking a copy here and then files cannot disappear.
|
|
# We copy native first, then target. This avoids certain races since cp-noerror
|
|
# won't overwrite existing files.
|
|
mkdir -p ${B}/aclocal-copy/
|
|
if [ -d ${STAGING_DATADIR_NATIVE}/aclocal ]; then
|
|
cp-noerror ${STAGING_DATADIR_NATIVE}/aclocal/ ${B}/aclocal-copy/
|
|
fi
|
|
if [ -d ${STAGING_DATADIR}/aclocal -a "${STAGING_DATADIR_NATIVE}/aclocal" != "${STAGING_DATADIR}/aclocal" ]; then
|
|
cp-noerror ${STAGING_DATADIR}/aclocal/ ${B}/aclocal-copy/
|
|
fi
|
|
# autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
|
|
# like it was auto-generated. Work around this by blowing it away
|
|
# by hand, unless the package specifically asked not to run aclocal.
|
|
if ! echo ${EXTRA_AUTORECONF} | grep -q "aclocal"; then
|
|
rm -f aclocal.m4
|
|
fi
|
|
if [ -e configure.in ]; then
|
|
CONFIGURE_AC=configure.in
|
|
else
|
|
CONFIGURE_AC=configure.ac
|
|
fi
|
|
if grep "^[[:space:]]*AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
|
|
if grep "sed.*POTFILES" $CONFIGURE_AC >/dev/null; then
|
|
: do nothing -- we still have an old unmodified configure.ac
|
|
else
|
|
bbnote Executing glib-gettextize --force --copy
|
|
echo "no" | glib-gettextize --force --copy
|
|
fi
|
|
else if grep "^[[:space:]]*AM_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
|
|
# We'd call gettextize here if it wasn't so broken...
|
|
cp ${STAGING_DATADIR}/gettext/config.rpath ${AUTOTOOLS_AUXDIR}/
|
|
if [ -d ${S}/po/ ]; then
|
|
cp ${STAGING_DATADIR}/gettext/po/Makefile.in.in ${S}/po/
|
|
fi
|
|
for i in gettext.m4 iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 po.m4 progtest.m4; do
|
|
for j in `find ${S} -name $i | grep -v aclocal-copy`; do
|
|
rm $j
|
|
done
|
|
done
|
|
fi
|
|
fi
|
|
mkdir -p m4
|
|
if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then
|
|
bbnote Executing intltoolize --copy --force --automake
|
|
intltoolize --copy --force --automake
|
|
fi
|
|
bbnote Executing ACLOCAL=\"$ACLOCAL\" autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
|
|
ACLOCAL="$ACLOCAL" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || bbfatal "autoreconf execution failed."
|
|
cd $olddir
|
|
fi
|
|
if [ -e ${S}/configure ]; then
|
|
oe_runconf
|
|
else
|
|
bbnote "nothing to configure"
|
|
fi
|
|
}
|
|
|
|
autotools_do_install() {
|
|
oe_runmake 'DESTDIR=${D}' install
|
|
# Info dir listing isn't interesting at this point so remove it if it exists.
|
|
if [ -e "${D}${infodir}/dir" ]; then
|
|
rm -f ${D}${infodir}/dir
|
|
fi
|
|
}
|
|
|
|
inherit siteconfig
|
|
|
|
EXPORT_FUNCTIONS do_configure do_install
|