AC_PREREQ(2.50)

m4_include([revision.m4])

AC_INIT([codeblocks], SVN_REVISION)

AC_CANONICAL_TARGET

AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip])
AC_CONFIG_HEADER([src/include/config.h])

CODEBLOCKS_CHECK_DEBUG

dnl Checks for programs.
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_CC
AC_PROG_CC_C_O
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_AWK

CODEBLOCKS_SETUP_FOR_TARGET

AC_DISABLE_STATIC
AC_PROG_LIBTOOL

dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h limits.h stdlib.h string.h sys/param.h unistd.h malloc.h])

dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_C_VOLATILE

dnl Checks for library functions.
AC_FUNC_CLOSEDIR_VOID
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([atexit getcwd isascii memchr memmove memset strcasecmp strchr strcspn strdup strrchr strstr])
AC_CHECK_LIB(dl, dlopen)
AC_CHECK_LIB(pthread, pthread_create)
AC_CHECK_FUNC(snprintf, AC_DEFINE(HAVE_SNPRINTF,,snprintf))
AC_CHECK_FUNC(vsnprintf, AC_DEFINE(HAVE_VSNPRINTF,,vsnprintf))

save_LIBS=$LIBS
AC_SEARCH_LIBS(gzopen, z, [HAVE_ZLIB=yes], [HAVE_ZLIB=no])
LIBS=$save_LIBS
AC_SEARCH_LIBS(BZ2_bzopen, bz2, [HAVE_BZIP2=yes], [HAVE_BZIP2=no])
LIBS=$save_LIBS

AM_CONDITIONAL([HAVE_ZLIB], [test "$HAVE_ZLIB" = yes])
AM_CONDITIONAL([HAVE_BZIP2], [test "$HAVE_BZIP2" = yes])

dnl versioning info for libtool
dnl Note this is the ABI version which is not the same as our actual library version
CODEBLOCKS_CURRENT=0
CODEBLOCKS_REVISION=1
CODEBLOCKS_AGE=0
CODEBLOCKS_VERSION_INFO=$CODEBLOCKS_CURRENT:$CODEBLOCKS_REVISION:$CODEBLOCKS_AGE
AC_SUBST(CODEBLOCKS_VERSION_INFO)

AM_MISSING_PROG(AMTAR, tar)
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
                             [_AM_PROG_TAR([v7])])])

CODEBLOCKS_GET_PLATFORM
CODEBLOCKS_ENABLE_SETTINGS

AM_OPTIONS_WXCONFIG
AM_PATH_WXCONFIG(2.8.8, wxWin=1)
        if test "$wxWin" != 1; then
        AC_MSG_ERROR([
                wxWidgets must be installed on your system.

                Please check that wx-config is in path, the directory
                where wxWidgets libraries are installed (returned by
                'wx-config --libs' or 'wx-config --static --libs' command)
                is in LD_LIBRARY_PATH or equivalent variable and
                wxWindows version is 2.8.0 or above.
                ])
	else
		# check for wx2.8.3 which is known to behave badly for us
		if test "$WX_VERSION" = "2.8.3"; then
			AC_MSG_ERROR([
		wxWidgets version 2.8.3 is known to behave badly with
		Code::Blocks. Please upgrade to a newer (or downgrade to an
		earlier) wxWidgets version...
			])
		fi
        fi

dnl		CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS"
dnl		CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY"
dnl		CFLAGS="$CFLAGS $WX_CFLAGS_ONLY"
dnl		LIBS="$LIBS $WX_LIBS"

AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(LIBS)

WX_GTK2_CFLAGS=
WX_GTK2_LIBS=
WX_X11_CFLAGS=
WX_X11_LIBS=

dnl default value is to (silently) do nothing in the makefile
POSTLINK_COMMAND="@true"
MACSETFILE="@true"

AC_MSG_CHECKING(for wxWidgets platform)
WX_BASENAME=`$WX_CONFIG_WITH_ARGS --basename`
case $WX_BASENAME in
    *wx_gtk*)
        AC_MSG_RESULT(wxGTK)
		dnl
		dnl pkg-config no longer needed by debugger plugin
		dnl but is needed by others
		dnl
		dnl only do this if it is really needed
		dnl AM_CONDITIONAL adds _TRUE and _FALSE to the appropriate variables
		dnl if the condition is true, the *_TRUE variable is empty (!)
		if test "x$BUILD_FILEMANAGER_TRUE" = "x" -o \
				"x$BUILD_SPELLCHECKER_TRUE" = "x" -o \
				"x$BUILD_MOUSESAP_TRUE" = "x" -o \
				"x$GTK_NOTEBOOK_TRUE" = "x" ; then

			AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes, no)

			ifdef([PKG_CHECK_MODULES],[],[
				define([PKG_CHECK_MODULES],
				[ echo "You don't have pkg.m4 properly installed" >&2
					exit 1
				])
			])

            dnl acoording to pkg-config's manpage this call is bsolutely needed:
            dnl
            dnl "Note that if there is a possibility the first call to
            dnl PKG_CHECK_MODULES might not happen, you should be sure
            dnl to include an explicit call to PKG_PROG_PKG_CONFIG"
			PKG_PROG_PKG_CONFIG

			if test "x$BUILD_SPELLCHECKER_TRUE" = "x" ; then
				if test "x$HAVE_PKG_CONFIG" = "xyes"; then
					PKG_CHECK_MODULES([HUNSPELL], [hunspell])
				fi
			fi

			if test "x$BUILD_MOUSESAP_TRUE" = "x"  -o \
					"x$GTK_NOTEBOOK_TRUE" = "x" ; then
				if test "x$HAVE_PKG_CONFIG" = "xyes"; then
					PKG_CHECK_MODULES([GTK2], [gtk+-2.0 >= 2.0.0])
				fi
			fi

			if test "x$BUILD_FILEMANAGER_TRUE" = "x" ; then
				if test "x$HAVE_PKG_CONFIG" = "xyes"; then
					PKG_CHECK_MODULES([GAMIN], [gamin])
				fi
			fi

    	fi

		dnl
		dnl Check whether the necessary boost-headers are installed
		dnl a little hacky, but it seems there is no common macro-library
		dnl to check for boost
		dnl If anybody knows a better way, feel free to change it
		if test "x$BUILD_NASSISHNEIDERMAN_TRUE" = "x" ; then
			AC_LANG_PUSH([C++])
            AC_CHECK_HEADER([boost/spirit/include/classic.hpp],[],[AC_MSG_ERROR([needed boost headers not found or not usable])])
			AC_LANG_POP([C++])
        fi


		CB_GAMIN_CFLAGS="$GAMIN_CFLAGS"
		CB_GAMIN_LIBS="$GAMIN_LIBS"
		CB_HUNSPELL_CFLAGS="$HUNSPELL_CFLAGS"
		CB_HUNSPELL_LIBS="$HUNSPELL_LIBS"
        WX_GTK2_CFLAGS="$GTK2_CFLAGS"
        WX_GTK2_LIBS="$GTK2_LIBS"
        AC_PATH_XTRA
        WX_X11_CFLAGS="`echo $X_CFLAGS | sed 's/ -INONE//'`"
        WX_X11_LIBS="`echo $X_LIBS | sed 's/ -LNONE//' | sed 's/ -RNONE//'`"
        if test "$no_x" != yes; then
            WX_X11_LIBS="$WX_X11_LIBS -lX11 $X_EXTRA_LIBS"
        fi
    ;;
    *wx_msw*)
        AC_MSG_RESULT(wxMSW)
    ;;
    *wx_mac*)
        AC_MSG_RESULT(wxMac)
        AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
        POSTLINK_COMMAND="\$(REZ) -d __DARWIN__ -t APPL Carbon.r -o"
        AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
        MACSETFILE="\$(SETFILE)"
    ;;
    *)
        AC_MSG_RESULT(other)
    ;;
esac

AC_SUBST(WX_GTK2_CFLAGS)
AC_SUBST(WX_GTK2_LIBS)
AC_SUBST(CB_GAMIN_CFLAGS)
AC_SUBST(CB_GAMIN_LIBS)
AC_SUBST(CB_HUNSPELL_CFLAGS)
AC_SUBST(CB_HUNSPELL_LIBS)
AC_SUBST(WX_X11_CFLAGS)
AC_SUBST(WX_X11_LIBS)

AC_SUBST(POSTLINK_COMMAND)
AC_SUBST(MACSETFILE)

PLUGIN_WX_LIBS=

AC_MSG_CHECKING(if wxWidgets libraries are needed for plugins)
case `uname` in
    Darwin)
        AC_MSG_RESULT(yes)
        PLUGIN_WX_LIBS="$WX_LIBS"
    ;;
    *)
        AC_MSG_RESULT(no)
    ;;
esac

AC_SUBST(PLUGIN_WX_LIBS)

PIC_FLAGS=

AC_MSG_CHECKING(for PIC flags)
case `uname` in
    Solaris)
        if test "$GCC" = yes; then
            PIC_FLAGS="-fPIC -DPIC"
        else
            PIC_FLAGS="-KPIC -DPIC"
        fi
    ;;
    *)
        PIC_FLAGS="-fPIC -DPIC"
    ;;
esac
AC_MSG_RESULT($PIC_FLAGS)

CPPFLAGS="$CPPFLAGS -Ulinux -Uunix"
CXXFLAGS="$CXXFLAGS $PCH_FLAGS $PIC_FLAGS -fexceptions"
AC_SUBST(codeblocks_PCH_FLAGS, "$PCH_FLAGS")

dnl AM_PATH_GTK(1.2.7, ,
dnl             AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?),
dnl             gthread)

AM_CONDITIONAL([LINUX], [test `uname` = "Linux"])
AM_CONDITIONAL([DARWIN], [test `uname` = "Darwin"])

AC_MSG_NOTICE([Configuring Code::Blocks...])
AC_MSG_NOTICE(SVN revision SVN_REVISION (SVN_DATE))
AC_SUBST(REVISION, SVN_REV)
AC_SUBST(DATE, "SVN_DATE")

AC_CONFIG_FILES([Makefile
	src/Makefile
	src/base/Makefile
	src/base/tinyxml/Makefile
	src/build_tools/Makefile
	src/build_tools/autorevision/Makefile
	src/include/autorevision.h
	src/include/Makefile
	src/include/scripting/Makefile
	src/include/scripting/bindings/Makefile
	src/include/scripting/include/Makefile
	src/include/scripting/sqplus/Makefile
	src/include/scripting/sqstdlib/Makefile
	src/include/scripting/squirrel/Makefile
	src/include/tinyxml/Makefile
	src/sdk/Makefile
	src/sdk/wxpropgrid/Makefile
	src/sdk/scripting/Makefile
	src/sdk/scripting/bindings/Makefile
	src/sdk/scripting/squirrel/Makefile
	src/sdk/scripting/sqstdlib/Makefile
	src/sdk/scripting/sqplus/Makefile
	src/sdk/wxscintilla/Makefile
	src/sdk/resources/Makefile
	src/sdk/resources/lexers/Makefile
	src/src/resources/Makefile
	src/src/resources/icons/Makefile
	src/src/resources/images/Makefile
	src/src/resources/images/16x16/Makefile
	src/src/resources/images/settings/Makefile
	src/src/Makefile
	src/plugins/Makefile
	src/plugins/astyle/Makefile
	src/plugins/astyle/resources/Makefile
	src/plugins/autosave/Makefile
	src/plugins/classwizard/Makefile
	src/plugins/classwizard/resources/Makefile
	src/plugins/codecompletion/Makefile
	src/plugins/codecompletion/resources/Makefile
	src/plugins/compilergcc/Makefile
	src/plugins/compilergcc/depslib/Makefile
	src/plugins/compilergcc/depslib/src/Makefile
	src/plugins/compilergcc/resources/Makefile
	src/plugins/debuggergdb/Makefile
	src/plugins/debuggergdb/resources/Makefile
	src/plugins/debuggergdb/resources/images/Makefile
	src/plugins/debuggergdb/resources/images/16x16/Makefile
	src/plugins/defaultmimehandler/Makefile
	src/plugins/defaultmimehandler/resources/Makefile
	src/plugins/openfileslist/Makefile
	src/plugins/projectsimporter/Makefile
	src/plugins/projectsimporter/resources/Makefile
	src/plugins/scriptedwizard/Makefile
	src/plugins/scriptedwizard/resources/Makefile
	src/plugins/scriptedwizard/resources/arm/Makefile
	src/plugins/scriptedwizard/resources/avr/Makefile
	src/plugins/scriptedwizard/resources/c_file/Makefile
	src/plugins/scriptedwizard/resources/console/Makefile
	src/plugins/scriptedwizard/resources/d/Makefile
	src/plugins/scriptedwizard/resources/directx/Makefile
	src/plugins/scriptedwizard/resources/dll/Makefile
	src/plugins/scriptedwizard/resources/empty/Makefile
	src/plugins/scriptedwizard/resources/empty_file/Makefile
	src/plugins/scriptedwizard/resources/fltk/Makefile
	src/plugins/scriptedwizard/resources/fortran/Makefile
	src/plugins/scriptedwizard/resources/glfw/Makefile
	src/plugins/scriptedwizard/resources/glut/Makefile
	src/plugins/scriptedwizard/resources/gtk/Makefile
	src/plugins/scriptedwizard/resources/h_file/Makefile
	src/plugins/scriptedwizard/resources/irrlicht/Makefile
	src/plugins/scriptedwizard/resources/lf/Makefile
	src/plugins/scriptedwizard/resources/matlab_csf/Makefile
	src/plugins/scriptedwizard/resources/matlab_csf/files/Makefile
	src/plugins/scriptedwizard/resources/matlab_csf/lccstub/Makefile
	src/plugins/scriptedwizard/resources/ogre/Makefile
	src/plugins/scriptedwizard/resources/ogre/files/Makefile
	src/plugins/scriptedwizard/resources/opengl/Makefile
	src/plugins/scriptedwizard/resources/opengl/files_unix/Makefile
	src/plugins/scriptedwizard/resources/opengl/files_win/Makefile
	src/plugins/scriptedwizard/resources/plugins/Makefile
	src/plugins/scriptedwizard/resources/plugins/templates/Makefile
	src/plugins/scriptedwizard/resources/ppc/Makefile
	src/plugins/scriptedwizard/resources/qt4/Makefile
	src/plugins/scriptedwizard/resources/qt4/files/Makefile
	src/plugins/scriptedwizard/resources/sdl/Makefile
	src/plugins/scriptedwizard/resources/sdl/files/Makefile
	src/plugins/scriptedwizard/resources/sfml/Makefile
	src/plugins/scriptedwizard/resources/sfml/files/Makefile
	src/plugins/scriptedwizard/resources/sharedlib/Makefile
	src/plugins/scriptedwizard/resources/sharedlib/c/Makefile
	src/plugins/scriptedwizard/resources/sharedlib/cpp/Makefile
	src/plugins/scriptedwizard/resources/smartwin/Makefile
	src/plugins/scriptedwizard/resources/smartwin/files/Makefile
	src/plugins/scriptedwizard/resources/staticlib/Makefile
	src/plugins/scriptedwizard/resources/staticlib/files/Makefile
	src/plugins/scriptedwizard/resources/stlport/Makefile
	src/plugins/scriptedwizard/resources/stlport/files/Makefile
	src/plugins/scriptedwizard/resources/sys/Makefile
	src/plugins/scriptedwizard/resources/tricore/Makefile
	src/plugins/scriptedwizard/resources/win32gui/Makefile
	src/plugins/scriptedwizard/resources/wxwidgets/Makefile
	src/plugins/todo/Makefile
	src/plugins/todo/resources/Makefile
	src/plugins/abbreviations/Makefile
	src/plugins/abbreviations/resources/Makefile
	src/plugins/xpmanifest/Makefile
	src/plugins/contrib/Makefile
	src/plugins/contrib/AutoVersioning/Makefile
	src/plugins/contrib/BrowseTracker/Makefile
	src/plugins/contrib/byogames/Makefile
	src/plugins/contrib/Cccc/Makefile
	src/plugins/contrib/Cccc/resources/Makefile
	src/plugins/contrib/CppCheck/Makefile
	src/plugins/contrib/CppCheck/resources/Makefile
	src/plugins/contrib/cb_koders/Makefile
	src/plugins/contrib/codesnippets/Makefile
	src/plugins/contrib/codesnippets/resources/Makefile
	src/plugins/contrib/codestat/Makefile
	src/plugins/contrib/codestat/resources/Makefile
	src/plugins/contrib/copystrings/Makefile
	src/plugins/contrib/Cscope/Makefile
	src/plugins/contrib/devpak_plugin/Makefile
	src/plugins/contrib/devpak_plugin/bzip2/Makefile
	src/plugins/contrib/DoxyBlocks/Makefile
	src/plugins/contrib/DoxyBlocks/images/Makefile
	src/plugins/contrib/DoxyBlocks/images/16x16/Makefile
	src/plugins/contrib/dragscroll/Makefile
	src/plugins/contrib/EditorTweaks/Makefile
	src/plugins/contrib/envvars/Makefile
	src/plugins/contrib/FileManager/Makefile
	src/plugins/contrib/headerfixup/Makefile
	src/plugins/contrib/help_plugin/Makefile
	src/plugins/contrib/help_plugin/bzip2/Makefile
	src/plugins/contrib/help_plugin/zlib/Makefile
	src/plugins/contrib/keybinder/Makefile
	src/plugins/contrib/NassiShneiderman/Makefile
	src/plugins/contrib/profiler/Makefile
	src/plugins/contrib/profiler/resources/Makefile
	src/plugins/contrib/source_exporter/Makefile
	src/plugins/contrib/source_exporter/wxPdfDocument/Makefile
	src/plugins/contrib/SpellChecker/Makefile
	src/plugins/contrib/SpellChecker/wxspellchecker/Makefile
	src/plugins/contrib/symtab/Makefile
	src/plugins/contrib/symtab/resources/Makefile
	src/plugins/contrib/regex_testbed/Makefile
	src/plugins/contrib/ReopenEditor/Makefile
	src/plugins/contrib/ThreadSearch/Makefile
	src/plugins/contrib/ThreadSearch/resources/Makefile
	src/plugins/contrib/ThreadSearch/resources/images/Makefile
	src/plugins/contrib/ThreadSearch/resources/images/16x16/Makefile
	src/plugins/contrib/ThreadSearch/resources/images/22x22/Makefile
	src/plugins/contrib/ToolsPlus/Makefile
	src/plugins/contrib/ToolsPlus/Resources/Makefile
	src/plugins/contrib/Valgrind/Makefile
	src/plugins/contrib/Valgrind/resources/Makefile
	src/plugins/contrib/wxSmith/Makefile
	src/plugins/contrib/wxSmith/wxsmith.pc
	src/plugins/contrib/wxSmith/plugin/Makefile
	src/plugins/contrib/wxSmith/properties/Makefile
	src/plugins/contrib/wxSmith/wxwidgets/Makefile
	src/plugins/contrib/wxSmith/wxwidgets/properties/Makefile
	src/plugins/contrib/wxSmith/wxwidgets/defitems/Makefile
	src/plugins/contrib/wxSmith/wxwidgets/icons/Makefile
	src/plugins/contrib/wxSmithContribItems/Makefile
	src/plugins/contrib/wxSmithContribItems/wxsmith-contrib.pc
	src/plugins/contrib/wxSmithContribItems/wxchart/wxchart-1.0/Makefile
	src/plugins/contrib/wxSmithContribItems/wxflatnotebook/wxFlatNotebook/Makefile
	src/plugins/contrib/wxSmithContribItems/wxthings/wxthings/Makefile
	src/plugins/contrib/wxSmithAui/Makefile
	src/plugins/contrib/wxSmithAui/wxsmithaui.pc
	src/plugins/contrib/lib_finder/Makefile
	src/plugins/contrib/lib_finder/lib_finder/Makefile
	src/plugins/contrib/HexEditor/Makefile
	src/plugins/contrib/IncrementalSearch/Makefile
	src/plugins/contrib/MouseSap/Makefile
	src/mime/Makefile
	src/scripts/Makefile
	src/tools/Makefile
	src/tools/cb_share_config/Makefile
	src/tools/ConsoleRunner/Makefile
	src/tools/CBLauncher/Makefile
	src/templates/Makefile
	src/templates/common/Makefile
	src/templates/unix/Makefile
	src/templates/win32/Makefile
	src/wxsmith/Makefile
	codeblocks.pc
	codeblocks.spec
	codeblocks.plist
])

AC_OUTPUT

echo
echo
echo "*************************************************"
echo "* Code::Blocks source tree has been configured. *"
echo "*************************************************"
echo
echo "You can now build Code::Blocks by issuing 'make'".
echo "When the build is complete, become root and install"
echo "it by issuing 'make install'".
echo
