glibc-package.inc 13 KB

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