Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12777 - (show annotations) (download)
Fri Oct 26 08:44:10 2018 UTC (5 years, 6 months ago) by niro
File size: 7966 byte(s)
-release branches/alx07x-stable
1 # $Id$
2
3 PNAME="rust"
4 PVER="1.28.0"
5 PBUILD="r1"
6
7 SPLIT_PACKAGES="rust cargo rustfmt rust-rls"
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.29.0"
21 # provided pver of rls, see src/tools/rustfmt/Cargo.toml
22 RUSTFMT_PVER="0.8.2"
23 # provided pver of rls, see src/tools/rls/Cargo.toml
24 RLS_PVER="0.128.0"
25
26 # required pver of llvm and gcc
27 GCC_PVER="8.2.0"
28 LLVM_PVER="6.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 SDEPEND=">= sys-dev/llvm-${LLVM_PVER}
46 >= sys-dev/clang-${LLVM_PVER}
47 >= dev-lang/perl-5.26
48 >= dev-lang/python-2.7
49 >= dev-libs/libffi-3.2
50 >= dev-libs/jemalloc-5.1
51 >= dev-util/cmake-3.12
52 >= dev-util/ninja-1.8
53 ${RUST_DEPEND}
54 ${CARGO_DEPEND}
55 ${RUSTFMT_DEPEND}
56 ${RUSTRLS_DEPEND}
57 >= net-misc/curl-dev-7
58 >= app-arch/xz-utils-dev-5
59 >= dev-libs/libffi-dev-3.2
60 >= dev-libs/jemalloc-dev-5.1
61 >= dev-libs/openssl-dev-1.1
62 >= net-libs/libssh2-dev-1.8
63 >= sys-libs/zlib-dev-1.2"
64
65 if [[ ${BOOTSTRAP} = 0 ]]
66 then
67 # see src/stage0.txt
68 SDEPEND+="
69 >= dev-lang/rust-1.27
70 >= dev-lang/cargo-0.28"
71 fi
72
73 SRCFILE="${PNAME}c-${PVER}-src.tar.gz"
74 SRCDIR="${BUILDDIR}/${PNAME}c-${PVER}-src"
75
76 msetfeature "!check"
77 sminclude mbuild mtools
78
79 SRC_URI=(
80 https://static.rust-lang.org/dist/${SRCFILE}
81 mirror://${PNAME}/${SRCFILE}
82 )
83
84 UP2DATE="updatecmd https://www.rust-lang.org/en-US/other-installers.html | grep 'rustc-.*-src.*' | sed 's:-src::g' | highesttarball gz"
85
86 if [[ ${BOOTSTRAP} = 1 ]]
87 then
88 # see src/stage0.txt
89 RUSTBIN_PVER="1.27.2"
90 RUSTBIN_DATE="2018-07-20"
91 RUSTBIN_SRCFILE_x86_64="rustc-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz"
92 RUSTBIN_SRCFILE_x86="rustc-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz"
93 RUSTBIN_SRCFILE="$(marchsrcfile RUSTBIN_SRCFILE)"
94 RUSTSTD_SRCFILE_x86_64="rust-std-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz"
95 RUSTSTD_SRCFILE_x86="rust-std-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz"
96 RUSTSTD_SRCFILE="$(marchsrcfile RUSTSTD_SRCFILE)"
97 CARGOBIN_PVER="0.28.0"
98 CARGOBIN_SRCFILE_x86_64="cargo-${CARGOBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz"
99 CARGOBIN_SRCFILE_x86="cargo-${CARGOBIN_PVER}-i686-unknown-linux-gnu.tar.gz"
100 CARGOBIN_SRCFILE="$(marchsrcfile CARGOBIN_SRCFILE)"
101
102 SRC_URI+=(
103 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86_64}
104 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86}
105 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86_64}
106 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86}
107 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86_64}
108 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86}
109 )
110 fi
111
112 split_info_rust()
113 {
114 DESCRIPTION="Systems programming language focused on safety, speed and concurrency."
115 DEPEND="${RUST_DEPEND}"
116 }
117
118 split_info_cargo()
119 {
120 DESCRIPTION="Rust's package manager and build tool."
121 DEPEND="== dev-lang/rust-${RUST_PVER}
122 ${CARGO_DEPEND}"
123 PCAT="dev-util"
124 PVER="${CARGO_PVER}"
125 }
126
127 split_info_rustfmt()
128 {
129 DESCRIPTION="Tool to find and fix Rust formatting issues."
130 DEPEND="== dev-lang/rust-${RUST_PVER}
131 == dev-util/cargo-${CARGO_PVER}
132 ${RUSTFMT_DEPEND}"
133 PCAT="dev-util"
134 PVER="${RUSTFMT_PVER}"
135 }
136
137 split_info_rust-rls()
138 {
139 DESCRIPTION="Rust Language Server for IDE integration."
140 DEPEND="== dev-lang/rust-${RUST_PVER}
141 ${RUSTRLS_DEPEND}"
142 PCAT="dev-util"
143 PVER="${RLS_PVER}"
144 }
145
146 src_prepare()
147 {
148 munpack ${SRCFILE} || die
149
150 if [[ ${BOOTSTRAP} = 1 ]]
151 then
152 install -d ${SRCDIR}/build/cache/${RUSTBIN_DATE} || die
153 ln -snf ${SOURCEDIR}/${PNAME}/${RUSTBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
154 ln -snf ${SOURCEDIR}/${PNAME}/${RUSTSTD_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
155 ln -snf ${SOURCEDIR}/${PNAME}/${CARGOBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
156 fi
157 }
158
159 src_compile()
160 {
161 cd ${SRCDIR}
162
163 local myARCH
164 local myRUSTHOST
165 myARCH="${ARCH}"
166 [[ ${ARCH} = i*86 ]] && myARCH="i686"
167 myRUSTCHOST="${myARCH}-unknown-linux-gnu"
168
169 # create a custom build config
170 cat <<- EOF > ${SRCDIR}/config.toml
171 [llvm]
172 # enable ninja
173 ninja = true
174 # prefer shared libraries
175 link-shared = true
176
177 [build]
178 EOF
179 if [[ ${BOOTSTRAP} = 0 ]]
180 then
181 # use local rust if no bootstrap was requested
182 cat <<- EOF >> ${SRCDIR}/config.toml
183 cargo = "/usr/bin/cargo"
184 rustc = "/usr/bin/rustc"
185 EOF
186 fi
187 cat <<- EOF >> ${SRCDIR}/config.toml
188 submodules = false
189 python = "python2"
190 # build cargo too
191 extended = true
192
193 [install]
194 prefix = "/usr"
195 libdir = "$(mlibdir)"
196 docdir = "share/doc/${PNAME}-${PVER}"
197 mandir = "share/man"
198
199 [rust]
200 channel = "stable"
201 rpath = false
202 # disable codegen tests
203 codegen-tests = false
204 use-jemalloc = true
205 # Work around https://github.com/rust-lang/rust/issues/51650
206 deny-warnings = false
207
208 [target.${myRUSTCHOST}]
209 llvm-config = "/usr/bin/llvm-config"
210 EOF
211
212 ## missing llvm link deps
213 export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi"
214 python2 ./x.py build --verbose || die
215 }
216
217 src_install_rust()
218 {
219 cd ${SRCDIR}
220 DESTDIR=${BINDIR} python2 ./x.py install || die
221
222 # remove unnecessary files
223 mdelete /usr/$(mlibdir)/rustlib/components || die
224 mdelete /usr/$(mlibdir)/rustlib/manifest-rustc || die
225 mdelete /usr/$(mlibdir)/rustlib/rust-installer-version || die
226
227 # overwrite duplicate solibs with symlinks to safe space
228 local myARCH
229 local myRUSTHOST
230 myARCH="${ARCH}"
231 [[ ${ARCH} = i*86 ]] && myARCH="i686"
232 myRUSTCHOST="${myARCH}-unknown-linux-gnu"
233 local i
234 for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myRUSTCHOST}/lib/*.so
235 do
236 mlink rustlib/${myRUSTCHOST}/lib/$(basename ${i}) /usr/$(mlibdir)/ || die
237 done
238
239 # move split packages out of the way
240 install -d ${SRCDIR}/rust-split-packages/rls/usr/bin || die
241 install -d ${SRCDIR}/rust-split-packages/fmt/usr/bin || die
242 install -d ${SRCDIR}/rust-split-packages/cargo/usr/bin || die
243 install -d ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1 || die
244 install -d ${SRCDIR}/rust-split-packages/cargo/usr/share/doc/${PNAME}-${PVER}/html || die
245 mv ${BINDIR}/usr/bin/rls ${SRCDIR}/rust-split-packages/rls/usr/bin/ || die
246 mv ${BINDIR}/usr/bin/cargo-fmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die
247 mv ${BINDIR}/usr/bin/rustfmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die
248 mv ${BINDIR}/usr/bin/cargo ${SRCDIR}/rust-split-packages/cargo/usr/bin/ || die
249 mv ${BINDIR}/etc ${SRCDIR}/rust-split-packages/cargo/ || die
250 mv ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html/cargo ${SRCDIR}/rust-split-packages/cargo/usr/share/doc/${PNAME}-${PVER}/html/ || die
251 mv ${BINDIR}/usr/share/man/man1/cargo*.1 ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1/ || die
252
253 minstalldocs COPYRIGHT LICENSE-* ChangeLog README* || die
254 }
255
256 src_install_cargo()
257 {
258 install -d ${BINDIR} || die
259 mv ${SRCDIR}/rust-split-packages/cargo/* ${BINDIR}/ || die
260 local docsubdir="src/tools/cargo"
261 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
262 }
263
264 src_install_rustfmt()
265 {
266 install -d ${BINDIR} || die
267 mv ${SRCDIR}/rust-split-packages/fmt/* ${BINDIR}/ || die
268 local docsubdir="src/tools/rustfmt"
269 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
270 }
271
272 src_install_rust-rls()
273 {
274 install -d ${BINDIR} || die
275 mv ${SRCDIR}/rust-split-packages/rls/* ${BINDIR}/ || die
276 local docsubdir="src/tools/rls"
277 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
278 }