Patchwork Add ability to build without any targets enabled

login
register
mail settings
Submitter Daniel P. Berrange
Date Aug. 31, 2012, 5:06 p.m.
Message ID <1346432788-14405-1-git-send-email-berrange@redhat.com>
Download mbox | patch
Permalink /patch/180997/
State New
Headers show

Comments

Daniel P. Berrange - Aug. 31, 2012, 5:06 p.m.
From: "Daniel P. Berrange" <berrange@redhat.com>

The qemu-img, qemu-nbd and qemu-io tools are quite useful in their
own right. eg LXC can use qemu-img and qemu-nbd to support running
of containers with qcow2 images. As such it is reasonable to allow
building these tools, without enabling any QEMU targets. This change
does two things:

 - Allows passing an empty string to the --target-list arg
   to disable all targets
 - Adds --enable-tools/--disable-tools args to enable/disable
   building of qemu-img, qemu-nbd and qemu-io independantly
   of whether any softmmu target is disabled. The builds
   default to enabled at all times.

With this you can do

  ./configure --target-list=

and get a build that only includes the basic tools

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 configure | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)
Peter Maydell - Aug. 31, 2012, 5:15 p.m.
On 31 August 2012 18:06, Daniel P. Berrange <berrange@redhat.com> wrote:
> From: "Daniel P. Berrange" <berrange@redhat.com>
>
> The qemu-img, qemu-nbd and qemu-io tools are quite useful in their
> own right. eg LXC can use qemu-img and qemu-nbd to support running
> of containers with qcow2 images. As such it is reasonable to allow
> building these tools, without enabling any QEMU targets. This change
> does two things:
>
>  - Allows passing an empty string to the --target-list arg
>    to disable all targets
>  - Adds --enable-tools/--disable-tools args to enable/disable
>    building of qemu-img, qemu-nbd and qemu-io independantly
>    of whether any softmmu target is disabled. The builds
>    default to enabled at all times.

Feels to me like these should be separate patches.

> With this you can do
>
>   ./configure --target-list=
>
> and get a build that only includes the basic tools
>
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>  configure | 38 ++++++++++++++++++++++++++------------
>  1 file changed, 26 insertions(+), 12 deletions(-)
>
> diff --git a/configure b/configure
> index d97fd81..bbde154 100755
> --- a/configure
> +++ b/configure
> @@ -128,6 +128,7 @@ libs_qga=""
>  debug_info="yes"
>
>  target_list=""
> +without_targets=0
>
>  # Default value for a variable defining feature "foo".
>  #  * foo="no"  feature will only be used if --enable-foo arg is given
> @@ -216,6 +217,7 @@ usb_redir=""
>  opengl=""
>  zlib="yes"
>  guest_agent="yes"
> +want_tools="yes"
>  libiscsi=""
>  coroutine=""
>  seccomp=""
> @@ -614,7 +616,12 @@ for opt do
>    ;;
>    --cpu=*)
>    ;;
> -  --target-list=*) target_list="$optarg"
> +  --target-list=*)
> +    if test -z "$optarg" ; then
> +        without_targets=1
> +    else
> +        target_list="$optarg"
> +    fi
>    ;;

I think the code ends up a bit simpler if you start with
target_list=DEFAULT
and use that as the indicator of 'use default list' rather
than the empty string. However that does add the 'undocumented
feature' that '--target-list=DEFAULT' becomes valid...

-- PMM
Stefan Weil - Aug. 31, 2012, 5:29 p.m.
Am 31.08.2012 19:15, schrieb Peter Maydell:
> On 31 August 2012 18:06, Daniel P. Berrange<berrange@redhat.com>  wrote:
>> From: "Daniel P. Berrange"<berrange@redhat.com>
>>
>> The qemu-img, qemu-nbd and qemu-io tools are quite useful in their
>> own right. eg LXC can use qemu-img and qemu-nbd to support running
>> of containers with qcow2 images. As such it is reasonable to allow
>> building these tools, without enabling any QEMU targets. This change
>> does two things:
>>
>>   - Allows passing an empty string to the --target-list arg
>>     to disable all targets
>>   - Adds --enable-tools/--disable-tools args to enable/disable
>>     building of qemu-img, qemu-nbd and qemu-io independantly
>>     of whether any softmmu target is disabled. The builds
>>     default to enabled at all times.
>
> Feels to me like these should be separate patches.
>
>> With this you can do
>>
>>    ./configure --target-list=
>>
>> and get a build that only includes the basic tools
>>
>> Signed-off-by: Daniel P. Berrange<berrange@redhat.com>
>> ---
>>   configure | 38 ++++++++++++++++++++++++++------------
>>   1 file changed, 26 insertions(+), 12 deletions(-)
>>
>> diff --git a/configure b/configure
>> index d97fd81..bbde154 100755
>> --- a/configure
>> +++ b/configure
>> @@ -128,6 +128,7 @@ libs_qga=""
>>   debug_info="yes"
>>
>>   target_list=""
>> +without_targets=0
>>
>>   # Default value for a variable defining feature "foo".
>>   #  * foo="no"  feature will only be used if --enable-foo arg is given
>> @@ -216,6 +217,7 @@ usb_redir=""
>>   opengl=""
>>   zlib="yes"
>>   guest_agent="yes"
>> +want_tools="yes"
>>   libiscsi=""
>>   coroutine=""
>>   seccomp=""
>> @@ -614,7 +616,12 @@ for opt do
>>     ;;
>>     --cpu=*)
>>     ;;
>> -  --target-list=*) target_list="$optarg"
>> +  --target-list=*)
>> +    if test -z "$optarg" ; then
>> +        without_targets=1
>> +    else
>> +        target_list="$optarg"
>> +    fi
>>     ;;
>
> I think the code ends up a bit simpler if you start with
> target_list=DEFAULT
> and use that as the indicator of 'use default list' rather
> than the empty string. However that does add the 'undocumented
> feature' that '--target-list=DEFAULT' becomes valid...
>
> -- PMM

An undefined target_list might be a better indicator
and does not add undocumented features.

I appreciate the possibility of default builds without tools:
they save time when running 'git bisect' or in cross builds
when the tools are not needed.

My private QEMU has this feature since several years, but
uses an approach which differs from this patch: there are always
Makefile targets 'doc' and 'tools'. By default, 'all' includes
'doc' and 'tools', but they can be disabled using configure
options (--disable-docs, --disable-tools). Even when they
are disabled, it is possible to run 'make doc' or 'make tools'.

Regards,

Stefan W.

Patch

diff --git a/configure b/configure
index d97fd81..bbde154 100755
--- a/configure
+++ b/configure
@@ -128,6 +128,7 @@  libs_qga=""
 debug_info="yes"
 
 target_list=""
+without_targets=0
 
 # Default value for a variable defining feature "foo".
 #  * foo="no"  feature will only be used if --enable-foo arg is given
@@ -216,6 +217,7 @@  usb_redir=""
 opengl=""
 zlib="yes"
 guest_agent="yes"
+want_tools="yes"
 libiscsi=""
 coroutine=""
 seccomp=""
@@ -614,7 +616,12 @@  for opt do
   ;;
   --cpu=*)
   ;;
-  --target-list=*) target_list="$optarg"
+  --target-list=*)
+    if test -z "$optarg" ; then
+        without_targets=1
+    else
+        target_list="$optarg"
+    fi
   ;;
   --enable-trace-backend=*) trace_backend="$optarg"
   ;;
@@ -865,6 +872,10 @@  for opt do
   ;;
   --disable-guest-agent) guest_agent="no"
   ;;
+  --enable-tools) want_tools="yes"
+  ;;
+  --disable-tools) want_tools="no"
+  ;;
   --enable-seccomp) seccomp="yes"
   ;;
   --disable-seccomp) seccomp="no"
@@ -1315,14 +1326,13 @@  if ! "$python" -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_
 fi
 
 if test -z "$target_list" ; then
-    target_list="$default_target_list"
+    if test $without_targets = 0 ; then
+        target_list="$default_target_list"
+    fi
 else
     target_list=`echo "$target_list" | sed -e 's/,/ /g'`
 fi
-if test -z "$target_list" ; then
-    echo "No targets enabled"
-    exit 1
-fi
+
 # see if system emulation was really requested
 case " $target_list " in
   *"-softmmu "*) softmmu=yes
@@ -3039,9 +3049,14 @@  fi
 qemu_confdir=$sysconfdir$confsuffix
 qemu_datadir=$datadir$confsuffix
 
-tools=
-if test "$softmmu" = yes ; then
+tools=""
+if test "$want_tools" = "yes" ; then
   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
+  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
+    tools="qemu-nbd\$(EXESUF) $tools"
+  fi
+fi
+if test "$softmmu" = yes ; then
   if test "$virtfs" != no ; then
     if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
       virtfs=yes
@@ -3055,14 +3070,13 @@  if test "$softmmu" = yes ; then
     fi
   fi
   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
-      tools="qemu-nbd\$(EXESUF) $tools"
     if [ "$guest_agent" = "yes" ]; then
       tools="qemu-ga\$(EXESUF) $tools"
     fi
   fi
-fi
-if test "$smartcard_nss" = "yes" ; then
-  tools="vscclient\$(EXESUF) $tools"
+  if test "$smartcard_nss" = "yes" ; then
+    tools="vscclient\$(EXESUF) $tools"
+  fi
 fi
 
 # Mac OS X ships with a broken assembler