blob: efca76733c93463e913419b2072b3ae1c7719fd2 (
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit autotools flag-o-matic toolchain-funcs multilib-minimal
MIN_PV="$(ver_cut 2)"
DESCRIPTION="Netscape Portable Runtime"
HOMEPAGE="https://www.mozilla.org/projects/nspr/"
SRC_URI="https://archive.mozilla.org/pub/nspr/releases/v${PV}/src/${P}.tar.gz"
LICENSE="|| ( MPL-2.0 GPL-2 LGPL-2.1 )"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris"
IUSE="debug"
MULTILIB_CHOST_TOOLS=(
/usr/bin/nspr-config
)
PATCHES=(
"${FILESDIR}"/${PN}-4.10.6-solaris.patch
"${FILESDIR}"/${PN}-4.23-prtime.patch
"${FILESDIR}"/${PN}-4.7.1-solaris.patch
"${FILESDIR}"/${PN}-4.8.4-darwin-install_name.patch
"${FILESDIR}"/${PN}-4.8.9-link-flags.patch
# We do not need to pass -L$libdir via nspr-config --libs
"${FILESDIR}"/${PN}-4.9.5_nspr_config.patch
)
QA_CONFIGURE_OPTIONS="--disable-static"
src_prepare() {
cd "${S}"/nspr || die
default
if use elibc_musl; then
eapply "${FILESDIR}"/${PN}-4.21-ipv6-musl-support.patch
eapply "${FILESDIR}"/nspr-4.35-bgo-905998-lfs64-musl.patch
fi
# rename configure.in to configure.ac for new autotools compatibility
if [[ -e "${S}"/nspr/configure.in ]] ; then
einfo "Renaming configure.in to configure.ac"
mv "${S}"/nspr/configure.{in,ac} || die
else
elog "configure.in rename logic can be removed from ebuild."
fi
# We must run eautoconf to regenerate configure
eautoconf
# make sure it won't find Perl out of Prefix
sed -i -e "s/perl5//g" "${S}"/nspr/configure || die
# Respect LDFLAGS
sed -i -e 's/\$(MKSHLIB) \$(OBJS)/\$(MKSHLIB) \$(LDFLAGS) \$(OBJS)/g' \
"${S}"/nspr/config/rules.mk || die
}
multilib_src_configure() {
# The build system overrides user optimization level based on a configure flag. #886987
local my_optlvl=$(get-flag '-O*')
# We use the standard BUILD_xxx but nspr uses HOST_xxx
tc-export_build_env BUILD_CC
export HOST_CC=${BUILD_CC} HOST_CFLAGS=${BUILD_CFLAGS} HOST_LDFLAGS=${BUILD_LDFLAGS}
tc-export AR AS CC CXX RANLIB
[[ ${CBUILD} != ${CHOST} ]] \
&& export CROSS_COMPILE=1 \
|| unset CROSS_COMPILE
local myconf=( --libdir="${EPREFIX}/usr/$(get_libdir)" )
# Optimization is disabled when debug is enabled.
if use debug; then
myconf+=( --enable-debug )
else
myconf+=( --disable-debug )
myconf+=( --enable-optimize="${my_optlvl}" )
fi
# The configure has some fancy --enable-{{n,x}32,64bit} switches
# that trigger some code conditional to platform & arch. This really
# matters for the few common arches (x86, ppc) but we pass a little
# more of them to be future-proof.
# use ABI first, this will work for most cases
case "${ABI}" in
alpha|arm|hppa|m68k|o32|ppc|s390|sh|sparc|x86) ;;
n32) myconf+=( --enable-n32 );;
x32) myconf+=( --enable-x32 );;
s390x|*64) myconf+=( --enable-64bit );;
default) # no abi actually set, fall back to old check
einfo "Running a short build test to determine 64bit'ness"
echo > "${T}"/test.c || die
${CC} ${CFLAGS} ${CPPFLAGS} -c "${T}"/test.c -o "${T}"/test.o || die
case $(file "${T}"/test.o) in
*32-bit*x86-64*) myconf+=( --enable-x32 );;
*64-bit*|*ppc64*|*x86_64*) myconf+=( --enable-64bit );;
*32-bit*|*ppc*|*i386*) ;;
*) die "Failed to detect whether your arch is 64bits or 32bits, disable distcc if you're using it, please";;
esac ;;
*) ;;
esac
# Ancient autoconf needs help finding the right tools.
LC_ALL="C" ECONF_SOURCE="${S}/nspr" \
ac_cv_path_AR="${AR}" \
ac_cv_path_AS="${AS}" \
econf "${myconf[@]}"
}
multilib_src_test() {
# https://firefox-source-docs.mozilla.org/nspr/running_nspr_tests.html
cd "${BUILD_DIR}/pr/tests" || die
einfo "Building tests"
emake
einfo "Running test suite"
../../../${P}/${PN}/pr/tests/runtests.pl | tee "${T}"/${ABI}-tests.log
# Needed to check if runtests.pl itself or the tee (somehow) failed
# (can't use die with pipes to check each component)
[[ ${PIPESTATUS[@]} == "0 0" ]] || die "Tests failed to run!"
local known_failures=(
# network-sandbox related?
cltsrv
# network-sandbox related?
gethost
)
local known_failure
for known_failure in "${known_failures[@]}" ; do
sed -i -e "/${known_failure}.*FAILED/d" "${T}"/${ABI}-tests.log || die
done
# But to actually check the test results, we examine the log.
if grep -q "FAILED" "${T}"/${ABI}-tests.log ; then
die "Test failure for ${ABI}!"
fi
}
multilib_src_install() {
# Their build system is royally confusing, as usual
MINOR_VERSION=${MIN_PV} # Used for .so version
emake DESTDIR="${D}" install
einfo "removing static libraries as upstream has requested!"
rm "${ED}"/usr/$(get_libdir)/*.a || die "failed to remove static libraries."
# install nspr-config
dobin config/nspr-config
# Remove stupid files in /usr/bin
rm "${ED}"/usr/bin/prerr.properties || die
# This is used only to generate prerr.c and prerr.h at build time.
# No other projects use it, and we don't want to depend on perl.
# Talked to upstream and they agreed w/punting.
rm "${ED}"/usr/bin/compile-et.pl || die
}
|