diff options
author | bdrewery <bdrewery@FreeBSD.org> | 2015-10-13 07:41:36 +0800 |
---|---|---|
committer | bdrewery <bdrewery@FreeBSD.org> | 2015-10-13 07:41:36 +0800 |
commit | 1a0df8c18113fe207851f2caf975fb860363edba (patch) | |
tree | 02963bef287bd747c696a3b09d89c6c2c4d4a0bb /Mk | |
parent | 89355b8328f5f4375f85d99616d604ecb24b5fae (diff) | |
download | freebsd-ports-gnome-1a0df8c18113fe207851f2caf975fb860363edba.tar.gz freebsd-ports-gnome-1a0df8c18113fe207851f2caf975fb860363edba.tar.zst freebsd-ports-gnome-1a0df8c18113fe207851f2caf975fb860363edba.zip |
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
Diffstat (limited to 'Mk')
-rw-r--r-- | Mk/Scripts/functions.sh | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Mk/Scripts/functions.sh b/Mk/Scripts/functions.sh index 3aeb9fbce1fe..701397e4d58d 100644 --- a/Mk/Scripts/functions.sh +++ b/Mk/Scripts/functions.sh @@ -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 +} |