Radix cross Linux Toolchains

Toolchains for all supported by Radix cross Linux devices

80 Commits   2 Branches   13 Tags
dnl #
dnl # /usr/share/aclocal/dialog.m4
dnl #
dnl # Configure paths for dialog
dnl # Andrew V.Kosteltsev

dnl ============================================================
dnl
dnl  Synopsis:
dnl     AC_CHECK_DIALOG([MIN-VERSION [,                  # minimum dialog version, e.g. 1.3-20190211
dnl                           DEFAULT-WITH-DIALOG [,     # default value for --with-dialog option
dnl                           DEFAULT-WITH-DIALOG-TEST [,# default value for --with-dialog-test option
dnl                           EXTEND-VARS [,                  # whether CFLAGS/LDFLAGS/etc are extended
dnl                           ACTION-IF-FOUND [,              # action to perform if dialog was found
dnl                           ACTION-IF-NOT-FOUND             # action to perform if dialog was not found
dnl                          ]]]]]])
dnl  Examples:
dnl     AC_CHECK_DIALOG(1.3-20210621)
dnl     AC_CHECK_DIALOG(1.3-20210621,,,no,CFLAGS="$CFLAGS -DHAVE_DIALOG $DIALOG_CFLAGS")
dnl     AC_CHECK_DIALOG(1.3-20210621,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_DIALOG")
dnl
dnl
dnl  If you have to change prefix returned by dialog-config script or change
dnl  location of dialog-config, you may set environment variable DIALOG_CONFIG,
dnl  for example:
dnl
dnl  # export DIALOG_CONFIG="dialog-config --prefix=/usr/local"
dnl  # export DIALOG_CONFIG="/usr/bin/dialog-config --prefix=/usr/local"
dnl
dnl ============================================================
dnl
dnl ============================================================
dnl  auxilliary macros
dnl ============================================================
AC_DEFUN([_AC_DIALOG_ERROR], [dnl
AC_MSG_RESULT([*FAILED*])
cat <<EOT | sed -e 's/^[[ 	]]*/ | /' -e 's/>>/  /' 1>&2
$1
EOT
exit 1
])

AC_DEFUN([_AC_DIALOG_VERBOSE], [dnl
if test ".$verbose" = .yes; then
    AC_MSG_RESULT([  $1])
fi
])

dnl ============================================================
dnl  the user macro
dnl ============================================================
AC_DEFUN([AC_CHECK_DIALOG], [dnl
dnl
dnl ============================================================
dnl  prerequisites
dnl ============================================================
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_CPP])dnl
dnl
dnl ============================================================
dnl  set DIALOG_CONFIG variable
dnl ============================================================
if test -z "$DIALOG_CONFIG"; then
  DIALOG_CONFIG='dialog-config'
fi
dnl
DIALOG_CFLAGS=''
DIALOG_LDFLAGS=''
DIALOG_LIBS=''
AC_SUBST(DIALOG_CFLAGS)
AC_SUBST(DIALOG_LDFLAGS)
AC_SUBST(DIALOG_LIBS)
dnl
dnl ============================================================
dnl  command line options
dnl ============================================================
_AC_DIALOG_VERBOSE([])
AC_ARG_WITH(dialog,dnl
[  --with-dialog[=ARG]       Build with dialog Library  (default=]ifelse([$2],,yes,$2)[)],dnl
,dnl
with_dialog="ifelse([$2],,yes,$2)"
)dnl
AC_ARG_WITH(dialog-test,dnl
[  --with-dialog-test      Perform dialog Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
,dnl
with_dialog_test="ifelse([$3],,yes,$3)"
)dnl
_AC_DIALOG_VERBOSE([+ Command Line Options:])
_AC_DIALOG_VERBOSE([    o --with-dialog=$with_dialog])
_AC_DIALOG_VERBOSE([    o --with-dialog-test=$with_dialog_test])
dnl
dnl ============================================================
dnl  configuration
dnl ============================================================
if test ".$with_dialog" != .no; then
    dialog_subdir=no
    dialog_subdir_opts=''
    case "$with_dialog" in
        subdir:* )
            dialog_subdir=yes
            changequote(, )dnl
            dialog_subdir_opts=`echo $with_dialog | sed -e 's/^subdir:[^ 	]*[ 	]*//'`
            with_dialog=`echo $with_dialog | sed -e 's/^subdir:\([^ 	]*\).*$/\1/'`
            changequote([, ])dnl
            ;;
    esac
    dialog_version=""
    dialog_location=""
    dialog_type=""
    dialog_cflags=""
    dialog_ldflags=""
    dialog_libs=""
    if test ".$with_dialog" = .yes; then
        #   via config script in $PATH
        changequote(, )dnl
        dialog_version=`($DIALOG_CONFIG --version) 2>/dev/null |\
                      sed -e 's/^.*\([0-9]\.[0-9]*[-][0-9]*\).*$/\1/'`
        changequote([, ])dnl
        if test ".$dialog_version" != .; then
            dialog_location=`$DIALOG_CONFIG --prefix`
            dialog_type='installed'
            dialog_cflags=`$DIALOG_CONFIG --cflags`
            dialog_ldflags=`$DIALOG_CONFIG --ldflags`
            dialog_libs=`$DIALOG_CONFIG --libs`
        fi
    elif test -d "$with_dialog"; then
        with_dialog=`echo $with_dialog | sed -e 's;/*$;;'`
        dialog_found=no
        #   via config script under a specified directory
        #   (a standard installation, but not a source tree)
        if test ".$dialog_found" = .no; then
            for _dir in $with_dialog/bin $with_dialog; do
                if test -f "$_dir/dialog-config"; then
                    test -f "$_dir/dialog-config.in" && continue # dialog-config in source tree!
                    changequote(, )dnl
                    dialog_version=`($_dir/dialog-config --version) 2>/dev/null |\
                                  sed -e 's/^.*\([0-9]\.[0-9]*[.][0-9]*\).*$/\1/'`
                    changequote([, ])dnl
                    if test ".$dialog_version" != .; then
                        dialog_location=`$_dir/dialog-config --prefix`
                        dialog_type="installed"
                        dialog_cflags=`$_dir/dialog-config --cflags`
                        dialog_ldflags=`$_dir/dialog-config --ldflags`
                        dialog_libs=`$_dir/dialog-config --libs`
                        dialog_found=yes
                        break
                    fi
                fi
            done
        fi
    fi
    _AC_DIALOG_VERBOSE([+ Determined Location:])
    _AC_DIALOG_VERBOSE([    o path: $dialog_location])
    _AC_DIALOG_VERBOSE([    o type: $dialog_type])
    if test ".$dialog_version" = .; then
        if test ".$with_dialog" != .yes; then
             _AC_DIALOG_ERROR([dnl
             Unable to locate dialog under $with_dialog.
             Please specify the correct path to either a dialog installation tree
             (use --with-dialog=DIR if you used --prefix=DIR for installing dialog in
             the past).])
        else
             _AC_DIALOG_ERROR([dnl
             Unable to locate dialog in any system-wide location (see \$PATH).
             Please specify the correct path to either a dialog installation tree
             (use --with-dialog=DIR if you used --prefix=DIR for installing dialog in
             the past, or set the DIALOG_CONFIG environment variable to the full path
             to dialog-config).])
        fi
    fi
    dnl ========================================================
    dnl  Check whether the found version is sufficiently new
    dnl ========================================================
    _req_version="ifelse([$1],,1.0.0,$1)"
    for _var in dialog_version _req_version; do
        eval "_val=\"\$${_var}\""
        _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\1/'`
        _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\2/'`
        _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\4/'`
        _hex=`echo dummy | awk '{ printf("%d%02d%02d", major, minor, micro); }' \
              "major=$_major" "minor=$_minor" "micro=$_micro"`
        eval "${_var}_hex=\"\$_hex\""
    done
    _AC_DIALOG_VERBOSE([+ Determined Versions:])
    _AC_DIALOG_VERBOSE([    o existing: $dialog_version -> 0x$dialog_version_hex])
    _AC_DIALOG_VERBOSE([    o required: $_req_version -> 0x$_req_version_hex])
    _ok=0
    if test ".$dialog_version_hex" != .; then
        if test ".$_req_version_hex" != .; then
            if test $dialog_version_hex -ge $_req_version_hex; then
                _ok=1
            fi
        fi
    fi
    if test ".$_ok" = .0; then
        _AC_DIALOG_ERROR([dnl
        Found dialog version $dialog_version, but required at least version $_req_version.
        Upgrade dialog under $dialog_location to $_req_version or higher first, please.])
    fi
    dnl ========================================================
    dnl  Perform dialog Sanity Compile Check
    dnl ========================================================
    if test ".$with_dialog_test" = .yes; then
        _ac_save_CFLAGS="$CFLAGS"
        _ac_save_LDFLAGS="$LDFLAGS"
        _ac_save_LIBS="$LIBS"
        CFLAGS="$CFLAGS $dialog_cflags"
        LDFLAGS="$LDFLAGS $dialog_ldflags"
        LIBS="$LIBS $dialog_libs"
        _AC_DIALOG_VERBOSE([+ Test Build Environment:])
        _AC_DIALOG_VERBOSE([    o CFLAGS="$CFLAGS"])
        _AC_DIALOG_VERBOSE([    o LDFLAGS="$LDFLAGS"])
        _AC_DIALOG_VERBOSE([    o LIBS="$LIBS"])
        cross_compile=no
        define([_code1], [
#include <stdlib.h>
#include <stdio.h>
#include <strings.h>  /* index(3)    */

#include <dialog.h>
#include <dlg_colors.h>
#include <dlg_keys.h>
        ])
        define([_code2], [
  int status = 0;

  bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );

  init_dialog(stdin, stdout);

  dialog_vars.colors = 1;
  dialog_vars.backtitle = "Test dialog Library";
  dialog_vars.dlg_clear_screen = 1;
  dialog_vars.sleep_secs = 1;


  dlg_put_backtitle();

  /*************************************************
    Ruler: 68 characters + 2 spaces left and right:

                           | ----handy-ruler----------------------------------------------------- | */
  status = dialog_msgbox( " Dialog ==>libdialog<== [required] ",
                          "\nPackage is installed and corect.\n",
                          5, 72, 0 );

  if( dialog_vars.sleep_secs )
    (void)napms(dialog_vars.sleep_secs * 1000);

  if( dialog_vars.dlg_clear_screen )
  {
    dlg_clear();
    (void)refresh();
  }
  end_dialog();
        ])
        _AC_DIALOG_VERBOSE([+ Performing Sanity Checks:])
        _AC_DIALOG_VERBOSE([    o pre-processor test])
        AC_PREPROC_IFELSE([AC_LANG_PROGRAM([_code1], [_code2])], [_ok=yes], [_ok=no])
        if test ".$_ok" != .yes; then
            _AC_DIALOG_ERROR([dnl
            Found dialog $dialog_version under $dialog_location, but
            was unable to perform a sanity pre-processor check. This means
            the dialog header dialog.h was not found.
            We used the following build environment:
            >> CPP="$CPP"
            See config.log for possibly more details.])
        fi
        _AC_DIALOG_VERBOSE([    o link check])
        AC_LINK_IFELSE([AC_LANG_PROGRAM([_code1], [_code2])], [_ok=yes], [_ok=no])
        if test ".$_ok" != .yes; then
            _AC_DIALOG_ERROR([dnl
            Found dialog $dialog_version under $dialog_location, but
            was unable to perform a sanity linker check. This means
            the dialog library libdialog.a was not found.
            We used the following build environment:
            >> CC="$CC"
            >> CFLAGS="$CFLAGS"
            >> LDFLAGS="$LDFLAGS"
            >> LIBS="$LIBS"
            See config.log for possibly more details.])
        fi
        _extendvars="ifelse([$4],,yes,$4)"
        if test ".$_extendvars" != .yes; then
            CFLAGS="$_ac_save_CFLAGS"
            LDFLAGS="$_ac_save_LDFLAGS"
            LIBS="$_ac_save_LIBS"
        fi
    else
        _extendvars="ifelse([$4],,yes,$4)"
        if test ".$_extendvars" = .yes; then
            if test ".$dialog_subdir" = .yes; then
                CFLAGS="$CFLAGS $dialog_cflags"
                LDFLAGS="$LDFLAGS $dialog_ldflags"
                LIBS="$LIBS $dialog_libs"
            fi
        fi
    fi
    DIALOG_CFLAGS="$dialog_cflags"
    DIALOG_LDFLAGS="$dialog_ldflags"
    DIALOG_LIBS="$dialog_libs"
    AC_SUBST(DIALOG_CFLAGS)
    AC_SUBST(DIALOG_LDFLAGS)
    AC_SUBST(DIALOG_LIBS)

    AC_SUBST(HAVE_DIALOG, [1])

    AC_CHECK_HEADERS(dialog.h dlg_colors.h dlg_keys.h)

    _AC_DIALOG_VERBOSE([+ Final Results:])
    _AC_DIALOG_VERBOSE([    o DIALOG_CFLAGS="$DIALOG_CFLAGS"])
    _AC_DIALOG_VERBOSE([    o DIALOG_LDFLAGS="$DIALOG_LDFLAGS"])
    _AC_DIALOG_VERBOSE([    o DIALOG_LIBS="$DIALOG_LIBS"])
fi
if test ".$with_dialog" != .no; then
    AC_MSG_CHECKING(for libdialog)
    AC_MSG_RESULT([version $dialog_version, $dialog_type under $dialog_location])
    ifelse([$5], , :, [$5])
else
    AC_MSG_CHECKING(for libdialog)
    AC_MSG_RESULT([no])
    ifelse([$6], , :, [$6])
fi
])