glibc-package.inc 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. INHIBIT_SYSROOT_STRIP = "1"
  2. 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"
  3. # The ld.so in this glibc supports the GNU_HASH
  4. RPROVIDES:${PN} = "eglibc rtld(GNU_HASH)"
  5. RPROVIDES:${PN}-utils = "eglibc-utils"
  6. RPROVIDES:${PN}-mtrace = "eglibc-mtrace libc-mtrace"
  7. RPROVIDES:${PN}-pic = "eglibc-pic"
  8. RPROVIDES:${PN}-dev = "eglibc-dev libc6-dev virtual-libc-dev"
  9. RPROVIDES:${PN}-staticdev = "eglibc-staticdev"
  10. RPROVIDES:${PN}-doc = "eglibc-doc"
  11. RPROVIDES:glibc-extra-nss = "eglibc-extra-nss"
  12. RPROVIDES:glibc-thread-db = "eglibc-thread-db"
  13. RPROVIDES:${PN}-pcprofile = "eglibc-pcprofile"
  14. RPROVIDES:${PN}-dbg = "eglibc-dbg"
  15. 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"
  16. ARCH_DYNAMIC_LOADER = ""
  17. # The aarch64 ABI says the dynamic linker -must- be
  18. # /lib/ld-linux-aarch64{,_be}.so.1. With usrmerge, that may mean that
  19. # we need to install it in /usr/lib.
  20. ARCH_DYNAMIC_LOADER:aarch64 = "ld-linux-${TARGET_ARCH}.so.1"
  21. libc_baselibs:append = " ${@oe.utils.conditional('ARCH_DYNAMIC_LOADER', '', '', '${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}', d)}"
  22. INSANE_SKIP:${PN}:append:aarch64 = " libdir"
  23. INSANE_SKIP:${PN}-dev += "staticdev"
  24. INSANE_SKIP:${MLPREFIX}ldso:append = " dev-so libdir"
  25. FILES:${PN} = "${libc_baselibs} ${libexecdir}/* ${sysconfdir}/ld.so.conf"
  26. RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'ldconfig', '${MLPREFIX}ldconfig', '', d)}"
  27. FILES:ldconfig = "${base_sbindir}/ldconfig"
  28. FILES:ldd = "${bindir}/ldd"
  29. FILES:ldso = "${bindir}/${MLPREFIX}ld.so"
  30. FILES:libmemusage = "${base_libdir}/libmemusage.so"
  31. FILES:malloc-debug = "${base_libdir}/libc_malloc_debug.so.0"
  32. FILES:libnss-db = "${base_libdir}/libnss_db.so.* ${base_libdir}/libnss_db-*.so ${localstatedir}/db/Makefile ${localstatedir}/db/makedbs.sh"
  33. RDEPENDS:libnss-db = "${PN}-utils"
  34. FILES:glibc-extra-nss = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*"
  35. FILES:sln = "${base_sbindir}/sln"
  36. FILES:${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
  37. FILES:libsotruss = "${libdir}/audit/sotruss-lib.so"
  38. FILES_SOLIBSDEV = "${libdir}/lib*${SOLIBSDEV}"
  39. 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"
  40. RDEPENDS:${PN}-dev = "linux-libc-headers-dev"
  41. FILES:${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
  42. FILES:nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_system_unitdir}/nscd* ${sysconfdir}/tmpfiles.d/nscd.conf \
  43. ${sysconfdir}/nscd.conf ${sysconfdir}/default/volatiles/98_nscd ${localstatedir}/db/nscd"
  44. FILES:${PN}-mtrace = "${bindir}/mtrace"
  45. FILES:tzcode = "${bindir}/tzselect ${sbindir}/zic ${bindir}/zdump"
  46. FILES:${PN}-utils = "${bindir}/* ${sbindir}/*"
  47. FILES:${PN}-pcprofile = "${base_libdir}/libpcprofile.so"
  48. FILES:glibc-thread-db = "${base_libdir}/libthread_db.so.* ${base_libdir}/libthread_db-*.so"
  49. RPROVIDES:${PN}-dev += "libc-dev"
  50. RPROVIDES:${PN}-staticdev += "libc-staticdev"
  51. SUMMARY:sln = "The static ln"
  52. 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."
  53. SUMMARY:nscd = "Name service cache daemon"
  54. 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."
  55. SUMMARY:glibc-extra-nss = "hesiod, NIS and NIS+ nss libraries"
  56. DESCRIPTION:glibc-extra-nss = "glibc: nis, nisplus and hesiod search services."
  57. SUMMARY:ldd = "print shared library dependencies"
  58. DESCRIPTION:ldd = "${bindir}/ldd prints shared library dependencies for each program or shared library specified on the command line."
  59. SUMMARY:${PN}-utils = "Miscellaneous utilities provided by glibc"
  60. DESCRIPTION:${PN}-utils = "Miscellaneous utilities including getconf, iconv, locale, gencat, ..."
  61. DESCRIPTION:libsotruss = "Library to support sotruss which traces calls through PLTs"
  62. DESCRIPTION:tzcode = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
  63. inherit multilib_header
  64. do_install() {
  65. oe_runmake install_root=${D} install
  66. install -Dm 0644 ${WORKDIR}/etc/ld.so.conf ${D}/${sysconfdir}/ld.so.conf
  67. install -d ${D}${localedir}
  68. make -f ${WORKDIR}/generate-supported.mk IN="${S}/localedata/SUPPORTED" OUT="${WORKDIR}/SUPPORTED"
  69. # get rid of some broken files...
  70. for i in ${GLIBC_BROKEN_LOCALES}; do
  71. sed -i "/$i/d" ${WORKDIR}/SUPPORTED
  72. done
  73. rm -f ${D}${sysconfdir}/rpc
  74. rm -rf ${D}${datadir}/zoneinfo
  75. rm -rf ${D}${libexecdir}/getconf
  76. rm -f ${D}${sysconfdir}/localtime
  77. # remove empty glibc dir
  78. if [ -d ${D}${libexecdir} ]; then
  79. rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
  80. fi
  81. oe_multilib_header bits/syscall.h bits/long-double.h bits/floatn.h bits/endianness.h bits/struct_rwlock.h
  82. if [ -f ${D}${bindir}/mtrace ]; then
  83. sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' -e '2s,exec.*perl,exec ${USRBINPATH}/env perl,' ${D}${bindir}/mtrace
  84. fi
  85. # Info dir listing isn't interesting at this point so remove it if it exists.
  86. if [ -e "${D}${infodir}/dir" ]; then
  87. rm -f ${D}${infodir}/dir
  88. fi
  89. install -d ${D}${sysconfdir}/init.d
  90. install -d ${D}${localstatedir}/db/nscd
  91. install -m 0755 ${S}/nscd/nscd.init ${D}${sysconfdir}/init.d/nscd
  92. install -m 0755 ${S}/nscd/nscd.conf ${D}${sysconfdir}/nscd.conf
  93. install -m 0755 ${WORKDIR}/makedbs.sh ${D}${localstatedir}/db
  94. sed -i "s%daemon%start-stop-daemon --start --exec%g" ${D}${sysconfdir}/init.d/nscd
  95. sed -i "s|\(enable-cache\t\+netgroup\t\+\)yes|\1no|" ${D}${sysconfdir}/nscd.conf
  96. install -d ${D}${systemd_system_unitdir}
  97. install -m 0644 ${S}/nscd/nscd.service ${D}${systemd_system_unitdir}/
  98. # The dynamic loader will have been installed into
  99. # ${base_libdir}. However, if that isn't going to end up being
  100. # available in the ABI-mandated location, then a symlink must
  101. # be created.
  102. if [ -n "${ARCH_DYNAMIC_LOADER}" -a ! -e "${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
  103. install -d ${D}${root_prefix}/lib
  104. ln -s ${@oe.path.relative('${root_prefix}/lib', '${base_libdir}')}/${ARCH_DYNAMIC_LOADER} \
  105. ${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}
  106. fi
  107. ln -rs ${D}${base_libdir}/libpthread.so.0 ${D}${libdir}/libpthread.so
  108. ln -rs ${D}${base_libdir}/librt.so.1 ${D}${libdir}/librt.so
  109. if [ -n "${MLPREFIX}" ]; then
  110. mv ${D}${bindir}/ld.so ${D}${bindir}/${MLPREFIX}ld.so
  111. fi
  112. }
  113. def get_libc_fpu_setting(bb, d):
  114. if d.getVar('TARGET_FPU') in [ 'soft', 'ppc-efd' ]:
  115. return "--without-fp"
  116. return ""
  117. do_install:append:class-target() {
  118. if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
  119. install -d ${D}${sysconfdir}/tmpfiles.d
  120. echo "d /run/nscd 755 root root -" \
  121. > ${D}${sysconfdir}/tmpfiles.d/nscd.conf
  122. fi
  123. if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
  124. install -d ${D}${sysconfdir}/default/volatiles
  125. echo "d root root 0755 /var/run/nscd none" \
  126. > ${D}${sysconfdir}/default/volatiles/98_nscd
  127. fi
  128. }
  129. do_install:append:aarch64 () {
  130. do_install_armmultilib
  131. }
  132. do_install:append:arm () {
  133. do_install_armmultilib
  134. }
  135. do_install:append:armeb () {
  136. do_install_armmultilib
  137. }
  138. do_install_armmultilib () {
  139. 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
  140. 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
  141. oe_multilib_header bits/shm.h bits/sigstack.h bits/stat.h bits/statfs.h bits/typesizes.h
  142. oe_multilib_header bits/procfs-id.h bits/procfs.h bits/shmlba.h
  143. oe_multilib_header bits/struct_stat.h bits/pthread_stack_min.h
  144. oe_multilib_header bits/dl_find_object.h bits/rseq.h bits/timesize.h
  145. oe_multilib_header fpu_control.h gnu/lib-names.h gnu/stubs.h ieee754.h
  146. oe_multilib_header sys/elf.h sys/procfs.h sys/ptrace.h sys/ucontext.h sys/user.h
  147. }
  148. LOCALESTASH = "${WORKDIR}/stashed-locale"
  149. bashscripts = "mtrace sotruss xtrace"
  150. do_stash_locale () {
  151. dest=${LOCALESTASH}
  152. install -d $dest${base_libdir} $dest${bindir} $dest${libdir} $dest${datadir}
  153. # Hide away the locale data from the deployment
  154. if [ -e ${D}${bindir}/localedef ]; then
  155. cp -a ${D}${bindir}/localedef $dest${bindir}
  156. fi
  157. if [ -e ${D}${libdir}/gconv ]; then
  158. cp -a ${D}${libdir}/gconv $dest${libdir}
  159. fi
  160. if [ -e ${D}${datadir}/i18n ]; then
  161. cp -a ${D}${datadir}/i18n $dest${datadir}
  162. fi
  163. # Make a copy of all the libraries into the locale stash
  164. cp -fpPR ${D}${libdir}/* $dest${libdir}
  165. if [ "${base_libdir}" != "${libdir}" ]; then
  166. cp -fpPR ${D}${base_libdir}/* $dest${base_libdir}
  167. fi
  168. if [ -e ${D}${exec_prefix}/lib ]; then
  169. if [ ${exec_prefix}/lib != ${base_libdir} ] && [ ${exec_prefix}/lib != ${libdir} ]; then
  170. cp -fpPR ${D}${exec_prefix}/lib $dest${exec_prefix}
  171. fi
  172. fi
  173. cp -fpPR ${D}${datadir}/* $dest${datadir}
  174. cp -fpPR ${WORKDIR}/SUPPORTED $dest
  175. target=$dest/scripts
  176. mkdir -p $target
  177. for i in ${bashscripts}; do
  178. if [ -f ${D}${bindir}/$i ]; then
  179. cp ${D}${bindir}/$i $target/
  180. fi
  181. done
  182. }
  183. addtask do_stash_locale after do_install before do_populate_sysroot do_package
  184. do_stash_locale[dirs] = "${B}"
  185. do_stash_locale[cleandirs] = "${LOCALESTASH}"
  186. SSTATETASKS += "do_stash_locale"
  187. do_stash_locale[sstate-inputdirs] = "${LOCALESTASH}"
  188. do_stash_locale[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
  189. do_stash_locale[sstate-fixmedir] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
  190. python do_stash_locale_setscene () {
  191. sstate_setscene(d)
  192. }
  193. addtask do_stash_locale_setscene
  194. PACKAGE_PREPROCESS_FUNCS += "stash_locale_package_cleanup"
  195. SYSROOT_PREPROCESS_FUNCS += "stash_locale_sysroot_cleanup"
  196. stash_locale_cleanup () {
  197. cleanupdir=$1
  198. # Remove all files which do_stash_locale() copies
  199. for i in ${bashscripts}; do
  200. rm -f $cleanupdir${bindir}/$i
  201. done
  202. rm -f $cleanupdir${bindir}/localedef
  203. rm -rf $cleanupdir${datadir}/i18n
  204. rm -rf $cleanupdir${libdir}/gconv
  205. rm -rf $cleanupdir${localedir}
  206. rm -rf $cleanupdir${datadir}/locale
  207. rmdir --ignore-fail-on-non-empty $cleanupdir${datadir}
  208. if [ "${libdir}" != "${exec_prefix}/lib" ] && [ "${root_prefix}/lib" != "${exec_prefix}/lib" ]; then
  209. if [ -d "$cleanupdir${exec_prefix}/lib" ]; then
  210. if [ -z "${ARCH_DYNAMIC_LOADER}" -o \
  211. ! -e "$cleanupdir${exec_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
  212. # error out if directory isn't empty
  213. # this dir should only contain locale dir
  214. # which has been deleted in the previous step
  215. rmdir $cleanupdir${exec_prefix}/lib
  216. fi
  217. fi
  218. fi
  219. }
  220. stash_locale_sysroot_cleanup() {
  221. stash_locale_cleanup ${SYSROOT_DESTDIR}
  222. }
  223. stash_locale_package_cleanup() {
  224. stash_locale_cleanup ${PKGD}
  225. }
  226. python populate_packages:prepend () {
  227. if d.getVar('DEBIAN_NAMES'):
  228. pkgs = d.getVar('PACKAGES').split()
  229. bpn = d.getVar('BPN')
  230. prefix = d.getVar('MLPREFIX') or ""
  231. # Set the base package...
  232. d.setVar('PKG:' + prefix + bpn, prefix + 'libc6')
  233. libcprefix = prefix + bpn + '-'
  234. for p in pkgs:
  235. # And all the subpackages.
  236. if p.startswith(libcprefix):
  237. renamed = p.replace(bpn, 'libc6', 1)
  238. d.setVar('PKG:' + p, renamed)
  239. # For backward compatibility with old -dbg package
  240. d.appendVar('RPROVIDES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
  241. d.appendVar('RCONFLICTS:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
  242. d.appendVar('RREPLACES:' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
  243. }
  244. pkg_postinst:nscd () {
  245. if [ -z "$D" ]; then
  246. if command -v systemd-tmpfiles >/dev/null; then
  247. systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/nscd.conf
  248. elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
  249. ${sysconfdir}/init.d/populate-volatile.sh update
  250. fi
  251. fi
  252. }
  253. CONFFILES:nscd="${sysconfdir}/nscd.conf"
  254. SYSTEMD_PACKAGES = "nscd"
  255. SYSTEMD_SERVICE:nscd = "nscd.service"