1AC_PREREQ([2.69])
2AC_INIT([detroit], [0.2.3], [salojan@goto10.co])
3AC_CONFIG_HEADERS([engine/config.h])
4AC_CANONICAL_HOST
5
6PROG_N="`cat ./PROJECT | head -1`"
7PROG_X="`cat ./PROJECT | head -2 | tail -1`"
8PROG_Y="`cat ./PROJECT | head -3 | tail -1`"
9PROG_V="`cat ./PROJECT | head -4 | tail -1`"
10
11dnl
12dnl Adjust default installation prefix by operating system.
13dnl
14
15AC_PREFIX_DEFAULT([`
16	if [[ "$(uname -s)" = "NetBSD" ]]; then
17		echo "/usr/pkg"
18	else
19		echo "/usr/local"
20	fi
21`])
22
23dnl
24dnl Check the existence of needed programs.
25dnl
26
27AC_PROG_CC
28AC_PROG_INSTALL
29AC_PROG_LN_S
30AC_LANG_C
31AC_CHECK_PROGS(RM, rm)
32AC_CHECK_PROGS(LN, ln)
33
34dnl
35dnl Check for compiler parameters.
36dnl
37
38C_FLAGS="\
39-W -Wall \
40`/bin/sh ./build/opt.sh \"$CC\" -Wextra` \
41`/bin/sh ./build/opt.sh \"$CC\" -Wfloat-equal` \
42`/bin/sh ./build/opt.sh \"$CC\" -Wformat` \
43`/bin/sh ./build/opt.sh \"$CC\" -Wimplicit-fallthrough=3` \
44`/bin/sh ./build/opt.sh \"$CC\" -Wmissing-braces` \
45`/bin/sh ./build/opt.sh \"$CC\" -Wno-unknown-pragmas` \
46`/bin/sh ./build/opt.sh \"$CC\" -Wparentheses` \
47`/bin/sh ./build/opt.sh \"$CC\" -Wstack-larger-than-2047` \
48`/bin/sh ./build/opt.sh \"$CC\" -fdiagnostics-generate-patch` \
49`/bin/sh ./build/opt.sh \"$CC\" -fno-diagnostics-color` \
50`/bin/sh ./build/att.sh \"$CC\" -fvisibility=hidden` \
51`/bin/sh ./build/opt.sh \"$CC\" -pipe` \
52`/bin/sh ./build/opt.sh \"$CC\" -pthread` \
53-c -I."
54D_FLAGS="`/bin/sh ./build/sym.sh \"$CC\"`"
55E_FLAGS=""
56F_FLAGS=""
57LD_FLAGS=""
58
59AC_ARG_ENABLE(debug,
60	[AS_HELP_STRING(
61		[--enable-debug],
62		[build with debug information (slower and bigger binary)])],
63	[C_FLAGS=$C_FLAGS" -DPROG_HAS_DEBUG -D_FORTIFY_SOURCE=1 -O -g" PROG_X=$PROG_X".debug" PROG_N=$PROG_N" (debug build)"],
64	[C_FLAGS=$C_FLAGS" -O2"])
65
66AC_ARG_ENABLE(profiling,
67	[AS_HELP_STRING(
68		[--enable-profiling],
69		[build with profiling information (even more slower and bigger binary)])],
70	[C_FLAGS=$C_FLAGS" -pg `/bin/sh ./build/opt.sh \"$CC\" -fprofile-arcs` `/bin/sh ./build/opt.sh \"$CC\" -ftest-coverage`" PROG_X=$PROG_X".profiling" PROG_N=$PROG_N" (profiling build)" L_LIBS=$L_LIBS" -pg -lgcov"],
71	[])
72
73AC_ARG_ENABLE(lto,
74	[AS_HELP_STRING(
75		[--enable-lto],
76		[build with link time optimizations, LTO capable linker is needed for this, like gold (see --with-linker below)])],
77	[C_FLAGS=$C_FLAGS" -flto"],
78	[])
79
80AC_ARG_ENABLE(largefile,
81	[AS_HELP_STRING(
82		[--disable-largefile],
83		[disable support for 64 bit file offsets on 32 bit machine])],
84	[],
85	[C_FLAGS=$C_FLAGS" `/bin/sh ./build/lfs_c.sh 2>/dev/null`" LD_FLAGS=$LD_FLAGS" `/bin/sh ./build/lfs_ld.sh 2>/dev/null`"])
86
87AC_ARG_ENABLE(builtin,
88	[AS_HELP_STRING(
89		[--disable-builtin],
90		[disable substituting functions with compiler built-in equivalents])],
91	[C_FLAGS=$C_FLAGS" -fno-builtin"],
92	[])
93
94AC_ARG_ENABLE(native,
95	[AS_HELP_STRING(
96		[--enable-native],
97		[enable optimization flags suitable for this host])],
98	[C_FLAGS=$C_FLAGS" -march=native"],
99	[])
100
101AC_ARG_ENABLE(altivec,
102	[AS_HELP_STRING(
103		[--enable-altivec],
104		[enable AltiVec CPU extensions (PowerPC)])],
105	[C_FLAGS=$C_FLAGS" -maltivec"],
106	[])
107
108AC_ARG_ENABLE(isel,
109	[AS_HELP_STRING(
110		[--enable-isel],
111		[enable ISEL CPU extensions (PowerPC)])],
112	[C_FLAGS=$C_FLAGS" -misel"],
113	[])
114
115AC_ARG_ENABLE(spe,
116	[AS_HELP_STRING(
117		[--enable-spe],
118		[enable SPE CPU extensions (PowerPC)])],
119	[C_FLAGS=$C_FLAGS" -mspe"],
120	[])
121
122AC_ARG_ENABLE(vsx,
123	[AS_HELP_STRING(
124		[--enable-vsx],
125		[enable VSX CPU extensions (PowerPC)])],
126	[C_FLAGS=$C_FLAGS" -mvsx"],
127	[])
128
129AC_ARG_ENABLE(vis,
130	[AS_HELP_STRING(
131		[--enable-vis],
132		[enable VIS CPU extensions (SPARC)])],
133	[C_FLAGS=$C_FLAGS" -mvis"],
134	[])
135
136AC_ARG_ENABLE(vis2,
137	[AS_HELP_STRING(
138		[--enable-vis2],
139		[enable VIS2 CPU extensions (SPARC)])],
140	[C_FLAGS=$C_FLAGS" -mvis2"],
141	[])
142
143AC_ARG_ENABLE(vis3,
144	[AS_HELP_STRING(
145		[--enable-vis3],
146		[enable VIS3 CPU extensions (SPARC)])],
147	[C_FLAGS=$C_FLAGS" -mvis3"],
148	[])
149
150AC_ARG_ENABLE(vis4,
151	[AS_HELP_STRING(
152		[--enable-vis4],
153		[enable VIS4 CPU extensions (SPARC)])],
154	[C_FLAGS=$C_FLAGS" -mvis4"],
155	[])
156
157AC_ARG_ENABLE(vis4b,
158	[AS_HELP_STRING(
159		[--enable-vis4b],
160		[enable VIS4b CPU extensions (SPARC)])],
161	[C_FLAGS=$C_FLAGS" -mvis4b"],
162	[])
163
164AC_ARG_ENABLE(fmaf,
165	[AS_HELP_STRING(
166		[--enable-fmaf],
167		[enable use of FMAF CPU instruction (SPARC)])],
168	[C_FLAGS=$C_FLAGS" -mfmaf"],
169	[])
170
171AC_ARG_ENABLE(sse,
172	[AS_HELP_STRING(
173		[--enable-sse],
174		[enable SSE CPU extensions (x86)])],
175	[C_FLAGS=$C_FLAGS" -msse"],
176	[])
177
178AC_ARG_ENABLE(sse2,
179	[AS_HELP_STRING(
180		[--enable-sse2],
181		[enable SSE2 CPU extensions (x86)])],
182	[C_FLAGS=$C_FLAGS" -msse2"],
183	[])
184
185AC_ARG_ENABLE(sse3,
186	[AS_HELP_STRING(
187		[--enable-sse3],
188		[enable SSE3 CPU extensions (x86)])],
189	[C_FLAGS=$C_FLAGS" -msse3"],
190	[])
191
192AC_ARG_ENABLE(ssse3,
193	[AS_HELP_STRING(
194		[--enable-ssse3],
195		[enable Supplemental SSE3 CPU extensions (x86)])],
196	[C_FLAGS=$C_FLAGS" -mssse3"],
197	[])
198
199AC_ARG_ENABLE(sse4,
200	[AS_HELP_STRING(
201		[--enable-sse4],
202		[enable SSE4 CPU extensions (x86)])],
203	[C_FLAGS=$C_FLAGS" -msse4"],
204	[])
205
206AC_ARG_ENABLE(sse4a,
207	[AS_HELP_STRING(
208		[--enable-sse4a],
209		[enable SSE4a CPU extensions (x86)])],
210	[C_FLAGS=$C_FLAGS" -msse4a"],
211	[])
212
213AC_ARG_ENABLE(sse4.1,
214	[AS_HELP_STRING(
215		[--enable-sse4.1],
216		[enable SSE4.1 CPU extensions (x86)])],
217	[C_FLAGS=$C_FLAGS" -msse4.1"],
218	[])
219
220AC_ARG_ENABLE(sse4.2,
221	[AS_HELP_STRING(
222		[--enable-sse4.2],
223		[enable SSE4.2 CPU extensions (x86)])],
224	[C_FLAGS=$C_FLAGS" -msse4.2"],
225	[])
226
227AC_ARG_ENABLE(avx,
228	[AS_HELP_STRING(
229		[--enable-avx],
230		[enable AVX CPU extensions (x86)])],
231	[C_FLAGS=$C_FLAGS" -mavx"],
232	[])
233
234AC_ARG_ENABLE(avx2,
235	[AS_HELP_STRING(
236		[--enable-avx2],
237		[enable AVX2 CPU extensions (x86)])],
238	[C_FLAGS=$C_FLAGS" -mavx2"],
239	[])
240
241AC_ARG_ENABLE(bmi,
242	[AS_HELP_STRING(
243		[--enable-bmi],
244		[enable BMI CPU extensions (x86)])],
245	[C_FLAGS=$C_FLAGS" -mbmi"],
246	[])
247
248AC_ARG_ENABLE(bmi2,
249	[AS_HELP_STRING(
250		[--enable-bmi2],
251		[enable BMI2 CPU extensions (x86)])],
252	[C_FLAGS=$C_FLAGS" -mbmi2"],
253	[])
254
255AC_ARG_ENABLE(fma,
256	[AS_HELP_STRING(
257		[--enable-fma],
258		[enable use of FMA3 CPU instruction (x86)])],
259	[C_FLAGS=$C_FLAGS" -mfma"],
260	[])
261
262AC_ARG_ENABLE(fma4,
263	[AS_HELP_STRING(
264		[--enable-fma4],
265		[enable use of FMA4 CPU instruction (x86)])],
266	[C_FLAGS=$C_FLAGS" -mfma4"],
267	[])
268
269AC_ARG_ENABLE(abm,
270	[AS_HELP_STRING(
271		[--enable-abm],
272		[enable ABM CPU extensions (x86)])],
273	[C_FLAGS=$C_FLAGS" -mabm"],
274	[])
275
276AC_ARG_ENABLE(tbm,
277	[AS_HELP_STRING(
278		[--enable-tbm],
279		[enable TBM CPU extensions (x86)])],
280	[C_FLAGS=$C_FLAGS" -mtbm"],
281	[])
282
283AC_ARG_ENABLE(rdrand,
284	[AS_HELP_STRING(
285		[--enable-rdrand],
286		[enable use of rdrand CPU instruction to get random numbers (x86)])],
287	[E_FLAGS=$E_FLAGS" -DPROG_HAS_RDRAND"],
288	[])
289
290AC_ARG_ENABLE(rdtsc_seed,
291	[AS_HELP_STRING(
292		[--enable-rdtsc_seed],
293		[enable use of rdtsc CPU instruction for seeding srand[om]() (x86)])],
294	[E_FLAGS=$E_FLAGS" -DPROG_HAS_RDTSC_SEED"],
295	[])
296
297AC_ARG_ENABLE(rdrand_seed,
298	[AS_HELP_STRING(
299		[--enable-rdrand_seed],
300		[enable use of rdrand CPU instruction for seeding srand[om](), overrides --enable-rdtsc_seed (x86)])],
301	[E_FLAGS=$E_FLAGS" -DPROG_HAS_RDRAND -DPROG_HAS_RDRAND_SEED"],
302	[])
303
304AC_ARG_ENABLE(rdseed,
305	[AS_HELP_STRING(
306		[--enable-rdseed],
307		[enable use of rdseed CPU instruction for seeding srand[om](), overrides --enable-rdrand_seed (x86)])],
308	[E_FLAGS=$E_FLAGS" -DPROG_HAS_RDSEED"],
309	[])
310
311dnl AC_ARG_ENABLE(drawpixels,
312dnl	[AS_HELP_STRING(
313dnl		[--enable-drawpixels],
314dnl		[enable use of old glDrawPixels() instead of texture based framebuffer, use of glDrawPixels() may be marginally faster, but some people say its legacy and bad (affects to gui/windowing subsystem)])],
315dnl	[E_FLAGS=$E_FLAGS" -DPROG_HAS_DRAWPIXELS"],
316dnl	[])
317
318AC_ARG_ENABLE(sslv23,
319	[AS_HELP_STRING(
320		[--enable-sslv23],
321		[enable support for weak SSLv2/3 and TLS, otherwise support only TLS (affects to remote control subsystem)])],
322	[E_FLAGS=$E_FLAGS" -DPROG_HAS_SSL"],
323	[])
324
325AC_ARG_ENABLE(safemem,
326	[AS_HELP_STRING(
327		[--enable-safemem],
328		[enable substituting some memory comparing and clearing functions with safer ones if they are available])],
329	[E_FLAGS=$E_FLAGS" -DPROG_HAS_SAFEMEM"],
330	[])
331
332AC_ARG_WITH(libdlmalloc,
333	[AS_HELP_STRING(
334		[--with-libdlmalloc=DIR],
335		[enable support for dlmalloc library, installed in DIR])],
336	[C_FLAGS=$C_FLAGS" -I$withval/include" LD_FLAGS=$LD_FLAGS" -L$withval/lib" L_LIBS=$L_LIBS" -ldlmalloc"],
337	[])
338
339AC_ARG_WITH(libiconv,
340	[AS_HELP_STRING(
341		[--with-libiconv=DIR],
342		[enable support for iconv library, installed in DIR])],
343	[C_FLAGS=$C_FLAGS" -I$withval/include" LD_FLAGS=$LD_FLAGS" -L$withval/lib" L_LIBS=$L_LIBS" -liconv"],
344	[])
345
346AC_ARG_WITH(libintl,
347	[AS_HELP_STRING(
348		[--with-libintl=DIR],
349		[enable support for intl library, installed in DIR])],
350	[C_FLAGS=$C_FLAGS" -I$withval/include" LD_FLAGS=$LD_FLAGS" -L$withval/lib" L_LIBS=$L_LIBS" -lintl" E_FLAGS=$E_FLAGS" -DHAVE_GETTEXT"],
351	[])
352
353AC_ARG_WITH(libltdl,
354	[AS_HELP_STRING(
355		[--with-libltdl=DIR],
356		[enable support for libtool for runtime symbol loading (otherwise use dl-family of functions), installed in DIR])],
357	[C_FLAGS=$C_FLAGS" -I$withval/include" LD_FLAGS=$LD_FLAGS" -L$withval/lib" L_LIBS=$L_LIBS" -lltdl" E_FLAGS=$E_FLAGS" -DHAVE_LIBTOOL"],
358	[])
359
360AC_ARG_WITH(linker,
361	[AS_HELP_STRING(
362		[--with-linker=LINKER],
363		[enable use of this linker instead of default one])],
364	[C_FLAGS=$C_FLAGS" -fuse-ld=$withval"],
365	[])
366
367dnl
368dnl Build with selective things.
369dnl
370
371AC_ARG_WITH(color-db-tiny,
372	[AS_HELP_STRING(
373		[--with-color-db-tiny],
374		[use tiny (vga) color database, otherwise use standard (x11) color database])],
375	[E_FLAGS=$E_FLAGS" -DCOLOR_DB_VGA"],
376	[])
377
378AC_ARG_WITH(color-db-small,
379	[AS_HELP_STRING(
380		[--with-color-db-small],
381		[use small (w3c) color database, otherwise use standard (x11) color database])],
382	[E_FLAGS=$E_FLAGS" -DCOLOR_DB_W3C"],
383	[])
384
385AC_ARG_WITH(color-db-large,
386	[AS_HELP_STRING(
387		[--with-color-db-large],
388		[use large (complete) color database, otherwise use standard (x11) color database])],
389	[E_FLAGS=$E_FLAGS" -DCOLOR_DB_COMPLETE"],
390	[])
391
392dnl
393dnl Build extra libraries.
394dnl
395
396AC_ARG_WITH(redtools,
397	[AS_HELP_STRING(
398		[--with-redtools],
399		[enable building and support for Redtools requester library])],
400	[test "with_redtools" = "yes"],
401	[])
402
403if test "${with_redtools+set}" = set; then
404	BUILD_REDTOOLS="engine/redtools"
405fi
406
407AC_ARG_WITH(motif,
408	[AS_HELP_STRING(
409		[--with-motif=DIR],
410		[use Motif installed in DIR for Redtools requester library])],
411	[C_FLAGS=$C_FLAGS" -I$withval/include" LD_FLAGS=$LD_FLAGS" -L$withval/lib" F_LIBS=$F_LIBS" -lXm" F_FLAGS=$F_FLAGS],
412	[C_FLAGS=$C_FLAGS LD_FLAGS=$LD_FLAGS F_LIBS=$F_LIBS" -lXm" F_FLAGS=$F_FLAGS])
413
414AC_ARG_WITH(redtools-xft,
415	[AS_HELP_STRING(
416		[--with-redtools-xft],
417		[use Xft fonts by default, comes with antialias and unicode support])],
418	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_XFT"],
419	[])
420
421AC_ARG_WITH(redtools-xft-serif,
422	[AS_HELP_STRING(
423		[--with-redtools-xft-serif],
424		[use Serif typeface by default with Xft, otherwise use Sans])],
425	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_FACE_SERIF"],
426	[])
427
428AC_ARG_WITH(redtools-xft-typeface,
429	[AS_HELP_STRING(
430		[--with-redtools-xft-typeface=TYPEFACE],
431		[use TYPEFACE name by default with Xft, overrides other typeface settings])],
432	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_FACE_CUSTOM=\\\"$withval\\\""],
433	[])
434
435AC_ARG_WITH(redtools-xft-small,
436	[AS_HELP_STRING(
437		[--with-redtools-xft-small],
438		[use small fonts (fontsize 8, good for VGA displays) by default with Xft, otherwise use medium])],
439	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_SIZE_SMALL"],
440	[])
441
442AC_ARG_WITH(redtools-xft-large,
443	[AS_HELP_STRING(
444		[--with-redtools-xft-large],
445		[use large fonts (fontsize 12, good for Full HD displays) by default with Xft, otherwise use medium])],
446	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_SIZE_LARGE"],
447	[])
448
449AC_ARG_WITH(redtools-xft-huge,
450	[AS_HELP_STRING(
451		[--with-redtools-xft-huge],
452		[use huge fonts (fontsize 14, good for 4K UHD displays) by default with Xft, otherwise use medium])],
453	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_SIZE_HUGE"],
454	[])
455
456AC_ARG_WITH(redtools-xft-fontsize,
457	[AS_HELP_STRING(
458		[--with-redtools-xft-fontsize=FONTSIZE],
459		[use FONTSIZE number by default with Xft, overrides other fontsize settings])],
460	[F_FLAGS=$F_FLAGS" -DREDTOOLS_FONT_SIZE_CUSTOM=\\\"$withval\\\""],
461	[])
462
463AC_SUBST(BUILD_REDTOOLS, [$BUILD_REDTOOLS])
464
465AC_ARG_WITH(usb_classic_nes_gamepad,
466	[AS_HELP_STRING(
467		[--with-usb_classic_nes_gamepad],
468		[enable building of USB classic NES gamepad input driver])],
469	[test "with_usb_classic_nes_gamepad" = "yes"],
470	[])
471
472if test "${with_usb_classic_nes_gamepad+set}" = set; then
473	BUILD_USB_CLASSIC_NES_GAMEPAD="engine/input/usb_classic_nes_gamepad"
474fi
475
476AC_SUBST(BUILD_USB_CLASSIC_NES_GAMEPAD, [$BUILD_USB_CLASSIC_NES_GAMEPAD])
477
478dnl
479dnl Disable some parts of the engine.
480dnl
481
482AC_ARG_ENABLE(extended,
483	[AS_HELP_STRING(
484		[--disable-extended],
485		[disable extended script commands])],
486	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_EXTENDED"],
487	[])
488
489AC_ARG_ENABLE(color,
490	[AS_HELP_STRING(
491		[--disable-color],
492		[disable color functions])],
493	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_COLOR"],
494	[])
495
496AC_ARG_ENABLE(coords,
497	[AS_HELP_STRING(
498		[--disable-coords],
499		[disable coordinate functions])],
500	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_COORDS"],
501	[])
502
503AC_ARG_ENABLE(image,
504	[AS_HELP_STRING(
505		[--disable-image],
506		[disable image functions])],
507	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_IMAGE"],
508	[])
509
510AC_ARG_ENABLE(math,
511	[AS_HELP_STRING(
512		[--disable-math],
513		[disable math functions])],
514	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_MATH"],
515	[])
516
517AC_ARG_ENABLE(bob,
518	[AS_HELP_STRING(
519		[--disable-bob],
520		[disable bob subsystem])],
521	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_BOB"],
522	[])
523
524AC_ARG_ENABLE(input,
525	[AS_HELP_STRING(
526		[--disable-input],
527		[disable external input driver subsystem])],
528	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_INPUT"],
529	[])
530
531AC_ARG_ENABLE(draw,
532	[AS_HELP_STRING(
533		[--disable-draw],
534		[disable drawing operations subsystem])],
535	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_DRAW"],
536	[])
537
538AC_ARG_ENABLE(menu,
539	[AS_HELP_STRING(
540		[--disable-menu],
541		[disable window menu subsystem])],
542	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_MENU"],
543	[])
544
545AC_ARG_ENABLE(widget,
546	[AS_HELP_STRING(
547		[--disable-widget],
548		[disable widget subsystem])],
549	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_WIDGET"],
550	[])
551
552AC_ARG_ENABLE(gui,
553	[AS_HELP_STRING(
554		[--disable-gui],
555		[disable gui/windowing subsystem completely (also disables bob, menu and widget subsystems)])],
556	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_GUI"],
557	[])
558
559AC_ARG_ENABLE(audio,
560	[AS_HELP_STRING(
561		[--disable-audio],
562		[disable audio subsystem completely])],
563	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_AUDIO"],
564	[])
565
566AC_ARG_ENABLE(remote,
567	[AS_HELP_STRING(
568		[--disable-remote],
569		[disable remote control subsystem completely])],
570	[E_FLAGS=$E_FLAGS" -DPROG_DISABLE_REMOTE"],
571	[])
572
573dnl
574dnl Check for possible missing data types.
575dnl
576
577AC_TYPE_LONG_LONG_INT
578AC_TYPE_UNSIGNED_LONG_LONG_INT
579
580AC_TYPE_INT8_T
581AC_TYPE_INT16_T
582AC_TYPE_INT32_T
583AC_TYPE_INT64_T
584
585AC_TYPE_UINT8_T
586AC_TYPE_UINT16_T
587AC_TYPE_UINT32_T
588AC_TYPE_UINT64_T
589
590AC_TYPE_INTMAX_T
591AC_TYPE_INTPTR_T
592
593AC_TYPE_UINTMAX_T
594AC_TYPE_UINTPTR_T
595
596AC_TYPE_SIZE_T
597AC_TYPE_SSIZE_T
598
599AC_TYPE_MODE_T
600AC_TYPE_OFF_T
601AC_TYPE_PID_T
602
603AC_CHECK_TYPES([socklen_t], [], [], [#include <arpa/inet.h>])
604AC_CHECK_TYPES([suseconds_t], [], [], [#include <sys/types.h>])
605AC_CHECK_TYPES([ucontext_t], [], [], [#include <signal.h>])
606
607dnl
608dnl Check for standard library functions.
609dnl
610
611AC_CHECK_FUNCS([\
612	backtrace backtrace_symbols getenv getenv_r getenv_s getexecname \
613	getpriority getrlimit getrusage numa_getaffinity numa_setaffinity \
614	prctl processor_affinity setenv setpriority setprogname setrlimit \
615	sysconf sysctlbyname])
616AC_CHECK_FUNCS([\
617	arc4random rand random])
618AC_CHECK_FUNCS([\
619	clock_gettime clock_nanosleep localtime_r nanosleep usleep])
620AC_CHECK_FUNCS([\
621	strncpy strnlen])
622
623dnl
624dnl Check for math library functions.
625dnl
626
627AC_CHECK_FUNCS([\
628	isfinite isinf isnormal signbit])
629AC_CHECK_FUNCS([\
630	exp2 fdim floorf fma fmax fmin ilogb lgamma log2 nan nearbyint \
631	nextafter nexttoward powf remainder round roundf scalbn sinf sqrtf \
632	tgamma trunc])
633
634dnl
635dnl Check for platform specific library functions.
636dnl
637
638AC_CHECK_FUNCS([\
639	gnu_get_libc_version gnu_get_libc_release mallinfo mallopt])
640
641dnl
642dnl Check for secure library functions.
643dnl
644
645AC_CHECK_FUNCS([\
646	explicit_bzero explicit_memset consttime_memequal timingsafe_bcmp \
647	timingsafe_memcmp])
648
649dnl
650dnl Check for more or less standard header files.
651dnl
652
653AC_CHECK_HEADERS([\
654	inttypes.h stdint.h dlfcn.h paths.h])
655AC_CHECK_HEADERS([\
656	execinfo.h fenv.h sysexits.h])
657AC_CHECK_HEADERS([\
658	sched.h thread.h])
659AC_CHECK_HEADERS([\
660	curses.h term.h])
661AC_CHECK_HEADERS([\
662	soundcard.h])
663AC_CHECK_HEADERS([\
664	sys/ioctl.h sys/prctl.h sys/resource.h sys/rnd.h sys/soundcard.h \
665	sys/sysctl.h sys/time.h])
666AC_CHECK_HEADERS([\
667	sys/mman.h sys/numa.h sys/processor.h sys/procset.h])
668AC_CHECK_HEADERS([\
669	bsd/stdlib.h])
670AC_CHECK_HEADERS([\
671	malloc.h gnu/libc-version.h])
672AC_CHECK_HEADERS([\
673	linux/random.h linux/soundcard.h])
674AC_CHECK_HEADERS([\
675	xmmintrin.h])
676
677AC_CHECK_HEADERS([pthread_np.h], [], [], [#include <pthread.h>])
678
679dnl
680dnl Check for compiler things.
681dnl
682
683AC_C_CONST
684AC_C_INLINE
685AC_C_VOLATILE
686AC_C_BIGENDIAN(
687	[C_FLAGS=$C_FLAGS" -DIS_BIGENDIAN"],
688	[C_FLAGS=$C_FLAGS" -DIS_LITTLEENDIAN"],
689	[])
690
691AX_C___ATTRIBUTE__
692
693dnl
694dnl Check for possible missing library functions.
695dnl
696
697AC_SEARCH_LIBS(dlopen, dl, [],
698	[AC_MSG_NOTICE([run-time linker interface is required, engine will not work as expected.])], [])
699AC_SEARCH_LIBS(pthread_create, pthread pthreads, [],
700	[AC_MSG_NOTICE([pthread(s) library is required, engine will not work as expected.])], [])
701
702AC_SEARCH_LIBS(pthread_setaffinity_np, pthread pthreads, [E_FLAGS=$E_FLAGS" -DHAVE_PTHREAD_SETAFFINITY_NP"], [], [])
703AC_SEARCH_LIBS(pthread_setname_np, pthread pthreads, [E_FLAGS=$E_FLAGS" -DHAVE_PTHREAD_SETNAME_NP"], [], [])
704AC_SEARCH_LIBS(pthread_set_name_np, pthread pthreads, [E_FLAGS=$E_FLAGS" -DHAVE_PTHREAD_SET_NAME_NP"], [], [])
705AC_SEARCH_LIBS(_getfp, pthread pthreads, [], [], [])
706AC_SEARCH_LIBS(backtrace, execinfo, [E_FLAGS=$E_FLAGS" -DHAVE_BACKTRACE -DHAVE_BACKTRACE_SYMBOLS"], [], [])
707AC_SEARCH_LIBS(clock_gettime, rt, [E_FLAGS=$E_FLAGS" -DHAVE_CLOCK_GETTIME"], [], [])
708AC_SEARCH_LIBS(clock_nanosleep, rt, [E_FLAGS=$E_FLAGS" -DHAVE_CLOCK_NANOSLEEP"], [], [])
709AC_SEARCH_LIBS(gettext, intl, [E_FLAGS=$E_FLAGS" -DHAVE_GETTEXT"], [], [])
710AC_SEARCH_LIBS(setupterm, tinfo ncurses, [E_FLAGS=$E_FLAGS" -DHAVE_SETUPTERM"], [], [])
711
712AC_SEARCH_LIBS(sqrt, m, [], [], [])
713AC_SEARCH_LIBS(isfinite, m, [E_FLAGS=$E_FLAGS" -DHAVE_ISFINITE"], [], [])
714AC_SEARCH_LIBS(isinf, m, [E_FLAGS=$E_FLAGS" -DHAVE_ISINF"], [], [])
715AC_SEARCH_LIBS(isnormal, m, [E_FLAGS=$E_FLAGS" -DHAVE_ISNORMAL"], [], [])
716AC_SEARCH_LIBS(signbit, m, [E_FLAGS=$E_FLAGS" -DHAVE_SIGNBIT"], [], [])
717AC_SEARCH_LIBS(exp2, m, [E_FLAGS=$E_FLAGS" -DHAVE_EXP2"], [], [])
718AC_SEARCH_LIBS(fdim, m, [E_FLAGS=$E_FLAGS" -DHAVE_FDIM"], [], [])
719AC_SEARCH_LIBS(floorf, m, [E_FLAGS=$E_FLAGS" -DHAVE_FLOORF"], [], [])
720AC_SEARCH_LIBS(fma, m, [E_FLAGS=$E_FLAGS" -DHAVE_FMA"], [], [])
721AC_SEARCH_LIBS(fmax, m, [E_FLAGS=$E_FLAGS" -DHAVE_FMAX"], [], [])
722AC_SEARCH_LIBS(fmin, m, [E_FLAGS=$E_FLAGS" -DHAVE_FMIN"], [], [])
723AC_SEARCH_LIBS(ilogb, m, [E_FLAGS=$E_FLAGS" -DHAVE_ILOGB"], [], [])
724AC_SEARCH_LIBS(lgamma, m, [E_FLAGS=$E_FLAGS" -DHAVE_LGAMMA"], [], [])
725AC_SEARCH_LIBS(log2, m, [E_FLAGS=$E_FLAGS" -DHAVE_LOG2"], [], [])
726AC_SEARCH_LIBS(nan, m, [E_FLAGS=$E_FLAGS" -DHAVE_NAN"], [], [])
727AC_SEARCH_LIBS(nearbyint, m, [E_FLAGS=$E_FLAGS" -DHAVE_NEARBYINT"], [], [])
728AC_SEARCH_LIBS(nextafter, m, [E_FLAGS=$E_FLAGS" -DHAVE_NEXTAFTER"], [], [])
729AC_SEARCH_LIBS(nexttoward, m, [E_FLAGS=$E_FLAGS" -DHAVE_NEXTTOWARD"], [], [])
730AC_SEARCH_LIBS(powf, m, [E_FLAGS=$E_FLAGS" -DHAVE_POWF"], [], [])
731AC_SEARCH_LIBS(remainder, m, [E_FLAGS=$E_FLAGS" -DHAVE_REMAINDER"], [], [])
732AC_SEARCH_LIBS(round, m, [E_FLAGS=$E_FLAGS" -DHAVE_ROUND"], [], [])
733AC_SEARCH_LIBS(roundf, m, [E_FLAGS=$E_FLAGS" -DHAVE_ROUNDF"], [], [])
734AC_SEARCH_LIBS(scalbn, m, [E_FLAGS=$E_FLAGS" -DHAVE_SCALBN"], [], [])
735AC_SEARCH_LIBS(sinf, m, [E_FLAGS=$E_FLAGS" -DHAVE_SINF"], [], [])
736AC_SEARCH_LIBS(sqrtf, m, [E_FLAGS=$E_FLAGS" -DHAVE_SQRTF"], [], [])
737AC_SEARCH_LIBS(tgamma, m, [E_FLAGS=$E_FLAGS" -DHAVE_TGAMMA"], [], [])
738AC_SEARCH_LIBS(trunc, m, [E_FLAGS=$E_FLAGS" -DHAVE_TRUNC"], [], [])
739
740AC_SEARCH_LIBS(gzclearerr, z, [E_FLAGS=$E_FLAGS" -DPROG_HAS_ZLIB"],
741	[AC_MSG_NOTICE([zlib seems to be missing, loading of supplied files will most likely not going to work.])], [])
742
743AC_SEARCH_LIBS(arc4random, bsd, [E_FLAGS=$E_FLAGS" -DPROG_HAS_LIBBSD"], [], [])
744
745AC_SEARCH_LIBS(getnetname, nsl, [], [], [])
746AC_SEARCH_LIBS(inet_ntop, nsl, [E_FLAGS=$E_FLAGS" -DHAVE_INET_NTOP"], [], [])
747AC_SEARCH_LIBS(socket, socket nsl, [], [], [])
748
749AC_SEARCH_LIBS(_oss_ioctl, ossaudio, [], [], [])
750AC_SEARCH_LIBS(sio_open, sndio, [E_FLAGS=$E_FLAGS" -DPROG_HAS_SNDIO"], [], [])
751
752AC_SEARCH_LIBS(__stack_chk_fail, ssp, [], [], [])
753AC_SEARCH_LIBS(__fixdfti, gcc, [], [], [])
754
755dnl
756dnl Check for package dependencies.
757dnl
758
759PKG_PROG_PKG_CONFIG([])
760
761PKG_CHECK_EXISTS([freetype2 gl xext x11], [E_FLAGS=$E_FLAGS" -DPROG_HAS_X11"], [])
762PKG_CHECK_MODULES([FREETYPE2], [freetype2], [], [AC_MSG_NOTICE([No support for FREETYPE2/windowing system])])
763PKG_CHECK_MODULES([GL], [gl], [], [AC_MSG_NOTICE([No support for GL/windowing system])])
764PKG_CHECK_MODULES([XEXT], [xext], [], [AC_MSG_NOTICE([No support for XEXT/windowing system])])
765PKG_CHECK_MODULES([X11], [x11], [], [AC_MSG_NOTICE([No support for X11/windowing system])])
766
767PKG_CHECK_EXISTS([xrandr], [E_FLAGS=$E_FLAGS" -DPROG_HAS_XRANDR"], [])
768PKG_CHECK_MODULES([XRANDR], [xrandr], [], [AC_MSG_NOTICE([No support for XRandR extension])])
769
770PKG_CHECK_EXISTS([alsa], [E_FLAGS=$E_FLAGS" -DPROG_HAS_ALSA"], [])
771PKG_CHECK_EXISTS([ao], [E_FLAGS=$E_FLAGS" -DPROG_HAS_AO"], [])
772PKG_CHECK_EXISTS([portaudio-2.0], [E_FLAGS=$E_FLAGS" -DPROG_HAS_PORTAUDIO"], [])
773PKG_CHECK_EXISTS([libpulse-simple], [E_FLAGS=$E_FLAGS" -DPROG_HAS_PULSEAUDIO"], [])
774PKG_CHECK_MODULES([ALSA], [alsa], [], [AC_MSG_NOTICE([No support for ALSA])])
775PKG_CHECK_MODULES([AO], [ao], [], [AC_MSG_NOTICE([No support for AO])])
776PKG_CHECK_MODULES([PORTAUDIO], [portaudio-2.0], [], [AC_MSG_NOTICE([No support for PORTAUDIO])])
777PKG_CHECK_MODULES([PULSEAUDIO], [libpulse-simple], [], [AC_MSG_NOTICE([No support for PULSEAUDIO])])
778
779PKG_CHECK_EXISTS([flac], [E_FLAGS=$E_FLAGS" -DPROG_HAS_FLAC"], [])
780PKG_CHECK_EXISTS([samplerate], [E_FLAGS=$E_FLAGS" -DPROG_HAS_SAMPLERATE"], [])
781PKG_CHECK_MODULES([FLAC], [flac], [], [AC_MSG_NOTICE([No support for FLAC])])
782PKG_CHECK_MODULES([SAMPLERATE], [samplerate], [], [AC_MSG_NOTICE([No support for SAMPLERATE])])
783
784PKG_CHECK_EXISTS([gnutls], [E_FLAGS=$E_FLAGS" -DPROG_HAS_GNUTLS"], [])
785PKG_CHECK_MODULES([GNUTLS], [gnutls], [], [AC_MSG_NOTICE([No support for GNUTLS])])
786PKG_CHECK_EXISTS([openssl], [E_FLAGS=$E_FLAGS" -DPROG_HAS_OPENSSL"], [])
787PKG_CHECK_MODULES([OPENSSL], [openssl], [], [AC_MSG_NOTICE([No support for OPENSSL])])
788
789PKG_CHECK_EXISTS([librsvg-2.0], [E_FLAGS=$E_FLAGS" -DPROG_HAS_LIBRSVG"], [])
790PKG_CHECK_MODULES([LIBRSVG], [librsvg-2.0], [], [AC_MSG_NOTICE([No support for LIBRSVG])])
791
792E_FLAGS="$C_FLAGS $E_FLAGS"
793F_FLAGS="$C_FLAGS $F_FLAGS"
794
795CFLAGS=$C_FLAGS
796LDFLAGS=$LD_FLAGS
797LIBS=$LIBS" $L_LIBS -lc"
798
799AC_SUBST(PROG_N, [$PROG_N])
800AC_SUBST(PROG_X, [$PROG_X])
801AC_SUBST(PROG_Y, [$PROG_Y])
802AC_SUBST(PROG_V, [$PROG_V])
803
804AC_SUBST(D_FLAGS, [$D_FLAGS])
805AC_SUBST(E_FLAGS, [$E_FLAGS])
806AC_SUBST(F_FLAGS, [$F_FLAGS])
807
808AC_SUBST(F_LIBS, [$F_LIBS])
809
810dnl
811dnl Store configuration parameters for later use.
812dnl
813
814LOCAL_CONFIG_NICE([reconfig/config.nice-${PROG_X}-$(uname -s -r -m 2>/dev/null | tr ' ' '_')])
815
816LOCAL_CONFIG_ARGS([engine/config.args])
817LOCAL_CONFIG_OPTS([engine/config.opts], [$E_FLAGS])
818
819LOCAL_CONFIG_MACH([engine/config.mach])
820LOCAL_CONFIG_USER([engine/config.user])
821LOCAL_CONFIG_VERC([engine/config.verc])
822LOCAL_CONFIG_WHEN([engine/config.when])
823
824LOCAL_CONFIG_VARS([engine/dynvars.h])
825
826dnl
827dnl Generate output files.
828dnl
829
830AC_CONFIG_FILES([Makefile \
831	etc/$PROG_X.conf etc/$PROG_X.res \
832	engine/Makefile engine/defines.h engine/_doxygen.conf \
833	engine/tools/Makefile \
834	engine/redtools/Makefile \
835	engine/input/usb_classic_nes_gamepad/Makefile])
836
837AC_OUTPUT
838
839dnl
840dnl Display summary
841dnl
842
843AC_MSG_NOTICE([
844------------------------------------------------------------------------------
845
846  CONFIGURATION SUMMARY
847
848  install prefix ..................... ${prefix-no}
849
850  enable debug build ................. ${enable_debug-no}
851  enable profiling build ............. ${enable_profiling-no}
852
853  enable weak SSLv23 support ......... ${enable_sslv23-no}
854  enable safemem functions ........... ${enable_safemem-no}
855
856  with libdlmalloc ................... ${with_libdlmalloc-no}
857  with libiconv ...................... ${with_libiconv-no}
858  with libintl ....................... ${with_libintl-no}
859  with libltdl ....................... ${with_libltdl-no}
860    enabling this may not be as good idea as it sounds as libtool is not
861    thread safe which may cause problems
862
863  build libredtools .................. ${with_redtools-no}
864        with Motif ................... ${with_motif-no}
865        Xft fonts .................... ${with_redtools_xft-no}
866        Xft serif typeface ........... ${with_redtools_xft_serif-no}
867        Xft custom typeface .......... ${with_redtools_xft_typeface-no}
868        Xft small fonts .............. ${with_redtools_xft_small-no}
869        Xft large fonts .............. ${with_redtools_xft_large-no}
870        Xft huge fonts ............... ${with_redtools_xft_huge-no}
871        Xft custom fontsize .......... ${with_redtools_xft_fontsize-no}
872
873  build external input drivers
874        USB classic NES gamepad ...... ${with_usb_classic_nes_gamepad-no}
875
876  color database to use with Ano script and for resource options
877        tiny (vga) ................... ${with_color_db_tiny-no}
878	small (w3c) .................. ${with_color_db_small-no}
879	large (complete) ............. ${with_color_db_large-no}
880
881------------------------------------------------------------------------------
882])
883
884dnl
885dnl Suggest disabling unneeded subsystems.
886dnl
887
888./build/subsys 2>/dev/null
889
890AC_MSG_NOTICE([Now type `make' to build the project.])
891