]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - configure.ac
Merge tag '0.66'
[PuTTY.git] / configure.ac
1 # To compile this into a configure script, you need:
2 # * Autoconf 2.50 or newer
3 # * Gtk (for $prefix/share/aclocal/gtk.m4)
4 # * Automake (for aclocal)
5 # If you've got them, running "autoreconf" should work.
6
7 # Version number is substituted by Buildscr for releases, snapshots
8 # and custom builds out of svn; X.XX shows up in ad-hoc developer
9 # builds, which shouldn't matter
10 AC_INIT(putty, X.XX)
11 AC_CONFIG_FILES([Makefile])
12 AC_CONFIG_HEADERS([uxconfig.h:uxconfig.in])
13 AM_INIT_AUTOMAKE([-Wall -Werror foreign])
14
15 AC_PROG_INSTALL
16 AC_PROG_RANLIB
17 ifdef([AM_PROG_AR],[AM_PROG_AR])
18 AM_PROG_CC_C_O
19
20 # Mild abuse of the '--enable' option format to allow manual
21 # specification of setuid or setgid setup in pterm.
22 setidtype=none
23 AC_ARG_ENABLE([setuid],
24             [AS_HELP_STRING([--enable-setuid=USER],
25                             [make pterm setuid to a given user])],
26             [case "$enableval" in
27                no) setidtype=none;;
28                *) setidtype=setuid; setidval="$enableval";;
29              esac])
30 AC_ARG_ENABLE([setgid],
31             [AS_HELP_STRING([--enable-setgid=GROUP],
32                             [make pterm setgid to a given group])],
33             [case "$enableval" in
34                no) setidtype=none;;
35                *) setidtype=setgid; setidval="$enableval";;
36              esac])
37 AM_CONDITIONAL(HAVE_SETID_CMD, [test "$setidtype" != "none"])
38 AS_IF([test "x$setidtype" = "xsetuid"],
39       [SETID_CMD="chown $setidval"; SETID_MODE="4755"])
40 AS_IF([test "x$setidtype" = "xsetgid"],
41       [SETID_CMD="chgrp $setidval"; SETID_MODE="2755"])
42 AC_SUBST(SETID_CMD)
43 AC_SUBST(SETID_MODE)
44
45 AC_ARG_WITH([gssapi],
46   [AS_HELP_STRING([--without-gssapi],
47                   [disable GSSAPI support])],
48   [],
49   [with_gssapi=yes])
50
51 AC_ARG_WITH([quartz],
52   [AS_HELP_STRING([--with-quartz],
53                   [build for the MacOS Quartz GTK back end])],
54   [AC_DEFINE([OSX_GTK], [1], [Define if building with GTK for MacOS.])],
55   [])
56
57 WITH_GSSAPI=
58 AS_IF([test "x$with_gssapi" != xno],
59   [AC_DEFINE([WITH_GSSAPI], [1], [Define if building with GSSAPI support.])])
60
61 AC_ARG_WITH([gtk],
62   [AS_HELP_STRING([--with-gtk=VER],
63                   [specify GTK version to use (`1', `2' or `3')])
64 AS_HELP_STRING([--without-gtk],
65                   [do not use GTK (build command-line tools only)])],
66   [gtk_version_desired="$withval"],
67   [gtk_version_desired="any"])
68
69 case "$gtk_version_desired" in
70   1 | 2 | 3 | any | no) ;;
71   yes) gtk_version_desired="any" ;;
72   *) AC_ERROR([Invalid GTK version specified])
73 esac
74
75 AC_CHECK_HEADERS([utmpx.h sys/select.h],,,[
76 #include <sys/types.h>
77 #include <utmp.h>])
78
79 # Look for GTK 3, GTK 2 and GTK 1, in descending order of preference.
80 # If we can't find any, have the makefile only build the CLI programs.
81
82 gtk=none
83
84 case "$gtk_version_desired:$gtk" in
85   3:none | any:none)
86     ifdef([AM_PATH_GTK_3_0],[
87     AM_PATH_GTK_3_0([3.0.0], [gtk=3], [])
88     ],[AC_WARNING([generating configure script without GTK 3 autodetection])])
89     ;;
90 esac
91
92 case "$gtk_version_desired:$gtk" in
93   2:none | any:none)
94     ifdef([AM_PATH_GTK_2_0],[
95     AM_PATH_GTK_2_0([2.0.0], [gtk=2], [])
96     ],[AC_WARNING([generating configure script without GTK 2 autodetection])])
97     ;;
98 esac
99
100 case "$gtk_version_desired:$gtk" in
101   1:none | any:none)
102     ifdef([AM_PATH_GTK],[
103     AM_PATH_GTK([1.2.0], [gtk=1], [])
104     ],[
105     # manual check for gtk1
106     AC_PATH_PROG(GTK1_CONFIG, gtk-config, absent)
107     if test "$GTK1_CONFIG" != "absent"; then
108       GTK_CFLAGS=`"$GTK1_CONFIG" --cflags`
109       GTK_LIBS=`"$GTK1_CONFIG" --libs`
110       gtk=1
111     fi
112     ])
113     ;;
114 esac
115
116 AM_CONDITIONAL(HAVE_GTK, [test "$gtk" != "none"])
117
118 if test "$gtk" = "2" -o "$gtk" = "3"; then
119   ac_save_CFLAGS="$CFLAGS"
120   ac_save_LIBS="$LIBS"
121   CFLAGS="$CFLAGS $GTK_CFLAGS"
122   LIBS="$GTK_LIBS $LIBS"
123   AC_CHECK_FUNCS([pango_font_family_is_monospace pango_font_map_list_families])
124   CFLAGS="$ac_save_CFLAGS"
125   LIBS="$ac_save_LIBS"
126 fi
127
128 AC_SEARCH_LIBS([socket], [xnet])
129
130 AS_IF([test "x$with_gssapi" != xno],
131   [AC_SEARCH_LIBS(
132     [dlopen],[dl],
133     [],
134     [AC_DEFINE([NO_LIBDL], [1], [Define if we could not find libdl.])
135      AC_CHECK_HEADERS([gssapi/gssapi.h])
136      AC_SEARCH_LIBS(
137        [gss_init_sec_context],[gssapi gssapi_krb5 gss],
138        [],
139        [AC_DEFINE([NO_GSSAPI_LIB], [1], [Define if we could not find a gssapi library])])])])
140
141 AC_CHECK_LIB(X11, XOpenDisplay,
142              [GTK_LIBS="-lX11 $GTK_LIBS"
143               AC_DEFINE([HAVE_LIBX11],[],[Define if libX11.a is available])])
144
145 AC_CHECK_FUNCS([getaddrinfo posix_openpt ptsname setresuid strsignal updwtmpx])
146 AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[#include <time.h>]])
147 AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME],[],[Define if clock_gettime() is available])])
148
149 AC_CACHE_CHECK([for SO_PEERCRED and dependencies], [x_cv_linux_so_peercred], [
150     AC_COMPILE_IFELSE([
151         AC_LANG_PROGRAM([[
152             #define _GNU_SOURCE
153             #include <features.h>
154             #include <sys/socket.h>
155           ]],[[
156             struct ucred cr;
157             socklen_t crlen = sizeof(cr);
158             return getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cr, &crlen) +
159             cr.pid + cr.uid + cr.gid;
160           ]]
161         )],
162         AS_VAR_SET(x_cv_linux_so_peercred, yes),
163         AS_VAR_SET(x_cv_linux_so_peercred, no)
164     )
165 ])
166 AS_IF([test AS_VAR_GET(x_cv_linux_so_peercred) = yes],
167     [AC_DEFINE([HAVE_SO_PEERCRED], [1],
168      [Define if SO_PEERCRED works in the Linux fashion.])]
169 )
170
171 if test "x$GCC" = "xyes"; then
172   :
173   AC_SUBST(WARNINGOPTS, ['-Wall -Werror'])
174 else
175   :
176   AC_SUBST(WARNINGOPTS, [])
177 fi
178
179 AC_OUTPUT
180
181 if test "$gtk_version_desired" = "no"; then cat <<EOF
182
183 'configure' was instructed not to build using GTK. Therefore, PuTTY
184 itself and the other GUI utilities will not be built by the generated
185 Makefile: only the command-line tools such as puttygen, plink and
186 psftp will be built.
187
188 EOF
189 elif test "$gtk" = "none"; then cat <<EOF
190
191 'configure' was unable to find any version of the GTK libraries on
192 your system. Therefore, PuTTY itself and the other GUI utilities will
193 not be built by the generated Makefile: only the command-line tools
194 such as puttygen, plink and psftp will be built.
195
196 EOF
197 fi
198
199 AH_BOTTOM([
200 /* Convert autoconf definitions to ones that PuTTY wants. */
201
202 #ifndef HAVE_GETADDRINFO
203 # define NO_IPV6
204 #endif
205 #ifndef HAVE_SETRESUID
206 # define HAVE_NO_SETRESUID
207 #endif
208 #ifndef HAVE_STRSIGNAL
209 # define HAVE_NO_STRSIGNAL
210 #endif
211 #if !defined(HAVE_UTMPX_H) || !defined(HAVE_UPDWTMPX)
212 # define OMIT_UTMP
213 #endif
214 #ifndef HAVE_PTSNAME
215 # define BSD_PTYS
216 #endif
217 #ifndef HAVE_SYS_SELECT_H
218 # define HAVE_NO_SYS_SELECT_H
219 #endif
220 #ifndef HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE
221 # define PANGO_PRE_1POINT4
222 #endif
223 #ifndef HAVE_PANGO_FONT_MAP_LIST_FAMILIES
224 # define PANGO_PRE_1POINT6
225 #endif
226 #if !defined(WITH_GSSAPI)
227 # define NO_GSSAPI
228 #endif
229 #if !defined(NO_GSSAPI) && defined(NO_LIBDL)
230 # if !defined(HAVE_GSSAPI_GSSAPI_H) || defined(NO_GSSAPI_LIB)
231 #  define NO_GSSAPI
232 # endif
233 #endif
234 ])