mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 09:27:59 +00:00
Joe Yates's patch to make mkfiles.pl generate Visual Studio project
files as well as an nmake makefile. Needed line-end tweakery in order to be able to generate usable project files when run on Unix, but other than that appears fine. Ooh! [originally from svn r3721]
This commit is contained in:
parent
b601727068
commit
fb8d264f28
32
README
32
README
@ -1,17 +1,26 @@
|
||||
This is the README for the source archive of PuTTY, a free Win32
|
||||
Telnet and SSH client.
|
||||
|
||||
If you want to rebuild PuTTY from source, we provide three
|
||||
Makefiles:
|
||||
If you want to rebuild PuTTY from source, we provide a variety of
|
||||
Makefiles and equivalents:
|
||||
|
||||
- Makefile.vc is for MS Visual C++ systems. Type `nmake -f
|
||||
Makefile.vc' to build all the PuTTY binaries.
|
||||
- Makefile.vc is for command-line builds on MS Visual C++ systems.
|
||||
Type `nmake -f Makefile.vc' to build all the PuTTY binaries.
|
||||
|
||||
(We've also had one report of success building with the
|
||||
OpenWatcom compiler -- www.openwatcom.org -- using Makefile.vc
|
||||
with `wmake -ms -f makefile.vc' and NO_MULTIMON, although we
|
||||
haven't tried this ourselves.)
|
||||
|
||||
- Inside the MSVC subdirectory are MS Visual Studio project files
|
||||
for doing GUI-based builds of the various PuTTY utilities. These
|
||||
have been tested on Visual Studio 6.
|
||||
|
||||
You should be able to build each PuTTY utility by loading the
|
||||
corresponding .dsp file in Visual Studio. For example,
|
||||
MSVC/putty/putty.dsp builds PuTTY itself, MSVC/plink/plink.dsp
|
||||
builds Plink, and so on.
|
||||
|
||||
- Makefile.bor is for the Borland C compiler. Type `make -f
|
||||
Makefile.bor' to build all the PuTTY binaries.
|
||||
|
||||
@ -22,21 +31,6 @@ Makefiles:
|
||||
time of writing this Cygwin doesn't include the necessary
|
||||
headers.
|
||||
|
||||
If you have MS Visual Studio version 6 and you want to build a
|
||||
DevStudio project for GUI editing and debugging, you should be aware
|
||||
that the default GUI configuration of the compiler falls over on the
|
||||
nasty macros in ssh.c. This is a bug in Visual Studio. The culprit
|
||||
is the /ZI compiler option (debug info generation: Edit and
|
||||
Continue). To avoid this problem while compiling PuTTY under VS6,
|
||||
you should:
|
||||
- right-click ssh.c in the FileView
|
||||
- click Settings
|
||||
- select the C/C++ tab and the General category
|
||||
- under `Debug info:', select anything _other_ than `Program
|
||||
Database for Edit and Continue'.
|
||||
Alternatively disable the /ZI option, replacing it with a saner
|
||||
value, such as /Zi.
|
||||
|
||||
All of the Makefiles are generated automatically from the file
|
||||
`Recipe' by the Perl script `mkfiles.pl'. Additions and corrections
|
||||
to Recipe and the mkfiles.pl are much more useful than additions and
|
||||
|
250
mkfiles.pl
250
mkfiles.pl
@ -533,6 +533,256 @@ print
|
||||
"\t-del debug.log\n";
|
||||
select STDOUT; close OUT;
|
||||
|
||||
##-- MSVC 6 Workspace and projects
|
||||
#
|
||||
# Note: All files created in this section are written in binary
|
||||
# mode, because although MSVC's command-line make can deal with
|
||||
# LF-only line endings, MSVC project files really _need_ to be
|
||||
# CRLF. Hence, in order for mkfiles.pl to generate usable project
|
||||
# files even when run from Unix, I make sure all files are binary
|
||||
# and explicitly write the CRLFs.
|
||||
#
|
||||
# Create directories if necessary
|
||||
mkdir 'MSVC'
|
||||
if(! -d 'MSVC');
|
||||
chdir 'MSVC';
|
||||
@deps = &deps("X.obj", "X.res", "", "\\");
|
||||
%all_object_deps = map {$_->{obj} => $_->{deps}} @deps;
|
||||
# Create the project files
|
||||
# Get names of all Windows projects (GUI and console)
|
||||
my @prognames = &prognames("GC");
|
||||
foreach $progname (@prognames) {
|
||||
create_project(\%all_object_deps, $progname);
|
||||
}
|
||||
# Create the workspace file
|
||||
open OUT, ">putty.dsw"; binmode OUT; select OUT;
|
||||
print
|
||||
"Microsoft Developer Studio Workspace File, Format Version 6.00\r\n".
|
||||
"# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r\n".
|
||||
"\r\n".
|
||||
"###############################################################################\r\n".
|
||||
"\r\n";
|
||||
# List projects
|
||||
foreach $progname (@prognames) {
|
||||
($windows_project, $type) = split ",", $progname;
|
||||
print "Project: \"$windows_project\"=\".\\$windows_project\\$windows_project.dsp\" - Package Owner=<4>\r\n";
|
||||
}
|
||||
print
|
||||
"\r\n".
|
||||
"Package=<5>\r\n".
|
||||
"{{{\r\n".
|
||||
"}}}\r\n".
|
||||
"\r\n".
|
||||
"Package=<4>\r\n".
|
||||
"{{{\r\n".
|
||||
"}}}\r\n".
|
||||
"\r\n".
|
||||
"###############################################################################\r\n".
|
||||
"\r\n".
|
||||
"Global:\r\n".
|
||||
"\r\n".
|
||||
"Package=<5>\r\n".
|
||||
"{{{\r\n".
|
||||
"}}}\r\n".
|
||||
"\r\n".
|
||||
"Package=<3>\r\n".
|
||||
"{{{\r\n".
|
||||
"}}}\r\n".
|
||||
"\r\n".
|
||||
"###############################################################################\r\n".
|
||||
"\r\n";
|
||||
select STDOUT; close OUT;
|
||||
chdir '..';
|
||||
|
||||
sub create_project {
|
||||
my ($all_object_deps, $progname) = @_;
|
||||
# Construct program's dependency info
|
||||
%seen_objects = ();
|
||||
%lib_files = ();
|
||||
%source_files = ();
|
||||
%header_files = ();
|
||||
%resource_files = ();
|
||||
@object_files = split " ", &objects($progname, "X.obj", "X.res", "X.lib");
|
||||
foreach $object_file (@object_files) {
|
||||
next if defined $seen_objects{$object_file};
|
||||
$seen_objects{$object_file} = 1;
|
||||
if($object_file =~ /\.lib$/io) {
|
||||
$lib_files{$object_file} = 1;
|
||||
next;
|
||||
}
|
||||
$object_deps = $all_object_deps{$object_file};
|
||||
foreach $object_dep (@$object_deps) {
|
||||
if($object_dep =~ /\.c$/io) {
|
||||
$source_files{$object_dep} = 1;
|
||||
next;
|
||||
}
|
||||
if($object_dep =~ /\.h$/io) {
|
||||
$header_files{$object_dep} = 1;
|
||||
next;
|
||||
}
|
||||
if($object_dep =~ /\.(rc|ico)$/io) {
|
||||
$resource_files{$object_dep} = 1;
|
||||
next;
|
||||
}
|
||||
}
|
||||
}
|
||||
$libs = join " ", sort keys %lib_files;
|
||||
@source_files = sort keys %source_files;
|
||||
@header_files = sort keys %header_files;
|
||||
@resources = sort keys %resource_files;
|
||||
($windows_project, $type) = split ",", $progname;
|
||||
mkdir $windows_project
|
||||
if(! -d $windows_project);
|
||||
chdir $windows_project;
|
||||
$subsys = ($type eq "G") ? "windows" : "console";
|
||||
open OUT, ">$windows_project.dsp"; binmode OUT; select OUT;
|
||||
print
|
||||
"# Microsoft Developer Studio Project File - Name=\"$windows_project\" - Package Owner=<4>\r\n".
|
||||
"# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n".
|
||||
"# ** DO NOT EDIT **\r\n".
|
||||
"\r\n".
|
||||
"# TARGTYPE \"Win32 (x86) Application\" 0x0101\r\n".
|
||||
"\r\n".
|
||||
"CFG=$windows_project - Win32 Debug\r\n".
|
||||
"!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n".
|
||||
"!MESSAGE use the Export Makefile command and run\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"!MESSAGE NMAKE /f \"$windows_project.mak\".\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"!MESSAGE You can specify a configuration when running NMAKE\r\n".
|
||||
"!MESSAGE by defining the macro CFG on the command line. For example:\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"!MESSAGE NMAKE /f \"$windows_project.mak\" CFG=\"$windows_project - Win32 Debug\"\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"!MESSAGE Possible choices for configuration are:\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"!MESSAGE \"$windows_project - Win32 Release\" (based on \"Win32 (x86) Application\")\r\n".
|
||||
"!MESSAGE \"$windows_project - Win32 Debug\" (based on \"Win32 (x86) Application\")\r\n".
|
||||
"!MESSAGE \r\n".
|
||||
"\r\n".
|
||||
"# Begin Project\r\n".
|
||||
"# PROP AllowPerConfigDependencies 0\r\n".
|
||||
"# PROP Scc_ProjName \"\"\r\n".
|
||||
"# PROP Scc_LocalPath \"\"\r\n".
|
||||
"CPP=cl.exe\r\n".
|
||||
"MTL=midl.exe\r\n".
|
||||
"RSC=rc.exe\r\n".
|
||||
"\r\n".
|
||||
"!IF \"\$(CFG)\" == \"$windows_project - Win32 Release\"\r\n".
|
||||
"\r\n".
|
||||
"# PROP BASE Use_MFC 0\r\n".
|
||||
"# PROP BASE Use_Debug_Libraries 0\r\n".
|
||||
"# PROP BASE Output_Dir \"Release\"\r\n".
|
||||
"# PROP BASE Intermediate_Dir \"Release\"\r\n".
|
||||
"# PROP BASE Target_Dir \"\"\r\n".
|
||||
"# PROP Use_MFC 0\r\n".
|
||||
"# PROP Use_Debug_Libraries 0\r\n".
|
||||
"# PROP Output_Dir \"Release\"\r\n".
|
||||
"# PROP Intermediate_Dir \"Release\"\r\n".
|
||||
"# PROP Ignore_Export_Lib 0\r\n".
|
||||
"# PROP Target_Dir \"\"\r\n".
|
||||
"# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n".
|
||||
"# ADD CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n".
|
||||
"# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n".
|
||||
"# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n".
|
||||
"# ADD BASE RSC /l 0x809 /d \"NDEBUG\"\r\n".
|
||||
"# ADD RSC /l 0x809 /d \"NDEBUG\"\r\n".
|
||||
"BSC32=bscmake.exe\r\n".
|
||||
"# ADD BASE BSC32 /nologo\r\n".
|
||||
"# ADD BSC32 /nologo\r\n".
|
||||
"LINK32=link.exe\r\n".
|
||||
"# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:$subsys /machine:I386\r\n".
|
||||
"# ADD LINK32 $libs /nologo /subsystem:$subsys /machine:I386\r\n".
|
||||
"# SUBTRACT LINK32 /pdb:none\r\n".
|
||||
"\r\n".
|
||||
"!ELSEIF \"\$(CFG)\" == \"$windows_project - Win32 Debug\"\r\n".
|
||||
"\r\n".
|
||||
"# PROP BASE Use_MFC 0\r\n".
|
||||
"# PROP BASE Use_Debug_Libraries 1\r\n".
|
||||
"# PROP BASE Output_Dir \"Debug\"\r\n".
|
||||
"# PROP BASE Intermediate_Dir \"Debug\"\r\n".
|
||||
"# PROP BASE Target_Dir \"\"\r\n".
|
||||
"# PROP Use_MFC 0\r\n".
|
||||
"# PROP Use_Debug_Libraries 1\r\n".
|
||||
"# PROP Output_Dir \"Debug\"\r\n".
|
||||
"# PROP Intermediate_Dir \"Debug\"\r\n".
|
||||
"# PROP Ignore_Export_Lib 0\r\n".
|
||||
"# PROP Target_Dir \"\"\r\n".
|
||||
"# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n".
|
||||
"# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n".
|
||||
"# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n".
|
||||
"# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n".
|
||||
"# ADD BASE RSC /l 0x809 /d \"_DEBUG\"\r\n".
|
||||
"# ADD RSC /l 0x809 /d \"_DEBUG\"\r\n".
|
||||
"BSC32=bscmake.exe\r\n".
|
||||
"# ADD BASE BSC32 /nologo\r\n".
|
||||
"# ADD BSC32 /nologo\r\n".
|
||||
"LINK32=link.exe\r\n".
|
||||
"# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:$subsys /debug /machine:I386 /pdbtype:sept\r\n".
|
||||
"# ADD LINK32 $libs /nologo /subsystem:$subsys /debug /machine:I386 /pdbtype:sept\r\n".
|
||||
"# SUBTRACT LINK32 /pdb:none\r\n".
|
||||
"\r\n".
|
||||
"!ENDIF \r\n".
|
||||
"\r\n".
|
||||
"# Begin Target\r\n".
|
||||
"\r\n".
|
||||
"# Name \"$windows_project - Win32 Release\"\r\n".
|
||||
"# Name \"$windows_project - Win32 Debug\"\r\n".
|
||||
"# Begin Group \"Source Files\"\r\n".
|
||||
"\r\n".
|
||||
"# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n";
|
||||
foreach $source_file (@source_files) {
|
||||
print
|
||||
"# Begin Source File\r\n".
|
||||
"\r\n".
|
||||
"SOURCE=..\\..\\$source_file\r\n";
|
||||
if($source_file =~ /ssh\.c/io) {
|
||||
# Disable 'Edit and continue' as Visual Studio can't handle the macros
|
||||
print
|
||||
"\r\n".
|
||||
"!IF \"\$(CFG)\" == \"$windows_project - Win32 Release\"\r\n".
|
||||
"\r\n".
|
||||
"!ELSEIF \"\$(CFG)\" == \"$windows_project - Win32 Debug\"\r\n".
|
||||
"\r\n".
|
||||
"# ADD CPP /Zi\r\n".
|
||||
"\r\n".
|
||||
"!ENDIF \r\n".
|
||||
"\r\n";
|
||||
}
|
||||
print "# End Source File\r\n";
|
||||
}
|
||||
print
|
||||
"# End Group\r\n".
|
||||
"# Begin Group \"Header Files\"\r\n".
|
||||
"\r\n".
|
||||
"# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n";
|
||||
foreach $header_file (@header_files) {
|
||||
print
|
||||
"# Begin Source File\r\n".
|
||||
"\r\n".
|
||||
"SOURCE=..\\..\\$header_file\r\n".
|
||||
"# End Source File\r\n";
|
||||
}
|
||||
print
|
||||
"# End Group\r\n".
|
||||
"# Begin Group \"Resource Files\"\r\n".
|
||||
"\r\n".
|
||||
"# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n";
|
||||
foreach $resource_file (@resources) {
|
||||
print
|
||||
"# Begin Source File\r\n".
|
||||
"\r\n".
|
||||
"SOURCE=..\\..\\$resource_file\r\n".
|
||||
"# End Source File\r\n";
|
||||
}
|
||||
print
|
||||
"# End Group\r\n".
|
||||
"# End Target\r\n".
|
||||
"# End Project\r\n";
|
||||
select STDOUT; close OUT;
|
||||
chdir '..';
|
||||
}
|
||||
|
||||
##-- X/GTK/Unix makefile
|
||||
open OUT, ">unix/Makefile.gtk"; select OUT;
|
||||
print
|
||||
|
Loading…
Reference in New Issue
Block a user