# Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/sys-libs/uclibc++/uclibc++-0.1.8.ebuild,v 1.3 2005/01/12 04:26:57 vapier Exp $ inherit eutils versionator flag-o-matic toolchain-funcs export CTARGET=${CTARGET:-${CHOST}} if [[ ${CTARGET} == ${CHOST} ]] ; then if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then export CTARGET=${CATEGORY/cross-} fi fi SVN_VER="20060807" MY_P=${P/ucl/uCl} GCC_P=$(get_version_component_range 4-6) DESCRIPTION="embedded C++ library" HOMEPAGE="http://cxx.uclibc.org/" SRC_URI="http://cxx.uclibc.org/src/${MY_P/.${GCC_P}/}.tbz2" [[ -z ${SVN_VER} ]] || \ SRC_URI="${SRC_URI} mirror://gentoo/${MY_P/.${GCC_P}/}-svn-update-${SVN_VER}.patch.bz2" LICENSE="GPL-2" KEYWORDS="~arm ~mips ~ppc ~x86" IUSE="build debug hardened iconv multislot static" if use multislot ; then SLOT="${CTARGET}-${GCC_P}" else [[ ${CTARGET} != ${CHOST} ]] \ && SLOT="${CTARGET}" \ || SLOT="0" fi RDEPEND="" if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then DEPEND="=${CATEGORY}/gcc-${GCC_P}*" else DEPEND="=sys-devel/gcc-${GCC_P}*" fi DEPEND="${DEPEND} sys-devel/gcc-config" S=${WORKDIR}/${MY_P/.${GCC_P}/} # defining as 0, the non-static binaries become smaller # defining as 1 we use the libsupc++.a provided by gcc # groff is 7.2 MB w/ 1 and 6.3 MB w/ 0 # for static binaries it does not make any difference USE_LIBSUPC=0 pkg_setup() { export GCC_LIB_PATH=$(env -i gcc-config -L) export GCC_PROFILE_SFX="uclibcxx" UCXX_GCC_VER=$(gcc-fullversion) if [[ ${UCXX_GCC_VER} != ${GCC_P} ]] ; then eerror "adapt version to the used gcc" die "${UCXX_GCC_VER} != ${GCC_P}" fi } src_unpack() { unpack ${A} cd ${S} if [[ -n ${SVN_VER} ]] ; then epatch "${WORKDIR}"/${MY_P/.${GCC_P}/}-svn-update-${SVN_VER}.patch sed -i -e 's|^SUBLEVEL:=.*|SUBLEVEL:=0|' Rules.mak || die "sed failed" fi # cleanup find ${S} -type f -name "*.orig" -exec rm -f {} \; find ${S} -type f -name \.cvsignore -exec rm -f {} \; find ${S} -type d -name CVS | xargs rm -rf find ${S} -type d -name .svn | xargs rm -rf # use same defines as the used gcc version if ! [[ $(gcc-major-version) -lt "4" && $(gcc-minor-version) -lt "4" ]] ; then find . -type f | xargs sed -i 's:_GLIBCPP_:_GLIBCXX_:g' || die "sed headers failed" fi make defconfig || die "defconfig failed" local target case $(tc-arch) in arm) target="arm";; mips) target="mips";; ppc) target="powerpc";; x86) target="i386";; amd64) target="x86_64";; *) die "$(tc-arch) lists no defaults :/";; esac # not really needed, the new appended option will overwrite anyway sed -i \ -e '/^UCLIBCXX_RUNTIME_/d' \ -e '/^TARGET_'${target}'/d' \ .config echo "UCLIBCXX_RUNTIME_PREFIX=\"${GCC_LIB_PATH}\"" >> .config echo "UCLIBCXX_RUNTIME_INCLUDE_SUBDIR=\"/include/${GCC_PROFILE_SFX}\"" >> .config echo "UCLIBCXX_RUNTIME_LIB_SUBDIR=\"\"" >> .config echo "UCLIBCXX_RUNTIME_BIN_SUBDIR=\"\"" >> .config echo "TARGET_${target}=y" >> .config use debug && echo "DODEBUG=y" >> .config if [[ -f ${ROOT}/usr/include/wchar.h ]] ; then echo "UCLIBCXX_HAS_WCHAR=y" >> .config echo "UCLIBCXX_SUPPORT_WCLOG=n" >> .config fi # needed for j2sdk/mpeg4ip #echo "UCLIBCXX_SUPPORT_CLOG=y" >> .config #echo "UCLIBCXX_SUPPORT_WCLOG=y" >> .config if [[ "${USE_LIBSUPC}" == "1" ]] ; then echo "IMPORT_LIBSUP=n" >> .config #echo "IMPORT_LIBGCC_EH=n" >> .config fi if use elibc_uclibc ; then echo "UCLIBCXX_HAS_TLS=n" >> .config if ! has $(tc-arch) x86 amd64 ; then echo "UCLIBCXX_HAS_LONG_DOUBLE=n" >> .config fi fi #if use static ; then # echo "BUILD_ONLY_STATIC_LIB=y" >> .config #fi #if hasq test ${FEATURES} ; then # echo dummy echo "UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS=y" >> .config #fi yes "" | make oldconfig || die "oldconfig failed" } src_compile() { #filter-flags -fvisibility-inlines-hidden emake -j1 ARCH_CFLAGS="${CXXFLAGS}" CROSS=${CTARGET}- || die "make failed" } src_test() { # move out non-working tests if use elibc_uclibc ; then # gcc-3.4.x-4.x rm -f tests/maptest.* # fgetwc rm -f tests/wchartest.* # uClibc + LOCALE use iconv && rm -f tests/fstreamtest.* # gcc-4.1.1 + ssp #gcc-specs-ssp && rm -f tests/bitsettest.* [[ $(gcc-major-version) -ge 4 ]] && use hardened && rm -f tests/bitsettest.* fi make test ARCH_CFLAGS="${CXXFLAGS}" CROSS=${CTARGET}- || die "test failed" } src_install() { make install PREFIX="${D}" || die "install failed" dodoc ChangeLog README TODO uclibcxx_create_profile } uclibcxx_create_profile() { # should it be enhanced to produce all the possible combinations? local GCC_BUILD_PATH=$(env -i gcc-config -B) # remove eventual suffix (handles only -uclibcxx) local GCC_ORIG_PATH="${GCC_BUILD_PATH/-${GCC_PROFILE_SFX}/}" local GCC_PATH="${GCC_ORIG_PATH}-${GCC_PROFILE_SFX}" dodir ${GCC_PATH} cp -ap ${GCC_ORIG_PATH}/* "${D}"/${GCC_PATH}/ local x for x in cpp gccbug gcov ${CTARGET}-gcc ; do rm -f "${D}"/${GCC_PATH}/${x} ln -s ${GCC_ORIG_PATH}/${x} "${D}"/${GCC_PATH}/${x} done # replace maybe w/ a soft link #for x in c++ g++ ; do for x in c++ ; do rm -f "${D}"/${GCC_PATH}/${CTARGET}-${x} cat "${D}"${GCC_LIB_PATH}/g++-uc | \ sed -e "s:${CTARGET}-g++:${GCC_ORIG_PATH}/g++:" \ -e 's://:/:g' > "${D}"/${GCC_PATH}/${CTARGET}-${x} chmod +x "${D}"/${GCC_PATH}/${CTARGET}-${x} done rm -f "${D}"/${GCC_PATH}/${CTARGET}-g++ dosym c++ ${GCC_PATH}/${CTARGET}-g++ rm "${D}"${GCC_LIB_PATH}/g++-uc dodir /etc/env.d/gcc local GCC_BUILD_PROFILE=$(env -i gcc-config -c) # remove eventual suffix (handles only -uclibcxx) local GCC_PROFILE="/etc/env.d/gcc/${GCC_BUILD_PROFILE/-${GCC_PROFILE_SFX}/}" cat ${ROOT}${GCC_PROFILE} | \ sed -e "s:${GCC_ORIG_PATH}:${GCC_PATH}:" \ -e "s:^STDCXX_INCDIR=.*:STDCXX_INCDIR=\"${GCC_PROFILE_SFX}\":" \ > "${D}"${GCC_PROFILE}-${GCC_PROFILE_SFX} || die "failed sed" }