1# Note: Due to the bitbake wrapper script, making changes to pseudo can be 2# difficult. To work around the current version of the wrapper use: 3# BBFETCH2=True PSEUDO_BUILD=1 ../bitbake/bin/bitbake pseudo-native [-c CMD] 4 5SUMMARY = "Pseudo gives fake root capabilities to a normal user" 6HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/pseudo" 7DESCRIPTION = "The pseudo utility offers a way to run commands in a virtualized root environment." 8LIC_FILES_CHKSUM = "file://COPYING;md5=a1d8023a6f953ac6ea4af765ff62d574" 9SECTION = "base" 10LICENSE = "LGPL2.1" 11DEPENDS = "sqlite3 attr" 12 13FILES_${PN} = "${prefix}/lib/pseudo/lib*/libpseudo.so ${bindir}/* ${localstatedir}/pseudo ${prefix}/var/pseudo" 14INSANE_SKIP_${PN} += "libdir" 15INSANE_SKIP_${PN}-dbg += "libdir" 16 17PROVIDES += "virtual/fakeroot" 18 19MAKEOPTS = "" 20MAKEOPTS_class-native = "'RPATH=-Wl,--rpath=XORIGIN/../../../sqlite3-native/usr/lib/'" 21 22inherit siteinfo pkgconfig 23 24do_configure () { 25 : 26} 27 28NO32LIBS ??= "1" 29NO32LIBS_class-nativesdk = "1" 30 31PSEUDO_EXTRA_OPTS ?= "--enable-force-async --without-passwd-fallback --enable-epoll --enable-xattr" 32 33# Compile for the local machine arch... 34do_compile () { 35 if [ "${SITEINFO_BITS}" = "64" ]; then 36 ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib${SITEINFO_BITS} --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --without-rpath 37 else 38 ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --without-rpath 39 fi 40 oe_runmake ${MAKEOPTS} 41} 42do_compile[vardepsexclude] = "SITEINFO_BITS" 43 44maybe_make32() { 45 # We probably don't need to build 32-bit binaries. 46 make32=false 47 if [ "${SITEINFO_BITS}" = "64" ]; then 48 case "${NO32LIBS}" in 49 0) make32=true 50 ;; 51 1) make32=false 52 ;; 53 *) # If unset, build 32-bit if we think we can. 54 if [ -e "/usr/include/gnu/stubs-32.h" ]; then 55 make32=true 56 fi 57 ;; 58 esac 59 fi 60 if $make32; then 61 if ! [ -e "/usr/include/gnu/stubs-32.h" ]; then 62 warn_32bit_missing 63 else 64 bbnote "Attempting to build 32-bit libpseudo.so for ${PN}." 65 fi 66 else 67 bbnote "Building/installing only 64-bit libpseudo.so for ${PN}." 68 bbnote "If you need to run 32-bit executables, ensure that NO32LIBS is set to 0." 69 fi 70} 71maybe_make32[vardepsexclude] = "SITEINFO_BITS" 72 73warn_32bit_missing() { 74 bbwarn "Can't find stubs-32.h, but usually need it to build 32-bit libpseudo." 75 bbwarn "If the build fails, install 32-bit developer packages." 76 bbwarn "If you are using 32-bit binaries, the 32-bit libpseudo is NOT optional." 77} 78 79# Two below are the same 80# If necessary compile for the alternative machine arch. This is only 81# necessary in a native build. 82do_compile_prepend_class-native () { 83 maybe_make32 84 if $make32; then 85 # We need the 32-bit libpseudo on a 64-bit machine... 86 # Note that this is not well-tested outside of x86/x86_64. 87 88 # if we're being rebuilt due to a dependency change, we need to make sure 89 # everything is clean before we configure and build -- if we haven't previously 90 # built this will fail and be ignored. 91 make ${MAKEOPTS} distclean || : 92 93 ./configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --bits=32 --without-rpath 94 save_traps=$(trap) 95 trap 'warn_32bit_missing' 0 96 oe_runmake ${MAKEOPTS} libpseudo 97 eval "$save_traps" 98 # prevent it from removing the lib, but remove everything else 99 make 'LIB=foo' ${MAKEOPTS} distclean 100 fi 101} 102 103do_compile_prepend_class-nativesdk () { 104 maybe_make32 105 if $make32; then 106 # We need the 32-bit libpseudo on a 64-bit machine. 107 # Note that this is not well-tested outside of x86/x86_64. 108 ./configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --bits=32 --without-rpath 109 oe_runmake ${MAKEOPTS} libpseudo 110 # prevent it from removing the lib, but remove everything else 111 make 'LIB=foo' ${MAKEOPTS} distclean 112 fi 113} 114 115do_install () { 116 oe_runmake 'DESTDIR=${D}' ${MAKEOPTS} 'LIB=lib/pseudo/lib$(MARK64)' install 117} 118 119do_install_append_class-native () { 120 chrpath ${D}${bindir}/pseudo -r `chrpath ${D}${bindir}/pseudo | cut -d = -f 2 | sed s/XORIGIN/\\$ORIGIN/` 121 install -d ${D}${sysconfdir} 122 # The fallback files should never be modified 123 install -m 444 ${WORKDIR}/fallback-passwd ${D}${sysconfdir}/passwd 124 install -m 444 ${WORKDIR}/fallback-group ${D}${sysconfdir}/group 125 126 # Two native/nativesdk entries below are the same 127 # If necessary install for the alternative machine arch. This is only 128 # necessary in a native build. 129 maybe_make32 130 if $make32; then 131 mkdir -p ${D}${prefix}/lib/pseudo/lib 132 cp lib/pseudo/lib/libpseudo.so ${D}${prefix}/lib/pseudo/lib/. 133 fi 134} 135 136do_install_append_class-nativesdk () { 137 maybe_make32 138 if $make32; then 139 mkdir -p ${D}${prefix}/lib/pseudo/lib 140 cp lib/pseudo/lib/libpseudo.so ${D}${prefix}/lib/pseudo/lib/. 141 fi 142 chrpath -d ${D}${prefix}/lib/pseudo/lib*/libpseudo.so 143} 144 145BBCLASSEXTEND = "native nativesdk" 146