1
2AC_PREREQ(2.13)
3AC_INIT()
4
5VERSION=1.1.5
6PACKAGE=zoom
7
8UTIL_DISPLAY_INIT()
9UTIL_DISPLAY_HEADER(Andrew Hunter, 2000-2011)
10
11UTIL_DISPLAY_SECTION(automake)
12AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
13AM_CONFIG_HEADER(config.h)
14
15UTIL_DISPLAY_SECTION(compilers)
16AC_PROG_CC
17AC_PROG_CPP
18AC_PROG_RANLIB
19AM_PROG_LEX
20AC_PROG_YACC
21AC_PATH_PROG(PERL, perl, noperl)
22
23OBJC="$CC -c"
24AC_SUBST(OBJC)
25
26if test "$PERL" = "noperl"; then
27  AC_MSG_ERROR([You must have a copy of perl installed to compile Zoom])
28fi
29
30ACLOCAL="$ACLOCAL -I m4"
31
32UTIL_DISPLAY_SECTION(compiler characteristics)
33
34AC_C_INLINE
35UTIL_CHECK_CFLAG(Wall)
36UTIL_CHECK_CFLAG(finline-functions)
37UTIL_CHECK_CFLAG(funroll-loops)
38UTIL_CHECK_CFLAG(fomit-frame-pointer)
39
40AC_ARG_ENABLE([new-terp],
41[  --enable-new-terp       Enable alternative interpreter (insignificant
42                          performance hit, faster compile times, performance
43                          boost on some architectures) ],
44[
45UTIL_CHECK_CFLAG(fno-gcse)
46AC_MSG_CHECKING([for computed gotos])
47AC_TRY_LINK([],
48	[
49	  void *foo[] = { &&bar, &&baz };
50
51	bar:
52	  goto *foo[0];
53	baz:
54	  goto *foo[1];
55	],
56	[
57	  AC_MSG_RESULT(yes)
58	  AC_DEFINE(HAVE_COMPUTED_GOTOS)
59	],
60	[ AC_MSG_RESULT(no) ])
61])
62
63UTIL_DISPLAY_SECTION(architecture characteristics)
64
65AC_CHECK_SIZEOF(unsigned char, 1)
66AC_CHECK_SIZEOF(short int,     2)
67AC_CHECK_SIZEOF(int,           4)
68AC_CHECK_SIZEOF(long int,      4)
69
70case 1 in
71$ac_cv_sizeof_unsigned_char)
72    ZBYTE_TYPE="unsigned char";;
73
74$ac_cv_sizeof_short_int)
75    ZBYTE_TYPE="unsigned short int";;
76
77*)
78    ZBYTE_TYPE="unsigned char"
79esac
80
81case 2 in
82$ac_cv_sizeof_short_int)
83    ZWORD_TYPE="signed short int"
84    ZUWORD_TYPE="unsigned short int";;
85
86$ac_cv_sizeof_int)
87    ZWORD_TYPE="signed int"
88    ZUWORD_TYPE="unsigned int";;
89
90*)
91    ZWORD_TYPE="signed short int"
92esac
93
94case 4 in
95$ac_cv_sizeof_int)
96    ZDWORD_TYPE="int";;
97
98$ac_cv_sizeof_long_int)
99    ZDWORD_TYPE="long int";;
100
101*)
102    ZDWORD_TYPE="long int"
103esac
104
105AC_SUBST(ZBYTE_TYPE)
106AC_SUBST(ZWORD_TYPE)
107AC_SUBST(ZUWORD_TYPE)
108AC_SUBST(ZDWORD_TYPE)
109
110AC_MSG_CHECKING(byte ordering of $ZWORD_TYPE)
111AC_TRY_RUN([
112  int main()
113    {
114      union { $ZWORD_TYPE word; $ZBYTE_TYPE byte[2]; } foo;
115
116      foo.byte[0] = 1;
117      foo.byte[1] = 2;
118
119      if (foo.word == 0x102)
120        return 0;
121      else
122        return 1;
123    }
124  ],
125  AC_MSG_RESULT([zmachine standard])
126  ZMACHINE_CONV_WORD=0,
127  AC_MSG_RESULT([backwards])
128  ZMACHINE_CONV_WORD=1,
129  ZMACHINE_CONV_WORD=1
130  AC_MSG_RESULT([unknown - assuming is backwards])
131)
132
133AC_SUBST(ZMACHINE_CONV_WORD)
134
135UTIL_DISPLAY_SECTION(features)
136
137AC_CYGWIN
138
139if test "$CYGWIN" != "yes"; then
140  MINGW32=yes
141  mingw_prefix=`echo $CC | sed "s/\(.*\)gcc/\1/"`
142  AC_PATH_PROG(MINGWWINDRES, "$mingw_prefix"windres)
143  AC_MSG_CHECKING([if we're cross-compiling using mingw32])
144
145  ac_OLD_CFLAGS="$CFLAGS"
146  CFLAGS="$CFLAGS -mwindows"
147  AC_TRY_LINK([], [ { int x; x = 1; } ],
148      , MINGW32=no)
149  CFLAGS="$CFLAGS -mno-cygwin"
150  AC_TRY_LINK([], [ { int x; x = 1; } ],
151      , MINGW32=no)
152
153  AC_TRY_LINK([#include <windows.h>],
154              [ { MessageBox(NULL, "Arg", "Whoops", MB_OK | MB_SYSTEMMODAL); } ],
155	      , MINGW32=no)
156  AC_MSG_RESULT($MINGW32)
157  CFLAGS=$ac_OLD_CFLAGS
158
159  if test "$MINGW32" = "yes"; then
160    UTIL_CHECK_CFLAG(mwindows)
161    UTIL_CHECK_LDFLAG(mwindows)
162    UTIL_CHECK_CFLAG(mno-cygwin)
163    UTIL_CHECK_LDFLAG(mno-cygwin)
164    AC_PATH_PROG(WINDRES, "$mingw_prefix"windres)
165
166    RESEXTN=o
167    AC_SUBST(RESEXTN)
168
169    AM_CONDITIONAL(WINDOWS_VERSION, true)
170    AM_CONDITIONAL(CREATE_EXE, true)
171    AM_CONDITIONAL(CARBON_VERSION, false)
172
173    WINDOW_SYSTEM=2
174    AC_DEFINE(WINDOW_SYSTEM, 2)
175  else
176    AM_CONDITIONAL(CREATE_EXE, false)
177  fi
178else
179  AM_CONDITIONAL(CREATE_EXE, false)
180fi
181
182if test "$CYGWIN" = "yes"; then
183  UTIL_CHECK_CFLAG(mwindows)
184  UTIL_CHECK_LDFLAG(mwindows)
185  UTIL_CHECK_CFLAG(mno-cygwin)
186  UTIL_CHECK_LDFLAG(mno-cygwin)
187  AC_PATH_PROG(WINDRES, windres)
188  RESEXTN=o
189  AC_SUBST(RESEXTN)
190
191  AM_CONDITIONAL(WINDOWS_VERSION, true)
192  AM_CONDITIONAL(CARBON_VERSION, false)
193
194  WINDOW_SYSTEM=2
195  AC_DEFINE(WINDOW_SYSTEM, 2)
196else
197if test "$MINGW32" != "yes"; then
198  CARBON_DETECT
199  if test "$carbon_present" = "no"; then
200    AC_PATH_XTRA
201    if test "$no_x" = "yes"; then
202      AC_MSG_ERROR([No supported configurations found])
203    else
204      WINDOW_SYSTEM=1
205      AC_DEFINE(WINDOW_SYSTEM, 1)
206
207      AM_CONDITIONAL(WINDOWS_VERSION, false)
208      AM_CONDITIONAL(CARBON_VERSION, false)
209    fi
210  else
211    WINDOW_SYSTEM=3
212    AC_DEFINE(WINDOW_SYSTEM, 3)
213    AM_CONDITIONAL(WINDOWS_VERSION, false)
214    AM_CONDITIONAL(CARBON_VERSION, true)
215
216    QUICKTIME_DETECT
217
218    if test "x$quicktime_present" = "xno"; then
219      AC_MSG_ERROR([QuickTime not found (?)])
220    fi
221
222    AC_CHECK_LIB(z, inflate, [ LIBS="$LIBS -lz" ])
223
224    AC_CHECK_LIB(png, png_get_IHDR,
225      [
226	AC_DEFINE(HAVE_LIBPNG)
227	LIBS="$LIBS -lpng"
228      ],
229      [
230	AC_MSG_WARN([libpng not detected: blecherous QuickTime alpha blending will be used (Ew)])
231      ])
232  fi
233fi
234fi
235
236if test "$WINDOW_SYSTEM" = "2"; then
237  AC_MSG_CHECKING(that we can link to various windows libraries)
238  ac_OLD_LIBS=$LIBS
239  LIBS="$LIBS -lcomctl32 -lcomdlg32"
240  AC_TRY_LINK([#include <windows.h>
241               #include <commctrl.h>
242	       #include <commdlg.h>],
243	      [ {
244	          InitCommonControls();
245		}
246	      ],
247	      AC_MSG_RESULT(woohoo!)
248	      ,
249	      AC_MSG_RESULT(doh!)
250	      AC_WARN([Unable to link to common controls library - you may have to edit the makefile by hand])
251	      LIBS=$ac_OLD_LIBS)
252fi
253
254AC_HEADER_STDC
255AC_CHECK_HEADERS(unistd.h)
256AC_CHECK_HEADERS(sys/time.h)
257
258AC_MSG_CHECKING([for gettimeofday])
259AC_TRY_LINK(
260  [
261  	#include <stdio.h>
262  	#include <stdlib.h>
263  	#include <sys/time.h>
264  ],
265  [{struct timeval tv; gettimeofday(&tv, NULL);}],
266  AC_MSG_RESULT([yes])
267  AC_DEFINE(HAVE_GETTIMEOFDAY),
268  AC_MSG_RESULT([no]))
269
270AC_MSG_CHECKING([for argp])
271
272AC_TRY_LINK([
273  #include <argp.h>
274],
275[
276  argp_parse(NULL, 0, NULL, 0, 0, NULL);
277],
278[
279  AC_MSG_RESULT(yes)
280  AC_DEFINE(OPT_TYPE, 0)
281],
282  AC_MSG_RESULT(no)
283  AC_MSG_CHECKING([for getopt])
284  AC_TRY_LINK([
285    #include <unistd.h>
286  ],
287  [
288    getopt(0, NULL, NULL);
289  ],
290  [
291    AC_MSG_RESULT([yes])
292    AC_DEFINE(OPT_TYPE, 1)
293  ],
294  [
295    AC_MSG_RESULT(no)
296    AC_DEFINE(OPT_TYPE, 200)
297  ])
298)
299
300#AC_CHECK_HEADERS([expat.h],,AC_MSG_ERROR([expat is required to compile Zoom]))
301#AC_CHECK_LIB(expat, XML_ParserReset,,AC_MSG_ERROR([expat is required to compile Zoom]))
302
303if test "$cross_compiling" = "yes"; then
304  UTIL_DISPLAY_SECTION([native gcc (as we're X-compiling)])
305  AC_PATH_PROG(BUILDERCC, gcc)
306else
307  BUILDERCC=$CC
308fi
309
310AC_SUBST(BUILDERCC)
311
312HAVE_T1LIB=0
313if test "$WINDOW_SYSTEM" = "1"; then
314    LIBS="$LIBS $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS"
315    CFLAGS="$CFLAGS $X_CFLAGS"
316    LIBS="$LIBS -lX11"
317
318    AC_CHECK_LIB(m, sin)
319    AC_CHECK_LIB(t1, T1_InitLib,
320      [
321        LIBS="$LIBS -lt1"
322        AC_CHECK_LIB(t1x, T1_SetCharX,
323	  [ LIBS="$LIBS -lt1x"; HAVE_T1LIB=1 ])
324      ])
325
326    if test "$HAVE_T1LIB" = "1"; then
327        AC_MSG_CHECKING([that we can compile a T1Lib program])
328	AC_TRY_LINK(
329	  [ #include <t1lib.h> ],
330	  [ T1_InitLib(0); ],
331	  [
332	    AC_MSG_RESULT(yes)
333	    AC_DEFINE(HAVE_T1LIB)
334	  ],
335	  [
336	    AC_MSG_RESULT([no])
337	  ])
338    fi
339
340    AC_CHECK_LIB(Xext, XdbeQueryExtension, [ LIBS="$LIBS -lXext" ])
341    AC_MSG_CHECKING([for the DBE X extension library])
342    AC_TRY_LINK(
343      [ #include <X11/Xlib.h>
344        #include <X11/Xatom.h>
345	#include <X11/Xutil.h>
346	#include <X11/Xresource.h>
347        #include <X11/extensions/Xdbe.h> ],
348      [ XdbeQueryExtension(NULL, NULL, NULL); ],
349      [
350        AC_MSG_RESULT(yes)
351	AC_DEFINE(HAVE_XDBE)
352      ],
353      [
354        AC_MSG_RESULT(no)
355      ])
356
357    # If Xft is installed, then there will be a xft-config file on the current path
358    AC_MSG_CHECKING([for xft-config])
359    XFTCONFIG=`which xft-config`
360    XFT_CFLAGS=""
361    XFT_LIBS=""
362    if test -x ${XFTCONFIG}; then
363    	AC_MSG_RESULT([$XFTCONFIG])
364    	XFT_CFLAGS=`${XFTCONFIG} --cflags`
365    	XFT_LIBS=`${XFTCONFIG} --libs`
366    else
367    	AC_MSG_RESULT(no)
368    fi
369
370    # Had to move this, Xft 2 again
371    AC_CHECK_LIB(Xrender, XRenderQueryExtension,
372      [
373        LIBS="$LIBS -lXrender"
374	HAVE_XRENDER=1
375      ])
376    if test "$HAVE_XRENDER" = "1"; then
377      AC_MSG_CHECKING([that we can compile an Xrender program])
378      AC_TRY_LINK(
379        [ #include <X11/extensions/Xrender.h> ],
380	[ XRenderCreatePicture(NULL, None, NULL, 0, NULL); ],
381	[
382	  AC_MSG_RESULT(yes)
383	  AC_DEFINE(HAVE_XRENDER)
384	],
385	[
386	  AC_MSG_RESULT(no)
387	])
388    fi
389
390    # Xft 2 requires that we link to fontconfig, too
391    # Grr, I thought dependency hell was supposed to be a Windows thing.
392    AC_CHECK_LIB(fontconfig, FcPatternAddInteger)
393
394    AC_CHECK_LIB(Xft, XftInit,
395      [
396        LIBS="$LIBS $XFT_LIBS"
397        CFLAGS="$CFLAGS $XFT_CFLAGS"
398	HAVE_XFT=1
399      ])
400    if test "$HAVE_XFT" = "1"; then
401      AC_MSG_CHECKING([that we can compile an Xft program])
402      AC_TRY_LINK(
403        [ #include <X11/Xft/Xft.h> ],
404	[ XftDrawCreate(NULL, 0, NULL, 0); ],
405	[
406	  AC_MSG_RESULT(yes)
407	  AC_DEFINE(HAVE_XFT)
408	],
409	[
410	  AC_MSG_RESULT(no)
411	])
412    fi
413
414    AC_CHECK_LIB(z, inflate, [ LIBS="$LIBS -lz" ])
415    AC_CHECK_LIB(png, png_get_IHDR,
416      [
417	AC_DEFINE(HAVE_LIBPNG)
418	LIBS="$LIBS -lpng"
419      ],
420      [
421	AC_MSG_WARN([libpng not detected: image support will be disabled])
422      ])
423fi
424
425UTIL_DISPLAY_INFO(Generating files)
426
427AC_OUTPUT([
428  Makefile
429  m4/Makefile
430  src/Makefile
431  src/ztypes.h
432  src/zoom.rc
433  builder/Makefile
434  manual/Makefile
435  bonus/Makefile])
436