diff --git a/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch b/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch new file mode 100644 index 0000000000000000000000000000000000000000..2c15ece8f2053a266e7bb11067934b4d5519249e --- /dev/null +++ b/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch @@ -0,0 +1,52 @@ +From a1bccf89a02accab69b359ef004faa95257333c0 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 7 Sep 2018 18:27:16 +0000 +Subject: [PATCH] Convert clang-format-diff.py to python3 using 2to3 + +--- + tools/clang-format/clang-format-diff.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/tools/clang-format/clang-format-diff.py b/tools/clang-format/clang-format-diff.py +index ffa30e70dd..1525a3815c 100755 +--- a/tools/clang-format/clang-format-diff.py ++++ b/tools/clang-format/clang-format-diff.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/python3 + # + #===- clang-format-diff.py - ClangFormat Diff Reformatter ----*- python -*--===# + # +@@ -27,7 +27,7 @@ import difflib + import re + import string + import subprocess +-import StringIO ++import io + import sys + + +@@ -89,9 +89,9 @@ def main(): + ['-lines', str(start_line) + ':' + str(end_line)]) + + # Reformat files containing changes in place. +- for filename, lines in lines_by_file.iteritems(): ++ for filename, lines in lines_by_file.items(): + if args.i and args.verbose: +- print 'Formatting', filename ++ print('Formatting', filename) + command = [args.binary, filename] + if args.i: + command.append('-i') +@@ -109,7 +109,7 @@ def main(): + if not args.i: + with open(filename) as f: + code = f.readlines() +- formatted_code = StringIO.StringIO(stdout).readlines() ++ formatted_code = io.StringIO(stdout).readlines() + diff = difflib.unified_diff(code, formatted_code, + filename, filename, + '(before formatting)', '(after formatting)') +-- +2.14.3 + diff --git a/0001-Convert-scan-view-to-python3-using-2to3.patch b/0001-Convert-scan-view-to-python3-using-2to3.patch new file mode 100644 index 0000000000000000000000000000000000000000..2534c6ed475b97f8d12d164370366793e7e5fb8c --- /dev/null +++ b/0001-Convert-scan-view-to-python3-using-2to3.patch @@ -0,0 +1,93 @@ +From c760f8d703af0c67774681b5a259d5dd3a1e5a77 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 19 Sep 2018 08:53:10 -0700 +Subject: [PATCH] Convert scan-view to python3 using 2to3 + +--- + tools/scan-view/bin/scan-view | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/tools/scan-view/bin/scan-view b/tools/scan-view/bin/scan-view +index 1b6e8ba..ca3dac5 100755 +--- a/tools/scan-view/bin/scan-view ++++ b/tools/scan-view/bin/scan-view +@@ -7,9 +7,9 @@ import sys + import imp + import os + import posixpath +-import thread ++import _thread + import time +-import urllib ++import urllib.request, urllib.parse, urllib.error + import webbrowser + + # How long to wait for server to start. +@@ -27,7 +27,7 @@ kMaxPortsToTry = 100 + + def url_is_up(url): + try: +- o = urllib.urlopen(url) ++ o = urllib.request.urlopen(url) + except IOError: + return False + o.close() +@@ -35,7 +35,7 @@ def url_is_up(url): + + + def start_browser(port, options): +- import urllib ++ import urllib.request, urllib.parse, urllib.error + import webbrowser + + url = 'http://%s:%d' % (options.host, port) +@@ -52,10 +52,10 @@ def start_browser(port, options): + sys.stderr.flush() + time.sleep(kSleepTimeout) + else: +- print >> sys.stderr, 'WARNING: Unable to detect that server started.' ++ print('WARNING: Unable to detect that server started.', file=sys.stderr) + + if options.debug: +- print >> sys.stderr, '%s: Starting webbrowser...' % sys.argv[0] ++ print('%s: Starting webbrowser...' % sys.argv[0], file=sys.stderr) + webbrowser.open(url) + + +@@ -69,9 +69,9 @@ def run(port, options, root): + + import ScanView + try: +- print 'Starting scan-view at: http://%s:%d' % (options.host, +- port) +- print ' Use Ctrl-C to exit.' ++ print('Starting scan-view at: http://%s:%d' % (options.host, ++ port)) ++ print(' Use Ctrl-C to exit.') + httpd = ScanView.create_server((options.host, port), + options, root) + httpd.serve_forever() +@@ -80,9 +80,9 @@ def run(port, options, root): + + + def port_is_open(port): +- import SocketServer ++ import socketserver + try: +- t = SocketServer.TCPServer((kDefaultHost, port), None) ++ t = socketserver.TCPServer((kDefaultHost, port), None) + except: + return False + t.server_close() +@@ -135,7 +135,7 @@ def main(): + # Kick off thread to wait for server and start web browser, if + # requested. + if args.startBrowser: +- t = thread.start_new_thread(start_browser, (port, args)) ++ t = _thread.start_new_thread(start_browser, (port, args)) + + run(port, args, args.root) + +-- +1.8.3.1 + diff --git a/0001-Don-t-prefer-python2.7.patch b/0001-Don-t-prefer-python2.7.patch new file mode 100644 index 0000000000000000000000000000000000000000..28ca4e013e3f37f43a4b0b10f09827ab27672e7d --- /dev/null +++ b/0001-Don-t-prefer-python2.7.patch @@ -0,0 +1,24 @@ +From d13bd5108e3471cc6f6203ba1c0c0e67323bbb12 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 5 Sep 2018 21:43:42 -0700 +Subject: [PATCH] Don't prefer python2.7 + +--- + CMakeLists.txt | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 52b8819..6f233fd 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -109,7 +109,6 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) + + if(LLVM_INCLUDE_TESTS) +- set(Python_ADDITIONAL_VERSIONS 2.7) + include(FindPythonInterp) + if(NOT PYTHONINTERP_FOUND) + message(FATAL_ERROR +-- +1.8.3.1 + diff --git a/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch b/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch new file mode 100644 index 0000000000000000000000000000000000000000..b9d0aee4942286548644c74269f8a157868bf781 --- /dev/null +++ b/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch @@ -0,0 +1,120 @@ +From d84a971ba917569829b51fff6057e5fd0d85e402 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 18 Jan 2018 02:57:51 +0000 +Subject: [PATCH] Driver: Prefer vendor supplied gcc toolchain + +Summary: +This patch fixes an issue on Fedora where if you had the x86_64 cross +compiler installed on your x86_64 system, then clang would use that compiler +as the default toolchain. This was happening because the cross compiler +is installed to /usr/lib/gcc/x86_64-linux-gnu/ and this directory comes before +the default compiler directory (/usr/lib/gcc/x86_64-redhat-linux/) in the search +list. + +This patch re-orders the search list so that vendor supplied gcc toolchains +are selected before toolchains with a generic target, which should prevent +these kind of issues on other OSes too. + +Subscribers: srhines, cfe-commits + +Differential Revision: https://reviews.llvm.org/D42608 +--- + lib/Driver/ToolChains/Gnu.cpp | 47 ++++++++++++++++++++++--------------------- + 1 file changed, 24 insertions(+), 23 deletions(-) + +diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp +index 3755673..5a49a6e 100644 +--- a/lib/Driver/ToolChains/Gnu.cpp ++++ b/lib/Driver/ToolChains/Gnu.cpp +@@ -1811,18 +1811,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + // lifetime or initialization issues. + static const char *const AArch64LibDirs[] = {"/lib64", "/lib"}; + static const char *const AArch64Triples[] = { +- "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", +- "aarch64-suse-linux"}; ++ "aarch64-redhat-linux", "aarch64-suse-linux", ++ "aarch64-none-linux-gnu", "aarch64-linux-gnu"}; + static const char *const AArch64beLibDirs[] = {"/lib"}; + static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu", + "aarch64_be-linux-gnu"}; + + static const char *const ARMLibDirs[] = {"/lib"}; + static const char *const ARMTriples[] = {"arm-linux-gnueabi"}; +- static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf", +- "armv7hl-redhat-linux-gnueabi", ++ static const char *const ARMHFTriples[] = {"armv7hl-redhat-linux-gnueabi", + "armv6hl-suse-linux-gnueabi", +- "armv7hl-suse-linux-gnueabi"}; ++ "armv7hl-suse-linux-gnueabi", ++ "arm-linux-gnueabihf", ++ }; + static const char *const ARMebLibDirs[] = {"/lib"}; + static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"}; + static const char *const ARMebHFTriples[] = { +@@ -1830,19 +1831,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + static const char *const X86_64LibDirs[] = {"/lib64", "/lib"}; + static const char *const X86_64Triples[] = { +- "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", +- "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", +- "x86_64-redhat-linux", "x86_64-suse-linux", +- "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", +- "x86_64-slackware-linux", "x86_64-unknown-linux", +- "x86_64-amazon-linux"}; ++ "x86_64-redhat-linux6E", "x86_64-redhat-linux", ++ "x86_64-suse-linux", "x86_64-slackware-linux", ++ "x86_64-manbo-linux-gnu", "x86_64-amazon-linux", ++ "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", ++ "x86_64-pc-linux-gnu", "x86_64-linux-gnu", ++ "x86_64-unknown-linux"}; + static const char *const X32LibDirs[] = {"/libx32"}; + static const char *const X86LibDirs[] = {"/lib32", "/lib"}; + static const char *const X86Triples[] = { +- "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", +- "i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux", +- "i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux", +- "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu"}; ++ "i386-redhat-linux6E", "i686-redhat-linux", "i586-redhat-linux", ++ "i386-redhat-linux", "i586-suse-linux", "i486-slackware-linux", ++ "i686-montavista-linux", "i686-linux-gnu", "i686-pc-linux-gnu", ++ "i486-linux-gnu", "i386-linux-gnu", "i586-linux-gnu"}; + + static const char *const MIPSLibDirs[] = {"/lib"}; + static const char *const MIPSTriples[] = {"mips-linux-gnu", "mips-mti-linux", +@@ -1864,16 +1865,16 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + static const char *const PPCLibDirs[] = {"/lib32", "/lib"}; + static const char *const PPCTriples[] = { +- "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe", +- "powerpc-suse-linux", "powerpc-montavista-linuxspe"}; ++ "powerpc-suse-linux", "powerpc-montavista-linuxspe", ++ "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe"}; + static const char *const PPC64LibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64Triples[] = { +- "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu", +- "powerpc64-suse-linux", "ppc64-redhat-linux"}; ++ "powerpc64-suse-linux", "ppc64-redhat-linux", ++ "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu"}; + static const char *const PPC64LELibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64LETriples[] = { +- "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu", +- "powerpc64le-suse-linux", "ppc64le-redhat-linux"}; ++ "powerpc64le-suse-linux", "ppc64le-redhat-linux", ++ "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu"}; + + static const char *const RISCV32LibDirs[] = {"/lib", "/lib32"}; + static const char *const RISCVTriples[] = {"riscv32-unknown-linux-gnu", +@@ -1889,8 +1890,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + static const char *const SystemZLibDirs[] = {"/lib64", "/lib"}; + static const char *const SystemZTriples[] = { +- "s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu", +- "s390x-suse-linux", "s390x-redhat-linux"}; ++ "s390x-ibm-linux-gnu", "s390x-suse-linux", "s390x-redhat-linux", ++ "s390x-linux-gnu", "s390x-unknown-linux-gnu"}; + + + using std::begin; +-- +1.8.3.1 + diff --git a/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch b/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch new file mode 100644 index 0000000000000000000000000000000000000000..5683b7106c4f95af2a72249e17372537212d4084 --- /dev/null +++ b/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch @@ -0,0 +1,42 @@ +From 428ca4520a79ec5a6df9c6adc8b8069623868cdb Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 26 Jan 2018 11:38:04 -0800 +Subject: [PATCH] GCC compatibility: Ignore -fstack-clash-protection + +Reviewers: sylvestre.ledru + +Subscribers: cfe-commits + +Differential Revision: https://reviews.llvm.org/D42593 +--- + include/clang/Driver/Options.td | 1 + + test/Driver/clang_f_opts.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td +index 41f31cf..e9078a2 100644 +--- a/include/clang/Driver/Options.td ++++ b/include/clang/Driver/Options.td +@@ -2705,6 +2705,7 @@ defm single_precision_constant : BooleanFFlag<"single-precision-constant">, + Group; + defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group; + defm stack_check : BooleanFFlag<"stack-check">, Group; ++defm stack_clash_protection : BooleanFFlag<"stack-clash-protection">, Group; + defm strength_reduce : + BooleanFFlag<"strength-reduce">, Group; + defm tls_model : BooleanFFlag<"tls-model">, Group; +diff --git a/test/Driver/clang_f_opts.c b/test/Driver/clang_f_opts.c +index 5755c5d..8710ff4 100644 +--- a/test/Driver/clang_f_opts.c ++++ b/test/Driver/clang_f_opts.c +@@ -284,6 +284,7 @@ + // RUN: -ffriend-injection \ + // RUN: -fno-implement-inlines -fimplement-inlines \ + // RUN: -fstack-check \ ++// RUN: -fstack-clash-protection \ + // RUN: -fforce-addr \ + // RUN: -malign-functions=100 \ + // RUN: -malign-loops=100 \ +-- +1.8.3.1 + diff --git a/0001-gtest-reorg.patch b/0001-gtest-reorg.patch new file mode 100644 index 0000000000000000000000000000000000000000..4d8693a64d72438216e96421f8b035e7bebb660c --- /dev/null +++ b/0001-gtest-reorg.patch @@ -0,0 +1,42 @@ +From 3b2afecc227d652f84f883d4018d43971de6a311 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 21 Mar 2018 07:17:00 -0700 +Subject: [PATCH] gtest reorg + +--- + CMakeLists.txt | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 2eee8e6..01d290f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -142,12 +142,6 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.") + 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 +@@ -477,7 +471,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-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch b/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch new file mode 100644 index 0000000000000000000000000000000000000000..508434dbbba38453b151dab2b05ac553e9a8bf97 --- /dev/null +++ b/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch @@ -0,0 +1,27 @@ +From 06cde370a44393d65bae7f61279900b5838b4a2c Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Tue, 23 Jan 2018 18:59:20 -0800 +Subject: [PATCH] lit.cfg: Add hack so lit can find not and FileCheck + +--- + test/lit.cfg.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/test/lit.cfg.py b/test/lit.cfg.py +index 5323cfe..5b4184e 100644 +--- a/test/lit.cfg.py ++++ b/test/lit.cfg.py +@@ -39,7 +39,10 @@ config.test_source_root = os.path.dirname(__file__) + # test_exec_root: The root path where tests should be run. + config.test_exec_root = os.path.join(config.clang_obj_root, 'test') + ++old_llvm_tools_dir = llvm_config.config.llvm_tools_dir ++llvm_config.config.llvm_tools_dir = '/usr/lib@FEDORA_LLVM_LIB_SUFFIX@/llvm' + llvm_config.use_default_substitutions() ++llvm_config.config.llvm_tools_dir = old_llvm_tools_dir + + llvm_config.use_clang() + +-- +1.8.3.1 + diff --git a/cfe-7.0.0.src.tar.xz b/cfe-7.0.0.src.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..ccc1c48e66b4ae2839de433baab6c2ae21e67e1e Binary files /dev/null and b/cfe-7.0.0.src.tar.xz differ diff --git a/clang-config.h b/clang-config.h new file mode 100644 index 0000000000000000000000000000000000000000..c369b4551f785da6e2c586417caa36591a9eaee2 --- /dev/null +++ b/clang-config.h @@ -0,0 +1,9 @@ +#include + +#if __WORDSIZE == 32 +#include "config-32.h" +#elif __WORDSIZE == 64 +#include "config-64.h" +#else +#error "Unknown word size" +#endif diff --git a/clang-tools-extra-7.0.0.src.tar.xz b/clang-tools-extra-7.0.0.src.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..b35f09d0e14686561003de9701fd3e760b8f20e2 Binary files /dev/null and b/clang-tools-extra-7.0.0.src.tar.xz differ diff --git a/clang.spec b/clang.spec new file mode 100644 index 0000000000000000000000000000000000000000..12361f76c77dc1bc1d33b0accfbbafab1f7a0f14 --- /dev/null +++ b/clang.spec @@ -0,0 +1,262 @@ +%global maj_ver 7 +%global min_ver 0 +%global patch_ver 0 + +%global clang_srcdir cfe-%{version}.src +%global clang_tools_srcdir clang-tools-extra-%{version}.src + +Name: clang +Version: %{maj_ver}.%{min_ver}.%{patch_ver} +Release: 4 +License: NCSA +Summary: An "LLVM native" C/C++/Objective-C compiler +URL: http://llvm.org +Source0: http://releases.llvm.org/%{version}/%{clang_srcdir}.tar.xz +Source1: http://llvm.org/releases/%{version}/%{clang_tools_srcdir}.tar.xz +Source100: clang-config.h + +Patch0: 0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch +Patch1: 0001-GCC-compatibility-Ignore-fstack-clash-protection.patch +Patch2: 0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch +Patch4: 0001-gtest-reorg.patch +Patch5: 0001-Don-t-prefer-python2.7.patch +Patch6: 0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch +Patch7: 0001-Convert-scan-view-to-python3-using-2to3.patch + +BuildRequires: cmake gcc-c++ python-sphinx git +BuildRequires: llvm-devel = %{version} +BuildRequires: llvm-static = %{version} +BuildRequires: llvm-googletest = %{version} +BuildRequires: libxml2-devel perl-generators ncurses-devel emacs libatomic +BuildRequires: python2-lit python3-lit python2-rpm-macros python3-sphinx python3-devel + +Requires: libstdc++-devel gcc-c++ emacs-filesystem +provides: %{name}-libs +Obsoletes: %{name}-libs +Recommends: compiler-rt = %{version} +Recommends: libomp = %{version} +Provides: clang(major) = %{maj_ver} + +%description +The Clang project provides a language front-end and tooling infrastructure for\ +languages in the C language family (C, C++, Objective C/C++, OpenCL, CUDA, and\ +RenderScript) for the LLVM project. Both a GCC-compatible compiler driver (clang)\ +and an MSVC-compatible compiler driver (clang-cl.exe) are provided.\ + +%package devel +Summary: Development header files for clang. +Requires: %{name} = %{version}-%{release} +Requires: %{name}-tools-extra = %{version}-%{release} + +%description devel +Development header files for clang. + +%package help +Summary: Help manual for %{name} + +%description help +The %{name}-help package conatins man manual etc + +%package analyzer +Summary: A source code analysis framework +License: NCSA and MIT +BuildArch: noarch +Requires: %{name} = %{version}-%{release} +Requires: python2 + +%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. + +%package -n git-clang-format +Summary: clang-format integration for git +Requires: %{name} = %{version}-%{release} +Requires: git +Requires: python2 + +%description -n git-clang-format +clang-format integration for git. + +%package -n python2-clang +Summary: Python2 bindings for clang +Requires: %{name}-libs = %{version}-%{release} +Requires: python2 +%description -n python2-clang +%{summary}. + +%prep +%setup -T -q -b 1 -n %{clang_tools_srcdir} +pathfix.py -i %{__python3} -pn \ + clang-tidy/tool/*.py +pathfix.py -i %{__python2} -pn \ + include-fixer/find-all-symbols/tool/run-find-all-symbols.py + +%autosetup -n %{clang_srcdir} -p1 -Sgit +pathfix.py -i %{__python3} -pn \ + tools/clang-format/*.py \ + tools/clang-format/git-clang-format \ + utils/hmaptool/hmaptool \ + tools/scan-view/bin/scan-view +mv ../%{clang_tools_srcdir} tools/extra + +%build + +%if 0%{?__isa_bits} == 64 +sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@/64/g' test/lit.cfg.py +%else +sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@//g' test/lit.cfg.py +%endif + +mkdir -p _build +cd _build + +%ifarch %{arm} +%global optflags %(echo %{optflags} | sed 's/-g /-g1 /') +%endif + +%cmake .. \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DLLVM_CONFIG:FILEPATH=/usr/bin/llvm-config-%{__isa_bits} \ + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ +%if 0%{?__isa_bits} == 64 + -DLLVM_LIBDIR_SUFFIX=64 \ +%else + -DLLVM_LIBDIR_SUFFIX= \ +%endif + \ + -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_SPHINX=ON \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + \ + -DCLANG_BUILD_EXAMPLES:BOOL=OFF \ + -DCLANG_REPOSITORY_STRING="%{_vendor} %{version}-%{release}" \ + -DLIB_SUFFIX= + +%make_build + +%install +%make_install -C _build + +mkdir -p %{buildroot}%{python2_sitelib}/clang/ +install -p -m644 bindings/python/clang/* %{buildroot}%{python2_sitelib}/clang/ + +mv -v %{buildroot}%{_includedir}/clang/Config/config{,-%{__isa_bits}}.h +install -m 0644 %{SOURCE100} %{buildroot}%{_includedir}/clang/Config/config.h + +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 + +rm -vf %{buildroot}%{_datadir}/clang/clang-format-bbedit.applescript +rm -vf %{buildroot}%{_datadir}/clang/clang-format-sublime.py* + +rm -Rvf %{buildroot}%{_pkgdocdir} + +rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh + +ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} + +%check +cd _build +PATH=%{_libdir}/llvm:$PATH make %{?_smp_mflags} check-clang || \ +%ifarch %{arm} +: +%else +false +%endif + +%files +%{_bindir}/clang +%{_bindir}/clang++ +%{_bindir}/clang-%{maj_ver} +%{_bindir}/clang++-%{maj_ver} +%{_bindir}/clang-check +%{_bindir}/clang-cl +%{_bindir}/clang-cpp +%{_bindir}/clang-format +%{_bindir}/clang-func-mapping +%{_bindir}/clang-import-test +%{_bindir}/clang-offload-bundler +%{_bindir}/diagtool +%{_bindir}/hmaptool +%{_bindir}/c-index-test +%{_emacs_sitestartdir}/clang-format.el +%{_datadir}/clang/clang-format.py* +%{_datadir}/clang/clang-format-diff.py* +%{_libdir}/clang/ +%{_libdir}/*.so.* + +%files devel +%{_libdir}/*.so +%{_includedir}/clang/ +%{_includedir}/clang-c/ +%{_libdir}/cmake/* +%dir %{_datadir}/clang/ + +%files help +%{_mandir}/man1/clang.1.gz +%{_mandir}/man1/diagtool.1.gz + +%files analyzer +%{_bindir}/scan-view +%{_bindir}/scan-build +%{_bindir}/scan-build +%{_libexecdir}/ccc-analyzer +%{_libexecdir}/c++-analyzer +%{_datadir}/scan-view/ +%{_datadir}/scan-build/ +%{_mandir}/man1/scan-build.1.* + +%files tools-extra +%{_bindir}/clangd +%{_bindir}/clang-apply-replacements +%{_bindir}/clang-change-namespace +%{_bindir}/clang-include-fixer +%{_bindir}/clang-query +%{_bindir}/clang-refactor +%{_bindir}/clang-reorder-fields +%{_bindir}/clang-rename +%{_bindir}/clang-tidy +%{_bindir}/find-all-symbols +%{_bindir}/modularize +%{_emacs_sitestartdir}/clang-rename.el +%{_emacs_sitestartdir}/clang-include-fixer.el +%{_datadir}/clang/clang-include-fixer.py* +%{_datadir}/clang/clang-tidy-diff.py* +%{_datadir}/clang/run-clang-tidy.py* +%{_datadir}/clang/run-find-all-symbols.py* +%{_datadir}/clang/clang-rename.py* + +%files -n git-clang-format +%{_bindir}/git-clang-format + +%files -n python2-clang +%{python2_sitelib}/clang/ + +%changelog +* Tue Dec 17 2019 openEuler Buildteam - 7.0.0-4 +- Delete redundant info + +* Mon Dec 9 2019 openEuler Buildteam - 7.0.0-3 +- Package init