dnl $Id: acinclude.m4,v 1.1 2005/12/18 00:11:31 dj Exp $ dnl dnl the FC_* macros were copied from the freeciv program. The use here dnl is to figure out if we need -DNARROWPROTO and the correct setting dnl for FUNCPROTO. Without these set right, it has been observed that dnl the sliders don't work right on some systems. dnl dnl FC_CHECK_X_PROTO_DEFINE(DEFINED-VARIABLE) dnl dnl This macro determines the value of the given defined dnl variable needed by Xfuncproto.h in order to compile correctly. dnl dnl Typical DEFINED-VARIABLEs are: dnl FUNCPROTO dnl NARROWPROTO dnl dnl The following variables are output: dnl fc_x_proto_value -- contains the value to which dnl the DEFINED-VARIABLE is set, dnl or "" if it has no known value. dnl dnl Example use: dnl FC_CHECK_X_PROTO_DEFINE(FUNCPROTO) dnl if test -n "$fc_x_proto_value"; then dnl AC_DEFINE_UNQUOTED(FUNCPROTO, $fc_x_proto_value) dnl fi dnl AC_DEFUN([FC_CHECK_X_PROTO_DEFINE], [AC_REQUIRE([FC_CHECK_X_PROTO_FETCH])dnl AC_MSG_CHECKING(for Xfuncproto control definition $1) # Search for the requested defined variable; return it's value: fc_x_proto_value= for fc_x_define in $fc_x_proto_defines; do fc_x_val=1 eval `echo $fc_x_define | sed -e 's/=/ ; fc_x_val=/' | sed -e 's/^/fc_x_var=/'` if test "x$fc_x_var" = "x$1"; then fc_x_proto_value=$fc_x_val break fi done if test -n "$fc_x_proto_value"; then AC_MSG_RESULT([yes: $fc_x_proto_value]) else AC_MSG_RESULT([no]) fi ]) dnl FC_CHECK_X_PROTO_FETCH dnl dnl This macro fetches the Xfuncproto control definitions. dnl (Intended to be called once from FC_CHECK_X_PROTO_DEFINE.) dnl dnl The following variables are output: dnl fc_x_proto_defines -- contains the list of defines of dnl Xfuncproto control definitions dnl (defines may or may not include dnl the -D prefix, or an =VAL part). dnl dnl Example use: dnl AC_REQUIRE([FC_CHECK_X_PROTO_FETCH]) dnl AC_DEFUN([FC_CHECK_X_PROTO_FETCH], [AC_REQUIRE([AC_PATH_X])dnl AC_MSG_CHECKING(whether Xfuncproto was supplied) dnl May override determined defines with explicit argument: AC_ARG_WITH(x-funcproto, [ --with-x-funcproto=DEFS Xfuncproto control definitions are DEFS (e.g.: --with-x-funcproto='FUNCPROTO=15 NARROWPROTO']dnl ) if test "x$with_x_funcproto" = "x"; then fc_x_proto_defines= rm -fr conftestdir if mkdir conftestdir; then cd conftestdir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat > Imakefile <<'EOF' fcfindpd: @echo 'fc_x_proto_defines=" ${PROTO_DEFINES}"' EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} fcfindpd 2>/dev/null | grep -v make | sed -e 's/ -D/ /g'` AC_MSG_RESULT([no, found: $fc_x_proto_defines]) cd .. rm -fr conftestdir else dnl Oops -- no/bad xmkmf... Time to go a-guessing... AC_MSG_RESULT([no]) cd .. rm -fr conftestdir dnl First, guess something for FUNCPROTO: AC_MSG_CHECKING([for compilable FUNCPROTO definition]) dnl Try in order of preference... for fc_x_value in 15 11 3 1 ""; do FC_CHECK_X_PROTO_FUNCPROTO_COMPILE($fc_x_value) if test "x$fc_x_proto_FUNCPROTO" != "xno"; then break fi done if test "x$fc_x_proto_FUNCPROTO" != "xno"; then fc_x_proto_defines="$fc_x_proto_defines FUNCPROTO=$fc_x_proto_FUNCPROTO" AC_MSG_RESULT([yes, determined: $fc_x_proto_FUNCPROTO]) else AC_MSG_RESULT([no, cannot determine]) fi dnl Second, guess something for NARROWPROTO: AC_MSG_CHECKING([for workable NARROWPROTO definition]) dnl Try in order of preference... for fc_x_value in 1 ""; do FC_CHECK_X_PROTO_NARROWPROTO_WORKS($fc_x_value) if test "x$fc_x_proto_NARROWPROTO" != "xno"; then break fi done if test "x$fc_x_proto_NARROWPROTO" != "xno"; then fc_x_proto_defines="$fc_x_proto_defines NARROWPROTO=$fc_x_proto_NARROWPROTO" AC_MSG_RESULT([yes, determined: $fc_x_proto_NARROWPROTO]) else AC_MSG_RESULT([no, cannot determine]) fi AC_MSG_CHECKING(whether Xfuncproto was determined) if test -n "$fc_x_proto_defines"; then AC_MSG_RESULT([yes: $fc_x_proto_defines]) else AC_MSG_RESULT([no]) fi fi else AC_MSG_RESULT([no, examination failed]) fi else fc_x_proto_defines=$with_x_funcproto AC_MSG_RESULT([yes, given: $fc_x_proto_defines]) fi ]) dnl FC_CHECK_X_PROTO_FUNCPROTO_COMPILE(FUNCPROTO-VALUE) dnl dnl This macro determines whether or not Xfuncproto.h will dnl compile given a value to use for the FUNCPROTO definition. dnl dnl Typical FUNCPROTO-VALUEs are: dnl 15, 11, 3, 1, "" dnl dnl The following variables are output: dnl fc_x_proto_FUNCPROTO -- contains the passed-in dnl FUNCPROTO-VALUE if Xfuncproto.h dnl compiled, or "no" if it did not. dnl dnl Example use: dnl FC_CHECK_X_PROTO_FUNCPROTO_COMPILE($fc_x_value) dnl if test "x$fc_x_proto_FUNCPROTO" != "xno"; then dnl echo Compile using FUNCPROTO=$fc_x_proto_FUNCPROTO dnl fi dnl AC_DEFUN([FC_CHECK_X_PROTO_FUNCPROTO_COMPILE], [AC_REQUIRE([AC_PATH_XTRA])dnl AC_LANG_SAVE AC_LANG_C fc_x_proto_FUNCPROTO=no if test "x$1" = "x"; then fc_x_compile="#undef FUNCPROTO" else fc_x_compile="#define FUNCPROTO $1" fi fc_x_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" AC_TRY_COMPILE([ $fc_x_compile #include ],[ exit (0) ], [fc_x_proto_FUNCPROTO=$1]) CFLAGS="$fc_x_save_CFLAGS" AC_LANG_RESTORE ]) dnl FC_CHECK_X_PROTO_NARROWPROTO_WORKS(NARROWPROTO-VALUE) dnl dnl This macro determines whether or not NARROWPROTO is required dnl to get a typical X function (XawScrollbarSetThumb) to work. dnl dnl Typical NARROWPROTO-VALUEs are: dnl 1, "" dnl dnl The following variables are required for input: dnl fc_x_proto_FUNCPROTO -- the value to use for FUNCPROTO. dnl dnl The following variables are output: dnl fc_x_proto_NARROWPROTO -- contains the passed-in dnl NARROWPROTO-VALUE if the test dnl worked, or "no" if it did not. dnl dnl Example use: dnl FC_CHECK_X_PROTO_NARROWPROTO_WORKS($fc_x_value) dnl if test "x$fc_x_proto_NARROWPROTO" != "xno"; then dnl echo Compile using NARROWPROTO=$fc_x_proto_NARROWPROTO dnl fi dnl AC_DEFUN([FC_CHECK_X_PROTO_NARROWPROTO_WORKS], [AC_REQUIRE([AC_PATH_XTRA])dnl AC_LANG_SAVE AC_LANG_C fc_x_proto_NARROWPROTO=no if test "x$1" = "x"; then fc_x_works="#undef NARROWPROTO" else fc_x_works="#define NARROWPROTO $1" fi if test "x$fc_x_proto_FUNCPROTO" = "x"; then fc_x_compile="#define FUNCPROTO 1" else fc_x_compile="#define FUNCPROTO $fc_x_proto_FUNCPROTO" fi fc_x_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS $X_LIBS $X_PRE_LIBS -l$LIBXAW -lXt -lX11 $X_EXTRA_LIBS" AC_TRY_RUN([ $fc_x_works $fc_x_compile #include #include #include #include #define TOP_VAL 0.125 #define SHOWN_VAL 0.25 int main (int argc, char ** argv) { Widget toplevel; XtAppContext appcon; Widget scrollbar; double topbuf; double shownbuf; float * top = (float *)(&topbuf); float * shown = (float *)(&shownbuf); toplevel = XtAppInitialize ( &appcon, "FcXTest", NULL, 0, &argc, argv, NULL, NULL, 0 ); scrollbar = XtVaCreateManagedWidget ( "my_scrollbar", scrollbarWidgetClass, toplevel, NULL ); XawScrollbarSetThumb (scrollbar, TOP_VAL, SHOWN_VAL); XtVaGetValues ( scrollbar, XtNtopOfThumb, top, XtNshown, shown, NULL ); if ((*top == TOP_VAL) && (*shown == SHOWN_VAL)) { exit (0); } else { exit (1); } return (0); } ], [fc_x_proto_NARROWPROTO=$1]) CFLAGS="$fc_x_save_CFLAGS" AC_LANG_RESTORE ])