Gentoo Archives: gentoo-commits

From: "Anthony G. Basile" <blueness@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-libs/uclibc-ng/
Date: Fri, 04 Sep 2020 16:50:27
Message-Id: 1599238218.efff22eefacf8ee517dd5bab475e504896e21334.blueness@gentoo
1 commit: efff22eefacf8ee517dd5bab475e504896e21334
2 Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
3 AuthorDate: Fri Sep 4 16:50:08 2020 +0000
4 Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
5 CommitDate: Fri Sep 4 16:50:18 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=efff22ee
7
8 sys-libs/uclibc-ng: version bump to 1.0.35
9
10 Package-Manager: Portage-3.0.4, Repoman-3.0.1
11 Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>
12
13 sys-libs/uclibc-ng/Manifest | 1 +
14 sys-libs/uclibc-ng/uclibc-ng-1.0.35.ebuild | 402 +++++++++++++++++++++++++++++
15 2 files changed, 403 insertions(+)
16
17 diff --git a/sys-libs/uclibc-ng/Manifest b/sys-libs/uclibc-ng/Manifest
18 index e1e3317ae7c..cd8ee877e8b 100644
19 --- a/sys-libs/uclibc-ng/Manifest
20 +++ b/sys-libs/uclibc-ng/Manifest
21 @@ -1,3 +1,4 @@
22 DIST uClibc-ng-1.0.30.tar.bz2 2302796 BLAKE2B 21888dfe5a68f83b7ba56bb557ecc5aa19fd75cedc82f2ed48073f47655888719feb27943e0309f8101a24fd2fd9165af31d5679f21c00b12f27ebfccf354bac SHA512 ddd1d91dcfdf7be8471afecf13196563ad348c41e2fa8b63ae50b83f103cf8ed8d9f003b51a54a58db2935b84692b7c011a4779582f30610ede44cb583aae742
23 DIST uClibc-ng-1.0.32.tar.bz2 2352471 BLAKE2B 887b67f7f03fc8610d8236a18f90584720a78bfc3a036cd6616453bea6e31140f5fd1dfd1d207cc5100854bf3e0c5cc1ca38fe6c31cf97b631892767ae23ec27 SHA512 1de5d4e99b94eeeada4233c53a95ea1b9e704ce1d4aa19ca9b17535c0328b2372ed93d24591c6ea5bfbc0b950aa575c18dcf6950fb04342924bb2b5f9ee235e8
24 DIST uClibc-ng-1.0.33.tar.bz2 2399235 BLAKE2B c20fd767487b2f24a0af432a1366bfb6ddf02243495d2f1c3fa95db25551a8d6215be184608528ee544661ec2ddbc2f439299245ff3dff4597b376dc7a4658ec SHA512 cab89fb6a6e314c6cc8ac964604bdfae01d2e45dc71678bbb6a8985871f625ac680fec3ddc1cb29f6d15585b7fcb782eaf40fa6c89207cde2a04286c3d610169
25 +DIST uClibc-ng-1.0.35.tar.bz2 2396789 BLAKE2B b4e08ccb2bbf15d6a63e279f80792520edba78a9b95cde0432a2dbfc10d4830a621d71af97d4f2bbd867e6367182847c35b62f3c315dff85ecf0c680122238e0 SHA512 da2a1bc6e4a9ce1e3f436b9987fc5f6bb968e52f09508bef6588b409b861ece29d9c1411ffb88863de3a700cb19ad52a8d38596955d3b7bbfb3b0d3745daa25f
26
27 diff --git a/sys-libs/uclibc-ng/uclibc-ng-1.0.35.ebuild b/sys-libs/uclibc-ng/uclibc-ng-1.0.35.ebuild
28 new file mode 100644
29 index 00000000000..5ef7e61a3a9
30 --- /dev/null
31 +++ b/sys-libs/uclibc-ng/uclibc-ng-1.0.35.ebuild
32 @@ -0,0 +1,402 @@
33 +# Copyright 1999-2020 Gentoo Authors
34 +# Distributed under the terms of the GNU General Public License v2
35 +
36 +EAPI="7"
37 +
38 +inherit flag-o-matic multilib savedconfig toolchain-funcs
39 +
40 +if [[ ${PV} == "9999" ]] ; then
41 + EGIT_REPO_URI="git://uclibc-ng.org/git/uclibc-ng"
42 + inherit git-r3
43 + MY_P=uclibc-ng-${PV}
44 +else
45 + MY_P=uClibc-ng-${PV}
46 +fi
47 +
48 +DESCRIPTION="C library for developing embedded Linux systems"
49 +HOMEPAGE="https://uclibc-ng.org/"
50 +if [[ ${PV} != "9999" ]] ; then
51 + PATCH_VER=""
52 + SRC_URI="https://downloads.uclibc-ng.org/releases/${PV}/${MY_P}.tar.bz2"
53 + KEYWORDS="-* ~amd64 ~arm ~mips ~ppc ~x86"
54 +fi
55 +
56 +LICENSE="LGPL-2"
57 +SLOT="0"
58 +IUSE="debug hardened iconv ipv6 symlink-compat headers-only"
59 +# tests fail due to unusual makefile
60 +RESTRICT="strip test"
61 +
62 +# 1) We can't upgrade from uclibc to uclibc-ng via a soft blocker since portage
63 +# will delete the ld.so sym link prematurely and break the system. So we
64 +# will hard block and give manual migration instructions.
65 +# 2) Currently uclibc and uclibc-ng's iconv are in bad shape. We've been using
66 +# the breakout library. The disadvantage here is that we have to sprinkle
67 +# LDFAGS=-liconv on build systems that need to link against libiconv.
68 +RDEPEND="
69 + !!sys-libs/uclibc
70 + iconv? ( dev-libs/libiconv )"
71 +
72 +S=${WORKDIR}/${MY_P}
73 +
74 +export CBUILD=${CBUILD:-${CHOST}}
75 +export CTARGET=${CTARGET:-${CHOST}}
76 +if [[ ${CHOST} == ${CTARGET} ]] ; then
77 + if [[ ${CATEGORY} == cross-* ]] ; then
78 + export CTARGET=${CATEGORY#cross-}
79 + fi
80 +fi
81 +
82 +is_crosscompile() {
83 + [[ ${CHOST} != ${CTARGET} ]]
84 +}
85 +
86 +alt_build_kprefix() {
87 + if [[ ${CBUILD} == ${CHOST} && ${CHOST} == ${CTARGET} ]] ; then
88 + echo /usr/include
89 + else
90 + echo /usr/${CTARGET}/usr/include
91 + fi
92 +}
93 +
94 +just_headers() {
95 + use headers-only && is_crosscompile
96 +}
97 +
98 +uclibc_endian() {
99 + # XXX: this wont work for a toolchain which is bi-endian, but we
100 + # dont have any such thing at the moment, so not a big deal
101 + touch "${T}"/endian.s
102 + $(tc-getAS ${CTARGET}) "${T}"/endian.s -o "${T}"/endian.o
103 + case $(file "${T}"/endian.o) in
104 + *" MSB "*) echo "BIG";;
105 + *" LSB "*) echo "LITTLE";;
106 + *) echo "NFC";;
107 + esac
108 + rm -f "${T}"/endian.{s,o}
109 +}
110 +
111 +kconfig_q_opt() {
112 + local flag=$1; shift
113 + case ${flag} in
114 + y|n) ;;
115 + *) flag=$(usex ${flag} y n) ;;
116 + esac
117 +
118 + local var="defs_${flag}"
119 + eval "${var}+=( $* )"
120 +}
121 +
122 +get_opt() {
123 + (
124 + unset ${1}
125 + . ${2:-"${S}"/.config}
126 + echo ${!1}
127 + )
128 +}
129 +
130 +make_oldconfig() {
131 + yes "" 2>/dev/null | emake -s oldconfig >/dev/null
132 +}
133 +
134 +make_config() {
135 + restore_config .config
136 + if [ -f .config ]; then
137 + make_oldconfig
138 + return 0
139 + else
140 + ewarn "Could not locate user configfile, so we will save a default one"
141 + fi
142 +
143 + emake ARCH=$1 defconfig >/dev/null
144 +
145 + local defs_{y,n}
146 +
147 + # These are forced off
148 + defs_n=(
149 + DOASSERTS
150 + DODEBUG_PT
151 + HAS_NO_THREADS
152 + PROPOLICE_BLOCK_ABRT
153 + SSP_QUICK_CANARY
154 + SUPPORT_LD_DEBUG_EARLY
155 + UCLIBC_HAS_CTYPE_UNSAFE
156 + UCLIBC_HAS_LOCALE
157 + LDSO_SAFE_RUNPATH
158 + )
159 +
160 + # These are forced on
161 + defs_y=(
162 + DO_C99_MATH
163 + DO_XSI_MATH
164 + FORCE_SHAREABLE_TEXT_SEGMENTS
165 + LDSO_GNU_HASH_SUPPORT
166 + LDSO_PRELOAD_FILE_SUPPORT
167 + LDSO_RUNPATH
168 + LDSO_RUNPATH_OF_EXECUTABLE
169 + LDSO_STANDALONE_SUPPORT
170 + PROPOLICE_BLOCK_SEGV
171 + PTHREADS_DEBUG_SUPPORT
172 + UCLIBC_HAS_ARC4RANDOM
173 + UCLIBC_HAS_BACKTRACE
174 + UCLIBC_HAS_BSD_RES_CLOSE
175 + UCLIBC_HAS_CONTEXT_FUNCS
176 + UCLIBC_HAS_CTYPE_CHECKED
177 + UCLIBC_HAS_EXTRA_COMPAT_RES_STATE
178 + UCLIBC_HAS_FENV
179 + UCLIBC_HAS_FOPEN_CLOSEEXEC_MODE
180 + UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE
181 + UCLIBC_HAS_FOPEN_LARGEFILE_MODE
182 + UCLIBC_HAS_FTS
183 + UCLIBC_HAS_FTW
184 + UCLIBC_HAS_GETPT
185 + UCLIBC_HAS_GLIBC_CUSTOM_PRINTF
186 + UCLIBC_HAS_GLIBC_CUSTOM_STREAMS
187 + UCLIBC_HAS_GNU_GLOB
188 + UCLIBC_HAS_HEXADECIMAL_FLOATS
189 + UCLIBC_HAS_LIBUTIL
190 + UCLIBC_HAS_NFTW
191 + UCLIBC_HAS_OBSOLETE_BSD_SIGNAL
192 + UCLIBC_HAS_PRINTF_M_SPEC
193 + UCLIBC_HAS_PROGRAM_INVOCATION_NAME
194 + UCLIBC_HAS_RESOLVER_SUPPORT
195 + UCLIBC_HAS_SHA256_CRYPT_IMPL
196 + UCLIBC_HAS_SHA512_CRYPT_IMPL
197 + UCLIBC_HAS_SSP
198 + UCLIBC_HAS_STUBS
199 + UCLIBC_HAS_SYS_ERRLIST
200 + UCLIBC_HAS_SYS_SIGLIST
201 + UCLIBC_HAS_THREADS_NATIVE
202 + UCLIBC_HAS_TZ_FILE_READ_MANY
203 + UCLIBC_HAS_UTMP
204 + UCLIBC_HAS_UTMPX
205 + UCLIBC_HAS_WCHAR
206 + UCLIBC_HAS_WORDEXP
207 + UCLIBC_NTP_LEGACY
208 + UCLIBC_SUPPORT_AI_ADDRCONFIG
209 + UCLIBC_SUSV2_LEGACY
210 + UCLIBC_SUSV3_LEGACY
211 + UCLIBC_SUSV3_LEGACY_MACROS
212 + UCLIBC_SUSV4_LEGACY
213 + UCLIBC_USE_NETLINK
214 + )
215 +
216 + sed -i -e '/ARCH_.*_ENDIAN/d' .config
217 + kconfig_q_opt y "ARCH_WANTS_$(uclibc_endian)_ENDIAN"
218 +
219 + kconfig_q_opt debug DODEBUG
220 + kconfig_q_opt debug SUPPORT_LD_DEBUG
221 + kconfig_q_opt debug UCLIBC_HAS_PROFILING
222 +
223 + kconfig_q_opt ipv6 UCLIBC_HAS_IPV6
224 +
225 + kconfig_q_opt hardened UCLIBC_BUILD_NOEXECSTACK
226 + kconfig_q_opt hardened UCLIBC_BUILD_NOW
227 + kconfig_q_opt hardened UCLIBC_BUILD_PIE
228 + kconfig_q_opt hardened UCLIBC_BUILD_RELRO
229 + kconfig_q_opt hardened UCLIBC_BUILD_SSP
230 +
231 + local count def
232 + for count in 1 2 ; do
233 + # Run twice as some config opts depend on others being enabled first.
234 + for def in ${defs_y[@]} ; do
235 + sed -i -e "s|.*\<${def}\>.*set|${def}=y|g" .config
236 + done
237 + for def in ${defs_n[@]} ; do
238 + sed -i -e "s|${def}=y|# ${def} is not set|g" .config
239 + done
240 + make_oldconfig
241 + done
242 +
243 + einfo "Enabled options:"
244 + for def in ${defs_y[@]} ; do
245 + einfo " " $(grep "^${def}=y" .config || echo "could not find ${def}")
246 + done
247 + einfo "Disabled options:"
248 + for def in ${defs_n[@]} ; do
249 + einfo " " $(grep "^# ${def} is not set" .config || echo "could not find ${def}")
250 + done
251 +
252 + # setup build and run paths
253 + sed -i \
254 + -e "/^CROSS_COMPILER_PREFIX/s|=.*|=\"${CTARGET}-\"|" \
255 + -e "/^KERNEL_HEADERS/s|=.*|=\"$(alt_build_kprefix)\"|" \
256 + -e "/^SHARED_LIB_LOADER_PREFIX/s|=.*|=\"/$(get_libdir)\"|" \
257 + -e "/^DEVEL_PREFIX/s|=.*|=\"/usr\"|" \
258 + -e "/^RUNTIME_PREFIX/s|=.*|=\"/\"|" \
259 + -e "/^UCLIBC_EXTRA_CFLAGS/s|=.*|=\"${UCLIBC_EXTRA_CFLAGS}\"|" \
260 + .config || die
261 +
262 + make_oldconfig
263 +}
264 +
265 +pkg_setup() {
266 + # Make sure our CHOST is a uclibc toolchain for native compiling
267 + if [[ ${CHOST} == ${CTARGET} ]]; then
268 + case ${CHOST} in
269 + *-uclinux*|*-uclibc*) ;;
270 + *) die "Use sys-devel/crossdev to build a uclibc toolchain" ;;
271 + esac
272 + fi
273 +
274 + # uClibc-ng doesn't carry old Linux threads, and since we force
275 + # threading our only choice is NPTL which requires i486 and later.
276 + [[ ${CTARGET} == i386* ]] && die "i386 can't support Native Posix Threads (NPTL)."
277 +}
278 +
279 +src_prepare() {
280 + local version subversion extraversion
281 +
282 + # uclibc-ng tries to create a two sym link with ld.so,
283 + # ld-uClibc.so.{0,MAJOR_VERSION} -> ld-uClibc-<version>.so
284 + # where MAJOR_VERSION != 0 indicates the ABI verison.
285 + # We want to get rid of this and just have ABI = 0.
286 + eapply "${FILESDIR}"/uclibc-compat-r1.patch
287 +
288 + # We need to change the major.minor.sublevel of uclibc-ng.
289 + # Upstream sets MAJOR_VERSION = 1 which breaks runtime linking.
290 + # If we really want the ABI bump, we'll have to hack the gcc
291 + # spec file and change the '*link:' rule.
292 + version_0=$(ver_cut 1)
293 + version_1=$(ver_cut 2)
294 + version_2=$(ver_cut 3)
295 + if [[ -z ${version_1} ]]; then
296 + subversion=0
297 + extraversion=0
298 + else
299 + subversion=${version_1}
300 + if [[ -z ${version_2} ]]; then
301 + extraversion=0
302 + else
303 + extraversion=.${version_2}
304 + fi
305 + fi
306 +
307 + sed -i \
308 + -e "/^MAJOR_VERSION/s|:=.*|:= 0|" \
309 + -e "/^MINOR_VERSION/s|:=.*|:= ${version_0}|" \
310 + -e "/^SUBLEVEL/s|:=.*|:= ${subversion}|" \
311 + -e "/^EXTRAVERSION/s|:=.*|:= ${extraversion}|" \
312 + Rules.mak || die
313 +
314 + eapply_user
315 +}
316 +
317 +src_configure() {
318 + # Map our toolchain arch name to the name expected by uClibc-ng.
319 + local target=$(tc-arch)
320 + case ${target} in
321 + amd64) target="x86_64";;
322 + arm) target="arm";;
323 + mips) target="mips";;
324 + ppc) target="powerpc";;
325 + x86) target="i386";;
326 + esac
327 +
328 + # Do arch specific configuration by changing the defaults in
329 + # extra/Configs/Config.<arch>. If these are not overridden
330 + # by an save .config, they will be selected by default.
331 +
332 + # For i386, i486, i586 and i686
333 + local cpu
334 + if [[ ${target} == "i386" ]]; then
335 + [[ ${CTARGET} == i[456]86* ]] && cpu="${CTARGET:1:1}86"
336 + sed -i -e "s|default CONFIG_686|default CONFIG_${cpu:-486}|" \
337 + extra/Configs/Config.i386 || die
338 + fi
339 +
340 + # For arm
341 + if [[ ${target} == "arm" ]]; then
342 + sed -i -e '/Build for EABI/a \\tdefault y' extra/Configs/Config.arm
343 + fi
344 +
345 + # We set HOSTCC to the proper tuple rather than just 'gcc'
346 + sed -i -e "s|^HOSTCC.*=.*|HOSTCC=$(tc-getBUILD_CC)|" Rules.mak
347 +
348 + make_config ${target}
349 +
350 + einfo
351 + einfo "Runtime Prefix: /"
352 + einfo "Devel Prefix: /usr"
353 + einfo "Kernel Prefix: $(alt_build_kprefix)"
354 + einfo "CBUILD: ${CBUILD}"
355 + einfo "CHOST: ${CHOST}"
356 + einfo "CTARGET: ${CTARGET}"
357 + einfo "ABI: ${ABI}"
358 + einfo "ENDIAN: $(uclibc_endian)"
359 + einfo
360 +}
361 +
362 +src_compile() {
363 + emake headers
364 + just_headers && return 0
365 +
366 + emake
367 + if is_crosscompile ; then
368 + emake -C utils hostutils
369 + else
370 + emake utils
371 + fi
372 +}
373 +
374 +src_test() {
375 + is_crosscompile && return 0
376 +
377 + # assert test fails on pax/grsec enabled kernels
378 + # normal vfork test fails in sandbox (both glibc/uclibc)
379 + emake UCLIBC_ONLY=1 check
380 +}
381 +
382 +src_install() {
383 + local sysroot=${D}
384 + is_crosscompile && sysroot+="/usr/${CTARGET}"
385 +
386 + local target="install"
387 + just_headers && target="install_headers"
388 + emake DESTDIR="${sysroot}" ${target}
389 +
390 + save_config .config
391 +
392 + # remove files coming from kernel-headers
393 + rm -rf "${sysroot}"/usr/include/{linux,asm*}
394 +
395 + # Make sure we install the sys-include symlink so that when
396 + # we build a 2nd stage cross-compiler, gcc finds the target
397 + # system headers correctly. See gcc/doc/gccinstall.info
398 + if is_crosscompile ; then
399 + dosym usr/include /usr/${CTARGET}/sys-include
400 + if ! just_headers && [[ -n $(get_opt HAVE_SHARED) ]] ; then
401 + newbin utils/ldconfig.host ${CTARGET}-ldconfig
402 + newbin utils/ldd.host ${CTARGET}-ldd
403 + fi
404 + return 0
405 + fi
406 +
407 + if use symlink-compat; then
408 + dosym libc.so.0 "${DESTDIR}"/lib/libcrypt.so.0
409 + dosym libc.so.0 "${DESTDIR}"/lib/libdl.so.0
410 + dosym libc.so.0 "${DESTDIR}"/lib/libm.so.0
411 + dosym libc.so.0 "${DESTDIR}"/lib/libpthread.so.0
412 + dosym libc.so.0 "${DESTDIR}"/lib/librt.so.0
413 + dosym libc.so.0 "${DESTDIR}"/lib/libresolv.so.0
414 + dosym libc.so.0 "${DESTDIR}"/lib/libubacktrace.so.0
415 + dosym libc.so.0 "${DESTDIR}"/lib/libutil.so.0
416 + fi
417 +
418 + emake DESTDIR="${D}" install_utils
419 + dobin extra/scripts/getent
420 + dodoc README docs/*.txt
421 +}
422 +
423 +pkg_postinst() {
424 + is_crosscompile && return 0
425 +
426 + if [ ! -e "${ROOT}"/etc/TZ ] ; then
427 + ewarn "Please remember to set your timezone in /etc/TZ"
428 + mkdir -p "${ROOT}"/etc
429 + echo "UTC" > "${ROOT}"/etc/TZ
430 + fi
431 + [ "${ROOT}" != "/" ] && return 0
432 + # update cache before reloading init
433 + ldconfig
434 +}