summaryrefslogtreecommitdiff
path: root/dev-libs/libmissing/libmissing-1.1.0.ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'dev-libs/libmissing/libmissing-1.1.0.ebuild')
-rw-r--r--dev-libs/libmissing/libmissing-1.1.0.ebuild171
1 files changed, 171 insertions, 0 deletions
diff --git a/dev-libs/libmissing/libmissing-1.1.0.ebuild b/dev-libs/libmissing/libmissing-1.1.0.ebuild
new file mode 100644
index 000000000000..b7099ebe7775
--- /dev/null
+++ b/dev-libs/libmissing/libmissing-1.1.0.ebuild
@@ -0,0 +1,171 @@
+# 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 || die
+}
+
+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
+}