From a4556b66b5dc39c5808e6391d766605c8b75cc69 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 18 May 2021 13:13:42 -0400 Subject: [PATCH] import dotnet3.1-3.1.114-2.el8_4 --- .dotnet3.1.metadata | 1 + .gitignore | 1 + SOURCES/check-debug-symbols.py | 136 ++++ SOURCES/cli-telemetry-optout.patch | 18 + SOURCES/core-setup-do-not-strip.patch | 58 ++ SOURCES/core-setup-hardening-flags.patch | 23 + .../coreclr-27048-sysctl-deprecation.patch | 42 + SOURCES/coreclr-hardening-flags.patch | 22 + SOURCES/coreclr-libunwind-fno-common.patch | 402 ++++++++++ .../corefx-39633-cgroupv2-mountpoints.patch | 46 ++ SOURCES/corefx-hardening-flags.patch | 11 + SOURCES/corefx-optflags-support.patch | 40 + SOURCES/dotnet.sh.in | 14 + SPECS/dotnet3.1.spec | 752 ++++++++++++++++++ 14 files changed, 1566 insertions(+) create mode 100644 .dotnet3.1.metadata create mode 100644 .gitignore create mode 100755 SOURCES/check-debug-symbols.py create mode 100644 SOURCES/cli-telemetry-optout.patch create mode 100644 SOURCES/core-setup-do-not-strip.patch create mode 100644 SOURCES/core-setup-hardening-flags.patch create mode 100644 SOURCES/coreclr-27048-sysctl-deprecation.patch create mode 100644 SOURCES/coreclr-hardening-flags.patch create mode 100644 SOURCES/coreclr-libunwind-fno-common.patch create mode 100644 SOURCES/corefx-39633-cgroupv2-mountpoints.patch create mode 100644 SOURCES/corefx-hardening-flags.patch create mode 100644 SOURCES/corefx-optflags-support.patch create mode 100644 SOURCES/dotnet.sh.in create mode 100644 SPECS/dotnet3.1.spec diff --git a/.dotnet3.1.metadata b/.dotnet3.1.metadata new file mode 100644 index 0000000..a687178 --- /dev/null +++ b/.dotnet3.1.metadata @@ -0,0 +1 @@ +888025430ffdfffda636f91021430537041147b6 SOURCES/dotnet-v3.1.114-SDK.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46b01af --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/dotnet-v3.1.114-SDK.tar.gz diff --git a/SOURCES/check-debug-symbols.py b/SOURCES/check-debug-symbols.py new file mode 100755 index 0000000..be26d87 --- /dev/null +++ b/SOURCES/check-debug-symbols.py @@ -0,0 +1,136 @@ +#!/usr/bin/python3 + +""" +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.run(['eu-readelf', '-S', file], + stdout=subprocess.PIPE, encoding='utf-8', check=True) + has_debug_info = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_info' in line) + + has_debug_abbrev = any(line for line in readelf_S_result.stdout.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.run(["eu-readelf", '-s', file], + stdout=subprocess.PIPE, encoding='utf-8', check=True) + has_file_symbols = any(line for line in readelf_s_result.stdout.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.stdout.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.run(['file', file], stdout=subprocess.PIPE, encoding='utf-8', check=True) + return re.search('ELF 64-bit LSB (?:executable|shared object)', result.stdout) + +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)) + + 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..5eb3848 --- /dev/null +++ b/SOURCES/core-setup-hardening-flags.patch @@ -0,0 +1,23 @@ +diff --git a/src/settings.cmake b/src/settings.cmake +--- a/src/settings.cmake ++++ b/src/settings.cmake +@@ -218,6 +218,8 @@ 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_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pie") + 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) +--- a/src/corehost/cli/apphost/CMakeLists.txt ++++ b/src/corehost/cli/apphost/CMakeLists.txt +@@ -50,6 +50,8 @@ + + add_definitions(-DFEATURE_APPHOST=1) + ++set_target_properties("apphost" PROPERTIES LINK_FLAGS -pie) ++ + # Disable manifest generation into the file .exe on Windows + if(WIN32) + set_property(TARGET ${PROJECT_NAME} PROPERTY diff --git a/SOURCES/coreclr-27048-sysctl-deprecation.patch b/SOURCES/coreclr-27048-sysctl-deprecation.patch new file mode 100644 index 0000000..2591908 --- /dev/null +++ b/SOURCES/coreclr-27048-sysctl-deprecation.patch @@ -0,0 +1,42 @@ +From 3dd725eca0079e2b49821dfeb0ec1cb166cc7414 Mon Sep 17 00:00:00 2001 +From: Omair Majid +Date: Fri, 4 Oct 2019 19:29:53 -0400 +Subject: [PATCH] Handle glibc sys/sysctl.h deprecation + +glibc has deprecated sys/sysctl.h: + + In file included from /coreclr/src/pal/src/misc/sysinfo.cpp:32: + /usr/include/sys/sysctl.h:21:2: error: "The header is deprecated and will be removed." [-Werror,-W#warnings] + #warning "The header is deprecated and will be removed." + ^ + 1 error generated. + +Fix that by preferring sysconf and only including sys/sysctl.h if +HAVE_SYSCONF is not true. This mirrors the order of the implementation +code in this file (sysinfo.cpp) which checks for HAVE_SYSCONF +before HAVE_SYSCTL. + +Fixes #27008 +--- + src/pal/src/misc/sysinfo.cpp | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/pal/src/misc/sysinfo.cpp b/src/pal/src/misc/sysinfo.cpp +index e1c949e38d53..50ccf3a75e16 100644 +--- a/src/pal/src/misc/sysinfo.cpp ++++ b/src/pal/src/misc/sysinfo.cpp +@@ -28,9 +28,12 @@ Revision History: + #define __STDC_FORMAT_MACROS + #include + #include +-#if HAVE_SYSCTL ++ ++#if HAVE_SYSCONF ++// already included above ++#elif HAVE_SYSCTL + #include +-#elif !HAVE_SYSCONF ++#else + #error Either sysctl or sysconf is required for GetSystemInfo. + #endif + diff --git a/SOURCES/coreclr-hardening-flags.patch b/SOURCES/coreclr-hardening-flags.patch new file mode 100644 index 0000000..bd9a4ba --- /dev/null +++ b/SOURCES/coreclr-hardening-flags.patch @@ -0,0 +1,22 @@ +--- a/src/debug/createdump/CMakeLists.txt ++++ b/src/debug/createdump/CMakeLists.txt +@@ -38,6 +38,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 +--- a/src/corefx/System.Globalization.Native/CMakeLists.txt ++++ b/src/corefx/System.Globalization.Native/CMakeLists.txt +@@ -71,6 +71,8 @@ + set_target_properties(System.Globalization.Native_Static PROPERTIES PREFIX "") + set_target_properties(System.Globalization.Native_Static PROPERTIES OUTPUT_NAME System.Globalization.Native) + ++set_target_properties(System.Globalization.Native PROPERTIES LINK_FLAGS -pie) ++ + if(NOT CLR_CMAKE_PLATFORM_DARWIN) + if (NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD AND NOT CMAKE_SYSTEM_NAME STREQUAL NetBSD) + target_link_libraries(System.Globalization.Native diff --git a/SOURCES/coreclr-libunwind-fno-common.patch b/SOURCES/coreclr-libunwind-fno-common.patch new file mode 100644 index 0000000..5a1d407 --- /dev/null +++ b/SOURCES/coreclr-libunwind-fno-common.patch @@ -0,0 +1,402 @@ +From 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e Mon Sep 17 00:00:00 2001 +From: Yichao Yu +Date: Tue, 31 Mar 2020 00:43:32 -0400 +Subject: [PATCH] Fix compilation with -fno-common. + +Making all other archs consistent with IA64 which should not have this problem. +Also move the FIXME to the correct place. + +Also add some minimum comments about this... +--- + src/aarch64/Ginit.c | 15 +++++++-------- + src/arm/Ginit.c | 15 +++++++-------- + src/coredump/_UPT_get_dyn_info_list_addr.c | 5 +++++ + src/hppa/Ginit.c | 15 +++++++-------- + src/ia64/Ginit.c | 1 + + src/mi/Gfind_dynamic_proc_info.c | 1 + + src/mips/Ginit.c | 15 +++++++-------- + src/ppc32/Ginit.c | 11 +++++++---- + src/ppc64/Ginit.c | 11 +++++++---- + src/ptrace/_UPT_get_dyn_info_list_addr.c | 5 +++++ + src/s390x/Ginit.c | 15 +++++++-------- + src/sh/Ginit.c | 15 +++++++-------- + src/tilegx/Ginit.c | 15 +++++++-------- + src/x86/Ginit.c | 15 +++++++-------- + src/x86_64/Ginit.c | 15 +++++++-------- + 15 files changed, 89 insertions(+), 80 deletions(-) + +diff --git a/src/pal/src/libunwind/src/aarch64/Ginit.c b/src/pal/src/libunwind/src/aarch64/Ginit.c +index dec235c82..35389762f 100644 +--- a/src/pal/src/libunwind/src/aarch64/Ginit.c ++++ b/src/pal/src/libunwind/src/aarch64/Ginit.c +@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -78,7 +71,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/arm/Ginit.c b/ssrc/pal/src/libunwind/src/arm/Ginit.c +index 2720d063a..0bac0d72d 100644 +--- a/src/pal/src/libunwind/src/arm/Ginit.c ++++ b/src/pal/src/libunwind/src/arm/Ginit.c +@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c +index 0d1190556..739ed0569 100644 +--- a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c ++++ b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c +@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + + #else + ++/* XXX fix me: there is currently no way to locate the dyn-info list ++ by a remote unwinder. On ia64, this is done via a special ++ unwind-table entry. Perhaps something similar can be done with ++ DWARF2 unwind info. */ ++ + static inline int + get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + int *countp) +diff --git a/src/pal/src/libunwind/src/hppa/Ginit.c b/src/pal/src/libunwind/src/hppa/Ginit.c +index 461e4b93d..265455a68 100644 +--- a/src/pal/src/libunwind/src/hppa/Ginit.c ++++ b/src/pal/src/libunwind/src/hppa/Ginit.c +@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -81,7 +74,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/ia64/Ginit.c b/src/pal/src/libunwind/src/ia64/Ginit.c +index b09a2ad57..8601bb3ca 100644 +--- a/src/pal/src/libunwind/src/ia64/Ginit.c ++++ b/src/pal/src/libunwind/src/ia64/Ginit.c +@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; + #endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } +diff --git a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c +index 98d350128..2e7c62e5e 100644 +--- a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c ++++ b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c +@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, + return -UNW_ENOINFO; + #endif + ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr (); + for (di = list->first; di; di = di->next) + if (ip >= di->start_ip && ip < di->end_ip) +diff --git a/src/pal/src/libunwind/src/mips/Ginit.c b/src/pal/src/libunwind/src/mips/Ginit.c +index 3df170c75..bf7a8f5a8 100644 +--- a/src/pal/src/libunwind/src/mips/Ginit.c ++++ b/src/pal/src/libunwind/src/mips/Ginit.c +@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -86,7 +79,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/ppc32/Ginit.c b/src/pal/src/libunwind/src/ppc32/Ginit.c +index ba302448a..7b4545580 100644 +--- a/src/pal/src/libunwind/src/ppc32/Ginit.c ++++ b/src/pal/src/libunwind/src/ppc32/Ginit.c +@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -104,7 +101,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/ppc64/Ginit.c b/src/pal/src/libunwind/src/ppc64/Ginit.c +index 4c88cd6e7..7bfb395a7 100644 +--- a/src/pal/src/libunwind/src/ppc64/Ginit.c ++++ b/src/pal/src/libunwind/src/ppc64/Ginit.c +@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -108,7 +105,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c +index cc5ed0441..16671d453 100644 +--- a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c ++++ b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c +@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + + #else + ++/* XXX fix me: there is currently no way to locate the dyn-info list ++ by a remote unwinder. On ia64, this is done via a special ++ unwind-table entry. Perhaps something similar can be done with ++ DWARF2 unwind info. */ ++ + static inline int + get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + int *countp) +diff --git a/src/pal/src/libunwind/src/sh/Ginit.c b/src/pal/src/libunwind/src/sh/Ginit.c +index 52988a721..9fe96d2bd 100644 +--- a/src/pal/src/libunwind/src/sh/Ginit.c ++++ b/src/pal/src/libunwind/src/sh/Ginit.c +@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -75,7 +68,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/tilegx/Ginit.c b/src/pal/src/libunwind/src/tilegx/Ginit.c +index 7564a558b..925e64132 100644 +--- a/src/pal/src/libunwind/src/tilegx/Ginit.c ++++ b/src/pal/src/libunwind/src/tilegx/Ginit.c +@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -81,7 +74,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/x86/Ginit.c b/src/pal/src/libunwind/src/x86/Ginit.c +index f6b8dc27d..3cec74a21 100644 +--- a/src/pal/src/libunwind/src/x86/Ginit.c ++++ b/src/pal/src/libunwind/src/x86/Ginit.c +@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) + + # endif /* UNW_LOCAL_ONLY */ + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -71,7 +64,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + +diff --git a/src/pal/src/libunwind/src/x86_64/Ginit.c b/src/pal/src/libunwind/src/x86_64/Ginit.c +index a865d3385..fd8d418b1 100644 +--- a/src/pal/src/libunwind/src/x86_64/Ginit.c ++++ b/src/pal/src/libunwind/src/x86_64/Ginit.c +@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space; + + unw_addr_space_t unw_local_addr_space = &local_addr_space; + +-HIDDEN unw_dyn_info_list_t _U_dyn_info_list; +- +-/* XXX fix me: there is currently no way to locate the dyn-info list +- by a remote unwinder. On ia64, this is done via a special +- unwind-table entry. Perhaps something similar can be done with +- DWARF2 unwind info. */ +- + static void + put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) + { +@@ -66,7 +59,13 @@ static int + get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, + void *arg) + { +- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++#ifndef UNW_LOCAL_ONLY ++# pragma weak _U_dyn_info_list_addr ++ if (!_U_dyn_info_list_addr) ++ return -UNW_ENOINFO; ++#endif ++ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. ++ *dyn_info_list_addr = _U_dyn_info_list_addr (); + return 0; + } + diff --git a/SOURCES/corefx-39633-cgroupv2-mountpoints.patch b/SOURCES/corefx-39633-cgroupv2-mountpoints.patch new file mode 100644 index 0000000..34fbecb --- /dev/null +++ b/SOURCES/corefx-39633-cgroupv2-mountpoints.patch @@ -0,0 +1,46 @@ +From 1864630f762160e1cb439362cc0577471624192a Mon Sep 17 00:00:00 2001 +From: Omair Majid +Date: Fri, 19 Jul 2019 19:18:51 -0400 +Subject: [PATCH] Fix up cgroup2fs in Interop.MountPoints.FormatInfo + +`stat -fc %T /sys/fs/cgroup` calls this file system `cgroup2fs` + +Add the cgroup2fs file system magic number. Available from: + + - https://www.kernel.org/doc/Documentation/cgroup-v2.txt + - man 2 statfs + +Move cgroup2fs next to cgroupfs in the drive type list, since it is also +DriveType.Ram. +--- + .../Unix/System.Native/Interop.MountPoints.FormatInfo.cs | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs +index af38a2285ba2..4240bd4853ab 100644 +--- a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs ++++ b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs +@@ -47,6 +47,7 @@ internal enum UnixFileSystemTypes : long + btrfs = 0x9123683E, + ceph = 0x00C36400, + cgroupfs = 0x0027E0EB, ++ cgroup2fs = 0x63677270, + cifs = 0xFF534D42, + coda = 0x73757245, + coherent = 0x012FF7B7, +@@ -231,7 +232,6 @@ private static DriveType GetDriveType(string fileSystemName) + case "bpf_fs": + case "btrfs": + case "btrfs_test": +- case "cgroup2fs": + case "coh": + case "daxfs": + case "drvfs": +@@ -384,6 +384,7 @@ private static DriveType GetDriveType(string fileSystemName) + case "binfmt_misc": + case "cgroup": + case "cgroupfs": ++ case "cgroup2fs": + case "configfs": + case "cramfs": + case "cramfs-wend": diff --git a/SOURCES/corefx-hardening-flags.patch b/SOURCES/corefx-hardening-flags.patch new file mode 100644 index 0000000..b1588e2 --- /dev/null +++ b/SOURCES/corefx-hardening-flags.patch @@ -0,0 +1,11 @@ +--- a/src/Native/Unix/System.Native/CMakeLists.txt ++++ b/src/Native/Unix/System.Native/CMakeLists.txt +@@ -48,6 +48,8 @@ + set_target_properties(System.Native-Static PROPERTIES PREFIX "") + set_target_properties(System.Native-Static PROPERTIES OUTPUT_NAME System.Native CLEAN_DIRECT_OUTPUT 1) + ++set_target_properties(System.Native PROPERTIES LINK_FLAGS -pie) ++ + if (CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT CLR_CMAKE_PLATFORM_ANDROID) + target_link_libraries(System.Native rt) + endif () 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.in b/SOURCES/dotnet.sh.in new file mode 100644 index 0000000..65b92a0 --- /dev/null +++ b/SOURCES/dotnet.sh.in @@ -0,0 +1,14 @@ + +# Set location for AppHost lookup +[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=@LIBDIR@/dotnet + +# Add dotnet tools directory to PATH +DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" +case "$PATH" in + *"$DOTNET_TOOLS_PATH"* ) true ;; + * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; +esac + +# Extract self-contained executables under HOME +# to avoid multi-user issues from using the default '/var/tmp'. +[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/SPECS/dotnet3.1.spec b/SPECS/dotnet3.1.spec new file mode 100644 index 0000000..e79189c --- /dev/null +++ b/SPECS/dotnet3.1.spec @@ -0,0 +1,752 @@ +# 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 && ! 0%{?rhel} +# 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.14 +%global runtime_version 3.1.14 +%global aspnetcore_runtime_version %{runtime_version} +%global sdk_version 3.1.114 +%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} + +%if 0%{?fedora} || 0%{?rhel} < 8 +%global use_bundled_libunwind 0 +%else +%global use_bundled_libunwind 1 +%endif + +%ifarch x86_64 +%global runtime_arch x64 +%endif +%ifarch aarch64 +%global runtime_arch arm64 +%endif + +%if 0%{?fedora} +%global runtime_id fedora.%{fedora}-%{runtime_arch} +%else +%if 0%{?centos} +%global runtime_id centos.%{centos}-%{runtime_arch} +%else +%global runtime_id rhel.%{rhel}-%{runtime_arch} +%endif +%endif + +Name: dotnet3.1 +Version: %{sdk_rpm_version} +Release: 2%{?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: dotnet-v%%{sdk_version}-SDK-rhel.8-arm64.tar.gz + +Source100: check-debug-symbols.py +Source101: dotnet.sh.in + +Patch100: corefx-optflags-support.patch +Patch103: corefx-39633-cgroupv2-mountpoints.patch +Patch104: corefx-hardening-flags.patch + +Patch200: coreclr-27048-sysctl-deprecation.patch +Patch201: coreclr-hardening-flags.patch +Patch202: coreclr-libunwind-fno-common.patch + +Patch300: core-setup-do-not-strip.patch +Patch301: core-setup-hardening-flags.patch + +Patch500: cli-telemetry-optout.patch + +ExclusiveArch: x86_64 + +BuildRequires: clang +BuildRequires: cmake +BuildRequires: coreutils +BuildRequires: git +%if 0%{?fedora} || 0%{?rhel} > 7 +BuildRequires: glibc-langpack-en +%endif +BuildRequires: hostname +BuildRequires: krb5-devel +BuildRequires: libcurl-devel +BuildRequires: libicu-devel +%if ! %{use_bundled_libunwind} +BuildRequires: libunwind-devel +%endif +BuildRequires: lldb-devel +BuildRequires: llvm +BuildRequires: lttng-ust-devel +BuildRequires: openssl-devel +BuildRequires: python3 +BuildRequires: tar +BuildRequires: zlib-devel + +%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 dotnet + +Version: %{sdk_rpm_version} +Summary: .NET Core CLI tools and runtime + +Requires: dotnet-sdk-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} + +%description -n dotnet +.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 dotnet-host + +Version: %{host_rpm_version} +Summary: .NET command line launcher + +%description -n 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 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: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} + +%description -n 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 dotnet-runtime-3.1 + +Version: %{runtime_rpm_version} +Summary: NET Core 3.1 runtime + +Requires: dotnet-hostfxr-3.1%{?_isa} >= %{host_rpm_version}-%{release} + +# libicu is dlopen()ed +Requires: libicu + +%if %{use_bundled_libunwind} +Provides: bundled(libunwind) = 1.3 +%endif + +%description -n 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 aspnetcore-runtime-3.1 + +Version: %{aspnetcore_runtime_rpm_version} +Summary: ASP.NET Core 3.1 runtime + +Requires: dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} + +%description -n 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 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: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} + +%description -n 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 dotnet-sdk-3.1 + +Version: %{sdk_rpm_version} +Summary: .NET Core 3.1 Software Development Kit + +Requires: dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-runtime-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} + +Requires: dotnet-apphost-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: dotnet-targeting-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-targeting-pack-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} +Requires: netstandard-targeting-pack-2.1%{?_isa} >= %{sdk_rpm_version}-%{release} + +Requires: dotnet-templates-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} + +%description -n 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 %{1} + +Version: %{2} +Summary: Targeting Pack for %{3} %{4} + +Requires: dotnet-host + +%description -n %{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 %{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 +%ifarch x86_64 +%setup T -b0 -q -n dotnet-v%{sdk_version}-SDK +%endif +%ifarch aarch64 +%setup T -b1 -q -n dotnet-v%{sdk_version}-SDK-rhel.8-arm64 +%endif + +# 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.common.props + +pushd src/dotnet-corefx.* +%patch100 -p1 +%patch103 -p1 +%patch104 -p1 +popd + +pushd src/coreclr.* +%patch200 -p1 +%patch201 -p1 +%patch202 -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 +cat /etc/os-release + +export CFLAGS="%{dotnet_cflags}" +export CXXFLAGS="%{dotnet_cflags}" +export LDFLAGS="%{dotnet_ldflags}" + +VERBOSE=1 ./build.sh \ + -- \ + /v:n \ + /p:LogVerbosity=n \ + /p:MinimalConsoleLogOutput=false \ + /p:ContinueOnPrebuiltBaselineError=true \ + + +sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE101} > 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/ + +# Install managed symbols +tar xf artifacts/%{runtime_arch}/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 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost +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/PackageOverrides.txt +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/data/PlatformManifest.txt +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.10/ref/netcoreapp3.1/*.xml +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/FrameworkList.xml +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/PlatformManifest.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/data/PackageOverrides.txt +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so + +# Provided by dotnet-host from another SRPM +#install -dm 0755 %%{buildroot}%{_sysconfdir}/profile.d/ +#install dotnet.sh %%{buildroot}%{_sysconfdir}/profile.d/ + +# Provided by dotnet-host from another SRPM +#install -dm 0755 %%{buildroot}/%%{_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}/%%{_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 + +# Provided by dotnet-host from another SRPM +#install -dm 0755 %%{buildroot}%%{_bindir} +#ln -s ../../%%{_libdir}/dotnet/dotnet %%{buildroot}%%{_bindir}/ + +# Provided by dotnet-host from another SRPM +#install -dm 0755 %%{buildroot}%%{_mandir}/man1/ +#find -iname 'dotnet*.1' -type f -exec cp {} %%{buildroot}%%{_mandir}/man1/ \; + +# Provided by dotnet-host from another SRPM +#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..." +%{SOURCE100} -v %{buildroot}%{_libdir}/dotnet/ + +# Self-check +%{buildroot}%{_libdir}/dotnet/dotnet --info + +# Provided by dotnet-host from another SRPM +rm %{buildroot}%{_libdir}/dotnet/LICENSE.txt +rm %{buildroot}%{_libdir}/dotnet/ThirdPartyNotices.txt +rm %{buildroot}%{_libdir}/dotnet/dotnet + +# Provided by netstandard-targeting-pack-2.1 from another SRPM +rm -rf %{buildroot}%{_libdir}/dotnet/packs/NETStandard.Library.Ref/2.1.0 + +%files -n dotnet-hostfxr-3.1 +%dir %{_libdir}/dotnet/host/fxr +%{_libdir}/dotnet/host/fxr/%{host_version} + +%files -n 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 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 dotnet-templates-3.1 +%dir %{_libdir}/dotnet/templates +%{_libdir}/dotnet/templates/%{templates_version} + +%files -n dotnet-sdk-3.1 +%dir %{_libdir}/dotnet/sdk +%{_libdir}/dotnet/sdk/%{sdk_version} +%dir %{_libdir}/dotnet/packs + +%changelog +* Tue Apr 13 2021 Omair Majid - 3.1.114-2 +- Rebuild to tag into the correct location +- Resolves: RHBZ#1947455 + +* Mon Apr 12 2021 Omair Majid - 3.1.114-1 +- Update to .NET Core SDK 3.1.114 and Runtime 3.1.14 +- Resolves: RHBZ#1947455 + +* Tue Mar 09 2021 Omair Majid - 3.1.113-2 +- Update to .NET Core SDK 3.1.113 and Runtime 3.1.13 +- Resolves: RHBZ#1933376 + +* Wed Feb 10 2021 Omair Majid - 3.1.112-2 +- Update to .NET Core SDK 3.1.112 and Runtime 3.1.12 +- Resolves: RHBZ#1923370 + +* Wed Jan 13 2021 Omair Majid - 3.1.111-2 +- Update to .NET Core SDK 3.1.111 and Runtime 3.1.11 +- Resolves: RHBZ#1907627 + +* Fri Nov 06 2020 Omair Majid - 3.1.110-2 +- Update to .NET Core SDK 3.1.110 and Runtime 3.1.10 +- Resolves: RHBZ#1893778 + +* Tue Oct 13 2020 Omair Majid - 3.1.109-3 +- Update to .NET Core SDK 3.1.109 and Runtime 3.1.9 +- Resolves: RHBZ#1886546 + +* Fri Sep 18 2020 Omair Majid - 3.1.108-3 +- Bump release to preserve upgrade path +- Resolves: RHBZ#1874503 + +* Fri Sep 04 2020 Omair Majid - 3.1.108-2 +- Stop producing netstandard-targeting-pack-2.1 +- Resolves: RHBZ#1874503 + +* Fri Sep 04 2020 Omair Majid - 3.1.108-1 +- Update to .NET Core SDK 3.1.108 and Runtime 3.1.8 +- Resolves: RHBZ#1874503 +- Resolves: RHBZ#1873454 + +* Mon Aug 17 2020 Omair Majid - 3.1.107-2 +- Remove subpackages that conflict with dotnet5.0 +- Resolves: RHBZ#1862590 + +* Thu Aug 13 2020 Omair Majid - 3.1.107-1 +- Update to .NET Core SDK 3.1.107 and Runtime 3.1.7 +- Resolves: RHBZ#1862590 +- Resolves: RHBZ#1861114 + +* Thu Jul 30 2020 Omair Majid - 3.1.106-6 +- Remove duplicate LDFLAGS (actually typoed ASMFLAGS) for build +- Resolves: RHBZ#1811776 + +* Wed Jul 29 2020 Omair Majid - 3.1.106-5 +- Export ASMFLAGS during build +- Resolves: RHBZ#1811776 + +* Tue Jul 28 2020 Omair Majid - 3.1.106-4 +- Enable -fcf-protection +- Resolves: RHBZ#1811776 + +* Mon Jul 27 2020 Omair Majid - 3.1.106-3 +- Improve hardening in core-setup and corefx +- Resolves: RHBZ#1811776 + +* Fri Jul 24 2020 Omair Majid - 3.1.106-2 +- Improve hardening in CoreCLR +- Resolves: RHBZ#1811776 + +* Thu Jul 16 2020 Omair Majid - 3.1.106-1 +- Update to .NET Core SDK 3.1.106 and Runtime 3.1.6 +- Resolves: RHBZ#1853772 +- Resolves: RHBZ#1856939 + +* Tue Jun 09 2020 Omair Majid - 3.1.105-1 +- Update to .NET Core Runtime 3.1.5 and SDK 3.1.105 +- Resolves: RHBZ#1844491 + +* Mon Jun 01 2020 Omair Majid - 3.1.104-3 +- Update to .NET Core Runtime 3.1.4 and SDK 3.1.104 +- Resolves: RHBZ#1832685 + +* Fri Mar 20 2020 Omair Majid - 3.1.103-2 +- Update to .NET Core Runtime 3.1.3 and SDK 3.1.103 +- Resolves: RHBZ#1815632 + +* Wed Feb 19 2020 Omair Majid - 3.1.102-2 +- Update to .NET Core Runtime 3.1.2 and SDK 3.1.102 +- Resolves: RHBZ#1804452 + +* Thu Jan 23 2020 Omair Majid - 3.1.101-2 +- Update to .NET Core Runtime 3.1.1 and SDK 3.1.101 +- Resolves: RHBZ#1789154 + +* Wed Dec 04 2019 Omair Majid - 3.1.100-2 +- Remove arm64 variant of the source tarball +- Resolves: RHBZ#1711405 + +* Tue Dec 03 2019 Omair Majid - 3.1.100-1 +- Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 +- Resolves: RHBZ#1711405 + +* Wed Nov 27 2019 Omair Majid - 3.1.100-0.7.preview3 +- Extract self-contained executables under $HOME +- Resolves: RHBZ#1711405 + +* Wed Nov 27 2019 Omair Majid - 3.1.100-0.6.preview3 +- Drop local fixes for cgroupv2 +- Resolves: RHBZ#1711405 + +* Mon Nov 18 2019 Omair Majid - 3.1.100-0.5.preview3 +- Fix permissions on apphost +- Resolves: RHBZ#1711405 + +* Mon Nov 18 2019 Omair Majid - 3.1.100-0.4.preview3 +- Update to .NET Core Runtime 3.1.0-preview3.19553.2 and SDK 3.1.100-preview3-014645 +- Resolves: RHBZ#1711405 + +* Wed Nov 13 2019 Omair Majid - 3.1.100-0.3 +- Add gating tests +- Resolves: RHBZ#1711405 + +* Wed Nov 13 2019 Omair Majid - 3.1.100-0.2 +- Initial import from Fedora into RHEL +- Resolves: RHBZ#1711405 + +* Wed Nov 06 2019 Omair Majid - 3.1.100-0.2 +- Update to .NET Core 3.1 Preview 2 + +* Wed Oct 30 2019 Omair Majid - 3.1.100-0.1 +- Update to .NET Core 3.1 Preview 1 + +* Thu Oct 24 2019 Omair Majid - 3.0.100-5 +- Add cgroupv2 support to .NET Core + +* Wed Oct 16 2019 Omair Majid - 3.0.100-4 +- Include fix from coreclr for building on Fedora 32 + +* Wed Oct 16 2019 Omair Majid - 3.0.100-3 +- Harden built binaries to pass annocheck + +* Fri Oct 11 2019 Omair Majid - 3.0.100-2 +- Export DOTNET_ROOT in profile to make apphost lookup work + +* Fri Sep 27 2019 Omair Majid - 3.0.100-1 +- Update to .NET Core Runtime 3.0.0 and SDK 3.0.100 + +* Wed Sep 25 2019 Omair Majid - 3.0.100-0.18.rc1 +- Update to .NET Core Runtime 3.0.0-rc1-19456-20 and SDK 3.0.100-rc1-014190 + +* Tue Sep 17 2019 Omair Majid - 3.0.100-0.16.preview9 +- Fix files duplicated between dotnet-apphost-pack-3.0 and dotnet-targeting-pack-3.0 +- Fix dependencies between .NET SDK and the targeting packs + +* Mon Sep 16 2019 Omair Majid - 3.0.100-0.15.preview9 +- Update to .NET Core Runtime 3.0.0-preview 9 and SDK 3.0.100-preview9 + +* Mon Aug 19 2019 Omair Majid - 3.0.100-0.11.preview8 +- Update to .NET Core Runtime 3.0.0-preview8-28405-07 and SDK + 3.0.100-preview8-013656 + +* Tue Jul 30 2019 Omair Majid - 3.0.100-0.9.preview7 +- Update to .NET Core Runtime 3.0.0-preview7-27912-14 and SDK + 3.0.100-preview7-012821 + +* Fri Jul 26 2019 Omair Majid - 3.0.100-0.8.preview7 +- Update to .NET Core Runtime 3.0.0-preview7-27902-19 and SDK + 3.0.100-preview7-012802 + +* Wed Jun 26 2019 Omair Majid - 3.0.0-0.7.preview6 +- Obsolete dotnet-sdk-3.0.1xx +- Add supackages for targeting packs +- Add -fcf-protection to CFLAGS + +* Wed Jun 26 2019 Omair Majid - 3.0.0-0.6.preview6 +- Update to .NET Core Runtime 3.0.0-preview6-27804-01 and SDK 3.0.100-preview6-012264 +- Set dotnet installation location in /etc/dotnet/install_location +- Update targetting packs +- Install managed symbols +- Completely conditionalize libunwind bundling + +* Tue May 07 2019 Omair Majid - 3.0.0-0.3.preview4 +- Update to .NET Core 3.0 preview 4 + +* Tue Dec 18 2018 Omair Majid - 3.0.0-0.1.preview1 +- Update to .NET Core 3.0 preview 1 + +* Fri Dec 07 2018 Omair Majid - 2.2.100 +- Update to .NET Core 2.2.0 + +* Wed Nov 07 2018 Omair Majid - 2.2.100-0.2.preview3 +- Update to .NET Core 2.2.0-preview3 + +* Fri Nov 02 2018 Omair Majid - 2.1.403-3 +- Add host-fxr-2.1 subpackage + +* Mon Oct 15 2018 Omair Majid - 2.1.403-2 +- Disable telemetry by default +- Users have to manually export DOTNET_CLI_TELEMETRY_OPTOUT=0 to enable + +* Tue Oct 02 2018 Omair Majid - 2.1.403-1 +- Update to .NET Core Runtime 2.1.5 and SDK 2.1.403 + +* Wed Sep 26 2018 Omair Majid - 2.1.402-2 +- Add ~/.dotnet/tools to $PATH to make it easier to use dotnet tools + +* Thu Sep 13 2018 Omair Majid - 2.1.402-1 +- Update to .NET Core Runtime 2.1.4 and SDK 2.1.402 + +* Wed Sep 05 2018 Omair Majid - 2.1.401-2 +- Use distro-standard flags when building .NET Core + +* Tue Aug 21 2018 Omair Majid - 2.1.401-1 +- Update to .NET Core Runtime 2.1.3 and SDK 2.1.401 + +* Mon Aug 20 2018 Omair Majid - 2.1.302-1 +- Update to .NET Core Runtime 2.1.2 and SDK 2.1.302 + +* Fri Jul 20 2018 Omair Majid - 2.1.301-1 +- Update to .NET Core 2.1 + +* Thu May 03 2018 Omair Majid - 2.0.7-1 +- Update to .NET Core 2.0.7 + +* Wed Mar 28 2018 Omair Majid - 2.0.6-2 +- Enable bash completion for dotnet +- Remove redundant buildrequires and requires + +* Wed Mar 14 2018 Omair Majid - 2.0.6-1 +- Update to .NET Core 2.0.6 + +* Fri Feb 23 2018 Omair Majid - 2.0.5-1 +- Update to .NET Core 2.0.5 + +* Wed Jan 24 2018 Omair Majid - 2.0.3-5 +- Don't apply corefx clang warnings fix on clang < 5 + +* Fri Jan 19 2018 Omair Majid - 2.0.3-4 +- Add a test script to sanity check debug and symbol info. +- Build with clang 5.0 +- Make main package real instead of using a virtual provides (see RHBZ 1519325) + +* Wed Nov 29 2017 Omair Majid - 2.0.3-3 +- Add a Provides for 'dotnet' +- Fix conditional macro + +* Tue Nov 28 2017 Omair Majid - 2.0.3-2 +- Fix build on Fedora 27 + +* Fri Nov 17 2017 Omair Majid - 2.0.3-1 +- Update to .NET Core 2.0.3 + +* Thu Oct 19 2017 Omair Majid - 2.0.0-4 +- Add a hack to let omnisharp work + +* Wed Aug 30 2017 Omair Majid - 2.0.0-3 +- Add a patch for building coreclr and core-setup correctly on Fedora >= 27 + +* Fri Aug 25 2017 Omair Majid - 2.0.0-2 +- Move libicu/libcurl/libunwind requires to runtime package +- Make sdk depend on the exact version of the runtime package + +* Thu Aug 24 2017 Omair Majid - 2.0.0-1 +- Update to 2.0.0 final release + +* Wed Jul 26 2017 Omair Majid - 2.0.0-0.3.preview2 +- Add man pages + +* Tue Jul 25 2017 Omair Majid - 2.0.0-0.2.preview2 +- Add Requires on libicu +- Split into multiple packages +- Do not repeat first-run message + +* Fri Jul 21 2017 Omair Majid - 2.0.0-0.1.preview2 +- Update to .NET Core 2.0 Preview 2 + +* Thu Mar 16 2017 Nemanja Milošević - 1.1.0-7 +- rebuilt with latest libldb +* Wed Feb 22 2017 Nemanja Milosevic - 1.1.0-6 +- compat-openssl 1.0 for F26 for now +* Sun Feb 19 2017 Nemanja Milosevic - 1.1.0-5 +- Fix wrong commit id's +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-4 +- Use commit id's instead of branch names +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-3 +- Improper patch5 fix +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-2 +- SPEC cleanup +- git removal (using all tarballs for reproducible builds) +- more reasonable versioning +* Thu Feb 09 2017 Nemanja Milosevic - 1.1.0-1 +- Fixed debuginfo going to separate package (Patch1) +- Added F25/F26 RIL and fixed the version info (Patch2) +- Added F25/F26 RIL in Microsoft.NETCore.App suported runtime graph (Patch3) +- SPEC file cleanup +* Wed Jan 11 2017 Nemanja Milosevic - 1.1.0-0 +- Initial RPM for Fedora 25/26. +