On 11/22/2012 08:19 AM, Saul Wold wrote: > On 11/08/2012 09:47 PM, Qi.Chen@windriver.com wrote: >> From: Chen Qi >> >> When the TMPDIR is very long, say, 410 characters, aclocal would >> fail because the argument list is too long. This patch is an effort >> to use relative path for acpaths whenever possible, aiming at >> making the build system work correctly when the sanity check says OK. >> >> With the current implementation of autoreconf, it's impossible to >> thoroughly replace absolute path with relative path. Therefore, we >> use relative path when there's on subdirectory to configure; otherwise, >> we use absolute path. >> > Have you done a world build long path names with this patch on 1.4 and > does it cause any failures with autoreconf and subdirs? > > Sau! > Hi Saul, Thank you for your suggestion. I did do the test before I sent out the patch, but at that time I only used 'bitbake core-image-sato'. However when I re-tested it yesterday with 'bitbake world', qt4-native configure failed. (Sorry for my carelessness.) The failure is not caused by the changes in autotools.bbclass. It failed to configure because *the path is too long to be fitted into the static char array defined in its qconfig.cpp file*. Below are some details: src/corelib/global/qconfig.cpp:11:67: *error: initializer-string for array of chars is too long* [-fpermissive] The statements in qconfig.cpp that caused this failure are: static const char qt_configure_prefix_path_str [*256* + 12] = "qt_prfxpath=/buildarea/qchen1/poky/build-autotools-test/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs\ /subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/s\ ubs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs0/sysroots/x86_64-linux/usr"; static const char qt_configure_documentation_path_str[*256* + 12] = "qt_docspath=/buildarea/qchen1/poky/build-autotools-test/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs\ /subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/s\ ubs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs/subs0/sysroots/x86_64-linux/usr/doc"; ... Anyway it should be fixed as part of bug#2766 (long TMPDIR problem). Thus, I'll rework on bug#2766 and try to fix it. However, statements in qconfig.cpp lead me to doubt about the length limit of TMPDIR (currently 410). As we see in qconfig.cpp, */if the TMPDIR has chars more than 256, it would fail for certain./* *I think we should re-consider the length limit for TMPDIR.* Thanks, Chen Qi > >> [YOCTO #2766] >> >> Signed-off-by: Chen Qi >> --- >> meta/classes/autotools.bbclass | 14 +++++++++----- >> 1 file changed, 9 insertions(+), 5 deletions(-) >> >> diff --git a/meta/classes/autotools.bbclass >> b/meta/classes/autotools.bbclass >> index b97d74b..86d8939 100644 >> --- a/meta/classes/autotools.bbclass >> +++ b/meta/classes/autotools.bbclass >> @@ -123,8 +123,11 @@ autotools_do_configure() { >> rm -f `dirname $ac`/configure >> done ) >> if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then >> + [ -e configure.in ] && CONFIGURE_AC=configure.in || >> CONFIGURE_AC=configure.ac >> olddir=`pwd` >> cd ${S} >> + # Determine whether there's subdirs to configure >> + grep -q -m 1 AC_CONFIG_SUBDIRS $CONFIGURE_AC && sub_cfg=1 || >> sub_cfg=0 >> # Remove any previous copy of the m4 macros >> rm -rf ${B}/aclocal-copy/ >> ACLOCAL="aclocal --system-acdir=${B}/aclocal-copy/" >> @@ -132,6 +135,11 @@ autotools_do_configure() { >> 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 >> + # If no subdirs to configure, we use relative path >> + # This is used for supporting long TMPDIR in Yocto >> + if [ $sub_cfg == 0 ]; then >> + i=`echo $i | sed -e 's#${S}#\.#'` >> + fi >> acpaths="$acpaths -I $i" >> done >> else >> @@ -161,11 +169,7 @@ autotools_do_configure() { >> 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 >> >