mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
Add multi-makefile management system
[originally from svn r349]
This commit is contained in:
parent
9e6856ef8e
commit
5176e1e9bb
156
Makefile
156
Makefile
@ -1,37 +1,67 @@
|
||||
# Makefile for PuTTY. Use `FWHACK=/DFWHACK' to cause the firewall hack
|
||||
# to be built in. (requires rebuild of ssh.obj only)
|
||||
# Visual C++ Makefile for PuTTY.
|
||||
#
|
||||
# Use `nmake' to build.
|
||||
#
|
||||
|
||||
# Can also build with `VER=/DSNAPSHOT=1999-01-25' or
|
||||
# `VER=/DRELEASE=0.43' to get version numbering; otherwise you'll
|
||||
# get `Unidentified build'.
|
||||
|
||||
# COMPAT=/DWIN32S_COMPAT will produce a binary that works (minimally)
|
||||
# with Win32s
|
||||
##-- help
|
||||
#
|
||||
# Extra options you can set:
|
||||
#
|
||||
# - FWHACK=/DFWHACK
|
||||
# Enables a hack that tunnels through some firewall proxies.
|
||||
#
|
||||
# - VER=/DSNAPSHOT=1999-01-25
|
||||
# Generates executables whose About box report them as being a
|
||||
# development snapshot.
|
||||
#
|
||||
# - VER=/DRELEASE=0.43
|
||||
# Generates executables whose About box report them as being a
|
||||
# release version.
|
||||
#
|
||||
# - COMPAT=/DWIN32S_COMPAT
|
||||
# Generates a binary that works (minimally) with Win32s.
|
||||
#
|
||||
##--
|
||||
|
||||
CFLAGS = /nologo /W3 /YX /O2 /Yd /D_WINDOWS /DDEBUG /ML /Fd
|
||||
|
||||
.c.obj:
|
||||
cl $(COMPAT) $(FWHACK) $(CFLAGS) /c $*.c
|
||||
|
||||
POBJS1 = window.obj windlg.obj terminal.obj telnet.obj raw.obj
|
||||
POBJS2 = xlat.obj ldisc.obj
|
||||
OBJS1 = misc.obj noise.obj
|
||||
OBJS2 = ssh.obj sshcrc.obj sshdes.obj sshmd5.obj sshrsa.obj sshrand.obj
|
||||
OBJS3 = sshsha.obj sshblowf.obj version.obj sizetip.obj
|
||||
RESRC = win_res.res
|
||||
OBJ=obj
|
||||
RES=res
|
||||
|
||||
##-- objects putty
|
||||
POBJS1 = window.$(OBJ) windlg.$(OBJ) terminal.$(OBJ) telnet.$(OBJ) raw.$(OBJ)
|
||||
POBJS2 = xlat.$(OBJ) ldisc.$(OBJ) sizetip.$(OBJ) ssh.$(OBJ)
|
||||
##-- objects pscp
|
||||
SOBJS = scp.$(OBJ) windlg.$(OBJ) scpssh.$(OBJ)
|
||||
##-- objects putty pscp
|
||||
OBJS1 = misc.$(OBJ) noise.$(OBJ)
|
||||
OBJS2 = sshcrc.$(OBJ) sshdes.$(OBJ) sshmd5.$(OBJ) sshrsa.$(OBJ) sshrand.$(OBJ)
|
||||
OBJS3 = sshsha.$(OBJ) sshblowf.$(OBJ) version.$(OBJ)
|
||||
##-- resources putty
|
||||
PRESRC = win_res.$(RES)
|
||||
##-- resources pscp
|
||||
SRESRC = scp.$(RES)
|
||||
##--
|
||||
|
||||
##-- gui-apps
|
||||
# putty
|
||||
##-- console-apps
|
||||
# pscp
|
||||
##--
|
||||
|
||||
LIBS1 = advapi32.lib user32.lib gdi32.lib
|
||||
LIBS2 = wsock32.lib comctl32.lib comdlg32.lib
|
||||
SCPOBJS = scp.obj windlg.obj misc.obj noise.obj
|
||||
SCPOBJS2 = scpssh.obj sshcrc.obj sshdes.obj sshmd5.obj
|
||||
SCPOBJS3 = sshrsa.obj sshrand.obj sshsha.obj sshblowf.obj version.obj
|
||||
|
||||
all: putty.exe pscp.exe
|
||||
|
||||
putty.exe: $(POBJS1) $(POBJS2) $(OBJS1) $(OBJS2) $(OBJS3) $(RESRC) link.rsp
|
||||
putty.exe: $(POBJS1) $(POBJS2) $(OBJS1) $(OBJS2) $(OBJS3) $(PRESRC) link.rsp
|
||||
link /debug -out:putty.exe @link.rsp
|
||||
|
||||
puttyd.exe: $(POBJS1) $(POBJS2) $(OBJS1) $(OBJS2) $(OBJS3) $(RESRC) link.rsp
|
||||
link /debug -out:puttyd.exe @link.rsp
|
||||
pscp.exe: $(SOBJS) $(OBJS1) $(OBJS2) $(OBJS3) $(SRESRC) scp.rsp
|
||||
link /debug -out:pscp.exe @scp.rsp
|
||||
|
||||
link.rsp: makefile
|
||||
echo /nologo /subsystem:windows > link.rsp
|
||||
@ -40,55 +70,61 @@ link.rsp: makefile
|
||||
echo $(OBJS1) >> link.rsp
|
||||
echo $(OBJS2) >> link.rsp
|
||||
echo $(OBJS3) >> link.rsp
|
||||
echo $(RESRC) >> link.rsp
|
||||
echo $(PRESRC) >> link.rsp
|
||||
echo $(LIBS1) >> link.rsp
|
||||
echo $(LIBS2) >> link.rsp
|
||||
|
||||
window.obj: window.c putty.h win_res.h
|
||||
windlg.obj: windlg.c putty.h ssh.h win_res.h
|
||||
terminal.obj: terminal.c putty.h
|
||||
sizetip.obj: sizetip.c putty.h
|
||||
telnet.obj: telnet.c putty.h
|
||||
raw.obj: raw.c putty.h
|
||||
xlat.obj: xlat.c putty.h
|
||||
ldisc.obj: ldisc.c putty.h
|
||||
misc.obj: misc.c putty.h
|
||||
noise.obj: noise.c putty.h ssh.h
|
||||
ssh.obj: ssh.c ssh.h putty.h
|
||||
sshcrc.obj: sshcrc.c ssh.h
|
||||
sshdes.obj: sshdes.c ssh.h
|
||||
sshmd5.obj: sshmd5.c ssh.h
|
||||
sshrsa.obj: sshrsa.c ssh.h
|
||||
sshsha.obj: sshsha.c ssh.h
|
||||
sshrand.obj: sshrand.c ssh.h
|
||||
sshblowf.obj: sshblowf.c ssh.h
|
||||
version.obj: versionpseudotarget
|
||||
@echo (built version.obj)
|
||||
|
||||
# Hack to force version.obj to be rebuilt always
|
||||
versionpseudotarget:
|
||||
cl $(FWHACK) $(VER) $(CFLAGS) /c version.c
|
||||
|
||||
win_res.res: win_res.rc win_res.h putty.ico
|
||||
rc $(FWHACK) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 win_res.rc
|
||||
|
||||
pscp.exe: $(SCPOBJS) $(SCPOBJS2) $(SCPOBJS3) scp.res scp.rsp
|
||||
link /debug -out:pscp.exe @scp.rsp
|
||||
|
||||
scp.rsp: makefile
|
||||
echo /nologo /subsystem:console > scp.rsp
|
||||
echo $(SCPOBJS) >> scp.rsp
|
||||
echo $(SCPOBJS2) >> scp.rsp
|
||||
echo $(SCPOBJS3) >> scp.rsp
|
||||
echo scp.res >> scp.rsp
|
||||
echo $(SOBJS) >> scp.rsp
|
||||
echo $(OBJS1) >> scp.rsp
|
||||
echo $(OBJS2) >> scp.rsp
|
||||
echo $(OBJS3) >> scp.rsp
|
||||
echo $(SRESRC) >> scp.rsp
|
||||
echo $(LIBS1) >> scp.rsp
|
||||
echo $(LIBS2) >> scp.rsp
|
||||
|
||||
scp.obj: scp.c putty.h scp.h
|
||||
scpssh.obj: scpssh.c putty.h ssh.h scp.h
|
||||
##-- dependencies
|
||||
window.$(OBJ): window.c putty.h win_res.h
|
||||
windlg.$(OBJ): windlg.c putty.h ssh.h win_res.h
|
||||
terminal.$(OBJ): terminal.c putty.h
|
||||
sizetip.$(OBJ): sizetip.c putty.h
|
||||
telnet.$(OBJ): telnet.c putty.h
|
||||
raw.$(OBJ): raw.c putty.h
|
||||
xlat.$(OBJ): xlat.c putty.h
|
||||
ldisc.$(OBJ): ldisc.c putty.h
|
||||
misc.$(OBJ): misc.c putty.h
|
||||
noise.$(OBJ): noise.c putty.h ssh.h
|
||||
ssh.$(OBJ): ssh.c ssh.h putty.h
|
||||
sshcrc.$(OBJ): sshcrc.c ssh.h
|
||||
sshdes.$(OBJ): sshdes.c ssh.h
|
||||
sshmd5.$(OBJ): sshmd5.c ssh.h
|
||||
sshrsa.$(OBJ): sshrsa.c ssh.h
|
||||
sshsha.$(OBJ): sshsha.c ssh.h
|
||||
sshrand.$(OBJ): sshrand.c ssh.h
|
||||
sshblowf.$(OBJ): sshblowf.c ssh.h
|
||||
scp.$(OBJ): scp.c putty.h scp.h
|
||||
scpssh.$(OBJ): scpssh.c putty.h ssh.h scp.h
|
||||
version.$(OBJ): version.c
|
||||
##--
|
||||
|
||||
scp.res: scp.rc scp.ico
|
||||
rc -r -DWIN32 -D_WIN32 -DWINVER=0x0400 scp.rc
|
||||
# Hack to force version.obj to be rebuilt always
|
||||
version.obj: versionpseudotarget
|
||||
@echo (built version.obj)
|
||||
versionpseudotarget:
|
||||
cl $(FWHACK) $(VER) $(CFLAGS) /c version.c
|
||||
|
||||
##-- dependencies
|
||||
win_res.$(RES): win_res.rc win_res.h putty.ico
|
||||
##--
|
||||
win_res.$(RES):
|
||||
rc $(FWHACK) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 win_res.rc
|
||||
|
||||
##-- dependencies
|
||||
scp.$(RES): scp.rc scp.ico
|
||||
##--
|
||||
scp.$(RES):
|
||||
rc $(FWHACK) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 scp.rc
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
|
6
README
6
README
@ -19,6 +19,12 @@ problem while compiling PuTTY under VS6, you should:
|
||||
Alternatively disable the /ZI option, replacing it with a saner
|
||||
value, such as /Zi.
|
||||
|
||||
For other compilers, some alternative Makefiles are provided. These
|
||||
Makefiles are generated automatically from the master `Makefile' by
|
||||
the Perl script `mkfiles.pl'. Additions and corrections to the
|
||||
script are more useful than additions and corrections to the
|
||||
alternative Makefiles themselves.
|
||||
|
||||
The PuTTY home web site is
|
||||
|
||||
http://www.chiark.greenend.org.uk/~sgtatham/putty.html
|
||||
|
172
mkfiles.pl
Executable file
172
mkfiles.pl
Executable file
@ -0,0 +1,172 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Makefile generator.
|
||||
# Produces the other PuTTY makefiles from the master one.
|
||||
|
||||
open IN,"Makefile";
|
||||
@current = ();
|
||||
while (<IN>) {
|
||||
chomp;
|
||||
if (/^##--/) {
|
||||
@words = split /\s+/,$_;
|
||||
shift @words; # remove ##--
|
||||
$i = shift @words; # first word
|
||||
if (!defined $i) { # no words
|
||||
@current = ();
|
||||
} elsif (!defined $words[0]) { # only one word
|
||||
@current = ($i);
|
||||
} else { # at least two words
|
||||
@current = map { $i . "." . $_ } @words;
|
||||
foreach $i (@words) { $projects{$i} = $i; }
|
||||
push @current, "objdefs";
|
||||
}
|
||||
} else {
|
||||
foreach $i (@current) { $store{$i} .= $_ . "\n"; }
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
@projects = keys %projects;
|
||||
|
||||
foreach $i (split '\n',$store{'gui-apps'}) {
|
||||
$i =~ s/^# //;
|
||||
$gui{$i} = 1;
|
||||
}
|
||||
|
||||
foreach $i (split '\n',$store{'console-apps'}) {
|
||||
$i =~ s/^# //;
|
||||
$gui{$i} = -0;
|
||||
}
|
||||
|
||||
sub project {
|
||||
my ($p) = @_;
|
||||
my ($q) = $store{"$p"} . $store{"objects.$p"} . $store{"resources.$p"};
|
||||
$q =~ s/(\S+)\s[^\n]*\n/\$($1) /gs;
|
||||
$q =~ s/ $//;
|
||||
$q;
|
||||
}
|
||||
|
||||
sub projlist {
|
||||
my ($p) = @_;
|
||||
my ($q) = $store{"$p"} . $store{"objects.$p"} . $store{"resources.$p"};
|
||||
$q =~ s/(\S+)\s[^\n]*\n/$1 /gs;
|
||||
my (@q) = split ' ',$q;
|
||||
@q;
|
||||
}
|
||||
|
||||
##-- CygWin makefile
|
||||
open OUT, ">Makefile.cyg"; select OUT;
|
||||
print
|
||||
"# Makefile for PuTTY under cygwin.\n";
|
||||
# gcc command line option is -D not /D
|
||||
($_ = $store{"help"}) =~ s/=\/D/=-D/gs;
|
||||
print $_;
|
||||
print
|
||||
"\n".
|
||||
"# You can define this path to point at your tools if you need to\n".
|
||||
"# TOOLPATH = c:\\cygwin\\bin\\ # or similar, if you're running Windows\n".
|
||||
"# TOOLPATH = /pkg/mingw32msvc/i386-mingw32msvc/bin/\n".
|
||||
"CC = \$(TOOLPATH)gcc\n".
|
||||
"RC = \$(TOOLPATH)windres\n".
|
||||
"# You may also need to tell windres where to find include files:\n".
|
||||
"# RCINC = --include-dir c:\\cygwin\\include\\\n".
|
||||
"\n".
|
||||
"CFLAGS = -g -O2 -D_WINDOWS -DDEBUG\n".
|
||||
"RCFLAGS = \$(RCINC) --define WIN32=1 --define _WIN32=1 --define WINVER=0x0400\n".
|
||||
"LIBS = -ladvapi32 -luser32 -lgdi32 -lwsock32 -lcomctl32 -lcomdlg32\n".
|
||||
"OBJ=o\n".
|
||||
"RES=res\n".
|
||||
"\n";
|
||||
print $store{"objdefs"};
|
||||
print
|
||||
"\n".
|
||||
".SUFFIXES:\n".
|
||||
"\n".
|
||||
"%.o %.obj: %.c\n".
|
||||
"\t\$(CC) \$(FWHACK) \$(CFLAGS) -c \$<\n".
|
||||
"\n".
|
||||
"%.res: %.rc\n".
|
||||
"\t\$(RC) \$(FWHACK) \$(RCFLAGS) \$<\n".
|
||||
"\n";
|
||||
foreach $p (@projects) {
|
||||
print $p, ".exe: ", &project($p), "\n";
|
||||
print "\t\$(CC) \$(LDFLAGS) -o \$@ " . &project($p), " \$(LIBS)\n\n";
|
||||
}
|
||||
print $store{"dependencies"};
|
||||
print
|
||||
"\n".
|
||||
"version.o: FORCE\n".
|
||||
"# Hack to force version.o to be rebuilt always\n".
|
||||
"FORCE:\n".
|
||||
"\t\$(CC) \$(FWHACK) \$(CFLAGS) \$(VER) -c \$<\n\n".
|
||||
"clean:\n".
|
||||
"\trm -f *.o *.exe *.res\n".
|
||||
"\n";
|
||||
select STDOUT; close OUT;
|
||||
|
||||
##-- Borland makefile
|
||||
open OUT, ">Makefile.bor"; select OUT;
|
||||
print
|
||||
"# Makefile for PuTTY under Borland C.\n";
|
||||
# bcc32 command line option is -D not /D
|
||||
($_ = $store{"help"}) =~ s/=\/D/=-D/gs;
|
||||
print $_;
|
||||
print
|
||||
"\n".
|
||||
"# If you rename this file to `Makefile', you should change this line,\n".
|
||||
"# so that the .rsp files still depend on the correct makefile.\n".
|
||||
"MAKEFILE = Makefile.bor\n".
|
||||
"\n".
|
||||
"# Stop windows.h including winsock2.h which would conflict with winsock 1\n".
|
||||
"CFLAGS = -DWIN32_LEAN_AND_MEAN\n".
|
||||
"\n".
|
||||
"# Get include directory for resource compiler\n".
|
||||
"!if !\$d(BCB)\n".
|
||||
"BCB = \$(MAKEDIR)\\..\n".
|
||||
"!endif\n".
|
||||
"\n".
|
||||
".c.obj:\n".
|
||||
"\tbcc32 \$(COMPAT) \$(FWHACK) \$(CFLAGS) /c \$*.c\n".
|
||||
".rc.res:\n".
|
||||
"\tbrc32 \$(FWHACK) -i \$(BCB)\\include \\\n".
|
||||
"\t\t-r -DWIN32 -D_WIN32 -DWINVER=0x0400 \$*.rc\n".
|
||||
"\n".
|
||||
"OBJ=obj\n".
|
||||
"RES=res\n".
|
||||
"\n";
|
||||
print $store{"objdefs"};
|
||||
print "\n";
|
||||
print "all:";
|
||||
print map { " $_.exe" } @projects;
|
||||
print "\n\n";
|
||||
foreach $p (@projects) {
|
||||
print $p, ".exe: ", &project($p), " $p.rsp\n";
|
||||
$tw = $gui{$p} ? " -tW" : "";
|
||||
print "\tbcc32$tw -e$p.exe \@$p.rsp\n";
|
||||
print "\tbrc32 -fe$p.exe " . (join " ", &project("resources.$p")) . "\n\n";
|
||||
}
|
||||
foreach $p (@projects) {
|
||||
print $p, ".rsp: \$(MAKEFILE)\n";
|
||||
$arrow = ">";
|
||||
foreach $i (&projlist("objects.$p")) {
|
||||
print "\techo \$($i) $arrow $p.rsp\n";
|
||||
$arrow = ">>";
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
print $store{"dependencies"};
|
||||
print
|
||||
"\n".
|
||||
"version.o: FORCE\n".
|
||||
"# Hack to force version.o to be rebuilt always\n".
|
||||
"FORCE:\n".
|
||||
"\tbcc32 \$(FWHACK) \$(VER) \$(CFLAGS) /c version.c\n\n".
|
||||
"clean:\n".
|
||||
"\tdel *.obj\n".
|
||||
"\tdel *.exe\n".
|
||||
"\tdel *.res\n".
|
||||
"\tdel *.pch\n".
|
||||
"\tdel *.aps\n".
|
||||
"\tdel *.ilk\n".
|
||||
"\tdel *.pdb\n".
|
||||
"\tdel *.rsp\n";
|
||||
select STDOUT; close OUT;
|
Loading…
Reference in New Issue
Block a user