patches for AIX with ncurses support

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Rainer Tammer 2010-01-17 13:51:07 +01:00 committed by Slava Zanko
parent 2bbe975b2c
commit 476145a0f5
8 changed files with 216 additions and 39 deletions

View File

@ -224,11 +224,28 @@ ncurses):
by default if found, otherwise the included S-Lang library is
used.
`--with-slang-includes=[DIR]'
Set path to SLANG includes [default=/usr/include]; make sense
only if --with-screen=slang is used.
`--with-slang-libs=[DIR]'
Set path to SLANG library [default=/usr/lib]; mke sense only
if --with-screen=slang is used.
`--with-termcap'
If the included S-Lang library is used, this option forces it to
use the termcap database, as opposed to the default terminfo
database.
`--with-ncurses-includes=[DIR]'
Set path to ncurses includes [default=/usr/include]; make
sense only if --with-screen=ncurses is used;
for /usr/local/include/ncurses specify /usr/local/include.
`--with-ncurses-libs=[DIR]'
Set path to ncurses library [default=/usr/lib]; make sense
only if --with-screen=ncurses is used.
Compiler options:
- - - - - - - - -
@ -320,7 +337,7 @@ mips-dec-ultrix4.3
mips-dec-{open,net}bsd1.0
mips-sgi-irix5.2
mips-sgi-irix5.3
rs6000-ibm-aix3.2.5
powerpc-ibm-aix5.3.0.0 (IBM XL C, IBM XL C/C++)
sparc-sun-sunos4.1
sparc-sun-netbsd1.0
sparc-sun-solaris2.3
@ -435,3 +452,33 @@ team. Sometimes there is no solution than upgrading to a modern and
free compiler - GCC (Compiler Collection):
http://gcc.gnu.org/
AIX
---
Currently you can not use gcc 4.2.4 (and probably other versions) on
AIX to compiler the S-Lang version. Please use IBM XL C or IBM XL C/C++
instead.
If you compile a ncurses version you need to set TERM=dtterm to get
working color support. Furthermore it is important to specify the
--with-ncurses-includes/--with-ncurses-lib parameters because otherwise
mc will pick up term.h from AIX which does not work with the ncurses
library.
The AIX S-Lang build was tested with S-Lang 2.0.7. Later versions may
also work but are not tested yet.
Here is an example for S-Lang, it is assumed that the S-Lang library
is installed under /user/local and that you also want want to install
to /usr/local:
export CC=cc_r
export CXX=xlC_r
export CONFIG_SHELL=/usr/bin/bash (if installed)
export SHELL=/usr/bin/bash (if installed)
./configure \
--prefix=/usr/local \
--with-screen=slang \
--with-slang-includes=/usr/local/include \
--with-slang-libs=/usr/local/lib

View File

@ -52,12 +52,19 @@
/* include at last !!! */
#ifdef WANT_TERM_H
#ifdef HAVE_NCURSES_TERM_H
# include <ncurses/term.h>
#else
# include <term.h>
#endif /* HAVE_NCURSES_TERM_H */
#endif /* WANT_TERM_H */
/*** global variables **************************************************/
/*** file scope macro definitions **************************************/
#if defined(_AIX) && !defined(CTRL)
# define CTRL(x) ((x) & 0x1f)
#endif
/*** global variables **************************************************/

View File

@ -5,8 +5,12 @@
#ifdef USE_NCURSES
# ifdef HAVE_NCURSES_CURSES_H
# include <ncurses/curses.h>
# elif HAVE_NCURSES_NCURSES_H
# include <ncurses/ncurses.h>
# elif HAVE_NCURSESW_CURSES_H
# include <ncursesw/curses.h>
# elif HAVE_NCURSES_HCURSES_H
# include <ncurses.h>
# elif HAVE_NCURSES_H
# include <ncurses.h>
# else

View File

@ -20,6 +20,10 @@
# include <sys/sysmacros.h> /* AIX */
#endif
#if defined(_AIX)
# include <time.h> /* AIX for tm */
#endif
#ifndef major
# warning major() is undefined. Device numbers will not be shown correctly.
# define major(devnum) (((devnum) >> 8) & 0xff)

View File

@ -31,7 +31,8 @@
#include <config.h>
#include <errno.h>
#include <sys/fcntl.h>
#include <fcntl.h> /* include fcntl.h -> sys/fcntl.h only */
/* includes fcntl.h see IEEE Std 1003.1-2008 */
#include <time.h>
#include <sys/time.h> /* gettimeofday() */

View File

@ -67,6 +67,10 @@
#include "smbfs.h"
#include "local.h"
#if defined(_AIX) && !defined(NAME_MAX)
# define NAME_MAX FILENAME_MAX
#endif
/** They keep track of the current directory */
static struct vfs_class *current_vfs;
static char *current_dir;

View File

@ -37,8 +37,15 @@ AC_DEFUN([MC_CHECK_CFLAGS],[
mc_configured_cflags=""
dnl Sorted -f options:
dnl AC_MSG_CHECKING([CC is $CC])
case "$CC" in
gcc*)
MC_CHECK_ONE_CFLAG([-fdiagnostics-show-option])
dnl MC_CHECK_ONE_CFLAG([-fno-stack-protector])
;;
*)
;;
esac
dnl Sorted -W options:
MC_CHECK_ONE_CFLAG([-Wcomment])

View File

@ -1,6 +1,6 @@
dnl
dnl Check if the system S-Lang library can be used.
dnl If not, and $1 is "strict", exit, otherwise fall back to mcslang.
dnl If not, and $1 is "strict", exit.
dnl
AC_DEFUN([MC_CHECK_SLANG_BY_PATH], [
@ -146,10 +146,15 @@ int main (void)
[Define to use S-Lang library for screen management])
MCLIBS="$MCLIBS $ac_slang_lib_path -lslang"
fi
CFLAGS="$saved_CFLAGS"
dnl do not reset CPPFLAGS
dnl - if CPPFLAGS are resetted then cpp does not find the specified header
LDFLAGS="$saved_LDFLAGS"
else
CFLAGS="$saved_CFLAGS"
CPPFLAGS="$saved_CPPFLAGS"
LDFLAGS="$saved_LDFLAGS"
fi
])
dnl
@ -162,7 +167,7 @@ AC_DEFUN([MC_WITH_SLANG], [
AC_ARG_WITH([slang-includes],
AC_HELP_STRING([--with-slang-includes=@<:@DIR@:>@],
[set path to SLANG includes @<:@default=/usr/include@:>@; may sense only if --with-screen=slang]
[set path to SLANG includes @<:@default=/usr/include@:>@; make sense only if --with-screen=slang]
),
[ac_slang_inc_path="$withval"],
[ac_slang_inc_path=""]
@ -170,7 +175,7 @@ AC_DEFUN([MC_WITH_SLANG], [
AC_ARG_WITH([slang-libs],
AC_HELP_STRING([--with-slang-libs=@<:@DIR@:>@],
[set path to SLANG library @<:@default=/usr/lib@:>@; may sense only if --with-screen=slang]
[set path to SLANG library @<:@default=/usr/lib@:>@; make sense only if --with-screen=slang]
),
[ac_slang_lib_path="$withval"],
[ac_slang_lib_path=""]
@ -197,6 +202,68 @@ AC_DEFUN([MC_WITH_SLANG], [
])
dnl check for ncurses in user supplied path
AC_DEFUN([MC_CHECK_NCURSES_BY_PATH], [
ac_ncurses_inc_path=[$1]
ac_ncurses_lib_path=[$2]
if test x"$ac_ncurses_inc_path" != x; then
ac_ncurses_inc_path="-I"$ac_ncurses_inc_path
fi
if test x"$ac_ncurses_lib_path" != x; then
ac_ncurses_lib_path="-L"$ac_ncurses_lib_path
fi
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ac_ncurses_inc_path"
dnl Check for the headers
dnl Both headers should be in the same directory
dnl AIX term.h is unusable for mc
AC_MSG_CHECKING([for ncurses/ncurses.h and ncurses/term.h])
AC_PREPROC_IFELSE(
[
AC_LANG_PROGRAM([[#include <ncurses/ncurses.h>
#include <ncurses/term.h>
]],[[return 0;]])
],
[
AC_MSG_RESULT(yes)
if test x"$ac_ncurses_inc_path" = x; then
ac_ncurses_inc_path="-I/usr/include"
fi
if test x"$ac_ncurses_lib_path" = x; then
ac_ncurses_lib_path="-L/usr/lib"
fi
found_ncurses=yes
AC_DEFINE(HAVE_NCURSES_NCURSES_H, 1,
[Define to 1 if you have the <ncurses/ncurses.h> header file.])
AC_DEFINE(HAVE_NCURSES_TERM_H, 1,
[Define to 1 if you have the <ncurses/term.h> header file.])
],
[
AC_MSG_RESULT(no)
found_ncurses=no
error_msg_ncurses="ncurses header not found"
],
)
if test x"$found_ncurses" = x"yes"; then
screen_type=ncurses
screen_msg="ncurses library (installed on the system)"
AC_DEFINE(HAVE_NCURSES, 1,
[Define to use ncurses library for screen management])
MCLIBS="$MCLIBS $ac_ncurses_lib_path"
else
CPPFLAGS="$saved_CPPFLAGS"
AC_MSG_ERROR([$error_msg_ncurses])
fi
])
dnl
dnl Use the ncurses library. It can only be requested explicitly,
dnl so just fail if anything goes wrong.
@ -208,6 +275,39 @@ AC_DEFUN([MC_WITH_NCURSES], [
dnl has_colors() is specific to ncurses, it's not in the old curses
save_LIBS="$LIBS"
ncursesw_found=
dnl get the user supplied include path
AC_ARG_WITH([ncurses-includes],
AC_HELP_STRING([--with-ncurses-includes=@<:@DIR@:>@],
[set path to ncurses includes @<:@default=/usr/include@:>@; make sense only if --with-screen=ncurses; for /usr/local/include/ncurses specify /usr/local/include]
),
[ac_ncurses_inc_path="$withval"],
[ac_ncurses_inc_path=""]
)
dnl get the user supplied lib path
AC_ARG_WITH([ncurses-libs],
AC_HELP_STRING([--with-ncurses-libs=@<:@DIR@:>@],
[set path to ncurses library @<:@default=/usr/lib@:>@; make sense only if --with-screen=ncurses]
),
[ac_ncurses_lib_path="$withval"],
[ac_ncurses_lib_path=""]
)
dnl we need at least the inc path, the lib may be in a std location
if test x"$ac_ncurses_inc_path" != x; then
dnl check the user supplied location
MC_CHECK_NCURSES_BY_PATH([$ac_ncurses_inc_path],[$ac_ncurses_lib_path])
LIBS=
AC_SEARCH_LIBS([has_colors], [ncurses], [MCLIBS="$MCLIBS $LIBS"],
[AC_MSG_ERROR([Cannot find ncurses library])])
screen_type=ncurses
screen_msg="ncurses library"
AC_DEFINE(USE_NCURSES, 1,
[Define to use ncurses for screen management])
else
LIBS=
AC_SEARCH_LIBS([addwstr], [ncursesw ncurses curses], [MCLIBS="$MCLIBS $LIBS";ncursesw_found=yes],
[AC_MSG_WARN([Cannot find ncurses library, that support wide characters])])
@ -231,7 +331,9 @@ AC_DEFUN([MC_WITH_NCURSES], [
screen_msg="ncurses library"
AC_DEFINE(USE_NCURSES, 1,
[Define to use ncurses for screen management])
fi
dnl check for ESCDELAY
AC_CACHE_CHECK([for ESCDELAY variable],
[mc_cv_ncurses_escdelay],
[AC_TRY_LINK([], [
@ -246,6 +348,7 @@ AC_DEFUN([MC_WITH_NCURSES], [
[Define if ncurses has ESCDELAY variable])
fi
dnl check for resizeterm
AC_CHECK_FUNCS(resizeterm)
LIBS="$save_LIBS"
])