1*4882a593Smuzhiyun# Note: Due to the bitbake wrapper script, making changes to pseudo can be 2*4882a593Smuzhiyun# difficult. To work around the current version of the wrapper use: 3*4882a593Smuzhiyun# BBFETCH2=True PSEUDO_BUILD=1 ../bitbake/bin/bitbake pseudo-native [-c CMD] 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunSUMMARY = "Pseudo gives fake root capabilities to a normal user" 6*4882a593SmuzhiyunHOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/pseudo" 7*4882a593SmuzhiyunDESCRIPTION = "The pseudo utility offers a way to run commands in a virtualized root environment." 8*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://COPYING;md5=a1d8023a6f953ac6ea4af765ff62d574" 9*4882a593SmuzhiyunSECTION = "base" 10*4882a593SmuzhiyunLICENSE = "LGPL-2.1-only" 11*4882a593SmuzhiyunDEPENDS = "sqlite3 attr" 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunFILES:${PN} = "${prefix}/lib/pseudo/lib*/libpseudo.so ${bindir}/* ${localstatedir}/pseudo ${prefix}/var/pseudo" 14*4882a593SmuzhiyunINSANE_SKIP:${PN} += "libdir" 15*4882a593SmuzhiyunINSANE_SKIP:${PN}-dbg += "libdir" 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunPROVIDES += "virtual/fakeroot" 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunMAKEOPTS = "" 20*4882a593SmuzhiyunMAKEOPTS:class-native = "'RPATH=-Wl,--rpath=XORIGIN/../../../sqlite3-native/usr/lib/'" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyuninherit siteinfo pkgconfig 23*4882a593Smuzhiyun 24*4882a593Smuzhiyundo_configure () { 25*4882a593Smuzhiyun : 26*4882a593Smuzhiyun} 27*4882a593Smuzhiyun 28*4882a593SmuzhiyunNO32LIBS ??= "1" 29*4882a593SmuzhiyunNO32LIBS:class-nativesdk = "1" 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunPSEUDO_EXTRA_OPTS ?= "--enable-force-async --without-passwd-fallback --enable-epoll --enable-xattr" 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun# Compile for the local machine arch... 34*4882a593Smuzhiyundo_compile () { 35*4882a593Smuzhiyun if [ "${SITEINFO_BITS}" = "64" ]; then 36*4882a593Smuzhiyun ${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*4882a593Smuzhiyun else 38*4882a593Smuzhiyun ${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*4882a593Smuzhiyun fi 40*4882a593Smuzhiyun oe_runmake ${MAKEOPTS} 41*4882a593Smuzhiyun} 42*4882a593Smuzhiyundo_compile[vardepsexclude] = "SITEINFO_BITS" 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunmaybe_make32() { 45*4882a593Smuzhiyun # We probably don't need to build 32-bit binaries. 46*4882a593Smuzhiyun make32=false 47*4882a593Smuzhiyun if [ "${SITEINFO_BITS}" = "64" ]; then 48*4882a593Smuzhiyun case "${NO32LIBS}" in 49*4882a593Smuzhiyun 0) make32=true 50*4882a593Smuzhiyun ;; 51*4882a593Smuzhiyun 1) make32=false 52*4882a593Smuzhiyun ;; 53*4882a593Smuzhiyun *) # If unset, build 32-bit if we think we can. 54*4882a593Smuzhiyun if [ -e "/usr/include/gnu/stubs-32.h" ]; then 55*4882a593Smuzhiyun make32=true 56*4882a593Smuzhiyun fi 57*4882a593Smuzhiyun ;; 58*4882a593Smuzhiyun esac 59*4882a593Smuzhiyun fi 60*4882a593Smuzhiyun if $make32; then 61*4882a593Smuzhiyun if ! [ -e "/usr/include/gnu/stubs-32.h" ]; then 62*4882a593Smuzhiyun warn_32bit_missing 63*4882a593Smuzhiyun else 64*4882a593Smuzhiyun bbnote "Attempting to build 32-bit libpseudo.so for ${PN}." 65*4882a593Smuzhiyun fi 66*4882a593Smuzhiyun else 67*4882a593Smuzhiyun bbnote "Building/installing only 64-bit libpseudo.so for ${PN}." 68*4882a593Smuzhiyun bbnote "If you need to run 32-bit executables, ensure that NO32LIBS is set to 0." 69*4882a593Smuzhiyun fi 70*4882a593Smuzhiyun} 71*4882a593Smuzhiyunmaybe_make32[vardepsexclude] = "SITEINFO_BITS" 72*4882a593Smuzhiyun 73*4882a593Smuzhiyunwarn_32bit_missing() { 74*4882a593Smuzhiyun bbwarn "Can't find stubs-32.h, but usually need it to build 32-bit libpseudo." 75*4882a593Smuzhiyun bbwarn "If the build fails, install 32-bit developer packages." 76*4882a593Smuzhiyun bbwarn "If you are using 32-bit binaries, the 32-bit libpseudo is NOT optional." 77*4882a593Smuzhiyun} 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun# Two below are the same 80*4882a593Smuzhiyun# If necessary compile for the alternative machine arch. This is only 81*4882a593Smuzhiyun# necessary in a native build. 82*4882a593Smuzhiyundo_compile:prepend:class-native () { 83*4882a593Smuzhiyun maybe_make32 84*4882a593Smuzhiyun if $make32; then 85*4882a593Smuzhiyun # We need the 32-bit libpseudo on a 64-bit machine... 86*4882a593Smuzhiyun # Note that this is not well-tested outside of x86/x86_64. 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun # if we're being rebuilt due to a dependency change, we need to make sure 89*4882a593Smuzhiyun # everything is clean before we configure and build -- if we haven't previously 90*4882a593Smuzhiyun # built this will fail and be ignored. 91*4882a593Smuzhiyun make ${MAKEOPTS} distclean || : 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun ./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*4882a593Smuzhiyun save_traps=$(trap) 95*4882a593Smuzhiyun trap 'warn_32bit_missing' 0 96*4882a593Smuzhiyun oe_runmake ${MAKEOPTS} libpseudo 97*4882a593Smuzhiyun eval "$save_traps" 98*4882a593Smuzhiyun # prevent it from removing the lib, but remove everything else 99*4882a593Smuzhiyun make 'LIB=foo' ${MAKEOPTS} distclean 100*4882a593Smuzhiyun fi 101*4882a593Smuzhiyun} 102*4882a593Smuzhiyun 103*4882a593Smuzhiyundo_compile:prepend:class-nativesdk () { 104*4882a593Smuzhiyun maybe_make32 105*4882a593Smuzhiyun if $make32; then 106*4882a593Smuzhiyun # We need the 32-bit libpseudo on a 64-bit machine. 107*4882a593Smuzhiyun # Note that this is not well-tested outside of x86/x86_64. 108*4882a593Smuzhiyun ./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*4882a593Smuzhiyun oe_runmake ${MAKEOPTS} libpseudo 110*4882a593Smuzhiyun # prevent it from removing the lib, but remove everything else 111*4882a593Smuzhiyun make 'LIB=foo' ${MAKEOPTS} distclean 112*4882a593Smuzhiyun fi 113*4882a593Smuzhiyun} 114*4882a593Smuzhiyun 115*4882a593Smuzhiyundo_compile:append:class-native () { 116*4882a593Smuzhiyun if [ '${@bb.data.inherits_class('uninative', d)}' = 'True' ]; then 117*4882a593Smuzhiyun for i in PSEUDO_PORT_UNIX_SYNCFS PSEUDO_PORT_UIDS_GENERIC PSEUDO_PORT_LINUX_NEWCLONE PSEUDO_PORT_LINUX_XATTR PSEUDO_PORT_LINUX_STATVFS; do 118*4882a593Smuzhiyun grep $i.1 ${S}/pseudo_ports.h 119*4882a593Smuzhiyun if [ $? != 0 ]; then 120*4882a593Smuzhiyun echo "$i not enabled in pseudo which is incompatible with uninative" 121*4882a593Smuzhiyun exit 1 122*4882a593Smuzhiyun fi 123*4882a593Smuzhiyun done 124*4882a593Smuzhiyun fi 125*4882a593Smuzhiyun} 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun 128*4882a593Smuzhiyundo_install () { 129*4882a593Smuzhiyun oe_runmake 'DESTDIR=${D}' ${MAKEOPTS} 'LIB=lib/pseudo/lib$(MARK64)' install 130*4882a593Smuzhiyun} 131*4882a593Smuzhiyun 132*4882a593Smuzhiyundo_install:append:class-native () { 133*4882a593Smuzhiyun chrpath ${D}${bindir}/pseudo -r `chrpath ${D}${bindir}/pseudo | cut -d = -f 2 | sed s/XORIGIN/\\$ORIGIN/` 134*4882a593Smuzhiyun install -d ${D}${sysconfdir} 135*4882a593Smuzhiyun # The fallback files should never be modified 136*4882a593Smuzhiyun install -m 444 ${WORKDIR}/fallback-passwd ${D}${sysconfdir}/passwd 137*4882a593Smuzhiyun install -m 444 ${WORKDIR}/fallback-group ${D}${sysconfdir}/group 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun # Two native/nativesdk entries below are the same 140*4882a593Smuzhiyun # If necessary install for the alternative machine arch. This is only 141*4882a593Smuzhiyun # necessary in a native build. 142*4882a593Smuzhiyun maybe_make32 143*4882a593Smuzhiyun if $make32; then 144*4882a593Smuzhiyun mkdir -p ${D}${prefix}/lib/pseudo/lib 145*4882a593Smuzhiyun cp lib/pseudo/lib/libpseudo.so ${D}${prefix}/lib/pseudo/lib/. 146*4882a593Smuzhiyun fi 147*4882a593Smuzhiyun} 148*4882a593Smuzhiyun 149*4882a593Smuzhiyundo_install:append:class-nativesdk () { 150*4882a593Smuzhiyun maybe_make32 151*4882a593Smuzhiyun if $make32; then 152*4882a593Smuzhiyun mkdir -p ${D}${prefix}/lib/pseudo/lib 153*4882a593Smuzhiyun cp lib/pseudo/lib/libpseudo.so ${D}${prefix}/lib/pseudo/lib/. 154*4882a593Smuzhiyun fi 155*4882a593Smuzhiyun chrpath -d ${D}${prefix}/lib/pseudo/lib*/libpseudo.so 156*4882a593Smuzhiyun} 157*4882a593Smuzhiyun 158*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk" 159