Add a function to export vars that bsd.port.mk generates from fork/exec.

This will be useful in Poudriere to avoid needless fork/exec for every
port when gathering dependencies.

Example usage:

  MAKE=make sh -c '. Mk/Scripts/functions.sh; export_index_env; export PACKAGE_BUILDING=1; truss -f make -C sysutils/zfstools -V BUILD_DEPENDS 2>&1' | grep exec

This eliminates 14 exec/fork calls for this example, when PACKAGE_BUILDING
is also set during -V.

Care should be taken with UID not being passed down into actual builds as it
may conflict with non-root builds.

With hat:	portmgr
This commit is contained in:
Bryan Drewery 2015-10-12 23:41:36 +00:00
parent ca73961376
commit 6221392fff
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=399170

View File

@ -158,3 +158,54 @@ validate_env() {
exit 1
fi
}
export_index_env() {
local export_vars make_cmd make_env var results value
validate_env MAKE PORTSDIR
make_env="\
PACKAGE_BUILDING=1 \
GNU_CONFIGURE=1 \
USE_JAVA=1 \
USE_LINUX=1 \
"
make_cmd="${make_env}"
export_vars="\
ARCH \
CONFIGURE_MAX_CMD_LEN \
HAVE_COMPAT_IA32_KERN \
LINUX_OSRELEASE \
OPSYS \
OSREL \
OSVERSION \
UID \
_JAVA_OS_LIST_REGEXP \
_JAVA_PORTS_INSTALLED \
_JAVA_VENDOR_LIST_REGEXP \
_JAVA_VERSION_LIST_REGEXP \
_OSRELEASE \
_PKG_CHECKED \
_SMP_CPUS \
"
for var in ${export_vars}; do
make_cmd="${make_cmd}${make_cmd:+ }-V ${var}=\${${var}}"
done
# Bring in all the vars, but not empty ones.
eval $(${MAKE} -f ${PORTSDIR}/Mk/bsd.port.mk ${make_cmd} | grep -v '=$')
for var in ${export_vars}; do
# Export and display non-empty ones. This is not redundant
# with above since we're looping on all vars here; do not
# export a var we didn't eval in.
value="$(eval echo \$${var})"
if [ -n "${value}" ]; then
export ${var}
echo "export ${var}=${value}"
fi
done
}