diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..c0507a6 --- /dev/null +++ b/configure.ac @@ -0,0 +1,313 @@ +# Process this file with autoconf to produce a configure script. + +# +# autoconf setup +# +AC_PREREQ(2.53) +AC_INIT([yasm], + m4_esyscmd([./YASM-VERSION-GEN.sh && tr -d '\n' <YASM-VERSION-FILE]), + [bug-yasm@tortall.net]) +#AC_CONFIG_SRCDIR([src/main.c]) +AC_CONFIG_AUX_DIR(config) +AC_CONFIG_HEADER([config.h]) + +AM_INIT_AUTOMAKE([1.9.6 foreign]) +AM_MAINTAINER_MODE + +# +# autoconf command-line options +# +AC_ARG_ENABLE(debug, +AC_HELP_STRING([--enable-debug], + [Turn on debugging and compile time warnings]), +[case "${enableval}" in + yes) debugging="yes" ;; + no) debugging="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; +esac]) + +AC_ARG_ENABLE(warnerror, +AC_HELP_STRING([--enable-warnerror],[Treat GCC warnings as errors]), +[case "${enableval}" in + yes) warnerror="yes" ;; + no) warnerror="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-warnerror]) ;; +esac]) + +AC_ARG_ENABLE(profiling, +AC_HELP_STRING([--enable-profiling],[Enable profiling (requires GCC)]), +[case "${enableval}" in + yes) profiling="yes" ;; + no) profiling="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-profiling]) ;; +esac]) + +AC_ARG_ENABLE(gcov, +AC_HELP_STRING([--enable-gcov],[Enable gcov code coverage (requires GCC)]), +[case "${enableval}" in + yes) gcov="yes" ;; + no) gcov="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-gcov]) ;; +esac]) + +AC_ARG_ENABLE(python, +AC_HELP_STRING([--enable-python],[Enable Python-requiring portions of build]), +[case "${enableval}" in + yes) enable_python="yes" ;; + no) enable_python="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-python]) ;; +esac], enable_python="auto") + +AC_ARG_ENABLE(python-bindings, +AC_HELP_STRING([--enable-python-bindings],[Build Python bindings]), +[case "${enableval}" in + yes) enable_python_bindings="yes" ;; + no) enable_python_bindings="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-python-bindings]) ;; +esac], enable_python_bindings="no") + +# +# Checks for programs. +# +AC_PROG_CPP +AC_PROG_CC_STDC +AC_PROG_INSTALL +AC_PROG_LN_S +#automake default ARFLAGS to "cru" +AC_CHECK_TOOLS(AR,[$AR ar],[ar]) +AC_PROG_RANLIB + +# REQUIRE a standard (ANSI/ISO) C compiler +if test "$ac_cv_prog_cc_stdc" = no; then + AC_MSG_ERROR([A standard (ANSI/ISO C89) C compiler is required.]) +fi + +# Check for xmlto (for rendering manpages, needed only for development) +AC_CHECK_PROGS([XMLTO], [$XMLTO xmlto], [:]) +if test "$XMLTO" = ":"; then + AC_MSG_WARN([xmlto not found, manpages will not be rebuilt.]) +fi +AM_CONDITIONAL(BUILD_MAN, test "$XMLTO" != ":") + +# Check for compiler output filename suffixes. +AC_OBJEXT +AC_EXEEXT + +# +# Checks for libraries. +# +AM_WITH_DMALLOC + +# +# Checks for header files. +# +AC_HEADER_STDC +AC_CHECK_HEADERS([strings.h libgen.h unistd.h direct.h sys/stat.h]) + +# REQUIRE standard C headers +if test "$ac_cv_header_stdc" != yes; then + AC_MSG_ERROR([Standard (ANSI/ISO C89) header files are required.]) +fi + +# +# Checks for typedefs, structures, and compiler characteristics. +# +AC_C_CONST +AC_C_INLINE +AC_C_PROTOTYPES +AC_TYPE_SIZE_T +AX_CREATE_STDINT_H([libyasm-stdint.h]) + +# +# Checks for library functions. +# +AC_CHECK_FUNCS([abort toascii vsnprintf]) +AC_CHECK_FUNCS([strsep mergesort getcwd]) +AC_CHECK_FUNCS([popen ftruncate]) +# Look for the case-insensitive comparison functions +AC_CHECK_FUNCS([strcasecmp strncasecmp stricmp _stricmp strcmpi]) + +# +# Check for gettext() and other i18n/l10n things. +# +ALL_LINGUAS="" +AM_GNU_GETTEXT([external]) +# autoheader templates for AM_GNU_GETTEXT checks. +AH_TEMPLATE([ENABLE_NLS], []) +AH_TEMPLATE([HAVE_CATGETS], []) +AH_TEMPLATE([HAVE_GETTEXT], []) +AH_TEMPLATE([HAVE_LC_MESSAGES], []) +AH_TEMPLATE([HAVE_STPCPY], []) + +# Check for GNU C Library +AH_TEMPLATE([HAVE_GNU_C_LIBRARY], [Define to 1 if you have the GNU C Library]) +AC_CACHE_CHECK([for GNU C Library], yasm_cv_header_gnulib, + AC_EGREP_CPP(gnulib, + [#include <features.h> + #ifdef __GNU_LIBRARY__ + gnulib + #endif + ], yasm_cv_header_gnulib=yes, yasm_cv_header_gnulib=no)) +if test "$yasm_cv_header_gnulib" = yes; then + AC_DEFINE([HAVE_GNU_C_LIBRARY]) +fi + +# Force x86 architecture only for now. +ARCH=x86 +AC_SUBST([ARCH]) +AC_SUBST([GCC]) + +# Require things for --enable-maintainer-mode option. +if test "$USE_MAINTAINER_MODE" = "yes"; then + # Enable debugging + if test "$debugging" != "no"; then + debugging=yes + fi + + # Enable more warnings + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -W" + MORE_CFLAGS="$MORE_CFLAGS -Waggregate-return" + MORE_CFLAGS="$MORE_CFLAGS -Wbad-function-cast" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-align" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-qual" + MORE_CFLAGS="$MORE_CFLAGS -Wchar-subscripts" +# MORE_CFLAGS="$MORE_CFLAGS -Wconversion" +# MORE_CFLAGS="$MORE_CFLAGS -Wdeclaration-after-statement" +# MORE_CFLAGS="$MORE_CFLAGS -Wendif-labels" + MORE_CFLAGS="$MORE_CFLAGS -Winline" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-declarations" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wnested-externs" + MORE_CFLAGS="$MORE_CFLAGS -Wpointer-arith" + MORE_CFLAGS="$MORE_CFLAGS -Wreturn-type" + MORE_CFLAGS="$MORE_CFLAGS -Wshadow" + MORE_CFLAGS="$MORE_CFLAGS -Wsign-compare" + MORE_CFLAGS="$MORE_CFLAGS -Wstrict-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wswitch" + MORE_CFLAGS="$MORE_CFLAGS -Wwrite-strings" + MORE_CFLAGS="$MORE_CFLAGS -Wno-undef" +# MORE_CFLAGS="$MORE_CFLAGS -Wno-unused" + MORE_CFLAGS="$MORE_CFLAGS -Wno-unused-parameter" + fi +fi + +# +# Add some more CFLAGS for various options. +# + +if test "$debugging" = "no" ; then + changequote(,) + CFLAGS="`echo $CFLAGS' ' | sed -e 's/-g[0-9] //g' | sed -e 's/-g//g'`" + changequote([,]) +fi + +# Turn warnings into errors +if test "$warnerror" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -Werror" + fi +fi + +# Enable output of profiling information +if test "$profiling" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -pg" + fi +fi + +# Enable output of gcov information +if test "$gcov" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -fprofile-arcs -ftest-coverage" + fi +fi + +# If we're using GCC, then we can turn on -ansi -pedantic -Wall too. +if test "$USE_MAINTAINER_MODE" = "yes"; then + if test "$GCC" = yes; then + MORE_CFLAGS="-ansi -pedantic -Wall $MORE_CFLAGS" + fi +fi +AC_SUBST(MORE_CFLAGS) + +AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler]) +AC_ARG_VAR(CCLD_FOR_BUILD,[build system C linker frontend]) +if test "${build}" != "${host}" ; then + CC_FOR_BUILD=${CC_FOR_BUILD-cc} + CCLD_FOR_BUILD=${CCLD_FOR_BUILD-cc} +else + CC_FOR_BUILD="\$(CC)" + CCLD_FOR_BUILD="\$(CC)" +fi +AC_SUBST(CC_FOR_BUILD) +AC_SUBST(CCLD_FOR_BUILD) + +AC_ARG_VAR(CPP_FOR_HOST,[host system C preprocessor]) +if test "$build" != "$target" || test "$build" != "$host"; then + CPP_PROG="${CPP_FOR_HOST-cc -E}" +else + CPP_PROG="${CPP}" +fi +AC_DEFINE_UNQUOTED([CPP_PROG], "${CPP_PROG}", [Command name to run C preprocessor]) + +# Detect if we have Python +if test x$enable_python = xno; then + have_python=no +else + AC_MSG_NOTICE([Checking for Python]) + have_python=no + AM_PATH_PYTHON(2.4,[],[AC_MSG_WARN([Python not found])]) + + if test -z "$PYTHON" || test "$PYTHON" = : ; then + have_python=no + else + have_python=yes + fi + + if test x$have_python = xno ; then + if test x$enable_python = xyes ; then + AC_MSG_ERROR([Python explicitly requested, but a suitable Python version was not found]) + else + AC_MSG_WARN([Could not find a suitable version of Python]) + fi + fi +fi + +# Detect if we can build Python bindings +# (needs Python, Python headers, and Cython) +if test x$enable_python_bindings = xno; then + have_python_bindings=no +else + AC_MSG_NOTICE([Checking to see if we can build Python bindings]) + have_python_bindings=no + if test x$have_python = xyes; then + AC_MSG_CHECKING([for Cython >= 0.11.3]) + CYTHON_CHECK_VERSION(0.11.3, [AC_MSG_RESULT(yes) + have_cython=yes], + [AC_MSG_RESULT(no) + have_cython=no]) + + AM_CHECK_PYTHON_HEADERS(have_python_headers=yes,have_python_headers=no) + + if test x$have_cython = xyes -a x$have_python_headers = xyes ; then + have_python_bindings=yes + fi + fi + + if test x$have_python_bindings = xno ; then + if test x$enable_python_bindings = xyes ; then + AC_MSG_ERROR([Building Python bindings explicitly requested, but can't build Python bindings because either Cython, Python headers or a suitable Python version was not found]) + else + AC_MSG_WARN([Couldn't find either Cython, the Python headers or a suitable version of Python, not building Python bindings]) + fi + fi +fi + +AM_CONDITIONAL(HAVE_PYTHON, test x$have_python = xyes) +AM_CONDITIONAL(HAVE_PYTHON_BINDINGS, test x$have_python_bindings = xyes) + +AC_CONFIG_FILES([Makefile + po/Makefile.in +]) +AC_OUTPUT |