poke-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2] Integrate git-version-gen.


From: Jose E. Marchesi
Subject: Re: [PATCH v2] Integrate git-version-gen.
Date: Sat, 28 Jan 2023 00:10:17 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

Hi Arsen.

Thank you for installing this.

Now, we will need a pk_version_compare function implementing <, > and ==
particularly for the new poke version strings.

An example of use is the implementation of the PK_PROG_POKE autoconf
macro.  At the moment we have this in autoconf/poke.m4:

  exit (pk_version >= "$2" ? 0 : 1);

But clearly that may easily break.



> * etc/hacking.org (Building Release Tarballs): Add some notes
> about how to get correct versioning information.
> * configure.ac: Invoke git-version-gen to compute version value.
> * bootstrap.conf (gnulib_modules): Add git-version-gen.
> * Makefile.am (EXTRA_DIST): Add ``.version''.
> (BUILT_SOURCES): Ditto.
> ($(top_srcdir)/.version): store current $(VERSION) value.
> (dist-hook): Store version as .tarball-version.
> * .gitignore: Ignore .version
> * HACKING: Regenerate.
> ---
> Evening,
>
> This patchset includes the changes discussed on IRC and a little bit of
> extended documentation.  If this looks OK, please apply when you feel it
> appropriate to do so, as part of a release.
>
>  .gitignore      |  1 +
>  ChangeLog       | 14 ++++++++++++++
>  HACKING         | 15 +++++++++++++++
>  Makefile.am     | 11 ++++++++++-
>  bootstrap.conf  |  1 +
>  configure.ac    | 33 ++++++++++++++++++++++++++++++++-
>  etc/hacking.org | 25 +++++++++++++++++++++++++
>  7 files changed, 98 insertions(+), 2 deletions(-)
>
> diff --git a/.gitignore b/.gitignore
> index bdd339c4..cdbcec19 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -85,6 +85,7 @@ config.h.in
>  /poke.pc.in
>  /poke-uninstalled.pc
>  /poke-uninstalled.sh
> +/.version
>  
>  ## Tag files created by ctags
>  tags
> diff --git a/ChangeLog b/ChangeLog
> index 0c677c14..821f0718 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -73,6 +73,20 @@
>  
>       * poked/poked.c (poked_version): Don't use year range.
>  
> +2023-01-24  Arsen Arsenović  <arsen@aarsen.me>
> +
> +     Integrate git-version-gen.
> +     * etc/hacking.org (Building Release Tarballs): Add some notes
> +     about how to get correct versioning information.
> +     * configure.ac: Invoke git-version-gen to compute version value.
> +     * bootstrap.conf (gnulib_modules): Add git-version-gen.
> +     * Makefile.am (EXTRA_DIST): Add ``.version''.
> +     (BUILT_SOURCES): Ditto.
> +     ($(top_srcdir)/.version): store current $(VERSION) value.
> +     (dist-hook): Store version as .tarball-version.
> +     * .gitignore: Ignore .version
> +     * HACKING: Regenerate.
> +
>  2023-01-23  Jose E. Marchesi  <jemarch@gnu.org>
>  
>       * libpoke/pvm.jitter (PVM_BINOP_SL): Do not trigger left-shit UB.
> diff --git a/HACKING b/HACKING
> index 123dbc57..5325092d 100644
> --- a/HACKING
> +++ b/HACKING
> @@ -234,6 +234,21 @@ with GNU poke.  If not, see 
> <https://www.gnu.org/licenses/>.
>    The standard target `make distcheck' builds a distributable sources
>    tarball, and tests that it can be built and tested properly.
>  
> +  Note that if you're working on a checkout that is not fresh (i.e. it
> +  has had commits or tags since you last ran `./autogen.sh'), it is
> +  desirable to re-run `./autogen.sh', or otherwise regenerate
> +  `configure', to get updated version information.  This version will be
> +  stored in the newly-generated dist tarball.
> +
> +  Keep in mind that, when regenerating, a dirty tree, including
> +  differently dated submodules, will cause the version to be suffixed
> +  with `-dirty'.  Should this happen, and you want to go through with
> +  the release anyway, `git stash' your changes and `git submodule
> +  update' submodules, so that they get checked out to in-tree revisions.
> +  This also ensures that you're testing the version of the tree that
> +  will make it into a release, rather than something with a potentially
> +  uncommitted fix, or suchlike.
> +
>  
>  2.6 Installing Obvious Changes
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> diff --git a/Makefile.am b/Makefile.am
> index 83bce1ac..d402da0b 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -19,7 +19,8 @@ ACLOCAL_AMFLAGS = -I m4 -I m4/libpoke
>  SUBDIRS = jitter gl maps pickles gl-libpoke libpoke poke poked utils \
>            doc man testsuite etc po
>  
> -EXTRA_DIST = INSTALL.generic DEPENDENCIES
> +EXTRA_DIST = INSTALL.generic DEPENDENCIES $(top_srcdir)/.version
> +BUILT_SOURCES = $(top_srcdir)/.version
>  
>  noinst_SCRIPTS = run
>  
> @@ -47,4 +48,12 @@ update-hacking:
>       emacs ${srcdir}/etc/hacking.org --batch -f org-ascii-export-to-ascii 
> --kill
>       mv -f ${srcdir}/etc/hacking.txt ${srcdir}/HACKING
>  
> +# Support for git-version-gen
> +$(top_srcdir)/.version: $(top_srcdir)/configure
> +     echo '$(VERSION)' > $@-t
> +     mv $@-t $@
> +
> +dist-hook:
> +     echo '$(VERSION)' > $(distdir)/.tarball-version
> +
>  .PHONY = update-hacking
> diff --git a/bootstrap.conf b/bootstrap.conf
> index abd82a1b..4990defa 100644
> --- a/bootstrap.conf
> +++ b/bootstrap.conf
> @@ -33,6 +33,7 @@ gnulib_modules="
>    getline
>    getsockname
>    getopt-gnu
> +  git-version-gen
>    glob
>    host-cpu-c-abi
>    isatty
> diff --git a/configure.ac b/configure.ac
> index 3c98032a..2ed024eb 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -18,7 +18,38 @@ dnl
>  dnl You should have received a copy of the GNU General Public License
>  dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
> -AC_INIT([GNU poke], [2.90.1], [poke-devel@gnu.org], [poke],
> +dnl Branch-specific suffix to apply to the version, to disambiguate it from
> +dnl other branches.  master and maint/poke-* are treated special in that they
> +dnl get a short description, where all other branches get emitted in full.
> +m4_define([poke_branch],
> +       [m4_esyscmd_s([git tag --points-at HEAD 2>/dev/null | grep -q . \
> +                            || { git branch --show-current                \
> +                                     | sed 's|^maint/poke-.*|maint|;
> +                                            s|^master$|dev|'; }])])
> +
> +
> +dnl Version generated from a Git tag via git-version-gen.  To understand the
> +dnl following mess, it is integral to know that ``:'' is special in Git and
> +dnl will never be emitted.  We (ab)use this fact to escape the ``-g'', which 
> is
> +dnl another special construct in Git - used by git-describe output to delimit
> +dnl the object reference from data for human consumption.
> +dnl We also rely on this fact and choose ``:'' as a safe sed delimiter.
> +dnl After we escape -g, and sufficiently mangle the describe output in order 
> to
> +dnl shove the branch name into the middle of it, we convert the escape ``:''
> +dnl back into a ``g'', so that we end up with a git-showable reference 
> (unless
> +dnl the tree is -dirty).
> +
> +m4_define([poke_version], [m4_esyscmd_s([
> +    build-aux/git-version-gen .tarball-version                            \
> +        --prefix 'releases\/poke-'                                        \
> +        
> 's:^\(releases/poke-\)\([^-]*\)-\([^-]*\)\(-g.*\):\1\2-]poke_branch()-[\3\4:;
> +         s:g\([[:xdigit:]]\+\)$:\:\1:'                                    \
> +      | sed 's/:/g/'
> +])])
> +
> +AC_INIT([GNU poke],
> +        [poke_version()],
> +     [poke-devel@gnu.org], [poke],
>          [http://www.jemarch.net/poke.html])
>  
>  AC_CONFIG_AUX_DIR([build-aux])
> diff --git a/etc/hacking.org b/etc/hacking.org
> index 98f5c9bf..12f41fb0 100644
> --- a/etc/hacking.org
> +++ b/etc/hacking.org
> @@ -110,6 +110,31 @@ Arsen Arsenović          <arsen@aarsen.me>
>     The standard target =make distcheck= builds a distributable sources
>     tarball, and tests that it can be built and tested properly.
>  
> +   The version information the package gets built against is
> +   automatically determined from git, based on =git describe= output
> +   and the current branch.  The format for versions generated like this
> +   is: =X.Y[.Z]-BRANCH-NN-gHASH= for an inter-version build, and
> +   =X.Y[.Z]= for a release.  In either case, if the tree you're
> +   building is not clean, you will get a =-dirty= suffix.
> +
> +   =X.Y[.Z]= gets computed from the latest annotated tag on your
> +   current =HEAD= history.
> +
> +   Note that if you're working on a checkout that is not fresh (i.e. it
> +   has had commits or tags since you last ran =./autogen.sh=), it is
> +   desirable to re-run =./autogen.sh=, or otherwise regenerate
> +   =configure=, to get updated version information.  This version will
> +   be stored in the newly-generated dist tarball.
> +
> +   Keep in mind that, when regenerating, a dirty (i.e. modified) tree,
> +   including differently dated submodules, will cause the version to be
> +   suffixed with =-dirty=.  Should this happen, and you want to go
> +   through with the release anyway, =git stash= your changes and =git
> +   submodule update= submodules, so that they get checked out to
> +   in-tree revisions.  This also ensures that you're testing the
> +   version of the tree that will make it into a release, rather than
> +   something with a potentially uncommitted fix, or suchlike.
> +
>  ** Installing Obvious Changes
>  
>     Anyone having write access to the git repository is allowed to push



reply via email to

[Prev in Thread] Current Thread [Next in Thread]