e61d43791e
The following adjusts libgm2 to properly use the multilib build infrastructure, thereby fixing the install with --enable-version-specific-runtime-libs In particular config-ml.pl needs to be applied to generated Makefiles as documented in the manual and we have to avoid clobbering the variables via make arguments. The explicit install rules used different ways to construct the multilib dir which isn't necessary and breaks when MUTLIDIR is now finally set correctly. Instead use $(toolexeclibdir). This results in some dead variables in the Makefile.am (and there were some before), I refrained from doing even more changes here. Verified with an install with and without --enable-version-specific-runtime-libs and checking the result. PR modula2/108144 libgm2/ * configure.ac: Apply config-ml.pl to the generated Makefiles. Set multilib_arg, use AM_PROG_LIBTOOL. * configure: Regenerate. * Makefile.am (AM_MAKEFLAGS): Do not override MULTI* flags. * Makefile.in: Regenerate. * libm2cor/Makefile.am: Install to $(toolexeclibdir)$(M2LIBDIR) rather than $(inst_libdir)/$(MULTIDIR)$(M2LIBDIR). * libm2iso/Makefile.am: Likewise. * libm2log/Makefile.am: Likewise. * libm2min/Makefile.am: Likewise. * libm2pim/Makefile.am: Likewise. * libm2cor/Makefile.in: Regenerate. * libm2iso/Makefile.in: Likewise. * libm2log/Makefile.in: Likewise. * libm2min/Makefile.in: Likewise. * libm2pim/Makefile.in: Likewise.
411 lines
12 KiB
Plaintext
411 lines
12 KiB
Plaintext
# Configure script for libgm2.
|
|
# Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
|
|
|
# This file is part of GCC.
|
|
|
|
# GCC is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3, or (at your option)
|
|
# any later version.
|
|
|
|
# GCC is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with GCC; see the file COPYING3. If not see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
# Configure looks for the existence of this file to auto-config each language.
|
|
# We define several parameters used by configure:
|
|
|
|
# Process this file with autoreconf to produce a configure script.
|
|
|
|
AC_INIT(package-unused, version-unused,,libgm2)
|
|
AC_CONFIG_SRCDIR(Makefile.am)
|
|
# AC_CONFIG_MACRO_DIR([config])
|
|
AC_CONFIG_HEADER(config.h)
|
|
|
|
libtool_VERSION=18:0:0
|
|
AC_SUBST(libtool_VERSION)
|
|
|
|
AM_ENABLE_MULTILIB(, ..)
|
|
|
|
GCC_NO_EXECUTABLES
|
|
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
|
|
# Do not delete or change the following two lines. For why, see
|
|
# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
|
|
AC_CANONICAL_SYSTEM
|
|
target_alias=${target_alias-$host_alias}
|
|
AC_SUBST(target_alias)
|
|
|
|
AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
|
|
|
|
AH_TEMPLATE(PACKAGE, [Name of package])
|
|
AH_TEMPLATE(VERSION, [Version number of package])
|
|
|
|
AC_ARG_WITH(cross-host,
|
|
[ --with-cross-host=HOST Configuring with a cross compiler])
|
|
|
|
# Checks for header files.
|
|
AC_HEADER_STDC
|
|
AC_HEADER_SYS_WAIT
|
|
AC_CHECK_HEADER([math.h],
|
|
[AC_DEFINE([HAVE_MATH_H], [1], [have math.h])])
|
|
|
|
AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h \
|
|
time.h \
|
|
fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \
|
|
sys/resource.h sys/param.h sys/times.h sys/stat.h \
|
|
sys/socket.h \
|
|
sys/wait.h sys/ioctl.h errno.h sys/errno.h \
|
|
pwd.h direct.h dirent.h signal.h malloc.h langinfo.h \
|
|
pthread.h stdarg.h stdio.h sys/types.h termios.h \
|
|
netinet/in.h netdb.h sys/uio.h sys/stat.h wchar.h)
|
|
|
|
|
|
AC_CANONICAL_HOST
|
|
ACX_NONCANONICAL_HOST
|
|
ACX_NONCANONICAL_TARGET
|
|
GCC_TOPLEV_SUBDIRS
|
|
|
|
AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
|
|
AC_ARG_ENABLE(version-specific-runtime-libs,
|
|
[ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ],
|
|
[case "$enableval" in
|
|
yes) version_specific_libs=yes ;;
|
|
no) version_specific_libs=no ;;
|
|
*) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
|
|
esac],
|
|
[version_specific_libs=no])
|
|
AC_MSG_RESULT($version_specific_libs)
|
|
|
|
AC_ARG_WITH(slibdir,
|
|
[ --with-slibdir=DIR shared libraries in DIR [LIBDIR]],
|
|
slibdir="$with_slibdir",
|
|
if test "${version_specific_libs}" = yes; then
|
|
slibdir='$(libsubdir)'
|
|
elif test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then
|
|
slibdir='$(exec_prefix)/$(host_noncanonical)/lib'
|
|
else
|
|
slibdir='$(libdir)'
|
|
fi)
|
|
AC_SUBST(slibdir)
|
|
|
|
# Command-line options.
|
|
# Very limited version of AC_MAINTAINER_MODE.
|
|
AC_ARG_ENABLE([maintainer-mode],
|
|
[AC_HELP_STRING([--enable-maintainer-mode],
|
|
[enable make rules and dependencies not useful (and
|
|
sometimes confusing) to the casual installer])],
|
|
[case ${enable_maintainer_mode} in
|
|
yes) MAINT='' ;;
|
|
no) MAINT='#' ;;
|
|
*) AC_MSG_ERROR([--enable-maintainer-mode must be yes or no]) ;;
|
|
esac
|
|
maintainer_mode=${enableval}],
|
|
[MAINT='#'])
|
|
AC_SUBST([MAINT])dnl
|
|
|
|
toolexecdir=no
|
|
toolexeclibdir=no
|
|
|
|
# Calculate toolexeclibdir
|
|
# Also toolexecdir, though it's only used in toolexeclibdir
|
|
case ${version_specific_libs} in
|
|
yes)
|
|
# Need the gcc compiler version to know where to install libraries
|
|
# and header files if --enable-version-specific-runtime-libs option
|
|
# is selected.
|
|
toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
|
|
toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
|
|
;;
|
|
no)
|
|
if test -n "$with_cross_host" &&
|
|
test x"$with_cross_host" != x"no"; then
|
|
# Install a library built with a cross compiler in tooldir, not libdir.
|
|
toolexecdir='$(exec_prefix)/$(target_noncanonical)'
|
|
toolexeclibdir='$(toolexecdir)/lib'
|
|
else
|
|
toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
|
|
toolexeclibdir='$(libdir)'
|
|
fi
|
|
multi_os_directory=`$CC -print-multi-os-directory`
|
|
case $multi_os_directory in
|
|
.) ;; # Avoid trailing /.
|
|
*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
AC_SUBST(toolexecdir)
|
|
AC_SUBST(toolexeclibdir)
|
|
|
|
AH_TEMPLATE(PACKAGE, [Name of package])
|
|
AH_TEMPLATE(VERSION, [Version number of package])
|
|
|
|
AM_MAINTAINER_MODE
|
|
|
|
# Check the compiler.
|
|
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
|
|
# We must force CC to /not/ be precious variables; otherwise
|
|
# the wrong, non-multilib-adjusted value will be used in multilibs.
|
|
# As a side effect, we have to subst CFLAGS ourselves.
|
|
|
|
m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
|
|
m4_define([_AC_ARG_VAR_PRECIOUS],[])
|
|
AC_PROG_CC
|
|
AC_PROG_CXX
|
|
AM_PROG_AS
|
|
m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
|
|
|
AC_SUBST(CFLAGS)
|
|
|
|
# In order to override CFLAGS_FOR_TARGET, all of our special flags go
|
|
# in XCFLAGS. But we need them in CFLAGS during configury. So put them
|
|
# in both places for now and restore CFLAGS at the end of config.
|
|
save_CFLAGS="$CFLAGS"
|
|
|
|
# Find other programs we need.
|
|
AC_CHECK_TOOL(AR, ar)
|
|
AC_CHECK_TOOL(NM, nm)
|
|
AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
|
|
AC_PATH_PROG(PERL, perl, perl-not-found-in-path-error)
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_INSTALL
|
|
|
|
AC_LIBTOOL_DLOPEN
|
|
AM_PROG_LIBTOOL
|
|
AC_SUBST(enable_shared)
|
|
AC_SUBST(enable_static)
|
|
|
|
if test "${multilib}" = "yes"; then
|
|
multilib_arg="--enable-multilib"
|
|
else
|
|
multilib_arg=
|
|
fi
|
|
|
|
AC_CHECK_TYPES([struct timezone, struct stat, struct timeval])
|
|
|
|
AC_LANG_C
|
|
# Check the compiler.
|
|
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
|
|
# We must force CC to /not/ be precious variables; otherwise
|
|
# the wrong, non-multilib-adjusted value will be used in multilibs.
|
|
# As a side effect, we have to subst CFLAGS ourselves.
|
|
|
|
m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
|
|
m4_define([_AC_ARG_VAR_PRECIOUS],[])
|
|
AC_PROG_CC
|
|
m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
|
|
|
AC_SUBST(CFLAGS)
|
|
|
|
AC_DEFUN([GM2_UNDEF],[
|
|
$as_echo "#undef HAVE_$1" >>confdefs.h
|
|
])
|
|
|
|
AC_DEFUN([GM2_CHECK_LIB],[
|
|
AC_MSG_CHECKING([m2 front end checking $1 library for $2])
|
|
if test x$gcc_no_link != xyes; then
|
|
AC_CHECK_LIB([$1],[$2],[AC_DEFINE([HAVE_$3],[1],[found $2])],[GM2_UNDEF([$3],[$2])])
|
|
else
|
|
if test "x$[ac_cv_lib_$1_$2]" = xyes; then
|
|
AC_DEFINE([HAVE_$3],[1],[lib$1 includes $2])
|
|
elif test "x$[ac_cv_func_$2]" = xyes; then
|
|
AC_DEFINE([HAVE_$3],[1],[function $2 exists])
|
|
else
|
|
GM2_UNDEF([$3],[$2])
|
|
fi
|
|
fi
|
|
])
|
|
|
|
GM2_CHECK_LIB([c],[access],[ACCESS])
|
|
GM2_CHECK_LIB([c],[brk],[BRK])
|
|
GM2_CHECK_LIB([c],[cfmakeraw],[CFMAKERAW])
|
|
GM2_CHECK_LIB([c],[close],[CLOSE])
|
|
GM2_CHECK_LIB([c],[ctime],[CTIME])
|
|
GM2_CHECK_LIB([c],[creat],[CREAT])
|
|
GM2_CHECK_LIB([c],[dup],[DUP])
|
|
GM2_CHECK_LIB([c],[execve],[EXECVE])
|
|
GM2_CHECK_LIB([c],[exit],[EXIT])
|
|
GM2_CHECK_LIB([c],[fcntl],[FCNTL])
|
|
GM2_CHECK_LIB([c],[fstat],[FSTAT])
|
|
GM2_CHECK_LIB([c],[getdents],[GETDENTS])
|
|
GM2_CHECK_LIB([c],[getgid],[GETGID])
|
|
GM2_CHECK_LIB([c],[getpid],[GETPID])
|
|
GM2_CHECK_LIB([c],[gettimeofday],[GETTIMEOFD])
|
|
GM2_CHECK_LIB([c],[getuid],[GETUID])
|
|
GM2_CHECK_LIB([c],[ioctl],[IOCTL])
|
|
GM2_CHECK_LIB([c],[kill],[KILL])
|
|
GM2_CHECK_LIB([c],[link],[LINK])
|
|
GM2_CHECK_LIB([c],[lseek],[LSEEK])
|
|
GM2_CHECK_LIB([c],[open],[OPEN])
|
|
GM2_CHECK_LIB([c],[pause],[PAUSE])
|
|
GM2_CHECK_LIB([c],[pipe],[PIPE])
|
|
GM2_CHECK_LIB([c],[rand],[RAND])
|
|
GM2_CHECK_LIB([c],[read],[READ])
|
|
GM2_CHECK_LIB([c],[select],[SELECT])
|
|
GM2_CHECK_LIB([c],[setitimer],[SETITIMER])
|
|
GM2_CHECK_LIB([c],[setgid],[SETGID])
|
|
GM2_CHECK_LIB([c],[setuid],[SETUID])
|
|
GM2_CHECK_LIB([c],[stat],[STAT])
|
|
GM2_CHECK_LIB([c],[strsignal],[STRSIGNAL])
|
|
GM2_CHECK_LIB([c],[strtod],[STRTOD])
|
|
GM2_CHECK_LIB([c],[strtold],[STRTOLD])
|
|
GM2_CHECK_LIB([c],[times],[TIMES])
|
|
GM2_CHECK_LIB([c],[unlink],[UNLINK])
|
|
GM2_CHECK_LIB([c],[wait],[WAIT])
|
|
GM2_CHECK_LIB([c],[write],[WRITE])
|
|
|
|
GM2_CHECK_LIB([m],[signbit],[SIGNBIT])
|
|
GM2_CHECK_LIB([m],[signbitf],[SIGNBITF])
|
|
GM2_CHECK_LIB([m],[signbitl],[SIGNBITL])
|
|
|
|
AC_MSG_NOTICE([libgm2 has finished checking target libc and libm contents.])
|
|
|
|
# We test the host here and later on check the target.
|
|
|
|
# All known M2_HOST_OS values. This is the union of all host operating systems
|
|
# supported by gm2.
|
|
|
|
M2_SUPPORTED_HOST_OS="aix freebsd hurd linux netbsd openbsd solaris windows darwin"
|
|
|
|
M2_HOST_OS=unknown
|
|
|
|
case ${host} in
|
|
*-*-darwin*) M2_HOST_OS=darwin ;;
|
|
*-*-freebsd*) M2_HOST_OS=freebsd ;;
|
|
*-*-linux*) M2_HOST_OS=linux ;;
|
|
*-*-netbsd*) M2_HOST_OS=netbsd ;;
|
|
*-*-openbsd*) M2_HOST_OS=openbsd ;;
|
|
*-*-solaris2*) M2_HOST_OS=solaris ;;
|
|
*-*-aix*) M2_HOST_OS=aix ;;
|
|
*-*-gnu*) M2_HOST_OS=hurd ;;
|
|
esac
|
|
|
|
M2_TARGET_OS=unknown
|
|
|
|
case ${target} in
|
|
*-*-darwin*) M2_TARGET_OS=darwin ;;
|
|
*-*-freebsd*) M2_TARGET_OS=freebsd ;;
|
|
*-*-linux*) M2_TARGET_OS=linux ;;
|
|
*-*-netbsd*) M2_TARGET_OS=netbsd ;;
|
|
*-*-openbsd*) M2_TARGET_OS=openbsd ;;
|
|
*-*-solaris2*) M2_TARGET_OS=solaris ;;
|
|
*-*-aix*) M2_TARGET_OS=aix ;;
|
|
*-*-gnu*) M2_TARGET_OS=hurd ;;
|
|
esac
|
|
|
|
# M2_HOST_OS=unknown
|
|
if test x${M2_HOST_OS} = xunknown; then
|
|
AC_MSG_NOTICE([unsupported host, will build a minimal m2 library])
|
|
BUILD_PIMLIB=false
|
|
BUILD_ISOLIB=false
|
|
BUILD_CORLIB=false
|
|
BUILD_LOGLIB=false
|
|
else
|
|
AC_MSG_NOTICE([m2 library will be built on ${M2_HOST_OS}])
|
|
BUILD_PIMLIB=true
|
|
BUILD_ISOLIB=true
|
|
BUILD_CORLIB=true
|
|
BUILD_LOGLIB=true
|
|
fi
|
|
|
|
CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
|
|
AC_SUBST(CC_FOR_BUILD)
|
|
|
|
# Propagate GM2_FOR_TARGET into Makefiles
|
|
GM2_FOR_TARGET=${GM2_FOR_TARGET:-gcc}
|
|
AC_SUBST(GM2_FOR_TARGET)
|
|
|
|
# Now we check the target as long as it is a supported host.
|
|
# For some embedded targets we choose minimal runtime system which is
|
|
# just enough to satisfy the linker targetting raw metal.
|
|
if test x${M2_HOST_OS} != xunknown; then
|
|
AC_MSG_NOTICE([m2 library building for target ${target}])
|
|
case "$target" in
|
|
|
|
avr25*-*-* | avr31*-*-* | avr35*-*-* | avr4*-*-* | avr5*-*-* | avr51*-*-* | avr6*-*-*)
|
|
BUILD_PIMLIB=false
|
|
BUILD_ISOLIB=false
|
|
BUILD_CORLIB=false
|
|
BUILD_LOGLIB=false
|
|
;;
|
|
|
|
avrxmega2*-*-* | avrxmega4*-*-* | avrxmega5*-*-* | avrxmega6*-*-* | avrxmega7*-*-*)
|
|
BUILD_PIMLIB=false
|
|
BUILD_ISOLIB=false
|
|
BUILD_CORLIB=false
|
|
BUILD_LOGLIB=false
|
|
;;
|
|
|
|
avr3-*-*)
|
|
BUILD_PIMLIB=true
|
|
BUILD_ISOLIB=true
|
|
BUILD_CORLIB=true
|
|
BUILD_LOGLIB=true
|
|
;;
|
|
esp32-*-*)
|
|
BUILD_PIMLIB=false
|
|
BUILD_ISOLIB=false
|
|
BUILD_CORLIB=false
|
|
BUILD_LOGLIB=false
|
|
;;
|
|
|
|
esac
|
|
fi
|
|
|
|
# GM2_MSG_RESULT issue a query message from the first parameter and a boolean result
|
|
# in the second parameter is printed as a "yes" or "no".
|
|
|
|
AC_DEFUN([GM2_MSG_RESULT],[
|
|
AC_MSG_CHECKING([$1])
|
|
if test x${$2} = xtrue; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
])
|
|
|
|
if test x${M2_HOST_OS} = xunknown; then
|
|
AC_MSG_NOTICE([m2 front end will only build minimal Modula-2 runtime library on this host])
|
|
else
|
|
GM2_MSG_RESULT([m2 front end will build PIM libraries:],[BUILD_PIMLIB])
|
|
GM2_MSG_RESULT([m2 front end will build ISO libraries:],[BUILD_ISOLIB])
|
|
GM2_MSG_RESULT([m2 front end will build coroutine libraries:],[BUILD_CORLIB])
|
|
GM2_MSG_RESULT([m2 front end will build Logitech compatability libraries:],[BUILD_LOGLIB])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_PIMLIB], [test x$BUILD_PIMLIB = xtrue])
|
|
AM_CONDITIONAL([BUILD_ISOLIB], [test x$BUILD_ISOLIB = xtrue])
|
|
AM_CONDITIONAL([BUILD_CORLIB], [test x$BUILD_CORLIB = xtrue])
|
|
AM_CONDITIONAL([BUILD_LOGLIB], [test x$BUILD_LOGLIB = xtrue])
|
|
AM_CONDITIONAL([TARGET_DARWIN], [test x$M2_TARGET_OS = xdarwin])
|
|
|
|
# Determine what GCC version number to use in filesystem paths.
|
|
GCC_BASE_VER
|
|
|
|
AC_CONFIG_SRCDIR([Makefile.am])
|
|
AC_CONFIG_FILES([Makefile])
|
|
|
|
AC_CONFIG_FILES(AC_FOREACH([DIR], [libm2min libm2pim libm2iso libm2cor libm2log], [DIR/Makefile ]),
|
|
[ cat > vpsed$$ << \_EOF
|
|
s!`test -f '$<' || echo '$(srcdir)/'`!!
|
|
_EOF
|
|
sed -f vpsed$$ $ac_file > tmp$$
|
|
mv tmp$$ $ac_file
|
|
rm vpsed$$
|
|
echo 'MULTISUBDIR =' >> $ac_file
|
|
ml_norecursion=yes
|
|
. ${multi_basedir}/config-ml.in
|
|
AS_UNSET([ml_norecursion])
|
|
])
|
|
|
|
AC_MSG_NOTICE([libgm2 has been configured.])
|
|
|
|
AC_OUTPUT
|