1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-02 12:02:47 -05:00

`win-versioninfo': all builds of all Windows binaries now contain

a VERSIONINFO resource. The versioning scheme is described in
windows/version.rc2.

Some .rc files are now #included in others. In order to keep MSVC
project files working, these have been renamed to .rc2; there may exist
a better solution.

(This checkin also includes the documentation tweak missing from r6367.)

Testing performed:
 - MinGW (cross-compiler): works
 - VC nmake: works (tested with VC6)
 - VC project files: builds with VERSIONINFO resource (no VER variable though)
 - Borland: an old version of this patch was tested with it and more or
   less worked, except that some of the VERSIONINFO strings were apparently
   not terminated properly. Not attempted to work around this.
 - LCC: not tested. Some fixes are in there from the last time we tried
   this, but then the build ultimately failed and I haven't tried this
   since that was fixed.
 - Dev-C++: untested. (Haven't done anything special.)
 - Unix Gtk/autoconf Makefiles work as before.

[originally from svn r6374]
[r6367 == f86ad059db]
[this svn revision also touched putty-wishlist]
This commit is contained in:
Jacob Nevins
2005-10-04 14:13:28 +00:00
parent 9d3ab46800
commit 4d48ba62e8
13 changed files with 314 additions and 48 deletions

View File

@ -12,6 +12,8 @@
# are hardwired, and also the libraries are fixed. This is
# mainly because I was too scared to go anywhere near it.
# - sbcsgen.pl is still run at startup.
#
# FIXME: no attempt made to handle !forceobj in the project files.
use FileHandle;
use Cwd;
@ -52,6 +54,7 @@ while (<IN>) {
if ($_[0] eq "!srcdir") { push @srcdirs, $_[1]; next; }
if ($_[0] eq "!makefile" and &mfval($_[1])) { $makefiles{$_[1]}=$_[2]; next;}
if ($_[0] eq "!specialobj" and &mfval($_[1])) { $specialobj{$_[1]}->{$_[2]} = 1; next;}
if ($_[0] eq "!forceobj") { $forceobj{$_[1]} = 1; next; }
if ($_[0] eq "!begin") {
if (&mfval($_[1])) {
$sect = $_[2] ? $_[2] : "end";
@ -325,7 +328,7 @@ sub deps {
s/\//$dirsep/g;
$_ = $prefix . $_;
} @deps;
push @ret, {obj => $x, deps => [@deps]};
push @ret, {obj => $x, obj_orig => $i, deps => [@deps]};
}
return @ret;
}
@ -376,7 +379,7 @@ if (defined $makefiles{'cygwin'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# gcc command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"\n".
@ -416,8 +419,12 @@ if (defined $makefiles{'cygwin'}) {
$objstr . " $libstr", 69), "\n\n";
}
foreach $d (&deps("X.o", "X.res.o", $dirpfx, "/", "cygwin")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf ("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
if ($d->{obj} =~ /\.res\.o$/) {
print "\t\$(RC) \$(RCFL) \$(RCFLAGS) ".$d->{deps}->[0]." ".$d->{obj}."\n\n";
} else {
@ -428,7 +435,8 @@ if (defined $makefiles{'cygwin'}) {
print $makefile_extra{'cygwin'}->{'end'};
print "\nclean:\n".
"\trm -f *.o *.exe *.res.o *.map\n".
"\n";
"\n".
"FORCE:\n";
select STDOUT; close OUT;
}
@ -455,7 +463,7 @@ if (defined $makefiles{'borland'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# bcc32 command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"\n".
@ -465,6 +473,8 @@ if (defined $makefiles{'borland'}) {
"\n".
"# C compilation flags\n".
"CFLAGS = -D_WINDOWS -DWINVER=0x0401\n".
"# Resource compilation flags\n".
"RCFLAGS = -DNO_WINRESRC_H -DWIN32 -D_WIN32 -DWINVER=0x0401\n".
"\n".
"# Get include directory for resource compiler\n".
"!if !\$d(BCB)\n".
@ -480,7 +490,7 @@ if (defined $makefiles{'borland'}) {
" /c \$*.c",69)."\n".
".rc.res:\n".
&splitline("\tbrcc32 \$(RCFL) -i \$(BCB)\\include -r".
" -DNO_WINRESRC_H -DWIN32 -D_WIN32 -DWINVER=0x0401 \$*.rc",69)."\n".
" \$(RCFLAGS) \$*.rc",69)."\n".
"\n";
print &splitline("all:" . join "", map { " $_.exe" } &progrealnames("G:C"));
print "\n\n";
@ -520,8 +530,12 @@ if (defined $makefiles{'borland'}) {
print "\n";
}
foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "borland")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
}
print "\n";
print $makefile_extra{'borland'}->{'end'};
@ -535,7 +549,10 @@ if (defined $makefiles{'borland'}) {
"\t-del *.pdb\n".
"\t-del *.rsp\n".
"\t-del *.tds\n".
"\t-del *.\$\$\$\$\$\$\n";
"\t-del *.\$\$\$\$\$\$\n".
"\n".
"FORCE:\n".
"\t-rem dummy command\n";
select STDOUT; close OUT;
}
@ -560,6 +577,7 @@ if (defined $makefiles{'vc'}) {
(join " ", map {"-I$dirpfx$_"} @srcdirs) .
" /D_WINDOWS /D_WIN32_WINDOWS=0x401 /DWINVER=0x401\n".
"LFLAGS = /incremental:no /fixed\n".
"RCFLAGS = -DWIN32 -D_WIN32 -DWINVER=0x0400\n".
"\n".
$makefile_extra{'vc'}->{'vars'} .
"\n".
@ -592,12 +610,13 @@ if (defined $makefiles{'vc'}) {
print "\n";
}
foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "vc")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
$extradeps = $forceobj{$d->{obj_orig}} ? ["*.c","*.h","*.rc"] : [];
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @$extradeps, @{$d->{deps}})), "\n";
if ($d->{obj} =~ /.obj$/) {
print "\tcl \$(COMPAT) \$(XFLAGS) \$(CFLAGS) /c ".$d->{deps}->[0],"\n\n";
} else {
print "\trc \$(RCFL) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 ".$d->{deps}->[0],"\n\n";
print "\trc \$(RCFL) -r \$(RCFLAGS) ".$d->{deps}->[0],"\n\n";
}
}
print "\n";
@ -897,7 +916,7 @@ if (defined $makefiles{'gtk'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# gcc command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"\n".
@ -935,14 +954,19 @@ if (defined $makefiles{'gtk'}) {
$objstr . " $libstr", 69), "\n\n";
}
foreach $d (&deps("X.o", undef, $dirpfx, "/", "gtk")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
print &splitline("\t\$(CC) \$(COMPAT) \$(XFLAGS) \$(CFLAGS) -c $d->{deps}->[0]\n");
}
print "\n";
print $makefile_extra{'gtk'}->{'end'};
print "\nclean:\n".
"\trm -f *.o". (join "", map { " $_" } &progrealnames("X:U")) . "\n";
print "\nFORCE:\n";
select STDOUT; close OUT;
}
@ -956,7 +980,7 @@ if (defined $makefiles{'ac'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# gcc command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"\n".
@ -993,14 +1017,19 @@ if (defined $makefiles{'ac'}) {
$objstr . " $libstr", 69), "\n\n";
}
foreach $d (&deps("X.o", undef, $dirpfx, "/", "gtk")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
print &splitline("\t\$(CC) \$(COMPAT) \$(XFLAGS) \$(CFLAGS) -c $d->{deps}->[0]\n");
}
print "\n";
print $makefile_extra{'gtk'}->{'end'};
print "\nclean:\n".
"\trm -f *.o". (join "", map { " $_" } &progrealnames("X:U")) . "\n";
print "\nFORCE:\n";
select STDOUT; close OUT;
}
@ -1011,8 +1040,8 @@ if (defined $makefiles{'mpw'}) {
"# Makefile for $project_name under MPW.\n#\n".
"# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# MPW command line option is -d not /D
($_ = $help) =~ s/=\/D/=-d /gs;
# MPW command line option is -d not /D (FIXME further massaging?)
($_ = $help) =~ s/([=" ])\/D/\1-d /gs;
print $_;
print "\n\n".
"ROptions = `Echo \"{VER}\" | StreamEdit -e \"1,\$ replace /=(\xc5)\xa81\xb0/ 'STR=\xb6\xb6\xb6\xb6\xb6\"' \xa81 '\xb6\xb6\xb6\xb6\xb6\"'\"`".
@ -1154,7 +1183,7 @@ if (defined $makefiles{'lcc'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# lcc command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"\n".
@ -1166,6 +1195,8 @@ if (defined $makefiles{'lcc'}) {
"CFLAGS = -D_WINDOWS " .
(join " ", map {"-I$dirpfx$_"} @srcdirs) .
"\n".
"# Resource compilation flags\n".
"RCFLAGS = \n".
"\n".
"# Get include directory for resource compiler\n".
"\n".
@ -1185,13 +1216,18 @@ if (defined $makefiles{'lcc'}) {
}
foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "lcc")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
if ($d->{obj} =~ /\.obj$/) {
print &splitline("\tlcc -O -p6 \$(COMPAT)".
" \$(XFLAGS) \$(CFLAGS) ".$d->{deps}->[0],69)."\n";
} else {
print &splitline("\tlrc \$(RCFL) -r ".$d->{deps}->[0],69)."\n";
print &splitline("\tlrc \$(RCFL) -r \$(RCFLAGS) ".
$d->{deps}->[0],69)."\n";
}
}
print "\n";
@ -1199,7 +1235,9 @@ if (defined $makefiles{'lcc'}) {
print "\nclean:\n".
"\t-del *.obj\n".
"\t-del *.exe\n".
"\t-del *.res\n";
"\t-del *.res\n".
"\n".
"FORCE:\n";
select STDOUT; close OUT;
}
@ -1214,7 +1252,7 @@ if (defined $makefiles{'osx'}) {
"#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
"# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
# gcc command line option is -D not /D
($_ = $help) =~ s/=\/D/=-D/gs;
($_ = $help) =~ s/([=" ])\/D/\1-D/gs;
print $_;
print
"CC = \$(TOOLPATH)gcc\n".
@ -1263,8 +1301,12 @@ if (defined $makefiles{'osx'}) {
$objstr . " $libstr", 69), "\n\n";
}
foreach $d (&deps("X.o", undef, $dirpfx, "/")) {
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
"\n";
if ($forceobj{$d->{obj_orig}}) {
printf("%s: FORCE\n", $d->{obj});
} else {
print &splitline(sprintf("%s: %s", $d->{obj},
join " ", @{$d->{deps}})), "\n";
}
$firstdep = $d->{deps}->[0];
if ($firstdep =~ /\.c$/) {
print "\t\$(CC) \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n";
@ -1274,8 +1316,10 @@ if (defined $makefiles{'osx'}) {
}
print "\n".$makefile_extra{'osx'}->{'end'};
print "\nclean:\n".
"\trm -f *.o *.dmg". (join "", map { " $_" } &progrealnames("U")) . "\n";
"\trm -f *.o *.dmg". (join "", map { " $_" } &progrealnames("U")) . "\n".
"\trm -rf *.app\n";
"\n".
"FORCE:\n";
select STDOUT; close OUT;
}