blob: 52c5992ed28f708c3b248268654f7cafd86cd045 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=6
inherit eutils flag-o-matic multilib toolchain-funcs
if [[ ${PV} == "9999" ]] ; then
EGIT_REPO_URI="git://git.musl-libc.org/musl"
inherit git-r3
SRC_URI="
http://dev.gentoo.org/~blueness/musl-misc/getconf.c
http://dev.gentoo.org/~blueness/musl-misc/getent.c
http://dev.gentoo.org/~blueness/musl-misc/iconv.c"
KEYWORDS=""
else
SRC_URI="http://www.musl-libc.org/releases/${P}.tar.gz
http://dev.gentoo.org/~blueness/musl-misc/getconf.c
http://dev.gentoo.org/~blueness/musl-misc/getent.c
http://dev.gentoo.org/~blueness/musl-misc/iconv.c"
KEYWORDS="-* amd64 arm ~mips ppc x86"
fi
export CBUILD=${CBUILD:-${CHOST}}
export CTARGET=${CTARGET:-${CHOST}}
if [[ ${CTARGET} == ${CHOST} ]] ; then
if [[ ${CATEGORY} == cross-* ]] ; then
export CTARGET=${CATEGORY#cross-}
fi
fi
DESCRIPTION="Light, fast and simple C library focused on standards-conformance and safety"
HOMEPAGE="http://www.musl-libc.org/"
LICENSE="MIT LGPL-2 GPL-2"
SLOT="0"
IUSE="crosscompile_opts_headers-only"
QA_SONAME="/usr/lib/libc.so"
QA_DT_NEEDED="/usr/lib/libc.so"
is_crosscompile() {
[[ ${CHOST} != ${CTARGET} ]]
}
just_headers() {
use crosscompile_opts_headers-only && is_crosscompile
}
musl_endian() {
# XXX: this wont work for bi-endian, but we dont have any
touch "${T}"/endian.s || die
$(tc-getAS ${CTARGET}) "${T}"/endian.s -o "${T}"/endian.o
case $(file "${T}"/endian.o) in
*" MSB "*) echo "";;
*" LSB "*) echo "el";;
*) echo "nfc";; # We shouldn't be here
esac
}
pkg_setup() {
if [ ${CTARGET} == ${CHOST} ] ; then
case ${CHOST} in
*-musl*) ;;
*) die "Use sys-devel/crossdev to build a musl toolchain" ;;
esac
fi
}
src_configure() {
tc-getCC ${CTARGET}
just_headers && export CC=true
local sysroot
is_crosscompile && sysroot=/usr/${CTARGET}
./configure \
--target=${CTARGET} \
--prefix=${sysroot}/usr \
--syslibdir=${sysroot}/lib \
--disable-gcc-wrapper
}
src_compile() {
emake obj/include/bits/alltypes.h
just_headers && return 0
emake
$(tc-getCC) ${CFLAGS} "${DISTDIR}"/getconf.c -o "${T}"/getconf
$(tc-getCC) ${CFLAGS} "${DISTDIR}"/getent.c -o "${T}"/getent
$(tc-getCC) ${CFLAGS} "${DISTDIR}"/iconv.c -o "${T}"/iconv
}
src_install() {
local target="install"
just_headers && target="install-headers"
emake DESTDIR="${D}" ${target}
just_headers && return 0
# musl provides ldd via a sym link to its ld.so
local sysroot
is_crosscompile && sysroot=/usr/${CTARGET}
local ldso=$(basename "${D}"${sysroot}/lib/ld-musl-*)
dosym ${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd
if [[ ${CATEGORY} != cross-* ]] ; then
# TODO: We may be able to simplify this code by obtianing the arch name with
# /usr/lib/libc.so 2>&1 | sed -n 's/^.*(\(.*\))$/\1/;1p'
local target=$(tc-arch) arch
local endian=$(musl_endian)
case ${target} in
amd64) arch="x86_64";;
arm) arch="armhf";; # We only have hardfloat right now
mips) arch="mips${endian}";;
ppc) arch="powerpc";;
x86) arch="i386";;
esac
cp "${FILESDIR}"/ldconfig.in "${T}" || die
sed -e "s|@@ARCH@@|${arch}|" "${T}"/ldconfig.in > "${T}"/ldconfig || die
into /
dosbin "${T}"/ldconfig
into /usr
dobin "${T}"/getconf
dobin "${T}"/getent
dobin "${T}"/iconv
echo 'LDPATH="include ld.so.conf.d/*.conf"' > "${T}"/00musl || die
doenvd "${T}"/00musl || die
fi
}
pkg_postinst() {
is_crosscompile && return 0
[ "${ROOT}" != "/" ] && return 0
ldconfig
# reload init ...
/sbin/telinit U 2>/dev/null
}
|