Hi, I would like to change the bootstrap method used in lang/rust.
Currently, I strictly follow the vanilla build method: in order to build rustc stable X.Y, you need a specific previous version of rustc called "snapshot" (which itself needs a specific previous version...). In order to simplify the port maintenance, I would like to use another way: rebuild rustc stable X.Y with rustc stable X.Y. It makes bootstrap rebuilding more simple, as the port itself will be able to rebuild a new bootstrap, and I will no more need to keep several previous versions to be able to rebuild the bootstrap. I based my work on a feature commited in rustc 1.11.0 which permit rebuilding rustc with same version. So I partially backported the feature (only the part I actually use): it is the change in mk/main.mk. I added a 'bootstrap' target which permit to rebuild a bootstrap. It is mostly the same way that snapshot were previously builded. I didn't bump REVISION as the change is a build change only, and it shouldn't have any impact on the package itself. Comments or OK ? -- Sebastien Marie Index: Makefile =================================================================== RCS file: /cvs/ports/lang/rust/Makefile,v retrieving revision 1.23 diff -u -p -r1.23 Makefile --- Makefile 29 May 2016 07:26:46 -0000 1.23 +++ Makefile 8 Jun 2016 04:36:57 -0000 @@ -8,6 +8,7 @@ COMMENT-main = compiler for Rust Langua COMMENT-doc = html documentation for rustc V = 1.9.0 +BV = ${V}-20160608 DISTNAME = rustc-${V}-src RUST_HASH != echo -n ${V} | md5 | cut -c1-8 @@ -19,9 +20,6 @@ PKGNAME-doc = rust-doc-${V} MULTI_PACKAGES = -main -doc -# the snapshot version should be the version in src/snapshots.txt -SNAPSHOT-amd64 = rust-stage0-2016-03-18-235d774-openbsd-x86_64-6d5adfe4301d158be8a5a33fb2e11bf857475cb3.tar.bz2 - CATEGORIES = lang HOMEPAGE = http://www.rust-lang.org/ @@ -40,11 +38,9 @@ MASTER_SITES0 = http://semarie.free.fr/ DIST_SUBDIR = rust DISTFILES = ${DISTNAME}${EXTRACT_SUFX} -.if defined(SNAPSHOT-${MACHINE_ARCH}) -DISTFILES += ${SNAPSHOT-${MACHINE_ARCH}}:0 -.endif +DISTFILES += rustc-bootstrap-${MACHINE_ARCH}-${BV}.tar.gz:0 -SUPDISTFILES = ${SNAPSHOT-amd64}:0 +SUPDISTFILES = rustc-bootstrap-amd64-${BV}.tar.gz:0 WRKDIST = ${WRKDIR}/${DISTNAME:S/-src//} @@ -109,7 +105,7 @@ pre-configure: # - copy libestdc++ from MODGCC4 to specific directory # in order to disambiguate version linking (having multiple libestdc++ # at build time) -# - copy snapshot in stage0 (avoid downloading a snapshot) +# - copy bootstrap in stage0 (avoid downloading) post-configure: .for _v in CFG_CURLORWGET CFG_GIT CFG_CLANG CFG_VALGRIND CFG_PERF CFG_ISCC \ CFG_JAVAC CFG_ANTLR4 CFG_BISON CFG_PANDOC CFG_GDB CFG_LLDB \ @@ -119,13 +115,27 @@ post-configure: rm -rf ${WRKDIR}/modgcc-libs mkdir ${WRKDIR}/modgcc-libs cp ${LOCALBASE}/lib/libestdc++.so.${LIBESTDC_VERSION} ${WRKDIR}/modgcc-libs - cp ${WRKDIR}/rust-stage0/bin/rustc \ + cp ${WRKDIR}/rustc-bootstrap-${MACHINE_ARCH}-${BV}/bin/rustc \ ${WRKBUILD}/${TRIPLE_ARCH}/stage0/bin - cp ${WRKDIR}/rust-stage0/lib/lib*.so* \ + cp ${WRKDIR}/rustc-bootstrap-${MACHINE_ARCH}-${BV}/lib/lib*.so* \ ${WRKBUILD}/${TRIPLE_ARCH}/stage0/lib post-install: # cleanup rm ${PREFIX}/lib/rustlib/{install.log,uninstall.sh,rust-installer-version} - + + +# bootstrap target permits to regenerate the bootstrap archive +# it is based on stage3 binary +BOOTSTRAPDIR=${WRKDIR}/rustc-bootstrap-${MACHINE_ARCH}-${V}-new +bootstrap: configure + rm -rf ${BOOTSTRAPDIR} + mkdir -p ${BOOTSTRAPDIR}/{bin,lib} + cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} ${GMAKE} rustc-stage3 + cp ${WRKBUILD}/${TRIPLE_ARCH}/stage3/bin/rustc ${BOOTSTRAPDIR}/bin + ldd ${BOOTSTRAPDIR}/bin/rustc \ + | sed -ne 's,.* \(/.*/lib/lib.*\.so.[.0-9]*\)$$,\1,p' \ + | xargs -r -J % cp % \ + ${BOOTSTRAPDIR}/lib + .include <bsd.port.mk> Index: distinfo =================================================================== RCS file: /cvs/ports/lang/rust/distinfo,v retrieving revision 1.14 diff -u -p -r1.14 distinfo --- distinfo 29 May 2016 07:26:46 -0000 1.14 +++ distinfo 8 Jun 2016 04:36:57 -0000 @@ -1,4 +1,4 @@ -SHA256 (rust/rust-stage0-2016-03-18-235d774-openbsd-x86_64-6d5adfe4301d158be8a5a33fb2e11bf857475cb3.tar.bz2) = 8QZ/pf8S9dkMdbFw5kIU/x4VkwT51I9W1gyoFDt9tOQ= SHA256 (rust/rustc-1.9.0-src.tar.gz) = sZshGT19NgOd6+qqH2HL+YeH4M6UvYXFy+KllGLXz80= -SIZE (rust/rust-stage0-2016-03-18-235d774-openbsd-x86_64-6d5adfe4301d158be8a5a33fb2e11bf857475cb3.tar.bz2) = 21260143 +SHA256 (rust/rustc-bootstrap-amd64-1.9.0-20160608.tar.gz) = +1dvjutKxR/9eBKi46JfFqgFWbkMYH/21zN24Rvhi5Y= SIZE (rust/rustc-1.9.0-src.tar.gz) = 25859714 +SIZE (rust/rustc-bootstrap-amd64-1.9.0-20160608.tar.gz) = 24387449 Index: patches/patch-mk_main_mk =================================================================== RCS file: patches/patch-mk_main_mk diff -N patches/patch-mk_main_mk --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-mk_main_mk 8 Jun 2016 04:36:57 -0000 @@ -0,0 +1,14 @@ +$OpenBSD$ +partial backport of https://github.com/rust-lang/rust/commit/dd6e8d45e183861d44ed91a99f0a50403b2776a3 +--- mk/main.mk.orig Tue Jun 7 17:45:06 2016 ++++ mk/main.mk Tue Jun 7 17:58:02 2016 +@@ -525,6 +525,9 @@ ifneq ($(strip $(CFG_BUILD)),$(strip $(3))) + CFGFLAG$(1)_T_$(2)_H_$(3) = stage1 + + RPATH_VAR$(1)_T_$(2)_H_$(3) := $$(TARGET_RPATH_VAR1_T_$(2)_H_$$(CFG_BUILD)) ++else ++# Assume the rustc already has stage1 features too. ++CFGFLAG$(1)_T_$(2)_H_$(3) = stage1 + endif + endif + Index: patches/patch-src_librustdoc_test_rs =================================================================== RCS file: /cvs/ports/lang/rust/patches/patch-src_librustdoc_test_rs,v retrieving revision 1.1 diff -u -p -r1.1 patch-src_librustdoc_test_rs --- patches/patch-src_librustdoc_test_rs 25 May 2016 06:39:35 -0000 1.1 +++ patches/patch-src_librustdoc_test_rs 8 Jun 2016 04:36:57 -0000 @@ -1,8 +1,8 @@ $OpenBSD: patch-src_librustdoc_test_rs,v 1.1 2016/05/25 06:39:35 semarie Exp $ fallback to CFG_PREFIX as default sysroot. ---- src/librustdoc/test.rs.orig Mon Apr 11 23:22:04 2016 -+++ src/librustdoc/test.rs Mon May 16 21:01:26 2016 -@@ -64,9 +64,16 @@ pub fn run(input: &str, +--- src/librustdoc/test.rs.orig Mon May 23 18:29:00 2016 ++++ src/librustdoc/test.rs Tue Jun 7 17:36:10 2016 +@@ -62,9 +62,16 @@ pub fn run(input: &str, let input_path = PathBuf::from(input); let input = config::Input::File(input_path.clone()); Index: patches/patch-src_libstd_sys_unix_os_rs =================================================================== RCS file: /cvs/ports/lang/rust/patches/patch-src_libstd_sys_unix_os_rs,v retrieving revision 1.1 diff -u -p -r1.1 patch-src_libstd_sys_unix_os_rs --- patches/patch-src_libstd_sys_unix_os_rs 25 May 2016 06:39:35 -0000 1.1 +++ patches/patch-src_libstd_sys_unix_os_rs 8 Jun 2016 04:36:57 -0000 @@ -1,8 +1,8 @@ $OpenBSD: patch-src_libstd_sys_unix_os_rs,v 1.1 2016/05/25 06:39:35 semarie Exp $ argv0 isn't suitable as current_exe() in all cases. ---- src/libstd/sys/unix/os.rs.orig Mon Apr 11 23:22:04 2016 -+++ src/libstd/sys/unix/os.rs Tue May 17 13:56:41 2016 -@@ -225,13 +225,14 @@ pub fn current_exe() -> io::Result<PathBuf> { +--- src/libstd/sys/unix/os.rs.orig Mon May 23 18:29:00 2016 ++++ src/libstd/sys/unix/os.rs Tue Jun 7 17:36:10 2016 +@@ -235,13 +235,14 @@ pub fn current_exe() -> io::Result<PathBuf> { argv.set_len(argv_len as usize); if argv[0].is_null() { return Err(io::Error::new(io::ErrorKind::Other,