Hi,

We need a way to bump all ports built using lang/rust when the port is
updated (compiler change or rust stdlib changes).

Currently, lang/go is using SYSTEM_VERSION-go variable for that, so I
intent to copy the mecanism for rustc.

I can't simply use devel/cargo module for that: some (usually complexes)
ports aren't using it but are using rustc and rust stdlib. So I would
like to add a lang/rust module for this purpose, and move the bits
specific to rustc from devel/cargo to this new lang/rust module (mostly
the WANTLIB definition for code using rust stdlib).

We have 77 ports with lang/rust inside BUILD_DEPENDS. So modifying all
of them is doable but require a bit of preparation.

I intent to do the following:

1. add the lang/rust module and add the arch-defines.mk bits for
SYSTEM_VERSION-rust

nothing is using it at this stage. no changes.


2. modify all the ports (one by one) using lang/rust as compiler to use
the module lang/rust.

as soon MODULES += lang/rust is added, the port will be automatically
bumped (due to SYSTEM_VERSION-rust), which is fine (I modified the rust
stdlib on 30.12.2023, and all ports would need a bump anyway).

I will do the conversion from using MODCARGO_WANTLIB to MODRUST_WANTLIB
in the port at the same time.

During the step, both "new way" and "old way" will coexist and shouldn't
conflict. A port will be either "new way" or "old way".


3. modify the devel/cargo module to remove unused bits
(MODCARGO_WANTLIB), and add some checks for ensuring using devel/cargo
implies using also lang/rust.

It is mostly a cleaning step, and to ensure a hard fail if the "old way"
is used (missing changes, and new code added using "old way").


Diffs for 1 and 3 are below. Step 2 could be done on the fly with
MAINTAINER in Cc for the more complex cases.

Any comments or OK ?
-- 
Sebastien Marie


Step 1 diffs:

diff /home/semarie/repos/openbsd/ports/mystuff/lang/rust
commit - 14500989167797cabee408b40583056fe24a9f23
path + /home/semarie/repos/openbsd/ports/mystuff/lang/rust
blob - /dev/null
file + rust.port.mk (mode 640)
--- /dev/null
+++ rust.port.mk
@@ -0,0 +1,30 @@
+# increment after rust compiler update to trigger updates of
+# all compiled rust packages (see arch-defines.mk)
+_MODRUST_SYSTEM_VERSION =      1
+
+CATEGORIES +=          lang/rust
+
+# WANTLIB for Rust compiled code
+# it should be kept in sync with lang/rust code
+# - c/pthread : all syscalls
+# - c++abi / libgcc.a : unwind
+MODRUST_WANTLIB +=     c pthread
+
+.if "${MACHINE_ARCH}" != "sparc64"
+MODRUST_WANTLIB +=     c++abi
+.else
+# libgcc.a is static
+MODRUST_WANTLIB +=     
+.endif
+
+CHECK_LIB_DEPENDS_ARGS +=      -S MODRUST_WANTLIB="${MODRUST_WANTLIB}"
+CHECK_LIB_DEPENDS_ARGS +=      -F c++abi
+
+MODRUST_BUILDDEP ?=    Yes
+.if ${MODRUST_BUILDDEP:L} == "yes"
+BUILD_DEPENDS +=       lang/rust
+.endif
+
+# Location of rustc/rustdoc binaries
+MODRUST_RUSTC_BIN =    ${LOCALBASE}/bin/rustc
+MODRUST_RUSTDOC_BIN =  ${LOCALBASE}/bin/rustdoc


diff /home/semarie/repos/openbsd/ports
commit - a1995e6a715404d542f5d69eadb9a9bac7bbca61
path + /home/semarie/repos/openbsd/ports
blob - dacb59716e3724cd0aad0110c42d6b2c1f672bfb
file + infrastructure/mk/arch-defines.mk
--- infrastructure/mk/arch-defines.mk
+++ infrastructure/mk/arch-defines.mk
@@ -105,6 +105,12 @@ _SYSTEM_VERSION-clang = 2
 _SYSTEM_VERSION-go = ${_MODGO_SYSTEM_VERSION}
 .endif
 
+# defined in rust.port.mk; added to version for all rust arches so that
+# rust-compiled packages can be updated easily for a new rust compiler
+.if defined(MODULES) && ${MODULES:Mlang/rust}
+_SYSTEM_VERSION-rust = ${_MODRUST_SYSTEM_VERSION}
+.endif
+
 # @version = ${_SYSTEM_VERSION} + ${_SYSTEM_VERSION-${MACHINE_ARCH}}
 _PKG_ARGS_VERSION += -V ${_SYSTEM_VERSION} -V 
${_SYSTEM_VERSION-${MACHINE_ARCH}}
 .if ${ARCH} != ${MACHINE_ARCH}



Step 3 diff:
diff /home/semarie/repos/openbsd/ports
commit - a1995e6a715404d542f5d69eadb9a9bac7bbca61
path + /home/semarie/repos/openbsd/ports
blob - 4c5723bf509e5aaaf1541b76acd3b48119bb5b7c
file + devel/cargo/cargo.port.mk
--- devel/cargo/cargo.port.mk
+++ devel/cargo/cargo.port.mk
@@ -1,4 +1,8 @@
-CATEGORIES +=  lang/rust
+# we can't just add lang/rust to MODULES
+# it makes _SYSTEM_VERSION-rust (in arch-defines.mk) not properly defined
+.if defined(MODULES) && ! ${MODULES:Mlang/rust}
+ERRORS +=      "devel/cargo module needs also lang/rust in MODULES"
+.endif
 
 # List of static dependencies. The format is cratename-version.
 # MODCARGO_CRATES will be downloaded from SITES_CRATESIO.
@@ -23,22 +27,6 @@ MODCARGO_VENDOR_DIR ?= ${WRKSRC}/modcargo-crates
 # Default path for cargo manifest.
 MODCARGO_CARGOTOML ?= ${WRKSRC}/Cargo.toml
 
-# WANTLIB for Rust compiled code
-# it should be kept in sync with lang/rust code
-# - c/pthread : all syscalls
-# - c++abi / libgcc.a : unwind
-MODCARGO_WANTLIB = c pthread
-
-.if "${MARCHINE_ARCH}" != "sparc64"
-MODCARGO_WANTLIB +=    c++abi
-.else
-# libgcc.a is static
-MODCARGO_WANTLIB +=
-.endif
-
-CHECK_LIB_DEPENDS_ARGS += -S MODCARGO_WANTLIB="${MODCARGO_WANTLIB}"
-CHECK_LIB_DEPENDS_ARGS += -F c++abi
-
 # Define SITES_CRATESIO for crates.io
 SITES.cargo =  https://crates.io/api/v1/crates/
 
@@ -274,16 +262,9 @@ MODCARGO_configure += ;
 .endif
 
 # Build dependencies.
-MODCARGO_BUILD_DEPENDS = lang/rust
-
 # devel/cargo-generate-vendor is mandatory for hooks.
 BUILD_DEPENDS +=       devel/cargo-generate-vendor
 
-MODCARGO_BUILDDEP ?=   Yes
-.if ${MODCARGO_BUILDDEP:L} == "yes"
-BUILD_DEPENDS +=       ${MODCARGO_BUILD_DEPENDS}
-.endif
-
 # Location of cargo binary (default to devel/cargo binary)
 MODCARGO_CARGO_BIN ?=  ${LOCALBASE}/bin/cargo
 
@@ -305,8 +286,8 @@ MODCARGO_ENV += \
        CARGO_BUILD_JOBS=${MAKE_JOBS} \
        CARGO_TARGET_DIR=${MODCARGO_TARGET_DIR} \
        RUST_BACKTRACE=full \
-       RUSTC=${LOCALBASE}/bin/rustc \
-       RUSTDOC=${LOCALBASE}/bin/rustdoc \
+       RUSTC=${MODRUST_RUSTC_BIN} \
+       RUSTDOC=${MODRUST_RUSTDOC_BIN} \
        RUSTFLAGS="${MODCARGO_RUSTFLAGS}"
 
 # Helper to shorten cargo calls.

Reply via email to