dnl -*- sh -*-
dnl the "configure" script is made from this by running GNU "autoconf"
dnl
dnl "$Id: configure.in,v 1.33.2.31.2.24 2001/11/19 21:25:35 easysw Exp $"
dnl
dnl Configuration script for the Fast Light Tool Kit (FLTK).
dnl
dnl Copyright 1998-2001 by Bill Spitzak and others.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dnl Library General Public License for more details.
dnl
dnl You should have received a copy of the GNU Library General Public
dnl License along with this library; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
dnl USA.
dnl
dnl Please report all bugs and problems to "fltk-bugs@fltk.org".
dnl

AC_INIT(src/Fl.cxx)

AC_PROG_RANLIB

LINKFLTK="-lfltk"
LINKFLTKGL="-lfltk_gl"
GLDEMOS="gldemos"

LIBNAME="../lib/libfltk.a"
GLLIBNAME="../lib/libfltk_gl.a"
if test "$RANLIB" != ":"; then
  LIBCOMMAND="ar cr"
else
  LIBCOMMAND="ar crs"
fi
DSOCOMMAND="echo"
DSONAME=""

dnl Get the operating system and version number...

uname=`uname`
uversion=`uname -r | sed -e '1,$s/[[^0-9]]//g'`
if test x$uname = xIRIX64; then
    uname="IRIX"
fi

dnl Clear debugging flags and only enable debugging if the user asks for
dnl it.

DEBUGFLAG=""
PICFLAG=0
CFLAGS="${CFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"

AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
    DEBUGFLAG="-g "
fi])
AC_ARG_ENABLE(gl, [  --enable-gl             turn on OpenGL support [default=yes]])
AC_ARG_ENABLE(shared, [  --enable-shared         turn on shared libraries [default=no]],[
DSOLINK=""
AC_SUBST(DSOLINK)
if eval "test x$enable_shared = xyes"; then
    PICFLAG=1
    case $uname in
	SunOS* | UNIX_S*)
            DSONAME="libfltk.so.1.1"
            GLDSONAME="libfltk_gl.so.1.1"
	    DSOCOMMAND="\$(CXX) -h \$@ \$(LDLIBS) -G $DEBUGFLAG -o"
	    if test "$libdir" != "/usr/lib"; then
		    DSOLINK="-R$libdir"
            fi
	    ;;
	HP-UX*)
            DSONAME="libfltk.sl.1.1"
            GLDSONAME="libfltk_gl.sl.1.1"
	    DSOCOMMAND="ld -b -z +h \$@ $DEBUGFLAG -o"
	    if test "$libdir" != "/usr/lib"; then
		    DSOLINK="-Wl,-rpath,$libdir"
            fi
	    ;;
	IRIX* | OSF1*)
            DSONAME="libfltk.so.1.1"
            GLDSONAME="libfltk_gl.so.1.1"
            DSOCOMMAND="\$(CXX) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
	    if test "$libdir" != "/usr/lib" - a "$libdir" != "/usr/lib32"; then
		    DSOLINK="-Wl,-rpath,$libdir"
            fi
	    ;;
	FreeBSD* | NetBSD* | OpenBSD* | Linux*)
            DSONAME="libfltk.so.1.1"
            GLDSONAME="libfltk_gl.so.1.1"
            DSOCOMMAND="\$(CXX) -Wl,-soname,\$@ \$(LDLIBS) -shared -fPIC $DEBUGFLAG -o"
	    if test "$libdir" != "/usr/lib"; then
		    DSOLINK="-Wl,-rpath,$libdir"
            fi
	    ;;
	AIX*)
            DSONAME="libfltk_s.a"
            GLDSONAME="libfltk_gl_s.a"
            DSOCOMMAND="\$(CXX) -Wl,-bexpall,-bM:SRE,-bnoentry -o"
            ;;
	*)
            echo "Warning: shared libraries may not be supported.  Trying -shared"
	    echo "         option with compiler."
            DSONAME="libfltk.so.1.1"
            GLDSONAME="libfltk_gl.so.1.1"
            DSOCOMMAND="\$(CXX) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
	    ;;
    esac
fi])

AC_PROG_CC
AC_PROG_CXX
dnl AC_PROG_INSTALL
AC_PATH_PROG(NROFF,nroff)
if test "$NROFF" = ""; then
    AC_PATH_PROG(GROFF,groff)
    if test "$GROFF" = ""; then
        NROFF="echo"
    else
        NROFF="$GROFF -T ascii"
    fi
fi
AC_PATH_PROG(HTMLDOC,htmldoc)

AC_C_BIGENDIAN

AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
if test $ac_cv_sizeof_short -eq 2; then
    AC_DEFINE(U16,unsigned short)
fi
if test $ac_cv_sizeof_int -eq 4; then
    AC_DEFINE(U32,unsigned)
else
    if test $ac_cv_sizeof_long -eq 4; then
        AC_DEFINE(U32,unsigned long)
    fi
fi
if test $ac_cv_sizeof_int -eq 8; then
    AC_DEFINE(U64,unsigned)
else
    if test $ac_cv_sizeof_long -eq 8; then
        AC_DEFINE(U64,unsigned long)
    fi
fi

AC_HEADER_DIRENT
AC_CHECK_HEADER(sys/select.h,AC_DEFINE(HAVE_SYS_SELECT_H))
AC_CHECK_HEADER(sys/stdtypes.h,AC_DEFINE(HAVE_SYS_SELECT_H))
AC_CHECK_FUNC(scandir,
    if test "$uname" = SunOS -o "$uname" = QNX; then
        echo Not using $uname scandir emulation function.
    else
        AC_DEFINE(HAVE_SCANDIR)
    fi)
AC_CHECK_FUNC(vsnprintf,
    if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
	echo Not using built-in vsnprintf function because you are running HP-UX 10.20.
    else
        AC_DEFINE(HAVE_VSNPRINTF)
    fi)
AC_CHECK_FUNC(snprintf,
    if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
	echo Not using built-in snprintf function because you are running HP-UX 10.20.
    else
        AC_DEFINE(HAVE_SNPRINTF)
    fi)
AC_CHECK_FUNCS(vsprintf)
AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H))
AC_CHECK_FUNCS(strcasecmp)

dnl Check for image libraries...
SAVELIBS="$LIBS"
IMAGELIBS=""

AC_SUBST(IMAGELIBS)

AC_CHECK_HEADER(jpeglib.h,
    AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
	AC_DEFINE(HAVE_LIBJPEG)
	IMAGELIBS="$IMAGELIBS -ljpeg"))

AC_CHECK_HEADER(zlib.h,
    AC_CHECK_LIB(z, gzopen,
	AC_DEFINE(HAVE_LIBZ)
	IMAGELIBS="$IMAGELIBS -lz"
	LIBS="$LIBS -lz"))

dnl PNG library uses math library functions...
AC_CHECK_LIB(m, pow)

AC_CHECK_HEADER(png.h,
    AC_CHECK_LIB(png, png_read_rows,
	AC_DEFINE(HAVE_LIBPNG)
	IMAGELIBS="-lpng -lm$IMAGELIBS"
	LIBS="-lpng -lm $LIBS"
	AC_CHECK_FUNCS(png_get_valid png_set_tRNS_to_alpha png_read_destroy)))

dnl Restore original LIBS settings...
LIBS="$SAVELIBS"

EXEEXT=
HLINKS=

case $uname in
    CYGWIN*)
	dnl Cygwin environment...
	LIBS="$LIBS -lgdi32 -lwsock32"
	CFLAGS="$CFLAGS -DWIN32"
	CXXFLAGS="$CXXFLAGS -DWIN32"
	EXEEXT=".exe"
	HLINKS="#"
	if test x$enable_gl != xno; then
	    AC_CHECK_HEADER(GL/gl.h,
	        AC_DEFINE(HAVE_GL)
		GLLIB="-lopengl32")
	    AC_CHECK_HEADER(GL/glu.h,
        	AC_DEFINE(HAVE_GL_GLU_H)
		GLLIB="-lglu32 $GLLIB")
	else
	    LINKFLTKGL=""
	    GLLIBNAME=""
	    GLDSONAME=""
	    GLDEMOS=""
	fi
	;;
    *)
	dnl Check for X11...
	AC_PATH_XTRA

	if test x$no_x = xyes; then
	    AC_MSG_ERROR(Configure could not find required X11 libraries, aborting.)
	fi

	if test "x$X_PRE_LIBS" != x; then
	    AC_MSG_WARN(Ignoring libraries \"$X_PRE_LIBS\" requested by configure.)
	fi

	LIBS="$LIBS -lXext -lX11 $X_EXTRA_LIBS"
	CFLAGS="$CFLAGS$X_CFLAGS"
	CXXFLAGS="$CXXFLAGS$X_CFLAGS"
	LDFLAGS="$X_LIBS $LDFLAGS"

	if test "x$x_includes" != x; then
	    ac_cpp="$ac_cpp -I$x_includes"
	fi

	dnl Check for OpenGL unless disabled...
	GLLIB=

	if test x$enable_gl != xno; then
	    AC_CHECK_HEADER(GL/gl.h,
		AC_CHECK_LIB(GL, glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB="-lGL", \
		    AC_CHECK_LIB(MesaGL,glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB=" -lMesaGL",,\
			-lm), \
		    -lm)
	    )
	    AC_CHECK_HEADER(GL/glu.h,
        	AC_DEFINE(HAVE_GL_GLU_H)
		if test x$ac_cv_lib_GL_glXMakeCurrent = xyes; then
		    GLLIB="-lGLU $GLLIB"
		fi
		if test x$ac_cv_lib_MesaGL_glXMakeCurrent = xyes; then
		    GLLIB="-lMesaGLU $GLLIB"
		fi
	    )

	    if test x$ac_cv_lib_GL_glXMakeCurrent = xno; then
		    LINKFLTKGL=""
		    GLLIBNAME=""
		    GLDSONAME=""
		    GLDEMOS=""
	    fi
	else
	    LINKFLTKGL=""
	    GLLIBNAME=""
	    GLDSONAME=""
	    GLDEMOS=""
	fi

	dnl Check for the Xdbe extension...
	AC_CHECK_HEADER(X11/extensions/Xdbe.h, \
	    if test "$uname" != "SunOS"; then
        	AC_DEFINE(HAVE_XDBE)
	    fi)

	dnl Check for overlay visuals...
	AC_CACHE_CHECK("for X overlay visuals", ac_cv_have_overlay,
	    if xprop -root 2>/dev/null | grep -c "SERVER_OVERLAY_VISUALS" >/dev/null; then
        	ac_cv_have_overlay=yes
	    else
        	ac_cv_have_overlay=no
	    fi)

	if test x$ac_cv_have_overlay = xyes; then
	    AC_DEFINE(HAVE_OVERLAY)
	fi
	;;
esac

AC_SUBST(EXEEXT)
AC_SUBST(HLINKS)
AC_SUBST(GLDEMOS)
AC_SUBST(GLLIB)

dnl Figure out the appropriate formatted man page extension...
case "$uname" in
    FreeBSD* | NetBSD* | OpenBSD*)
	# *BSD
	CAT1EXT=0
	CAT3EXT=0
	;;
    IRIX*)
	# SGI IRIX
	CAT1EXT=z
	CAT3EXT=z
	;;
    *)
	# All others
	CAT1EXT=1
	CAT3EXT=3
	;;
esac

AC_SUBST(CAT1EXT)
AC_SUBST(CAT3EXT)

dnl Fix "mandir" variable...
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/usr"; then
	case "$uname" in
        	*BSD* | Darwin* | Linux*)
        		# *BSD
        		mandir="\${prefix}/share/man"
        		;;
        	IRIX*)
        		# SGI IRIX
        		mandir="\${prefix}/share/catman"
        		;;
	esac
fi

dnl Fix "libdir" variable...
if test "$prefix" = NONE; then
	prefix=/usr/local
fi

if test "$exec_prefix" = NONE; then
	exec_prefix="$prefix"
fi

if test "$uname" = "IRIX" -a $uversion -ge 62 -a "$libdir" = "\${exec_prefix}/lib" -a "$exec_prefix" = "/usr"; then
	libdir="/usr/lib32"
fi

dnl Add warnings to compiler switches:
dnl do this last so messing with switches does not break tests
MAKEDEPEND="\$(CXX) -M"

if test -n "$GXX"; then
    # Starting with GCC 3.0, you must link C++ programs against either
    # libstdc++ (shared by default), or libsupc++ (always static).  If
    # you care about binary portability between Linux distributions,
    # you need to either 1) build your own GCC with static C++ libraries
    # or 2) link using gcc and libsupc++.  We choose the latter since
    # FLTK doesn't (currently) use any of the stdc++ library.
    #
    # Also, GCC 3.0.x still has problems compiling some code.  You may
    # or may not have success with it.  USE 3.0.x WITH EXTREME CAUTION!
    #
    # Previous versions of GCC do not have the reliance on the stdc++
    # or g++ libraries, so the extra supc++ library is not needed.

    case "`$CXX --version`" in
    	3*)
	    AC_MSG_WARN(GCC 3.0.x is known to produce incorrect code - use with caution!)
	    LIBS="$LIBS -lsupc++"
	    ;;
    	3.1*)
	    LIBS="$LIBS -lsupc++"
	    ;;
    esac

    CXX="$CC"

    CFLAGS="-Wall $CFLAGS"
    CXXFLAGS="-Wall $CXXFLAGS"
    if test -z "$DEBUGFLAG"; then
    	#
	# Note: Can't use -fomit-frame-pointer - prevents tools like
	#       libsafe from working!
        #
	#       Don't use -fforce-mem, -fforce-addr, or -fcaller-saves.
	#       They all seem to make either no difference or enlarge
	#       the code by a few hundred bytes.
        #
        CFLAGS="-O2 $CFLAGS"
        CXXFLAGS="-O2 $CXXFLAGS"
    fi
    if test $PICFLAG = 1; then
    	CFLAGS="-fPIC $CFLAGS"
    	CXXFLAGS="-fPIC $CXXFLAGS"
    fi

    # See if GCC supports -fno-exceptions...
    AC_MSG_CHECKING(if GCC supports -fno-exceptions)
    OLDCFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-exceptions"
    AC_TRY_COMPILE(,,
	OPTIM="$OPTIM -fno-exceptions"
	AC_MSG_RESULT(yes),
	AC_MSG_RESULT(no))
    CFLAGS="$OLDCFLAGS"

    # See if we are running Solaris; if so, try the -fpermissive option...
    if test "$uname" = SunOS; then
	AC_MSG_CHECKING(if GCC supports -fpermissive)

	OLDCFLAGS="$CFLAGS"
	CFLAGS="$CFLAGS -fpermissive"
	AC_TRY_COMPILE(,,
	    OPTIM="$OPTIM -fpermissive"
	    AC_MSG_RESULT(yes),
	    AC_MSG_RESULT(no))
	CFLAGS="$OLDCFLAGS"
    fi
else
    case `(uname) 2>/dev/null` in
        IRIX*)
	    # Running some flavor of IRIX; see which version and
	    # set things up according...
	    if test "$uversion" -ge 62; then
	        # We are running IRIX 6.2 or higher; uncomment the following
		# lines if you don't have IDO 7.2 or higher:
		#
		#     CXX="CC -n32 -mips3"
		#     CC="cc -n32 -mips3"
		#     LD="ld -n32 -mips3"
		#     MAKEDEPEND="CC -M"

		if test "x`grep abi=n32 /etc/compiler.defaults`" = x; then
			AC_MSG_WARN(FOR BEST RESULTS BEFORE COMPILING: setenv SGI_ABI \"-n32 -mips3\")
		fi

        	CFLAGS="-fullwarn $CFLAGS"
        	CXXFLAGS="-fullwarn $CXXFLAGS"
	    else
        	CXXFLAGS="+w +pp $CXXFLAGS"
	    fi
	    if test -z "$DEBUGFLAG"; then
        	CFLAGS="-O2 $CFLAGS"
        	CXXFLAGS="-O2 $CXXFLAGS"
	    fi
	    ;;
	HP-UX*)
	    # Running HP-UX; these options should work for the HP compilers.
	    if test -z "$DEBUGFLAG"; then
		CFLAGS="+O2 $CFLAGS"
		CXXFLAGS="+O2 +W336,501,736,740,749,829 $CXXFLAGS"
	    fi
	    CFLAGS="+DAportable $CFLAGS"
	    CXXFLAGS="+DAportable $CXXFLAGS"
	    ;;
	SunOS*)
	    # Solaris
	    if test -z "$DEBUGFLAG"; then
		CFLAGS="-xO3"
		CXXFLAGS="-xO3"
	    fi
	    if test $PICFLAG = 1; then
		CFLAGS="-KPIC $CFLAGS"
		CXXFLAGS="-PIC $CXXFLAGS"
	    fi
	    ;;
	AIX*)
	    if test -z "$DEBUGFLAG"; then
        	CFLAGS="-O2 $CFLAGS"
        	CXXFLAGS="-O2 $CXXFLAGS"
	    fi
	    echo "WARNING: The AIX C and C++ compilers are known not to correctly"
	    echo "         compile the FLTK library.  We recommend using GCC 2.95.2"
	    echo "         under AIX."
	    ;;
	*)
	    # Running some other operating system; inform the user they
	    # should contribute the necessary options to fltk-bugs@fltk.org...
	    echo "Building FLTK with default compiler optimizations; contact"
	    echo "fltk-bugs@fltk.org with uname and compiler options needed"
	    echo "for your platform, or set the CFLAGS and CXXFLAGS options"
	    echo "before running configure."
	    ;;
    esac
fi

CFLAGS="$DEBUGFLAG $CFLAGS"
CXXFLAGS="$DEBUGFLAG $CXXFLAGS"

AC_SUBST(DSOCOMMAND)
AC_SUBST(DSONAME)
AC_SUBST(GLDSONAME)
AC_SUBST(GLLIBNAME)
AC_SUBST(LIBCOMMAND)
AC_SUBST(LIBNAME)
AC_SUBST(LINKFLTKGL)
AC_SUBST(LINKFLTK)
AC_SUBST(MAKEDEPEND)

if test x$prefix = xNONE; then
	AC_DEFINE_UNQUOTED(FLTK_DOCDIR, "/usr/local/share/doc/fltk")
else
	AC_DEFINE_UNQUOTED(FLTK_DOCDIR, "$prefix/share/doc/fltk")
fi

AC_CONFIG_HEADER(config.h:configh.in)
AC_OUTPUT(makeinclude fltk-config FL/Makefile)

chmod +x fltk-config

dnl
dnl End of "$Id: configure.in,v 1.33.2.31.2.24 2001/11/19 21:25:35 easysw Exp $".
dnl
