2022-09-13 22:50:14 -04:00

943 lines
26 KiB
Bash

# -----------------------------------------------------------------------------
# This file is part of the GNU MCU Eclipse distribution.
# (https://gnu-mcu-eclipse.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the GNU MCU Eclipse build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the container build scripts.
# -----------------------------------------------------------------------------
# The surprise of this build was that building the cross guile requires
# a native guile; thus the need to build everything twice, first the
# native build, than the cross build.
# -----------------------------------------------------------------------------
function do_gmp()
{
# https://gmplib.org
# https://gmplib.org/download/gmp/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=gmp-hg
# 01-Nov-2015
# GMP_VERSION="6.1.0"
# 16-Dec-2016
# GMP_VERSION="6.1.2"
GMP_VERSION="6.1.0"
GMP_FOLDER_NAME="gmp-${GMP_VERSION}"
local gmp_archive="${GMP_FOLDER_NAME}.tar.xz"
# local gmp_url="https://gmplib.org/download/gmp/${gmp_archive}"
local gmp_url="https://github.com/gnu-mcu-eclipse/files/raw/master/libs/${gmp_archive}"
local gmp_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-gmp-installed"
if [ ! -f "${gmp_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${gmp_url}" "${gmp_archive}" "${GMP_FOLDER_NAME}"
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${GMP_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${GMP_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native gmp configure..."
# ABI is mandatory, otherwise configure fails on 32-bits.
# (see https://gmplib.org/manual/ABI-and-ISA.html)
bash "${WORK_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" --help
export CFLAGS="-Wno-unused-value -Wno-empty-translation-unit -Wno-tautological-compare -Wno-overflow"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
export ABI="${TARGET_BITS}"
bash "${WORK_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
--enable-cxx \
| tee "${INSTALL_FOLDER_PATH}/configure-native-gmp-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-gmp-log.txt
fi
echo
echo "Running native gmp make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-gmp-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${GMP_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${GMP_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running gmp configure..."
# ABI is mandatory, otherwise configure fails on 32-bits.
# (see https://gmplib.org/manual/ABI-and-ISA.html)
bash "${WORK_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" --help
export CFLAGS="-Wno-unused-value -Wno-empty-translation-unit -Wno-tautological-compare -Wno-overflow"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS}"
export ABI="${TARGET_BITS}"
bash "${WORK_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
--enable-cxx \
| tee "${INSTALL_FOLDER_PATH}/configure-gmp-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-gmp-log.txt
fi
echo
echo "Running gmp make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-gmp-output.txt"
)
touch "${gmp_stamp_file_path}"
else
echo "Library gmp already installed."
fi
}
function do_libtool()
{
# https://www.gnu.org/software/libtool/
# http://gnu.mirrors.linux.ro/libtool/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libtool-git
# 2015-02-16
LIBTOOL_VERSION="2.4.6"
LIBTOOL_FOLDER_NAME="libtool-${LIBTOOL_VERSION}"
local libtool_archive="${LIBTOOL_FOLDER_NAME}.tar.gz"
# local libtool_url="http://www.mr511.de/software/${libtool_archive}"
local libtool_url="http://mirrors.nav.ro/gnu/libtool/${libtool_archive}"
local libtool_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libtool-installed"
if [ ! -f "${libtool_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${libtool_url}" "${libtool_archive}" "${LIBTOOL_FOLDER_NAME}"
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${LIBTOOL_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${LIBTOOL_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native libtool configure..."
bash "${WORK_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
bash "${WORK_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
--disable-nls \
--disable-rpath \
| tee "${INSTALL_FOLDER_PATH}/configure-native-libtool-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-libtool-log.txt
fi
echo
echo "Running native libtool make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-native-libtool-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running libtool configure..."
bash "${WORK_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS}"
bash "${WORK_FOLDER_PATH}/${LIBTOOL_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
--disable-nls \
--disable-rpath \
| tee "${INSTALL_FOLDER_PATH}/configure-libtool-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-libtool-log.txt
fi
echo
echo "Running libtool make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-libtool-output.txt"
)
touch "${libtool_stamp_file_path}"
else
echo "Library libtool already installed."
fi
}
function do_libunistring()
{
# https://www.gnu.org/software/libunistring/
# https://ftp.gnu.org/gnu/libunistring/
# 2018-02-28
LIBUNISTRING_VERSION="0.9.9"
LIBUNISTRING_FOLDER_NAME="libunistring-${LIBUNISTRING_VERSION}"
local libunistring_archive="${LIBUNISTRING_FOLDER_NAME}.tar.xz"
local libunistring_url="http://ftp.gnu.org/gnu/libunistring/${libunistring_archive}"
local libunistring_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libunistring-installed"
if [ ! -f "${libunistring_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${libunistring_url}" "${libunistring_archive}" "${LIBUNISTRING_FOLDER_NAME}"
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${LIBUNISTRING_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${LIBUNISTRING_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native libunistring configure..."
bash "${WORK_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS} -Wno-pointer-to-int-cast"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
bash "${WORK_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
| tee "${INSTALL_FOLDER_PATH}/configure-native-libunistring-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-libunistring-log.txt
fi
echo
echo "Running native libunistring make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-native-libunistring-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running libunistring configure..."
bash "${WORK_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS} -Wno-pointer-to-int-cast"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS_LIB}"
bash "${WORK_FOLDER_PATH}/${LIBUNISTRING_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
| tee "${INSTALL_FOLDER_PATH}/configure-libunistring-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-libunistring-log.txt
fi
echo
echo "Running libunistring make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-libunistring-output.txt"
)
touch "${libunistring_stamp_file_path}"
else
echo "Library libunistring already installed."
fi
}
function do_libffi()
{
# https://sourceware.org/libffi/
# https://sourceware.org/pub/libffi/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libffi-git
LIBFFI_VERSION="3.2.1"
LIBFFI_FOLDER_NAME="libffi-${LIBFFI_VERSION}"
local libffi_archive="${LIBFFI_FOLDER_NAME}.tar.gz"
# local libffi_url="http://isl.gforge.inria.fr/${libffi_archive}"
local libffi_url="https://sourceware.org/pub/libffi/${libffi_archive}"
local libffi_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libffi-installed"
if [ ! -f "${libffi_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${libffi_url}" "${libffi_archive}" "${LIBFFI_FOLDER_NAME}"
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${LIBFFI_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${LIBFFI_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native libffi configure..."
bash "${WORK_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
bash "${WORK_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
--disable-nls \
| tee "${INSTALL_FOLDER_PATH}"/configure-native-libffi-output.txt
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-libffi-log.txt
fi
echo
echo "Running native libffi make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-native-libffi-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running libffi configure..."
bash "${WORK_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS_LIB}"
bash "${WORK_FOLDER_PATH}/${LIBFFI_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
| tee "${INSTALL_FOLDER_PATH}"/configure-libffi-output.txt
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-libffi-log.txt
fi
echo
echo "Running libffi make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-libffi-output.txt"
)
touch "${libffi_stamp_file_path}"
else
echo "Library libffi already installed."
fi
}
function do_bdwgc()
{
# http://www.hboehm.info/gc/
# http://www.hboehm.info/gc/gc_source/
BDWGC_VERSION="7.6.4"
BDWGC_FOLDER_NAME="gc-${BDWGC_VERSION}"
local bdwgc_archive="${BDWGC_FOLDER_NAME}.tar.gz"
local bdwgc_url="http://www.hboehm.info/gc/gc_source/${bdwgc_archive}"
LIBATOMIC_VERSION="7.6.2"
LIBATOMIC_FOLDER_NAME="libatomic_ops-${LIBATOMIC_VERSION}"
local libatomic_archive="${LIBATOMIC_FOLDER_NAME}.tar.gz"
local libatomic_url="http://www.hboehm.info/gc/gc_source/${libatomic_archive}"
local bdwgc_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-bdwgc-installed"
if [ ! -f "${bdwgc_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${bdwgc_url}" "${bdwgc_archive}" "${BDWGC_FOLDER_NAME}"
download_and_extract "${libatomic_url}" "${libatomic_archive}" "${LIBATOMIC_FOLDER_NAME}"
cd "${WORK_FOLDER_PATH}/${BDWGC_FOLDER_NAME}"
if [ ! -d libatomic_ops ]
then
ln -s "${WORK_FOLDER_PATH}/${LIBATOMIC_FOLDER_NAME}" libatomic_ops
fi
(
xbb_activate
autoreconf -vif
automake --add-missing
)
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${BDWGC_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${BDWGC_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native bdwgc configure..."
bash "${WORK_FOLDER_PATH}/${BDWGC_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
bash "${WORK_FOLDER_PATH}/${BDWGC_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
--disable-nls \
| tee "${INSTALL_FOLDER_PATH}/configure-native-bdwgc-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-bdwgc-log.txt
fi
echo
echo "Running native bdwgc make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-native-bdwgc-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${BDWGC_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${BDWGC_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running bdwgc configure..."
bash "${WORK_FOLDER_PATH}/${BDWGC_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS}"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS_LIB}"
bash "${WORK_FOLDER_PATH}/${BDWGC_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
--disable-nls \
| tee "${INSTALL_FOLDER_PATH}/configure-bdwgc-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-bdwgc-log.txt
fi
echo
echo "Running bdwgc make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-bdwgc-output.txt"
)
touch "${bdwgc_stamp_file_path}"
else
echo "Library bdwgc already installed."
fi
}
function do_libiconv()
{
# https://www.gnu.org/software/libiconv/
# https://ftp.gnu.org/pub/gnu/libiconv/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libiconv
# 2011-08-07
# LIBICONV_VERSION="1.14"
# 2017-02-02
# LIBICONV_VERSION="1.15"
LIBICONV_VERSION="1.14"
LIBICONV_FOLDER_NAME="libiconv-${LIBICONV_VERSION}"
local libiconv_archive="${LIBICONV_FOLDER_NAME}.tar.gz"
local libiconv_url="https://ftp.gnu.org/pub/gnu/libiconv/${libiconv_archive}"
local libiconv_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libiconv-installed"
if [ ! -f "${libiconv_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${libiconv_url}" "${libiconv_archive}" "${LIBICONV_FOLDER_NAME}"
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${LIBICONV_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${LIBICONV_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native libiconv configure..."
bash "${WORK_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" --help
# -fgnu89-inline fixes "undefined reference to `aliases2_lookup'"
# https://savannah.gnu.org/bugs/?47953
export CFLAGS="${EXTRA_CFLAGS} -fgnu89-inline -Wno-tautological-compare -Wno-parentheses-equality -Wno-static-in-inline -Wno-pointer-to-int-cast"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
bash "${WORK_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
--disable-nls \
| tee "${INSTALL_FOLDER_PATH}/configure-native-libiconv-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-libiconv-log.txt
fi
echo
echo "Running native libiconv make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-native-libiconv-output.txt"
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running libiconv configure..."
bash "${WORK_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" --help
# -fgnu89-inline fixes "undefined reference to `aliases2_lookup'"
# https://savannah.gnu.org/bugs/?47953
export CFLAGS="${EXTRA_CFLAGS} -fgnu89-inline -Wno-tautological-compare -Wno-parentheses-equality -Wno-static-in-inline -Wno-pointer-to-int-cast"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS}"
bash "${WORK_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
--disable-nls \
| tee "${INSTALL_FOLDER_PATH}/configure-libiconv-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-libiconv-log.txt
fi
echo
echo "Running libiconv make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-libiconv-output.txt"
)
touch "${libiconv_stamp_file_path}"
else
echo "Library libiconv already installed."
fi
}
function do_guile()
{
# https://www.gnu.org/software/guile/
# https://ftp.gnu.org/gnu/guile/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=guile-git
# 2017-02-13
# make searches for 2.0 or 1.8
GUILE_VERSION="2.0.14"
# 2017-12-01
# GUILE_VERSION="2.2.3"
GUILE_FOLDER_NAME="guile-${GUILE_VERSION}"
# local guile_archive="${GUILE_FOLDER_NAME}.tar.xz"
# local guile_url="https://ftp.gnu.org/gnu/guile/${guile_archive}"
MSYS2_GUILE_PACK_URL_BASE="http://sourceforge.net/projects/msys2/files"
# http://sourceforge.net/projects/msys2/files/REPOS/MSYS2/Sources/
# https://sourceforge.net/projects/msys2/files/REPOS/MSYS2/Sources/guile-2.0.14-1.src.tar.gz/download
MSYS2_GUILE_VERSION_RELEASE="${GUILE_VERSION}-1"
MSYS2_GUILE_FOLDER_NAME="guile-${MSYS2_GUILE_VERSION_RELEASE}"
local msys2_guile_archive="${MSYS2_GUILE_FOLDER_NAME}.src.tar.gz"
local msys2_guile_url="${MSYS2_GUILE_PACK_URL_BASE}/REPOS/MSYS2/Sources/${msys2_guile_archive}"
local guile_archive="${GUILE_FOLDER_NAME}.tar.gz"
local guile_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-guile-installed"
if [ ! -f "${guile_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
# download_and_extract "${guile_url}" "${guile_archive}" "${GUILE_FOLDER_NAME}"
if [ ! -f "${WORK_FOLDER_PATH}/msys2/guile/${guile_archive}" ]
then
(
mkdir -p "${WORK_FOLDER_PATH}/msys2"
cd "${WORK_FOLDER_PATH}/msys2"
download_and_extract "${msys2_guile_url}" "${msys2_guile_archive}" "guile"
)
fi
if [ ! -d "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}" ]
then
(
cd "${WORK_FOLDER_PATH}"
echo
echo "Unpacking ${guile_archive}..."
tar -xvf "${WORK_FOLDER_PATH}/msys2/guile/${guile_archive}"
cd "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}"
patch -p1 -i "${WORK_FOLDER_PATH}"/msys2/guile/guile-2.2.2-msys2.patch
xbb_activate
cp -rf build-aux/snippet "${WORK_FOLDER_PATH}"/msys2/guile/snippet
autoreconf -fi
cp -f "${WORK_FOLDER_PATH}"/msys2/guile/snippet/*.* build-aux/snippet/
)
fi
# Native build.
(
mkdir -p "${BUILD_FOLDER_PATH}-native/${GUILE_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}-native/${GUILE_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running native guile configure..."
bash "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}"/configure --help
export CFLAGS="${EXTRA_CFLAGS} -Wno-implicit-fallthrough -Wno-unused-but-set-variable -Wno-shift-count-overflow"
export CPPFLAGS="-I${INSTALL_FOLDER_PATH}-native/include"
export LDFLAGS="-L${INSTALL_FOLDER_PATH}-native/lib"
# Without it, two GC definitions will have conflicting defs.
export LIBS="-lpthread"
export PKG_CONFIG_LIBDIR="${INSTALL_FOLDER_PATH}-native"/lib/pkgconfig
bash "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}"/configure \
--prefix="${INSTALL_FOLDER_PATH}-native" \
\
--build=${BUILD} \
--host=${BUILD} \
--target=${BUILD} \
\
--disable-shared \
--enable-static \
\
--disable-rpath \
--disable-nls \
--disable-error-on-warning \
--with-threads \
--with-libiconv-prefix="${INSTALL_FOLDER_PATH}-native" \
--with-libunistring-prefix="${INSTALL_FOLDER_PATH}-native" \
| tee "${INSTALL_FOLDER_PATH}"/configure-native-guile-output.txt
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-native-guile-log.txt
fi
echo
echo "Running native guile make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}"/make-native-guile-output.txt
)
# Cross build.
(
mkdir -p "${BUILD_FOLDER_PATH}/${GUILE_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${GUILE_FOLDER_NAME}"
xbb_activate
if [ ! -f "config.status" ]
then
echo
echo "Running guile configure..."
bash "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}/configure" --help
export CFLAGS="${EXTRA_CFLAGS} -Wno-implicit-fallthrough -Wno-unused-but-set-variable -Wno-shift-count-overflow -Wno-implicit-function-declaration -Wno-return-type -Wno-unused-function -Wno-pointer-to-int-cast"
export CPPFLAGS="${EXTRA_CPPFLAGS}"
export LDFLAGS="${EXTRA_LDFLAGS}"
export GUILE_FOR_BUILD="${INSTALL_FOLDER_PATH}-native"/bin/guile
# Config inspired from msys2, but with threads, without nls.
# --disable-networking due to missing netinet/tcp.h
bash "${WORK_FOLDER_PATH}/${GUILE_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static \
\
--disable-nls \
--with-threads \
\
--disable-debug-malloc \
--disable-guile-debug \
--disable-error-on-warning \
--disable-rpath \
--enable-deprecated \
--enable-networking \
--enable-posix \
--enable-regex \
--with-modules \
\
| tee "${INSTALL_FOLDER_PATH}/configure-guile-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-guile-log.txt
fi
echo
echo "Running guile make..."
(
# Build.
make -j ${JOBS}
make install-strip
) | tee "${INSTALL_FOLDER_PATH}/make-guile-output.txt"
)
touch "${guile_stamp_file_path}"
else
echo "Library guile already installed."
fi
}
# -----------------------------------------------------------------------------