Bug 219842 - lang/rust: rust 1.17.0 fails to build
Summary: lang/rust: rust 1.17.0 fails to build
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: amd64 Any
: --- Affects Some People
Assignee: Jean-Sébastien Pédron
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-06-07 14:15 UTC by Oleg Ginzburg
Modified: 2017-06-17 14:54 UTC (History)
1 user (show)

See Also:
riggs: maintainer-feedback+


Attachments
poudriere log for rust on FreeBSD 12.0 (7.02 KB, application/gzip)
2017-06-12 13:13 UTC, Oleg Ginzburg
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oleg Ginzburg 2017-06-07 14:15:14 UTC
Host: 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r319166

Build log:

--
===>  Building for rust-1.17.0
gmake[1]: Entering directory '/usr/ports/lang/rust/work/rustc-1.17.0-src'
"/usr/local/bin/python2.7" /usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py build -v
extracting /usr/ports/lang/rust/work/rustc-1.17.0-src/build/cache/2017-03-11/rust-std-1.16.0-x86_64-unknown-freebsd.tar.gz
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/manifest.in
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libtest_shim-e9e644ac6099aad3.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_back-1db5ffe5d3d44f23.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_resolve-f2ed5fd112bf2c5f.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libproc_macro_plugin-135c3af400ad7590.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libserialize-3b62affddcd5165a.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_bitflags-89f51502140784f1.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libgraphviz-13e8a749ba2b16fe.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liblog-71ce45abe80c2749.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_const_eval-3584ee68f734e0dc.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libsyntax-ca75c91abeb76878.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libstd-aef6cb139bd07bdc.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_data_structures-fd2a8f7669a977e8.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_errors-98749a4cb4b35bb4.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liballoc_system-ac1619718cf415a9.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_i128-6da7b93eb298e3d3.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liblog-71ce45abe80c2749.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libgetopts-f5b3efa3324ef4dd.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liblibc-dcdd86b1ff8e9e88.rlib
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_incremental-0d01559d63257f9f.so
  extracting rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0/librustc_llvm-74a1be1110b5d4d0.so
Traceback (most recent call last):
  File "/usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py", line 614, in <module>
    main()
  File "/usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py", line 602, in main
    bootstrap()
  File "/usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py", line 585, in bootstrap
    rb.download_stage0()
  File "/usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py", line 182, in download_stage0
    verbose=self.verbose)
  File "/usr/ports/lang/rust/work/rustc-1.17.0-src/src/bootstrap/bootstrap.py", line 126, in unpack
    shutil.move(tp, fp)
  File "/usr/local/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/usr/local/lib/python2.7/shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "/usr/local/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 2] No such file or directory: '/usr/ports/lang/rust/work/rustc-1.17.0-src/build/x86_64-unknown-freebsd/stage0/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0/librustc_llvm-74a1be1110b5d4d0.so'
gmake[1]: *** [Makefile:24: all] Error 1
gmake[1]: Leaving directory '/usr/ports/lang/rust/work/rustc-1.17.0-src'
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make: stopped in /usr/ports/lang/rust
--
Comment 1 Oleg Ginzburg 2017-06-07 14:23:02 UTC
update:
OSVERION=1200031

% file -s /bin/sh
/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.0 (1200031), FreeBSD-style, stripped
Comment 2 Oleg Ginzburg 2017-06-07 14:31:17 UTC
Looks like some path is not correct, directory GNUSparseFile.0 placed in another  location:

% find /usr/ports/lang/rust/work/ -type d -name GNUSparseFile.0
/usr/ports/lang/rust/work/rustc-1.17.0-src/build/x86_64-unknown-freebsd/stage0/rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0

% ls -la /usr/ports/lang/rust/work/rustc-1.17.0-src/build/x86_64-unknown-freebsd/stage0/rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0
total 4354
drwxr-xr-x  2 root  999        3 Jun  7 17:25 .
drwxr-xr-x  3 root  999        3 Jun  7 17:25 ..
-rw-r--r--  1 999   999  8009022 Jun  7 17:24 libstd-aef6cb139bd07bdc.rlib
Comment 3 Thomas Zander freebsd_committer freebsd_triage 2017-06-10 11:50:54 UTC
Trying to reproduce. You don't happen to have a poudriere log?
Comment 4 Oleg Ginzburg 2017-06-12 13:13:52 UTC
Created attachment 183432 [details]
poudriere log for rust on FreeBSD 12.0

poudriere log for rust on FreeBSD 12.0
Comment 5 Oleg Ginzburg 2017-06-12 13:18:26 UTC
(In reply to Thomas Zander from comment #3)

Log uploaded. How to reproduce:

1) Have FreeBSD 12.0-HEAD/CURRENT
2) compile object base files
3) create poudriere jail:

poudriere jail -c -v 12.0-CURRENT -a amd64 -j f12 -m src=/usr/src

4) Build:

poudriere testport -i -j f12 -o lang/rust
Comment 6 Thomas Zander freebsd_committer freebsd_triage 2017-06-13 05:38:35 UTC
Build should work again on HEAD. Could you double check whether this problem still exists after r443485 of the ports tree?
Comment 7 Oleg Ginzburg 2017-06-13 07:35:42 UTC
updated to r443487. I see rust bumped to 1.18.0. It's build successful on FreeBSD 11.0, but on 12-current still broken.

--
===>  Building for rust-1.18.0
gmake[1]: Entering directory '/usr/ports/lang/rust/work/rustc-1.18.0-src'
"/usr/local/bin/python2.7" /usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py build -v
extracting /usr/ports/lang/rust/work/rustc-1.18.0-src/build/cache/2017-04-27/rust-std-1.17.0-x86_64-unknown-freebsd.tar.gz
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/manifest.in
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_const_math-d718ba439ded034a.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_passes-7f3820b276c2a092.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liballoc-ca07b617414dd0fa.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libsyntax_pos-8bc3103ab44fdd9d.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_resolve-e27e3277d8c7217e.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libstd_unicode-cfbd6648f7db2ee5.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libfmt_macros-2e00b27375e33865.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_errors-8e8e2ef008e368ae.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_llvm-3aedc27cea629d08.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libcollections-532a3dbf317eff86.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libterm-fa872424129019f5.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustdoc-886ab7b186b92542.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_incremental-b4ce2bea1d595ef3.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libpanic_abort-6800222f9a60165a.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_const_eval-429e7a643b042de5.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_plugin-503f1facc22c55d4.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_typeck-ad206c419aaafe68.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libserialize-7af78762942a476f.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liblog-1e620df7ce600e56.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libcore-687e6a964d22cbb4.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/liballoc_system-68e33a366943aef4.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_bitflags-911366f3f3b45b60.rlib
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libflate-476b0d69133eba41.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_trans-8524c596fdbfd5aa.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libserialize-7af78762942a476f.so
  extracting rust-std-1.17.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0/libstd-f4594d3e53dcb114.rlib
Traceback (most recent call last):
  File "/usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py", line 611, in <module>
    main()
  File "/usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py", line 597, in main
    bootstrap()
  File "/usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py", line 579, in bootstrap
    rb.download_stage0()
  File "/usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py", line 180, in download_stage0
    verbose=self.verbose)
  File "/usr/ports/lang/rust/work/rustc-1.18.0-src/src/bootstrap/bootstrap.py", line 126, in unpack
    shutil.move(tp, fp)
  File "/usr/local/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/usr/local/lib/python2.7/shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "/usr/local/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 2] No such file or directory: '/usr/ports/lang/rust/work/rustc-1.18.0-src/build/x86_64-unknown-freebsd/stage0/lib/rustlib/x86_64-unknown-freebsd/lib/GNUSparseFile.0/libstd-f4594d3e53dcb114.rlib'
gmake[1]: *** [Makefile:24: all] Error 1
gmake[1]: Leaving directory '/usr/ports/lang/rust/work/rustc-1.18.0-src'
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1
--
Comment 8 Thomas Zander freebsd_committer freebsd_triage 2017-06-13 18:16:44 UTC
@dumbbell: Could you take a look at this? I am AFK for a couple of days, unfortunately.
Comment 9 Jean-Sébastien Pédron freebsd_committer freebsd_triage 2017-06-14 06:43:52 UTC
Hi!

Yes, this is a known issue with Python 2 which is the version required by the Rust build system. Python 2's tarfile module doesn't support sparse file entries in tar archives, but BSD tar tends to use them. And we use tar(1) to recreate the rust-std bootstrap on 12-CURRENT after the ino64 project commit.

The solution is either to use GNU tar which doesn't produce sparse file entries in my tests, or better, pass --format=ustar to BSD tar as suggested by Tim Kientzle.

I need to update my (growing) patch to lang/rust, especially that it conflicts with the 1.18.0 update now :) But I'm still under mentorship so I won't commit it before approval.
Comment 10 Jean-Sébastien Pédron freebsd_committer freebsd_triage 2017-06-15 06:22:36 UTC
The fix is now part of the following larger patch:
https://reviews.freebsd.org/D10857
Comment 11 commit-hook freebsd_committer freebsd_triage 2017-06-17 14:44:51 UTC
A commit references this bug:

Author: dumbbell
Date: Sat Jun 17 14:44:30 UTC 2017
New revision: 443777
URL: https://svnweb.freebsd.org/changeset/ports/443777

Log:
  lang/rust: Enable on FreeBSD/aarch64 + various fixes

  This port now uses an unofficial bootstrap of Rust 1.17.0 and Cargo
  0.18.0 for FreeBSD/aarch64. Here are my notes to create this boostrap:
  https://gist.github.com/dumbbell/b587da50ef014078da9e732a4331ebad

  The port's Makefile was changed to:
      - allow to override the versions and directories of the bootstrap
        archives;
      - patch the bootstrap script and manifest with those
        versions/directories.

  Beside changes to support FreeBSD/aarch64, the port received the
  following fixes:
      - Pass python path to the configure script.
      - Fix and simplify the extraction of rust-std bootstrap by re-using
        existing variables.
      - Make sure tar(1) doesn't produce sparse file entries when it
        recreates the rust-std bootstrap because Python 2's tarfile module
        doesn't support them (PR 219842).

  PR:		216143, 219842
  Differential Revision:	https://reviews.freebsd.org/D10857

Changes:
  head/lang/rust/Makefile
  head/lang/rust/distinfo
  head/lang/rust/files/extra-patch-ino64
Comment 12 Jean-Sébastien Pédron freebsd_committer freebsd_triage 2017-06-17 14:54:28 UTC
The problem with sparse file entries should be fixed with the commit mentionned above.

If you still see failures, please re-open this report!