X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fscripts%2Fversion_tag.pl;h=61796c90a685dbc1b082f15d499af0faeb8aac0e;hb=a77212cd13627b2b9f1835c48599e91c82aeed9d;hp=e810f3f8fa61474c4a07f6202766e85a458166e1;hpb=7312616768bfed768ecc00ba20322c37568138d0;p=fs%2Flustre-release.git diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl index e810f3f..61796c9 100644 --- a/lustre/scripts/version_tag.pl +++ b/lustre/scripts/version_tag.pl @@ -1,115 +1,55 @@ #!/usr/bin/perl # -*- Mode: perl; indent-tabs-mode: nil; cperl-indent-level: 4 -*- -use strict; -use diagnostics; use IO::File; -use Time::Local; -my $pristine = 1; -my $kernver; +# get all of the values we want out of the autoMakefile +sub read_autoMakefile() { -sub get_tag() -{ - my $tag; - - my $tagfile = new IO::File; - if (!$tagfile->open("CVS/Tag")) { - return "HEAD"; - } else { - my $tmp = <$tagfile>; - $tagfile->close(); - - $tmp =~ m/T(.*)/; - return $1; - } -} - -sub get_latest_mtime() -{ - my %months=("Jan" => 0, "Feb" => 1, "Mar" => 2, "Apr" => 3, "May" => 4, - "Jun" => 5, "Jul" => 6, "Aug" => 7, "Sep" => 8, "Oct" => 9, - "Nov" => 10, "Dec" => 11); - - my $last_mtime = 0; - my @entries = `find . -name Entries`; - my $entry_file; - foreach $entry_file (@entries) { - chomp($entry_file); - my $entry = new IO::File; - if (!$entry->open($entry_file)) { - die "unable to open $entry_file: $!\n"; - } - my $line; - while (defined($line = <$entry>)) { - chomp($line); - #print "line: $line\n"; - my ($junk, $file, $version, $date) = split(/\//, $line); - - #print "junk: $junk\nfile: $file\nver: $version\ndate: $date\n"; - #print "last_mtime: " . localtime($last_mtime) . "\n"; - - if ($junk eq "D" || - $file eq "lustre.spec.in" || - $file !~ m/\.(c|h|am|in)$/) { - next; - } - - my $cur_dir = $entry_file; - $cur_dir =~ s/\/CVS\/Entries$//; - my @statbuf = stat("$cur_dir/$file"); - my $mtime = $statbuf[9]; - my $local_date = gmtime($mtime); - if ($local_date ne $date && - $file ne "lustre.spec.in") { - #print "$file : " . localtime($mtime) . "\n"; - $pristine = 0; - } - - if ($mtime > $last_mtime) { - $last_mtime = $mtime; - } - - if ($date) { - my @t = split(/ +/, $date); - if (int(@t) != 5) { - #print "skipping: $date\n"; - next; - } - my ($hours, $min, $sec) = split(/:/, $t[3]); - my ($mon, $mday, $year) = ($t[1], $t[2], $t[4]); - my $secs = 0; - $mon = $months{$mon}; - $secs = timelocal($sec, $min, $hours, $mday, $mon, $year); - if ($secs > $last_mtime) { - $last_mtime = $secs; - } - } - } - $entry->close(); - } - return $last_mtime; -} - -sub get_linuxdir() -{ - my $config = new IO::File; - my ($line, $dir); - if (!$config->open("Makefile")) { + my $file = new IO::File; + my ($line, $dir, $objdir, $modules, $version, $local_version, $buildid); + if (!$file->open("autoMakefile")) { die "Run ./configure first\n"; } - while (defined($line = <$config>)) { + $modules = 1; + while (defined($line = <$file>)) { chomp($line); - if ($line =~ /LINUX = (.*)/) { + if ($line =~ /^LINUX :?= (.*)/) { $dir = $1; - last; + } elsif ($line =~ /^LINUX_OBJ :?= (.*)/) { + $objdir = $1; + } elsif ($line =~ /^MODULES_TRUE = #/ || + $line =~ /^MODULE_TARGET = $/) { + # modules are not being built + $modules = 1; + } elsif ($line =~ /^VERSION = (.*)/) { + $version = "$1"; + } elsif ($line =~ /^DOWNSTREAM_RELEASE = (.*)/ && $1 ne "") { + $local_version = "$1"; + } elsif ($line =~ /^BUILDID = (.*)/ && $1 ne "") { + $buildid = "$1"; } } - $config->close(); + $file->close(); + + return ($dir, $objdir, $modules, $version, $local_version, $buildid); + +} + +sub get_kernver($$) +{ + + my $dir = shift; + my $objdir = shift; + my $ver = new IO::File; - if (!$ver->open("$dir/include/linux/version.h")) { - die "Run make dep on $dir\n"; + if (!$ver->open("$objdir/include/linux/utsrelease.h") && + !$ver->open("$objdir/include/linux/version.h") && + !$ver->open("$dir/include/linux/utsrelease.h") && + !$ver->open("$dir/include/linux/version.h")) { + die "Run make dep on '$dir'\n"; } + while(defined($line = <$ver>)) { $line =~ /\#define UTS_RELEASE "(.*)"/; if ($1) { @@ -119,38 +59,103 @@ sub get_linuxdir() } $ver->close(); chomp($kernver); - $dir =~ s/\//\./g; - return $dir; + return $kernver; + } -sub generate_ver($$$) +sub generate_ver($$$$$$$) { + my $tag = shift; - my $mtime = shift; + my $local_version = shift; + my $buildid = shift; my $linuxdir = shift; + my $pristine = shift; + my $kernver = shift; + my $env_vers = shift; - #print "localtime: " . localtime($mtime) . "\n"; + print "#define BUILD_VERSION \"$tag"; - my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = - localtime($mtime); - $year += 1900; - $mon++; - my $show_last = $year . $mon . $mday . $hour . $min . $sec; + if ($env_vers) { + print "-$env_vers\"\n"; + return 0; + } - print "#define BUILD_VERSION \""; + if ($local_version ne "") { + print "-$local_version"; + } + + print "-$buildid"; + # if we want to get rid of the PRISTINE/CHANGED thing, get rid of these + # lines. maybe we only want to print -CHANGED when something is changed + # and print nothing when it's pristine if ($pristine) { - print "$tag-$show_last-PRISTINE-$linuxdir-$kernver\"\n"; + print "-PRISTINE"; } else { - print "$tag-$show_last-CHANGED-$linuxdir-$kernver\"\n"; + print "-CHANGED"; + } + + if ($kernver ne "") { + print "-$kernver"; } + + print "\"\n"; + } +my $progname = $0; +$progname =~ s/.*\///; + +chomp(my $cwd = `pwd`); + +my $path = $0; +$path =~ s/(.+)\/.*/\1/; +push(@INC, $cwd . "/" . $path); + +my $is_git = 0; +my $is_cvs = 0; + +# ARGV[0] = srcdir +# ARGV[1] = builddir + +# need to be in srcdir if ($ARGV[0]) { chdir($ARGV[0]); } -my $linuxdir = get_linuxdir(); + +if (-d ".git") { + $is_git = 1; + require "version_tag-git.pl"; +} elsif (-d "CVS") { + $is_cvs = 1; + require "version_tag-cvs.pl"; +} else { + die("a tree status can only be determined in an source code control system checkout\n") + if ($progname eq "make_META.pl"); + require "version_tag-none.pl"; +} + +($am_linuxdir, $am_linuxobjdir, $am_modules, $am_version, $local_version, + $am_buildid) = read_autoMakefile(); + my $tag = get_tag(); -my $mtime = get_latest_mtime(); -generate_ver($tag, $mtime, $linuxdir); +my $pristine = is_pristine(); +my $buildid = get_buildid(); + +if ($progname eq "version_tag.pl") { + my $kernver = ""; + $kernver = get_kernver($am_linuxdir, $am_linuxobjdir) + if ($am_linuxdir ne ""); + + my $linuxdir =~ s/\//\./g; + generate_ver($tag, $local_version, $buildid, $linuxdir, $pristine, $kernver, + $ENV{LUSTRE_VERS}); +} elsif ($progname eq "make_META.pl") { + print "TAG = $tag\n"; + print "VERSION = $am_version\n"; + print "BUILDID = $buildid\n"; + print "PRISTINE = $pristine\n"; + print "LOCAL_VERSION = $local_version\n"; +} exit(0);