.NET Core CLI tools and runtime
CentOS Sources
2019-01-09 8af49184aaa03da37abf6d8f70553d42577fa552
commit | author | age
133fb8 1 # Do *NOT* try and build this locally (using rhpkg or any other tool) if one of
CS 2 # the parent directories is a git repository. This build uses git-apply during
3 # the upstream build process. git-apply will simply skip all patches since none
4 # of the patches affect the build subdirectory.
5 #
6 # Use `rhpkg local --builddir ../dotnet-build` or something similar to work
7 # around this.
8
9 %{?scl:%scl_package dotnet}
10 %{!?scl:%global pkg_name %{name}}
11
12 # lldb doesn't like our nice debug information
13 %undefine _include_minidebuginfo
14 %global _find_debuginfo_dwz_opts %{nil}
15
16 # Avoid provides/requires from private libraries
17 %global privlibs             libhostfxr
18 %global privlibs %{privlibs}|libclrjit
19 %global privlibs %{privlibs}|libcoreclr
20 %global privlibs %{privlibs}|libcoreclrtraceptprovider
21 %global privlibs %{privlibs}|libdbgshim
22 %global privlibs %{privlibs}|libhostpolicy
23 %global privlibs %{privlibs}|libmscordaccore
24 %global privlibs %{privlibs}|libmscordbi
25 %global privlibs %{privlibs}|libsos
26 %global privlibs %{privlibs}|libsosplugin
27 %global __provides_exclude ^(%{privlibs})\\.so
28
29 # Remove private libraries and the automatically generated dependency
30 # on system libcurl package. We require the %%{?scl_prefix}libcurl package
31 %global __requires_exclude ^(%{privlibs}|libcurl)\\.so
32
33 # Filter flags not supported by clang/dotnet:
34 #  -fcf-protection is not supported by clang
35 #  -specs= is not supported by clang
36 %global dotnet_cflags %(echo %optflags | sed -e 's/-fcf-protection//' | sed -re 's/-specs=[^ ]*//g')
37 %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g')
38
8af491 39 %global host_version 2.2.1
CS 40 %global sdk_version 2.2.102
41 %global runtime_version 2.2.1
133fb8 42
CS 43 Name:           %{?scl_prefix}dotnet
44 Version:        %{sdk_version}
8af491 45 Release:        1%{?dist}
133fb8 46 Group:          Development/Languages
CS 47 Summary:        .NET Core CLI tools and runtime
48 License:        MIT and ASL 2.0 and BSD
49 URL:            https://github.com/dotnet/
50
51 # The source is generated on a RHEL box via:
52 # - git clone https://github.com/dotnet/source-build
53 # - git checkout v%%{sdk_version}
54 # - set environment variables + tweak sources to build
55 # - ./build-source-tarball.sh dotnet-%%{sdk_version}
56 # - tar cvzf dotnet-%%{sdk_version}.tar.gz dotnet-%%{sdk_version}
57
8af491 58 Source0:        dotnet-%{runtime_version}.tar.gz
133fb8 59 Source1:        check-debug-symbols.py
CS 60
61 Patch100:       corefx-32956-alpn.patch
62 Patch101:       corefx-optflags-support.patch
63
64 Patch200:       coreclr-21084-llvm-home.patch
65
66 Patch300:       core-setup-4510-commit-id.patch
67
68 ExclusiveArch:  x86_64
69
70 BuildRequires:  llvm-toolset-7-clang
71 BuildRequires:  cmake
72 BuildRequires:  git
73 BuildRequires:  hostname
74 BuildRequires:  krb5-devel
75 BuildRequires:  %{?scl_prefix}libcurl-devel
76 BuildRequires:  libicu-devel
77 BuildRequires:  libunwind-devel
78 BuildRequires:  llvm-toolset-7-lldb-devel
79 BuildRequires:  llvm-toolset-7-llvm
80 BuildRequires:  %{?scl_prefix}lttng-ust-devel
81 BuildRequires:  openssl-devel
82 BuildRequires:  python2
83 BuildRequires:  zlib-devel
84
85 Requires:       %{name}-sdk-2.2%{?_isa}
86
87 %description
88 .NET Core is a fast, lightweight and modular platform for creating
89 cross platform applications that work on Linux, macOS and Windows.
90
91 It particularly focuses on creating console applications, web
92 applications and micro-services.
93
94 .NET Core contains a runtime conforming to .NET Standards a set of
95 framework libraries, an SDK containing compilers and a 'dotnet'
96 application to drive everything.
97
98 %package host
99
100 Version:        %{runtime_version}
101 Summary:        .NET command line launcher
102
103 %description host
104 The .NET Core host is a command line program that runs a standalone
105 .NET core application or launches the SDK.
106
107 .NET Core is a fast, lightweight and modular platform for creating
108 cross platform applications that work on Linux, Mac and Windows.
109
110 It particularly focuses on creating console applications, web
111 applications and micro-services.
112
113 %package host-fxr-2.2
114
115 Version:        %{host_version}
116 Summary:        .NET Core command line host resolver
117
118 # Theoretically any version of the host should work
119 Requires:       %{name}-host%{?_isa}
120
121 %description host-fxr-2.2
122 The .NET Core host resolver contains the logic to resolve and select
123 the right version of the .NET Core SDK or runtime to use.
124
125 .NET Core is a fast, lightweight and modular platform for creating
126 cross platform applications that work on Linux, Mac and Windows.
127
128 It particularly focuses on creating console applications, web
129 applications and micro-services.
130
131 %package runtime-2.2
132
133 Version:        %{runtime_version}
134 Summary:        NET Core 2.2 runtime
135
136 Requires:       %{name}-host-fxr-2.2%{?_isa}
137
138 # libicu is dlopen()ed
139 Requires:       libicu
140 # libcurl is dlopen()ed
141 Requires:       %{?scl_prefix}libcurl
142
143 %description runtime-2.2
144 The .NET Core runtime contains everything needed to run .NET Core applications.
145 It includes a high performance Virtual Machine as well as the framework
146 libraries used by .NET Core applications.
147
148 .NET Core is a fast, lightweight and modular platform for creating
149 cross platform applications that work on Linux, Mac and Windows.
150
151 It particularly focuses on creating console applications, web
152 applications and micro-services.
153
154 %package sdk-2.2
155
156 Version:        %{sdk_version}
157 Summary:        .NET Core 2.2 Software Development Kit
158
159 Requires:       %{name}-sdk-2.2.1xx%{?_isa}
160
161 %description sdk-2.2
162 The .NET Core SDK is a collection of command line applications to
163 create, build, publish and run .NET Core applications.
164
165 .NET Core is a fast, lightweight and modular platform for creating
166 cross platform applications that work on Linux, Mac and Windows.
167
168 It particularly focuses on creating console applications, web
169 applications and micro-services.
170
171 %package sdk-2.2.1xx
172
173 Version:        %{sdk_version}
174 Summary:        .NET Core 2.2.1xx Software Development Kit
175
176 Requires:       %{name}-runtime-2.2%{?_isa}
177
178 %description sdk-2.2.1xx
179 The .NET Core SDK is a collection of command line applications to
180 create, build, publish and run .NET Core applications.
181
182 .NET Core is a fast, lightweight and modular platform for creating
183 cross platform applications that work on Linux, Mac and Windows.
184
185 It particularly focuses on creating console applications, web
186 applications and micro-services.
187
188 %prep
8af491 189 %setup -q -n %{pkg_name}-%{runtime_version}
133fb8 190
CS 191 # Disable warnings
192 sed -i 's|skiptests|skiptests ignorewarnings|' repos/coreclr.proj
193
194 # Fix bad hardcoded path in build
195 sed -i 's|/usr/share/dotnet|%{_libdir}/%{pkg_name}|' src/core-setup/src/corehost/common/pal.unix.cpp
196
197 pushd src/corefx
198 %patch100 -p1
199 %patch101 -p1
200 popd
201
202 pushd src/coreclr
203 %patch200 -p1
204 popd
205
206 pushd src/core-setup
207 %patch300 -p1
208 popd
209
210 %build
211 %{?scl:scl enable %scl llvm-toolset-7 - << \EOF}
212 set -xe
213
214 export CFLAGS="%{dotnet_cflags}"
215 export CXXFLAGS="%{dotnet_cflags}"
216 export LDFLAGS="%{dotnet_ldflags}"
217
218 export LIBRARY_PATH="%{_libdir}"
219 export LLVM_HOME=/opt/rh/llvm-toolset-7/root/usr 
220 export CMAKE_PREFIX_PATH="%{_prefix}"
221
222 VERBOSE=1 ./build.sh \
223   /v:diag \
224   /p:MinimalConsoleLogOutput=false \
225   /p:ContinueOnPrebuiltBaselineError=true
226
227 %{?scl:EOF}
228
229 %install
230 install -d -m 0755 %{buildroot}%{_libdir}/%{pkg_name}/
231 ls bin/x64/Release
232 tar vxf bin/x64/Release/dotnet-sdk-%{sdk_version}-*.tar.gz -C %{buildroot}%{_libdir}/%{pkg_name}/
233
234 # Fix permissions on files
235 find %{buildroot}%{_libdir}/%{pkg_name}/ -type f -name '*.props' -exec chmod -x {} \;
236 find %{buildroot}%{_libdir}/%{pkg_name}/ -type f -name '*.targets' -exec chmod -x {} \;
237 find %{buildroot}%{_libdir}/%{pkg_name}/ -type f -name '*.dll' -exec chmod -x {} \;
238 find %{buildroot}%{_libdir}/%{pkg_name}/ -type f -name '*.pubxml' -exec chmod -x {} \;
239
240 #TODO: find a way to make completion parallel-installable
241 #install -dm 755 %%{buildroot}/%%{_root_datadir}/bash-completion/completions
242 # dynamic completion needs the file to be named the same as the base command
243 #install src/cli/scripts/register-completions.bash %%{buildroot}/%%{_root_datadir}/bash-completion/completions/dotnet
244
245 # TODO: the zsh completion script needs to be ported to use #compdef
246 #install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions
247 #install src/cli/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet
248
249 install -d -m 0755 %{buildroot}%{_bindir}
250 ln -s %{_libdir}/%{pkg_name}/dotnet %{buildroot}%{_bindir}/
251
252 install -d -m 0755 %{buildroot}%{_mandir}/man1/
253 find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \;
254
255 # Check debug symbols in all elf objects. This is not in %%check
256 # because native binaries are stripped by rpm-build after %%install.
257 # So we need to do this check earlier.
258 echo "Testing build results for debug symbols..."
259 %{SOURCE1} -v %{buildroot}%{_libdir}/%{pkg_name}/
260
261 %check
262 %{buildroot}%{_libdir}/%{pkg_name}/dotnet --info
263
264 %files
265 # empty package useful for dependencies
266
267 %files host
268 %dir %{_libdir}/%{pkg_name}
269 %{_libdir}/%{pkg_name}/dotnet
270 %{_libdir}/%{pkg_name}/host
271 %{_bindir}/dotnet
272 %doc %{_libdir}/%{pkg_name}/LICENSE.txt
273 %doc %{_libdir}/%{pkg_name}/ThirdPartyNotices.txt
274 %doc %{_mandir}/man1/dotnet*.1.gz
275 # shell completions are currently only picked up from %%{_root_datadir}
276 #%%dir %%{_root_datadir}/bash-completion
277 #%%dir %%{_root_datadir}/bash-completion/completions
278 #%%{_root_datadir}/bash-completion/completions/dotnet
279
280 %files host-fxr-2.2
281 %dir %{_libdir}/%{pkg_name}/host/fxr
282 %{_libdir}/%{pkg_name}/host/fxr/%{host_version}
283
284 %files runtime-2.2
285 %dir %{_libdir}/%{pkg_name}/shared
286 %dir %{_libdir}/%{pkg_name}/shared/Microsoft.NETCore.App
287 %{_libdir}/%{pkg_name}/shared/Microsoft.NETCore.App/%{runtime_version}
288
289 %files sdk-2.2
290 # empty package useful for dependencies
291
292 %files sdk-2.2.1xx
293 %dir %{_libdir}/%{pkg_name}/sdk
294 %{_libdir}/%{pkg_name}/sdk/%{sdk_version}
295
296 %changelog
8af491 297 * Tue Dec 18 2018 Omair Majid <omajid@redhat.com> - 2.2.102-1
CS 298 - Update to .NET Core Runtime 2.1.2 and SDK 2.2.102
299 - Resolves: RHBZ#1660223
300
133fb8 301 * Thu Nov 29 2018 Omair Majid <omajid@redhat.com> - 2.2.100-5
CS 302 - Remove bash completion to fix parallel installation with .NET Core 2.1
303 - Resolves: RHBZ#1649584
304
305 * Wed Nov 21 2018 Omair Majid <omajid@redhat.com> - 2.2.100-4
306 - Fix dependency on host-fxr-2.2
307 - Resolves: RHBZ#1649584
308
309 * Wed Nov 21 2018 Omair Majid <omajid@redhat.com> - 2.2.100-3
310 - Fix configure check in the presence of distro-supplied cflags/ldflags
311 - Fixes ALPN support
312 - Resolves: RHBZ#1649584
313
314 * Tue Nov 20 2018 Omair Majid <omajid@redhat.com> - 2.2.100-2
315 - Increase build verbosity
316 - Resolves: RHBZ#1649584
317
318 * Mon Nov 19 2018 Omair Majid <omajid@redhat.com> - 2.2.100-1
319 - New package.
320 - Resolves: RHBZ#1649584