aboutsummaryrefslogtreecommitdiffstats
path: root/Mk
diff options
context:
space:
mode:
authorbdrewery <bdrewery@FreeBSD.org>2015-10-13 07:41:36 +0800
committerbdrewery <bdrewery@FreeBSD.org>2015-10-13 07:41:36 +0800
commit1a0df8c18113fe207851f2caf975fb860363edba (patch)
tree02963bef287bd747c696a3b09d89c6c2c4d4a0bb /Mk
parent89355b8328f5f4375f85d99616d604ecb24b5fae (diff)
downloadfreebsd-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.sh51
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
+}