1 INHIBIT_SYSROOT_STRIP = "1"
3 PACKAGES = "${PN}-dbg sln nscd ldconfig ldd ldso tzcode glibc-thread-db ${PN}-pic libmemusage malloc-debug libnss-db ${PN}-pcprofile libsotruss ${PN} ${PN}-utils glibc-extra-nss ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}-src"
5 # The ld.so in this glibc supports the GNU_HASH
6 RPROVIDES:${PN} = "eglibc rtld(GNU_HASH)"
7 RPROVIDES:${PN}-utils = "eglibc-utils"
8 RPROVIDES:${PN}-mtrace = "eglibc-mtrace libc-mtrace"
9 RPROVIDES:${PN}-pic = "eglibc-pic"
10 RPROVIDES:${PN}-dev = "eglibc-dev libc6-dev virtual-libc-dev"
11 RPROVIDES:${PN}-staticdev = "eglibc-staticdev"
12 RPROVIDES:${PN}-doc = "eglibc-doc"
13 RPROVIDES:glibc-extra-nss = "eglibc-extra-nss"
14 RPROVIDES:glibc-thread-db = "eglibc-thread-db"
15 RPROVIDES:${PN}-pcprofile = "eglibc-pcprofile"
16 RPROVIDES:${PN}-dbg = "eglibc-dbg"
17 libc_baselibs = "${base_libdir}/libc.so.* ${base_libdir}/libc-*.so ${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so ${base_libdir}/libmvec-*.so ${base_libdir}/ld*.so.* ${base_libdir}/ld-*.so ${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so ${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so ${base_libdir}/librt*.so.* ${base_libdir}/librt-*.so ${base_libdir}/libutil*.so.* ${base_libdir}/libutil-*.so ${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so ${base_libdir}/libnss_files*.so.* ${base_libdir}/libnss_files-*.so ${base_libdir}/libnss_compat*.so.* ${base_libdir}/libnss_compat-*.so ${base_libdir}/libnss_dns*.so.* ${base_libdir}/libnss_dns-*.so ${base_libdir}/libdl*.so.* ${base_libdir}/libdl-*.so ${base_libdir}/libanl*.so.* ${base_libdir}/libanl-*.so ${base_libdir}/libBrokenLocale*.so.* ${base_libdir}/libBrokenLocale-*.so"
18 ARCH_DYNAMIC_LOADER = ""
19 # The aarch64 ABI says the dynamic linker -must- be
20 # /lib/ld-linux-aarch64{,_be}.so.1. With usrmerge, that may mean that
21 # we need to install it in /usr/lib.
22 ARCH_DYNAMIC_LOADER:aarch64 = "ld-linux-${TARGET_ARCH}.so.1"
23 libc_baselibs:append = " ${@oe.utils.conditional('ARCH_DYNAMIC_LOADER', '', '', '${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}', d)}"
24 INSANE_SKIP:${PN}:append:aarch64 = " libdir"
25 INSANE_SKIP:${PN}-dev += "staticdev"
26 INSANE_SKIP:${MLPREFIX}ldso:append = " dev-so libdir"
28 FILES:${PN} = "${libc_baselibs} ${libexecdir}/* ${sysconfdir}/ld.so.conf"
29 CONFFILES:${PN} = "${sysconfdir}/ld.so.conf"
30 RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'ldconfig', '${MLPREFIX}ldconfig', '', d)}"
31 FILES:ldconfig = "${base_sbindir}/ldconfig"
32 FILES:ldd = "${bindir}/ldd"
33 FILES:ldso = "${bindir}/${MLPREFIX}ld.so"
34 FILES:libmemusage = "${base_libdir}/libmemusage.so"
35 FILES:malloc-debug = "${base_libdir}/libc_malloc_debug.so.0"
36 FILES:libnss-db = "${base_libdir}/libnss_db.so.* ${base_libdir}/libnss_db-*.so ${localstatedir}/db/Makefile ${localstatedir}/db/makedbs.sh"
37 RDEPENDS:libnss-db = "${PN}-utils"
38 FILES:glibc-extra-nss = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*"
39 FILES:sln = "${base_sbindir}/sln"
40 FILES:${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
41 FILES:libsotruss = "${libdir}/audit/sotruss-lib.so"
42 FILES_SOLIBSDEV = "${libdir}/lib*${SOLIBSDEV}"
43 FILES:${PN}-dev += "${libdir}/libpthread.a ${libdir}/libdl.a ${libdir}/libutil.a ${libdir}/libanl.a ${libdir}/*_nonshared.a ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal ${libdir}/gcc/${TARGET_SYS}/*/finclude"
44 RDEPENDS:${PN}-dev = "linux-libc-headers-dev"
45 FILES:${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
46 FILES:nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_system_unitdir}/nscd* ${nonarch_libdir}/tmpfiles.d/nscd.conf \
47 ${sysconfdir}/nscd.conf ${sysconfdir}/default/volatiles/98_nscd ${localstatedir}/db/nscd"
48 FILES:${PN}-mtrace = "${bindir}/mtrace"
49 FILES:tzcode = "${bindir}/tzselect ${sbindir}/zic ${bindir}/zdump"
50 FILES:${PN}-utils = "${bindir}/* ${sbindir}/*"
51 FILES:${PN}-pcprofile = "${base_libdir}/libpcprofile.so"
52 FILES:glibc-thread-db = "${base_libdir}/libthread_db.so.* ${base_libdir}/libthread_db-*.so"
53 RPROVIDES:${PN}-dev += "libc-dev"
54 RPROVIDES:${PN}-staticdev += "libc-staticdev"
56 SUMMARY:sln = "The static ln"
57 DESCRIPTION:sln = "Similar to the 'ln' utility, but statically linked. sln is useful to make symbolic links to dynamic libraries if the dynamic linking system, for some reason, is not functional."
58 SUMMARY:nscd = "Name service cache daemon"
59 DESCRIPTION:nscd = "nscd, name service cache daemon, caches name service lookups for the passwd, group and hosts information. It can damatically improvide performance with remote, such as NIS or NIS+, name services."
60 SUMMARY:glibc-extra-nss = "hesiod, NIS and NIS+ nss libraries"
61 DESCRIPTION:glibc-extra-nss = "glibc: nis, nisplus and hesiod search services."
62 SUMMARY:ldd = "print shared library dependencies"
63 DESCRIPTION:ldd = "${bindir}/ldd prints shared library dependencies for each program or shared library specified on the command line."
64 SUMMARY:${PN}-utils = "Miscellaneous utilities provided by glibc"
65 DESCRIPTION:${PN}-utils = "Miscellaneous utilities including getconf, iconv, locale, gencat, ..."
66 DESCRIPTION:libsotruss = "Library to support sotruss which traces calls through PLTs"
67 DESCRIPTION:tzcode = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
69 inherit multilib_header
72 oe_runmake install_root=${D} install
73 install -Dm 0644 ${UNPACKDIR}/etc/ld.so.conf ${D}/${sysconfdir}/ld.so.conf
74 install -d ${D}${localedir}
75 make -f ${UNPACKDIR}/generate-supported.mk IN="${S}/localedata/SUPPORTED" OUT="${WORKDIR}/SUPPORTED"
76 # get rid of some broken files...
77 for i in ${GLIBC_BROKEN_LOCALES}; do
78 sed -i "/$i/d" ${WORKDIR}/SUPPORTED
80 rm -f ${D}${sysconfdir}/rpc
81 rm -rf ${D}${datadir}/zoneinfo
82 rm -rf ${D}${libexecdir}/getconf
84 rm -f ${D}${sysconfdir}/localtime
86 # remove empty glibc dir
87 if [ -d ${D}${libexecdir} ]; then
88 rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
91 oe_multilib_header bits/syscall.h bits/long-double.h bits/floatn.h bits/endianness.h bits/struct_rwlock.h bits/math-vector.h bits/indirect-return.h
93 if [ -f ${D}${bindir}/mtrace ]; then
94 sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' -e '2s,exec.*perl,exec ${USRBINPATH}/env perl,' ${D}${bindir}/mtrace
96 # Info dir listing isn't interesting at this point so remove it if it exists.
97 if [ -e "${D}${infodir}/dir" ]; then
98 rm -f ${D}${infodir}/dir
101 install -d ${D}${sysconfdir}/init.d
102 install -d ${D}${localstatedir}/db/nscd
103 install -m 0755 ${S}/nscd/nscd.init ${D}${sysconfdir}/init.d/nscd
104 install -m 0755 ${S}/nscd/nscd.conf ${D}${sysconfdir}/nscd.conf
105 install -m 0755 ${UNPACKDIR}/makedbs.sh ${D}${localstatedir}/db
106 sed -i "s%daemon%start-stop-daemon --start --exec%g" ${D}${sysconfdir}/init.d/nscd
107 sed -i "s|\(enable-cache\t\+netgroup\t\+\)yes|\1no|" ${D}${sysconfdir}/nscd.conf
109 install -d ${D}${systemd_system_unitdir}
110 install -m 0644 ${S}/nscd/nscd.service ${D}${systemd_system_unitdir}/
112 # The dynamic loader will have been installed into
113 # ${base_libdir}. However, if that isn't going to end up being
114 # available in the ABI-mandated location, then a symlink must
117 if [ -n "${ARCH_DYNAMIC_LOADER}" -a ! -e "${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
118 install -d ${D}${root_prefix}/lib
119 ln -s ${@oe.path.relative('${root_prefix}/lib', '${base_libdir}')}/${ARCH_DYNAMIC_LOADER} \
120 ${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}
122 ln -rs ${D}${base_libdir}/libpthread.so.0 ${D}${libdir}/libpthread.so
123 ln -rs ${D}${base_libdir}/librt.so.1 ${D}${libdir}/librt.so
124 if [ -n "${MLPREFIX}" ]; then
125 mv ${D}${bindir}/ld.so ${D}${bindir}/${MLPREFIX}ld.so
129 def get_libc_fpu_setting(bb, d):
130 if d.getVar('TARGET_FPU') in [ 'soft', 'ppc-efd' ]:
131 return "--without-fp"
134 do_install:append:class-target() {
135 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
136 install -d ${D}${nonarch_libdir}/tmpfiles.d
137 echo "d /run/nscd 755 root root -" \
138 > ${D}${nonarch_libdir}/tmpfiles.d/nscd.conf
141 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
142 install -d ${D}${sysconfdir}/default/volatiles
143 echo "d root root 0755 /var/run/nscd none" \
144 > ${D}${sysconfdir}/default/volatiles/98_nscd
148 do_install:append:aarch64 () {
149 do_install_armmultilib
152 do_install:append:arm () {
153 do_install_armmultilib
156 do_install:append:armeb () {
157 do_install_armmultilib
160 do_install_armmultilib () {
161 oe_multilib_header bits/endian.h bits/fcntl.h bits/fenv.h bits/fp-fast.h bits/hwcap.h bits/ipc.h bits/link.h
162 oe_multilib_header bits/local_lim.h bits/mman.h bits/msq.h bits/pthreadtypes.h bits/pthreadtypes-arch.h bits/sem.h bits/semaphore.h bits/setjmp.h
163 oe_multilib_header bits/shm.h bits/sigstack.h bits/stat.h bits/statfs.h bits/typesizes.h
164 oe_multilib_header bits/procfs-id.h bits/procfs.h bits/shmlba.h
165 oe_multilib_header bits/struct_stat.h bits/pthread_stack_min.h
166 oe_multilib_header bits/dl_find_object.h bits/rseq.h bits/timesize.h
168 oe_multilib_header fpu_control.h gnu/lib-names.h gnu/stubs.h ieee754.h
170 oe_multilib_header sys/elf.h sys/procfs.h sys/ptrace.h sys/ucontext.h sys/user.h
173 do_install_armmultilib:append:class-target() {
174 gcc_version=$($CC -dumpversion)
175 mkdir -p ${D}${libdir}/gcc/${TARGET_SYS}/${gcc_version}/finclude
176 mv ${D}${includedir}/finclude/math-vector-fortran.h ${D}${libdir}/gcc/${TARGET_SYS}/${gcc_version}/finclude/
177 rmdir --ignore-fail-on-non-empty ${D}${includedir}/finclude
180 LOCALESTASH = "${WORKDIR}/stashed-locale"
181 bashscripts = "mtrace sotruss xtrace"
185 install -d $dest${base_libdir} $dest${bindir} $dest${libdir} $dest${datadir}
186 # Hide away the locale data from the deployment
187 if [ -e ${D}${bindir}/localedef ]; then
188 cp -a ${D}${bindir}/localedef $dest${bindir}
190 if [ -e ${D}${libdir}/gconv ]; then
191 cp -a ${D}${libdir}/gconv $dest${libdir}
193 if [ -e ${D}${datadir}/i18n ]; then
194 cp -a ${D}${datadir}/i18n $dest${datadir}
197 # Make a copy of all the libraries into the locale stash
198 cp -fpPR ${D}${libdir}/* $dest${libdir}
199 if [ "${base_libdir}" != "${libdir}" ]; then
200 cp -fpPR ${D}${base_libdir}/* $dest${base_libdir}
202 if [ -e ${D}${exec_prefix}/lib ]; then
203 if [ ${exec_prefix}/lib != ${base_libdir} ] && [ ${exec_prefix}/lib != ${libdir} ]; then
204 cp -fpPR ${D}${exec_prefix}/lib $dest${exec_prefix}
208 cp -fpPR ${D}${datadir}/* $dest${datadir}
209 cp -fpPR ${WORKDIR}/SUPPORTED $dest
213 for i in ${bashscripts}; do
214 if [ -f ${D}${bindir}/$i ]; then
215 cp ${D}${bindir}/$i $target/
220 addtask do_stash_locale after do_install before do_populate_sysroot do_package
221 do_stash_locale[dirs] = "${B}"
222 do_stash_locale[cleandirs] = "${LOCALESTASH}"
223 SSTATETASKS += "do_stash_locale"
224 do_stash_locale[sstate-inputdirs] = "${LOCALESTASH}"
225 do_stash_locale[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
226 do_stash_locale[sstate-fixmedir] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
228 python do_stash_locale_setscene () {
231 addtask do_stash_locale_setscene
233 PACKAGE_PREPROCESS_FUNCS += "stash_locale_package_cleanup"
234 SYSROOT_PREPROCESS_FUNCS += "stash_locale_sysroot_cleanup"
235 stash_locale_cleanup () {
237 # Remove all files which do_stash_locale() copies
238 for i in ${bashscripts}; do
239 rm -f $cleanupdir${bindir}/$i
241 rm -f $cleanupdir${bindir}/localedef
242 rm -rf $cleanupdir${datadir}/i18n
243 rm -rf $cleanupdir${libdir}/gconv
244 rm -rf $cleanupdir${localedir}
245 rm -rf $cleanupdir${datadir}/locale
246 rmdir --ignore-fail-on-non-empty $cleanupdir${datadir}
248 if [ "${libdir}" != "${exec_prefix}/lib" ] && [ "${root_prefix}/lib" != "${exec_prefix}/lib" ]; then
249 if [ -d "$cleanupdir${exec_prefix}/lib" ]; then
250 if [ -z "${ARCH_DYNAMIC_LOADER}" -o \
251 ! -e "$cleanupdir${exec_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
252 # error out if directory isn't empty
253 # this dir should only contain locale dir
254 # which has been deleted in the previous step
255 rmdir $cleanupdir${exec_prefix}/lib
261 stash_locale_sysroot_cleanup() {
262 stash_locale_cleanup ${SYSROOT_DESTDIR}
264 stash_locale_package_cleanup() {
265 stash_locale_cleanup ${PKGD}
268 python populate_packages:prepend () {
269 if d.getVar('DEBIAN_NAMES'):
270 pkgs = d.getVar('PACKAGES').split()
271 bpn = d.getVar('BPN')
272 prefix = d.getVar('MLPREFIX') or ""
273 # Set the base package...
274 d.setVar('PKG:' + prefix + bpn, prefix + 'libc6')
275 libcprefix = prefix + bpn + '-'
277 # And all the subpackages.
278 if p.startswith(libcprefix):
279 renamed = p.replace(bpn, 'libc6', 1)
280 d.setVar('PKG:' + p, renamed)
281 # For backward compatibility with old -dbg package
282 d.appendVar('RPROVIDES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
283 d.appendVar('RCONFLICTS:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
284 d.appendVar('RREPLACES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
287 pkg_postinst:nscd () {
289 if command -v systemd-tmpfiles >/dev/null; then
290 systemd-tmpfiles --create ${nonarch_libdir}/tmpfiles.d/nscd.conf
291 elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
292 ${sysconfdir}/init.d/populate-volatile.sh update
296 CONFFILES:nscd = "${sysconfdir}/nscd.conf"
298 SYSTEMD_PACKAGES = "nscd"
299 SYSTEMD_SERVICE:nscd = "nscd.service"