| Submitter | Qi.Chen@windriver.com |
|---|---|
| Date | Nov. 9, 2012, 5:47 a.m. |
| Message ID | <e4558ca77d64a8f3702c05599a630a00ddc0170f.1352439901.git.Qi.Chen@windriver.com> |
| Download | mbox | patch |
| Permalink | /patch/38833/ |
| State | New |
| Headers | show |
Comments
On 11/08/2012 09:47 PM, Qi.Chen@windriver.com wrote: > From: Chen Qi <Qi.Chen@windriver.com> > > 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! > [YOCTO #2766] > > Signed-off-by: Chen Qi <Qi.Chen@windriver.com> > --- > 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 >
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 <Qi.Chen@windriver.com> >> >> 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 <Qi.Chen@windriver.com> >> --- >> 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 >> >
Patch
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