diff --git a/0000-PATCH-clang-Reorganize-gtest-integration.patch b/0000-PATCH-clang-Reorganize-gtest-integration.patch new file mode 100644 index 0000000000000000000000000000000000000000..e854f0163fab91f0d755a07697e0265c6b79bf8a --- /dev/null +++ b/0000-PATCH-clang-Reorganize-gtest-integration.patch @@ -0,0 +1,42 @@ +From c6b921c8d833546946b70a8c2640032fd7c62461 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Thu, 25 Feb 2021 14:04:52 +0100 +Subject: [PATCH 1/6] [PATCH][clang] Reorganize gtest integration + +--- + clang/CMakeLists.txt | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt +index 9e74014..0185276 100644 +--- a/clang/CMakeLists.txt ++++ b/clang/CMakeLists.txt +@@ -153,12 +153,6 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + set(LLVM_UTILS_PROVIDED ON) + set(CLANG_TEST_DEPS FileCheck count not) + endif() +- set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) +- if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h +- AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} +- AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) +- add_subdirectory(${UNITTEST_DIR} utils/unittest) +- endif() + else() + # Seek installed Lit. + find_program(LLVM_LIT +@@ -537,7 +531,11 @@ endif() + + + if( CLANG_INCLUDE_TESTS ) +- if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include/gtest/gtest.h) ++ set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) ++ if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h ++ AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} ++ AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) ++ add_subdirectory(${UNITTEST_DIR} utils/unittest) + add_subdirectory(unittests) + list(APPEND CLANG_TEST_DEPS ClangUnitTests) + list(APPEND CLANG_TEST_PARAMS +-- +1.8.3.1 + diff --git a/0001-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch b/0001-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch new file mode 100644 index 0000000000000000000000000000000000000000..5eb4b3b544f36676b2cef2b658e38615420710d9 --- /dev/null +++ b/0001-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch @@ -0,0 +1,29 @@ +From c87abee7356b8fde81512ffceadd520776c465d2 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Thu, 25 Feb 2021 14:09:29 +0100 +Subject: [PATCH] [PATCH][clang] Make -funwind-tables the default on all archs + +--- + clang/lib/Driver/ToolChains/Gnu.cpp | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp +index a27841dc5985..7489e6785150 100644 +--- a/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -2709,6 +2709,12 @@ bool Generic_GCC::IsUnwindTablesDefault(const ArgList &Args) const { + case llvm::Triple::ppc64: + case llvm::Triple::ppc64le: + case llvm::Triple::x86_64: ++ ++ // Enable -funwind-tables on all architectures supported by Fedora: ++ // rhbz#1655546 ++ case llvm::Triple::x86: ++ case llvm::Triple::systemz: ++ case llvm::Triple::arm: + return true; + default: + return false; +-- +2.27.0 + diff --git a/0002-not-install-static-libraries.patch b/0002-not-install-static-libraries.patch new file mode 100644 index 0000000000000000000000000000000000000000..dec5e18ddeaa330d86104b7aea222614d754b72a --- /dev/null +++ b/0002-not-install-static-libraries.patch @@ -0,0 +1,25 @@ +From 88704fc2eabb9dd19a9c3eb81a9b3dc37d95651c Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 31 Jan 2020 11:04:57 -0800 +Subject: [PATCH][clang] Don't install static libraries + +--- + cmake/modules/AddClang.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake +index 5752f427..7280ccea 100644 +--- a/clang/cmake/modules/AddClang.cmake ++++ b/clang/cmake/modules/AddClang.cmake +@@ -113,7 +113,7 @@ macro(add_clang_library name) + if(TARGET ${lib}) + target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS}) + +- if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN) ++ if (ARG_SHARED AND (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)) + get_target_export_arg(${name} Clang export_to_clangtargets UMBRELLA clang-libraries) + install(TARGETS ${lib} + COMPONENT ${lib} +-- +2.27.0 + diff --git a/0003-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch b/0003-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch new file mode 100644 index 0000000000000000000000000000000000000000..6c94b4d91bca985f215fecd1412ea3f42fc4386a --- /dev/null +++ b/0003-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch @@ -0,0 +1,59 @@ +From d68a5a7817dc0d43853d8b84c9185dc24338664f Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 6 Oct 2021 05:32:44 +0000 +Subject: [PATCH] Driver: Add a gcc equivalent triple to the list of triples to + search + +There are some gcc triples, like x86_64-redhat-linux, that provide the +same behavior as a clang triple with a similar name (e.g. +x86_64-redhat-linux-gnu). When searching for a gcc install, also search +for a gcc equivalent triple if one exists. + +Differential Revision: https://reviews.llvm.org/D111207 +--- + clang/lib/Driver/ToolChains/Gnu.cpp | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp +index fe5bda5c6605..fd4a7f72be14 100644 +--- a/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -1884,6 +1884,18 @@ static llvm::StringRef getGCCToolchainDir(const ArgList &Args, + return GCC_INSTALL_PREFIX; + } + ++/// This function takes a 'clang' triple and converts it to an equivalent gcc ++/// triple. ++static const char *ConvertToGccTriple(StringRef CandidateTriple) { ++ return llvm::StringSwitch(CandidateTriple) ++ .Case("aarch64-redhat-linux-gnu", "aarch64-redhat-linux") ++ .Case("i686-redhat-linux-gnu", "i686-redhat-linux") ++ .Case("ppc64le-redhat-linux-gnu", "ppc64le-redhat-linux") ++ .Case("s390x-redhat-linux-gnu", "s390x-redhat-linux") ++ .Case("x86_64-redhat-linux-gnu", "x86_64-redhat-linux") ++ .Default(NULL); ++} ++ + /// Initialize a GCCInstallationDetector from the driver. + /// + /// This performs all of the autodetection and sets up the various paths. +@@ -1904,6 +1916,16 @@ void Generic_GCC::GCCInstallationDetector::init( + // The compatible GCC triples for this particular architecture. + SmallVector CandidateTripleAliases; + SmallVector CandidateBiarchTripleAliases; ++ ++ // In some cases gcc uses a slightly different triple than clang for the ++ // same target. Convert the clang triple to the gcc equivalent and use that ++ // to search for the gcc install. ++ const char *ConvertedTriple = ConvertToGccTriple(TargetTriple.str()); ++ if (ConvertedTriple) { ++ CandidateTripleAliases.push_back(ConvertedTriple); ++ CandidateBiarchTripleAliases.push_back(ConvertedTriple); ++ } ++ + CollectLibDirsAndTriples(TargetTriple, BiarchVariantTriple, CandidateLibDirs, + CandidateTripleAliases, CandidateBiarchLibDirs, + CandidateBiarchTripleAliases); +-- +2.26.2 + diff --git a/0004-cmake-Allow-shared-libraries-to-customize-the-soname.patch b/0004-cmake-Allow-shared-libraries-to-customize-the-soname.patch new file mode 100644 index 0000000000000000000000000000000000000000..e4254752265f2ebd9c11cd41df9201bdb88dad2b --- /dev/null +++ b/0004-cmake-Allow-shared-libraries-to-customize-the-soname.patch @@ -0,0 +1,39 @@ +From 3dc5722d5c7673a879f2b4680369d3ac8b6b64b6 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 4 Aug 2021 14:05:38 -0700 +Subject: [PATCH] cmake: Allow shared libraries to customize the soname using + LLVM_ABI_REVISION + +The LLVM_ABI_REVISION variable is intended to be used for release +candidates which introduce an ABI change to a shared library. This +variable can be specified per library, so there is not one global value +for all of LLVM. + +For example, if we LLVM X.0.0-rc2 introduces an ABI change for a library +compared with LLVM X.0.0-rc1, then the LLVM_ABI_REVISION number for +library will be incremented by 1. + +In the main branch, LLVM_ABI_REVISION should always be 0, it is only +meant to be used in the release branch. + +Differential Revision: https://reviews.llvm.org/D105594 +--- + clang/tools/clang-shlib/CMakeLists.txt | 5 +++++ + 3 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/clang/tools/clang-shlib/CMakeLists.txt b/clang/tools/clang-shlib/CMakeLists.txt +index 9c1f8ea452b3..4d785924e4bb 100644 +--- a/clang/tools/clang-shlib/CMakeLists.txt ++++ b/clang/tools/clang-shlib/CMakeLists.txt +@@ -1,3 +1,8 @@ ++# In the main branch, LLVM_ABI_REVISION should always be 0. In the release ++# branches, this should be incremented before each release candidate every ++# time the ABI of libclang-cpp.so changes. ++set(LLVM_ABI_REVISION 0) ++ + # Building libclang-cpp.so fails if LLVM_ENABLE_PIC=Off + if (NOT LLVM_ENABLE_PIC) + return() +-- +2.27.0 + diff --git a/0005-PATCH-clang-Fix-scan-build-py-executable-lookup-path.patch b/0005-PATCH-clang-Fix-scan-build-py-executable-lookup-path.patch new file mode 100644 index 0000000000000000000000000000000000000000..590f273b0eec24ac3b88d75a58e0a4e307e12ffe --- /dev/null +++ b/0005-PATCH-clang-Fix-scan-build-py-executable-lookup-path.patch @@ -0,0 +1,36 @@ +From 62eaebcb6bb872830299efa3f87506f1d23ef366 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Mon, 13 Sep 2021 10:25:45 +0200 +Subject: [PATCH][clang] Fix scan-build-py executable lookup path + +Once installed, scan-build-py doesn't know anything about its auxiliary +executable and can't find them. +Use relative path wrt. scan-build-py script. + +Differential Revision: https://reviews.llvm.org/D109659 + +(cherry picked from commit c84755a046bbdcd0564693e30b2508034b06002b) +--- + clang/tools/scan-build-py/lib/libscanbuild/analyze.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +index 9a249a8..d83ff2a 100644 +--- a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py ++++ b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +@@ -39,8 +39,10 @@ from libscanbuild.shell import decode + + __all__ = ['scan_build', 'analyze_build', 'analyze_compiler_wrapper'] + +-COMPILER_WRAPPER_CC = 'analyze-cc' +-COMPILER_WRAPPER_CXX = 'analyze-c++' ++scanbuild_dir = os.path.dirname(__import__('sys').argv[0]) ++ ++COMPILER_WRAPPER_CC = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-cc') ++COMPILER_WRAPPER_CXX = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-c++') + + CTU_EXTDEF_MAP_FILENAME = 'externalDefMap.txt' + CTU_TEMP_DEFMAP_FOLDER = 'tmpExternalDefMaps' +-- +1.8.3.1 + diff --git a/0006-Work-around-gcc-miscompile.patch b/0006-Work-around-gcc-miscompile.patch new file mode 100644 index 0000000000000000000000000000000000000000..16c1467d31649e0d40258b11167693762a798959 --- /dev/null +++ b/0006-Work-around-gcc-miscompile.patch @@ -0,0 +1,33 @@ +From 0f97b7209eed4a428171af6044fe7e0aaf81ee2a Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Thu, 3 Feb 2022 10:34:44 +0100 +Subject: [PATCH] Work around gcc miscompile + +This works around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104334, +which miscompiles clang on s390x and ppc64le. The issue is already +fixed on the gcc side, but including this as a temporary workaround +to get a working build. +--- + clang/lib/Sema/DeclSpec.cpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp +index d4dc790c008a..77a1e6c32c6f 100644 +--- a/clang/lib/Sema/DeclSpec.cpp ++++ b/clang/lib/Sema/DeclSpec.cpp +@@ -1203,8 +1203,9 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { + } else if (TypeSpecType == TST_double) { + // vector long double and vector long long double are never allowed. + // vector double is OK for Power7 and later, and ZVector. +- if (getTypeSpecWidth() == TypeSpecifierWidth::Long || +- getTypeSpecWidth() == TypeSpecifierWidth::LongLong) ++ TypeSpecifierWidth TypeSpecWidth = getTypeSpecWidth(); ++ if (TypeSpecWidth == TypeSpecifierWidth::Long || ++ TypeSpecWidth == TypeSpecifierWidth::LongLong) + S.Diag(TSWRange.getBegin(), + diag::err_invalid_vector_long_double_decl_spec); + else if (!S.Context.getTargetInfo().hasFeature("vsx") && +-- +2.34.1 + + diff --git a/clang-13.0.1.src.tar.xz b/clang-13.0.1.src.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..1a249584247b86110728baf1752592957a976625 Binary files /dev/null and b/clang-13.0.1.src.tar.xz differ diff --git a/clang-13.0.1.src.tar.xz.sig b/clang-13.0.1.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..ff0e7fa6ed49bbdc85992a8b35e735c913caff56 Binary files /dev/null and b/clang-13.0.1.src.tar.xz.sig differ diff --git a/clang-tools-extra-13.0.1.src.tar.xz b/clang-tools-extra-13.0.1.src.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..63304022fd53331e0a4bb0cb3b1af8b8392fd175 Binary files /dev/null and b/clang-tools-extra-13.0.1.src.tar.xz differ diff --git a/clang-tools-extra-13.0.1.src.tar.xz.sig b/clang-tools-extra-13.0.1.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..ed76f62fc459f96833000ef4268d161b7c1efb69 Binary files /dev/null and b/clang-tools-extra-13.0.1.src.tar.xz.sig differ diff --git a/clang.spec b/clang.spec new file mode 100644 index 0000000000000000000000000000000000000000..a53fd65e1f9721938421b4c6d83bdc001a517a19 --- /dev/null +++ b/clang.spec @@ -0,0 +1,448 @@ +%define anolis_release 1 +%bcond_with compat_build +%bcond_without check + +%global maj_ver 13 +%global min_ver 0 +%global patch_ver 1 +#global rc_ver 3 +%global clang_version %{maj_ver}.%{min_ver}.%{patch_ver} + +%global clang_tools_binaries \ + %{_bindir}/clang-apply-replacements \ + %{_bindir}/clang-change-namespace \ + %{_bindir}/clang-check \ + %{_bindir}/clang-doc \ + %{_bindir}/clang-extdef-mapping \ + %{_bindir}/clang-format \ + %{_bindir}/clang-include-fixer \ + %{_bindir}/clang-move \ + %{_bindir}/clang-offload-bundler \ + %{_bindir}/clang-offload-wrapper \ + %{_bindir}/clang-query \ + %{_bindir}/clang-refactor \ + %{_bindir}/clang-rename \ + %{_bindir}/clang-reorder-fields \ + %{_bindir}/clang-repl \ + %{_bindir}/clang-scan-deps \ + %{_bindir}/clang-tidy \ + %{_bindir}/clangd \ + %{_bindir}/diagtool \ + %{_bindir}/hmaptool \ + %{_bindir}/pp-trace + +%global clang_binaries \ + %{_bindir}/clang \ + %{_bindir}/clang++ \ + %{_bindir}/clang-%{maj_ver} \ + %{_bindir}/clang++-%{maj_ver} \ + %{_bindir}/clang-cl \ + %{_bindir}/clang-cpp \ + +%global pkg_name clang +%global install_prefix /usr +%global pkg_libdir %{_libdir} + +%global build_install_prefix %{buildroot}%{install_prefix} + +%global clang_srcdir clang-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src +%global clang_tools_srcdir clang-tools-extra-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src + +%if !%{maj_ver} && 0%{?rc_ver} +%global abi_revision 2 +%endif + +Name: clang +Version: %{clang_version} +Release: %{anolis_release}%{?dist} +Summary: A C language family front-end for LLVM + +License: NCSA +URL: http://llvm.org +Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz +Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz.sig +Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz +Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz.sig +Source4: tstellar-gpg-key.asc +Source5: macros.%{name} + +# Patches for clang +Patch0: 0000-PATCH-clang-Reorganize-gtest-integration.patch +Patch1: 0001-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch +Patch2: 0002-not-install-static-libraries.patch +Patch3: 0003-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch +Patch4: 0004-cmake-Allow-shared-libraries-to-customize-the-soname.patch +Patch5: 0005-PATCH-clang-Fix-scan-build-py-executable-lookup-path.patch +Patch6: 0006-Work-around-gcc-miscompile.patch + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: ninja-build +BuildRequires: llvm-devel >= %{version} +BuildRequires: llvm-test >= %{version} +# llvm-static is required, because clang-tablegen needs libLLVMTableGen, which +# is not included in libLLVM.so. +BuildRequires: llvm-static >= %{version} +BuildRequires: llvm-googletest >= %{version} + +BuildRequires: libxml2-devel +BuildRequires: perl-generators +BuildRequires: ncurses-devel +# According to https://fedoraproject.org/wiki/Packaging:Emacs a package +# should BuildRequires: emacs if it packages emacs integration files. +BuildRequires: emacs + +# The testsuite uses /usr/bin/lit which is part of the python3-lit package. +BuildRequires: python3-lit + +BuildRequires: python3-sphinx +BuildRequires: libatomic + +# We need python3-devel for %%py3_shebang_fix +BuildRequires: python3-devel + +# For reproducible pyc file generation +# See https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#_byte_compilation_reproducibility +BuildRequires: /usr/bin/marshalparser +%global py_reproducible_pyc_path %{buildroot}%{python3_sitelib} + +# For origin certification +BuildRequires: gnupg2 + +# scan-build uses these perl modules so they need to be installed in order +# to run the tests. +BuildRequires: perl(Digest::MD5) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Find) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Temp) +BuildRequires: perl(FindBin) +BuildRequires: perl(Hash::Util) +BuildRequires: perl(lib) +BuildRequires: perl(Term::ANSIColor) +BuildRequires: perl(Text::ParseWords) +BuildRequires: perl(Sys::Hostname) + +Requires: %{name}-libs = %{version}-%{release} + +# clang requires gcc, clang++ requires libstdc++-devel +# - https://bugzilla.redhat.com/show_bug.cgi?id=1021645 +# - https://bugzilla.redhat.com/show_bug.cgi?id=1158594 +Requires: libstdc++-devel +Requires: gcc-c++ + +Provides: clang(major) = %{maj_ver} + +Conflicts: compiler-rt < 11.0.0 + +%description +clang: noun + 1. A loud, resonant, metallic sound. + 2. The strident call of a crane or goose. + 3. C-language family front-end toolkit. + +The goal of the Clang project is to create a new C, C++, Objective C +and Objective C++ front-end for the LLVM compiler. Its tools are built +as libraries and designed to be loosely-coupled and extensible. + +Install compiler-rt if you want the Blocks C language extension or to +enable sanitization and profiling options when building, and +libomp-devel to enable -fopenmp. + +%package libs +Summary: Runtime library for clang +Requires: %{name}-resource-filesystem = %{version} +Recommends: compiler-rt = %{version} +# libomp-devel is required, so clang can find the omp.h header when compiling +# with -fopenmp. +Recommends: libomp-devel = %{version} +Recommends: libomp = %{version} + +%description libs +Runtime library for clang. + +%package devel +Summary: Development header files for clang +Requires: %{name} = %{version}-%{release} +# The clang CMake files reference tools from clang-tools-extra. +Requires: %{name}-tools-extra = %{version}-%{release} +Requires: %{name}-libs = %{version}-%{release} + +%description devel +Development header files for clang. + +%package resource-filesystem +Summary: Filesystem package that owns the clang resource directory +Provides: %{name}-resource-filesystem(major) = %{maj_ver} + +%description resource-filesystem +This package owns the clang resouce directory: $libdir/clang/$version/ + +%package analyzer +Summary: A source code analysis framework +License: NCSA and MIT +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description analyzer +The Clang Static Analyzer consists of both a source code analysis +framework and a standalone tool that finds bugs in C and Objective-C +programs. The standalone tool is invoked from the command-line, and is +intended to run in tandem with a build of a project or code base. + +%package tools-extra +Summary: Extra tools for clang +Requires: %{name}-libs = %{version}-%{release} +Requires: emacs-filesystem + +%description tools-extra +A set of extra tools built using Clang's tooling API. + +# Put git-clang-format in its own package, because it Requires git +# and we don't want to force users to install all those dependenices if they +# just want clang. +%package -n git-clang-format +Summary: Integration of clang-format for git +Requires: %{name}-tools-extra = %{version}-%{release} +Requires: git +Requires: python3 + +%description -n git-clang-format +clang-format integration for git. + +%package -n python3-clang +Summary: Python3 bindings for clang +Requires: %{name}-libs = %{version}-%{release} +Requires: python3 +%description -n python3-clang +%{summary}. + +%prep +%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE3}' --data='%{SOURCE0}' + +%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE2}' --data='%{SOURCE1}' +%setup -T -q -b 1 -n %{clang_tools_srcdir} +%autopatch -m200 -p2 + +# failing test case +rm test/clang-tidy/checkers/altera-struct-pack-align.cpp + +%py3_shebang_fix \ + clang-tidy/tool/ \ + clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py + +%setup -q -n %{clang_srcdir} +%autopatch -M200 -p2 + +# failing test case +rm test/CodeGen/profile-filter.c + +%py3_shebang_fix \ + tools/clang-format/ \ + tools/clang-format/git-clang-format \ + utils/hmaptool/hmaptool \ + tools/scan-view/bin/scan-view \ + tools/scan-build-py/bin/* \ + tools/scan-build-py/libexec/* + +%build + +# This package does not ship any object files or static libraries, so we +# don't need -ffat-lto-objects. +%global _lto_cflags %(echo %{_lto_cflags} | sed 's/-ffat-lto-objects//') + +# lto builds with gcc 11 fail while running the lit tests. +%define _lto_cflags %{nil} + +sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@/64/g' test/lit.cfg.py + +# -DLLVM_ENABLE_NEW_PASS_MANAGER=ON can be removed once this patch is committed: +# https://reviews.llvm.org/D107628 +%cmake -G Ninja \ + -DLLVM_PARALLEL_LINK_JOBS=1 \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DPYTHON_EXECUTABLE=%{__python3} \ + -DCMAKE_SKIP_RPATH:BOOL=ON \ + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../%{clang_tools_srcdir} \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ + -DLLVM_LIBDIR_SUFFIX=64 \ + -DLLVM_TABLEGEN_EXE:FILEPATH=%{_bindir}/llvm-tblgen \ + -DCLANG_ENABLE_ARCMT:BOOL=ON \ + -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON \ + -DCLANG_INCLUDE_DOCS:BOOL=ON \ + -DCLANG_PLUGIN_SUPPORT:BOOL=ON \ + -DENABLE_LINKER_BUILD_ID:BOOL=ON \ + -DLLVM_ENABLE_EH=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_BUILD_DOCS=ON \ + -DLLVM_ENABLE_NEW_PASS_MANAGER=ON \ + -DLLVM_ENABLE_SPHINX=ON \ + -DCLANG_LINK_CLANG_DYLIB=ON \ + %{?abi_revision:-DLLVM_ABI_REVISION=%{abi_revision}} \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + \ + -DCLANG_BUILD_EXAMPLES:BOOL=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DCLANG_REPOSITORY_STRING="anolis os %{version}-%{release}" \ + -DCLANG_DEFAULT_UNWINDLIB=libgcc + +%cmake_build + +%install + +%cmake_install + +# File in the macros file for other packages to use. We are not doing this +# in the compat package, because the version macros would # conflict with +# eachother if both clang and the clang compat package were installed together. +install -p -m0644 -D %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.%{name} +sed -i -e "s|@@CLANG_MAJOR_VERSION@@|%{maj_ver}|" \ + -e "s|@@CLANG_MINOR_VERSION@@|%{min_ver}|" \ + -e "s|@@CLANG_PATCH_VERSION@@|%{patch_ver}|" \ + %{buildroot}%{_rpmmacrodir}/macros.%{name} + +# install clang python bindings +mkdir -p %{buildroot}%{python3_sitelib}/clang/ +install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/ +%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang + +# install scanbuild-py to python sitelib. +mv %{buildroot}%{_prefix}/lib/{libear,libscanbuild} %{buildroot}%{python3_sitelib} +%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/{libear,libscanbuild} + +# Move emacs integration files to the correct directory +mkdir -p %{buildroot}%{_emacs_sitestartdir} +for f in clang-format.el clang-rename.el clang-include-fixer.el; do +mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/$f +done + +# remove editor integrations (bbedit, sublime, emacs, vim) +rm -vf %{buildroot}%{_datadir}/clang/clang-format-bbedit.applescript +rm -vf %{buildroot}%{_datadir}/clang/clang-format-sublime.py* + +# TODO: Package html docs +rm -Rvf %{buildroot}%{_docdir}/clang/html +rm -Rvf %{buildroot}%{_datadir}/clang/clang-doc-default-stylesheet.css +rm -Rvf %{buildroot}%{_datadir}/clang/index.js + +# TODO: What are the Fedora guidelines for packaging bash autocomplete files? +rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh + +# Create Manpage symlinks +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++.1.gz +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz + +# Add clang++-{version} symlink +ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} + + +# Fix permission +chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* + +# create a link to clang's resource directory that is "constant" across minor +# version bumps +# this is required for packages like ccls that hardcode the link to clang's +# resource directory to not require rebuilds on minor version bumps +# Fix for bugs like rhbz#1807574 +pushd %{buildroot}%{_libdir}/clang/ +ln -s %{version} %{maj_ver} +popd + +# Create sub-directories in the clang resource directory that will be +# populated by other packages +mkdir -p %{buildroot}%{pkg_libdir}/clang/%{version}/{include,lib,share}/ + + +# Remove clang-tidy headers. We don't ship the libraries for these. +rm -Rvf %{buildroot}%{_includedir}/clang-tidy/ + +# Add a symlink in /usr/bin to clang-format-diff +ln -s %{_datadir}/clang/clang-format-diff.py %{buildroot}%{_bindir}/clang-format-diff + +%check +%if %{with check} +# requires lit.py from LLVM utilities +# FIXME: Fix failing ARM tests +LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_builddir} || \ +false +%endif + + +%files +%license LICENSE.TXT +%{clang_binaries} +%{_mandir}/man1/clang.1.gz +%{_mandir}/man1/clang++.1.gz +%{_mandir}/man1/clang-%{maj_ver}.1.gz +%{_mandir}/man1/clang++-%{maj_ver}.1.gz + +%files libs +%{_libdir}/clang/ +%{_libdir}/*.so.* + +%files devel +%{_libdir}/*.so +%{_includedir}/clang/ +%{_includedir}/clang-c/ +%{_libdir}/cmake/* +%dir %{_datadir}/clang/ +%{_rpmmacrodir}/macros.%{name} + +%files resource-filesystem +%dir %{pkg_libdir}/clang/%{version}/ +%dir %{pkg_libdir}/clang/%{version}/include/ +%dir %{pkg_libdir}/clang/%{version}/lib/ +%dir %{pkg_libdir}/clang/%{version}/share/ +%{pkg_libdir}/clang/%{maj_ver} + +%files analyzer +%{_bindir}/scan-view +%{_bindir}/scan-build +%{_bindir}/analyze-build +%{_bindir}/intercept-build +%{_bindir}/scan-build-py +%{_libexecdir}/ccc-analyzer +%{_libexecdir}/c++-analyzer +%{_libexecdir}/analyze-c++ +%{_libexecdir}/analyze-cc +%{_libexecdir}/intercept-c++ +%{_libexecdir}/intercept-cc +%{_datadir}/scan-view/ +%{_datadir}/scan-build/ +%{_mandir}/man1/scan-build.1.* +%{python3_sitelib}/libear +%{python3_sitelib}/libscanbuild + + +%files tools-extra +%{clang_tools_binaries} +%{_bindir}/c-index-test +%{_bindir}/find-all-symbols +%{_bindir}/modularize +%{_bindir}/clang-format-diff +%{_mandir}/man1/diagtool.1.gz +%{_emacs_sitestartdir}/clang-format.el +%{_emacs_sitestartdir}/clang-rename.el +%{_emacs_sitestartdir}/clang-include-fixer.el +%{_datadir}/clang/clang-format.py* +%{_datadir}/clang/clang-format-diff.py* +%{_datadir}/clang/clang-include-fixer.py* +%{_datadir}/clang/clang-tidy-diff.py* +%{_bindir}/run-clang-tidy +%{_datadir}/clang/run-find-all-symbols.py* +%{_datadir}/clang/clang-rename.py* + +%files -n git-clang-format +%{_bindir}/git-clang-format + +%files -n python3-clang +%{python3_sitelib}/clang/ + +%changelog +* Mon Apr 25 2022 happy_orange - 13.0.1-1 +- package init form upstream diff --git a/macros.clang b/macros.clang new file mode 100644 index 0000000000000000000000000000000000000000..1f26e35fdf2c2184b1c2667a7b6b5027bd7a9775 --- /dev/null +++ b/macros.clang @@ -0,0 +1,16 @@ +%clang_major_version @@CLANG_MAJOR_VERSION@@ +%clang_minor_version @@CLANG_MINOR_VERSION@@ +%clang_patch_version @@CLANG_PATCH_VERSION@@ + +%clang_version %{clang_major_version}.%{clang_minor_version}.%{clang_patch_version} + +# This is the path to the clang resource directory that has clang's internal +# headers and libraries. This path should be used by packages that need to +# install files into this directory. This macro's value changes every time +# clang's version changes. +%clang_resource_dir %{_libdir}/clang/%{clang_version} + +# This is the path to the clang resource directory that should be used +# by packages that need to read files from this directory at runtime. +# This macro only changes when clang's major version changes. +%clang_resource_dir_readonly %{_libdir}/clang/%{clang_major_version} diff --git a/tstellar-gpg-key.asc b/tstellar-gpg-key.asc new file mode 100644 index 0000000000000000000000000000000000000000..eba625c41a5fb1646d8b087acb97a6f079901712 Binary files /dev/null and b/tstellar-gpg-key.asc differ