]> granicus.if.org Git - neomutt/commitdiff
Allow creating Distribution Tarballs with autogen sources
authorDarshit Shah <darnir@gmail.com>
Sun, 14 Aug 2016 15:52:27 +0000 (17:52 +0200)
committerRichard Russon <rich@flatcap.org>
Thu, 18 Aug 2016 21:55:01 +0000 (22:55 +0100)
With this commit `make dist` works again. The following changes were
made:
  * Change how versioning is done. We now use the `git-version-gen`
  script from gnulib to generate a tarball version based on the latest
  git tag.
  * Ignored files in distribution: Some autogenerated files don't need
  to be in the distribution tarball:
    * hcachever.sh
    * mkchangelog.sh
    * prepare (Doesn't need to be since tarballs don't use it)
    * BEWARE (Is to scare developers, not users)
    * check_sec.sh (For devs to test)
    * README.notmuch (Installed as a generated file with other READMEs)
  * Added files to the tarball:
    * README.md
    * README.neomutt
    * ChangeLog.neomutt
    * .version
  * Fixed various issues preventing `make dist` from completing

.gitignore
Makefile.am
configure.ac
contrib/Makefile.am
doc/Makefile.am
git-version-gen [new file with mode: 0755]

index ecd16d1f50850eb66a2b577f284213294d964d6c..80d5ffc897c31de16231b37d4963736793430112 100644 (file)
@@ -27,6 +27,7 @@ doc/stamp-doc-xml
 
 po/POTFILES
 
+.version
 aclocal.m4
 compile
 config.guess
index f385375d45580f5393a32f0ba098fe74603a333d..997381c3d5b8791725c637cf441e439bf7c842a4 100644 (file)
@@ -18,7 +18,7 @@ if BUILD_HCACHE
 HCVERSION = hcversion.h
 endif
 
-BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c $(HCVERSION)
+BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c hcachever.sh $(HCVERSION) $(top_srcdir)/.version
 
 bin_PROGRAMS = mutt $(DOTLOCK_TARGET) $(PGPAUX_TARGET)
 mutt_SOURCES = \
@@ -61,21 +61,22 @@ EXTRA_mutt_SOURCES = account.c bcache.c compress.c crypt-gpgme.c crypt-mod-pgp-c
        bcache.h browser.h hcache.h mbyte.h mutt_idna.h remailer.h url.h
 
 EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \
-       configure account.h \
+       account.h \
        attach.h buffy.h charset.h compress.h copy.h crypthash.h dotlock.h functions.h gen_defs \
        globals.h hash.h history.h init.h keymap.h mutt_crypt.h \
        mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \
        mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \
        mx.h pager.h pgp.h pop.h protos.h rfc1524.h rfc2047.h \
-       rfc2231.h rfc822.h rfc3676.h sha1.h sort.h mime.types VERSION prepare \
+       rfc2231.h rfc822.h rfc3676.h sha1.h sort.h mime.types VERSION \
        nntp.h ChangeLog.nntp \
        _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h \
        mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h \
-       README.SSL smime.h group.h \
-       pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \
-       ChangeLog mkchangelog.sh mutt_idna.h sidebar.h OPS.SIDEBAR \
-       snprintf.c regex.c crypt-gpgme.h hcachever.sh.in \
-       txt2c.c txt2c.sh version.sh check_sec.sh version.h
+       README.SSL README.md README.neomutt smime.h group.h \
+       pgppacket.h depcomp ascii.h PATCHES patchlist.sh \
+       ChangeLog ChangeLog.neomutt mutt_idna.h sidebar.h OPS.SIDEBAR \
+       snprintf.c regex.c crypt-gpgme.h hcachever.sh.in sys_socket.h \
+       txt2c.c txt2c.sh version.sh version.h \
+       $(top_srcdir)/.version git-version-gen
 
 EXTRA_SCRIPTS = smime_keys
 
@@ -85,7 +86,7 @@ mutt_LDADD += $(NOTMUCH_LIBS)
 endif
 
 # kz
-EXTRA_DIST += UPDATING.kz README.notmuch OPS.NOTMUCH
+EXTRA_DIST += UPDATING.kz OPS.NOTMUCH
 
 
 
@@ -130,6 +131,12 @@ ACLOCAL_AMFLAGS = -I m4
 
 LDADD = $(LIBOBJS) $(INTLLIBS)
 
+$(top_srcdir)/.version:
+       echo $(VERSION) > $@-t && mv $@-t $@
+
+dist-hook:
+       echo $(VERSION) > $(distdir)/.tarball-version
+
 smime_keys: $(srcdir)/smime_keys.pl
        cp $(srcdir)/smime_keys.pl smime_keys
        chmod +x smime_keys
@@ -143,7 +150,7 @@ keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.SIDEBAR $(srcdir)/OPS.NOTMUCH $(sr
                $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \
                        > keymap_alldefs.h
 
-reldate.h: $(top_srcdir)/ChangeLog.neomutt
+reldate.h:
        date=`head -n 1 $(top_srcdir)/ChangeLog.neomutt | LC_ALL=C cut -b 1-10` && \
        echo 'const char *ReleaseDate = "'$$date'";' > reldate.h.tmp; \
        cmp -s reldate.h.tmp reldate.h || cp reldate.h.tmp reldate.h; \
index f7d0b4a002d22dcb349f73639866da45d11197c6..dbfb459369a95c50db5673ccd4ddeb0ae64a601a 100644 (file)
@@ -6,7 +6,7 @@ dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED            !!!
 CFLAGS=$CFLAGS
 LDFLAGS=$LDFLAGS
 
-AC_INIT([NeoMutt], [m4_esyscmd(tr -d \\n <VERSION)], [https://github.com/neomutt/neomutt/issues], [mutt], [http://www.neomutt.org])
+AC_INIT([NeoMutt], [m4_esyscmd(./git-version-gen --prefix "neomutt-" .tarball-version)], [https://github.com/neomutt/neomutt/issues], [neomutt], [http://www.neomutt.org])
 AC_CONFIG_SRCDIR(mutt.h)
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADERS([config.h])
index aa53f8f626f7dccbbf6e105d4d0dda4845348c09..f50fa26396ba8afbf47ffca5410af2c0280329cb 100644 (file)
@@ -11,12 +11,14 @@ EXTRA_DIST = language.txt language50.txt  \
        patch.slang-1.2.2.keypad.1      \
        $(SAMPLES) \
        iconv/README \
-       iconv/make.sh
+       iconv/make.sh \
+       vim-keybindings \
+       keybase
 
 CONTRIB_DIRS = vim-keybindings
 
 install-data-local:
-       $(MKDIR_P) $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv
+       $(INSTALL) -d -m 755 $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv
        for f in $(SAMPLES) ; do \
                $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir)/samples ;   \
        done
@@ -24,7 +26,12 @@ install-data-local:
                $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/samples/iconv   ;     \
        done
        for d in $(CONTRIB_DIRS); do                                            \
-               cp -r $(srcdir)/$$d $(DESTDIR)$(docdir);                        \
+               echo "Installing $$d" ; \
+               $(INSTALL) -d -m 755 $(DESTDIR)$(docdir)/$$d ;\
+               for f in $(srcdir)/$$d/*; do    \
+                       echo "Installing $$f" ; \
+                       $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/$$d ; \
+               done \
        done
 
 uninstall-local:
index e0d451e218e3f5f42111050fe04482f71d792133..606c0c7f3bc447e73a56ea967123be8f66668285 100644 (file)
@@ -73,9 +73,6 @@ install-data-local: makedoc-all instdoc
        ./instdoc $(srcdir)/mbox.man $(DESTDIR)$(mandir)/man5/mbox.5
        ./instdoc $(srcdir)/mmdf.man $(DESTDIR)$(mandir)/man5/mmdf.5
        $(MKDIR_P) $(DESTDIR)$(docdir)
-       for f in $(topsrcdir_DOCFILES) ; do \
-               $(INSTALL) -m 644 $(top_srcdir)/$$f $(DESTDIR)$(docdir) ; \
-       done
        for f in $(srcdir_DOCFILES) ; do \
                $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir) ; \
        done
@@ -193,7 +190,7 @@ smime_keys.1: $(srcdir)/smime_keys.man
 
 stamp-doc-xml: makedoc$(EXEEXT) $(top_srcdir)/init.h \
                manual.xml.head $(top_srcdir)/functions.h $(top_srcdir)/OPS* manual.xml.tail \
-               $(srcdir)/gen-map-doc $(top_srcdir)/VERSION $(top_srcdir)/ChangeLog.neomutt
+               $(srcdir)/gen-map-doc $(top_srcdir)/VERSION
        ( date=`head -n 1 $(top_srcdir)/ChangeLog.neomutt | LC_ALL=C cut -b 1-10` && \
          sed -e "s/@VERSION\@/`$(top_srcdir)/version.sh` ($$date)/" $(srcdir)/manual.xml.head && \
          $(MAKEDOC_CPP) $(top_srcdir)/init.h | ./makedoc$(EXEEXT) -s && \
diff --git a/git-version-gen b/git-version-gen
new file mode 100755 (executable)
index 0000000..bd2c4b6
--- /dev/null
@@ -0,0 +1,226 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2016-05-08.18; # UTC
+
+# Copyright (C) 2007-2016 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+#   produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+#   presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+#   a checked-out repository.  Created with contents that were learned at
+#   the last time autoconf was run, and used by git-version-gen.  Must not
+#   be present in either $(srcdir) or $(builddir) for git-version-gen to
+#   give accurate answers during normal development with a checked out tree,
+#   but must be present in a tarball when there is no version control system.
+#   Therefore, it cannot be used in any dependencies.  GNUmakefile has
+#   hooks to force a reconfigure at distribution time to get the value
+#   correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+#   tarball.  Usable in dependencies, particularly for files that don't
+#   want to depend on config.h but do want to track version changes.
+#   Delete this file prior to any autoconf run where you want to rebuild
+#   files to pick up a version string change; and leave it stale to
+#   minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+#         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+#         [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+#      echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+#      echo $(VERSION) > $(distdir)/.tarball-version
+
+
+me=$0
+
+version="git-version-gen $scriptversion
+
+Copyright 2011 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+   --prefix PREFIX    prefix of git tags (default 'v')
+   --fallback VERSION
+                      fallback version to use if \"git --version\" fails
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+Running without arguments will suffice in most cases."
+
+prefix=v
+fallback=
+
+while test $# -gt 0; do
+  case $1 in
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    --prefix) shift; prefix=${1?};;
+    --fallback) shift; fallback=${1?};;
+    -*)
+      echo "$0: Unknown option '$1'." >&2
+      echo "$0: Try '--help' for more information." >&2
+      exit 1;;
+    *)
+      if test "x$tarball_version_file" = x; then
+        tarball_version_file="$1"
+      elif test "x$tag_sed_script" = x; then
+        tag_sed_script="$1"
+      else
+        echo "$0: extra non-option argument '$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+if test "x$tarball_version_file" = x; then
+    echo "$usage"
+    exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+    v=`cat $tarball_version_file` || v=
+    case $v in
+        *$nl*) v= ;; # reject multi-line output
+        [0-9]*) ;;
+        *) v= ;;
+    esac
+    test "x$v" = x \
+        && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test "x$v" != x
+then
+    : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+    && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+          || git describe --abbrev=4 HEAD 2>/dev/null` \
+    && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+    && case $v in
+         $prefix[0-9]*) ;;
+         *) (exit 1) ;;
+       esac
+then
+    # Is this a new git that lists number of commits since the last
+    # tag or the previous older version that did not?
+    #   Newer: v6.10-77-g0f8faeb
+    #   Older: v6.10-g0f8faeb
+    case $v in
+        *-*-*) : git describe is okay three part flavor ;;
+        *-*)
+            : git describe is older two part flavor
+            # Recreate the number of commits and rewrite such that the
+            # result is the same as if we were using the newer version
+            # of git describe.
+            vtag=`echo "$v" | sed 's/-.*//'`
+            commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+                || { commit_list=failed;
+                     echo "$0: WARNING: git rev-list failed" 1>&2; }
+            numcommits=`echo "$commit_list" | wc -l`
+            v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+            test "$commit_list" = failed && v=UNKNOWN
+            ;;
+    esac
+
+    # Change the first '-' to a '.', so version-comparing tools work properly.
+    # Remove the "g" in git describe's output string, to save a byte.
+    v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+    v_from_git=1
+elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
+    v=UNKNOWN
+else
+    v=$fallback
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git.  I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test "x$v_from_git" != x; then
+  # Don't declare a version "dirty" merely because a time stamp has changed.
+  git update-index --refresh > /dev/null 2>&1
+
+  dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+  case "$dirty" in
+      '') ;;
+      *) # Append the suffix only if there isn't one already.
+          case $v in
+            *-dirty) ;;
+            *) v="$v-dirty" ;;
+          esac ;;
+  esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+printf %s "$v"
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End: