X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/42bc3be31c562fac31cbe5e451e4b48092f06e68..8a6aec16d8c21d3c57457e5ec00eb83f5242feba:/tools/mkversion.pl diff --git a/tools/mkversion.pl b/tools/mkversion.pl new file mode 100644 index 00000000..1c4dfcd9 --- /dev/null +++ b/tools/mkversion.pl @@ -0,0 +1,73 @@ +#!/usr/bin/perl +# Output a version.c file that includes information about the current build +# Normally a couple of lines of bash would be enough (see openpcd project, original firmware by Harald Welte and Milosch Meriac) +# but this will, at least in theory, also work on Windows with our current compile environment. +# -- Henryk Plötz 2009-09-28 + +use strict; + +my $main_dir = shift; + +# Clear environment locale so that svn will not use localized strings +$ENV{'LC_ALL'} = "C"; +$ENV{'LANG'} = "C"; + +my $svnversion = 0; +my $present = 0; +my $clean = 2; +my @compiletime = gmtime(); + +# Strategy one: call svn info and extract last changed revision, call svn status and look for ^M +if(open(SVNINFO, "svn info $main_dir|")) { + while() { + if (/^Last Changed Rev: (.*)/) { + $present = 1; + $svnversion = $1; + ## last; # Do not abort here, since SVN tends to complain about a Broken pipe + } + } + close(SVNINFO); + + if(open(SVNSTATUS, "svn status $main_dir|")) { + $clean = 1; + while() { + if(/^M/) { + $clean = 0; + ## last; + } + } + close(SVNINFO); + } + +} else { + # Strategy two: look for .svn/entries. The third line should be "dir", the fourth line should contain the current + # revision. + if(open(ENTRIES, "$main_dir/.svn/entries")) { + my $i = 1; + while() { + last if($i == 3 and !/^dir/); + if($i == 4 and /^([0-9]*)/) { + $present = 1; + $svnversion = $1; + } + $i++; + } + } +} + +$compiletime[4] += 1; +$compiletime[5] += 1900; +my $ctime = sprintf("%6\$04i-%5\$02i-%4\$02i %3\$02i:%2\$02i:%1\$02i", @compiletime); + +print < +/* Generated file, do not edit */ +struct version_information __attribute__((section(".version_information"))) version_information = { + VERSION_INFORMATION_MAGIC, + 1, + $present, + $clean, + "svn $svnversion", + "$ctime", +}; +EOF