[ANNOUNCE] uClibc-0.9.33.1 released

Piotr Gluszenia Slawinski curious at bwv190.internetdsl.tpnet.pl
Fri Apr 13 01:19:06 UTC 2012


On Wed, 11 Apr 2012, Mike Frysinger wrote:

> On Wednesday 11 April 2012 15:31:20 Bernhard Reutner-Fischer wrote:
>> On Wed, Apr 11, 2012 at 09:19:47PM +0200, Piotr Gluszenia Slawinski wrote:
>>> On Wed, 11 Apr 2012, Bernhard Reutner-Fischer wrote:
>>>> Hello all,
>>>>
>>>> The uClibc team is happy to announce the maintenance-release of
>>>> uClibc-0.9.33.1.
>>>
>>> not sure if anyone responsible is on the list but...
>>> will there be release for gentoo?
>>
>> I hope gentoo folks will take care of this soonish, yep.
>
> Ed's been making ebuilds of late


hello. i've attached my (outdated) ebuilds which
has some tweaks to allow i.e. glib to build (but not only).

basically some options were left away in ebuild , i can't recall
well which (diffing should revail...)

there is also nptl ebuild from another (experimental) chroot jail
orbit ebuild which fixes building ipv6 with uclibc
(with patch), glib 2.26 fix , mini-iconv, and uclibc-0.9.32.2 ebuild
allowing to build nptl and locale enabled uclibc for use with glib-enabled 
system - though it's hacked to "just work" , and is not syntax-correct.
there were mainly missing uclibc options added via setopt, but without 
expanding USE flags correctly.

all those are in gzipped tape image attached - perhaps it'll have some 
use.

btw. i'm running system with x and glib , allowing full gtk,
stuff like pidgin, xchat, etc. since few years without issues,
and i'm very glad it works so well :)



-- 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: usr_local_portage.tar.gz
Type: application/octet-stream
Size: 21662 bytes
Desc: 
URL: <http://lists.busybox.net/pipermail/uclibc/attachments/20120413/6e134ee6/attachment-0001.obj>
-------------- next part --------------
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-libs/uclibc/uclibc-0.9.30.1-r1.ebuild,v 1.4 2009/07/26 19:39:02 vapier Exp $

#ESVN_REPO_URI="svn://uclibc.org/trunk/uClibc"
#inherit subversion
inherit eutils flag-o-matic toolchain-funcs savedconfig

export CBUILD=${CBUILD:-${CHOST}}
export CTARGET=${CTARGET:-${CHOST}}
if [[ ${CTARGET} == ${CHOST} ]] ; then
	if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then
		export CTARGET=${CATEGORY/cross-}
	fi
fi
# Handle the case where we want uclibc on glibc ...
if [[ ${CTARGET} == ${CHOST} ]] && [[ ${CHOST} != *-uclibc* ]] ; then
	export UCLIBC_AND_GLIBC="sitting in a tree"
	export CTARGET=${CHOST%%-*}-pc-linux-uclibc
fi

MY_P=uClibc-0.9.30.1
SVN_VER=""
PATCH_VER="1.0"
DESCRIPTION="C library for developing embedded Linux systems"
HOMEPAGE="http://www.uclibc.org/"
SRC_URI="http://uclibc.org/downloads/${MY_P}.tar.bz2"

[[ -z ${SVN_VER} ]] || \
	SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-svn-update-${SVN_VER}.patch.bz2"
[[ -z ${PATCH_VER} ]] || \
	SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-patches-${PATCH_VER}.tar.bz2"

LICENSE="LGPL-2"
SLOT="0"
KEYWORDS="-* ~amd64 ~arm ~m68k ~mips ~ppc ~sh ~sparc ~x86"
IUSE="build elibc_uclibc uclibc-compat debug hardened ssp ipv6 minimal wordexp crosscompile_opts_headers-only"
RESTRICT="strip"

RDEPEND=""
PROVIDE="elibc_uclibc? ( virtual/libc )"
if [[ -n $CTARGET && ${CTARGET} != ${CHOST} ]]; then
	DEPEND=""
	SLOT="${CTARGET}"
else
	DEPEND="virtual/os-headers app-misc/pax-utils"
	SLOT="0"
fi

S=${WORKDIR}/${MY_P}

alt_build_kprefix() {
	if [[ ${CBUILD} == ${CHOST} && ${CTARGET} == ${CHOST} ]] \
	   || [[ -n ${UCLIBC_AND_GLIBC} ]]
	then
		echo /usr/include
	else
		echo /usr/${CTARGET}/usr/include
	fi
}

just_headers() {
	use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
}

uclibc_endian() {
	# XXX: this wont work for a toolchain which is bi-endian, but we
	#      dont have any such thing at the moment, so not a big deal
	touch "${T}"/endian.s
	$(tc-getAS ${CTARGET}) "${T}"/endian.s -o "${T}"/endian.o
	case $(file "${T}"/endian.o) in
		*" MSB "*) echo "big";;
		*" LSB "*) echo "little";;
		*)         echo "NFC";;
	esac
	rm -f "${T}"/endian.{s,o}
}

pkg_setup() {
	just_headers && return 0
	has_version ${CATEGORY}/uclibc || return 0
	[[ -n ${UCLIBC_AND_GLIBC} ]] && return 0
	[[ ${ROOT} != "/" ]] && return 0
	[[ ${CATEGORY} == cross-* ]] && return 0

}

PIE_STABLE="arm mips ppc x86"

CPU_ALPHA=""
CPU_AMD64=""
CPU_ARM="GENERIC_ARM ARM{610,710,7TDMI,720T,920T,922T,926T,10T,1136JF_S,1176JZ{_,F_}S,_{SA110,SA1100,XSCALE,IWMMXT}}"
CPU_IA64=""
CPU_M68K=""
CPU_MIPS="MIPS_ISA_{1,2,3,4,MIPS{32,64}} MIPS_{N64,O32,N32}_ABI"
CPU_PPC=""
CPU_SH="SH{2,3,4,5}"
CPU_SPARC="SPARC_V{7,8,9,9B}"
CPU_X86="GENERIC_386 {3,4,5,6}86 586MMX PENTIUM{II,III,4} K{6,7} ELAN CRUSOE WINCHIP{C6,2} CYRIXIII NEHEMIAH"
IUSE_UCLIBC_CPU="${CPU_ARM} ${CPU_MIPS} ${CPU_PPC} ${CPU_SH} ${CPU_SPARC} ${CPU_X86}"

check_cpu_opts() {
	local cpu_var="CPU_$(echo $(tc-arch) | tr [a-z] [A-Z])"
	[[ -z ${!cpu_var} ]] && return 0

	if [[ -z ${UCLIBC_CPU} ]] ; then
		ewarn "You really should consider setting UCLIBC_CPU"
		ewarn "Otherwise, the build will be generic (read: slow)."
		ewarn "Available CPU options:"
		UCLIBC_CPU=$(eval echo ${!cpu_var})
		echo ${UCLIBC_CPU}
		case ${CTARGET} in
			mips[1234]*) export UCLIBC_CPU="MIPS_ISA_${CTARGET:4:1}";;
			sh[2345]*)   export UCLIBC_CPU="SH${CTARGET:2:1}";;
			i[456]86*)   export UCLIBC_CPU="${CTARGET:1:1}86";;
			*)           export UCLIBC_CPU=${UCLIBC_CPU%% *};;
		esac
	else
		local cpu found=0
		for cpu in $(eval echo ${!cpu_var}) ; do
			[[ ${UCLIBC_CPU} == "${cpu}" ]] && found=1 && break
		done
		if [[ ${found} -eq 0 ]] ; then
			ewarn "UCLIBC_CPU choice '${UCLIBC_CPU}' not supported"
			ewarn "Valid choices:"
			eval echo ${!cpu_var}
			die "pick a supported cpu type"
		fi
	fi
}

set_opt() {
	sed -i -e "/^\# $1 is not set/d" -e "/^$1=.*/d" .config
	echo "$1=$2" >> .config
}

src_unpack() {
	[[ -n ${ESVN_REPO_URI} ]] \
		&& subversion_src_unpack \
		|| unpack ${A}
	cd "${S}"

	check_cpu_opts

	echo
	einfo "Runtime Prefix: /"
	einfo "Devel Prefix:   /usr"
	einfo "Kernel Prefix:  $(alt_build_kprefix)"
	einfo "CBUILD:         ${CBUILD}"
	einfo "CHOST:          ${CHOST}"
	einfo "CTARGET:        ${CTARGET}"
	einfo "CPU:            ${UCLIBC_CPU:-default}"
	einfo "ENDIAN:         $(uclibc_endian)"
	echo

	########## PATCHES ##########

	[[ -n ${SVN_VER} ]] && \
		epatch "${WORKDIR}"/${MY_P}-cvs-update-${SVN_VER}.patch

	if [[ -n ${PATCH_VER} ]] ; then
		unpack ${MY_P}-patches-${PATCH_VER}.tar.bz2
		EPATCH_SUFFIX="patch"
		epatch "${WORKDIR}"/patch
		epatch "/usr/local/portage/sys-libs/uclibc/patches/"
	fi

	sed -i 's:getline:get_line:' extra/scripts/unifdef.c #277186

	########## CPU SELECTION ##########

	local target config_target
	case $(tc-arch) in
		alpha) target="alpha";   config_target="no cpu-specific options";;
		amd64) target="x86_64";  config_target="no cpu-specific options";;
		arm)   target="arm";     config_target="GENERIC_ARM";;
		ia64)  target="ia64";    config_target="no cpu-specific options";;
		m68k)  target="m68k";    config_target="no cpu-specific options";;
		mips)  target="mips";    config_target="MIPS_ISA_1";;
		ppc)   target="powerpc"; config_target="no cpu-specific options";;
		sh)    target="sh";      config_target="SH4";;
		sparc) target="sparc";   config_target="no cpu-specific options";;
		x86)   target="i386";    config_target="GENERIC_386";;
		*)     die "$(tc-arch) lists no defaults :/";;
	esac
	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 ARCH=${target} defconfig >/dev/null || die "could not config"

	for def in DO{DEBUG{,_PT},ASSERTS} SUPPORT_LD_DEBUG{,_EARLY} UCLIBC_HAS_PROFILING; do
		sed -i -e "s:${def}=y:# ${def} is not set:" .config
	done
	if use debug ; then
		set_opt SUPPORT_LD_DEBUG y
		set_opt DODEBUG y
	fi

	sed -i -e '/ARCH_.*_ENDIAN/d' .config
	set_opt "ARCH_WANTS_$(uclibc_endian | tr [a-z] [A-Z])_ENDIAN" y

	if [[ $(tc-is-softfloat) != "no" ]] ; then
		set_opt UCLIBC_HAS_FPU n
	fi

	if [[ ${CTARGET/eabi} != ${CTARGET} ]] ; then
		set_opt CONFIG_ARM_OABI n
		set_opt CONFIG_ARM_EABI y
	fi

	local moredefs="COMPAT_ATEXIT"
	local compat_sym=atexit

	# We need todo this for a few months. .30 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 ${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 -Cq $(echo ${fnames}) | sort | uniq"
				echo
				ewarn "Leaving on ${moredefs}"
			fi
		else
			moredefs=""
		fi
	fi
	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} UCLIBC_HAS_REENTRANT_RPC  UCLIBC_HAS_GNU_GLOB PTHREADS_DEBUG_SUPPORT UCLIBC_HAS_TZ_FILE_READ_MANY UCLIBC_HAS_FENV UCLIBC_SUSV3_LEGACY UCLIBC_SUSV3_LEGACY_MACROS UCLIBC_HAS_PROGRAM_INVOCATION_NAME ; do
		set_opt "${def}" y
	done
	set_opt UCLIBC_HAS_CTYPE_UNSAFE n
	set_opt UCLIBC_HAS_LOCALE n

	set_opt UCLIBC_HAS_GETPT y

	use ipv6 && set_opt UCLIBC_HAS_IPV6 y

	use wordexp && set_opt UCLIBC_HAS_WORDEXP y

	# we need to do it independently of hardened to get ssp.c built into libc
	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
	if has $(tc-arch) x86 || has $(tc-arch) ppc; then
		set_opt UCLIBC_BUILD_NOEXECSTACK y
	else
		set_opt UCLIBC_BUILD_NOEXECSTACK n
	fi
	set_opt UCLIBC_BUILD_RELRO y
	if use hardened ; then
		if has $(tc-arch) ${PIE_STABLE} ; then
			set_opt UCLIBC_BUILD_PIE y
		else
			set_opt UCLIBC_BUILD_PIE n
		fi
		set_opt UCLIBC_BUILD_NOW y
		use ssp && {
			set_opt SSP_QUICK_CANARY n
			set_opt UCLIBC_BUILD_SSP y
		}
	else
		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

	restore_config .config

	# setup build and run paths
	local cross=${CTARGET}-
	type -p ${cross}ar > /dev/null || cross=""
	sed -i \
		-e "/^CROSS_COMPILER_PREFIX/s:=.*:=\"${cross}\":" \
		-e "/^KERNEL_HEADERS/s:=.*:=\"$(alt_build_kprefix)\":" \
		-e "/^SHARED_LIB_LOADER_PREFIX/s:=.*:=\"/$(get_libdir)\":" \
		-e "/^DEVEL_PREFIX/s:=.*:=\"/usr\":" \
		-e "/^RUNTIME_PREFIX/s:=.*:=\"/\":" \
		-e "/^UCLIBC_EXTRA_CFLAGS/s:=.*:=\"${UCLIBC_EXTRA_CFLAGS}\":" \
		.config || die

	yes "" 2> /dev/null | make -s oldconfig > /dev/null || die "could not make oldconfig"

	cp .config myconfig

	emake -s clean > /dev/null || die "could not clean"
}

src_compile() {
	cp myconfig .config

	emake headers || die "make headers failed"
	just_headers && return 0

	emake || die "make failed"
	if [[ ${CTARGET} != ${CHOST} ]] ; then
		emake -C utils hostutils || die "make hostutils failed"
	elif [[ ${CHOST} == *-uclibc* ]] ; then
		emake utils || die "make utils failed"
	fi
}

src_test() {
	[[ ${CHOST} != ${CTARGET} ]] && return 0
	[[ ${CBUILD} != ${CHOST} ]] && return 0

	# assert test fails on pax/grsec enabled kernels - normal
	# vfork test fails in sandbox (both glibc/uclibc)
	make UCLIBC_ONLY=1 check || die "test failed"
}

src_install() {
	local sysroot=${D}
	[[ ${CHOST} != ${CTARGET} ]] && sysroot="${sysroot}/usr/${CTARGET}"

	local target="install"
	just_headers && target="install_headers"
	emake DESTDIR="${sysroot}" ${target} || die "install failed"

	save_config .config

	# remove files coming from kernel-headers
	rm -rf "${sysroot}"/usr/include/{linux,asm*}

	# Make sure we install the sys-include symlink so that when
	# we build a 2nd stage cross-compiler, gcc finds the target
	# system headers correctly.  See gcc/doc/gccinstall.info
	if [[ ${CTARGET} != ${CHOST} ]] ; then
		dosym usr/include /usr/${CTARGET}/sys-include
		if ! just_headers ; then
			newbin utils/ldconfig.host ${CTARGET}-ldconfig || die
			newbin utils/ldd.host ${CTARGET}-ldd || die
		fi
		return 0
	fi

	if [[ ${CHOST} == *-uclibc* ]] ; then
		emake DESTDIR="${D}" install_utils || die "install-utils failed"
		dobin extra/scripts/getent
	fi

	dodoc Changelog* README TODO docs/*.txt DEDICATION.mjn3
}

pkg_postinst() {
	[[ ${CTARGET} != ${CHOST} ]] && return 0
	[[ ${CHOST} != *-uclibc* ]] && return 0

	if [[ ! -e ${ROOT}/etc/TZ ]] ; then
		ewarn "Please remember to set your timezone in /etc/TZ"
		[[ ! -d ${ROOT}/etc ]] && mkdir -p "${ROOT}"/etc
		echo "UTC" > "${ROOT}"/etc/TZ
	fi
	[[ ${ROOT} != "/" ]] && return 0
	# update cache before reloading init
	/sbin/ldconfig
	# reload init ...
	[[ -x /sbin/telinit ]] && /sbin/telinit U &> /dev/null
}


More information about the uClibc mailing list