You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.0 KiB
172 lines
4.0 KiB
# Copyright 2019 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=7
|
|
|
|
inherit autotools
|
|
|
|
# NOTE: PV is the libtool version number current:revision:age
|
|
|
|
DESCRIPTION="Library with missing functions based on GNUlib"
|
|
HOMEPAGE="https://prefix.gentoo.org"
|
|
GIT_TAG="b451121ab45497e78cb6f612c8673a9705193391"
|
|
SRC_URI="https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-${GIT_TAG}.tar.gz"
|
|
|
|
LICENSE="GPL-2"
|
|
SLOT="0"
|
|
KEYWORDS="~ppc-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
|
#IUSE="static-libs" # dynamic won't work :(
|
|
|
|
DEPEND=""
|
|
RDEPEND="${DEPEND}"
|
|
BDEPEND=""
|
|
|
|
S="${WORKDIR}/gnulib-${GIT_TAG}"
|
|
|
|
src_prepare() {
|
|
default
|
|
|
|
# create a config file with just the definitions we need
|
|
mkdir extern-inline || die
|
|
cd extern-inline || die
|
|
|
|
cat > configure.ac <<- EOS
|
|
AC_PREREQ([2.69])
|
|
AC_INIT([${PN}], [${PV}], [prefix@gentoo.org])
|
|
|
|
AC_CONFIG_MACRO_DIR([../m4])
|
|
AC_CONFIG_HEADER([missing-include.h])
|
|
|
|
gl_EXTERN_INLINE
|
|
EOS
|
|
|
|
eautoreconf
|
|
sed -e '1,/PACKAGE_VERSION/d' missing-include.h.in \
|
|
> "${T}"/missing-include.h
|
|
cd .. || die
|
|
|
|
mkdir "${PN}" || die
|
|
cd "${PN}" || die
|
|
cat > configure.ac <<- EOS
|
|
AC_PREREQ([2.69])
|
|
AC_INIT([${PN}], [${PV}], [prefix@gentoo.org])
|
|
AM_INIT_AUTOMAKE
|
|
LT_INIT
|
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_HEADER([config.h])
|
|
|
|
AC_PROG_CC
|
|
gl_INIT
|
|
gl_EARLY
|
|
|
|
AC_CONFIG_FILES([Makefile lib/Makefile])
|
|
|
|
AC_OUTPUT
|
|
EOS
|
|
|
|
cat > Makefile.am <<- EOS
|
|
SUBDIRS = lib
|
|
EOS
|
|
|
|
local modules
|
|
local platform
|
|
local rev
|
|
|
|
case "${CHOST}" in
|
|
*-apple-darwin*)
|
|
rev=${CHOST##*-darwin}
|
|
platform="Mac OS X 10.$((rev - 4))"
|
|
;;
|
|
*-solaris2.*)
|
|
rev=${CHOST##*-solaris2.}
|
|
# we only support Solaris 10 (and perhaps 9) and up, so we
|
|
# don't have to bother about 2.x, just X
|
|
platform="Solaris ${rev}"
|
|
;;
|
|
esac
|
|
|
|
# blacklist some modules that cause collisions
|
|
# iconv provided by virtual/iconv -> sys-libs/libiconv
|
|
modules=( $(
|
|
cd "${S}"/doc/posix-functions
|
|
grep -A1 "This function is missing" *.texi | \
|
|
grep "${platform}" | \
|
|
sed -e 's:^\(.[^-]*\)-.*$:\1:' | \
|
|
xargs sed -n 's/^Gnulib module: \([a-z].*\)$/\1/p' | \
|
|
sed -e 's: or .*$::' -e 's:, :\n:g' | \
|
|
sort -u | \
|
|
grep -v "iconv"
|
|
) )
|
|
|
|
# get platform specific set of missing functions
|
|
einfo "Including sources for missing functions on ${platform}:"
|
|
einfo "${modules[*]}"
|
|
"${S}"/gnulib-tool -S \
|
|
--import \
|
|
--lib=libmissing \
|
|
--libtool \
|
|
--no-vc-files \
|
|
--no-cache-modules \
|
|
"${modules[@]}"
|
|
|
|
sed -i -e '/^noinst_LTLIBRARIES /s/noinst_/lib_/' lib/Makefile.am || die
|
|
echo "libmissing_la_LDFLAGS += -version-info ${PV//./:}" >> lib/Makefile.am
|
|
cat >> lib/Makefile.am << 'EOS'
|
|
install-data-local: $(BUILT_SOURCES)
|
|
@for hdr in $(BUILT_SOURCES); do \
|
|
$(INSTALL_HEADER) -D "$$hdr" $(DESTDIR)$(includedir)/$${hdr}; \
|
|
done;
|
|
EOS
|
|
|
|
eautoreconf
|
|
}
|
|
|
|
src_configure() {
|
|
cd "${PN}" || die
|
|
|
|
# ensure we don't pick up installed libmissing
|
|
export CPPFLAGS+="-DDISABLE_LIBMISSING" # disable libmissing headers
|
|
export BINUTILS_CONFIG_DISABLE_MISSING=1 # disable -lmissing from ldwrapper
|
|
export CPPFLAGS="${CPPFLAGS/-I${EPREFIX}\/usr\/include\/missing/}"
|
|
export LIBS="${LIBS/-lmissing/}"
|
|
einfo "CPPFLAGS: ${CPPFLAGS}"
|
|
einfo "LIBS: ${LIBS}"
|
|
|
|
# gnulib cannot be used a shared library, doing so results in stack
|
|
# protector checks failing for reasons yet unknown to me
|
|
econf --disable-shared --enable-static
|
|
}
|
|
|
|
src_compile() {
|
|
cd "${PN}" || die
|
|
default
|
|
}
|
|
|
|
src_install() {
|
|
cd "${PN}" || die
|
|
|
|
default
|
|
|
|
rm -f "${ED}"/usr/lib/libmissing.la || die
|
|
|
|
cd "${ED}/usr/include" || die
|
|
|
|
# fix config.h dependency so we can can distribute it without
|
|
local f
|
|
for f in $(grep "_GL_INLINE_HEADER_BEGIN" -l *.h */*.h) ; do
|
|
cat "${T}"/missing-include.h "${f}" > "${f}.new"
|
|
[[ -s "${f}.new" ]] && mv "${f}.new" "${f}"
|
|
done
|
|
|
|
# modify all header-files so we can disable them and that they won't
|
|
# clash with gnulib-based packages
|
|
for f in *.h */*.h ; do
|
|
sed -i \
|
|
-e '1i#ifdef DISABLE_LIBMISSING\n# include_next <'"${f}"'>\n#else' \
|
|
-e '$a#endif /* DISABLE_LIBMISSING */' \
|
|
-e 's/_GL_/_LIBMISSING_/g' \
|
|
"${f}" || die
|
|
done
|
|
}
|