diff mbox

[for-1.7] configure: Explicitly set ARFLAGS so we can build with GNU Make 4.0

Message ID 1382385786-9178-1-git-send-email-peter.maydell@linaro.org
State Accepted
Commit 45d285abd7028ac72418c1a22f9298bb898fbfb8
Headers show

Commit Message

Peter Maydell Oct. 21, 2013, 8:03 p.m. UTC
Our rules.mak adds '-rR' to MAKEFLAGS to indicate that we will be
explicitly specifying everything and not relying on any default
variables or rules. However we were accidentally relying on the
default ARFLAGS ("rv"). This went unnoticed because of a bug in
GNU Make 3.82 and earlier which meant that adding -rR to MAKEFLAGS
only affected submakes, not the currently running instance.
Explicitly set ARFLAGS in config-host.mak, in the same way we
handle CFLAGS and LDFLAGS; this will allow us to work with
Make 4.0.

Thanks to Paul Smith for analyzing this bug for us.

Reported-by: Ken Moffat <zarniwhoop@ntlworld.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Ken: I think this should work (and it doesn't break building with
old makes), but I don't have a make 4.0 to hand; if you could
test it I'd appreciate it.

 configure | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Peter Maydell Oct. 22, 2013, 8:24 a.m. UTC | #1
On 21 October 2013 21:03, Peter Maydell <peter.maydell@linaro.org> wrote:
> Ken: I think this should work (and it doesn't break building with
> old makes), but I don't have a make 4.0 to hand; if you could
> test it I'd appreciate it.

Forwarding a message from Ken (whose mail client is apparently
not very good :-):

Ken wrote:
# I applied it to 1.6.1 - some fuzz and large offsets, but it
# completed the default build (i.e. just ./configure so all targets)
# and also a DESTDIR install.

Ken -- any chance you could test git master? I think it would
be more interesting to make sure that 1.7 works with Make 4.0:
I don't know if anybody will care enough to backport this patch
to 1.6.x.

thanks
-- PMM
Alex Bennée Oct. 22, 2013, 8:40 a.m. UTC | #2
peter.maydell@linaro.org writes:

> Our rules.mak adds '-rR' to MAKEFLAGS to indicate that we will be
> explicitly specifying everything and not relying on any default
> variables or rules.

s/sowe/so we/

Otherwise good.

Reviewed-by: Alex Bennée <alex@bennee.com>
Ken Moffat Oct. 22, 2013, 5:35 p.m. UTC | #3
On Tue, Oct 22, 2013 at 09:24:46AM +0100, Peter Maydell wrote:
> On 21 October 2013 21:03, Peter Maydell <peter.maydell@linaro.org> wrote:
> > Ken: I think this should work (and it doesn't break building with
> > old makes), but I don't have a make 4.0 to hand; if you could
> > test it I'd appreciate it.
> 
> Forwarding a message from Ken (whose mail client is apparently
> not very good :-):
> 
 No, it was operator error - I somehow fell into editing the
original mail (didn't even know that was an option for received
mails) and trashed the header.  Anyway.

> Ken wrote:
> # I applied it to 1.6.1 - some fuzz and large offsets, but it
> # completed the default build (i.e. just ./configure so all targets)
> # and also a DESTDIR install.
> 
> Ken -- any chance you could test git master? I think it would
> be more interesting to make sure that 1.7 works with Make 4.0:
> I don't know if anybody will care enough to backport this patch
> to 1.6.x.
> 
> thanks
> -- PMM

 Not sure how to.  I cloned git://git.qemu.org/qemu.git which was at
commit fc8ead74674b7129e8f31c2595c76658e5622197
Merge: 3551643 7174e54
Author: Anthony Liguori <aliguori@amazon.com>
Date:   Fri Oct 18 10:03:24 2013 -0700

    Merge remote-tracking branch 'qemu-kvm/uq/master' into staging

 Copied the non-dotfiles (cp -av *), applied the patch, got a
message from configure:

ERROR: DTC not present. Your options:
         (1) Preferred: Install the DTC devel package
         (2) Fetch the DTC submodule, using:
             git submodule update --init dtc

 So I went back to git, did the submodule update and copied afresh,
applied the patch, and still got the same error.

ĸen
Ken Moffat Oct. 22, 2013, 6:09 p.m. UTC | #4
On Tue, Oct 22, 2013 at 06:35:47PM +0100, Ken Moffat wrote:
> > 
> > Ken -- any chance you could test git master? I think it would
> > be more interesting to make sure that 1.7 works with Make 4.0:
> > I don't know if anybody will care enough to backport this patch
> > to 1.6.x.
> > 
> > thanks
> > -- PMM
> 
>  Not sure how to.
 Scratch that, user error.

ĸen
Peter Maydell Oct. 22, 2013, 6:10 p.m. UTC | #5
On 22 October 2013 18:35, Ken Moffat <zarniwhoop@ntlworld.com> wrote:
> On Tue, Oct 22, 2013 at 09:24:46AM +0100, Peter Maydell wrote:
>> Forwarding a message from Ken (whose mail client is apparently
>> not very good :-):
>>
>  No, it was operator error - I somehow fell into editing the
> original mail (didn't even know that was an option for received
> mails) and trashed the header.  Anyway.

...you also managed to send to the Envelope-from, not the From.

>  Not sure how to.  I cloned git://git.qemu.org/qemu.git which was at
> commit fc8ead74674b7129e8f31c2595c76658e5622197
> Merge: 3551643 7174e54
> Author: Anthony Liguori <aliguori@amazon.com>
> Date:   Fri Oct 18 10:03:24 2013 -0700
>
>     Merge remote-tracking branch 'qemu-kvm/uq/master' into staging
>
>  Copied the non-dotfiles (cp -av *), applied the patch, got a
> message from configure:
>
> ERROR: DTC not present. Your options:
>          (1) Preferred: Install the DTC devel package
>          (2) Fetch the DTC submodule, using:
>              git submodule update --init dtc
>
>  So I went back to git, did the submodule update and copied afresh,
> applied the patch, and still got the same error.

I'm not sure what you're trying to achieve with the copy, but
it seems likely to cause problems. Just do a build from the
git tree. If you don't want to put object files in your git tree,
this is what out-of-tree build is for: cd into the directory you
want to put the object files in, and run the configure script
from there:
 mkdir ../build
 cd ../build
 ../qemu.git/configure [usual configure options etc]

thanks
-- PMM
Ken Moffat Oct. 22, 2013, 6:19 p.m. UTC | #6
On Tue, Oct 22, 2013 at 07:10:43PM +0100, Peter Maydell wrote:
> On 22 October 2013 18:35, Ken Moffat <zarniwhoop@ntlworld.com> wrote:
> > On Tue, Oct 22, 2013 at 09:24:46AM +0100, Peter Maydell wrote:
> >> Forwarding a message from Ken (whose mail client is apparently
> >> not very good :-):
> >>
> >  No, it was operator error - I somehow fell into editing the
> > original mail (didn't even know that was an option for received
> > mails) and trashed the header.  Anyway.
> 
> ...you also managed to send to the Envelope-from, not the From.
> 
> >  Not sure how to.  I cloned git://git.qemu.org/qemu.git which was at
> > commit fc8ead74674b7129e8f31c2595c76658e5622197
> > Merge: 3551643 7174e54
> > Author: Anthony Liguori <aliguori@amazon.com>
> > Date:   Fri Oct 18 10:03:24 2013 -0700
> >
> >     Merge remote-tracking branch 'qemu-kvm/uq/master' into staging
> >
> >  Copied the non-dotfiles (cp -av *), applied the patch, got a
> > message from configure:
> >
> > ERROR: DTC not present. Your options:
> >          (1) Preferred: Install the DTC devel package
> >          (2) Fetch the DTC submodule, using:
> >              git submodule update --init dtc
> >
> >  So I went back to git, did the submodule update and copied afresh,
> > applied the patch, and still got the same error.
> 
> I'm not sure what you're trying to achieve with the copy, but
> it seems likely to cause problems. Just do a build from the
> git tree. If you don't want to put object files in your git tree,
> this is what out-of-tree build is for: cd into the directory you
> want to put the object files in, and run the configure script
> from there:
>  mkdir ../build
>  cd ../build
>  ../qemu.git/configure [usual configure options etc]
> 
> thanks
> -- PMM

 Thanks for that info.

ĸen
Ken Moffat Oct. 22, 2013, 6:52 p.m. UTC | #7
On Tue, Oct 22, 2013 at 07:09:10PM +0100, Ken Moffat wrote:
> On Tue, Oct 22, 2013 at 06:35:47PM +0100, Ken Moffat wrote:
> > > 
> > > Ken -- any chance you could test git master? I think it would
> > > be more interesting to make sure that 1.7 works with Make 4.0:
> > > I don't know if anybody will care enough to backport this patch
> > > to 1.6.x.
> > > 
> > > thanks
> > > -- PMM
> > 
> >  Not sure how to.
>  Scratch that, user error.
> 
 Built and DESTDIR installed with the default targets using make-4.0

ĸen
Paolo Bonzini Oct. 23, 2013, 7:54 a.m. UTC | #8
Il 22/10/2013 09:24, Peter Maydell ha scritto:
> 
> Ken -- any chance you could test git master? I think it would
> be more interesting to make sure that 1.7 works with Make 4.0:
> I don't know if anybody will care enough to backport this patch
> to 1.6.x.

Cc: qemu-stable@nongnu.org

Mike Roth now will. :)

Paolo
Peter Maydell Nov. 5, 2013, 6:04 p.m. UTC | #9
Ping!

thanks
-- PMM

On 21 October 2013 21:03, Peter Maydell <peter.maydell@linaro.org> wrote:
> Our rules.mak adds '-rR' to MAKEFLAGS to indicate that we will be
> explicitly specifying everything and not relying on any default
> variables or rules. However we were accidentally relying on the
> default ARFLAGS ("rv"). This went unnoticed because of a bug in
> GNU Make 3.82 and earlier which meant that adding -rR to MAKEFLAGS
> only affected submakes, not the currently running instance.
> Explicitly set ARFLAGS in config-host.mak, in the same way we
> handle CFLAGS and LDFLAGS; this will allow us to work with
> Make 4.0.
>
> Thanks to Paul Smith for analyzing this bug for us.
>
> Reported-by: Ken Moffat <zarniwhoop@ntlworld.com>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Ken: I think this should work (and it doesn't break building with
> old makes), but I don't have a make 4.0 to hand; if you could
> test it I'd appreciate it.
>
>  configure | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/configure b/configure
> index 57ee62a..4eb3a07 100755
> --- a/configure
> +++ b/configure
> @@ -308,6 +308,9 @@ query_pkg_config() {
>  pkg_config=query_pkg_config
>  sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
>
> +# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
> +ARFLAGS="${ARFLAGS-rv}"
> +
>  # default flags for all hosts
>  QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS"
>  QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
> @@ -3664,6 +3667,7 @@ echo "C compiler        $cc"
>  echo "Host C compiler   $host_cc"
>  echo "C++ compiler      $cxx"
>  echo "Objective-C compiler $objcc"
> +echo "ARFLAGS           $ARFLAGS"
>  echo "CFLAGS            $CFLAGS"
>  echo "QEMU_CFLAGS       $QEMU_CFLAGS"
>  echo "LDFLAGS           $LDFLAGS"
> @@ -4239,6 +4243,7 @@ echo "HOST_CC=$host_cc" >> $config_host_mak
>  echo "CXX=$cxx" >> $config_host_mak
>  echo "OBJCC=$objcc" >> $config_host_mak
>  echo "AR=$ar" >> $config_host_mak
> +echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
>  echo "AS=$as" >> $config_host_mak
>  echo "CPP=$cpp" >> $config_host_mak
>  echo "OBJCOPY=$objcopy" >> $config_host_mak
> --
> 1.7.11.4
Andreas Färber Nov. 5, 2013, 6:45 p.m. UTC | #10
Am 05.11.2013 19:04, schrieb Peter Maydell:
> Ping!

A typo in the commit message has been reported, and it has been
requested to add Cc: qemu-stable@nongnu.org. Since you neither CC
qemu-trivial nor a particular maintainer that would fix those for you,
you'll have to respin.

Andreas

> 
> thanks
> -- PMM
> 
> On 21 October 2013 21:03, Peter Maydell <peter.maydell@linaro.org> wrote:
>> Our rules.mak adds '-rR' to MAKEFLAGS to indicate that we will be
>> explicitly specifying everything and not relying on any default
>> variables or rules. However we were accidentally relying on the
>> default ARFLAGS ("rv"). This went unnoticed because of a bug in
>> GNU Make 3.82 and earlier which meant that adding -rR to MAKEFLAGS
>> only affected submakes, not the currently running instance.
>> Explicitly set ARFLAGS in config-host.mak, in the same way we
>> handle CFLAGS and LDFLAGS; this will allow us to work with
>> Make 4.0.
>>
>> Thanks to Paul Smith for analyzing this bug for us.
>>
>> Reported-by: Ken Moffat <zarniwhoop@ntlworld.com>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>> Ken: I think this should work (and it doesn't break building with
>> old makes), but I don't have a make 4.0 to hand; if you could
>> test it I'd appreciate it.
>>
>>  configure | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/configure b/configure
>> index 57ee62a..4eb3a07 100755
>> --- a/configure
>> +++ b/configure
>> @@ -308,6 +308,9 @@ query_pkg_config() {
>>  pkg_config=query_pkg_config
>>  sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
>>
>> +# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
>> +ARFLAGS="${ARFLAGS-rv}"
>> +
>>  # default flags for all hosts
>>  QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS"
>>  QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
>> @@ -3664,6 +3667,7 @@ echo "C compiler        $cc"
>>  echo "Host C compiler   $host_cc"
>>  echo "C++ compiler      $cxx"
>>  echo "Objective-C compiler $objcc"
>> +echo "ARFLAGS           $ARFLAGS"
>>  echo "CFLAGS            $CFLAGS"
>>  echo "QEMU_CFLAGS       $QEMU_CFLAGS"
>>  echo "LDFLAGS           $LDFLAGS"
>> @@ -4239,6 +4243,7 @@ echo "HOST_CC=$host_cc" >> $config_host_mak
>>  echo "CXX=$cxx" >> $config_host_mak
>>  echo "OBJCC=$objcc" >> $config_host_mak
>>  echo "AR=$ar" >> $config_host_mak
>> +echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
>>  echo "AS=$as" >> $config_host_mak
>>  echo "CPP=$cpp" >> $config_host_mak
>>  echo "OBJCOPY=$objcopy" >> $config_host_mak
>> --
>> 1.7.11.4
>
diff mbox

Patch

diff --git a/configure b/configure
index 57ee62a..4eb3a07 100755
--- a/configure
+++ b/configure
@@ -308,6 +308,9 @@  query_pkg_config() {
 pkg_config=query_pkg_config
 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
 
+# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
+ARFLAGS="${ARFLAGS-rv}"
+
 # default flags for all hosts
 QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS"
 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
@@ -3664,6 +3667,7 @@  echo "C compiler        $cc"
 echo "Host C compiler   $host_cc"
 echo "C++ compiler      $cxx"
 echo "Objective-C compiler $objcc"
+echo "ARFLAGS           $ARFLAGS"
 echo "CFLAGS            $CFLAGS"
 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
 echo "LDFLAGS           $LDFLAGS"
@@ -4239,6 +4243,7 @@  echo "HOST_CC=$host_cc" >> $config_host_mak
 echo "CXX=$cxx" >> $config_host_mak
 echo "OBJCC=$objcc" >> $config_host_mak
 echo "AR=$ar" >> $config_host_mak
+echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
 echo "AS=$as" >> $config_host_mak
 echo "CPP=$cpp" >> $config_host_mak
 echo "OBJCOPY=$objcopy" >> $config_host_mak