blob: f360c18ababa543d9b4e64b050529ab398ea26f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#!/usr/bin/perl
#-----------------------------------------------------------------
# dirver.pl: Generates ascii format #define for FILEVERSION
# resource identifier used by Windows executable binaries.
#
# Usage: dirver.pl -v <major.minor.patch> [-d mm/dd/yy] [-o outfile]
# Example: dirver.pl -v 6.5.2 -d 1/19/2005 -o fileversion.h
#
# -v <major.minor.patch> Version number.
# -d <mm/dd/yy> Date. (optional)
# -o <outfile> Output header file. (optional)
# -H Print this help message
#-----------------------------------------------------------------
use Getopt::Std;
use FileHandle;
autoflush STDERR 1;
getopts('v:d:o:H');
if ($opt_H) {exitHelp();}
# Load arguments
$version = $opt_v || exitHelp();
$date = $opt_d;
$outfile = $opt_o;
# Separate version into components
my @verComponents = split(/\./, $version);
# Set version components to 0 if not defined
if ($verComponents[1] == undef) { $verComponents[1] = "0"; }
if ($verComponents[2] == undef) { $verComponents[2] = "0"; }
# Calculate build version and build date
my $buildVersion = calcVersion(@verComponents);
my $buildDate = calcBuildDate($date);
# Write #defines out to stdout or a file is requested
if ($outfile) {
open(OUTFILE,">$outfile") || die "Error: Can't create $outfile: $!";
$outhdl = OUTFILE;
} else {
$outhdl = STDOUT;
}
print $outhdl "#define VI_PRODUCTVERSION $verComponents[0].$verComponents[1]\n";
print $outhdl "#define PRODUCTTEXT \"$version\"\n";
print $outhdl "#define VI_FILEVERSION $buildVersion, 0, 0, $buildDate\n";
print $outhdl "#define VI_FileVersion \"$version Build $buildDate\\0\"\n";
# Close file if not using STDOUT
if ($outfile) {
close(OUTFILE);
}
#---------- calcVersion subroutine ----------
sub calcVersion {
my @ver = shift;
my $nVersion = 0;
$nVersion = $ver[0];
$nVersion <<= 5;
$nVersion += $ver[1];
$nVersion <<= 7;
$nVersion += $ver[2];
$nVersion &= 0xFFFF;
return $nVersion;
}
#---------- calcBuildDate subroutine ----------
sub calcBuildDate {
my $date = shift;
my @dateComponents = ();
my $month, $date, $year;
my $buildDate = "";
# Use date if passed in, otherwise use system date
if ($date) {
# Separate date into month, day, and year
@dateComponents = split(/\//, $date);
# Use struct tm range for month
$dateComponents[0]--;
# Handle 2 digit years like (20)00
if ($dateComponents[2] < 70) {
$dateComponents[2] += 20;
}
$month = $dateComponents[0];
$day = $dateComponents[1];
$year = $dateComponents[2];
} else {
$month = (localtime)[4];
$day = (localtime)[3];
$year = (localtime)[5] - 80;
}
$buildDate = $year;
$buildDate <<= 4;
$buildDate += $month;
$buildDate <<= 5;
$buildDate += $day;
$buildDate &= 0xFFFF;
return $buildDate;
}
#---------- exitHelp subroutine ----------
sub exitHelp {
print(STDERR "$0: Generates ascii format #define for FILEVERSION
\tresource identifier used by Windows executable binaries.
\tUsage: $0 -v <major.minor.patch> [-d mm/dd/yy] [-o outfile]
\tExample: $0 -v 6.5.2 -d 1/19/2005 -o fileversion.h
\t-v <major.minor.patch> Version number.
\t-d <mm/dd/yy> Date. \(optional\)
\t-o <outfile> Output header file. \(optional\)
\t-H Print this help message\n");
exit(0);
}
|