]> git.draconx.ca Git - rrace.git/blobdiff - configure.ac
Replace Gnulib striconv with copyright_symbol from dxcommon.
[rrace.git] / configure.ac
index 2378c8e8770c94f1330604530b1ab25ceb1794e5..11b12933c7a3584b5c27419ed32c4c0d6f5b58f7 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2022 Nick Bowler
+dnl Copyright © 2022-2023 Nick Bowler
 dnl
 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
 dnl This is free software: you are free to do what the fuck you want to.
@@ -19,9 +19,38 @@ gl_EARLY
 LT_INIT
 gl_INIT
 
+AC_C_FLEXIBLE_ARRAY_MEMBER
+
 AC_CACHE_SAVE
 m4_include([lib/gnulib.mk])
 
+dnl We will provide our own makefile rules for gettext.  Disable tracing of
+dnl AM_GNU_GETTEXT to prevent autoreconf from running autopoint, and to
+dnl prevent automake from growing gratuitous error conditions.
+m4_traceoff([AM_GNU_GETTEXT])
+AM_GNU_GETTEXT([external])
+AH_BOTTOM([#include <conf_post.h>])
+
+# Checks for curses
+AC_ARG_WITH([curses], [AS_HELP_STRING([--with-curses],
+  [build UI for text mode via curses (default: auto)])],
+  [], [with_curses=auto])
+AS_IF([test x"$with_curses" != x"no"],
+  [DX_LIB_CURSES([have_curses=yes], [have_curses=no])])
+AS_IF([test x"$with_curses" = x"yes" && test x"$have_curses" != x"yes"],
+  [AC_MSG_FAILURE([--with-curses requested but curses was not found])])
+AM_CONDITIONAL([HAVE_CURSES], [test x"$have_curses" = x"yes"])
+
+AM_COND_IF([HAVE_CURSES],
+[DX_CHECK_CURSES_FUNC([wresize], [0,0,0])
+DX_CHECK_CURSES_MOUSE_SUPPORT])
+
+# Checks for X11
+m4_copy([AC_ARG_WITH], [save_AC_ARG_WITH])
+m4_pushdef([AC_ARG_WITH], [m4_case([$1], [x],
+  [m4_popdef([$0])$0([x], AS_HELP_STRING([--with-x],
+    [build UI for the X Window System (default: auto)]), m4_shift2($@))],
+  [m4_pushdef([$0], m4_defn([save_$0]))$0($@)m4_popdef([$0])])])
 AC_PATH_XTRA
 AS_IF([test x"$no_x" != x"yes"],
 [AC_CACHE_CHECK([for Motif], [dx_cv_have_motif],
@@ -35,18 +64,56 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <Xm/XmAll.h>],
   [dx_cv_have_motif=yes], [dx_cv_have_motif=no])
 CFLAGS=$save_CFLAGS LIBS=$save_LIBS])])
 
-AS_IF([test x"$with_x" = x"yes" && test "$dx_cv_have_motif" != x"yes"],
+AS_IF([test x"$with_x" = x"yes" && test x"$dx_cv_have_motif" != x"yes"],
   [AC_MSG_FAILURE([--with-x requested but Motif was not found])])
 
 AC_SUBST([MOTIF_CFLAGS], [@&t@])
 AC_SUBST([MOTIF_LIBS], [@&t@])
-AS_IF([test x"$dx_cv_have_motif" = x"yes"],
+AM_CONDITIONAL([HAVE_MOTIF],
+  [test x"$with_x" != x"no" && test x"$dx_cv_have_motif" = x"yes"])
+AM_COND_IF([HAVE_MOTIF],
   [MOTIF_CFLAGS=$dx_cv_motif_cflags MOTIF_LIBS=$dx_cv_motif_libs],
   [AC_DEFINE([X_DISPLAY_MISSING])])
-AM_CONDITIONAL([HAVE_MOTIF], [test x"$dx_cv_have_motif" = x"yes"])
 AH_TEMPLATE([X11_RENDER_DEBUG],
   [Define to 1 to enable visual aids for debugging X11 rendering.])
 
+# Check for XmPIXMAP_AND_STRING.
+#
+# Just checking for the existence of this identifier is sufficient, to ensure
+# that the C compiler accepts the name.  If it turns out to not actually be
+# supported by the library used at runtime, Motif itself will catch this
+# and set to the default (i.e., XmSTRING).
+AM_COND_IF([HAVE_MOTIF],
+[AC_CACHE_CHECK([whether Motif supports XmPIXMAP_AND_STRING],
+[dx_cv_motif_have_pixmap_and_string],
+[save_CFLAGS=$CFLAGS save_LIBS=$LIBS
+CFLAGS="$MOTIF_CFLAGS $CFLAGS" LIBS="$MOTIF_LIBS $LIBS"
+AC_COMPUTE_INT([dx_tmp],
+  [XmPIXMAP != XmPIXMAP_AND_STRING && XmSTRING != XmPIXMAP_AND_STRING],
+  [#include <Xm/Label.h>], [dx_tmp=0])
+AS_IF([test x"$dx_tmp" = x"1"],
+  [dx_cv_motif_have_pixmap_and_string=yes],
+  [dx_cv_motif_have_pixmap_and_string=no])
+CFLAGS=$save_CFLAGS LIBS=$save_LIBS])
+AS_IF([test x"$dx_cv_motif_have_pixmap_and_string" = x"yes"],
+  [AC_DEFINE([HAVE_MOTIF_PIXMAP_AND_STRING], [1],
+    [Define to 1 if Motif supports XmPIXMAP_AND_STRING])])
+])
+
+dnl On ELF systems, linking a program against a string table in shared
+dnl library is very expensive and actually makes things much worse than
+dnl just duplicating the needed strings in the program.
+dnl
+dnl It may help a little bit when static linking or on other shared
+dnl library implementations, which could maybe be auto-detected with
+dnl a configure test, but the penalty for setting these anyway is
+dnl very small (couple hundred bytes of rodata).
+m4_foreach_w([lib], [Xt Xm],
+[AC_DEFINE(m4_toupper(m4_defn([lib]))[STRINGDEFINES], [1],
+[Define to 1 to avoid using the string tables from lib]m4_defn([lib])[.
+On some platforms, or when statically linking lib]m4_defn([lib])[,
+leaving this undefined may reduce the executable size somewhat.])])
+
 AC_CONFIG_TESTDIR([.], [t:.])
 DX_PROG_AUTOTEST
 AM_CONDITIONAL([HAVE_AUTOTEST], [test x"$dx_cv_autotest_works" = x"yes"])
@@ -101,5 +168,14 @@ AS_IF([test x"$dx_cv_xpm_to_png" = x"gm convert"],
 AC_CHECK_PROGS([OPTIPNG], [optipng])
 : "${OPTIPNG:=:}"
 
+AM_CONDITIONAL([USE_NLS], [test x"$USE_NLS" = x"yes"])
+
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
+
+have_ui=false
+AM_COND_IF([HAVE_CURSES], [have_ui=:])
+AM_COND_IF([HAVE_MOTIF], [have_ui=:])
+AS_IF([$have_ui], [],
+[AC_MSG_WARN([No user interface is enabled.])
+AC_MSG_WARN([It will not be possible to play the game.])])