summaryrefslogtreecommitdiff
path: root/Build-tools
diff options
context:
space:
mode:
authorunknown <mwagner@here.mwagner.org>2004-06-18 14:57:42 -0500
committerunknown <mwagner@here.mwagner.org>2004-06-18 14:57:42 -0500
commit9c5ba5c7b55bf89e548c64d4c5ab4ec590c47588 (patch)
tree5668a8d25039e71cc0d2e8e1af1c5034cd2f06d7 /Build-tools
parent5ce2792f9f908b7446e2169fc2a9a0a1d0b97019 (diff)
downloadmariadb-git-9c5ba5c7b55bf89e548c64d4c5ab4ec590c47588.tar.gz
my_md5sum:
new file, simulates 'md5sum' as a perl script BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'Build-tools')
-rwxr-xr-xBuild-tools/my_md5sum123
1 files changed, 123 insertions, 0 deletions
diff --git a/Build-tools/my_md5sum b/Build-tools/my_md5sum
new file mode 100755
index 00000000000..d58a8bb7200
--- /dev/null
+++ b/Build-tools/my_md5sum
@@ -0,0 +1,123 @@
+#!/usr/bin/perl
+#
+# my_md5sum
+#
+# Script to clone the 'md5sum' command found on modern systems, since that
+# command is not always found on all systems.
+#
+# Use the "--help" option for more info!
+#
+# Written by Matt Wagner <matt@mysql.com>
+#
+use strict;
+use Digest::MD5;
+use Getopt::Long;
+
+my $VER= "1.0";
+
+#
+# Strip the leading path info off the program name ($0). We want 'my_md5sum'
+# not './my_md5sum'.
+#
+$0=~ s/^.*\/(.+)$/$1/;
+
+my ($opt_check, $opt_help)= undef;
+
+GetOptions(
+ "check|c" => \$opt_check,
+ "help|h" => \$opt_help,
+ ) || usage();
+
+#
+# Put all the [file1 file2 file3 ...]'s into an array
+#
+my @files = @ARGV;
+
+#
+# Give the "--help" text if:
+# - "--help|-h" was specified
+# - The number of files given as arguments is nil
+# - The "--check|-c" option is used with more than one [file] argument
+#
+usage() if $opt_help || $#files == -1 || ($opt_check && $#files > 0);
+
+# If "--check|-c", then go into checking
+if ($opt_check)
+{
+ open (CHECKFILE, $files[0]) or die "$files[0]: $!";
+
+ while (<CHECKFILE>)
+ {
+ #
+ # Goto the next line in the file if it does not match a typical
+ # digest line like:
+ #
+ # f1007efa2c72daa693981ec764cdeaca Bootstrap
+ #
+ next if $_!~ m/^([a-z0-9]{32})\s+(.+)$/;
+
+ # Collect the trappings from the above regex
+ my $checksum= $1;
+ my $checkfile= $2;
+
+ # Generate a fresh MD5 for the file in question
+ my $digest= &mkmd5($checkfile);
+
+ # Check the fresh MD5 against what is recorded in the file
+ # Print an error message if they don't match
+ print "$0: MD5 check failed for '$checkfile'\n" if $digest ne $checksum;
+ }
+}
+# Else generate the MD5 digest to STDOUT
+else
+{
+ foreach my $file (@files)
+ {
+ my $digest= &mkmd5($file);
+
+ print "$digest $file\n";
+ }
+}
+
+
+#
+# This routine generates the MD5 digest of a file
+#
+sub mkmd5
+{
+ my $file= shift;
+
+ open (FILE, $file) or die "$file: $!";
+ binmode(FILE);
+
+ my $digest= Digest::MD5->new->addfile(*FILE)->hexdigest;
+
+ close FILE;
+
+ return $digest;
+}
+
+#
+# Print the help text
+#
+sub usage
+{
+ print <<EOF;
+
+$0 version $VER by Matt Wagner <matt\@mysql.com>
+
+Usage:
+$0 [-c [file]] | [file1...]
+Generates or checks MD5 message digests.
+
+Options:
+-c, --check Check message digests (default is generate)
+-h, --help Display this text and exit
+
+The input for -c should be the list of message digests and file names that is
+printed on STDOUT by this program when it generates digests.
+
+EOF
+
+ exit(0);
+}