From ee68c7cd53763caeb44de97f1036ebaf014a7292 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 15 Nov 2022 22:25:18 -0500 Subject: [PATCH] Fix build on older Motif without XmPIXMAP_AND_STRING. It seems that not all versions of Motif support labels with a labelType of XmPIXMAP_AND_STRING. This mode is used in the about dialog to display the program's icon, but it's silly to fail compilation over this. Add a configure test to check if this feature is available, and fall back to XmSTRING (which will render without the icon). --- configure.ac | 23 +++++++++++++++++++++++ src/motif_ui.c | 5 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 96dc8f2..9b39749 100644 --- a/configure.ac +++ b/configure.ac @@ -70,6 +70,29 @@ AM_COND_IF([HAVE_MOTIF], 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 ], [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])]) +]) + AC_CONFIG_TESTDIR([.], [t:.]) DX_PROG_AUTOTEST AM_CONDITIONAL([HAVE_AUTOTEST], [test x"$dx_cv_autotest_works" = x"yes"]) diff --git a/src/motif_ui.c b/src/motif_ui.c index 7eafc64..127de06 100644 --- a/src/motif_ui.c +++ b/src/motif_ui.c @@ -408,7 +408,10 @@ void ui_show_about(struct app_state *state, Widget shell) msg = version_format_head("rrace-motif"); l = XmMessageBoxGetChild(w, XmDIALOG_MESSAGE_LABEL); - XtVaSetValues(l, XmNlabelType, XmPIXMAP_AND_STRING, + XtVaSetValues(l, XmNlabelType, XmSTRING, +#if HAVE_MOTIF_PIXMAP_AND_STRING + XmNlabelType, XmPIXMAP_AND_STRING, +#endif XmNlabelPixmap, state->icon_pixmap, STRING_ARG(XmNlabelString, msg), (char *)NULL); -- 2.43.2