diff --git a/README b/README index e1787910..8f2a7914 100644 --- a/README +++ b/README @@ -42,11 +42,14 @@ For building on Windows: For building on Unix: - - unix/Makefile.gtk is for Unix and GTK. If you don't have GTK, you + - unix/configure is for Unix and GTK. If you don't have GTK, you should still be able to build the command-line utilities (PSCP, - PSFTP, Plink, PuTTYgen) using this makefile. The makefile expects - you to change into the `unix' subdirectory, then run `make -f - Makefile.gtk'. Note that Unix PuTTY has mostly only been tested + PSFTP, Plink, PuTTYgen) using this script. To use it, change + into the `unix' subdirectory, run `./configure' and then `make'. + + - unix/Makefile.gtk is for non-autoconfigured builds. This makefile + expects you to change into the `unix' subdirectory, then run `make + -f Makefile.gtk'. Note that Unix PuTTY has mostly only been tested on Linux so far; portability problems such as BSD-style ptys or different header file requirements are expected. diff --git a/Recipe b/Recipe index f0facd6e..407b229b 100644 --- a/Recipe +++ b/Recipe @@ -18,6 +18,7 @@ !makefile borland windows/Makefile.bor !makefile lcc windows/Makefile.lcc !makefile gtk unix/Makefile.gtk +!makefile ac unix/Makefile.in !makefile mpw mac/Makefile.mpw !makefile osx macosx/Makefile # Source directories. diff --git a/mkfiles.pl b/mkfiles.pl index 78818321..8905c3fc 100755 --- a/mkfiles.pl +++ b/mkfiles.pl @@ -212,7 +212,7 @@ sub mfval($) { # Returns true if the argument is a known makefile type. Otherwise, # prints a warning and returns false; if (grep { $type eq $_ } - ("vc","vcproj","cygwin","borland","lcc","gtk","mpw","osx")) { + ("vc","vcproj","cygwin","borland","lcc","gtk","ac","mpw","osx")) { return 1; } warn "$.:unknown makefile type '$type'\n"; @@ -945,6 +945,64 @@ if (defined $makefiles{'gtk'}) { select STDOUT; close OUT; } +if (defined $makefiles{'ac'}) { + $dirpfx = &dirpfx($makefiles{'ac'}, "/"); + + ##-- Unix/autoconf makefile + open OUT, ">$makefiles{'ac'}"; select OUT; + print + "# Makefile.in for $project_name under Unix with Autoconf.\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"; + # gcc command line option is -D not /D + ($_ = $help) =~ s/=\/D/=-D/gs; + print $_; + print + "\n". + "CC = \@CC\@\n". + "\n". + &splitline("CFLAGS = \@CFLAGS\@ \@CPPFLAGS\@ \@DEFS\@ \@GTK_CFLAGS\@ " . + (join " ", map {"-I$dirpfx$_"} @srcdirs))."\n". + "XLDFLAGS = \@LDFLAGS\@ \@LIBS\@ \@GTK_LIBS\@\n". + "ULDFLAGS = \@LDFLAGS\@ \@LIBS\@\n". + "INSTALL=\@INSTALL\@\n", + "INSTALL_PROGRAM=\$(INSTALL)\n", + "INSTALL_DATA=\$(INSTALL)\n", + "prefix=\@prefix\@\n", + "exec_prefix=\@exec_prefix\@\n", + "bindir=\@bindir\@\n", + "mandir=\@mandir\@\n", + "man1dir=\$(mandir)/man1\n", + "\n". + $makefile_extra{'gtk'}->{'vars'} . + "\n". + ".SUFFIXES:\n". + "\n". + "\n". + "all: \@all_targets\@\n". + &splitline("all-cli:" . join "", map { " $_" } &progrealnames("U"))."\n". + &splitline("all-gtk:" . join "", map { " $_" } &progrealnames("X"))."\n"; + print "\n"; + foreach $p (&prognames("X:U")) { + ($prog, $type) = split ",", $p; + $objstr = &objects($p, "X.o", undef, undef); + print &splitline($prog . ": " . $objstr), "\n"; + $libstr = &objects($p, undef, undef, "-lX"); + print &splitline("\t\$(CC)" . $mw . " \$(${type}LDFLAGS) -o \$@ " . + $objstr . " $libstr", 69), "\n\n"; + } + foreach $d (&deps("X.o", undef, $dirpfx, "/", "gtk")) { + 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"; + select STDOUT; close OUT; +} + if (defined $makefiles{'mpw'}) { ##-- MPW Makefile open OUT, ">$makefiles{'mpw'}"; select OUT; diff --git a/mkunxarc.sh b/mkunxarc.sh index 8630fffc..8433c383 100755 --- a/mkunxarc.sh +++ b/mkunxarc.sh @@ -28,6 +28,9 @@ esac perl mkfiles.pl (cd doc && make -s ${docver:+"$docver"}) +# Track down automake's copy of install-sh +cp `aclocal --print-ac-dir | sed 's/aclocal$/automake/'`/install-sh unix/. +(cd unix && autoreconf && rm -rf aclocal.m4 autom4te.cache) relver=`cat LATEST.VER` arcname="putty$arcsuffix" diff --git a/unix/configure.ac b/unix/configure.ac new file mode 100644 index 00000000..91563562 --- /dev/null +++ b/unix/configure.ac @@ -0,0 +1,44 @@ +# To compile this into a configure script, you need: +# * Autoconf 2.50 or newer +# * Gtk (for $prefix/share/aclocal/gtk.m4) +# * Automake (for aclocal) +# If you've got them, running "autoreconf" should work. + +AC_INIT +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_HEADERS([uxconfig.h:uxconfig.in]) + +AC_PROG_INSTALL +AC_PROG_CC +if test "X$GCC" = Xyes; then + CFLAGS="$CFLAGS -Wall -Werror" +fi + +AM_PATH_GTK([1.2.0], [all_targets="all-cli all-gtk"], [all_targets="all-cli"]) +AC_SUBST([all_targets]) + +AC_SEARCH_LIBS([socket], [xnet]) + +AC_CHECK_FUNCS([getaddrinfo ptsname pututline setresuid strsignal]) + +AC_OUTPUT + +AH_BOTTOM([ +/* Convert autoconf definitions to ones that PuTTY wants. */ + +#ifndef HAVE_GETADDRINFO +# define NO_IPV6 +#endif +#ifndef HAVE_SETRESUID +# define HAVE_NO_SETRESUID +#endif +#ifndef HAVE_STRSIGNAL +# define HAVE_NO_STRSIGNAL +#endif +#ifndef HAVE_PUTUTLINE +# define OMIT_UTMP +#endif +#ifndef HAVE_PTSNAME +# define BSD_PTYS +#endif +]) diff --git a/unix/unix.h b/unix/unix.h index 54cf39f2..c0b56c74 100644 --- a/unix/unix.h +++ b/unix/unix.h @@ -1,6 +1,10 @@ #ifndef PUTTY_UNIX_H #define PUTTY_UNIX_H +#ifdef HAVE_CONFIG_H +# include "uxconfig.h" /* Space to hide it from mkfiles.pl */ +#endif + #include /* for FILENAME_MAX */ #include "charset.h"