Contents of /trunk/extras/rust/rust-1.38.0-r1.smage2
Parent Directory | Revision Log
Revision 33005 -
(show 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 | # $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 | } |