# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.71]) AC_INIT( [crosstool-NG], [m4_esyscmd_s([maintainer/git-version-gen --prefix crosstool-ng- .tarball-version])], [crossgcc@sourceware.org], [crosstool-ng], [http://crosstool-ng.org]) AC_CONFIG_AUX_DIR([scripts]) AC_CONFIG_MACRO_DIR([m4]) # FIXME try to use gnu strictness? Just add the missing files? # Set automake defaults: # - Tarballs are compressed with xz and bzip2 # - Object files are generated in a subdirectory (new default in automake) # - Request new tar format (old, tar-v7, breaks on long paths we have) AM_INIT_AUTOMAKE([-Wall -Werror foreign no-dist-gzip dist-xz dist-bzip2 subdir-objects tar-pax]) AM_SILENT_RULES([yes]) # To avoid stubbing autotools with missing script AM_MAINTAINER_MODE([enable]) # Safety check per autoconf best practices AC_CONFIG_SRCDIR([ct-ng.in]) #-------------------------------------------------------------------- # Allow dummy --{en,dis}able-{static,shared} AC_ARG_ENABLE([local], [AS_HELP_STRING([--enable-local], [run ct-ng from the current directory; 'make install' unsupported])]) AC_SUBST([enable_local], [${enable_local:-no}]) AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--enable-maintainer-mode], [Ignored; accepted to avoid a warning from debuild])]) AC_ARG_WITH([bash-completion], [AS_HELP_STRING([--with-bash-completion], [install bash(1) command completion; can specify a path where it will be installed])], [], [with_bash_completion=yes]) AS_IF([test "${with_bash_completion}" = "no"], [BASH_COMPLETION_DIR=], [test "${with_bash_completion}" != "yes"], [BASH_COMPLETION_DIR="${with_bash_completion}"], [BASH_COMPLETION_DIR='${datadir}/bash-completion/completions']) AM_CONDITIONAL([INSTALL_BASH_COMPLETION], [test -n "${BASH_COMPLETION_DIR}"]) AC_SUBST([BASH_COMPLETION_DIR]) # Check for --build and --host... AC_CANONICAL_BUILD AC_CANONICAL_HOST # ... but refuse --target AS_IF([test -n "$target_alias"], AC_MSG_ERROR([--target is not allowed])) # Allow program name tranformation (--program-{prefix,suffix,transform-name}) AC_ARG_PROGRAM AC_PROG_MKDIR_P AC_PROG_LN_S CTNG_PROG_INSTALL CTNG_WITH_DEPRECATED([grep], [GREP]) AC_ARG_VAR([GREP], [Specify the full path to GNU grep]) # This is not a typo! Prefer GNU grep on macOS if it is installed. CTNG_PATH_TOOL_REQ([GREP], [ggrep grep], [grep]) CTNG_PATH_TOOL_REQ([EGREP], [gegrep egrep], [egrep]) AC_PROG_GREP AC_PROG_EGREP # FIXME: ct-ng assumes this in many places... AS_IF([test "$EGREP" != "$GREP -E"], [AC_MSG_ERROR([egrep is not $GREP -E])]) CTNG_PROG_VERSION_REQ_STRICT([SED], [GNU sed >= 4.0], [sed], [gsed sed], [GNU sed[^0-9]* [4-9]\.]) AC_ARG_VAR([SED], [Specify the full path to GNU sed]) AC_CONFIG_HEADERS([config.h]) # Modern GCC/GDB releases require C++ support in the compiler AC_PROG_CC # Add for legacy reasons (automake < 1.14) AM_PROG_CC_C_O AC_PROG_CXX AC_PROG_CPP AC_PROG_LEX([noyywrap]) AX_PROG_BISON AS_IF([test -z "$CC" -o -z "$CXX"], [AC_MSG_ERROR([no suitable compiler found])]) AX_CXX_COMPILE_STDCXX([11],, [optional]) CTNG_SET_KCONFIG_OPTION([has_cxx11], [${HAVE_CXX11}]) # Check to see if the compiler can link statically AC_MSG_CHECKING([if $CC can static link]) echo "int main() {}" | ${CC} -static -o /dev/null -xc - > /dev/null 2>&1 static_test=$? AS_IF([test $static_test -eq 0], [static_link=y AC_MSG_RESULT([yes])], [test $static_test -ne 0], [static_link= AC_MSG_RESULT([no])]) CTNG_SET_KCONFIG_OPTION([static_link]) AC_PROG_RANLIB CTNG_PATH_TOOL_REQ([OBJCOPY], [gobjcopy objcopy], [objcopy]) CTNG_PATH_TOOL_REQ([OBJDUMP], [gobjdump objdump], [objdump]) CTNG_PATH_TOOL_REQ([READELF], [greadelf readelf], [readelf]) CTNG_CHECK_PROGS_REQ([flex], [flex]) CTNG_CHECK_PROGS_REQ([makeinfo], [makeinfo]) CTNG_CHECK_PROGS_REQ([cut], [cut]) CTNG_CHECK_PROGS_REQ([readlink], [readlink]) CTNG_CHECK_PROGS_REQ([tar], [tar]) CTNG_CHECK_PROGS_REQ([gzip], [gzip]) CTNG_CHECK_PROGS_REQ([bzip2], [bzip2]) CTNG_CHECK_PROGS_REQ([xz], [xz]) CTNG_CHECK_PROGS_REQ([unzip], [unzip]) CTNG_CHECK_PROGS_REQ([help2man], [help2man]) CTNG_CHECK_PROGS_REQ([file], [file]) CTNG_CHECK_PROGS_REQ([which], [which]) # Lzip is optional; all the packages that provide tarballs in .tar.lz format # also provide them in some other format. All other formats are currently # mandatory as there is at least one package that has no fallback for each # of them. # FIXME: this configure.ac should be only used for detecting the dependencies # of the ct-ng framework itself; anything needed at build time should be # determined by crosstool-NG.sh - perhaps, through another 'configure' that # runs during `ct-ng build`. AC_CHECK_PROGS([lzip], [lzip]) CTNG_SET_KCONFIG_OPTION([lzip]) AC_SUBST([lzip]) # Not a fatal failure even if we have neither - the tarballs may # be provided in a local directory. AC_CHECK_PROGS([wget], [wget]) CTNG_SET_KCONFIG_OPTION([wget]) AC_SUBST([wget]) AC_CHECK_PROGS([curl], [curl]) CTNG_SET_KCONFIG_OPTION([curl]) AC_SUBST([curl]) AC_CHECK_PROGS([meson], [meson]) CTNG_SET_KCONFIG_OPTION([meson]) AC_SUBST([meson]) AC_CHECK_PROGS([ninja], [ninja]) CTNG_SET_KCONFIG_OPTION([ninja]) AC_SUBST([ninja]) AC_CHECK_PROGS([rsync], [rsync]) CTNG_SET_KCONFIG_OPTION([rsync]) AC_SUBST([rsync]) CTNG_CPU_COUNT CTNG_PATH_TOOL_REQ([PATCH], [gpatch patch], [patch]) # Ensure the detected patch supports --no-backup-if-mismatch (BSD patch does not) AC_MSG_CHECKING([whether patch supports --no-backup-if-mismatch]) AS_IF([$PATCH --no-backup-if-mismatch /dev/null 2>&1], AC_MSG_RESULT([yes]), AC_MSG_ERROR([$PATCH does not support --no-backup-if-mismatch])) # We need a bash that is >= 3.1 CTNG_PROG_VERSION_REQ_STRICT([BASH_SHELL], [GNU bash >= 3.1], [bash], [bash], [^GNU bash, version (3\.[1-9]|4|5)]) # We need a awk that *is* GNU awk CTNG_PROG_VERSION_REQ_STRICT([AWK], [GNU awk], [awk], [gawk awk], [^GNU Awk ]) # FIXME This checks for tools at the time configure runs. If a tool is later updated # to satisfy our version requirement, we still won't be able to see that. Or worse, # downgraded/removed. We should check this and update configure.in options right # before running kconfig. Our configure should only check for stuff needed to # build/install crosstool-ng itself. #---------------------------------------- # Check for GNU make (want 3.81 or above, but will accept as long as any make is found) CTNG_PROG_VERSION_REQ_ANY([MAKE], [GNU make >= 3.81], [make], [gmake make], [^GNU Make (3\.8[1-9]|3\.9[0-9]|[4-9]\.)], [make_3_81_or_newer]) CTNG_PROG_VERSION_REQ_ANY([MAKE], [GNU make >= 4.0], [make], [gmake make], [^GNU Make [4-9]\.], [make_4_0_or_newer]) # Check other companion tools that we may or may not build. CTNG_PROG_VERSION_REQ_ANY([LIBTOOL], [GNU libtool >= 2.4], [libtool], [glibtool libtool], [\(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])], [libtool_2_4_or_newer]) CTNG_PROG_VERSION_REQ_ANY([LIBTOOLIZE], [GNU libtoolize >= 2.4], [libtoolize], [glibtoolize libtoolize], [\(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])], [libtoolize_2_4_or_newer]) CTNG_PROG_VERSION([AUTOCONF], [GNU autoconf >= 2.71], [autoconf], [autoconf], [\(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[5-9])], [autoconf_2_71_or_newer]) CTNG_PROG_VERSION([AUTORECONF], [GNU autoreconf >= 2.71], [autoreconf], [autoreconf], [\(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[5-9])], [autoreconf_2_71_or_newer]) CTNG_PROG_VERSION([AUTOMAKE], [GNU automake >= 1.16], [automake], [automake], [\(GNU automake\) ([2-9]\.|1\.[2-9][0-9]|1\.1[5-9])], [automake_1_16_or_newer]) CTNG_PROG_VERSION([M4], [GNU m4 >= 1.4.12], [m4], [gm4 m4], [\(GNU M4\) ([2-9]\.|1\.[5-9]|1\.[1-4][0-9]|1\.4\.[2-9][0-9]|1\.4\.1[2-9])], [gnu_m4_1_4_12_or_newer]) # Check for Python CTNG_PYTHON # Check for Python 3.4 or newer CTNG_PYTHON_VERSION([3],[4]) CTNG_PROG_VERSION_REQ_ANY([BISON], [bison >= 2.7], [bison], [bison], [\(GNU Bison\) (2\.[7-9]|2\.[1-9][0-9]|[3-9]\.)], [bison_2_7_or_newer]) CTNG_PROG_VERSION_REQ_ANY([BISON], [bison >= 3.0.4], [bison], [bison], [\(GNU Bison\) (3\.0\.[4-9]|3\.[1-9]|[4-9]\.)], [bison_3_0_4_or_newer]) AC_SUBST([kconfig_options]) AC_CHECK_PROGS([dtc], [dtc]) CTNG_SET_KCONFIG_OPTION([dtc]) AC_CHECK_PROGS([cvs], [cvs]) CTNG_SET_KCONFIG_OPTION([cvs]) AC_CHECK_PROGS([svn], [svn]) CTNG_SET_KCONFIG_OPTION([svn]) AC_CHECK_PROGS([git], [git]) CTNG_SET_KCONFIG_OPTION([git]) # Check which tools we have for verifying the digest AC_PATH_PROGS([md5sum], [gmd5sum md5sum]) AC_PATH_PROGS([sha1sum], [gsha1sum sha1sum]) AC_PATH_PROGS([sha256sum], [gsha256sum sha256sum]) AC_PATH_PROGS([sha512sum], [gsha512sum sha512sum]) CTNG_SET_KCONFIG_OPTION([md5sum]) CTNG_SET_KCONFIG_OPTION([sha1sum]) CTNG_SET_KCONFIG_OPTION([sha256sum]) CTNG_SET_KCONFIG_OPTION([sha512sum]) # FIXME why checking if not using the result? We don't provide replacemant malloc/alloca/... AC_C_INLINE AC_FUNC_MALLOC AC_FUNC_REALLOC AC_FUNC_ALLOCA AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.19.7]) # For now, curses are needed to build kconfig. We may support a command-line # only configuration without curses later. For now, fail in configure but # consider it ok in config.h. AX_WITH_CURSES AS_IF([test "x$ax_cv_curses" != "xyes" ], [AC_MSG_ERROR([curses library not found])]) AX_WITH_CURSES_PANEL AS_IF([test "x$ax_cv_panel" != "xyes" ], [AC_MSG_ERROR([panel library not found])]) AX_WITH_CURSES_MENU AS_IF([test "x$ax_cv_menu" != "xyes" ], [AC_MSG_ERROR([menu library not found])]) AH_BOTTOM([ /* Select the correct curses/menu/panel headers */ #if defined HAVE_NCURSESW_CURSES_H # define CURSES_LOC #elif defined HAVE_NCURSESW_H # define CURSES_LOC #elif defined HAVE_NCURSES_CURSES_H # define CURSES_LOC #elif defined HAVE_NCURSES_H # define CURSES_LOC #elif defined HAVE_CURSES_H # define CURSES_LOC #else # /* not an error - maybe a configuration didn't need curses */ #endif #if defined HAVE_NCURSESW_PANEL_H # define PANEL_LOC #elif defined HAVE_NCURSES_PANEL_H # define PANEL_LOC #elif defined HAVE_PANEL_H # define PANEL_LOC #else # /* not an error */ #endif #if defined HAVE_NCURSESW_MENU_H # define MENU_LOC #elif defined HAVE_NCURSES_MENU_H # define MENU_LOC #elif defined HAVE_MENU_H # define MENU_LOC #else # /* not an error */ #endif ]) AX_BUILD_DATE_EPOCH(DATE, [%c]) AC_SUBST([DATE]) AM_CONDITIONAL([INSTALL_USER_MANUAL], [test ! -f "${srcdir}/docs/MANUAL_ONLINE"]) AC_MSG_CHECKING([if the manual needs to be installed]) AM_COND_IF([INSTALL_USER_MANUAL], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_CONFIG_FILES([ Makefile paths.sh kconfig/Makefile config/configure.in ]) AC_OUTPUT