Announcement

Collapse
No announcement yet.

Possibly the ugliest code in freeciv

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Possibly the ugliest code in freeciv

    Code:
    dnl FC_CHECK_X_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
    dnl   ACTION-IF-NOT-FOUND]])
    dnl
    dnl This macro is intended to search for X11-related libraries.  It takes the
    dnl following variables for input:
    dnl   X_LIBS		-- prefixed to all linker lines
    dnl   X_EXTRA_LIBS	-- suffixed to all linker lines
    dnl   LIBS		-- suffixed to all linker lines (after X_EXTRA_LIBS)
    dnl Thus, the trial linker line will be "$X_LIBS -l$1 $X_EXTRA_LIBS $LIBS".
    dnl
    dnl The following variables are output:
    dnl   X_EXTRA_LIBS	-- contains "-l$1 $X_EXTRA_LIBS" if the link succeeds
    dnl
    dnl Thus, the intended usage of this macro is something like this:
    dnl   AC_PATH_XTRA
    dnl   X_LIBS="$X_LIBS $X_PRE_LIBS"
    dnl	dnl Is it just me or is AC_PATH_XTRA broken?
    dnl   FC_CHECK_X_LIB(X11, XOpenDisplay, , AC_MSG_ERROR("Need X11"))
    dnl   FC_CHECK_X_LIB(Xext, XShapeCombineMask)
    dnl     [etc.]
    dnl   LIBS="$X_LIBS $X_EXTRA_LIBS $LIBS"
    dnl
    AC_DEFUN(FC_CHECK_X_LIB,
    [AC_MSG_CHECKING([for $2 in X library -l$1])
    dnl Use a cache variable name containing both the library and function name,
    dnl because the test really is for library $1 defining function $2, not
    dnl just for library $1.  Separate tests with the same $1 and different $2s
    dnl may have different results.
    ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
    AC_CACHE_VAL(ac_cv_lib_$ac_lib_var,
    [ac_save_LIBS="$LIBS"
    LIBS="$X_LIBS -l$1 $X_EXTRA_LIBS $LIBS"
    AC_TRY_LINK(dnl
    ifelse([$2], [main], , dnl Avoid conflicting decl of main.
    [/* Override any gcc2 internal prototype to avoid an error.  */
    ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
    extern "C"
    #endif
    ])dnl
    [/* We use char because int might match the return type of a gcc2
        builtin and then its argument prototype would still apply.  */
    char $2();
    ]),
    	    [$2()],
    	    eval "ac_cv_lib_$ac_lib_var=yes",
    	    eval "ac_cv_lib_$ac_lib_var=no")
    LIBS="$ac_save_LIBS"
    ])dnl
    if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
      AC_MSG_RESULT(yes)
      ifelse([$3], ,
    [changequote(, )dnl
      ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
        -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
    changequote([, ])dnl
      AC_DEFINE_UNQUOTED($ac_tr_lib)
      X_EXTRA_LIBS="-l$1 $X_EXTRA_LIBS"
    ], [$3])
    else
      AC_MSG_RESULT(no)
    ifelse([$4], , , [$4
    ])dnl
    fi
    ])
    While looking into why autoconf 2.50 wouldn't work with freeciv I came across the following. Is that ugly or what . I am not sure how it works...

    Except that it doesn't cause autoconf 2.50 won't eat it. It is possible that the bug is in autoconf, but I doubt it!
    http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.

  • #2
    As a lowly PASCAL coder I've not a clue what this code is on about, it's not even structured Ewww

    I am doing Computer Science next year, so maybe then I can help you out Thue with coding and stuff as I will be studying Linux and C++ and also Java.

    Comment


    • #3
      I know what it is supposed to do because I have read the comment.
      Worst of all, I think it may be totally redundant
      http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.

      Comment

      Working...
      X