| From acd49f242c867583856973fd8644a45e53f56489 Mon Sep 17 00:00:00 2001 |
| From: Kevin McCarthy <kevin@8t8.us> |
| Date: Wed, 8 Jan 2020 19:09:33 -0800 |
| Subject: [PATCH] Convert hcachever.sh.in to hcachever.pl. |
| |
| Use Digest::MD5 to remove build-time dependency on mutt_md5, for |
| cross-compilation support. |
| |
| Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| [Retrieved (and slightly updated to remove .gitignore) from: |
| https://gitlab.com/muttmua/mutt/commit/acd49f242c867583856973fd8644a45e53f56489] |
| --- |
| .gitignore | 2 - |
| Makefile.am | 14 +++--- |
| configure.ac | 7 +-- |
| hcachever.pl | 112 ++++++++++++++++++++++++++++++++++++++++++++++++ |
| hcachever.sh.in | 89 -------------------------------------- |
| 5 files changed, 118 insertions(+), 106 deletions(-) |
| create mode 100644 hcachever.pl |
| delete mode 100755 hcachever.sh.in |
| |
| diff --git a/Makefile.am b/Makefile.am |
| index cede1adb..e46f6544 100644 |
| --- a/Makefile.am |
| +++ b/Makefile.am |
| @@ -3,7 +3,7 @@ |
| include $(top_srcdir)/flymake.am |
| |
| AUTOMAKE_OPTIONS = 1.6 foreign |
| -EXTRA_PROGRAMS = mutt_dotlock mutt_pgpring pgpewrap mutt_md5 |
| +EXTRA_PROGRAMS = mutt_dotlock mutt_pgpring pgpewrap |
| |
| if BUILD_IMAP |
| IMAP_SUBDIR = imap |
| @@ -80,7 +80,7 @@ EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \ |
| README.SSL smime.h group.h mutt_zstrm.h \ |
| muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ |
| ChangeLog mkchangelog.sh mkreldate.sh mutt_idna.h sidebar.h OPS.SIDEBAR \ |
| - snprintf.c regex.c crypt-gpgme.h hcachever.sh.in \ |
| + snprintf.c regex.c crypt-gpgme.h hcachever.pl \ |
| txt2c.c txt2c.sh version.sh check_sec.sh |
| |
| EXTRA_SCRIPTS = smime_keys |
| @@ -93,14 +93,10 @@ mutt_pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppack |
| mutt_pgpring_LDADD = $(LIBOBJS) $(INTLLIBS) |
| mutt_pgpring_DEPENDENCIES = $(LIBOBJS) $(INTLDEPS) |
| |
| -mutt_md5_SOURCES = md5.c |
| -mutt_md5_CFLAGS = -DMD5UTIL |
| -mutt_md5_LDADD = |
| - |
| txt2c_SOURCES = txt2c.c |
| txt2c_LDADD = |
| |
| -noinst_PROGRAMS = $(MUTT_MD5) txt2c |
| +noinst_PROGRAMS = txt2c |
| |
| mutt_dotlock.c: dotlock.c |
| cp $(srcdir)/dotlock.c mutt_dotlock.c |
| @@ -166,9 +162,9 @@ reldate.h: $(srcdir)/mkreldate.sh $(srcdir)/ChangeLog |
| # If configured with --with-included-gettext this means that intl will |
| # not have generated libintl.h yet, and mutt.h -> lib.h will generate |
| # an error. |
| -hcversion.h: $(srcdir)/mutt.h $(srcdir)/rfc822.h hcachever.sh $(MUTT_MD5) |
| +hcversion.h: $(srcdir)/mutt.h $(srcdir)/rfc822.h config.h $(srcdir)/hcachever.pl |
| ( echo '#include "config.h"'; echo '#undef ENABLE_NLS'; echo '#include "mutt.h"'; ) \ |
| - | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | sh ./hcachever.sh hcversion.h |
| + | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | perl $(srcdir)/hcachever.pl > hcversion.h |
| |
| patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh |
| $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c |
| diff --git a/configure.ac b/configure.ac |
| index 7fe55402..7906ce35 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -1283,11 +1283,6 @@ then |
| MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5.o" |
| fi |
| |
| -if test x$db_found != xno ; then |
| - MUTT_MD5="mutt_md5$EXEEXT" |
| -fi |
| -AC_SUBST(MUTT_MD5) |
| - |
| AC_SUBST(MUTTLIBS) |
| AC_SUBST(MUTT_LIB_OBJECTS) |
| AC_SUBST(LIBIMAP) |
| @@ -1677,5 +1672,5 @@ fi |
| |
| AC_CONFIG_FILES(Makefile contrib/Makefile doc/Makefile imap/Makefile |
| intl/Makefile m4/Makefile po/Makefile.in autocrypt/Makefile |
| - hcachever.sh doc/instdoc.sh) |
| + doc/instdoc.sh) |
| AC_OUTPUT |
| diff --git a/hcachever.pl b/hcachever.pl |
| new file mode 100644 |
| index 00000000..be630a82 |
| --- /dev/null |
| +++ b/hcachever.pl |
| @@ -0,0 +1,112 @@ |
| +#!/usr/bin/perl -w |
| +# |
| +# Copyright (C) 2020 Kevin J. McCarthy <kevin@8t8.us> |
| +# |
| +# 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 2 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, write to the Free Software |
| +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| + |
| +# This file is a rewrite of hcachever.sh.in in perl. |
| +# The rewrite removes the dependency on mutt_md5, in order to |
| +# improve cross-compilation support. |
| + |
| +use strict; |
| +use warnings; |
| +# note Digest::MD5 is standard in perl since 5.8.0 (July 18, 2002) |
| +use Digest::MD5; |
| + |
| + |
| +sub read_line() { |
| + my $line; |
| + |
| + while (1) { |
| + $line = <STDIN>; |
| + return "" if (!$line); |
| + |
| + chomp($line); |
| + $line =~ s/^\s+//; |
| + $line =~ s/\s+$//; |
| + $line =~ s/\s{2,}//g; |
| + |
| + return $line if ($line ne ""); |
| + } |
| +} |
| + |
| + |
| +sub process_struct($$) { |
| + my ($line, $md5) = @_; |
| + my $struct = ""; |
| + my @body; |
| + my $bodytxt; |
| + my $inbody = 0; |
| + |
| + return if $line =~ /;$/; |
| + if ($line =~ /{$/) { |
| + $inbody = 1; |
| + } |
| + |
| + while (($line = read_line()) ne "") { |
| + if (!$inbody) { |
| + return if $line =~ /;$/; |
| + if ($line =~ /{$/) { |
| + $inbody = 1; |
| + } |
| + } |
| + |
| + if ($line =~ /^} (.*);$/) { |
| + $struct = $1; |
| + last; |
| + } |
| + elsif ($line =~ /^}/) { |
| + $struct = read_line(); |
| + if ($struct ne "") { |
| + $struct =~ s/;$//; |
| + } |
| + last; |
| + } |
| + elsif (($line !~ /^#/) && ($line !~ /^{/)) { |
| + if ($inbody) { |
| + push @body, $line; |
| + } |
| + } |
| + } |
| + |
| + if ($struct =~ /^(ADDRESS|LIST|BUFFER|PARAMETER|BODY|ENVELOPE|HEADER)$/) { |
| + $bodytxt = join(" ", @body); |
| + print " * ${struct}: ${bodytxt}\n"; |
| + |
| + $md5->add(" ${struct} {${bodytxt}}"); |
| + } |
| +} |
| + |
| + |
| +my $md5; |
| +my $line; |
| +my $BASEVERSION = "2"; |
| + |
| +$md5 = Digest::MD5->new; |
| + |
| +$md5->add($BASEVERSION); |
| +print "/* base version: $BASEVERSION\n"; |
| + |
| +while (($line = read_line()) ne "") { |
| + if ($line =~ /^typedef struct/) { |
| + process_struct($line, $md5); |
| + } |
| +} |
| + |
| +$md5->add("\n"); |
| +my $digest = substr($md5->hexdigest, 0, 8); |
| + |
| +print " */\n"; |
| +print "#define HCACHEVER 0x${digest}\n"; |
| diff --git a/hcachever.sh.in b/hcachever.sh.in |
| deleted file mode 100755 |
| index 730ca76b..00000000 |
| --- a/hcachever.sh.in |
| +++ /dev/null |
| @@ -1,89 +0,0 @@ |
| -#!/bin/sh |
| - |
| -BASEVERSION=2 |
| - |
| -cleanstruct () { |
| - echo "$1" | sed -e 's/} *//' -e 's/;$//' |
| -} |
| - |
| -cleanbody () { |
| - echo "$1" | sed -e 's/{ *//' |
| -} |
| - |
| -getstruct () { |
| - STRUCT="" |
| - BODY='' |
| - inbody=0 |
| - case "$1" in |
| - *'{') inbody=1 ;; |
| - *';') return ;; |
| - esac |
| - |
| - while read line |
| - do |
| - if test $inbody -eq 0 |
| - then |
| - case "$line" in |
| - '{'*) inbody=1 ;; |
| - *';') return ;; |
| - esac |
| - fi |
| - |
| - case "$line" in |
| - '} '*) |
| - STRUCT=`cleanstruct "$line"` |
| - break |
| - ;; |
| - '}') |
| - read line |
| - STRUCT=`cleanstruct "$line"` |
| - break |
| - ;; |
| - '#'*) continue ;; |
| - *) |
| - if test $inbody -ne 0 |
| - then |
| - BODY="$BODY $line" |
| - fi |
| - ;; |
| - esac |
| - done |
| - |
| - case $STRUCT in |
| - ADDRESS|LIST|BUFFER|PARAMETER|BODY|ENVELOPE|HEADER) |
| - BODY=`cleanbody "$BODY"` |
| - echo "$STRUCT: $BODY" |
| - ;; |
| - esac |
| - return |
| -} |
| - |
| -DEST="$1" |
| -TMPD="$DEST.tmp" |
| - |
| -TEXT="$BASEVERSION" |
| - |
| -echo "/* base version: $BASEVERSION" > $TMPD |
| -while read line |
| -do |
| - case "$line" in |
| - 'typedef struct'*) |
| - STRUCT=`getstruct "$line"` |
| - if test -n "$STRUCT" |
| - then |
| - NAME=`echo $STRUCT | cut -d: -f1` |
| - BODY=`echo $STRUCT | cut -d' ' -f2-` |
| - echo " * $NAME:" $BODY >> $TMPD |
| - TEXT="$TEXT $NAME {$BODY}" |
| - fi |
| - ;; |
| - esac |
| -done |
| -echo " */" >> $TMPD |
| - |
| -MD5TEXT=`echo "$TEXT" | ./mutt_md5` |
| -echo "#define HCACHEVER 0x"`echo $MD5TEXT | cut -c-8` >> $TMPD |
| - |
| -# TODO: validate we have all structs |
| - |
| -mv $TMPD $DEST |
| -- |
| 2.24.1 |
| |