Magellan Linux

Contents of /smage/branches/alx07x-stable/extras/rust/rust-1.45.2-r1.smage2

Parent Directory Parent Directory | Revision Log Revision Log


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