Fallback for manual setup of GTK 1, if autoconf is run on a system
[u/mdw/putty] / unix / configure.ac
index fd881ad..c0756fd 100644 (file)
@@ -4,18 +4,41 @@
 # * Automake (for aclocal)
 # If you've got them, running "autoreconf" should work.
 
-AC_INIT
+# Version number is substituted by Buildscr for releases, snapshots
+# and custom builds out of svn; X.XX shows up in ad-hoc developer
+# builds, which shouldn't matter
+AC_INIT(putty, X.XX)
 AC_CONFIG_FILES([Makefile])
 AC_CONFIG_HEADERS([uxconfig.h:uxconfig.in])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
 
 AC_PROG_INSTALL
-AC_PROG_CC
-if test "X$GCC" = Xyes; then
-    PUTTYCFLAGS="-Wall -Werror"
-else
-    PUTTYCFLAGS=""
-fi
-AC_SUBST(PUTTYCFLAGS)
+AC_PROG_RANLIB
+
+# Mild abuse of the '--enable' option format to allow manual
+# specification of setuid or setgid setup in pterm.
+setidtype=none
+AC_ARG_ENABLE([setuid],
+            [AS_HELP_STRING([--enable-setuid=USER],
+                            [make pterm setuid to a given user])],
+            [case "$enableval" in
+               no) setidtype=none;;
+               *) setidtype=setuid; setidval="$enableval";;
+             esac])
+AC_ARG_ENABLE([setgid],
+            [AS_HELP_STRING([--enable-setgid=GROUP],
+                            [make pterm setgid to a given group])],
+            [case "$enableval" in
+               no) setidtype=none;;
+               *) setidtype=setgid; setidval="$enableval";;
+             esac])
+AM_CONDITIONAL(HAVE_SETID_CMD, [test "$setidtype" != "none"])
+AS_IF([test "x$setidtype" = "xsetuid"],
+      [SETID_CMD="chown $setidval"; SETID_MODE="4755"])
+AS_IF([test "x$setidtype" = "xsetgid"],
+      [SETID_CMD="chgrp $setidval"; SETID_MODE="2755"])
+AC_SUBST(SETID_CMD)
+AC_SUBST(SETID_MODE)
 
 AC_ARG_WITH([gssapi],
   [AS_HELP_STRING([--without-gssapi],
@@ -27,18 +50,55 @@ WITH_GSSAPI=
 AS_IF([test "x$with_gssapi" != xno],
   [AC_DEFINE([WITH_GSSAPI], [1], [Define if building with GSSAPI support.])])
 
+AC_ARG_WITH([gtk],
+  [AS_HELP_STRING([--with-gtk=VER],
+                  [specify GTK version to use (`1' or `2')])
+AS_HELP_STRING([--without-gtk],
+                  [do not use GTK (build command-line tools only)])],
+  [gtk_version_desired="$withval"],
+  [gtk_version_desired="any"])
+
+case "$gtk_version_desired" in
+  1 | 2 | any | no) ;;
+  yes) gtk_version_desired="any" ;;
+  *) AC_ERROR([Invalid GTK version specified])
+esac
+
 AC_CHECK_HEADERS([utmpx.h sys/select.h],,,[
 #include <sys/types.h>
 #include <utmp.h>])
 
-# Look for both GTK 1 and GTK 2.
-# AM_PATH_GTK([1.2.0], [gtk=1], [gtk=none])
-AM_PATH_GTK_2_0([2.0.0], [gtk=2], [])
-if test "$gtk" = "none"; then
-  all_targets="all-cli"
-else
-  all_targets="all-cli all-gtk"
-fi
+# Look for both GTK 2 and GTK 1, in descending order of preference. If
+# we can't find either, have the makefile only build the CLI programs.
+
+gtk=none
+
+case "$gtk_version_desired:$gtk" in
+  2:none | any:none)
+    ifdef([AM_PATH_GTK_2_0],[
+    AM_PATH_GTK_2_0([2.0.0], [gtk=2], [])
+    ],[AC_WARNING([generating configure script without GTK 2 autodetection])])
+    ;;
+esac
+
+case "$gtk_version_desired:$gtk" in
+  1:none | any:none)
+    ifdef([AM_PATH_GTK],[
+    AM_PATH_GTK([1.2.0], [gtk=1], [])
+    ],[
+    # manual check for gtk1
+    AC_PATH_PROG(GTK1_CONFIG, gtk-config, absent)
+    if test "$GTK1_CONFIG" != "absent"; then
+      GTK_CFLAGS=`"$GTK1_CONFIG" --cflags`
+      GTK_LIBS=`"$GTK1_CONFIG" --libs`
+      gtk=1
+    fi
+    ])
+    ;;
+esac
+
+AM_CONDITIONAL(HAVE_GTK, [test "$gtk" != "none"])
+
 if test "$gtk" = "2"; then
   ac_save_CFLAGS="$CFLAGS"
   ac_save_LIBS="$LIBS"
@@ -48,7 +108,6 @@ if test "$gtk" = "2"; then
   CFLAGS="$ac_save_CFLAGS"
   LIBS="$ac_save_LIBS"
 fi
-AC_SUBST([all_targets])
 
 AC_SEARCH_LIBS([socket], [xnet])
 
@@ -63,12 +122,42 @@ AS_IF([test "x$with_gssapi" != xno],
        [],
        [AC_DEFINE([NO_GSSAPI_LIB], [1], [Define if we could not find a gssapi library])])])])
 
-AC_CHECK_LIB(X11, XOpenDisplay)
+AC_CHECK_LIB(X11, XOpenDisplay,
+             [GTK_LIBS="-lX11 $GTK_LIBS"
+              AC_DEFINE([HAVE_LIBX11],[],[Define if libX11.a is available])])
 
-AC_CHECK_FUNCS([getaddrinfo ptsname setresuid strsignal updwtmpx])
+AC_CHECK_FUNCS([getaddrinfo posix_openpt ptsname setresuid strsignal updwtmpx])
+AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[#include <time.h>]])
+AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME],[],[Define if clock_gettime() is available])])
+
+if test "x$GCC" = "xyes"; then
+  :
+  AC_SUBST(WARNINGOPTS, ['-Wall -Werror'])
+else
+  :
+  AC_SUBST(WARNINGOPTS, [])
+fi
 
 AC_OUTPUT
 
+if test "$gtk_version_desired" = "no"; then cat <<EOF
+
+'configure' was instructed not to build using GTK. Therefore, PuTTY
+itself and the other GUI utilities will not be built by the generated
+Makefile: only the command-line tools such as puttygen, plink and
+psftp will be built.
+
+EOF
+elif test "$gtk" = "none"; then cat <<EOF
+
+'configure' was unable to find either the GTK 1 or GTK 2 libraries on
+your system. Therefore, PuTTY itself and the other GUI utilities will
+not be built by the generated Makefile: only the command-line tools
+such as puttygen, plink and psftp will be built.
+
+EOF
+fi
+
 AH_BOTTOM([
 /* Convert autoconf definitions to ones that PuTTY wants. */