From 74755fbc91ad52c0e7c49bbb62dea04600568d41 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Dec 05 2019 17:38:10 +0000 Subject: import rh-dotnet31-dotnet-3.1.100-1.el7 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1db89fc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/dotnet-v3.1.100-SDK.tar.gz diff --git a/.rh-dotnet31-dotnet.metadata b/.rh-dotnet31-dotnet.metadata new file mode 100644 index 0000000..7ec4ba3 --- /dev/null +++ b/.rh-dotnet31-dotnet.metadata @@ -0,0 +1 @@ +382652df0b2e7e3a30c3723a221fbcf75a97d9e2 SOURCES/dotnet-v3.1.100-SDK.tar.gz diff --git a/SOURCES/check-debug-symbols.py b/SOURCES/check-debug-symbols.py new file mode 100755 index 0000000..7eb06f9 --- /dev/null +++ b/SOURCES/check-debug-symbols.py @@ -0,0 +1,134 @@ +#!/usr/bin/python2 + +""" +Check debug symbols are present in shared object and can identify +code. + +It starts scanning from a directory and recursively scans all ELF +files found in it for various symbols to ensure all debuginfo is +present and nothing has been stripped. + +Usage: + +./check-debug-symbols /path/of/dir/to/scan/ + + +Example: + +./check-debug-symbols /usr/lib64 +""" + +# This technique was explained to me by Mark Wielaard (mjw). + +import collections +import os +import re +import subprocess +import sys + +ScanResult = collections.namedtuple('ScanResult', + 'file_name debug_info debug_abbrev file_symbols gnu_debuglink') + + +def scan_file(file): + "Scan the provided file and return a ScanResult containing results of the scan." + + # Test for .debug_* sections in the shared object. This is the main test. + # Stripped objects will not contain these. + readelf_S_result = subprocess.check_output(['eu-readelf', '-S', file]) + has_debug_info = any(line for line in readelf_S_result.split('\n') if '] .debug_info' in line) + + has_debug_abbrev = any(line for line in readelf_S_result.split('\n') if '] .debug_abbrev' in line) + + # Test FILE symbols. These will most likely be removed by anyting that + # manipulates symbol tables because it's generally useless. So a nice test + # that nothing has messed with symbols. + def contains_file_symbols(line): + parts = line.split() + if len(parts) < 8: + return False + return \ + parts[2] == '0' and parts[3] == 'FILE' and parts[4] == 'LOCAL' and parts[5] == 'DEFAULT' and \ + parts[6] == 'ABS' and re.match(r'((.*/)?[-_a-zA-Z0-9]+\.(c|cc|cpp|cxx))?', parts[7]) + + readelf_s_result = subprocess.check_output(["eu-readelf", '-s', file]) + has_file_symbols = any(line for line in readelf_s_result.split('\n') if contains_file_symbols(line)) + + # Test that there are no .gnu_debuglink sections pointing to another + # debuginfo file. There shouldn't be any debuginfo files, so the link makes + # no sense either. + has_gnu_debuglink = any(line for line in readelf_s_result.split('\n') if '] .gnu_debuglink' in line) + + return ScanResult(file, has_debug_info, has_debug_abbrev, has_file_symbols, has_gnu_debuglink) + +def is_elf(file): + result = subprocess.check_output(['file', file]) + return re.search('ELF 64-bit LSB (?:executable|shared object)', result) + +def scan_file_if_sensible(file): + if is_elf(file): + # print(file) + return scan_file(file) + return None + +def scan_dir(dir): + results = [] + for root, _, files in os.walk(dir): + for name in files: + result = scan_file_if_sensible(os.path.join(root, name)) + if result: + results.append(result) + return results + +def scan(file): + file = os.path.abspath(file) + if os.path.isdir(file): + return scan_dir(file) + elif os.path.isfile(file): + return scan_file_if_sensible(file) + +def is_bad_result(result): + return not result.debug_info or not result.debug_abbrev or not result.file_symbols or result.gnu_debuglink + +def print_scan_results(results, verbose): + # print(results) + for result in results: + file_name = result.file_name + found_issue = False + if not result.debug_info: + found_issue = True + print('error: missing .debug_info section in ' + file_name) + if not result.debug_abbrev: + found_issue = True + print('error: missing .debug_abbrev section in ' + file_name) + if not result.file_symbols: + found_issue = True + print('error: missing FILE symbols in ' + file_name) + if result.gnu_debuglink: + found_issue = True + print('error: unexpected .gnu_debuglink section in ' + file_name) + if verbose and not found_issue: + print('OK: ', file_name) + +def main(args): + verbose = False + files = [] + for arg in args: + if arg == '--verbose' or arg == '-v': + verbose = True + else: + files.append(arg) + + results = [] + for file in files: + results.extend(scan(file) or []) + + print_scan_results(results, verbose) + + if any(is_bad_result(result) for result in results): + return 1 + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/SOURCES/cli-telemetry-optout.patch b/SOURCES/cli-telemetry-optout.patch new file mode 100644 index 0000000..9b01f13 --- /dev/null +++ b/SOURCES/cli-telemetry-optout.patch @@ -0,0 +1,18 @@ +diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs +index de1ebb9e6..6bbf479de 100644 +--- a/src/dotnet/Program.cs ++++ b/src/dotnet/Program.cs +@@ -28,6 +28,13 @@ public class Program + + public static int Main(string[] args) + { ++ // opt out of telemetry by default if the env var is unset ++ string telemetryValue = Environment.GetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT"); ++ if (String.IsNullOrEmpty(telemetryValue)) ++ { ++ Environment.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1"); ++ } ++ + DebugHelper.HandleDebugSwitch(ref args); + + new MulticoreJitActivator().TryActivateMulticoreJit(); diff --git a/SOURCES/core-setup-do-not-strip.patch b/SOURCES/core-setup-do-not-strip.patch new file mode 100644 index 0000000..2b3a8b3 --- /dev/null +++ b/SOURCES/core-setup-do-not-strip.patch @@ -0,0 +1,58 @@ +--- a/src/settings.cmake ++++ b/src/settings.cmake +@@ -69,55 +69,10 @@ + endif (CMAKE_SYSTEM_NAME STREQUAL Darwin) + endif () + +-function(strip_symbols targetName outputFilename) +- if(CLR_CMAKE_PLATFORM_UNIX) +- if(STRIP_SYMBOLS) +- +- # On the older version of cmake (2.8.12) used on Ubuntu 14.04 the TARGET_FILE +- # generator expression doesn't work correctly returning the wrong path and on +- # the newer cmake versions the LOCATION property isn't supported anymore. +- if(CMAKE_VERSION VERSION_EQUAL 3.0 OR CMAKE_VERSION VERSION_GREATER 3.0) +- set(strip_source_file $) +- else() +- get_property(strip_source_file TARGET ${targetName} PROPERTY LOCATION) +- endif() +- +- if(CMAKE_SYSTEM_NAME STREQUAL Darwin) +- set(strip_destination_file ${strip_source_file}.dwarf) +- +- add_custom_command( +- TARGET ${targetName} +- POST_BUILD +- VERBATIM +- COMMAND ${DSYMUTIL} --flat --minimize ${strip_source_file} +- COMMAND ${STRIP} -u -r ${strip_source_file} +- COMMENT Stripping symbols from ${strip_source_file} into file ${strip_destination_file} +- ) +- else(CMAKE_SYSTEM_NAME STREQUAL Darwin) +- set(strip_destination_file ${strip_source_file}.dbg) +- +- add_custom_command( +- TARGET ${targetName} +- POST_BUILD +- VERBATIM +- COMMAND ${OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} +- COMMAND ${OBJCOPY} --strip-unneeded ${strip_source_file} +- COMMAND ${OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} +- COMMENT Stripping symbols from ${strip_source_file} into file ${strip_destination_file} +- ) +- endif(CMAKE_SYSTEM_NAME STREQUAL Darwin) +- +- set(${outputFilename} ${strip_destination_file} PARENT_SCOPE) +- endif(STRIP_SYMBOLS) +- endif(CLR_CMAKE_PLATFORM_UNIX) +-endfunction() +- + function(install_symbols targetName destination_path) + if(WIN32) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$/${targetName}.pdb DESTINATION ${destination_path}) + else() +- strip_symbols(${targetName} strip_destination_file) +- install(FILES ${strip_destination_file} DESTINATION ${destination_path}) + endif() + endfunction() + diff --git a/SOURCES/core-setup-hardening-flags.patch b/SOURCES/core-setup-hardening-flags.patch new file mode 100644 index 0000000..3f6b91c --- /dev/null +++ b/SOURCES/core-setup-hardening-flags.patch @@ -0,0 +1,11 @@ +diff --git a/src/settings.cmake b/src/settings.cmake +--- a/src/settings.cmake ++++ b/src/settings.cmake +@@ -218,6 +218,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -Bsymbolic -Bsymbolic-functions") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") + add_compile_options(-fstack-protector-strong) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + add_compile_options(-fstack-protector) diff --git a/SOURCES/coreclr-hardening-flags.patch b/SOURCES/coreclr-hardening-flags.patch new file mode 100644 index 0000000..3b45c58 --- /dev/null +++ b/SOURCES/coreclr-hardening-flags.patch @@ -0,0 +1,12 @@ +diff --git a/src/debug/createdump/CMakeLists.txt b/src/debug/createdump/CMakeLists.txt +--- a/src/debug/createdump/CMakeLists.txt ++++ b/src/debug/createdump/CMakeLists.txt +@@ -42,6 +42,8 @@ + + add_dependencies(createdump pal_redefines_file) + ++SET_TARGET_PROPERTIES(createdump PROPERTIES LINK_FLAGS -pie) ++ + target_link_libraries(createdump + createdump_lib + # share the PAL/corguids in the dac module diff --git a/SOURCES/corefx-optflags-support.patch b/SOURCES/corefx-optflags-support.patch new file mode 100644 index 0000000..63f4730 --- /dev/null +++ b/SOURCES/corefx-optflags-support.patch @@ -0,0 +1,40 @@ +diff --git a/src/Native/Unix/CMakeLists.txt b/src/Native/Unix/CMakeLists.txt +index 7d804a1e54..717c2718d7 100644 +--- a/src/Native/Unix/CMakeLists.txt ++++ b/src/Native/Unix/CMakeLists.txt +@@ -25,7 +25,7 @@ add_compile_options(-fPIC) + add_compile_options(-Wthread-safety) + add_compile_options(-Wno-thread-safety-analysis) + endif() +-add_compile_options(-Werror) ++add_compile_options(-Wno-unused-result) + + if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) + set(CLR_CMAKE_PLATFORM_WASM 1) +diff --git a/src/Native/Unix/configure.cmake b/src/Native/Unix/configure.cmake +index f4a30ad6cb..f2db68402a 100644 +--- a/src/Native/Unix/configure.cmake ++++ b/src/Native/Unix/configure.cmake +@@ -27,6 +27,12 @@ else () + message(FATAL_ERROR "Unknown platform. Cannot define PAL_UNIX_NAME, used by RuntimeInformation.") + endif () + ++ ++set (PREVIOUS_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) ++set (CMAKE_CXX_FLAGS "-D_GNU_SOURCE") ++set (PREVIOUS_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) ++set (CMAKE_C_FLAGS "-D_GNU_SOURCE") ++ + # We compile with -Werror, so we need to make sure these code fragments compile without warnings. + # Older CMake versions (3.8) do not assign the result of their tests, causing unused-value errors + # which are not distinguished from the test failing. So no error for that one. +@@ -698,6 +704,9 @@ endif() + + set (CMAKE_REQUIRED_LIBRARIES) + ++set (CMAKE_CXX_FLAGS "${PREVIOUS_CMAKE_CXX_FLAGS}") ++set (CMAKE_C_FLAGS "${PREVIOUS_CMAKE_C_FLAGS}") ++ + check_c_source_compiles( + " + #include diff --git a/SOURCES/dotnet.sh b/SOURCES/dotnet.sh new file mode 100644 index 0000000..2341338 --- /dev/null +++ b/SOURCES/dotnet.sh @@ -0,0 +1,7 @@ + +# Add dotnet tools directory to PATH +export DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" +case "$PATH" in + *"$DOTNET_TOOLS_PATH"* ) true ;; + * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; +esac diff --git a/SPECS/dotnet.spec b/SPECS/dotnet.spec new file mode 100644 index 0000000..fa24e86 --- /dev/null +++ b/SPECS/dotnet.spec @@ -0,0 +1,458 @@ +%{?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.0 +%global runtime_version 3.1.0 +%global aspnetcore_runtime_version 3.1.0 +%global sdk_version 3.1.100 +%global templates_version 3.1.0 + +%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/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 patches/corefx/build-corefx-werror.patch + +pushd src/corefx.* +%patch100 -p1 +popd + +pushd src/coreclr.* +%patch200 -p1 +popd + +pushd src/core-setup.* +%patch300 -p1 +%patch301 -p1 +popd + +pushd src/cli.* +%patch500 -p1 +popd + +# If CLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE is misisng, add it back +grep CLR_CMAKE_USE_SYSTEM_LIBUNWIND repos/coreclr.proj || \ + sed -i 's|\$(BuildArguments) |$(BuildArguments) cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' repos/coreclr.proj + +%if %{use_bundled_libunwind} +sed -i 's|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=FALSE|' repos/coreclr.proj +%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-8.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 bin/x64/Release +tar xf bin/x64/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ + +# Install managed symbols +tar xf bin/x64/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ + -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ + +# Fix executable 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 ugo=rx %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost +chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so +chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost + + +# 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/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/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 +* 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