--- uclibc-0.9.28-r2.ebuild 2007-07-02 18:36:13.000000000 +0300 +++ uclibc-0.9.29.ebuild 2007-12-26 19:48:35.000000000 +0200 @@ -21,10 +21,11 @@ fi MY_P=uClibc-${PV} SVN_VER="" -PATCH_VER="1.7" +PATCH_VER="" DESCRIPTION="C library for developing embedded Linux systems" HOMEPAGE="http://www.uclibc.org/" -SRC_URI="http://www.kernel.org/pub/linux/libs/uclibc/${MY_P}.tar.bz2 +SRC_URI="mirror://kernel/linux/libs/uclibc/${MY_P}.tar.bz2 + http://uclibc.org/downloads/${MY_P}.tar.bz2 nls? ( !userlocales? ( pregen? ( x86? ( http://www.uclibc.org/downloads/uClibc-locale-030818.tgz ) ) ) )" @@ -55,9 +56,9 @@ alt_build_kprefix() { if [[ ${CBUILD} == ${CHOST} && ${CTARGET} == ${CHOST} ]] \ || [[ -n ${UCLIBC_AND_GLIBC} ]] then - echo /usr + echo /usr/include else - echo /usr/${CTARGET}/usr + echo /usr/${CTARGET}/usr/include fi } just_headers() { @@ -70,8 +71,8 @@ uclibc_endian() { touch "${T}"/endian.s $(tc-getAS) "${T}"/endian.s -o "${T}"/endian.o case $(file "${T}"/endian.o) in - *" MSB "*) echo "big";; - *" LSB "*) echo "little";; + *" MSB "*) echo "BIG";; + *" LSB "*) echo "LITTLE";; *) echo "NFC";; esac rm -f "${T}"/endian.{s,o} @@ -140,6 +141,11 @@ check_cpu_opts() { fi } +set_opt() { + sed -i "/^\# $1 is not set/d; /^$1=.*/d" .config + echo "$1=$2" >> .config +} + src_unpack() { [[ -n ${ESVN_REPO_URI} ]] \ && subversion_src_unpack \ @@ -173,6 +179,9 @@ src_unpack() { epatch "${WORKDIR}"/patch/math fi + epatch "${FILESDIR}/${P}-inet_network.patch" + epatch "${FILESDIR}/${P}-net-tools_compile.patch" + ########## CPU SELECTION ########## local target config_target @@ -189,49 +198,47 @@ src_unpack() { x86) target="i386"; config_target="GENERIC_386";; *) die "$(tc-arch) lists no defaults :/";; esac - sed -i -e "s:default TARGET_i386:default TARGET_${target}:" \ - extra/Configs/Config.in sed -i -e "s:default CONFIG_${config_target}:default CONFIG_${UCLIBC_CPU:-${config_target}}:" \ extra/Configs/Config.${target} + sed -i -e "s:^HOSTCC.*=.*:HOSTCC=$(tc-getBUILD_CC):" Rules.mak ########## CONFIG SETUP ########## - make defconfig >/dev/null || die "could not config" + make ARCH=${target} defconfig >/dev/null || die "could not config" for def in DO{DEBUG{,_PT},ASSERTS} SUPPORT_LD_DEBUG{,_EARLY} ; do sed -i -e "s:${def}=y:# ${def} is not set:" .config done if use debug ; then - #echo "SUPPORT_LD_DEBUG_EARLY=y" >> .config - echo "SUPPORT_LD_DEBUG=y" >> .config - echo "DODEBUG=y" >> .config - #echo "DODEBUG_PT=y" >> .config + set_opt SUPPORT_LD_DEBUG y + set_opt DODEBUG y fi sed -i -e '/ARCH_.*_ENDIAN/d' .config - echo "ARCH_$(uclibc_endian | tr [a-z] [A-Z])_ENDIAN=y" >> .config + set_opt "ARCH_WANTS_$(uclibc_endian | tr [a-z] [A-Z])_ENDIAN" y if [[ $(tc-is-softfloat) != "no" ]] ; then - sed -i -e '/^HAS_FPU=y$/d' .config - echo 'HAS_FPU=n' >> .config + set_opt HAS_FPU n fi - local moredefs="DL_FINI_CRT_COMPAT" - # We need todo this for a few months. .28 is a major upgrade. + local moredefs="COMPAT_ATEXIT" + local compat_sym=atexit + + # We need todo this for a few months. .29 is a major upgrade. # Don't do it from cross-compiling case though if ! use uclibc-compat ; then if [[ -z ${UCLIBC_AND_GLIBC} ]] && [[ -z ${UCLIBC_SCANNED_COMPAT} ]] && \ ! just_headers && [[ ${CHOST} == ${CTARGET} ]] ; then local fnames="" - einfo "Doing a scanelf in paths for bins containing the __uClibc_start_main symbol" - fnames=$(scanelf -pyqs__uClibc_start_main -F%F#s) + einfo "Doing a scanelf in paths for bins containing the ${compat_sym} symbol" + fnames=$(scanelf -pyqs${compat_sym} -F%F#s) if [[ -z ${fnames} ]] ; then einfo "This system is clean." einfo "To prevent the scanning of files again in the future you can export UCLIBC_SCANNED_COMPAT=1" moredefs="" else ewarn "You need to remerge the packages that contain the following files before you can remerge ${P} without USE=uclibc-compat enabled." - ewarn "qfile ${fnames}" + ewarn "qfile -Cq $(echo ${fnames}) | sort | uniq" echo ewarn "Leaving on ${moredefs}" fi @@ -239,28 +246,31 @@ src_unpack() { moredefs="" fi fi - for def in ${moredefs} MALLOC_GLIBC_COMPAT DO_C99_MATH UCLIBC_HAS_{RPC,CTYPE_CHECKED,WCHAR,HEXADECIMAL_FLOATS,GLIBC_CUSTOM_PRINTF,FOPEN_EXCLUSIVE_MODE,GLIBC_CUSTOM_STREAMS,PRINTF_M_SPEC,FTW} ; do - sed -i -e "s:# ${def} is not set:${def}=y:" .config + for def in ${moredefs} MALLOC_GLIBC_COMPAT DO_C99_MATH UCLIBC_HAS_{RPC,FULL_RPC,CTYPE_CHECKED,WCHAR,HEXADECIMAL_FLOATS,GLIBC_CUSTOM_PRINTF,FOPEN_EXCLUSIVE_MODE,GLIBC_CUSTOM_STREAMS,PRINTF_M_SPEC,FTW} ; do + set_opt "${def}" y done - echo "UCLIBC_HAS_FULL_RPC=y" >> .config - echo "PTHREADS_DEBUG_SUPPORT=y" >> .config - echo "UCLIBC_HAS_TZ_FILE_READ_MANY=n" >> .config + set_opt UCLIBC_HAS_CTYPE_UNSAFE n + set_opt UCLIBC_HAS_REENTRANT_RPC n + set_opt PTHREADS_DEBUG_SUPPORT y + set_opt UCLIBC_HAS_TZ_FILE_READ_MANY n + set_opt UCLIBC_SUSV3_LEGACY y + set_opt UCLIBC_SUSV3_LEGACY_MACROS y if use iconv ; then - sed -i -e "s:# UCLIBC_HAS_LOCALE is not set:UCLIBC_HAS_LOCALE=y:" .config - echo "UCLIBC_HAS_XLOCALE=n" >> .config - echo "UCLIBC_HAS_GLIBC_DIGIT_GROUPING=y" >> .config - echo "UCLIBC_HAS_SCANF_LENIENT_DIGIT_GROUPING=y" >> .config + set_opt UCLIBC_HAS_LOCALE y + set_opt UCLIBC_HAS_XLOCALE n + set_opt UCLIBC_HAS_GLIBC_DIGIT_GROUPING y + set_opt UCLIBC_HAS_SCANF_LENIENT_DIGIT_GROUPING y if use nls ; then - echo "UCLIBC_HAS_GETTEXT_AWARENESS=y" >> .config + set_opt UCLIBC_HAS_GETTEXT_AWARENESS y else - echo "UCLIBC_HAS_GETTEXT_AWARENESS=n" >> .config + set_opt UCLIBC_HAS_GETTEXT_AWARENESS n fi if use pregen ; then - echo "UCLIBC_PREGENERATED_LOCALE_DATA=y" >> .config - echo "UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=y" >> .config + set_opt UCLIBC_PREGENERATED_LOCALE_DATA y + set_opt UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA y if use userlocales ; then cp "${DISTDIR}"/${MY_P}-user-locale.tar.gz \ extra/locale/uClibc-locale-030818.tgz \ @@ -271,54 +281,48 @@ src_unpack() { || die "could not copy locale" fi else - echo "UCLIBC_PREGENERATED_LOCALE_DATA=n" >> .config + set_opt UCLIBC_PREGENERATED_LOCALE_DATA n fi else - echo "UCLIBC_HAS_LOCALE=n" >> .config + set_opt UCLIBC_HAS_LOCALE n fi - use ipv6 && sed -i -e "s:# UCLIBC_HAS_IPV6 is not set:UCLIBC_HAS_IPV6=y:" .config + use ipv6 && set_opt UCLIBC_HAS_IPV6 y - # uncomment if you miss wordexp (alsa-lib) - use wordexp && sed -i -e "s:# UCLIBC_HAS_WORDEXP is not set:UCLIBC_HAS_WORDEXP=y:" .config + use wordexp && set_opt UCLIBC_HAS_WORDEXP y # we need to do it independently of hardened to get ssp.c built into libc - sed -i -e "s:# UCLIBC_SECURITY.*:UCLIBC_SECURITY=y:" .config - echo "UCLIBC_HAS_SSP=y" >> .config - echo "SSP_USE_ERANDOM=n" >> .config - echo "PROPOLICE_BLOCK_ABRT=n" >> .config - if use debug ; then - echo "PROPOLICE_BLOCK_SEGV=y" >> .config - echo "PROPOLICE_BLOCK_KILL=n" >> .config - else - echo "PROPOLICE_BLOCK_SEGV=n" >> .config - echo "PROPOLICE_BLOCK_KILL=y" >> .config - fi + + set_opt UCLIBC_HAS_SSP y + set_opt UCLIBC_HAS_SSP_COMPAT y + set_opt UCLIBC_HAS_ARC4RANDOM y + set_opt PROPOLICE_BLOCK_ABRT n + set_opt PROPOLICE_BLOCK_SEGV y # arm/mips do not emit PT_GNU_STACK, but if we enable this here # it will be emitted as RWE, ppc has to be checked, x86 needs it # this option should be used independently of hardened # relro could be also moved out of hardened if has $(tc-arch) x86 ; then - echo "UCLIBC_BUILD_NOEXECSTACK=y" >> .config + set_opt UCLIBC_BUILD_NOEXECSTACK y else - echo "UCLIBC_BUILD_NOEXECSTACK=n" >> .config + set_opt UCLIBC_BUILD_NOEXECSTACK n fi - echo "UCLIBC_BUILD_RELRO=y" >> .config + set_opt UCLIBC_BUILD_RELRO y if use hardened ; then if has $(tc-arch) ${PIE_STABLE} ; then - echo "UCLIBC_BUILD_PIE=y" >> .config + set_opt UCLIBC_BUILD_PIE y else - echo "UCLIBC_BUILD_PIE=n" >> .config + set_opt UCLIBC_BUILD_PIE n fi - echo "SSP_QUICK_CANARY=n" >> .config - echo "UCLIBC_BUILD_SSP=y" >> .config - echo "UCLIBC_BUILD_NOW=y" >> .config + set_opt SSP_QUICK_CANARY n + set_opt UCLIBC_BUILD_SSP y + set_opt UCLIBC_BUILD_NOW y else - echo "UCLIBC_BUILD_PIE=n" >> .config - echo "SSP_QUICK_CANARY=y" >> .config - echo "UCLIBC_BUILD_SSP=n" >> .config - echo "UCLIBC_BUILD_NOW=n" >> .config + set_opt UCLIBC_BUILD_PIE n + set_opt SSP_QUICK_CANARY y + set_opt UCLIBC_BUILD_SSP n + set_opt UCLIBC_BUILD_NOW n fi # Allow users some custom control over the config @@ -341,7 +345,7 @@ src_unpack() { type -p ${cross}ar > /dev/null || cross="" sed -i \ -e "/^CROSS_COMPILER_PREFIX/s:=.*:=\"${cross}\":" \ - -e "/^KERNEL_SOURCE/s:=.*:=\"$(alt_build_kprefix)\":" \ + -e "/^KERNEL_HEADERS/s:=.*:=\"$(alt_build_kprefix)\":" \ -e "/^SHARED_LIB_LOADER_PREFIX/s:=.*:=\"/$(get_libdir)\":" \ -e "/^DEVEL_PREFIX/s:=.*:=\"/usr\":" \ -e "/^RUNTIME_PREFIX/s:=.*:=\"/\":" \ @@ -390,9 +394,9 @@ src_compile() { fi emake || die "make failed" - [[ ${CTARGET} != ${CHOST} ]] && return 0 - - if [[ ${CHOST} == *-uclibc ]] ; then + if [[ ${CTARGET} != ${CHOST} ]] ; then + emake -C utils hostutils || die "make hostutils failed" + elif [[ ${CHOST} == *-uclibc ]] ; then emake utils || die "make utils failed" fi } @@ -412,7 +416,7 @@ src_install() { local target="install" just_headers && target="install_dev" - make DESTDIR="${sysroot}" ${target} || die "install failed" + emake DESTDIR="${sysroot}" ${target} || die "install failed" # remove files coming from kernel-headers rm -rf "${sysroot}"/usr/include/{linux,asm*} @@ -422,6 +426,8 @@ src_install() { # system headers correctly. See gcc/doc/gccinstall.info if [[ ${CTARGET} != ${CHOST} ]] ; then dosym usr/include /usr/${CTARGET}/sys-include + newbin utils/ldconfig.host ${CTARGET}-ldconfig || die + newbin utils/ldd.host ${CTARGET}-ldd || die return 0 fi