1 dnl Copyright © 2022-2023 Nick Bowler
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.
7 dnl remove pointless gnulib warning flag check
8 AC_DEFUN([gl_CC_GNULIB_WARNINGS])
10 AC_INIT([rrace], [0], [nbowler@draconx.ca])
11 AC_CONFIG_HEADERS([config.h])
13 AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign subdir-objects])
14 AM_SILENT_RULES([yes])
23 m4_include([lib/gnulib.mk])
25 dnl We will provide our own makefile rules for gettext. Disable tracing of
26 dnl AM_GNU_GETTEXT to prevent autoreconf from running autopoint, and to
27 dnl prevent automake from growing gratuitous error conditions.
28 m4_traceoff([AM_GNU_GETTEXT])
29 AM_GNU_GETTEXT([external])
30 AH_BOTTOM([#include <conf_post.h>])
33 AC_ARG_WITH([curses], [AS_HELP_STRING([--with-curses],
34 [build UI for text mode via curses (default: auto)])],
35 [], [with_curses=auto])
36 AS_IF([test x"$with_curses" != x"no"],
37 [DX_LIB_CURSES([have_curses=yes], [have_curses=no])])
38 AS_IF([test x"$with_curses" = x"yes" && test x"$have_curses" != x"yes"],
39 [AC_MSG_FAILURE([--with-curses requested but curses was not found])])
40 AM_CONDITIONAL([HAVE_CURSES], [test x"$have_curses" = x"yes"])
42 AM_COND_IF([HAVE_CURSES],
43 [DX_CHECK_CURSES_FUNC([wresize], [0,0,0])
44 DX_CHECK_CURSES_MOUSE_SUPPORT])
47 m4_copy([AC_ARG_WITH], [save_AC_ARG_WITH])
48 m4_pushdef([AC_ARG_WITH], [m4_case([$1], [x],
49 [m4_popdef([$0])$0([x], AS_HELP_STRING([--with-x],
50 [build UI for the X Window System (default: auto)]), m4_shift2($@))],
51 [m4_pushdef([$0], m4_defn([save_$0]))$0($@)m4_popdef([$0])])])
53 AS_IF([test x"$no_x" != x"yes"],
54 [AC_CACHE_CHECK([for Motif], [dx_cv_have_motif],
55 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
56 dx_cv_motif_cflags="$X_CFLAGS"
57 dx_cv_motif_libs="$X_LIBS $X_PRE_LIBS -lXm -lXt -lX11 $X_EXTRA_LIBS"
58 CFLAGS="$dx_cv_motif_cflags $CFLAGS"
59 LIBS="$dx_cv_motif_libs $LIBS"
60 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <Xm/XmAll.h>],
61 [XmCreateMainWindow(0, 0, 0, 0); XtAppSetExitFlag(0)])],
62 [dx_cv_have_motif=yes], [dx_cv_have_motif=no])
63 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])])
65 AS_IF([test x"$with_x" = x"yes" && test x"$dx_cv_have_motif" != x"yes"],
66 [AC_MSG_FAILURE([--with-x requested but Motif was not found])])
68 AC_SUBST([MOTIF_CFLAGS], [@&t@])
69 AC_SUBST([MOTIF_LIBS], [@&t@])
70 AM_CONDITIONAL([HAVE_MOTIF],
71 [test x"$with_x" != x"no" && test x"$dx_cv_have_motif" = x"yes"])
72 AM_COND_IF([HAVE_MOTIF],
73 [MOTIF_CFLAGS=$dx_cv_motif_cflags MOTIF_LIBS=$dx_cv_motif_libs],
74 [AC_DEFINE([X_DISPLAY_MISSING])])
75 AH_TEMPLATE([X11_RENDER_DEBUG],
76 [Define to 1 to enable visual aids for debugging X11 rendering.])
78 # Check for XmPIXMAP_AND_STRING.
80 # Just checking for the existence of this identifier is sufficient, to ensure
81 # that the C compiler accepts the name. If it turns out to not actually be
82 # supported by the library used at runtime, Motif itself will catch this
83 # and set to the default (i.e., XmSTRING).
84 AM_COND_IF([HAVE_MOTIF],
85 [AC_CACHE_CHECK([whether Motif supports XmPIXMAP_AND_STRING],
86 [dx_cv_motif_have_pixmap_and_string],
87 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
88 CFLAGS="$MOTIF_CFLAGS $CFLAGS" LIBS="$MOTIF_LIBS $LIBS"
89 AC_COMPUTE_INT([dx_tmp],
90 [XmPIXMAP != XmPIXMAP_AND_STRING && XmSTRING != XmPIXMAP_AND_STRING],
91 [#include <Xm/Label.h>], [dx_tmp=0])
92 AS_IF([test x"$dx_tmp" = x"1"],
93 [dx_cv_motif_have_pixmap_and_string=yes],
94 [dx_cv_motif_have_pixmap_and_string=no])
95 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])
96 AS_IF([test x"$dx_cv_motif_have_pixmap_and_string" = x"yes"],
97 [AC_DEFINE([HAVE_MOTIF_PIXMAP_AND_STRING], [1],
98 [Define to 1 if Motif supports XmPIXMAP_AND_STRING])])
101 dnl On ELF systems, linking a program against a string table in shared
102 dnl library is very expensive and actually makes things much worse than
103 dnl just duplicating the needed strings in the program.
105 dnl It may help a little bit when static linking or on other shared
106 dnl library implementations, which could maybe be auto-detected with
107 dnl a configure test, but the penalty for setting these anyway is
108 dnl very small (couple hundred bytes of rodata).
109 m4_foreach_w([lib], [Xt Xm],
110 [AC_DEFINE(m4_toupper(m4_defn([lib]))[STRINGDEFINES], [1],
111 [Define to 1 to avoid using the string tables from lib]m4_defn([lib])[.
112 On some platforms, or when statically linking lib]m4_defn([lib])[,
113 leaving this undefined may reduce the executable size somewhat.])])
115 AC_CONFIG_TESTDIR([.], [t:.])
117 AM_CONDITIONAL([HAVE_AUTOTEST], [test x"$dx_cv_autotest_works" = x"yes"])
119 AC_CHECK_PROGS([XPMTOPPM], [xpmtoppm])
120 AC_CHECK_PROGS([PNMTOPNG], [pnmtopng])
121 AC_CHECK_PROGS([CONVERT], [convert])
122 AC_CHECK_PROGS([GM], [gm])
123 AC_CACHE_CHECK([how to convert XPM to PNG], [dx_cv_xpm_to_png],
124 [cat >conftest.xpm <<'EOF'
132 check_conftest_png () {
133 od conftest.png | $AWK 'BEGIN { success=0; }
134 NR == 1 && $2 == "050211" && $3 == "043516" { success=1; }
135 NR == 1 && $2 == "104520" && $3 == "047107" { success=1; }
136 END { exit(!success); }'
139 for dx_cv_xpm_to_png in netpbm 'gm convert' convert unknown; do
140 AS_CASE([$dx_cv_xpm_to_png],
143 [AS_IF([$XPMTOPPM conftest.xpm >conftest.ppm 2>&AS_MESSAGE_LOG_FD],
145 AS_IF([$PNMTOPNG conftest.ppm >conftest.png 2>&AS_MESSAGE_LOG_FD],
147 AS_IF([check_conftest_png], [break])],
150 [AS_CASE([$dx_cv_xpm_to_png],
151 [gm*], [test_convert="$GM convert"],
152 [test_convert="$CONVERT"])
153 AS_IF([$test_convert conftest.xpm conftest.png >&AS_MESSAGE_LOG_FD 2>&1],
155 AS_IF([check_conftest_png], [break])])
157 rm -f conftest.xpm conftest.ppm conftest.png])
159 AM_CONDITIONAL([USE_NETPBM], [test x"$dx_cv_xpm_to_png" = x"netpbm"])
160 AM_CONDITIONAL([USE_CONVERT],
161 [AS_CASE([$dx_cv_xpm_to_png], [*convert], [], [false])])
163 AS_IF([test x"$dx_cv_xpm_to_png" = x"gm convert"],
164 [CONVERT="$GM convert"])
166 AC_CHECK_PROGS([OPTIPNG], [optipng])
169 AC_CONFIG_FILES([Makefile])
173 AM_COND_IF([HAVE_CURSES], [have_ui=:])
174 AM_COND_IF([HAVE_MOTIF], [have_ui=:])
175 AS_IF([$have_ui], [],
176 [AC_MSG_WARN([No user interface is enabled.])
177 AC_MSG_WARN([It will not be possible to play the game.])])