blob: fc6851137953488d176dddd6c5922e5a00d95c2e [file] [log] [blame]
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