%{?scl:%scl_package dotnet} %{!?scl:%global pkg_name %{name}} # Avoid provides/requires from private libraries %global privlibs libhostfxr %global privlibs %{privlibs}|libclrjit %global privlibs %{privlibs}|libcoreclr %global privlibs %{privlibs}|libcoreclrtraceptprovider %global privlibs %{privlibs}|libdbgshim %global privlibs %{privlibs}|libhostpolicy %global privlibs %{privlibs}|libmscordaccore %global privlibs %{privlibs}|libmscordbi %global privlibs %{privlibs}|libsos %global privlibs %{privlibs}|libsosplugin %global __provides_exclude ^(%{privlibs})\\.so %global __requires_exclude ^(%{privlibs})\\.so # Filter flags not supported by clang/dotnet: # -fstack-clash-protection is not supported by clang # -specs= is not supported by clang %global dotnet_cflags %(echo %optflags | sed -e 's/-fstack-clash-protection//' | sed -re 's/-specs=[^ ]*//g') %if 0%{?fedora} < 30 # on Fedora 29, clang, -fcf-protection and binutils interact in strage ways leading to # "" errors. %global dotnet_cflags %(echo %dotnet_cflags | sed -e 's/ -fcf-protection//') %endif %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') %global host_version 3.1.11 %global runtime_version 3.1.11 %global aspnetcore_runtime_version %{runtime_version} %global sdk_version 3.1.111 %global templates_version %(echo %{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }') %global host_rpm_version %{host_version} %global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} %global runtime_rpm_version %{runtime_version} %global sdk_rpm_version %{sdk_version} %if 0%{?fedora} || 0%{?rhel} < 8 %global use_bundled_libunwind 0 %else %global use_bundled_libunwind 1 %endif %if 0%{?fedora} %global runtime_id fedora.%{fedora}-x64 %else %if 0%{?centos} %global runtime_id centos.%{centos}-x64 %else %global runtime_id rhel.%{rhel}-x64 %endif %endif Name: %{?scl_prefix}dotnet Version: %{sdk_rpm_version} Release: 1%{?dist} Summary: .NET Core CLI tools and runtime License: MIT and ASL 2.0 and BSD URL: https://github.com/dotnet/ # ./build-dotnet-tarball dotnet-v%%{sdk_version}-SDK Source0: dotnet-v%{sdk_version}-SDK.tar.gz Source1: check-debug-symbols.py Source2: dotnet.sh Patch100: corefx-optflags-support.patch Patch200: coreclr-hardening-flags.patch Patch300: core-setup-do-not-strip.patch Patch301: core-setup-hardening-flags.patch Patch500: cli-telemetry-optout.patch ExclusiveArch: x86_64 BuildRequires: llvm-toolset-7.0-clang BuildRequires: llvm-toolset-7.0-cmake # Bootstrap SDK needs OpenSSL 1.0 to run, but we can build and then # run with either OpenSSL 1.0 or 1.1 %if 0%{?fedora} >= 26 || 0%{?rhel} >= 8 BuildRequires: compat-openssl10 %endif BuildRequires: coreutils BuildRequires: git %if 0%{?fedora} || 0%{?rhel} > 7 BuildRequires: glibc-langpack-en %endif BuildRequires: hostname BuildRequires: krb5-devel BuildRequires: %{?scl_prefix}libcurl-devel BuildRequires: libicu-devel %if ! %{use_bundled_libunwind} BuildRequires: libunwind-devel %endif BuildRequires: llvm-toolset-7.0-lldb-devel BuildRequires: llvm-toolset-7.0-llvm BuildRequires: %{?scl_prefix}lttng-ust-devel BuildRequires: openssl-devel BuildRequires: python BuildRequires: tar BuildRequires: zlib-devel Requires: %{?scl_prefix}dotnet-sdk-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} %description .NET Core is a fast, lightweight and modular platform for creating cross platform applications that work on Linux, macOS and Windows. It particularly focuses on creating console applications, web applications and micro-services. .NET Core contains a runtime conforming to .NET Standards a set of framework libraries, an SDK containing compilers and a 'dotnet' application to drive everything. %package -n %{?scl_prefix}dotnet-host Version: %{host_rpm_version} Summary: .NET command line launcher %description -n %{?scl_prefix}dotnet-host The .NET Core host is a command line program that runs a standalone .NET core application or launches the SDK. .NET Core is a fast, lightweight and modular platform for creating cross platform applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %package -n %{?scl_prefix}dotnet-hostfxr-3.1 Version: %{host_rpm_version} Summary: .NET Core command line host resolver # Theoretically any version of the host should work. But lets aim for the one # provided by this package, or from a newer version of .NET Core Requires: %{?scl_prefix}dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} %description -n %{?scl_prefix}dotnet-hostfxr-3.1 The .NET Core host resolver contains the logic to resolve and select the right version of the .NET Core SDK or runtime to use. .NET Core is a fast, lightweight and modular platform for creating cross platform applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %package -n %{?scl_prefix}dotnet-runtime-3.1 Version: %{runtime_rpm_version} Summary: NET Core 3.1 runtime Requires: %{?scl_prefix}dotnet-hostfxr-3.1%{?_isa} >= %{host_rpm_version}-%{release} # libicu is dlopen()ed Requires: libicu # Requires the scl-version of curl Requires: %{?scl_prefix}libcurl %if %{use_bundled_libunwind} Provides: bundled(libunwind) = 1.3 %endif %description -n %{?scl_prefix}dotnet-runtime-3.1 The .NET Core runtime contains everything needed to run .NET Core applications. It includes a high performance Virtual Machine as well as the framework libraries used by .NET Core applications. .NET Core is a fast, lightweight and modular platform for creating cross platform applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %package -n %{?scl_prefix}aspnetcore-runtime-3.1 Version: %{aspnetcore_runtime_rpm_version} Summary: ASP.NET Core 3.1 runtime Requires: %{?scl_prefix}dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} %description -n %{?scl_prefix}aspnetcore-runtime-3.1 The ASP.NET Core runtime contains everything needed to run .NET Core web applications. It includes a high performance Virtual Machine as well as the framework libraries used by .NET Core applications. ASP.NET Core is a fast, lightweight and modular platform for creating cross platform web applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %package -n %{?scl_prefix}dotnet-templates-3.1 Version: %{sdk_rpm_version} Summary: .NET Core 3.1 templates # Theoretically any version of the host should work. But lets aim for the one # provided by this package, or from a newer version of .NET Core Requires: %{?scl_prefix}dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} %description -n %{?scl_prefix}dotnet-templates-3.1 This package contains templates used by the .NET Core SDK. ASP.NET Core is a fast, lightweight and modular platform for creating cross platform web applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %package -n %{?scl_prefix}dotnet-sdk-3.1 Version: %{sdk_rpm_version} Summary: .NET Core 3.1 Software Development Kit Requires: %{?scl_prefix}dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} Requires: %{?scl_prefix}aspnetcore-runtime-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} Requires: %{?scl_prefix}dotnet-apphost-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} Requires: %{?scl_prefix}dotnet-targeting-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} Requires: %{?scl_prefix}aspnetcore-targeting-pack-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} Requires: %{?scl_prefix}netstandard-targeting-pack-2.1%{?_isa} >= %{sdk_rpm_version}-%{release} Requires: %{?scl_prefix}dotnet-templates-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} %description -n %{?scl_prefix}dotnet-sdk-3.1 The .NET Core SDK is a collection of command line applications to create, build, publish and run .NET Core applications. .NET Core is a fast, lightweight and modular platform for creating cross platform applications that work on Linux, Mac and Windows. It particularly focuses on creating console applications, web applications and micro-services. %define dotnet_targeting_pack() %{expand: %package -n %{?scl_prefix}%{1} Version: %{2} Summary: Targeting Pack for %{3} %{4} Requires: %{?scl_prefix}dotnet-host %description -n %{?scl_prefix}%{1} This package provides a targetting pack for %{3} %{4} that allows developers to compile against and target %{3} %{4} applications using the .NET Core SDK. %files -n %{?scl_prefix}%{1} %dir %{_libdir}/dotnet/packs %{_libdir}/dotnet/packs/%{5} } %dotnet_targeting_pack dotnet-apphost-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Host.%{runtime_id} %dotnet_targeting_pack dotnet-targeting-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Ref %dotnet_targeting_pack aspnetcore-targeting-pack-3.1 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 3.1 Microsoft.AspNetCore.App.Ref %dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref %prep %setup -q -n dotnet-v%{sdk_version}-SDK # Fix bad hardcoded path in build sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/dotnet-core-setup.*/src/corehost/common/pal.unix.cpp # Disable warnings sed -i 's|skiptests|skiptests ignorewarnings|' repos/coreclr.proj # This patch was added when building the tarball; we use a better version rm -f patches/corefx/build-corefx-werror.patch pushd src/dotnet-corefx.* %patch100 -p1 popd pushd src/coreclr.* %patch200 -p1 popd pushd src/dotnet-core-setup.* %patch300 -p1 %patch301 -p1 popd pushd src/dotnet-cli.* %patch500 -p1 popd # If CLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE is misisng, add it back grep CLR_CMAKE_USE_SYSTEM_LIBUNWIND repos/coreclr.common.props || \ sed -i 's|\$(BuildArguments) |$(BuildArguments) cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' repos/coreclr.common.props %if %{use_bundled_libunwind} sed -i 's|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=FALSE|' repos/coreclr.common.props %endif cat source-build-info.txt find -iname 'nuget.config' -exec echo {}: \; -exec cat {} \; -exec echo \; %build %{?scl:scl enable %scl llvm-toolset-7.0 - << \EOF} set -xe cat /etc/os-release export CFLAGS="%{dotnet_cflags}" export CXXFLAGS="%{dotnet_cflags}" export LDFLAGS="%{dotnet_ldflags}" export LIBRARY_PATH="%{_libdir}" export LLVM_HOME=/opt/rh/llvm-toolset-7.0/root/usr export CMAKE_PREFIX_PATH="%{_prefix}" VERBOSE=1 ./build.sh \ -- \ /v:n \ /p:LogVerbosity=n \ /p:MinimalConsoleLogOutput=false \ /p:ContinueOnPrebuiltBaselineError=true \ %{?scl:EOF} %install install -dm 0755 %{buildroot}%{_libdir}/dotnet ls artifacts/x64/Release tar xf artifacts/x64/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ # Install managed symbols tar xf artifacts/x64/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ # Fix permissions on files find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; chmod 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/nethost.h chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Ref/3.1.0/data/PackageOverrides.txt chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Ref/3.1.0/data/FrameworkList.xml chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Ref/3.1.0/data/PlatformManifest.txt chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Ref/3.1.0/ref/netcoreapp3.1/*.xml chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/ref/netcoreapp3.1/*.xml chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/data/PackageOverrides.txt chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/data/FrameworkList.xml chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/data/PlatformManifest.txt chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/NETStandard.Library.Ref/2.1.0/data/PackageOverrides.txt chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/NETStandard.Library.Ref/2.1.0/data/FrameworkList.xml chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/netstandard.xml # Add ~/.dotnet/tools to $PATH for all users install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ install %{SOURCE2} %{buildroot}%{_sysconfdir}/profile.d/ install -dm 0755 %{buildroot}/%{_root_datadir}/bash-completion/completions # dynamic completion needs the file to be named the same as the base command install src/dotnet-cli.*/scripts/register-completions.bash %{buildroot}/%{_root_datadir}/bash-completion/completions/dotnet # TODO: the zsh completion script needs to be ported to use #compdef #install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions #install src/dotnet-cli.*/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet install -dm 0755 %{buildroot}%{_bindir} ln -s ../../../../../../%{_libdir}/dotnet/dotnet %{buildroot}%{_bindir}/ install -dm 0755 %{buildroot}%{_mandir}/man1/ find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \; echo "%{_libdir}/dotnet" >> install_location install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet install install_location %{buildroot}%{_sysconfdir}/dotnet/ # Check debug symbols in all elf objects. This is not in %%check # because native binaries are stripped by rpm-build after %%install. # So we need to do this check earlier. echo "Testing build results for debug symbols..." %{SOURCE1} -v %{buildroot}%{_libdir}/dotnet/ %check %{buildroot}%{_libdir}/dotnet/dotnet --info %files -n %{?scl_prefix}dotnet # empty package useful for dependencies %files -n %{?scl_prefix}dotnet-host %dir %{_libdir}/dotnet %{_libdir}/dotnet/dotnet %dir %{_libdir}/dotnet/host %dir %{_libdir}/dotnet/host/fxr %{_bindir}/dotnet %license %{_libdir}/dotnet/LICENSE.txt %license %{_libdir}/dotnet/ThirdPartyNotices.txt %doc %{_mandir}/man1/dotnet*.1.gz %{_sysconfdir}/profile.d/dotnet.sh %{_sysconfdir}/dotnet %dir %{_root_datadir}/bash-completion %dir %{_root_datadir}/bash-completion/completions %{_root_datadir}/bash-completion/completions/dotnet %files -n %{?scl_prefix}dotnet-hostfxr-3.1 %dir %{_libdir}/dotnet/host/fxr %{_libdir}/dotnet/host/fxr/%{host_version} %files -n %{?scl_prefix}dotnet-runtime-3.1 %dir %{_libdir}/dotnet/shared %dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App %{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} %files -n %{?scl_prefix}aspnetcore-runtime-3.1 %dir %{_libdir}/dotnet/shared %dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} %files -n %{?scl_prefix}dotnet-templates-3.1 %dir %{_libdir}/dotnet/templates %{_libdir}/dotnet/templates/%{templates_version} %files -n %{?scl_prefix}dotnet-sdk-3.1 %dir %{_libdir}/dotnet/sdk %{_libdir}/dotnet/sdk/%{sdk_version} %dir %{_libdir}/dotnet/packs %changelog * Wed Dec 16 2020 Omair Majid - 3.1.111-1 - Update to .NET Core SDK 3.1.111 and Runtime 3.1.11 - Resolves: RHBZ#1907626 * Mon Nov 02 2020 Omair Majid - 3.1.110-1 - Update to .NET Core SDK 3.1.110 and Runtime 3.1.10 - Resolves: RHBZ#1893777 * Tue Oct 13 2020 Omair Majid - 3.1.109-2 - Build against the system libunwind - Resolves: RHBZ#1886545 * Fri Oct 09 2020 Omair Majid - 3.1.109-1 - Update to .NET Core SDK 3.1.109 and Runtime 3.1.9 - Resolves: RHBZ#1886545 * Tue Sep 01 2020 Omair Majid - 3.1.108-1 - Update to .NET Core SDK 3.1.108 and Runtime 3.1.8 - Resolves: RHBZ#1874502 * Mon Aug 03 2020 Omair Majid - 3.1.107-1 - Update to .NET Core SDK 3.1.107 and Runtime 3.1.7 - Resolves: RHBZ#1862589 - Resolves: RHBZ#1861112 * Wed Jul 08 2020 Omair Majid - 3.1.106-2 - Fix permissions on files - Resolves: RHBZ#1853771 * Fri Jul 03 2020 Omair Majid - 3.1.106-1 - Update to .NET Core SDK 3.1.106 and Runtime 3.1.6 - Resolves: RHBZ#1853771 * Mon Jun 08 2020 Omair Majid - 3.1.105-1 - Update to .NET Core SDK 3.1.105 and Runtime 3.1.5 - Resolves: RHBZ#1844490 * Wed May 20 2020 Omair Majid - 3.1.104-2 - Update to new tarball for the release - Resolves: RHBZ#1832684 * Thu May 07 2020 Omair Majid - 3.1.104-1 - Update to .NET Core SDK 3.1.104 and Runtime 3.1.4 - Resolves: RHBZ#1832684 * Tue Mar 24 2020 Omair Majid - 3.1.103-1 - Update to .NET Core SDK 3.1.103 and Runtime 3.1.3 - Resolves: RHBZ#1815631 * Fri Mar 06 2020 Omair Majid - 3.1.102-1 - Update to .NET Core Runtime 3.1.2 and SDK 3.1.102 - Resolves: RHBZ#1804451 * Wed Jan 08 2020 Omair Majid - 3.1.101-4 - Another attempt at fixing file permissions - Resolves: RHBZ#1787174 * Mon Jan 06 2020 Omair Majid - 3.1.101-3 - Another attempt at fixing file permissions - Resolves: RHBZ#1787174 * Mon Jan 06 2020 Omair Majid - 3.1.101-2 - Fix some strange file permissions - Resolves: RHBZ#1787174 * Tue Dec 31 2019 Omair Majid - 3.1.101-1 - Update to .NET Core Runtime 3.1.1 and SDK 3.1.101 - Resolves: RHBZ#1787174 * Sat Nov 30 2019 Omair Majid - 3.1.100-1 - Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 - Resolves: RHBZ#1767056 * Wed Nov 20 2019 Omair Majid - 3.1.100-0.2.preview3 - Fix dangling symlink - Resolves: RHBZ#1767056 * Mon Nov 18 2019 Omair Majid - 3.1.100-0.1.preview3 - Update for .NET Core 3.1 - Resolves: RHBZ#1767056 * Mon Sep 30 2019 Omair Majid - 3.0.100-3 - Install bash completion globally - Resolves: RHBZ#1746116 * Sun Sep 29 2019 Omair Majid - 3.0.100-2 - Require rh-dotnet30-libcurl - Resolves: RHBZ#1746116 * Sun Sep 29 2019 Omair Majid - 3.0.100-1 - Update to .NET Core Runtime 3.0.0 and SDK 3.0.100 - Resolves: RHBZ#1746116 * Tue Sep 24 2019 Omair Majid - 3.0.100-0.1.preview9 - Intial package - Resolves: RHBZ#1746116