diff --git a/capinfos.c b/capinfos.c index 88d9acb83a..972ff13cc7 100644 --- a/capinfos.c +++ b/capinfos.c @@ -241,7 +241,7 @@ usage(gboolean is_error) fprintf(output, "Capinfos %s" #ifdef SVNVERSION - " (" SVNVERSION ")" + " (" SVNVERSION " from " SVNPATH ")" #endif "\n", VERSION); fprintf(output, "Prints information about capture files.\n"); diff --git a/editcap.c b/editcap.c index 82dedb4f05..b401066535 100644 --- a/editcap.c +++ b/editcap.c @@ -563,7 +563,7 @@ usage(void) { fprintf(stderr, "Editcap %s" #ifdef SVNVERSION - " (" SVNVERSION ")" + " (" SVNVERSION " from " SVNPATH ")" #endif "\n", VERSION); fprintf(stderr, "Edit and/or translate the format of capture files.\n"); diff --git a/make-version.pl b/make-version.pl index 03f5ebfa7d..c17626fc49 100755 --- a/make-version.pl +++ b/make-version.pl @@ -45,7 +45,7 @@ # Default configuration: # # enable: 1 -# svn_client: 0 +# svn_client: 1 # format: SVN %Y%m%d%H%M%S # pkg_enable: 1 # pkg_format: -SVN-%# @@ -64,10 +64,11 @@ my $package_string = ""; my $vconf_file = 'version.conf'; my $last_change = 0; my $revision = 0; +my $repo_path = "unknown"; my $pkg_version = 0; my %version_pref = ( "enable" => 1, - "svn_client" => 0, + "svn_client" => 1, "format" => "SVN %Y%m%d%H%M%S", # Normal development builds @@ -90,17 +91,46 @@ sub read_svn_info { my $in_entries = 0; my $svn_name; my $repo_version; + my $repo_root = undef; + my $repo_url = undef; + my $do_hack = 1; if ($version_pref{"pkg_enable"}) { $package_format = $version_pref{"pkg_format"}; } - if (!$version_pref{"svn_client"}) { + if ($version_pref{"svn_client"}) { + eval { + use warnings "all"; + no warnings "all"; + $line = qx{svn info $srcdir}; + if (!defined($line)) { + exit 1; + } + if ($line =~ /Last Changed Date: (\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) { + $last_change = timegm($6, $5, $4, $3, $2 - 1, $1); + } + if ($line =~ /Last Changed Rev: (\d+)/) { + $revision = $1; + } + if ($line =~ /URL: (\S+)/) { + $repo_url = $1; + } + if ($line =~ /Repository Root: (\S+)/) { + $repo_root = $1; + } + }; + + if ($last_change && $revision && $repo_url && $repo_root) { + $do_hack = 0; + } + } + + # 'svn info' failed or the user really wants us to dig around in .svn/entries + if ($do_hack) { # Start of ugly internal SVN file hack if (! open (ENTRIES, "< $srcdir/.svn/entries")) { - print ("Unable to open $srcdir/.svn/entries, trying 'svn info'\n"); - # Fall back to "svn info" - $version_pref{"svn_client"} = 1; + print ("Unable to open $srcdir/.svn/entries\n"); } else { # We need to find out whether our parser can handle the entries file $line = ; @@ -112,46 +142,33 @@ sub read_svn_info { } else { $repo_version = "unknown"; } - } - } - if ($version_pref{"svn_client"} || ($repo_version ne "pre1.4")) { - if (!$version_pref{"svn_client"}) { + + if ($repo_version eq "pre1.4") { + # The entries schema is flat, so we can use regexes to parse its contents. + while ($line = ) { + if ($line =~ //) { + if (($svn_name eq "" || $svn_name eq "svn:this_dir") && + $last_change && $revision) { + $in_entries = 0; + last; + } + } + # XXX - Fetch the repository root & URL + } + } close ENTRIES; } - $line = qx{svn info $srcdir}; - if ($line =~ /Last Changed Date: (\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) { - $last_change = timegm($6, $5, $4, $3, $2 - 1, $1); - } - if ($line =~ /Last Changed Rev: (\d+)/) { - $revision = $1; - } - if ($line =~ /^\s*$/ || $revision =~ /^\s*$/) { - $last_change = "unknown"; - $revision = "unknown"; - } - } else { - # The entries schema is flat, so we can use regexes to parse its contents. - while ($line = ) { - if ($line =~ //) { - if (($svn_name eq "" || $svn_name eq "svn:this_dir") && - $last_change && $revision) { - $in_entries = 0; - last; - } - } - } - close ENTRIES; } # If we picked up the revision and modification time, @@ -161,6 +178,10 @@ sub read_svn_info { $package_format =~ s/%#/$revision/; $package_string = strftime($package_format, gmtime($last_change)); } + + if ($repo_url && $repo_root && index($repo_url, $repo_root) == 0) { + $repo_path = substr($repo_url, length($repo_root)); + } } @@ -229,9 +250,11 @@ sub print_svn_version if ($last_change && $revision) { $svn_version = "#define SVNVERSION \"SVN Rev " . - $revision . "\"\n"; + $revision . "\"\n" . + "#define SVNPATH \"" . $repo_path . "\"\n"; } else { - $svn_version = "/* #define SVNVERSION \"\" */\n"; + $svn_version = "/* #define SVNVERSION \"\" */\n" . + "/* #define SVNPATH \"\" */\n"; } if (open(OLDVER, "<$version_file")) { if ( eq $svn_version) { diff --git a/mergecap.c b/mergecap.c index 89e9740804..358ebe2359 100644 --- a/mergecap.c +++ b/mergecap.c @@ -89,7 +89,7 @@ usage(void) fprintf(stderr, "Mergecap %s" #ifdef SVNVERSION - " (" SVNVERSION ")" + " (" SVNVERSION " from " SVNPATH ")" #endif "\n", VERSION); fprintf(stderr, "Merge two or more capture files into one.\n"); diff --git a/text2pcap.c b/text2pcap.c index 7168730bae..b799262c6f 100644 --- a/text2pcap.c +++ b/text2pcap.c @@ -1028,7 +1028,7 @@ usage (void) fprintf(stderr, "Text2pcap %s" #ifdef SVNVERSION - " (" SVNVERSION ")" + " (" SVNVERSION " from " SVNPATH ")" #endif "\n" "Generate a capture file from an ASCII hexdump of packets.\n" diff --git a/version_info.c b/version_info.c index 2cf7d3df09..ef7adda333 100644 --- a/version_info.c +++ b/version_info.c @@ -96,7 +96,7 @@ #endif #ifdef SVNVERSION - const char *wireshark_svnversion = " (" SVNVERSION ")"; + const char *wireshark_svnversion = " (" SVNVERSION " from " SVNPATH ")"; #else const char *wireshark_svnversion = ""; #endif