| 1 | # -*- makefile -*- |
| 2 | # |
| 3 | # This file describes which PuTTY programs are made up from which |
| 4 | # object and resource files. It is processed into the various |
| 5 | # Makefiles by means of a Perl script. Makefile changes should |
| 6 | # really be made by editing this file and/or the Perl script, not |
| 7 | # by editing the actual Makefiles. |
| 8 | |
| 9 | # ------------------------------------------------------------ |
| 10 | # Top-level configuration. |
| 11 | |
| 12 | # Overall project name. |
| 13 | !name putty |
| 14 | # Locations and types of output Makefiles. |
| 15 | !makefile vc windows/Makefile.vc |
| 16 | !makefile vcproj windows/MSVC |
| 17 | !makefile cygwin windows/Makefile.cyg |
| 18 | !makefile borland windows/Makefile.bor |
| 19 | !makefile lcc windows/Makefile.lcc |
| 20 | !makefile gtk unix/Makefile.gtk |
| 21 | !makefile unix unix/Makefile.ux |
| 22 | !makefile am unix/Makefile.am |
| 23 | !makefile osx macosx/Makefile |
| 24 | !makefile devcppproj windows/DEVCPP |
| 25 | # Source directories. |
| 26 | !srcdir charset/ |
| 27 | !srcdir windows/ |
| 28 | !srcdir unix/ |
| 29 | !srcdir macosx/ |
| 30 | |
| 31 | # Help text added to the top of each Makefile, with /D converted |
| 32 | # into -D as appropriate for the particular Makefile. |
| 33 | |
| 34 | !begin help |
| 35 | # |
| 36 | # Extra options you can set: |
| 37 | # |
| 38 | # - VER="/DSNAPSHOT=1999-01-25 /DSVN_REV=1234" |
| 39 | # Generates executables whose About box report them as being a |
| 40 | # development snapshot. SVN_REV is a Subversion revision number. |
| 41 | # |
| 42 | # - VER=/DRELEASE=0.43 |
| 43 | # Generates executables whose About box report them as being a |
| 44 | # release version. |
| 45 | # |
| 46 | # - COMPAT=/DAUTO_WINSOCK (Windows only) |
| 47 | # Causes PuTTY to assume that <windows.h> includes its own WinSock |
| 48 | # header file, so that it won't try to include <winsock.h>. |
| 49 | # |
| 50 | # - COMPAT=/DWINSOCK_TWO (Windows only) |
| 51 | # Causes the PuTTY utilities to include <winsock2.h> instead of |
| 52 | # <winsock.h>, except Plink which _needs_ WinSock 2 so it already |
| 53 | # does this. |
| 54 | # |
| 55 | # - COMPAT=/DNO_SECURITY (Windows only) |
| 56 | # Disables Pageant's use of <aclapi.h>, which is not available |
| 57 | # with some development environments (such as older versions of |
| 58 | # the Cygwin/mingw GNU toolchain). This means that Pageant |
| 59 | # won't care about the local user ID of processes accessing it; a |
| 60 | # version of Pageant built with this option will therefore refuse |
| 61 | # to run under NT-series OSes on security grounds (although it |
| 62 | # will run fine on Win95-series OSes where there is no access |
| 63 | # control anyway). |
| 64 | # |
| 65 | # - COMPAT=/DNO_MULTIMON (Windows only) |
| 66 | # Disables PuTTY's use of <multimon.h>, which is not available |
| 67 | # with some development environments. This means that PuTTY's |
| 68 | # full-screen mode (configurable to work on Alt-Enter) will |
| 69 | # not behave usefully in a multi-monitor environment. |
| 70 | # |
| 71 | # Note that this definition is always enabled in the Cygwin |
| 72 | # build, since at the time of writing this <multimon.h> is |
| 73 | # known not to be available in Cygwin. |
| 74 | # |
| 75 | # - COMPAT=/DNO_HTMLHELP (Windows only) |
| 76 | # Disables PuTTY's use of <htmlhelp.h>, which is not available |
| 77 | # with some development environments. The resulting binary |
| 78 | # will only look for an old-style WinHelp file (.HLP/.CNT), and |
| 79 | # will ignore any .CHM file. |
| 80 | # |
| 81 | # Note that this definition is always enabled in the Cygwin |
| 82 | # build, since at the time of writing this <htmlhelp.h> is |
| 83 | # known not to be available in Cygwin (although you can use |
| 84 | # the htmlhelp.h supplied with HTML Help Workshop). |
| 85 | # |
| 86 | # - RCFL=/DNO_MANIFESTS (Windows only) |
| 87 | # Disables inclusion of XML application manifests in the PuTTY |
| 88 | # binaries. This may be necessary to build for 64-bit Windows; |
| 89 | # the manifests are only included to use the XP GUI style on |
| 90 | # Windows XP, and the architecture tags are a lie on 64-bit. |
| 91 | # |
| 92 | # - COMPAT=/DNO_IPV6 |
| 93 | # Disables PuTTY's ability to make IPv6 connections, enabling |
| 94 | # it to compile under development environments which do not |
| 95 | # support IPv6 in their header files. |
| 96 | # |
| 97 | # - COMPAT=/DNO_GSSAPI |
| 98 | # Disables PuTTY's ability to use GSSAPI functions for |
| 99 | # authentication and key exchange. |
| 100 | # |
| 101 | # - COMPAT=/DSTATIC_GSSAPI |
| 102 | # Causes PuTTY to try to link statically against the GSSAPI |
| 103 | # library instead of the default of doing it at run time. |
| 104 | # |
| 105 | # - COMPAT=/DMSVC4 (Windows only) |
| 106 | # - RCFL=/DMSVC4 |
| 107 | # Makes a couple of minor changes so that PuTTY compiles using |
| 108 | # MSVC 4. You will also need /DNO_SECURITY and /DNO_MULTIMON. |
| 109 | # |
| 110 | # - RCFL=/DASCIICTLS (Windows only) |
| 111 | # Uses ASCII rather than Unicode to specify the tab control in |
| 112 | # the resource file. Probably most useful when compiling with |
| 113 | # Cygnus/mingw32, whose resource compiler may have less of a |
| 114 | # problem with it. |
| 115 | # |
| 116 | # - XFLAGS=/DTELNET_DEFAULT |
| 117 | # Causes PuTTY to default to the Telnet protocol (in the absence |
| 118 | # of Default Settings and so on to the contrary). Normally PuTTY |
| 119 | # will default to SSH. |
| 120 | # |
| 121 | # - XFLAGS=/DDEBUG |
| 122 | # Causes PuTTY to enable internal debugging. |
| 123 | # |
| 124 | # - XFLAGS=/DMALLOC_LOG |
| 125 | # Causes PuTTY to emit a file called putty_mem.log, logging every |
| 126 | # memory allocation and free, so you can track memory leaks. |
| 127 | # |
| 128 | # - XFLAGS=/DMINEFIELD (Windows only) |
| 129 | # Causes PuTTY to use a custom memory allocator, similar in |
| 130 | # concept to Electric Fence, in place of regular malloc(). Wastes |
| 131 | # huge amounts of RAM, but should cause heap-corruption bugs to |
| 132 | # show up as GPFs at the point of failure rather than appearing |
| 133 | # later on as second-level damage. |
| 134 | # |
| 135 | !end |
| 136 | |
| 137 | # ------------------------------------------------------------ |
| 138 | # Additional text added verbatim to each individual Makefile. |
| 139 | |
| 140 | # Hack to force version.o to be rebuilt always. |
| 141 | !begin vc |
| 142 | version.obj: *.c *.h *.rc |
| 143 | cl $(VER) $(CFLAGS) /c ..\version.c |
| 144 | !end |
| 145 | !specialobj vc version |
| 146 | !begin cygwin |
| 147 | version.o: FORCE |
| 148 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c ../version.c |
| 149 | !end |
| 150 | !specialobj cygwin version |
| 151 | !begin borland |
| 152 | version.obj: FORCE |
| 153 | bcc32 $(VER) $(CFLAGS) /c ..\version.c |
| 154 | !end |
| 155 | !specialobj borland version |
| 156 | !begin lcc |
| 157 | version.obj: FORCE |
| 158 | lcc $(VER) $(CFLAGS) /c ..\version.c |
| 159 | !end |
| 160 | !specialobj lcc version |
| 161 | # For Unix, we also need the gross MD5 hack that causes automatic |
| 162 | # version number selection in release source archives. |
| 163 | !begin gtk |
| 164 | version.o: FORCE |
| 165 | if test -z "$(VER)" && (cd ..; md5sum -c manifest); then \ |
| 166 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat ../version.def` -c ../version.c; \ |
| 167 | else \ |
| 168 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c ../version.c; \ |
| 169 | fi |
| 170 | !end |
| 171 | !specialobj gtk version |
| 172 | # In the automake build, we have to do the whole job by supplying |
| 173 | # extra CFLAGS, so we have to put the if statement inside one big |
| 174 | # backtick expression. We also force rebuilding via a -D option that |
| 175 | # makes version.o include empty.h, which we construct ourselves and |
| 176 | # touch whenever any source file is updated. |
| 177 | !cflags am version $(VER) -DINCLUDE_EMPTY_H `if test -z "$(VER)" && (cd $(srcdir)/..; md5sum -c manifest >/dev/null 2>&1); then cat $(srcdir)/../version.def; else echo "$(VER)"; fi` |
| 178 | !begin am |
| 179 | BUILT_SOURCES = empty.h |
| 180 | empty.h: $(allsources) |
| 181 | echo '/* Empty file touched by automake makefile to force rebuild of version.o */' >$@ |
| 182 | |
| 183 | !end |
| 184 | !begin >empty.h |
| 185 | /* Empty file touched by automake makefile to force rebuild of version.o */ |
| 186 | !end |
| 187 | |
| 188 | # Add VER to Windows resource targets, and force them to be rebuilt every |
| 189 | # time, on the assumption that they will contain version information. |
| 190 | !begin vc vars |
| 191 | CFLAGS = $(CFLAGS) /DHAS_GSSAPI /DSECURITY_WIN32 |
| 192 | RCFLAGS = $(RCFLAGS) $(VER) |
| 193 | !end |
| 194 | !begin cygwin vars |
| 195 | # XXX GNU-ism, but it's probably all right for a Cygwin/MinGW Makefile. |
| 196 | RCFLAGS += $(patsubst -D%,--define %,$(VER)) |
| 197 | !end |
| 198 | !begin borland vars |
| 199 | # Borland doesn't support +=. This probably shouldn't work, but seems to. |
| 200 | RCFLAGS = $(RCFLAGS) $(VER) |
| 201 | !end |
| 202 | !begin lcc vars |
| 203 | RCFLAGS += $(VER) |
| 204 | !end |
| 205 | !forceobj putty.res |
| 206 | !forceobj puttytel.res |
| 207 | !forceobj plink.res |
| 208 | !forceobj pscp.res |
| 209 | !forceobj psftp.res |
| 210 | !forceobj pageant.res |
| 211 | !forceobj puttygen.res |
| 212 | |
| 213 | # `make install' target for Unix. |
| 214 | !begin gtk |
| 215 | install: |
| 216 | mkdir -p $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) |
| 217 | $(INSTALL_PROGRAM) -m 755 plink $(DESTDIR)$(bindir)/plink |
| 218 | $(INSTALL_PROGRAM) -m 755 pscp $(DESTDIR)$(bindir)/pscp |
| 219 | $(INSTALL_PROGRAM) -m 755 psftp $(DESTDIR)$(bindir)/psftp |
| 220 | $(INSTALL_PROGRAM) -m 755 pterm $(DESTDIR)$(bindir)/pterm |
| 221 | if test -n "$(UTMP_GROUP)"; then \ |
| 222 | chgrp $(UTMP_GROUP) $(DESTDIR)$(bindir)/pterm && \ |
| 223 | chmod 2755 $(DESTDIR)$(bindir)/pterm; \ |
| 224 | elif test -n "$(UTMP_USER)"; then \ |
| 225 | chown $(UTMP_USER) $(DESTDIR)$(bindir)/pterm && \ |
| 226 | chmod 4755 $(DESTDIR)$(bindir)/pterm; \ |
| 227 | fi |
| 228 | $(INSTALL_PROGRAM) -m 755 putty $(DESTDIR)$(bindir)/putty |
| 229 | $(INSTALL_PROGRAM) -m 755 puttygen $(DESTDIR)$(bindir)/puttygen |
| 230 | $(INSTALL_PROGRAM) -m 755 puttytel $(DESTDIR)$(bindir)/puttytel |
| 231 | $(INSTALL_DATA) -m 644 ../doc/plink.1 $(DESTDIR)$(man1dir)/plink.1 |
| 232 | $(INSTALL_DATA) -m 644 ../doc/pscp.1 $(DESTDIR)$(man1dir)/pscp.1 |
| 233 | $(INSTALL_DATA) -m 644 ../doc/psftp.1 $(DESTDIR)$(man1dir)/psftp.1 |
| 234 | $(INSTALL_DATA) -m 644 ../doc/pterm.1 $(DESTDIR)$(man1dir)/pterm.1 |
| 235 | $(INSTALL_DATA) -m 644 ../doc/putty.1 $(DESTDIR)$(man1dir)/putty.1 |
| 236 | $(INSTALL_DATA) -m 644 ../doc/puttygen.1 $(DESTDIR)$(man1dir)/puttygen.1 |
| 237 | $(INSTALL_DATA) -m 644 ../doc/puttytel.1 $(DESTDIR)$(man1dir)/puttytel.1 |
| 238 | |
| 239 | install-strip: |
| 240 | $(MAKE) install INSTALL_PROGRAM="$(INSTALL_PROGRAM) -s" |
| 241 | !end |
| 242 | !begin osx vars |
| 243 | CFLAGS += -DMACOSX |
| 244 | !end |
| 245 | |
| 246 | # List the man pages for the automake makefile. |
| 247 | !begin am |
| 248 | man1_MANS = ../doc/plink.1 ../doc/pscp.1 ../doc/psftp.1 ../doc/pterm.1 \ |
| 249 | ../doc/putty.1 ../doc/puttygen.1 ../doc/puttytel.1 |
| 250 | !end |
| 251 | |
| 252 | # In automake, chgrp/chmod pterm after installation, if configured to. |
| 253 | !begin am |
| 254 | if HAVE_SETID_CMD |
| 255 | install-exec-local: |
| 256 | @SETID_CMD@ $(bindir)/pterm |
| 257 | chmod @SETID_MODE@ $(bindir)/pterm |
| 258 | endif |
| 259 | !end |
| 260 | |
| 261 | # Random symbols. |
| 262 | !begin cygwin vars |
| 263 | # _WIN32_IE is required to expose identifiers that only make sense on |
| 264 | # systems with IE5+ installed, such as some arguments to SHGetFolderPath(). |
| 265 | # WINVER etc perform a similar function for FlashWindowEx(). |
| 266 | CFLAGS += -D_WIN32_IE=0x0500 |
| 267 | CFLAGS += -DWINVER=0x0500 -D_WIN32_WINDOWS=0x0410 -D_WIN32_WINNT=0x0500 |
| 268 | !end |
| 269 | |
| 270 | # ------------------------------------------------------------ |
| 271 | # Definitions of object groups. A group name, followed by an =, |
| 272 | # followed by any number of objects or other already-defined group |
| 273 | # names. A line beginning `+' is assumed to continue the previous |
| 274 | # line. |
| 275 | |
| 276 | # Terminal emulator and its (platform-independent) dependencies. |
| 277 | TERMINAL = terminal wcwidth ldiscucs logging tree234 minibidi |
| 278 | + config dialog conf |
| 279 | |
| 280 | # GUI front end and terminal emulator (putty, puttytel). |
| 281 | GUITERM = TERMINAL window windlg winctrls sizetip winucs winprint |
| 282 | + winutils wincfg sercfg winhelp winjump |
| 283 | |
| 284 | # Same thing on Unix. |
| 285 | UXTERM = TERMINAL uxcfg sercfg uxucs uxprint timing |
| 286 | GTKTERM = UXTERM gtkwin gtkcfg gtkdlg gtkfont gtkcols xkeysym |
| 287 | OSXTERM = UXTERM osxwin osxdlg osxctrls |
| 288 | |
| 289 | # Non-SSH back ends (putty, puttytel, plink). |
| 290 | NONSSH = telnet raw rlogin ldisc pinger |
| 291 | |
| 292 | # SSH back end (putty, plink, pscp, psftp). |
| 293 | SSH = ssh sshcrc sshdes sshmd5 sshrsa sshrand sshsha sshblowf |
| 294 | + sshdh sshcrcda sshpubk sshzlib sshdss x11fwd portfwd |
| 295 | + sshaes sshsh256 sshsh512 sshbn wildcard pinger ssharcf |
| 296 | + sshgssc pgssapi |
| 297 | WINSSH = SSH winnoise winpgntc wingss |
| 298 | UXSSH = SSH uxnoise uxagentc uxgss |
| 299 | |
| 300 | # SFTP implementation (pscp, psftp). |
| 301 | SFTP = sftp int64 logging |
| 302 | |
| 303 | # Miscellaneous objects appearing in all the network utilities (not |
| 304 | # Pageant or PuTTYgen). |
| 305 | MISC = timing misc version settings tree234 proxy conf |
| 306 | WINMISC = MISC winstore winnet winhandl cmdline windefs winmisc winproxy |
| 307 | + wintime |
| 308 | UXMISC = MISC uxstore uxsel uxnet cmdline uxmisc uxproxy time |
| 309 | OSXMISC = MISC uxstore uxsel osxsel uxnet uxmisc uxproxy time |
| 310 | |
| 311 | # Character set library, for use in pterm. |
| 312 | CHARSET = sbcsdat slookup sbcs utf8 toucs fromucs xenc mimeenc macenc localenc |
| 313 | |
| 314 | # Standard libraries. |
| 315 | LIBS = advapi32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib |
| 316 | + shell32.lib winmm.lib imm32.lib winspool.lib ole32.lib |
| 317 | |
| 318 | # Network backend sets. This also brings in the relevant attachment |
| 319 | # to proxy.c depending on whether we're crypto-avoidant or not. |
| 320 | BE_ALL = be_all cproxy |
| 321 | BE_NOSSH = be_nossh nocproxy |
| 322 | BE_SSH = be_ssh cproxy |
| 323 | BE_NONE = be_none nocproxy |
| 324 | # More backend sets, with the additional Windows serial-port module. |
| 325 | W_BE_ALL = be_all_s winser cproxy |
| 326 | W_BE_NOSSH = be_nos_s winser nocproxy |
| 327 | # And with the Unix serial-port module. |
| 328 | U_BE_ALL = be_all_s uxser cproxy |
| 329 | U_BE_NOSSH = be_nos_s uxser nocproxy |
| 330 | |
| 331 | # ------------------------------------------------------------ |
| 332 | # Definitions of actual programs. The program name, followed by a |
| 333 | # colon, followed by a list of objects. Also in the list may be the |
| 334 | # keywords [G] for Windows GUI app, [C] for Console app, [X] for |
| 335 | # X/GTK Unix app, [U] for command-line Unix app. |
| 336 | |
| 337 | putty : [G] GUITERM NONSSH WINSSH W_BE_ALL WINMISC winx11 putty.res LIBS |
| 338 | puttytel : [G] GUITERM NONSSH W_BE_NOSSH WINMISC puttytel.res nogss LIBS |
| 339 | plink : [C] winplink wincons NONSSH WINSSH W_BE_ALL logging WINMISC |
| 340 | + winx11 plink.res winnojmp LIBS |
| 341 | pscp : [C] pscp winsftp wincons WINSSH BE_SSH SFTP wildcard WINMISC |
| 342 | + pscp.res winnojmp LIBS |
| 343 | psftp : [C] psftp winsftp wincons WINSSH BE_SSH SFTP wildcard WINMISC |
| 344 | + psftp.res winnojmp LIBS |
| 345 | |
| 346 | pageant : [G] winpgnt sshrsa sshpubk sshdes sshbn sshmd5 version tree234 |
| 347 | + misc sshaes sshsha winpgntc sshdss sshsh256 sshsh512 winutils |
| 348 | + winmisc winhelp conf pageant.res LIBS |
| 349 | |
| 350 | puttygen : [G] winpgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version |
| 351 | + sshrand winnoise sshsha winstore misc winctrls sshrsa sshdss winmisc |
| 352 | + sshpubk sshaes sshsh256 sshsh512 import winutils puttygen.res |
| 353 | + tree234 notiming winhelp winnojmp conf LIBS wintime |
| 354 | |
| 355 | pterm : [X] GTKTERM uxmisc misc ldisc settings uxpty uxsel BE_NONE uxstore |
| 356 | + uxsignal CHARSET cmdline uxpterm version time xpmpterm xpmptcfg |
| 357 | + nogss |
| 358 | putty : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_ALL uxstore |
| 359 | + uxsignal CHARSET uxputty NONSSH UXSSH UXMISC ux_x11 xpmputty |
| 360 | + xpmpucfg |
| 361 | puttytel : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_NOSSH |
| 362 | + uxstore uxsignal CHARSET uxputty NONSSH UXMISC xpmputty xpmpucfg |
| 363 | + nogss |
| 364 | |
| 365 | plink : [U] uxplink uxcons NONSSH UXSSH U_BE_ALL logging UXMISC uxsignal |
| 366 | + ux_x11 |
| 367 | |
| 368 | puttygen : [U] cmdgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version |
| 369 | + sshrand uxnoise sshsha misc sshrsa sshdss uxcons uxstore uxmisc |
| 370 | + sshpubk sshaes sshsh256 sshsh512 import puttygen.res time tree234 |
| 371 | + uxgen notiming conf |
| 372 | |
| 373 | pscp : [U] pscp uxsftp uxcons UXSSH BE_SSH SFTP wildcard UXMISC |
| 374 | psftp : [U] psftp uxsftp uxcons UXSSH BE_SSH SFTP wildcard UXMISC |
| 375 | |
| 376 | PuTTY : [MX] osxmain OSXTERM OSXMISC CHARSET U_BE_ALL NONSSH UXSSH |
| 377 | + ux_x11 uxpty uxsignal testback putty.icns info.plist |