version_tag.pl.in

来自「lustre 1.6.5 source code」· IN 代码 · 共 198 行

IN
198
字号
#!/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;# Use the CVS tag first otherwise use the portals versionsub get_tag(){    my $tag;    my $line;    my $tagfile = new IO::File;    if (!$tagfile->open("lustre/CVS/Tag")) {        my $verfile = new IO::File;        if (!$verfile->open("config.h")) {          return "UNKNOWN";        }        while(defined($line = <$verfile>)) {            $line =~ /\#define VERSION "(.*)"/;            if ($1) {                $tag = $1;                last;            }        }        $verfile->close();        return $tag    } 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];            if (!defined($mtime)) {                next;            }            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")) {        die "Run ./configure first\n";    }    while (defined($line = <$config>)) {        chomp($line);        if ($line =~ /LINUX :?= (.*)/) {            $dir = $1;            last;        }    }    $config->close();    my $ver = new IO::File;    if (!$ver->open("$dir/include/linux/version.h")) {        die "Run make dep on $dir\n";    }    while(defined($line = <$ver>)) {        $line =~ /\#define UTS_RELEASE "(.*)"/;        if ($1) {            $kernver = $1;            last;        }    }    $ver->close();    chomp($kernver);    $dir =~ s/\//\./g;    return $dir;}sub generate_ver($$$){    my $tag = shift;    my $mtime = shift;    my $linuxdir = shift;    #print "localtime: " . localtime($mtime) . "\n";    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =      localtime($mtime);    $year += 1900;    $mon++;    my $show_last = sprintf("%04d%02d%02d%02d%02d%02d", $year, $mon, $mday,                            $hour, $min, $sec);    print "#define BUILD_VERSION \"";    my $lustre_vers = $ENV{LUSTRE_VERS};    if ($lustre_vers) {        print "$tag-$lustre_vers\"\n";    } elsif ($pristine) {        print "$tag-$show_last-PRISTINE-$linuxdir-$kernver\"\n";    } else {        print "$tag-$show_last-CHANGED-$linuxdir-$kernver\"\n";    }}chomp(my $cwd = `pwd`);# ARGV[0] = srcdir# ARGV[1] = builddir# for get_latest_mtime and get_tag you need to be in srcdirif ($ARGV[0]) {    chdir($ARGV[0]);}my $tag = get_tag();my $mtime = get_latest_mtime();# for get_linuxdir you need to be in builddir#if ($ARGV[1]) {#   chdir($cwd);#   chdir($ARGV[1]);#}#my $linuxdir = get_linuxdir();my $linuxdir = '@LINUX@';$linuxdir =~ s/\//\./g;$kernver = '@LINUXRELEASE@';generate_ver($tag, $mtime, $linuxdir);exit(0);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?