[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxl: Include a version of bsd's queue.h



On Tue, 2011-10-25 at 18:35 +0100, Ian Jackson wrote:
> We would like some linked list macros which are (a) well known to be
> sane and (b) typesafe.  BSD's queue.h meets these criteria.
> 
> The files in this changeset were obtained with:
>   svn co -r 221843 svn://svn.freebsd.org/base/head/sys/sys/
>   svn co -r 221843 svn://svn.freebsd.org/base/head/share/man/man3
> 
> We also provide some simple perlery to arrange to add the libxl_
> namespace prefix to the macros.  This will allow us to #include our
> modified queue.h in our public header file without clashing with
> anyone else who is also using another version of queue.h.
> 
> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> 
> ---
>  tools/libxl/Makefile                |    5 +-
>  tools/libxl/bsd-queue.3             | 1044 
> +++++++++++++++++++++++++++++++++++
>  tools/libxl/bsd-sys-queue-h-seddery |   67 +++
>  tools/libxl/bsd-sys-queue.h         |  637 +++++++++++++++++++++
>  4 files changed, 1752 insertions(+), 1 deletions(-)
> 
> diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
> index 51e5132..5d7e0f5 100644
> --- a/tools/libxl/Makefile
> +++ b/tools/libxl/Makefile
> @@ -42,7 +42,7 @@ LIBXL_OBJS += _libxl_types.o libxl_flask.o 
> _libxl_types_internal.o
> 
>  $(LIBXL_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) 
> $(CFLAGS_libxenstore) $(CFLAGS_libblktapctl)
> 
> -AUTOINCS= libxlu_cfg_y.h libxlu_cfg_l.h
> +AUTOINCS= libxlu_cfg_y.h libxlu_cfg_l.h _libxl_list.h
>  AUTOSRCS= libxlu_cfg_y.c libxlu_cfg_l.c
>  LIBXLU_OBJS = libxlu_cfg_y.o libxlu_cfg_l.o libxlu_cfg.o \
>         libxlu_disk_l.o libxlu_disk.o
> @@ -81,6 +81,9 @@ _libxl_paths.h: genpath
>         rm -f $@.tmp
>         $(call move-if-changed,$@.2.tmp,$@)
> 
> +_libxl_list.h: bsd-sys-queue-h-seddery bsd-sys-queue.h
> +       ./$^ --prefix=libxl >$@.new && mv -f $@.new $@
> +

You should $(call move-if-changed,...) here.

>  libxl_paths.c: _libxl_paths.h
> 
>  libxl.h: _libxl_types.h
> diff --git a/tools/libxl/bsd-queue.3 b/tools/libxl/bsd-queue.3
> new file mode 100644
> index 0000000..007ca5c
> --- /dev/null
> +++ b/tools/libxl/bsd-queue.3

Did you intend to sederize/install this too?
> diff --git a/tools/libxl/bsd-sys-queue-h-seddery 
> b/tools/libxl/bsd-sys-queue-h-seddery
> new file mode 100755
> index 0000000..0bab8e0
> --- /dev/null
> +++ b/tools/libxl/bsd-sys-queue-h-seddery
> @@ -0,0 +1,67 @@
> +#!/usr/bin/perl -p
> +#
> +# This script is part of the Xen build system.  It has a very
> +# permissive licence to avoid complicating the licence of the
> +# generated header file and to allow this seddery to be reused by
> +# other projects.
> +#
> +# Permission is hereby granted, free of charge, to any person
> +# obtaining a copy of this individual file (the "Software"), to deal
> +# in the Software without restriction, including without limitation
> +# the rights to use, copy, modify, merge, publish, distribute,
> +# sublicense, and/or sell copies of the Software, and to permit
> +# persons to whom the Software is furnished to do so, subject to the
> +# following conditions:
> +#
> +# The above copyright notice and this permission notice shall be
> +# included in all copies or substantial portions of the Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> +# SOFTWARE.
> +#
> +# Copyright (C) 2011 Citrix Ltd
> +
> +our $namespace, $ucnamespace;
> +
> +BEGIN {
> +    die unless @ARGV;
> +    $namespace = pop @ARGV;
> +    $namespace =~ s/^--prefix=// or die;
> +    $ucnamespace = uc $namespace;
> +
> +    print <<END or die $!;
> +/*
> + * DO NOT EDIT THIS FILE
> + *
> + * Generated automatically by bsd-sys-queue-h-seddery to
> + *  - introduce ${ucnamespace}_ and ${namespace}_ namespace prefixes
> + *  - turn "struct type" into "type" so that type arguments
> + *     to the macros are type names not struct tags
> + *
> + * The purpose of this seddery is to allow the resulting file to be
> + * freely included by software which might also want to include other
> + * list macros, and to be used when struct tags are not being used or
> + * not known.
> + */
> +END
> +}
> +
> +s/\b( _SYS_QUEUE |
> +      SLIST | LIST | STAILQ | TAILQ | QUEUE
> +      )/${ucnamespace}_$1/xg;
> +
> +s/\b( TRACEBUF | TRASHIT |
> +      QMD_
> +      )/${ucnamespace}__$1/xg;
> +
> +s/\b(
> +      qm_
> +      )/${namespace}__$1/xg;
> +
> +s/\b struct \s+ type \b/type/xg;
> diff --git a/tools/libxl/bsd-sys-queue.h b/tools/libxl/bsd-sys-queue.h
> new file mode 100644
> index 0000000..274e636
> --- /dev/null
> +++ b/tools/libxl/bsd-sys-queue.h

I worry (only a little) that people might start trying to edit this
directly.

Perhaps put it in a subdirectory (tools/libxl/external?) with a README
(which can include the svn co runes) and a big warning?

"hg chmod -r" might help in some small way too?

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.