Magellan Linux

Contents of /branches/R11-unstable/extras/rust/rust-1.31.0-r2.smage2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 32888 - (show annotations) (download)
Mon Apr 29 13:54:10 2019 UTC (5 years ago) by niro
File size: 9675 byte(s)
-release branches/R11-unstable
1 # $Id$
2
3 PNAME="rust"
4 PVER="1.31.0"
5 PBUILD="r2"
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.32.0"
21 # provided pver of rls, see src/tools/rustfmt/Cargo.toml
22 RUSTFMT_PVER="1.0.0"
23 # provided pver of rls, see src/tools/rls/Cargo.toml
24 RLS_PVER="1.31.6"
25
26 # required pver of llvm and gcc
27 GCC_PVER="8.2.0"
28 LLVM_PVER="7.0.1"
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.28
53 >= dev-lang/python-2.7
54 >= dev-libs/libffi-3.2
55 >= dev-libs/jemalloc-5.1
56 >= dev-util/cmake-3.12
57 >= dev-util/ninja-1.8
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.30
70 >= dev-lang/cargo-0.31"
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.30.0"
91 RUSTBIN_DATE="2018-10-25"
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.31.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 use-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 }