Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Jan 2020 18:36:04 +0000 (UTC)
From:      Tobias Kortkamp <tobik@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r522968 - in head: Mk Mk/Scripts Mk/Uses lang/rust
Message-ID:  <202001131836.00DIa4FU022914@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tobik
Date: Mon Jan 13 18:36:04 2020
New Revision: 522968
URL: https://svnweb.freebsd.org/changeset/ports/522968

Log:
  lang/rust: Add COMPAT_FREEBSD11 canary
  
  This attempts to provide a nicer error message for the subset of
  users who build their own kernels without COMPAT_FREEBSD11 and then
  attempt to build lang/rust.  The Rust ecosystem currently uses
  pre-ino64 syscalls, so building lang/rust without COMPAT_FREEBSD11
  is not going to work.
  
  The error message for this is non-obvious and there is a new bug
  for this at least every 1-2 months.  Hopefully this will improve
  the situation a little.
  
  Cargo and Gecko ports are similarly affected, so add the pre-build
  check to them too.
  
  Reviewed by:	jbeich, mikael.urankar@gmail.com
  Tested by:	madpilot (negative case)
  Approved by:	gecko (jbeich)
  Differential Revision:	https://reviews.freebsd.org/D23100

Added:
  head/Mk/Scripts/rust-compat11-canary.sh   (contents, props changed)
Modified:
  head/Mk/Uses/cargo.mk
  head/Mk/bsd.gecko.mk
  head/lang/rust/Makefile

Added: head/Mk/Scripts/rust-compat11-canary.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/Mk/Scripts/rust-compat11-canary.sh	Mon Jan 13 18:36:04 2020	(r522968)
@@ -0,0 +1,27 @@
+#!/bin/sh
+# MAINTAINER: rust@FreeBSD.org
+# $FreeBSD$
+set -eu
+
+if [ "${OPSYS}" != FreeBSD ] || [ "${OSVERSION}" -lt 1200000 ]; then
+	exit 0
+fi
+
+cat <<EOF | ${CC} -o "${WRKDIR}/compat11_canary" -xc -
+#include <sys/syscall.h>
+#include <errno.h>
+#include <unistd.h>
+
+int
+main(void)
+{
+	return syscall(SYS_freebsd11_mknod, "", 0, 0) < 0 && errno == ENOSYS;
+}
+EOF
+# Canary might be aborted with SIGSYS
+ulimit -c 0
+if ! "${WRKDIR}/compat11_canary"; then
+	echo "=> Sanity check failed: kernel is missing COMPAT_FREEBSD11"
+	echo "=> Aborting build"
+	exit 1
+fi

Modified: head/Mk/Uses/cargo.mk
==============================================================================
--- head/Mk/Uses/cargo.mk	Mon Jan 13 18:02:29 2020	(r522967)
+++ head/Mk/Uses/cargo.mk	Mon Jan 13 18:36:04 2020	(r522968)
@@ -247,6 +247,9 @@ _USES_configure+=	250:cargo-configure
 # configure hook.  Place a config file for overriding crates-io index
 # by local source directory.
 cargo-configure:
+# Check that the running kernel has COMPAT_FREEBSD11 required by lang/rust post-ino64
+	@${SETENV} CC="${CC}" OPSYS="${OPSYS}" OSVERSION="${OSVERSION}" WRKDIR="${WRKDIR}" \
+		${SH} ${SCRIPTSDIR}/rust-compat11-canary.sh
 	@${MKDIR} ${WRKDIR}/.cargo
 	@${ECHO_CMD} "[source.cargo]" > ${WRKDIR}/.cargo/config
 	@${ECHO_CMD} "directory = '${CARGO_VENDOR_DIR}'" >> ${WRKDIR}/.cargo/config

Modified: head/Mk/bsd.gecko.mk
==============================================================================
--- head/Mk/bsd.gecko.mk	Mon Jan 13 18:02:29 2020	(r522967)
+++ head/Mk/bsd.gecko.mk	Mon Jan 13 18:36:04 2020	(r522968)
@@ -376,6 +376,11 @@ gecko-post-patch:
 	@${REINPLACE_CMD} 's,"files":{[^}]*},"files":{},' \
 		${MOZSRC}/third_party/rust/*/.cargo-checksum.json
 
+pre-configure-script:
+# Check that the running kernel has COMPAT_FREEBSD11 required by lang/rust post-ino64
+	@${SETENV} CC="${CC}" OPSYS="${OPSYS}" OSVERSION="${OSVERSION}" WRKDIR="${WRKDIR}" \
+		${SH} ${SCRIPTSDIR}/rust-compat11-canary.sh
+
 post-install-script: gecko-create-plist
 
 gecko-create-plist:

Modified: head/lang/rust/Makefile
==============================================================================
--- head/lang/rust/Makefile	Mon Jan 13 18:02:29 2020	(r522967)
+++ head/lang/rust/Makefile	Mon Jan 13 18:36:04 2020	(r522968)
@@ -142,6 +142,9 @@ post-patch-SOURCES-off:
 		${WRKSRC}/src/bootstrap/install.rs
 
 do-configure:
+# Check that the running kernel has COMPAT_FREEBSD11 required by lang/rust post-ino64
+	@${SETENV} CC="${CC}" OPSYS="${OPSYS}" OSVERSION="${OSVERSION}" WRKDIR="${WRKDIR}" \
+		${SH} ${SCRIPTSDIR}/rust-compat11-canary.sh
 	@${ECHO_CMD} '[build]' > ${WRKSRC}/config.toml
 	@${ECHO_CMD} 'vendor=true' >> ${WRKSRC}/config.toml
 	@${ECHO_CMD} 'extended=true' >> ${WRKSRC}/config.toml



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001131836.00DIa4FU022914>