config/version_win.pl

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rwxr-xr-x

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 #!/usr/bin/perl -w
     3 # This Source Code Form is subject to the terms of the Mozilla Public
     4 # License, v. 2.0. If a copy of the MPL was not distributed with this
     5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     7 #use diagnostics;
     8 require strict;
     9 my $dir = $0;
    10 $dir =~ s/[^\/]*$//;
    11 push(@INC, "$dir");
    12 require "Moz/Milestone.pm";
    13 use Getopt::Long;
    14 use Getopt::Std;
    15 use POSIX;
    17 # Calculate the number of days since Jan. 1, 2000 from a buildid string
    18 sub daysFromBuildID
    19 {
    20     my ($buildid,) = @_;
    22     my ($y, $m, $d, $h) = ($buildid =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);
    23     $d || die("Unrecognized buildid string.");
    25     my $secondstodays = 60 * 60 * 24;
    26     return sprintf("%d",
    27 		   (POSIX::mktime(00, 00, 00, $d, $m - 1, $y - 1900) -
    28 		    POSIX::mktime(00, 00, 00, 01, 00, 100)) / $secondstodays);
    29 }
    31 #Creates version resource file
    33 #Paramaters are passed on the command line:
    35 #Example: -MODNAME nsToolkitCompsModule -DEBUG=1
    37 # DEBUG - Mozilla's global debug variable - tells if its debug version
    38 # OFFICIAL - tells Mozilla is building a milestone or nightly
    39 # MSTONE - tells which milestone is being built;
    40 # OBJDIR - Holds the object directory;
    41 # MODNAME - tells what the name of the module is like nsBMPModule
    42 # DEPTH - Holds the path to the root obj dir
    43 # TOPSRCDIR - Holds the path to the root mozilla dir
    44 # SRCDIR - Holds module.ver and source
    45 # BINARY - Holds the name of the binary file
    46 # DISPNAME - Holds the display name of the built application
    47 # APPVERSION - Holds the version string of the built application
    48 # RCINCLUDE - Holds the name of the RC File to include or ""
    49 # QUIET - Turns off output
    51 #Description and Comment come from module.ver
    52 #Bug 23560
    53 #http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/rc_7x2d.asp
    55 #Get next .ver file entry
    56 sub getNextEntry
    57 {
    58 	while (<VERFILE>) 
    59 	{ 
    60 		my $mline = $_;
    61 		($mline) = split(/#/,$mline);
    62 		my ($entry, $value)=split(/=/,$mline,2);
    63 		if (defined($entry))
    64 		{
    65 			if (defined($value))
    66 			{
    67 				$entry =~ s/^\s*(.*?)\s*$/$1/;
    68 				$value =~ s/^\s*(.*?)\s*$/$1/;
    69 				return ($entry,$value);
    70 			}
    71 		}
    72 	}
    73 	return undef;
    74 }
    76 my ($quiet,$objdir,$debug,$official,$milestone,$buildid,$module,$binary,$depth,$rcinclude,$srcdir,$fileversion,$productversion);
    78 GetOptions( "QUIET" => \$quiet,
    79 		"DEBUG=s" => \$debug,
    80 		"OFFICIAL=s" => \$official,
    81 		"MSTONE=s" => \$milestone,
    82 		"MODNAME=s" => \$module,
    83 		"BINARY=s" => \$binary,
    84 		"DISPNAME=s" => \$displayname,
    85 		"APPVERSION=s" => \$appversion,
    86 		"SRCDIR=s" => \$srcdir,
    87 		"TOPSRCDIR=s" => \$topsrcdir,
    88 		"DEPTH=s" => \$depth,
    89 		"RCINCLUDE=s" => \$rcinclude,
    90 		"OBJDIR=s" => \$objdir);
    91 if (!defined($debug)) {$debug="";}
    92 if (!defined($official)) {$official="";}
    93 if (!defined($milestone)) {$milestone="";}
    94 if (!defined($module)) {$module="";}
    95 if (!defined($binary)) {$binary="";}
    96 if (!defined($displayname)) {$displayname="Mozilla";}
    97 if (!defined($appversion)) {$appversion=$milestone;}
    98 if (!defined($depth)) {$depth=".";}
    99 if (!defined($rcinclude)) {$rcinclude="";}
   100 if (!defined($objdir)) {$objdir=".";}
   101 if (!defined($srcdir)) {$srcdir=".";}
   102 if (!defined($topsrcdir)) {$topsrcdir=".";}
   103 my $mfversion = "Personal";
   104 my $mpversion = "Personal";
   105 my @fileflags = ("0");
   106 my $comment="";
   107 my $description="";
   108 if (!defined($module))
   109 {
   110 	$module = $binary;
   111 	($module) = split(/\./,$module);
   112 }
   114 my $bufferstr="    ";
   116 my $MILESTONE_FILE = "$topsrcdir/config/milestone.txt";
   117 my $BUILDID_FILE = "$depth/config/buildid";
   119 #Read module.ver file
   120 #Version file overrides for WIN32:
   121 #WIN32_MODULE_COMMENT
   122 #WIN32_MODULE_DESCRIPTION
   123 #WIN32_MODULE_FILEVERSION
   124 #WIN32_MODULE_COMPANYNAME
   125 #WIN32_MODULE_FILEVERSION_STRING
   126 #WIN32_MODULE_NAME
   127 #WIN32_MODULE_COPYRIGHT
   128 #WIN32_MODULE_TRADEMARKS
   129 #WIN32_MODULE_ORIGINAL_FILENAME
   130 #WIN32_MODULE_PRODUCTNAME
   131 #WIN32_MODULE_PRODUCTVERSION
   132 #WIN32_MODULE_PRODUCTVERSION_STRING
   134 #Override values obtained from the .ver file
   135 my $override_comment;
   136 my $override_description;
   137 my $override_fileversion;
   138 my $override_company;
   139 my $override_mfversion;
   140 my $override_module;
   141 my $override_copyright;
   142 my $override_trademarks;
   143 my $override_filename;
   144 my $override_productname;
   145 my $override_productversion;
   146 my $override_mpversion;
   147 if (open(VERFILE, "<$srcdir/module.ver")) 
   148 {
   150 	my ($a,$b) = getNextEntry();
   151 	while (defined($a))
   152 	{
   153 		if ($a eq "WIN32_MODULE_COMMENT") { $override_comment = $b; }
   154 		if ($a eq "WIN32_MODULE_DESCRIPTION") { $override_description = $b; }
   155 		if ($a eq "WIN32_MODULE_FILEVERSION") { $override_fileversion = $b; }
   156 		if ($a eq "WIN32_MODULE_COMPANYNAME") { $override_company = $b; }
   157 		if ($a eq "WIN32_MODULE_FILEVERSION_STRING") { $override_mfversion = $b; }
   158 		if ($a eq "WIN32_MODULE_NAME") { $override_module = $b; }
   159 		if ($a eq "WIN32_MODULE_COPYRIGHT") { $override_copyright = $b; }
   160 		if ($a eq "WIN32_MODULE_TRADEMARKS") { $override_trademarks = $b; }
   161 		if ($a eq "WIN32_MODULE_ORIGINAL_FILENAME") { $override_filename = $b; }
   162 		if ($a eq "WIN32_MODULE_PRODUCTNAME") { $override_productname = $b; }
   163 		if ($a eq "WIN32_MODULE_PRODUCTVERSION") { $override_productversion = $b; }
   164 		if ($a eq "WIN32_MODULE_PRODUCTVERSION_STRING") { $override_mpversion = $b; }
   165 		($a,$b) = getNextEntry();
   166 	}
   167 	close(VERFILE)
   168 }
   169 else
   170 {
   171 	if (!$quiet || $quiet ne "1") { print "$bufferstr" . "WARNING: No module.ver file included ($module, $binary). Default values used\n"; }
   172 }
   173 #Get rid of trailing and leading whitespace
   174 $debug =~ s/^\s*(.*)\s*$/$1/;
   175 $comment =~ s/^\s*(.*)\s*$/$1/;
   176 $official =~ s/^\s*(.*)\s*$/$1/;
   177 $milestone =~ s/^\s*(.*)\s*$/$1/;
   178 $description =~ s/^\s*(.*)\s*$/$1/;
   179 $module =~ s/^\s*(.*)\s*$/$1/;
   180 $depth =~ s/^\s*(.*)\s*$/$1/;
   181 $binary =~ s/^\s*(.*)\s*$/$1/;
   182 $displayname =~ s/^\s*(.*)\s*$/$1/;
   184 open(BUILDID, "<", $BUILDID_FILE) || die("Couldn't open buildid file: $BUILDID_FILE");
   185 $buildid = <BUILDID>;
   186 $buildid =~ s/\s*$//;
   187 close BUILDID;
   189 my $daycount = daysFromBuildID($buildid);
   191 if ($milestone eq "") {
   192     $milestone = Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
   193 }
   195 $mfversion = $mpversion = $milestone;
   196 if ($appversion eq "") {
   197   $appversion = $milestone;
   198 }
   200 if ($debug eq "1")
   201 {
   202 	push @fileflags, "VS_FF_DEBUG";
   203 	$mpversion .= " Debug";
   204 	$mfversion .= " Debug";
   205 }
   207 if ($official ne "1") {
   208     push @fileflags, "VS_FF_PRIVATEBUILD";
   209 }
   211 if ($milestone =~ /[a-z]/) {
   212     push @fileflags, "VS_FF_PRERELEASE";
   213 }
   215 my @mstone = split(/\./,$milestone);
   216 $mstone[1] =~s/\D.*$//;
   217 if (!$mstone[2]) {
   218     $mstone[2] = "0";
   219 }
   220 else {
   221     $mstone[2] =~s/\D.*$//;
   222 }
   223 $fileversion = $productversion="$mstone[0],$mstone[1],$mstone[2],$daycount";
   225 my @appver = split(/\./,$appversion);
   226 for ($j = 1; $j < 4; $j++)
   227 {
   228     if (!$appver[$j]) {
   229         $appver[$j] = "0";
   230     }
   231     else {
   232         $appver[$j] =~s/\D.*$//;
   233     }
   234 }
   235 my $winappversion = "$appver[0],$appver[1],$appver[2],$appver[3]";
   237 my $copyright = "License: MPL 2";
   238 my $company = "Mozilla Foundation";
   239 my $trademarks = "Mozilla";
   240 my $productname = $displayname;
   243 if (defined($override_comment)){$override_comment =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $comment=$override_comment;}
   244 if (defined($override_description)){$override_description =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $description=$override_description;}
   245 if (defined($override_fileversion)){$override_fileversion =~ s/\@MOZ_APP_WINVERSION\@/$winappversion/g; $fileversion=$override_fileversion;}
   246 if (defined($override_mfversion)){$override_mfversion =~ s/\@MOZ_APP_VERSION\@/$appversion/g; $mfversion=$override_mfversion;}
   247 if (defined($override_company)){$company=$override_company;}
   248 if (defined($override_module)){$override_module =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $module=$override_module;}
   249 if (defined($override_copyright)){$override_copyright =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $copyright=$override_copyright;}
   250 if (defined($override_trademarks)){$override_trademarks =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $trademarks=$override_trademarks;}
   251 if (defined($override_filename)){$binary=$override_filename;}
   252 if (defined($override_productname)){$override_productname =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g; $productname=$override_productname;}
   253 if (defined($override_productversion)){$override_productversion =~ s/\@MOZ_APP_WINVERSION\@/$winappversion/g; $productversion=$override_productversion;}
   254 if (defined($override_mpversion)){$override_mpversion =~ s/\@MOZ_APP_VERSION\@/$appversion/g; $mpversion=$override_mpversion;}
   257 #Override section
   259 open(RCFILE, ">$objdir/module.rc") || die("Can't edit module.rc - It must be locked.\n");
   260 print RCFILE qq{
   261 // This Source Code Form is subject to the terms of the Mozilla Public
   262 // License, v. 2.0. If a copy of the MPL was not distributed with this
   263 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
   265 #include<winver.h>
   267 // Note: if you contain versioning information in an included 
   268 // RC script, it will be discarded
   269 // Use module.ver to explicitly set these values
   271 // Do not edit this file. Changes won't affect the build.
   273 };
   275 my $versionlevel=0;
   276 my $insideversion=0;
   277 if (open(RCINCLUDE, "<$rcinclude")) 
   278 {
   279 	print RCFILE "// From included resource $rcinclude\n";
   280 #	my $mstring="";
   281 	while (<RCINCLUDE>) 
   282 	{
   283 		$_ =~ s/\@MOZ_APP_DISPLAYNAME\@/$displayname/g;
   284 		print RCFILE $_;
   285 #		my $instr=$_;
   286 #		chomp($instr);
   287 #		$mstring .= "$instr\;";
   288 	}
   289 	close(RCINCLUDE);
   290 #	$mstring =~ s/\/\*.*\*\///g;
   291 #	my @mlines = split(/\;/,$mstring);
   292 #	for(@mlines)
   293 #	{
   294 #		my ($nocomment)=split(/\/\//,$_);
   295 #		if (defined($nocomment) && $nocomment ne "")
   296 #		{
   297 #			my ($firststring,$secondstring) = split(/\s+/,$nocomment);
   298 #			if (!defined($firststring)) {$firststring="";}
   299 #			if (!defined($secondstring)) {$secondstring="";}
   300 #			if ($secondstring eq "VERSIONINFO") 
   301 #			{
   302 #if (!$quiet || $quiet ne "1") { 
   303 #				print "$bufferstr" . "WARNING: Included RC file ($rcinclude, $module, $binary)\n";
   304 #				print "$bufferstr" . "WARNING: contains versioning information that will be discarded\n";
   305 #				print "$bufferstr" . "WARNING: Remove it and use relevant overrides (in module.ver)\n";
   306 #}
   307 #				$versionlevel = 0;
   308 #				$insideversion = 1; 
   309 #			}
   310 #			if ($firststring eq "BEGIN") { $versionlevel++; }
   311 #			if ($secondstring eq "END") 
   312 #			{ 
   313 #				$versionlevel--; 
   314 #				if ($insideversion==1 && $versionlevel==0) {$versionlevel=0;}
   315 #			}
   316 #			my $includecheck = $firststring . $secondstring;
   317 #			$includecheck =~ s/<|>/"/g;
   318 #			$includecheck = lc($includecheck);
   319 #			if ($includecheck ne "#include\"winver.h\"")
   320 #			{
   321 #				if ($insideversion == 0 && $versionlevel == 0)
   322 #				{
   323 #					print RCFILE "$nocomment\n";	
   324 #				}
   325 #			}
   326 #		}
   327 #	}
   329 }
   331 my $fileflags = join(' | ', @fileflags);
   333 print RCFILE qq{
   336 /////////////////////////////////////////////////////////////////////////////
   337 //
   338 // Version
   339 //
   341 1 VERSIONINFO
   342  FILEVERSION    $fileversion
   343  PRODUCTVERSION $productversion
   344  FILEFLAGSMASK 0x3fL
   345  FILEFLAGS $fileflags
   346  FILEOS VOS__WINDOWS32
   347  FILETYPE VFT_DLL
   348  FILESUBTYPE 0x0L
   349 BEGIN
   350     BLOCK "StringFileInfo"
   351     BEGIN
   352         BLOCK "000004b0"
   353         BEGIN
   354             VALUE "Comments", "$comment"
   355             VALUE "LegalCopyright", "$copyright"
   356             VALUE "CompanyName", "$company"
   357             VALUE "FileDescription", "$description"
   358             VALUE "FileVersion", "$mfversion"
   359             VALUE "ProductVersion", "$mpversion"
   360             VALUE "InternalName", "$module"
   361             VALUE "LegalTrademarks", "$trademarks"
   362             VALUE "OriginalFilename", "$binary"
   363             VALUE "ProductName", "$productname"
   364             VALUE "BuildID", "$buildid"
   365         END
   366     END
   367     BLOCK "VarFileInfo"
   368     BEGIN
   369         VALUE "Translation", 0x0, 1200
   370     END
   371 END
   373 };
   374 close(RCFILE);

mercurial