]> git.draconx.ca Git - rrace.git/blob - configure.ac
Bump dxcommon to pull in testsuite fixes.
[rrace.git] / configure.ac
1 dnl Copyright © 2022-2023 Nick Bowler
2 dnl
3 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
4 dnl This is free software: you are free to do what the fuck you want to.
5 dnl There is NO WARRANTY, to the extent permitted by law.
6
7 DX_PATCH_GNULIB
8
9 AC_INIT([rrace], [0], [nbowler@draconx.ca])
10 AC_CONFIG_HEADERS([config.h])
11
12 AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign subdir-objects])
13 AM_SILENT_RULES([yes])
14 DX_AUTOMAKE_COMPAT
15
16 AC_PROG_CC_C99
17 gl_EARLY
18 LT_INIT
19 gl_INIT
20
21 AC_C_FLEXIBLE_ARRAY_MEMBER
22
23 AC_CACHE_SAVE
24 m4_include([lib/gnulib.mk])
25
26 dnl We will provide our own makefile rules for gettext.  Disable tracing of
27 dnl AM_GNU_GETTEXT to prevent autoreconf from running autopoint, and to
28 dnl prevent automake from growing gratuitous error conditions.
29 m4_traceoff([AM_GNU_GETTEXT])
30 AM_GNU_GETTEXT([external])
31 AH_BOTTOM([#include <conf_post.h>])
32
33 # Checks for curses
34 AC_ARG_WITH([curses], [AS_HELP_STRING([--with-curses],
35   [build UI for text mode via curses (default: auto)])],
36   [], [with_curses=auto])
37 AS_IF([test x"$with_curses" != x"no"],
38   [DX_LIB_CURSES([have_curses=yes], [have_curses=no])])
39 AS_IF([test x"$with_curses" = x"yes" && test x"$have_curses" != x"yes"],
40   [AC_MSG_FAILURE([--with-curses requested but curses was not found])])
41 AM_CONDITIONAL([HAVE_CURSES], [test x"$have_curses" = x"yes"])
42
43 AM_COND_IF([HAVE_CURSES],
44 [DX_CHECK_CURSES_FUNC([wresize], [0,0,0])
45 DX_CHECK_CURSES_MOUSE_SUPPORT])
46
47 # Checks for X11
48 m4_copy([AC_ARG_WITH], [save_AC_ARG_WITH])
49 m4_pushdef([AC_ARG_WITH], [m4_case([$1], [x],
50   [m4_popdef([$0])$0([x], AS_HELP_STRING([--with-x],
51     [build UI for the X Window System (default: auto)]), m4_shift2($@))],
52   [m4_pushdef([$0], m4_defn([save_$0]))$0($@)m4_popdef([$0])])])
53 AC_PATH_XTRA
54 AS_IF([test x"$no_x" != x"yes"],
55 [AC_CACHE_CHECK([for Motif], [dx_cv_have_motif],
56 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
57 dx_cv_motif_cflags="$X_CFLAGS"
58 dx_cv_motif_libs="$X_LIBS $X_PRE_LIBS -lXm -lXt -lX11 $X_EXTRA_LIBS"
59 CFLAGS="$dx_cv_motif_cflags $CFLAGS"
60 LIBS="$dx_cv_motif_libs $LIBS"
61 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <Xm/XmAll.h>],
62   [XmCreateMainWindow(0, 0, 0, 0); XtAppSetExitFlag(0)])],
63   [dx_cv_have_motif=yes], [dx_cv_have_motif=no])
64 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])])
65
66 AS_IF([test x"$with_x" = x"yes" && test x"$dx_cv_have_motif" != x"yes"],
67   [AC_MSG_FAILURE([--with-x requested but Motif was not found])])
68
69 AC_SUBST([MOTIF_CFLAGS], [@&t@])
70 AC_SUBST([MOTIF_LIBS], [@&t@])
71 AM_CONDITIONAL([HAVE_MOTIF],
72   [test x"$with_x" != x"no" && test x"$dx_cv_have_motif" = x"yes"])
73 AM_COND_IF([HAVE_MOTIF],
74   [MOTIF_CFLAGS=$dx_cv_motif_cflags MOTIF_LIBS=$dx_cv_motif_libs],
75   [AC_DEFINE([X_DISPLAY_MISSING])])
76 AH_TEMPLATE([X11_RENDER_DEBUG],
77   [Define to 1 to enable visual aids for debugging X11 rendering.])
78
79 # Check for XmPIXMAP_AND_STRING.
80 #
81 # Just checking for the existence of this identifier is sufficient, to ensure
82 # that the C compiler accepts the name.  If it turns out to not actually be
83 # supported by the library used at runtime, Motif itself will catch this
84 # and set to the default (i.e., XmSTRING).
85 AM_COND_IF([HAVE_MOTIF],
86 [AC_CACHE_CHECK([whether Motif supports XmPIXMAP_AND_STRING],
87 [dx_cv_motif_have_pixmap_and_string],
88 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
89 CFLAGS="$MOTIF_CFLAGS $CFLAGS" LIBS="$MOTIF_LIBS $LIBS"
90 AC_COMPUTE_INT([dx_tmp],
91   [XmPIXMAP != XmPIXMAP_AND_STRING && XmSTRING != XmPIXMAP_AND_STRING],
92   [#include <Xm/Label.h>], [dx_tmp=0])
93 AS_IF([test x"$dx_tmp" = x"1"],
94   [dx_cv_motif_have_pixmap_and_string=yes],
95   [dx_cv_motif_have_pixmap_and_string=no])
96 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])
97 AS_IF([test x"$dx_cv_motif_have_pixmap_and_string" = x"yes"],
98   [AC_DEFINE([HAVE_MOTIF_PIXMAP_AND_STRING], [1],
99     [Define to 1 if Motif supports XmPIXMAP_AND_STRING])])
100 ])
101
102 dnl On ELF systems, linking a program against a string table in shared
103 dnl library is very expensive and actually makes things much worse than
104 dnl just duplicating the needed strings in the program.
105 dnl
106 dnl It may help a little bit when static linking or on other shared
107 dnl library implementations, which could maybe be auto-detected with
108 dnl a configure test, but the penalty for setting these anyway is
109 dnl very small (couple hundred bytes of rodata).
110 m4_foreach_w([lib], [Xt Xm],
111 [AC_DEFINE(m4_toupper(m4_defn([lib]))[STRINGDEFINES], [1],
112 [Define to 1 to avoid using the string tables from lib]m4_defn([lib])[.
113 On some platforms, or when statically linking lib]m4_defn([lib])[,
114 leaving this undefined may reduce the executable size somewhat.])])
115
116 AC_CONFIG_TESTDIR([.], [t:.])
117 DX_PROG_AUTOTEST
118 AM_CONDITIONAL([HAVE_AUTOTEST], [test x"$dx_cv_autotest_works" = x"yes"])
119
120 AC_CHECK_PROGS([XPMTOPPM], [xpmtoppm])
121 AC_CHECK_PROGS([PNMTOPNG], [pnmtopng])
122 AC_CHECK_PROGS([CONVERT], [convert])
123 AC_CHECK_PROGS([GM], [gm])
124 AC_CACHE_CHECK([how to convert XPM to PNG], [dx_cv_xpm_to_png],
125 [cat >conftest.xpm <<'EOF'
126 /* XPM */
127 static char *x[] = {
128 "1 1 1 1",
129 "x c #123456",
130 "x"
131 };
132 EOF
133 check_conftest_png () {
134   od conftest.png | $AWK 'BEGIN { success=0; }
135 NR == 1 && $2 == "050211" && $3 == "043516" { success=1; }
136 NR == 1 && $2 == "104520" && $3 == "047107" { success=1; }
137 END { exit(!success); }'
138 }
139 rm -f conftest.png
140 for dx_cv_xpm_to_png in netpbm 'gm convert' convert unknown; do
141 AS_CASE([$dx_cv_xpm_to_png],
142
143 [netpbm],
144 [AS_IF([$XPMTOPPM conftest.xpm >conftest.ppm 2>&AS_MESSAGE_LOG_FD],
145   [], [continue])
146 AS_IF([$PNMTOPNG conftest.ppm >conftest.png 2>&AS_MESSAGE_LOG_FD],
147   [], [continue])
148 AS_IF([check_conftest_png], [break])],
149
150 [*convert],
151 [AS_CASE([$dx_cv_xpm_to_png],
152   [gm*], [test_convert="$GM convert"],
153   [test_convert="$CONVERT"])
154 AS_IF([$test_convert conftest.xpm conftest.png >&AS_MESSAGE_LOG_FD 2>&1],
155   [], [continue])
156 AS_IF([check_conftest_png], [break])])
157 done
158 rm -f conftest.xpm conftest.ppm conftest.png])
159
160 AM_CONDITIONAL([USE_NETPBM], [test x"$dx_cv_xpm_to_png" = x"netpbm"])
161 AM_CONDITIONAL([USE_CONVERT],
162   [AS_CASE([$dx_cv_xpm_to_png], [*convert], [], [false])])
163
164 AS_IF([test x"$dx_cv_xpm_to_png" = x"gm convert"],
165   [CONVERT="$GM convert"])
166
167 AC_CHECK_PROGS([OPTIPNG], [optipng])
168 : "${OPTIPNG:=:}"
169
170 AM_CONDITIONAL([USE_NLS], [test x"$USE_NLS" = x"yes"])
171
172 AC_CONFIG_FILES([Makefile])
173 AC_OUTPUT
174
175 have_ui=false
176 AM_COND_IF([HAVE_CURSES], [have_ui=:])
177 AM_COND_IF([HAVE_MOTIF], [have_ui=:])
178 AS_IF([$have_ui], [],
179 [AC_MSG_WARN([No user interface is enabled.])
180 AC_MSG_WARN([It will not be possible to play the game.])])