%bcond_with bootstrap # 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 # LTO triggers a compilation error for a source level issue. Given that LTO should not # change the validity of any given source and the nature of the error (undefined enum), I # suspect a generator program is mis-behaving in some way. This needs further debugging, # until that's done, disable LTO. This has to happen before setting the flags below. %define _lto_cflags %{nil} %global host_version 6.0.11 %global runtime_version 6.0.11 %global aspnetcore_runtime_version %{runtime_version} %global sdk_version 6.0.111 %global sdk_feature_band_version %(echo %{sdk_version} | sed -e 's|[[:digit:]][[:digit:]]$|00|') %global templates_version %{runtime_version} #%%global templates_version %%(echo %%{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }') %global host_rpm_version %{host_version} %global runtime_rpm_version %{runtime_version} %global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} %global sdk_rpm_version %{sdk_version} # upstream can update releases without revving the SDK version so these don't always match %global upstream_tag v%{sdk_version} %global use_bundled_libunwind 1 %ifarch x86_64 %global runtime_arch x64 %endif %global runtime_id %{distsuffix}.%{rosa_release}*-%{runtime_arch} Name: dotnet6.0 Version: %{sdk_rpm_version} Release: 1 Summary: .NET Runtime and SDK Group: Development/Other License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib URL: https://github.com/dotnet/ %if %{with bootstrap} # The source is generated on a Fedora box via: # ./build-dotnet-tarball --bootstrap %%{upstream_tag} Source0: dotnet-%{upstream_tag}-x64-bootstrap.tar.xz %else # The source is generated on a Fedora box via: # ./build-dotnet-tarball %%{upstream_tag} Source0: dotnet-%{upstream_tag}.tar.gz %endif Source10: check-debug-symbols.py Source11: dotnet.sh.in Patch0: runtime-ROSA-rid.patch # Fix using lld on Fedora Patch100: runtime-arm64-lld-fix.patch # Mono still has a dependency on (now unbuildable) ILStrip which was removed from CoreCLR: https://github.com/dotnet/runtime/pull/60315 Patch101: runtime-mono-remove-ilstrip.patch # https://github.com/dotnet/runtime/pull/66594 Patch102: runtime-66594-s390x-debuginfo.patch # https://github.com/dotnet/runtime/pull/73065 Patch103: runtime-clang15-support.patch # https://github.com/dotnet/runtime/pull/60675 Patch104: runtime-strerror.patch # Fix mono-specific runtime crashes running msbuild. CoreCLR does not # load types that are not actually used/invoked at runtime, while mono # does. System.Configuration and System.Security are missing in # source-build builds, which breaks msbuild. Patch1000: msbuild-no-systemsecurity.patch Patch1001: msbuild-no-systemconfiguration.patch # Disable telemetry by default; make it opt-in Patch1500: sdk-telemetry-optout.patch # https://github.com/dotnet/sdk/pull/22373 Patch1501: sdk-22373-portablerid.patch ExclusiveArch: x86_64 BuildRequires: clang BuildRequires: cmake BuildRequires: coreutils BuildRequires: curl %if %{without bootstrap} BuildRequires: dotnet-sdk-6.0 BuildRequires: dotnet-sdk-6.0-source-built-artifacts %endif BuildRequires: findutils BuildRequires: git BuildRequires: locales-en BuildRequires: hostname BuildRequires: krb5-devel BuildRequires: pkgconfig(libcurl) BuildRequires: icu-devel %if ! %{use_bundled_libunwind} BuildRequires: libunwind-devel %endif BuildRequires: %{_lib}lldb-devel BuildRequires: llvm BuildRequires: lttng-ust-devel BuildRequires: make BuildRequires: openssl-devel BuildRequires: python3 BuildRequires: systemtap-sdt-devel BuildRequires: tar BuildRequires: zlib-devel BuildRequires: which %description .NET 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 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 dotnet Version: %{sdk_rpm_version} Summary: .NET CLI tools and runtime Requires: dotnet-sdk-6.0 >= %{sdk_rpm_version}-%{release} %description -n dotnet .NET 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 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 dotnet-host Version: %{host_rpm_version} Summary: .NET command line launcher %description -n dotnet-host The .NET host is a command line program that runs a standalone .NET application or launches the SDK. .NET 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 dotnet-hostfxr-6.0 Version: %{host_rpm_version} Summary: .NET 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 Requires: dotnet-host >= %{host_rpm_version}-%{release} %description -n dotnet-hostfxr-6.0 The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use. .NET 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 dotnet-runtime-6.0 Version: %{runtime_rpm_version} Summary: NET 6.0 runtime Requires: dotnet-hostfxr-6.0 >= %{host_rpm_version}-%{release} # libicu is dlopen()ed Requires: icu-devel # See src/runtime/src/libraries/Native/AnyOS/brotli-version.txt Provides: bundled(libbrotli) = 1.0.9 %if %{use_bundled_libunwind} # See src/runtime/src/coreclr/pal/src/libunwind/libunwind-version.txt Provides: bundled(libunwind) = 1.5.rc1.28.g9165d2a1 %endif %description -n dotnet-runtime-6.0 The .NET runtime contains everything needed to run .NET applications. It includes a high performance Virtual Machine as well as the framework libraries used by .NET applications. .NET 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 aspnetcore-runtime-6.0 Version: %{aspnetcore_runtime_rpm_version} Summary: ASP.NET Core 6.0 runtime Requires: dotnet-runtime-6.0 >= %{runtime_rpm_version}-%{release} %description -n aspnetcore-runtime-6.0 The ASP.NET Core runtime contains everything needed to run .NET web applications. It includes a high performance Virtual Machine as well as the framework libraries used by .NET 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 dotnet-templates-6.0 Version: %{sdk_rpm_version} Summary: .NET 6.0 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 Requires: dotnet-host >= %{host_rpm_version}-%{release} %description -n dotnet-templates-6.0 This package contains templates used by the .NET SDK. .NET 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 dotnet-sdk-6.0 Version: %{sdk_rpm_version} Summary: .NET 6.0 Software Development Kit Provides: bundled(js-jquery) Requires: dotnet-runtime-6.0 >= %{runtime_rpm_version}-%{release} Requires: aspnetcore-runtime-6.0 >= %{aspnetcore_runtime_rpm_version}-%{release} Requires: dotnet-apphost-pack-6.0 >= %{runtime_rpm_version}-%{release} Requires: dotnet-targeting-pack-6.0 >= %{runtime_rpm_version}-%{release} Requires: aspnetcore-targeting-pack-6.0 >= %{aspnetcore_runtime_rpm_version}-%{release} Requires: netstandard-targeting-pack-2.1 >= %{sdk_rpm_version}-%{release} Requires: dotnet-templates-6.0 >= %{sdk_rpm_version}-%{release} %description -n dotnet-sdk-6.0 The .NET SDK is a collection of command line applications to create, build, publish and run .NET applications. .NET 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. %global dotnet_targeting_pack() %{expand: %package -n %{1} Version: %{2} Summary: Targeting Pack for %{3} %{4} Requires: dotnet-host %description -n %{1} This package provides a targeting pack for %{3} %{4} that allows developers to compile against and target %{3} %{4} applications using the .NET SDK. %files -n %{1} %dir %{_libdir}/dotnet/packs %{_libdir}/dotnet/packs/%{5} } %dotnet_targeting_pack dotnet-apphost-pack-6.0 %{runtime_rpm_version} Microsoft.NETCore.App 6.0 Microsoft.NETCore.App.Host.%{runtime_id} %dotnet_targeting_pack dotnet-targeting-pack-6.0 %{runtime_rpm_version} Microsoft.NETCore.App 6.0 Microsoft.NETCore.App.Ref %dotnet_targeting_pack aspnetcore-targeting-pack-6.0 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 6.0 Microsoft.AspNetCore.App.Ref %dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref %package -n dotnet-sdk-6.0-source-built-artifacts Version: %{sdk_rpm_version} Summary: Internal package for building .NET 6.0 Software Development Kit %description -n dotnet-sdk-6.0-source-built-artifacts The .NET source-built archive is a collection of packages needed to build the .NET SDK itself. These are not meant for general use. %prep %if %{without bootstrap} %setup -q -n dotnet-%{upstream_tag} %else %setup -q -T -b 0 -n dotnet-%{upstream_tag}-x64-bootstrap %endif %if %{without bootstrap} # Remove all prebuilts find -iname '*.dll' -type f -delete find -iname '*.so' -type f -delete find -iname '*.tar.gz' -type f -delete find -iname '*.nupkg' -type f -delete find -iname '*.zip' -type f -delete rm -rf .dotnet/ rm -rf packages/source-built mkdir -p packages/archive ln -s %{_libdir}/dotnet/source-built-artifacts/Private.SourceBuilt.Artifacts.*.tar.gz packages/archive/ %endif # Fix bad hardcoded path in build sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/runtime/src/native/corehost/hostmisc/pal.unix.cpp pushd src/runtime %patch0 -p3 %patch100 -p1 %patch101 -p1 %patch102 -p1 %patch103 -p1 %patch104 -p1 popd pushd src/sdk %patch1500 -p1 %patch1501 -p1 popd pushd src/installer popd %if ! %{use_bundled_libunwind} sed -i -E 's|( /p:BuildDebPackage=false)|\1 --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' src/runtime/eng/SourceBuild.props %endif %build cat /etc/os-release %if %{without bootstrap} # We need to create a copy because we will mutate this cp -a %{_libdir}/dotnet previously-built-dotnet find previously-built-dotnet %endif # Filter flags not supported by clang %global dotnet_cflags %(echo %optflags | sed -re 's/-specs=[^ ]*//g') %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') export CFLAGS="%{dotnet_cflags}" export CXXFLAGS="%{dotnet_cflags}" export LDFLAGS="%{dotnet_ldflags}" # -fstack-clash-protection breaks CoreCLR CFLAGS=$(echo $CFLAGS | sed -e 's/-fstack-clash-protection//' ) CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/-fstack-clash-protection//' ) export EXTRA_CFLAGS="$CFLAGS" export EXTRA_CXXFLAGS="$CXXFLAGS" export EXTRA_LDFLAGS="$LDFLAGS" # Disable tracing, which is incompatible with certain versions of # lttng See https://github.com/dotnet/runtime/issues/57784. The # suggested compile-time change doesn't work, unfortunately. export COMPlus_LTTng=0 # OpenSSL 3.0 in RHEL 9 has disabled SHA1, used by .NET for strong # name signing. See https://github.com/dotnet/runtime/issues/67304 # https://gitlab.com/redhat/centos-stream/rpms/openssl/-/commit/78fb78d30755ae18fdaef28ef392f4e67c662ff6 export OPENSSL_ENABLE_SHA1_SIGNATURES=1 %if %{with bootstrap} rm -fr .dotnet ./prep.sh --bootstrap %endif VERBOSE=1 ./build.sh \ %if %{without bootstrap} --with-sdk previously-built-dotnet \ %endif -- \ echo \ /v:n \ /p:SkipPortableRuntimeBuild=true \ /p:LogVerbosity=n \ /p:MinimalConsoleLogOutput=false \ /p:ContinueOnPrebuiltBaselineError=true \ %{nil} sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE11} > dotnet.sh %install install -dm 0755 %{buildroot}%{_libdir}/dotnet ls artifacts/%{runtime_arch}/Release tar xf artifacts/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ # See https://github.com/dotnet/source-build/issues/2579 find %{buildroot}%{_libdir}/dotnet/ -type f -name 'testhost.x86' -delete find %{buildroot}%{_libdir}/dotnet/ -type f -name 'vstest.console' -delete # Install managed symbols: disabled because they don't contain sources # but point to the paths the sources would have been at in the build # servers. The end user experience is pretty bad atm. # tar xf artifacts/%%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%%{runtime_id}-%%{runtime_version}.tar.gz \ # -C %%{buildroot}/%%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%%{runtime_version}/ # Fix executable permissions on files find %{buildroot}%{_libdir}/dotnet/ -type f -name 'apphost' -exec chmod +x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name 'singlefilehost' -exec chmod +x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name 'lib*so' -exec chmod +x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.a' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.h' -exec chmod 0644 {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.json' -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 {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.txt' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.xml' -exec chmod -x {} \; install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions # dynamic completion needs the file to be named the same as the base command install src/sdk/scripts/register-completions.bash %{buildroot}/%{_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/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/ \; install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet echo "%{_libdir}/dotnet" >> install_location install install_location %{buildroot}%{_sysconfdir}/dotnet/ echo "%{_libdir}/dotnet" >> install_location_%{runtime_arch} install install_location_%{runtime_arch} %{buildroot}%{_sysconfdir}/dotnet/ install -dm 0755 %{buildroot}%{_libdir}/dotnet/source-built-artifacts install -m 0644 artifacts/%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %{buildroot}/%{_libdir}/dotnet/source-built-artifacts/ # Quick and dirty check for https://github.com/dotnet/source-build/issues/2731 test -f %{buildroot}%{_libdir}/dotnet/sdk/%{sdk_version}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props # 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..." %{__python3} %{SOURCE10} -v %{buildroot}%{_libdir}/dotnet/ %check %{buildroot}%{_libdir}/dotnet/dotnet --info %{buildroot}%{_libdir}/dotnet/dotnet --version %files -n dotnet # empty package useful for dependencies %files -n 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}/man?/dotnet*.?.* %config(noreplace) %{_sysconfdir}/profile.d/dotnet.sh %config(noreplace) %{_sysconfdir}/dotnet %dir %{_datadir}/bash-completion %dir %{_datadir}/bash-completion/completions %{_datadir}/bash-completion/completions/dotnet %files -n dotnet-hostfxr-6.0 %dir %{_libdir}/dotnet/host/fxr %{_libdir}/dotnet/host/fxr/%{host_version} %files -n dotnet-runtime-6.0 %dir %{_libdir}/dotnet/shared %dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App %{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} %files -n aspnetcore-runtime-6.0 %dir %{_libdir}/dotnet/shared %dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} %files -n dotnet-templates-6.0 %dir %{_libdir}/dotnet/templates %{_libdir}/dotnet/templates/%{templates_version} %files -n dotnet-sdk-6.0 %dir %{_libdir}/dotnet/sdk %{_libdir}/dotnet/sdk/%{sdk_version} %dir %{_libdir}/dotnet/sdk-manifests %{_libdir}/dotnet/sdk-manifests/%{sdk_feature_band_version} %{_libdir}/dotnet/metadata %dir %{_libdir}/dotnet/packs %files -n dotnet-sdk-6.0-source-built-artifacts %dir %{_libdir}/dotnet %{_libdir}/dotnet/source-built-artifacts