Annotation of /trunk/extras/rust/rust-1.38.0-r1.smage2
Parent Directory | Revision Log
Revision 33005 -
(hide annotations)
(download)
Wed Oct 9 05:27:24 2019 UTC (4 years, 11 months ago) by niro
File size: 9672 byte(s)
Wed Oct 9 05:27:24 2019 UTC (4 years, 11 months ago) by niro
File size: 9672 byte(s)
auto added: ver bump to 1.38.0-r1
1 | niro | 33005 | # $Id$ |
2 | |||
3 | PNAME="rust" | ||
4 | PVER="1.38.0" | ||
5 | PBUILD="r1" | ||
6 | |||
7 | SPLIT_PACKAGES="rust cargo rustfmt rust-rls rust-src rust-docs cargo-docs" | ||
8 | PCAT="dev-lang" | ||
9 | |||
10 | DESCRIPTION="Systems programming language focused on safety, speed and concurrency." | ||
11 | HOMEPAGE="https://www.rust-lang.org/" | ||
12 | |||
13 | # enable bootstrap of rust with prebuild binary rust | ||
14 | # 0=no, 1=yes | ||
15 | BOOTSTRAP=1 | ||
16 | |||
17 | # provided rust pver | ||
18 | RUST_PVER="${PVER}" | ||
19 | # provided pver of cargo, see src/tools/cargo/Cargo.toml | ||
20 | CARGO_PVER="0.39.0" | ||
21 | # provided pver of rls, see src/tools/rustfmt/Cargo.toml | ||
22 | RUSTFMT_PVER="1.4.4" | ||
23 | # provided pver of rls, see src/tools/rls/Cargo.toml | ||
24 | RLS_PVER="1.38.0" | ||
25 | |||
26 | # required pver of llvm and gcc | ||
27 | GCC_PVER="9.2.0" | ||
28 | LLVM_PVER="9.0.0" | ||
29 | |||
30 | COMMON_DEPEND=">= net-misc/curl-7 | ||
31 | >= dev-libs/openssl-1.1 | ||
32 | >= sys-libs/zlib-1.2 | ||
33 | >= net-libs/libssh2-1.8" | ||
34 | |||
35 | RUST_DEPEND=">= sys-libs/llvm-libs-${LLVM_PVER} | ||
36 | >= sys-libs/libstdc++-${GCC_PVER}" | ||
37 | |||
38 | CARGO_DEPEND="${COMMON_DEPEND}" | ||
39 | |||
40 | RUSTFMT_DEPEND=">= virtual/glibc | ||
41 | >= sys-libs/libgcc-${GCC_PVER}" | ||
42 | |||
43 | RUSTRLS_DEPEND="${COMMON_DEPEND}" | ||
44 | |||
45 | SRC_DEPEND="" | ||
46 | |||
47 | # both cargo and rust | ||
48 | DOCS_DEPEND="" | ||
49 | |||
50 | SDEPEND=">= sys-dev/llvm-${LLVM_PVER} | ||
51 | >= sys-dev/clang-${LLVM_PVER} | ||
52 | >= dev-lang/perl-5.30 | ||
53 | >= dev-lang/python3-3.7 | ||
54 | >= dev-libs/libffi-3.2 | ||
55 | >= dev-libs/jemalloc-5.1 | ||
56 | >= dev-util/cmake-3.12 | ||
57 | >= dev-util/ninja-1.9 | ||
58 | ${RUST_DEPEND} | ||
59 | ${CARGO_DEPEND} | ||
60 | ${RUSTFMT_DEPEND} | ||
61 | ${RUSTRLS_DEPEND} | ||
62 | ${SRC_DEPEND} | ||
63 | ${DOCS_DEPEND}" | ||
64 | |||
65 | if [[ ${BOOTSTRAP} = 0 ]] | ||
66 | then | ||
67 | # see src/stage0.txt | ||
68 | SDEPEND+=" | ||
69 | >= dev-lang/rust-1.37 | ||
70 | >= dev-lang/cargo-0.38" | ||
71 | fi | ||
72 | |||
73 | SRCFILE="${PNAME}c-${PVER}-src.tar.gz" | ||
74 | SRCDIR="${BUILDDIR}/${PNAME}c-${PVER}-src" | ||
75 | |||
76 | msetfeature "!check" | ||
77 | sminclude mtools | ||
78 | |||
79 | SRC_URI=( | ||
80 | https://static.rust-lang.org/dist/${SRCFILE} | ||
81 | mirror://${PNAME}/${SRCFILE} | ||
82 | ) | ||
83 | |||
84 | UP2SEPERATOR="\/" | ||
85 | UP2DATE="updatecmd https://github.com/rust-lang/rust/releases | highesttarball gz" | ||
86 | |||
87 | if [[ ${BOOTSTRAP} = 1 ]] | ||
88 | then | ||
89 | # see src/stage0.txt | ||
90 | RUSTBIN_PVER="1.37.0" | ||
91 | RUSTBIN_DATE="2019-08-15" | ||
92 | RUSTBIN_SRCFILE_x86_64="rustc-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" | ||
93 | RUSTBIN_SRCFILE_x86="rustc-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz" | ||
94 | RUSTBIN_SRCFILE="$(marchsrcfile RUSTBIN_SRCFILE)" | ||
95 | RUSTSTD_SRCFILE_x86_64="rust-std-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" | ||
96 | RUSTSTD_SRCFILE_x86="rust-std-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz" | ||
97 | RUSTSTD_SRCFILE="$(marchsrcfile RUSTSTD_SRCFILE)" | ||
98 | CARGOBIN_PVER="0.38.0" | ||
99 | CARGOBIN_SRCFILE_x86_64="cargo-${CARGOBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" | ||
100 | CARGOBIN_SRCFILE_x86="cargo-${CARGOBIN_PVER}-i686-unknown-linux-gnu.tar.gz" | ||
101 | CARGOBIN_SRCFILE="$(marchsrcfile CARGOBIN_SRCFILE)" | ||
102 | |||
103 | SRC_URI+=( | ||
104 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86_64} | ||
105 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86} | ||
106 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86_64} | ||
107 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86} | ||
108 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86_64} | ||
109 | https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86} | ||
110 | ) | ||
111 | fi | ||
112 | |||
113 | split_info_rust() | ||
114 | { | ||
115 | DESCRIPTION="Systems programming language focused on safety, speed and concurrency." | ||
116 | DEPEND="${RUST_DEPEND}" | ||
117 | } | ||
118 | |||
119 | split_info_cargo() | ||
120 | { | ||
121 | DESCRIPTION="Rust's package manager and build tool." | ||
122 | DEPEND="== dev-lang/rust-${RUST_PVER} | ||
123 | ${CARGO_DEPEND}" | ||
124 | PCAT="dev-util" | ||
125 | PVER="${CARGO_PVER}" | ||
126 | } | ||
127 | |||
128 | split_info_rustfmt() | ||
129 | { | ||
130 | DESCRIPTION="Tool to find and fix Rust formatting issues." | ||
131 | DEPEND="== dev-lang/rust-${RUST_PVER} | ||
132 | == dev-util/cargo-${CARGO_PVER} | ||
133 | ${RUSTFMT_DEPEND}" | ||
134 | PCAT="dev-util" | ||
135 | PVER="${RUSTFMT_PVER}" | ||
136 | } | ||
137 | |||
138 | split_info_rust-rls() | ||
139 | { | ||
140 | DESCRIPTION="Rust Language Server for IDE integration." | ||
141 | DEPEND="== dev-lang/rust-${RUST_PVER} | ||
142 | ${RUSTRLS_DEPEND}" | ||
143 | PCAT="dev-util" | ||
144 | PVER="${RLS_PVER}" | ||
145 | } | ||
146 | |||
147 | split_info_rust-src() | ||
148 | { | ||
149 | DESCRIPTION="Rust standard library sources." | ||
150 | DEPEND="${SRC_DEPEND}" | ||
151 | } | ||
152 | |||
153 | split_info_rust-docs() | ||
154 | { | ||
155 | DESCRIPTION="HTML documentation for the Rust programming language." | ||
156 | DEPEND="${DOCS_DEPEND}" | ||
157 | } | ||
158 | |||
159 | split_info_cargo-docs() | ||
160 | { | ||
161 | DESCRIPTION="HTML documentation for Cargo." | ||
162 | DEPEND="== dev-lang/rust-docs-${PVER} | ||
163 | ${DOCS_DEPEND}" | ||
164 | } | ||
165 | |||
166 | src_prepare() | ||
167 | { | ||
168 | munpack ${SRCFILE} || die | ||
169 | |||
170 | if [[ ${BOOTSTRAP} = 1 ]] | ||
171 | then | ||
172 | install -d ${SRCDIR}/build/cache/${RUSTBIN_DATE} || die | ||
173 | ln -snf ${SOURCEDIR}/${PNAME}/${RUSTBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die | ||
174 | ln -snf ${SOURCEDIR}/${PNAME}/${RUSTSTD_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die | ||
175 | ln -snf ${SOURCEDIR}/${PNAME}/${CARGOBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die | ||
176 | fi | ||
177 | } | ||
178 | |||
179 | src_compile() | ||
180 | { | ||
181 | cd ${SRCDIR} | ||
182 | |||
183 | local myARCH | ||
184 | local myRUSTHOST | ||
185 | myARCH="${ARCH}" | ||
186 | [[ ${ARCH} = i*86 ]] && myARCH="i686" | ||
187 | myRUSTCHOST="${myARCH}-unknown-linux-gnu" | ||
188 | |||
189 | # create a custom build config | ||
190 | cat <<- EOF > ${SRCDIR}/config.toml | ||
191 | [llvm] | ||
192 | # enable ninja | ||
193 | ninja = true | ||
194 | # prefer shared libraries | ||
195 | link-shared = true | ||
196 | |||
197 | [build] | ||
198 | EOF | ||
199 | # support multilib on x86_64 | ||
200 | if [[ ${ARCH} = x86_64 ]] | ||
201 | then | ||
202 | cat <<- EOF >> ${SRCDIR}/config.toml | ||
203 | target = ["${myRUSTCHOST}","i686-unknown-linux-gnu"] | ||
204 | EOF | ||
205 | fi | ||
206 | if [[ ${BOOTSTRAP} = 0 ]] | ||
207 | then | ||
208 | # use local rust if no bootstrap was requested | ||
209 | cat <<- EOF >> ${SRCDIR}/config.toml | ||
210 | cargo = "/usr/bin/cargo" | ||
211 | rustc = "/usr/bin/rustc" | ||
212 | EOF | ||
213 | fi | ||
214 | cat <<- EOF >> ${SRCDIR}/config.toml | ||
215 | submodules = false | ||
216 | python = "python2" | ||
217 | # build cargo too | ||
218 | extended = true | ||
219 | |||
220 | [install] | ||
221 | prefix = "/usr" | ||
222 | libdir = "$(mlibdir)" | ||
223 | docdir = "share/doc/${PNAME}-${PVER}" | ||
224 | mandir = "share/man" | ||
225 | |||
226 | [rust] | ||
227 | channel = "stable" | ||
228 | rpath = false | ||
229 | # disable codegen tests | ||
230 | codegen-tests = false | ||
231 | jemalloc = true | ||
232 | # Work around https://github.com/rust-lang/rust/issues/51650 | ||
233 | deny-warnings = false | ||
234 | |||
235 | [target.${myRUSTCHOST}] | ||
236 | llvm-config = "/usr/bin/llvm-config" | ||
237 | EOF | ||
238 | # honor multilib gcc setups | ||
239 | if [[ ${ARCH} = x86_64 ]] | ||
240 | then | ||
241 | cat <<- EOF >> ${SRCDIR}/config.toml | ||
242 | [target.i686-unknown-linux-gnu] | ||
243 | llvm-config = "/usr/bin/llvm-config" | ||
244 | EOF | ||
245 | fi | ||
246 | |||
247 | ## missing llvm link deps | ||
248 | export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi" | ||
249 | python2 ./x.py build --verbose || die | ||
250 | } | ||
251 | |||
252 | src_install_rust() | ||
253 | { | ||
254 | cd ${SRCDIR} | ||
255 | DESTDIR=${BINDIR} python2 ./x.py install || die | ||
256 | |||
257 | # remove unnecessary files | ||
258 | mdelete /usr/$(mlibdir)/rustlib/components || die | ||
259 | mdelete /usr/$(mlibdir)/rustlib/manifest-rustc || die | ||
260 | mdelete /usr/$(mlibdir)/rustlib/rust-installer-version || die | ||
261 | |||
262 | # overwrite duplicate solibs with symlinks to safe space | ||
263 | local myARCH | ||
264 | local myRUSTHOST | ||
265 | myARCH="${ARCH}" | ||
266 | [[ ${ARCH} = i*86 ]] && myARCH="i686" | ||
267 | myRUSTCHOST="${myARCH}-unknown-linux-gnu" | ||
268 | local i | ||
269 | for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myRUSTCHOST}/lib/*.so | ||
270 | do | ||
271 | mlink rustlib/${myRUSTCHOST}/lib/$(basename ${i}) /usr/$(mlibdir)/ || die | ||
272 | done | ||
273 | |||
274 | # create missing 32-bit links on multilib systems | ||
275 | if [[ ${ARCH} = x86_64 ]] | ||
276 | then | ||
277 | minstalldir /usr/lib || die | ||
278 | for i in ${BINDIR}/usr/$(mlibdir)/rustlib/i686-unknown-linux-gnu/lib/*.so | ||
279 | do | ||
280 | mlink rustlib/i686-unknown-linux-gnu/lib/$(basename ${i}) /usr/lib/ || die | ||
281 | done | ||
282 | fi | ||
283 | |||
284 | # move split packages out of the way | ||
285 | install -d ${SRCDIR}/rust-split-packages/rls/usr/bin || die | ||
286 | install -d ${SRCDIR}/rust-split-packages/fmt/usr/bin || die | ||
287 | install -d ${SRCDIR}/rust-split-packages/cargo/usr/bin || die | ||
288 | install -d ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1 || die | ||
289 | install -d ${SRCDIR}/rust-split-packages/rust-src/usr/$(mlibdir)/rustlib || die | ||
290 | install -d ${SRCDIR}/rust-split-packages/cargo-docs/usr/share/doc/${PNAME}-${PVER}/html || die | ||
291 | install -d ${SRCDIR}/rust-split-packages/rust-docs/usr/share/doc/${PNAME}-${PVER} || die | ||
292 | mv ${BINDIR}/usr/bin/rls ${SRCDIR}/rust-split-packages/rls/usr/bin/ || die | ||
293 | mv ${BINDIR}/usr/bin/cargo-fmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die | ||
294 | mv ${BINDIR}/usr/bin/rustfmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die | ||
295 | mv ${BINDIR}/usr/bin/cargo ${SRCDIR}/rust-split-packages/cargo/usr/bin/ || die | ||
296 | mv ${BINDIR}/etc ${SRCDIR}/rust-split-packages/cargo/ || die | ||
297 | mv ${BINDIR}/usr/share/man/man1/cargo*.1 ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1/ || die | ||
298 | mv ${BINDIR}/usr/$(mlibdir)/rustlib/src ${SRCDIR}/rust-split-packages/rust-src/usr/$(mlibdir)/rustlib/ || die | ||
299 | # move cargo first, then the rest of the documentation | ||
300 | mv ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html/cargo ${SRCDIR}/rust-split-packages/cargo-docs/usr/share/doc/${PNAME}-${PVER}/html/ || die | ||
301 | mv ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html ${SRCDIR}/rust-split-packages/rust-docs/usr/share/doc/${PNAME}-${PVER}/ || die | ||
302 | |||
303 | minstalldocs COPYRIGHT LICENSE-* ChangeLog README* || die | ||
304 | } | ||
305 | |||
306 | src_install_cargo() | ||
307 | { | ||
308 | install -d ${BINDIR} || die | ||
309 | mv ${SRCDIR}/rust-split-packages/cargo/* ${BINDIR}/ || die | ||
310 | local docsubdir="src/tools/cargo" | ||
311 | minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die | ||
312 | } | ||
313 | |||
314 | src_install_rustfmt() | ||
315 | { | ||
316 | install -d ${BINDIR} || die | ||
317 | mv ${SRCDIR}/rust-split-packages/fmt/* ${BINDIR}/ || die | ||
318 | local docsubdir="src/tools/rustfmt" | ||
319 | minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die | ||
320 | } | ||
321 | |||
322 | src_install_rust-rls() | ||
323 | { | ||
324 | install -d ${BINDIR} || die | ||
325 | mv ${SRCDIR}/rust-split-packages/rls/* ${BINDIR}/ || die | ||
326 | local docsubdir="src/tools/rls" | ||
327 | minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die | ||
328 | } | ||
329 | |||
330 | src_install_rust-src() | ||
331 | { | ||
332 | install -d ${BINDIR} || die | ||
333 | mv ${SRCDIR}/rust-split-packages/rust-src/* ${BINDIR}/ || die | ||
334 | } | ||
335 | |||
336 | src_install_rust-docs() | ||
337 | { | ||
338 | install -d ${BINDIR} || die | ||
339 | mv ${SRCDIR}/rust-split-packages/rust-docs/* ${BINDIR}/ || die | ||
340 | } | ||
341 | |||
342 | src_install_cargo-docs() | ||
343 | { | ||
344 | install -d ${BINDIR} || die | ||
345 | mv ${SRCDIR}/rust-split-packages/cargo-docs/* ${BINDIR}/ || die | ||
346 | } |