Patchwork [1/3] autotools.bbclass: use relative path for acpaths whenever possible

login
register
mail settings
Submitter Qi.Chen@windriver.com
Date Nov. 30, 2012, 3:08 a.m.
Message ID <22684c7fc852e5c43d241e760fe8e1af7095f9ff.1354084523.git.Qi.Chen@windriver.com>
Download mbox | patch
Permalink /patch/39927/
State New
Headers show

Comments

Qi.Chen@windriver.com - Nov. 30, 2012, 3:08 a.m.
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.

[YOCTO #2766]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/classes/autotools.bbclass |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
Qi.Chen@windriver.com - Dec. 4, 2012, 2:57 a.m.
Hi Richard,

I saw that this series of patches have been merged except this one.
Is there any problem with this patch?

The thing is, if we don't fix autotool.bbclass like this, building 
coreutils will fail with a long TMPDIR (bug#2766). I tried to build 
coretuils with TMPDIR of 200 char length, it failed.

Thanks,
Chen Qi

On 11/30/2012 11:08 AM, 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.
>
> [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 ca981ec..ce2d264 100644
> --- a/meta/classes/autotools.bbclass
> +++ b/meta/classes/autotools.bbclass
> @@ -138,8 +138,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/"
> @@ -147,6 +150,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
> @@ -176,11 +184,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
Richard Purdie - Dec. 4, 2012, 8:39 a.m.
On Tue, 2012-12-04 at 10:57 +0800, ChenQi wrote:
> Hi Richard,
> 
> I saw that this series of patches have been merged except this one.
> Is there any problem with this patch?
> 
> The thing is, if we don't fix autotool.bbclass like this, building 
> coreutils will fail with a long TMPDIR (bug#2766). I tried to build 
> coretuils with TMPDIR of 200 char length, it failed.

I know but I'm rather unhappy having the autotools code work two rather
different ways depending on the number of configure scripts a project
has, it all seems like a bit of a hack :(

I don't like the fix but I haven't found time to propose any
alternative...

Cheers,

Richard
Qi.Chen@windriver.com - Dec. 4, 2012, 9:03 a.m.
On 12/04/2012 04:39 PM, Richard Purdie wrote:
> On Tue, 2012-12-04 at 10:57 +0800, ChenQi wrote:
>> Hi Richard,
>>
>> I saw that this series of patches have been merged except this one.
>> Is there any problem with this patch?
>>
>> The thing is, if we don't fix autotool.bbclass like this, building
>> coreutils will fail with a long TMPDIR (bug#2766). I tried to build
>> coretuils with TMPDIR of 200 char length, it failed.
> I know but I'm rather unhappy having the autotools code work two rather
> different ways depending on the number of configure scripts a project
> has, it all seems like a bit of a hack :(
>
> I don't like the fix but I haven't found time to propose any
> alternative...
>
> Cheers,
>
> Richard
>
>
OK. I see.
I've tried a lot but I can't figure out a better way to do it.
Hope someone could come up with a better proposal to this problem:)

Thanks,
Chen Qi

Patch

diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass
index ca981ec..ce2d264 100644
--- a/meta/classes/autotools.bbclass
+++ b/meta/classes/autotools.bbclass
@@ -138,8 +138,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/"
@@ -147,6 +150,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
@@ -176,11 +184,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