1 dnl Copyright © 2022-2024 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.
9 AC_INIT([rrace], [0], [nbowler@draconx.ca])
10 AC_CONFIG_HEADERS([config.h])
12 AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign subdir-objects])
13 AM_SILENT_RULES([yes])
20 AC_C_FLEXIBLE_ARRAY_MEMBER
27 m4_include([lib/gnulib.mk])
28 AH_BOTTOM([#include <conf_post.h>])
31 AC_ARG_WITH([curses], [AS_HELP_STRING([--with-curses],
32 [build UI for text mode via curses (default: auto)])],
33 [], [with_curses=auto])
34 AS_IF([test x"$with_curses" != x"no"],
35 [DX_LIB_CURSES([have_curses=yes], [have_curses=no])])
36 AS_IF([test x"$with_curses" = x"yes" && test x"$have_curses" != x"yes"],
37 [AC_MSG_FAILURE([--with-curses requested but curses was not found])])
38 AM_CONDITIONAL([HAVE_CURSES], [test x"$have_curses" = x"yes"])
40 AM_COND_IF([HAVE_CURSES],
41 [DX_CHECK_CURSES_FUNC([wresize], [0,0,0])
42 DX_CHECK_CURSES_MOUSE_SUPPORT])
45 m4_copy([AC_ARG_WITH], [save_AC_ARG_WITH])
46 m4_pushdef([AC_ARG_WITH], [m4_case([$1], [x],
47 [m4_popdef([$0])$0([x], AS_HELP_STRING([--with-x],
48 [build UI for the X Window System (default: auto)]), m4_shift2($@))],
49 [m4_pushdef([$0], m4_defn([save_$0]))$0($@)m4_popdef([$0])])])
51 AS_IF([test x"$no_x" != x"yes"],
52 [AC_CACHE_CHECK([for Motif], [dx_cv_have_motif],
53 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
54 dx_cv_motif_cflags="$X_CFLAGS"
55 dx_cv_motif_libs="$X_LIBS $X_PRE_LIBS -lXm -lXt -lX11 $X_EXTRA_LIBS"
56 CFLAGS="$dx_cv_motif_cflags $CFLAGS"
57 LIBS="$dx_cv_motif_libs $LIBS"
58 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <Xm/XmAll.h>],
59 [XmCreateMainWindow(0, 0, 0, 0); XtAppSetExitFlag(0)])],
60 [dx_cv_have_motif=yes], [dx_cv_have_motif=no])
61 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])])
63 AS_IF([test x"$with_x" = x"yes" && test x"$dx_cv_have_motif" != x"yes"],
64 [AC_MSG_FAILURE([--with-x requested but Motif was not found])])
66 AC_SUBST([MOTIF_CFLAGS], [@&t@])
67 AC_SUBST([MOTIF_LIBS], [@&t@])
68 AM_CONDITIONAL([HAVE_MOTIF],
69 [test x"$with_x" != x"no" && test x"$dx_cv_have_motif" = x"yes"])
70 AM_COND_IF([HAVE_MOTIF],
71 [MOTIF_CFLAGS=$dx_cv_motif_cflags MOTIF_LIBS=$dx_cv_motif_libs],
72 [AC_DEFINE([X_DISPLAY_MISSING])])
73 AH_TEMPLATE([X11_RENDER_DEBUG],
74 [Define to 1 to enable visual aids for debugging X11 rendering.])
76 # Check for XmPIXMAP_AND_STRING.
78 # Just checking for the existence of this identifier is sufficient, to ensure
79 # that the C compiler accepts the name. If it turns out to not actually be
80 # supported by the library used at runtime, Motif itself will catch this
81 # and set to the default (i.e., XmSTRING).
82 AM_COND_IF([HAVE_MOTIF],
83 [AC_CACHE_CHECK([whether Motif supports XmPIXMAP_AND_STRING],
84 [dx_cv_motif_have_pixmap_and_string],
85 [save_CFLAGS=$CFLAGS save_LIBS=$LIBS
86 CFLAGS="$MOTIF_CFLAGS $CFLAGS" LIBS="$MOTIF_LIBS $LIBS"
87 AC_COMPUTE_INT([dx_tmp],
88 [XmPIXMAP != XmPIXMAP_AND_STRING && XmSTRING != XmPIXMAP_AND_STRING],
89 [#include <Xm/Label.h>], [dx_tmp=0])
90 AS_IF([test x"$dx_tmp" = x"1"],
91 [dx_cv_motif_have_pixmap_and_string=yes],
92 [dx_cv_motif_have_pixmap_and_string=no])
93 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])
94 AS_IF([test x"$dx_cv_motif_have_pixmap_and_string" = x"yes"],
95 [AC_DEFINE([HAVE_MOTIF_PIXMAP_AND_STRING], [1],
96 [Define to 1 if Motif supports XmPIXMAP_AND_STRING])])
99 dnl On ELF systems, linking a program against a string table in shared
100 dnl library is very expensive and actually makes things much worse than
101 dnl just duplicating the needed strings in the program.
103 dnl It may help a little bit when static linking or on other shared
104 dnl library implementations, which could maybe be auto-detected with
105 dnl a configure test, but the penalty for setting these anyway is
106 dnl very small (couple hundred bytes of rodata).
107 m4_foreach_w([lib], [Xt Xm],
108 [AC_DEFINE(m4_toupper(m4_defn([lib]))[STRINGDEFINES], [1],
109 [Define to 1 to avoid using the string tables from lib]m4_defn([lib])[.
110 On some platforms, or when statically linking lib]m4_defn([lib])[,
111 leaving this undefined may reduce the executable size somewhat.])])
113 AC_CONFIG_TESTDIR([.], [t:.])
116 AC_CHECK_PROGS([XPMTOPPM], [xpmtoppm])
117 AC_CHECK_PROGS([PNMTOPNG], [pnmtopng])
118 AC_CHECK_PROGS([CONVERT], [convert])
119 AC_CHECK_PROGS([GM], [gm])
120 AC_CACHE_CHECK([how to convert XPM to PNG], [dx_cv_xpm_to_png],
121 [cat >conftest.xpm <<'EOF'
129 check_conftest_png () {
130 od conftest.png | $AWK 'BEGIN { success=0; }
131 NR == 1 && $2 == "050211" && $3 == "043516" { success=1; }
132 NR == 1 && $2 == "104520" && $3 == "047107" { success=1; }
133 END { exit(!success); }'
136 for dx_cv_xpm_to_png in netpbm 'gm convert' convert unknown; do
137 AS_CASE([$dx_cv_xpm_to_png],
140 [AS_IF([$XPMTOPPM conftest.xpm >conftest.ppm 2>&AS_MESSAGE_LOG_FD],
142 AS_IF([$PNMTOPNG conftest.ppm >conftest.png 2>&AS_MESSAGE_LOG_FD],
144 AS_IF([check_conftest_png], [break])],
147 [AS_CASE([$dx_cv_xpm_to_png],
148 [gm*], [test_convert="$GM convert"],
149 [test_convert="$CONVERT"])
150 AS_IF([$test_convert conftest.xpm conftest.png >&AS_MESSAGE_LOG_FD 2>&1],
152 AS_IF([check_conftest_png], [break])])
154 rm -f conftest.xpm conftest.ppm conftest.png])
156 AM_CONDITIONAL([USE_NETPBM], [test x"$dx_cv_xpm_to_png" = x"netpbm"])
157 AM_CONDITIONAL([USE_CONVERT],
158 [AS_CASE([$dx_cv_xpm_to_png], [*convert], [], [false])])
160 AS_IF([test x"$dx_cv_xpm_to_png" = x"gm convert"],
161 [CONVERT="$GM convert"])
163 AC_CHECK_PROGS([OPTIPNG], [optipng])
166 AM_CONDITIONAL([USE_NLS], [test x"$USE_NLS" = x"yes"])
168 AC_CONFIG_FILES([Makefile])
172 AM_COND_IF([HAVE_CURSES], [have_ui=:])
173 AM_COND_IF([HAVE_MOTIF], [have_ui=:])
174 AS_IF([$have_ui], [],
175 [AC_MSG_WARN([No user interface is enabled.])
176 AC_MSG_WARN([It will not be possible to play the game.])])