[libvirt] [PATCH] use gnulib via a submodule

Jim Meyering jim at meyering.net
Tue Jul 7 17:02:08 UTC 2009


Please NOTE: do not apply the changes below.
They are incomplete because I've removed all the boring, repetitive parts.
If you want to apply something, use this:

  http://meyering.net/code/tmp/libvirt-submodule.patch.bz2

For an overall summary of the process of hooking up
gnulib as a submodule, see the long commit log for 5/7, below:
    Subject: [PATCH 5/7] make .gnulib a submodule

I'm not sure all of 1/7 is welcome, but at least the silent-rules
part seems in line with what people here like, considering
that mylibtool does something similar.  With this, you might
be comfortable removing mylibtool.

Jim

>From 41e0b6942648065dcf00e9aee3f961297464a336 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Mon, 6 Jul 2009 19:06:00 +0200
Subject: [PATCH 1/7] configure.in: use automake-1.11

---
 configure.in |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/configure.in b/configure.in
index 29c8867..1170958 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,8 @@ AC_CONFIG_SRCDIR([src/libvirt.c])
 AC_CONFIG_AUX_DIR([build-aux])
 AM_CONFIG_HEADER([config.h])
 dnl Make automake keep quiet about wildcards & other GNUmake-isms
-AM_INIT_AUTOMAKE([-Wno-portability])
+AM_INIT_AUTOMAKE([1.11 color-tests parallel-tests -Wno-portability])
+AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
 AC_CANONICAL_HOST

 LIBVIRT_MAJOR_VERSION=`echo $VERSION | awk -F. '{print $1}'`
--
1.6.3.3.524.g8586b


>From d73c9fc35bdcac3c1f8b24cad226fc879325d3c2 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Mon, 6 Jul 2009 18:23:44 +0200
Subject: [PATCH 2/7] * Makefile.cfg: Rename to...

* cfg.mk: ...this.  New file.
---
 Makefile.cfg => cfg.mk |    0
 1 files changed, 0 insertions(+), 0 deletions(-)
 rename Makefile.cfg => cfg.mk (100%)

diff --git a/Makefile.cfg b/cfg.mk
similarity index 100%
rename from Makefile.cfg
rename to cfg.mk
--
1.6.3.3.524.g8586b


>From 1cacbc7f4c883f763606e0bed36bd8d149add0d9 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Mon, 6 Jul 2009 18:28:10 +0200
Subject: [PATCH 3/7] Prepare to use maint.mk from gnulib

Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things).  In syncing it, we have to remove some libvirt-specific
rules.  Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule.  From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise.  Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp

.
---
 .x-sc_prohibit_strcmp_and_strncmp |    1 +
 GNUmakefile                       |    4 +-
 Makefile.am                       |    1 +
 Makefile.maint                    |  734 +++++++++++++++++--------------------
 cfg.mk                            |  163 ++++++++
 5 files changed, 505 insertions(+), 398 deletions(-)
 create mode 100644 .x-sc_prohibit_strcmp_and_strncmp

diff --git a/.x-sc_prohibit_strcmp_and_strncmp b/.x-sc_prohibit_strcmp_and_strncmp
new file mode 100644
index 0000000..b7c456e
--- /dev/null
+++ b/.x-sc_prohibit_strcmp_and_strncmp
@@ -0,0 +1 @@
+^gnulib/
diff --git a/GNUmakefile b/GNUmakefile
index 157f432..e6d4178 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -40,7 +40,7 @@ export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner

 include Makefile

-include $(srcdir)/Makefile.cfg
+include $(srcdir)/cfg.mk
 include $(srcdir)/Makefile.maint

 else
diff --git a/Makefile.am b/Makefile.am
index 681034a..dd98ff2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,6 +16,7 @@ EXTRA_DIST = \
   .x-sc_avoid_if_before_free \
   .x-sc_require_config_h_first \
   .x-sc_prohibit_strcmp \
+  .x-sc_prohibit_strcmp_and_strncmp \
   .x-sc_require_config_h \
   .x-sc_prohibit_nonreentrant \
   Makefile.nonreentrant \
...
--
1.6.3.3.524.g8586b


>From a4b10833246264377c9c0c99a0178c3e9b6af0f7 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Mon, 6 Jul 2009 19:17:06 +0200
Subject: [PATCH 4/7] skip some of gnulib's new rules

* cfg.mk (local-checks-to-skip): Add these: sc_error_message_uppercase,
sc_program_name, sc_require_test_exit_idiom, sc_makefile_check.
---
 cfg.mk |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index 3c9feb6..35bedd1 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -52,6 +52,10 @@ local-checks-to-skip =			\
   sc_system_h_headers			\
   sc_tight_scope			\
   sc_two_space_separator_in_usage	\
+  sc_error_message_uppercase		\
+  sc_program_name			\
+  sc_require_test_exit_idiom		\
+  sc_makefile_check			\
   sc_useless_cpp_parens

 useless_free_options =		\
--
1.6.3.3.524.g8586b


>From 856172836da7f639323702aff67489e9a74d47d5 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 7 Jul 2009 11:22:52 +0200
Subject: [PATCH 5/7] make .gnulib a submodule

This makes it so we record (via a git submodule)
a snapshot of whatever version of gnulib we're using,
and none of gnulib sources are in the libvirt repository.
The result is that we have as much reproducibility as when
we version-controlled imported copies of the gnulib sources,
but without the hassle of the manual process we used when
syncing with upstream.

Note that when you clone libvirt, you get only the libvirt
repository, but when you first run ./bootstrap, it clones
gnulib (at the SHA1 recorded via the submodule), creating
the .gnulib/ hierarchy.  Then, the bootstrap script runs
gnulib-tool to populate gnulib/ with the files that make
up the selected modules.

Put the following in your ~/.gitconfig file.
[alias]
  syncsub = submodule foreach git pull origin master

The update procedure is simple:
  git syncsub
  ...build & test...
  git commit -m 'gnulib: sync submodule to latest' .gnulib

* .gitmodules: New file.
* .gnulib: Initialize.
* bootstrap: Set up to use the new submodule.
Stop using --no-vc-files.
Don't remove .gitignore files.
Don't use or create .cvsignore.
Diagnose an invalid --gnulib-srcdir=DIR argument.
* build-aux/vc-list-files: Delete file, now pulled from gnulib.
* build-aux/useless-if-before-free: Likewise.
* po/POTFILES.in: Remove gnulib/lib/gai_strerror.c, since
it no longer contains translatable strings.
* gnulib/*: Remove gnulib/ hierarchy.
---
 .gitignore                             |    1 +
 .gitmodules                            |    3 +
 .gnulib                                |    1 +
 bootstrap                              |   45 +-
 build-aux/useless-if-before-free       |  180 --
 build-aux/vc-list-files                |  107 -
 gnulib/lib/.cvsignore                  |   26 -
 gnulib/lib/.gitignore                  |   26 -
 gnulib/lib/Makefile.am                 | 1241 --------
 gnulib/lib/alloca.c                    |  489 ----
 gnulib/lib/alloca.in.h                 |   56 -
 gnulib/lib/arpa/.cvsignore             |    1 -
 gnulib/lib/arpa/.gitignore             |    1 -
 gnulib/lib/arpa_inet.in.h              |   90 -
 ...

diff --git a/.gitignore b/.gitignore
index ca73a98..964580c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,4 @@ stamp-h
 stamp-h.in
 stamp-h1
 update.log
+tests/*.log
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..7acb1ea
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "gnulib"]
+	path = .gnulib
+	url = git://git.sv.gnu.org/gnulib.git
diff --git a/.gnulib b/.gnulib
new file mode 160000
index 0000000..1203e8d
--- /dev/null
+++ b/.gnulib
@@ -0,0 +1 @@
+Subproject commit 1203e8d1f62dec3d2436dffadd5c20793cf84366
diff --git a/bootstrap b/bootstrap
index baf52e7..7ce28da 100755
--- a/bootstrap
+++ b/bootstrap
@@ -40,25 +40,31 @@ do
   esac
 done

-cleanup_gnulib() {
-  st=$?
-  rm -fr .gnulib
-  exit $st
-}
+# Get gnulib files.

 case ${GNULIB_SRCDIR--} in
 -)
-  if [ ! -d .gnulib ]; then
+  echo "$0: getting gnulib files..."
+  git submodule init || exit $?
+  git submodule update || exit $?
+  GNULIB_SRCDIR=.gnulib
+  ;;
+*)
+  # Redirect the gnulib submodule to the directory on the command line
+  # if possible.
+  if test -d "$GNULIB_SRCDIR"/.git && \
+	git config --file .gitmodules submodule.gnulib.url >/dev/null; then
+    git submodule init
+    GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
+    git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
     echo "$0: getting gnulib files..."
-
-    trap cleanup_gnulib 1 2 13 15
-
-    git clone --depth 1 git://git.sv.gnu.org/gnulib .gnulib ||
-      cleanup_gnulib
-
-    trap - 1 2 13 15
+    git submodule update || exit $?
+    GNULIB_SRCDIR=.gnulib
+  else
+    echo >&2 "$0: invalid gnulib srcdir: $GNULIB_SRCDIR"
+    exit 1
   fi
-  GNULIB_SRCDIR=.gnulib
+  ;;
 esac

 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
@@ -103,20 +109,9 @@ vc-list-files
 #   put *.[ch] files in new gnulib/lib/ dir.

 $gnulib_tool			\
-  --no-vc-files			\
   --lgpl=2			\
   --with-tests			\
   --m4-base=gnulib/m4		\
   --source-base=gnulib/lib	\
   --tests-base=gnulib/tests	\
   --import $modules
-
-rm -f				\
-    .gitignore			\
-    gnulib/lib/.gitignore	\
-    gnulib/m4/.gitignore	\
-    gnulib/tests/.gitignore
-
-(cd gnulib/lib &&
- (cat .cvsignore; \
-  ls -1 *.in.h|sed 's/\.in\.h/.h/') | sort -u > .t; mv .t .cvsignore)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 973f580..357cd70 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,4 +1,3 @@
-gnulib/lib/gai_strerror.c
 qemud/qemud.c
 qemud/remote.c
 src/bridge.c

...
--
1.6.3.3.524.g8586b


>From ab811737a6914133bf12a46d4c5b5a2a2bdd9ee9 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 7 Jul 2009 12:05:18 +0200
Subject: [PATCH 6/7] remove all .cvsignore files

---
 .cvsignore                                 |   34 -------------------------
 build-aux/.cvsignore                       |   10 -------
 build-aux/.gitignore                       |    2 +
 docs/.cvsignore                            |    4 ---
 docs/devhelp/.cvsignore                    |    3 --
 docs/examples/.cvsignore                   |    7 -----
 docs/examples/python/.cvsignore            |    2 -
 docs/schemas/.cvsignore                    |    2 -
 examples/domain-events/events-c/.cvsignore |    6 ----
 examples/hellolibvirt/.cvsignore           |    5 ----
 include/.cvsignore                         |    2 -
 include/libvirt/.cvsignore                 |    2 -
 m4/.cvsignore                              |   37 ----------------------------
 po/.cvsignore                              |   15 -----------
 proxy/.cvsignore                           |    5 ----
 python/.cvsignore                          |   15 -----------
 python/tests/.cvsignore                    |    2 -
 qemud/.cvsignore                           |   12 ---------
 src/.cvsignore                             |   20 ---------------
 tests/.cvsignore                           |   28 ---------------------
 tests/confdata/.cvsignore                  |    2 -
 tests/sexpr2xmldata/.cvsignore             |    2 -
 tests/xencapsdata/.cvsignore               |    2 -
 tests/xmconfigdata/.cvsignore              |    2 -
 tests/xml2sexprdata/.cvsignore             |    2 -
 tools/.cvsignore                           |    4 ---
 26 files changed, 2 insertions(+), 225 deletions(-)

...
--
1.6.3.3.524.g8586b


>From b718b0763f8fbfc35af586fa6d132d39259d0e11 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 7 Jul 2009 18:08:45 +0200
Subject: [PATCH 7/7] use gnumakefile and maintainer-makefile modules from gnulib

* bootstrap (modules): Add gnumakefile and maintainer-makefile.
* GNUmakefile: Remove file, now provided by gnulib.
* Makefile.maint: Remove.  Replaced by maint.mk from gnulib.
.gitignore: Add GNUmakefile and maint.mk.
* cfg.mk (prev_version_file): Disable this feature.
Setting this to /dev/null avoids an otherwise harmless diagnostic.
---
 .gitignore     |    2 +
 GNUmakefile    |   60 -----
 Makefile.maint |  770 --------------------------------------------------------
 bootstrap      |    2 +
 cfg.mk         |    3 +
 5 files changed, 7 insertions(+), 830 deletions(-)
 delete mode 100644 GNUmakefile
 delete mode 100644 Makefile.maint

...
diff --git a/bootstrap b/bootstrap
index 7ce28da..b0de3df 100755
--- a/bootstrap
+++ b/bootstrap
@@ -78,8 +78,10 @@ getaddrinfo
 gethostname
 getpass
 gettext
+gnumakefile
 inet_pton
 ioctl
+maintainer-makefile
 mkstemp
 mktempd
 perror
diff --git a/cfg.mk b/cfg.mk
index 35bedd1..736f7c0 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -227,3 +227,6 @@ sc_libvirt_unmarked_diagnostics:
 	   | grep '[	 ]"' &&						\
 	  { echo '$(ME): found unmarked diagnostic(s)' 1>&2;		\
 	    exit 1; } || :
+
+# We don't use this feature of maint.mk.
+prev_version_file = /dev/null
--
1.6.3.3.524.g8586b




More information about the libvir-list mailing list