The package rpms/clang7.0.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/clang7.0.git/commit/?id=917bd2389....
Change:
+%ifarch %{arm}
Thanks.
Full change:
============
commit 917bd23891f6882d9e815e1f72e130a23cdb2893
Author: serge-sans-paille <sguelton(a)redhat.com>
Date: Tue Feb 19 12:56:00 2019 +0000
Compatibility package - clang7.0
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0454c24
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/cfe-7.0.1.src.tar.xz
diff --git a/0001-CMake-Fix-pthread-handling-for-out-of-tree-builds.patch
b/0001-CMake-Fix-pthread-handling-for-out-of-tree-builds.patch
new file mode 100644
index 0000000..e6bb267
--- /dev/null
+++ b/0001-CMake-Fix-pthread-handling-for-out-of-tree-builds.patch
@@ -0,0 +1,36 @@
+From f5f712dfcac6ee99381c5aca212950276f1743e8 Mon Sep 17 00:00:00 2001
+From: Eric Fiselier <eric(a)efcs.ca>
+Date: Fri, 10 Feb 2017 01:59:20 +0000
+Subject: [PATCH] [CMake] Fix pthread handling for out-of-tree builds
+
+LLVM defines `PTHREAD_LIB` which is used by AddLLVM.cmake and various projects
+to correctly link the threading library when needed. Unfortunately
+`PTHREAD_LIB` is defined by LLVM's `config-ix.cmake` file which isn't installed
+and therefore can't be used when configuring out-of-tree builds. This causes
+such builds to fail since `pthread` isn't being correctly linked.
+
+This patch attempts to fix that problem by renaming and exporting
+`LLVM_PTHREAD_LIB` as part of`LLVMConfig.cmake`. I renamed `PTHREAD_LIB`
+because It seemed likely to cause collisions with downstream users of
+`LLVMConfig.cmake`.
+
+
+git-svn-id:
https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@294690
91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ include-fixer/plugin/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include-fixer/plugin/CMakeLists.txt b/include-fixer/plugin/CMakeLists.txt
+index 2799fd4..df792ea 100644
+--- a/include-fixer/plugin/CMakeLists.txt
++++ b/include-fixer/plugin/CMakeLists.txt
+@@ -9,5 +9,5 @@ add_clang_library(clangIncludeFixerPlugin
+ clangParse
+ clangSema
+ clangTooling
+- ${PTHREAD_LIB}
++ ${LLVM_PTHREAD_LIB}
+ )
+--
+1.8.3.1
+
diff --git a/0001-CodeGen-Handle-mixed-width-ops-in-mixed-sign-mul-wit.patch
b/0001-CodeGen-Handle-mixed-width-ops-in-mixed-sign-mul-wit.patch
new file mode 100644
index 0000000..4c07bad
--- /dev/null
+++ b/0001-CodeGen-Handle-mixed-width-ops-in-mixed-sign-mul-wit.patch
@@ -0,0 +1,122 @@
+From b9d6dba608ab50d2e4a1b0f2318a5d1b390fc702 Mon Sep 17 00:00:00 2001
+From: Vedant Kumar <vsk(a)apple.com>
+Date: Tue, 18 Dec 2018 21:05:03 +0000
+Subject: [PATCH] [CodeGen] Handle mixed-width ops in mixed-sign
+ mul-with-overflow lowering
+
+The special lowering for __builtin_mul_overflow introduced in r320902
+fixed an ICE seen when passing mixed-sign operands to the builtin.
+
+This patch extends the special lowering to cover mixed-width, mixed-sign
+operands. In a few common scenarios, calls to muloti4 will no longer be
+emitted.
+
+This should address the latest comments in PR34920 and work around the
+link failure seen in:
+
+
https://bugzilla.redhat.com/show_bug.cgi?id=1657544
+
+Testing:
+- check-clang
+- A/B output comparison with:
https://gist.github.com/vedantk/3eb9c88f82e5c32f2e590555b4af5081
+
+Differential Revision:
https://reviews.llvm.org/D55843
+
+git-svn-id:
https://llvm.org/svn/llvm-project/cfe/trunk@349542
91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ lib/CodeGen/CGBuiltin.cpp | 19 ++++++++++++++-----
+ test/CodeGen/builtins-overflow.c | 21 +++++++++++++++++++++
+ 2 files changed, 35 insertions(+), 5 deletions(-)
+
+diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp
+index 0770c20..4303a7a 100644
+--- a/lib/CodeGen/CGBuiltin.cpp
++++ b/lib/CodeGen/CGBuiltin.cpp
+@@ -1077,7 +1077,7 @@ static bool isSpecialMixedSignMultiply(unsigned BuiltinID,
+ WidthAndSignedness Op2Info,
+ WidthAndSignedness ResultInfo) {
+ return BuiltinID == Builtin::BI__builtin_mul_overflow &&
+- Op1Info.Width == Op2Info.Width && Op1Info.Width >= ResultInfo.Width
&&
++ std::max(Op1Info.Width, Op2Info.Width) >= ResultInfo.Width &&
+ Op1Info.Signed != Op2Info.Signed;
+ }
+
+@@ -1098,11 +1098,20 @@ EmitCheckedMixedSignMultiply(CodeGenFunction &CGF, const
clang::Expr *Op1,
+ const clang::Expr *UnsignedOp = Op1Info.Signed ? Op2 : Op1;
+ llvm::Value *Signed = CGF.EmitScalarExpr(SignedOp);
+ llvm::Value *Unsigned = CGF.EmitScalarExpr(UnsignedOp);
++ unsigned SignedOpWidth = Op1Info.Signed ? Op1Info.Width : Op2Info.Width;
++ unsigned UnsignedOpWidth = Op1Info.Signed ? Op2Info.Width : Op1Info.Width;
++
++ // One of the operands may be smaller than the other. If so, [s|z]ext it.
++ if (SignedOpWidth < UnsignedOpWidth)
++ Signed = CGF.Builder.CreateSExt(Signed, Unsigned->getType(),
"op.sext");
++ if (UnsignedOpWidth < SignedOpWidth)
++ Unsigned = CGF.Builder.CreateZExt(Unsigned, Signed->getType(),
"op.zext");
+
+ llvm::Type *OpTy = Signed->getType();
+ llvm::Value *Zero = llvm::Constant::getNullValue(OpTy);
+ Address ResultPtr = CGF.EmitPointerWithAlignment(ResultArg);
+ llvm::Type *ResTy = ResultPtr.getElementType();
++ unsigned OpWidth = std::max(Op1Info.Width, Op2Info.Width);
+
+ // Take the absolute value of the signed operand.
+ llvm::Value *IsNegative = CGF.Builder.CreateICmpSLT(Signed, Zero);
+@@ -1120,8 +1129,8 @@ EmitCheckedMixedSignMultiply(CodeGenFunction &CGF, const
clang::Expr *Op1,
+ if (ResultInfo.Signed) {
+ // Signed overflow occurs if the result is greater than INT_MAX or lesser
+ // than INT_MIN, i.e when |Result| > (INT_MAX + IsNegative).
+- auto IntMax = llvm::APInt::getSignedMaxValue(ResultInfo.Width)
+- .zextOrSelf(Op1Info.Width);
++ auto IntMax =
++ llvm::APInt::getSignedMaxValue(ResultInfo.Width).zextOrSelf(OpWidth);
+ llvm::Value *MaxResult =
+ CGF.Builder.CreateAdd(llvm::ConstantInt::get(OpTy, IntMax),
+ CGF.Builder.CreateZExt(IsNegative, OpTy));
+@@ -1139,9 +1148,9 @@ EmitCheckedMixedSignMultiply(CodeGenFunction &CGF, const
clang::Expr *Op1,
+ llvm::Value *Underflow = CGF.Builder.CreateAnd(
+ IsNegative, CGF.Builder.CreateIsNotNull(UnsignedResult));
+ Overflow = CGF.Builder.CreateOr(UnsignedOverflow, Underflow);
+- if (ResultInfo.Width < Op1Info.Width) {
++ if (ResultInfo.Width < OpWidth) {
+ auto IntMax =
+- llvm::APInt::getMaxValue(ResultInfo.Width).zext(Op1Info.Width);
++ llvm::APInt::getMaxValue(ResultInfo.Width).zext(OpWidth);
+ llvm::Value *TruncOverflow = CGF.Builder.CreateICmpUGT(
+ UnsignedResult, llvm::ConstantInt::get(OpTy, IntMax));
+ Overflow = CGF.Builder.CreateOr(Overflow, TruncOverflow);
+diff --git a/test/CodeGen/builtins-overflow.c b/test/CodeGen/builtins-overflow.c
+index 57f90eb..79a3186 100644
+--- a/test/CodeGen/builtins-overflow.c
++++ b/test/CodeGen/builtins-overflow.c
+@@ -339,6 +339,27 @@ long long test_smulll_overflow(long long x, long long y) {
+ return result;
+ }
+
++int test_mixed_sign_mul_overflow_sext_signed_op(int x, unsigned long long y) {
++// CHECK: @test_mixed_sign_mul_overflow_sext_signed_op
++// CHECK: [[SignedOp:%.*]] = sext i32 %0 to i64
++// CHECK: [[IsNeg:%.*]] = icmp slt i64 [[SignedOp]], 0
++ int result;
++ if (__builtin_mul_overflow(x, y, &result))
++ return LongErrorCode;
++ return result;
++}
++
++int test_mixed_sign_mul_overflow_zext_unsigned_op(long long x, unsigned y) {
++// CHECK: @test_mixed_sign_mul_overflow_zext_unsigned_op
++// CHECK: [[UnsignedOp:%.*]] = zext i32 %1 to i64
++// CHECK: [[IsNeg:%.*]] = icmp slt i64 %0, 0
++// CHECK: @llvm.umul.with.overflow.i64({{.*}}, i64 [[UnsignedOp]])
++ int result;
++ if (__builtin_mul_overflow(x, y, &result))
++ return LongErrorCode;
++ return result;
++}
++
+ int test_mixed_sign_mull_overflow(int x, unsigned y) {
+ // CHECK: @test_mixed_sign_mull_overflow
+ // CHECK: [[IsNeg:%.*]] = icmp slt i32 [[Op1:%.*]], 0
+--
+1.8.3.1
+
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 0000000..2c15ece
--- /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 <tstellar(a)redhat.com>
+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-run-find-all-symbols.py-to-python3-using-2to.patch
b/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
new file mode 100644
index 0000000..620f80d
--- /dev/null
+++ b/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
@@ -0,0 +1,61 @@
+From 6430ef09aecb30bce588c2d7f35b2294d219c835 Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar(a)redhat.com>
+Date: Mon, 26 Nov 2018 19:18:12 -0800
+Subject: [PATCH] Convert run-find-all-symbols.py to python3 using 2to3
+
+---
+ include-fixer/find-all-symbols/tool/run-find-all-symbols.py | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/include-fixer/find-all-symbols/tool/run-find-all-symbols.py
b/include-fixer/find-all-symbols/tool/run-find-all-symbols.py
+index 461d959..89a6cf5 100755
+--- a/include-fixer/find-all-symbols/tool/run-find-all-symbols.py
++++ b/include-fixer/find-all-symbols/tool/run-find-all-symbols.py
+@@ -27,7 +27,7 @@ import argparse
+ import json
+ import multiprocessing
+ import os
+-import Queue
++import queue
+ import shutil
+ import subprocess
+ import sys
+@@ -40,7 +40,7 @@ def find_compilation_database(path):
+ result = './'
+ while not os.path.isfile(os.path.join(result, path)):
+ if os.path.realpath(result) == '/':
+- print 'Error: could not find compilation database.'
++ print('Error: could not find compilation database.')
+ sys.exit(1)
+ result += '../'
+ return os.path.realpath(result)
+@@ -50,7 +50,7 @@ def MergeSymbols(directory, args):
+ """Merge all symbol files (yaml) in a given directaory into a single
file."""
+ invocation = [args.binary, '-merge-dir='+directory, args.saving_path]
+ subprocess.call(invocation)
+- print 'Merge is finished. Saving results in ' + args.saving_path
++ print('Merge is finished. Saving results in ' + args.saving_path)
+
+
+ def run_find_all_symbols(args, tmpdir, build_path, queue):
+@@ -96,7 +96,7 @@ def main():
+
+ try:
+ # Spin up a bunch of tidy-launching threads.
+- queue = Queue.Queue(max_task)
++ queue = queue.Queue(max_task)
+ for _ in range(max_task):
+ t = threading.Thread(target=run_find_all_symbols,
+ args=(args, tmpdir, build_path, queue))
+@@ -116,7 +116,7 @@ def main():
+ except KeyboardInterrupt:
+ # This is a sad hack. Unfortunately subprocess goes
+ # bonkers with ctrl-c and we start forking merrily.
+- print '\nCtrl-C detected, goodbye.'
++ print('\nCtrl-C detected, goodbye.')
+ os.kill(0, 9)
+
+
+--
+1.8.3.1
+
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 0000000..9384ce7
--- /dev/null
+++ b/0001-Convert-scan-view-to-python3-using-2to3.patch
@@ -0,0 +1,411 @@
+diff -r -u cfe-7.0.1.src.orig/tools/scan-view/bin/scan-view
cfe-7.0.1.src/tools/scan-view/bin/scan-view
+--- cfe-7.0.1.src.orig/tools/scan-view/bin/scan-view 2019-01-25 06:33:02.331385931 +0000
++++ cfe-7.0.1.src/tools/scan-view/bin/scan-view 2019-01-25 06:34:16.207696772 +0000
+@@ -7,9 +7,9 @@
+ 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 @@
+
+ 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 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 @@
+ 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 @@
+
+ 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 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 @@
+ # 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)
+
+diff -r -u cfe-7.0.1.src.orig/tools/scan-view/share/Reporter.py
cfe-7.0.1.src/tools/scan-view/share/Reporter.py
+--- cfe-7.0.1.src.orig/tools/scan-view/share/Reporter.py 2019-01-25 06:33:02.331385931
+0000
++++ cfe-7.0.1.src/tools/scan-view/share/Reporter.py 2019-01-25 06:34:16.262697004 +0000
+@@ -80,7 +80,7 @@
+ return 'Email'
+
+ def getParameters(self):
+- return map(lambda x:TextParameter(x),['To', 'From', 'SMTP
Server', 'SMTP Port'])
++ return [TextParameter(x) for x in ['To', 'From', 'SMTP
Server', 'SMTP Port']]
+
+ # Lifted from python email module examples.
+ def attachFile(self, outer, path):
+@@ -148,7 +148,7 @@
+ return 'Bugzilla'
+
+ def getParameters(self):
+- return map(lambda x:TextParameter(x),['URL','Product'])
++ return [TextParameter(x) for x in ['URL','Product']]
+
+ def fileReport(self, report, parameters):
+ raise NotImplementedError
+@@ -211,7 +211,7 @@
+
+ script =
os.path.join(os.path.dirname(__file__),'../share/scan-view/FileRadar.scpt')
+ args = ['osascript', script, component, componentVersion,
classification, personID, report.title,
+- report.description, diagnosis, config] + map(os.path.abspath,
report.files)
++ report.description, diagnosis, config] + list(map(os.path.abspath,
report.files))
+ # print >>sys.stderr, args
+ try:
+ p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+diff -r -u cfe-7.0.1.src.orig/tools/scan-view/share/ScanView.py
cfe-7.0.1.src/tools/scan-view/share/ScanView.py
+--- cfe-7.0.1.src.orig/tools/scan-view/share/ScanView.py 2019-01-25 06:33:02.331385931
+0000
++++ cfe-7.0.1.src/tools/scan-view/share/ScanView.py 2019-01-25 06:34:16.423697681 +0000
+@@ -1,10 +1,10 @@
+-import BaseHTTPServer
+-import SimpleHTTPServer
++import http.server
++import http.server
+ import os
+ import sys
+-import urllib, urlparse
++import urllib.request, urllib.parse, urllib.error, urllib.parse
+ import posixpath
+-import StringIO
++import io
+ import re
+ import shutil
+ import threading
+@@ -13,7 +13,8 @@
+ import itertools
+
+ import Reporter
+-import ConfigParser
++import configparser
++import importlib
+
+ ###
+ # Various patterns matched or replaced by server.
+@@ -96,25 +97,25 @@
+ result = None
+ try:
+ if self.server.options.debug:
+- print >>sys.stderr, "%s: SERVER: submitting
bug."%(sys.argv[0],)
++ print("%s: SERVER: submitting bug."%(sys.argv[0],),
file=sys.stderr)
+ self.status = self.reporter.fileReport(self.report, self.parameters)
+ self.success = True
+ time.sleep(3)
+ if self.server.options.debug:
+- print >>sys.stderr, "%s: SERVER: submission
complete."%(sys.argv[0],)
+- except Reporter.ReportFailure,e:
++ print("%s: SERVER: submission complete."%(sys.argv[0],),
file=sys.stderr)
++ except Reporter.ReportFailure as e:
+ self.status = e.value
+- except Exception,e:
+- s = StringIO.StringIO()
++ except Exception as e:
++ s = io.StringIO()
+ import traceback
+- print >>s,'<b>Unhandled
Exception</b><br><pre>'
++ print('<b>Unhandled Exception</b><br><pre>',
file=s)
+ traceback.print_exc(e,file=s)
+- print >>s,'</pre>'
++ print('</pre>', file=s)
+ self.status = s.getvalue()
+
+-class ScanViewServer(BaseHTTPServer.HTTPServer):
++class ScanViewServer(http.server.HTTPServer):
+ def __init__(self, address, handler, root, reporters, options):
+- BaseHTTPServer.HTTPServer.__init__(self, address, handler)
++ http.server.HTTPServer.__init__(self, address, handler)
+ self.root = root
+ self.reporters = reporters
+ self.options = options
+@@ -123,7 +124,7 @@
+ self.load_config()
+
+ def load_config(self):
+- self.config = ConfigParser.RawConfigParser()
++ self.config = configparser.RawConfigParser()
+
+ # Add defaults
+ self.config.add_section('ScanView')
+@@ -155,44 +156,44 @@
+ def halt(self):
+ self.halted = True
+ if self.options.debug:
+- print >>sys.stderr, "%s: SERVER: halting." % (sys.argv[0],)
++ print("%s: SERVER: halting." % (sys.argv[0],), file=sys.stderr)
+
+ def serve_forever(self):
+ while not self.halted:
+ if self.options.debug > 1:
+- print >>sys.stderr, "%s: SERVER: waiting..." %
(sys.argv[0],)
++ print("%s: SERVER: waiting..." % (sys.argv[0],),
file=sys.stderr)
+ try:
+ self.handle_request()
+- except OSError,e:
+- print 'OSError',e.errno
++ except OSError as e:
++ print('OSError',e.errno)
+
+ def finish_request(self, request, client_address):
+ if self.options.autoReload:
+ import ScanView
+- self.RequestHandlerClass = reload(ScanView).ScanViewRequestHandler
+- BaseHTTPServer.HTTPServer.finish_request(self, request, client_address)
++ self.RequestHandlerClass =
importlib.reload(ScanView).ScanViewRequestHandler
++ http.server.HTTPServer.finish_request(self, request, client_address)
+
+ def handle_error(self, request, client_address):
+ # Ignore socket errors
+ info = sys.exc_info()
+ if info and isinstance(info[1], socket.error):
+ if self.options.debug > 1:
+- print >>sys.stderr, "%s: SERVER: ignored socket error."
% (sys.argv[0],)
++ print("%s: SERVER: ignored socket error." % (sys.argv[0],),
file=sys.stderr)
+ return
+- BaseHTTPServer.HTTPServer.handle_error(self, request, client_address)
++ http.server.HTTPServer.handle_error(self, request, client_address)
+
+ # Borrowed from Quixote, with simplifications.
+ def parse_query(qs, fields=None):
+ if fields is None:
+ fields = {}
+- for chunk in filter(None, qs.split('&')):
++ for chunk in [_f for _f in qs.split('&') if _f]:
+ if '=' not in chunk:
+ name = chunk
+ value = ''
+ else:
+ name, value = chunk.split('=', 1)
+- name = urllib.unquote(name.replace('+', ' '))
+- value = urllib.unquote(value.replace('+', ' '))
++ name = urllib.parse.unquote(name.replace('+', ' '))
++ value = urllib.parse.unquote(value.replace('+', ' '))
+ item = fields.get(name)
+ if item is None:
+ fields[name] = [value]
+@@ -200,20 +201,20 @@
+ item.append(value)
+ return fields
+
+-class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
++class ScanViewRequestHandler(http.server.SimpleHTTPRequestHandler):
+ server_version = "ScanViewServer/" + __version__
+ dynamic_mtime = time.time()
+
+ def do_HEAD(self):
+ try:
+- SimpleHTTPServer.SimpleHTTPRequestHandler.do_HEAD(self)
+- except Exception,e:
++ http.server.SimpleHTTPRequestHandler.do_HEAD(self)
++ except Exception as e:
+ self.handle_exception(e)
+
+ def do_GET(self):
+ try:
+- SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
+- except Exception,e:
++ http.server.SimpleHTTPRequestHandler.do_GET(self)
++ except Exception as e:
+ self.handle_exception(e)
+
+ def do_POST(self):
+@@ -230,7 +231,7 @@
+ if f:
+ self.copyfile(f, self.wfile)
+ f.close()
+- except Exception,e:
++ except Exception as e:
+ self.handle_exception(e)
+
+ def log_message(self, format, *args):
+@@ -263,8 +264,8 @@
+
+ def handle_exception(self, exc):
+ import traceback
+- s = StringIO.StringIO()
+- print >>s, "INTERNAL ERROR\n"
++ s = io.StringIO()
++ print("INTERNAL ERROR\n", file=s)
+ traceback.print_exc(exc, s)
+ f = self.send_string(s.getvalue(), 'text/plain')
+ if f:
+@@ -410,8 +411,8 @@
+
+ import startfile
+ if self.server.options.debug:
+- print >>sys.stderr, '%s: SERVER: opening
"%s"'%(sys.argv[0],
+- file)
++ print('%s: SERVER: opening "%s"'%(sys.argv[0],
++ file), file=sys.stderr)
+
+ status = startfile.open(file)
+ if status:
+@@ -428,7 +429,7 @@
+ data = self.load_crashes()
+ # Don't allow empty reports.
+ if not data:
+- raise ValueError, 'No crashes detected!'
++ raise ValueError('No crashes detected!')
+ c = Context()
+ c.title = 'clang static analyzer failures'
+
+@@ -472,7 +473,7 @@
+ # Check that this is a valid report.
+ path = posixpath.join(self.server.root, 'report-%s.html' % report)
+ if not posixpath.exists(path):
+- raise ValueError, 'Invalid report ID'
++ raise ValueError('Invalid report ID')
+ keys = self.load_report(report)
+ c = Context()
+ c.title = keys.get('DESC','clang error (unrecognized')
+@@ -501,7 +502,7 @@
+ # report is None is used for crashes
+ try:
+ c = self.get_report_context(report)
+- except ValueError, e:
++ except ValueError as e:
+ return self.send_error(400, e.message)
+
+ title = c.title
+@@ -544,7 +545,7 @@
+ """%(r.getName(),display,r.getName(),options))
+ reporterSelections = '\n'.join(reporterSelections)
+ reporterOptionsDivs = '\n'.join(reporterOptions)
+- reportersArray = '[%s]'%(','.join([`r.getName()` for r in
self.server.reporters]))
++ reportersArray = '[%s]'%(','.join([repr(r.getName()) for r in
self.server.reporters]))
+
+ if c.files:
+ fieldSize = min(5, len(c.files))
+@@ -647,9 +648,9 @@
+ fields = {}
+ self.fields = fields
+
+- o = urlparse.urlparse(self.path)
++ o = urllib.parse.urlparse(self.path)
+ self.fields = parse_query(o.query, fields)
+- path = posixpath.normpath(urllib.unquote(o.path))
++ path = posixpath.normpath(urllib.parse.unquote(o.path))
+
+ # Split the components and strip the root prefix.
+ components = path.split('/')[1:]
+@@ -690,8 +691,8 @@
+ path = posixpath.join(self.server.root, relpath)
+
+ if self.server.options.debug > 1:
+- print >>sys.stderr, '%s: SERVER: sending path
"%s"'%(sys.argv[0],
+- path)
++ print('%s: SERVER: sending path "%s"'%(sys.argv[0],
++ path),
file=sys.stderr)
+ return self.send_path(path)
+
+ def send_404(self):
+@@ -735,7 +736,7 @@
+ mtime = self.dynamic_mtime
+ self.send_header("Last-Modified", self.date_time_string(mtime))
+ self.end_headers()
+- return StringIO.StringIO(s)
++ return io.StringIO(s)
+
+ def send_patched_file(self, path, ctype):
+ # Allow a very limited set of variables. This is pretty gross.
+diff -r -u cfe-7.0.1.src.orig/tools/scan-view/share/startfile.py
cfe-7.0.1.src/tools/scan-view/share/startfile.py
+--- cfe-7.0.1.src.orig/tools/scan-view/share/startfile.py 2019-01-25 06:33:02.331385931
+0000
++++ cfe-7.0.1.src/tools/scan-view/share/startfile.py 2019-01-25 06:34:16.457697824 +0000
+@@ -70,7 +70,7 @@
+ return not returncode
+
+ def open(self, filename):
+- if isinstance(filename, basestring):
++ if isinstance(filename, str):
+ cmdline = self.args + [filename]
+ else:
+ # assume it is a sequence
+@@ -110,7 +110,7 @@
+ # Platform support for Unix
+ else:
+
+- import commands
++ import subprocess
+
+ # @WARNING: use the private API of the webbrowser module
+ from webbrowser import _iscommand
+@@ -125,7 +125,7 @@
+ def detect_kde_version(self):
+ kde_version = None
+ try:
+- info = commands.getoutput('kde-config --version')
++ info = subprocess.getoutput('kde-config --version')
+
+ for line in info.splitlines():
+ if line.startswith('KDE'):
+@@ -158,7 +158,7 @@
+ desktop_environment = 'gnome'
+ else:
+ try:
+- info = commands.getoutput('xprop -root _DT_SAVE_MODE')
++ info = subprocess.getoutput('xprop -root _DT_SAVE_MODE')
+ if ' = "xfce4"' in info:
+ desktop_environment = 'xfce'
+ except (OSError, RuntimeError):
+@@ -189,7 +189,7 @@
+ return _controllers[controller_name].open
+
+ except KeyError:
+- if _controllers.has_key('xdg-open'):
++ if 'xdg-open' in _controllers:
+ return _controllers['xdg-open'].open
+ else:
+ return webbrowser.open
diff --git a/0001-Don-t-prefer-python2.7.patch b/0001-Don-t-prefer-python2.7.patch
new file mode 100644
index 0000000..28ca4e0
--- /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 <tstellar(a)redhat.com>
+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 0000000..b9d0aee
--- /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 <tstellar(a)redhat.com>
+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-Fix-uninitialized-value-in-ABIArgInfo.patch
b/0001-Fix-uninitialized-value-in-ABIArgInfo.patch
new file mode 100644
index 0000000..9755200
--- /dev/null
+++ b/0001-Fix-uninitialized-value-in-ABIArgInfo.patch
@@ -0,0 +1,38 @@
+From 565b9633ee68b311c1a954022869d9e99fee7286 Mon Sep 17 00:00:00 2001
+From: serge-sans-paille <sguelton(a)redhat.com>
+Date: Fri, 1 Feb 2019 06:39:13 +0000
+Subject: [PATCH] Fix uninitialized value in ABIArgInfo
+
+GCC-9 takes advantage of this uninitialized values to optimize stuff,
+which ends up in failing validation when compiling clang.
+---
+ include/clang/CodeGen/CGFunctionInfo.h | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/include/clang/CodeGen/CGFunctionInfo.h
b/include/clang/CodeGen/CGFunctionInfo.h
+index cf64e9f3ee..131eb38393 100644
+--- a/include/clang/CodeGen/CGFunctionInfo.h
++++ b/include/clang/CodeGen/CGFunctionInfo.h
+@@ -112,14 +112,13 @@ private:
+ }
+
+ ABIArgInfo(Kind K)
+- : TheKind(K), PaddingInReg(false), InReg(false), SuppressSRet(false) {
+- }
++ : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0),
++ TheKind(K), PaddingInReg(false), InAllocaSRet(false), IndirectByVal(false),
++ IndirectRealign(false), SRetAfterThis(false), InReg(false),
++ CanBeFlattened(false), SignExt(false), SuppressSRet(false) {}
+
+ public:
+- ABIArgInfo()
+- : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0),
+- TheKind(Direct), PaddingInReg(false), InReg(false),
+- SuppressSRet(false) {}
++ ABIArgInfo() : ABIArgInfo(Direct) {}
+
+ static ABIArgInfo getDirect(llvm::Type *T = nullptr, unsigned Offset = 0,
+ llvm::Type *Padding = nullptr,
+--
+2.19.2
+
diff --git a/0001-Workaround-GCC-9-bug-when-handling-bitfields.patch
b/0001-Workaround-GCC-9-bug-when-handling-bitfields.patch
new file mode 100644
index 0000000..eee6d3a
--- /dev/null
+++ b/0001-Workaround-GCC-9-bug-when-handling-bitfields.patch
@@ -0,0 +1,25 @@
+From 201cacaa74446657d884786d31411a98f6f9c17e Mon Sep 17 00:00:00 2001
+From: serge-sans-paille <sguelton(a)redhat.com>
+Date: Mon, 4 Feb 2019 21:25:45 +0000
+Subject: [PATCH] Workaround GCC 9 bug when handling bitfields.
+
+---
+ include/clang/Frontend/TextDiagnosticPrinter.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/clang/Frontend/TextDiagnosticPrinter.h
b/include/clang/Frontend/TextDiagnosticPrinter.h
+index 3cb4e02edf..d47d71930c 100644
+--- a/include/clang/Frontend/TextDiagnosticPrinter.h
++++ b/include/clang/Frontend/TextDiagnosticPrinter.h
+@@ -35,7 +35,7 @@ class TextDiagnosticPrinter : public DiagnosticConsumer {
+ /// A string to prefix to error messages.
+ std::string Prefix;
+
+- unsigned OwnsOutputStream : 1;
++ bool OwnsOutputStream;
+
+ public:
+ TextDiagnosticPrinter(raw_ostream &os, DiagnosticOptions *diags,
+--
+2.19.2
+
diff --git a/0001-gtest-reorg.patch b/0001-gtest-reorg.patch
new file mode 100644
index 0000000..4d8693a
--- /dev/null
+++ b/0001-gtest-reorg.patch
@@ -0,0 +1,42 @@
+From 3b2afecc227d652f84f883d4018d43971de6a311 Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar(a)redhat.com>
+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 0000000..508434d
--- /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 <tstellar(a)redhat.com>
+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/0001-lit.cfg-Remove-substitutions-for-clang-llvm-tools.patch
b/0001-lit.cfg-Remove-substitutions-for-clang-llvm-tools.patch
new file mode 100644
index 0000000..a0ed70d
--- /dev/null
+++ b/0001-lit.cfg-Remove-substitutions-for-clang-llvm-tools.patch
@@ -0,0 +1,73 @@
+From c4d409e8481e402eb34739c6579bd9ffe383f3cd Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar(a)redhat.com>
+Date: Fri, 16 Jun 2017 00:48:27 +0000
+Subject: [PATCH] lit.cfg: Remove substitutions for clang/llvm tools
+
+We were missing some subsitutions, for example 'not with no pipe, so
+there was a mismatch where some tests would run tools using the full
+path and others would search PATH for the tool.
+
+The new beahavior is that the lit tests will always search PATH for the
+tool. This should not change the current functionality, because the
+smae paths that were being used in substitutions are being added to
+PATH.
+---
+ test/lit.cfg | 42 ------------------------------------------
+ 1 file changed, 42 deletions(-)
+
+diff --git a/test/lit.cfg b/test/lit.cfg
+index 7d8bebf..9ded96c 100644
+--- a/test/lit.cfg
++++ b/test/lit.cfg
+@@ -303,48 +303,6 @@ config.substitutions.append(
+ (' %clang-cl ',
+ """*** invalid substitution, use '%clang_cl'.
***""") )
+
+-# For each occurrence of a clang tool name as its own word, replace it
+-# with the full path to the build directory holding that tool. This
+-# ensures that we are testing the tools just built and not some random
+-# tools that might happen to be in the user's PATH.
+-tool_dirs = os.path.pathsep.join((clang_tools_dir, llvm_tools_dir))
+-
+-# Regex assertions to reject neighbor hyphens/dots (seen in some tests).
+-# For example, don't match 'clang-check-' or '.clang-format'.
+-NoPreHyphenDot = r"(?<!(-|\.))"
+-NoPostHyphenDot = r"(?!(-|\.))"
+-NoPostBar = r"(?!(/|\\))"
+-
+-tool_patterns = [r"\bFileCheck\b",
+- r"\bc-index-test\b",
+- NoPreHyphenDot + r"\bclang-check\b" + NoPostHyphenDot,
+- NoPreHyphenDot + r"\bclang-format\b" + NoPostHyphenDot,
+- # FIXME: Some clang test uses opt?
+- NoPreHyphenDot + r"\bopt\b" + NoPostBar + NoPostHyphenDot,
+- # Handle these specially as they are strings searched
+- # for during testing.
+- r"\| \bcount\b",
+- r"\| \bnot\b"]
+-
+-if config.clang_examples:
+- tool_patterns.append(NoPreHyphenDot + r"\bclang-interpreter\b" +
NoPostHyphenDot)
+-
+-for pattern in tool_patterns:
+- # Extract the tool name from the pattern. This relies on the tool
+- # name being surrounded by \b word match operators. If the
+- # pattern starts with "| ", include it in the string to be
+- # substituted.
+- tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
+- pattern)
+- tool_pipe = tool_match.group(2)
+- tool_name = tool_match.group(4)
+- tool_path = lit.util.which(tool_name, tool_dirs)
+- if not tool_path:
+- # Warn, but still provide a substitution.
+- lit_config.note('Did not find ' + tool_name + ' in ' +
tool_dirs)
+- tool_path = clang_tools_dir + '/' + tool_name
+- config.substitutions.append((pattern, tool_pipe + tool_path))
+-
+ ###
+
+ # Set available features we allow tests to conditionalize on.
+--
+2.9.3
+
diff --git a/README.md b/README.md
deleted file mode 100644
index be0cc36..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# clang7.0
-
-The clang7.0 package
\ No newline at end of file
diff --git a/clang.spec b/clang.spec
new file mode 100644
index 0000000..4f500d1
--- /dev/null
+++ b/clang.spec
@@ -0,0 +1,695 @@
+%global compat_build 1
+
+%global maj_ver 7
+%global min_ver 0
+%global patch_ver 1
+#%%global rc_ver 3
+
+%global clang_tools_binaries \
+ %{_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
+
+%global clang_binaries \
+ %{_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
+
+%if 0%{?compat_build}
+%global pkg_name clang%{maj_ver}.%{min_ver}
+# Install clang to same prefix as llvm, so that apps that use llvm-config
+# will also be able to find clang libs.
+%global install_prefix %{_libdir}/llvm%{maj_ver}.%{min_ver}
+%global install_bindir %{install_prefix}/bin
+%global install_includedir %{install_prefix}/include
+%global install_libdir %{install_prefix}/lib
+
+%global pkg_bindir %{install_bindir}
+%global pkg_includedir %{_includedir}/llvm%{maj_ver}.%{min_ver}
+%global pkg_libdir %{install_libdir}
+%else
+%global pkg_name clang
+%endif
+
+%if 0%{?fedora} || 0%{?rhel} > 7
+%bcond_without python3
+%else
+%bcond_with python3
+%endif
+
+%global clang_srcdir cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src
+%global clang_tools_srcdir clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src
+
+Name: %pkg_name
+Version: %{maj_ver}.%{min_ver}.%{patch_ver}
+Release: 7%{?rc_ver:.rc%{rc_ver}}%{?dist}
+Summary: A C language family front-end for LLVM
+
+License: NCSA
+URL:
http://llvm.org
+Source0: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}}/%{clang_srcdir}.tar.xz
+%if !0%{?compat_build}
+Source1: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz
+%endif
+
+Patch0: 0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.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
+#rhbz#1657544
+Patch8: 0001-CodeGen-Handle-mixed-width-ops-in-mixed-sign-mul-wit.patch
+Patch9: 0001-Fix-uninitialized-value-in-ABIArgInfo.patch
+Patch10: 0001-Workaround-GCC-9-bug-when-handling-bitfields.patch
+
+# clang-tools-extra patches
+Patch100: 0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
+
+BuildRequires: gcc
+BuildRequires: gcc-c++
+BuildRequires: cmake
+%if 0%{?compat_build}
+BuildRequires: llvm%{maj_ver}.%{min_ver}-devel = %{version}
+BuildRequires: llvm%{maj_ver}.%{min_ver}-static = %{version}
+%else
+BuildRequires: llvm-devel = %{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}
+%endif
+
+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
+
+# These build dependencies are required for the test suite.
+%if %with python3
+# The testsuite uses /usr/bin/lit which is part of the python3-lit package.
+BuildRequires: python3-lit
+%endif
+
+BuildRequires: python2-rpm-macros
+BuildRequires: python3-sphinx
+BuildRequires: libatomic
+
+# We need python3-devel for pathfix.py.
+BuildRequires: python3-devel
+
+# Needed for %%multilib_fix_c_header
+BuildRequires: multilib-rpm-config
+
+Requires: %{name}-libs%{?_isa} = %{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++
+
+Requires: emacs-filesystem
+
+Provides: clang(major) = %{maj_ver}
+
+%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.
+
+%package libs
+Summary: Runtime library for clang
+Recommends: compiler-rt%{?_isa} = %{version}
+Recommends: libomp%{_isa} = %{version}
+
+%description libs
+Runtime library for clang.
+
+%package devel
+Summary: Development header files for clang
+Requires: %{name}%{?_isa} = %{version}-%{release}
+# The clang CMake files reference tools from clang-tools-extra.
+Requires: %{name}-tools-extra%{?_isa} = %{version}-%{release}
+
+%description devel
+Development header files for clang.
+
+%if !0%{?compat_build}
+%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%{?_isa} = %{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 python2
+# 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}%{?_isa} = %{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%{?_isa} = %{version}-%{release}
+Requires: python2
+%description -n python2-clang
+%{summary}.
+
+%endif
+
+
+%prep
+%if 0%{?compat_build}
+%autosetup -n %{clang_srcdir} -p1
+%else
+%setup -T -q -b 1 -n %{clang_tools_srcdir}
+
+%patch100 -p1 -b .find-all-symbols-py3
+
+pathfix.py -i %{__python3} -pn \
+ clang-tidy/tool/*.py \
+ include-fixer/find-all-symbols/tool/run-find-all-symbols.py
+
+%setup -q -n %{clang_srcdir}
+
+%patch0 -p1 -b .lit-search-path
+%patch2 -p1 -b .vendor-gcc
+%patch4 -p1 -b .gtest
+%patch5 -p1 -b .no-python2
+%patch6 -p1 -b .clang-format-diff-py3
+%patch7 -p1 -b .scan-view-py3
+%patch8 -p1 -b .mul-overflow-fix
+%patch9 -p1 -b .abi-arginfo
+
+mv ../%{clang_tools_srcdir} tools/extra
+
+pathfix.py -i %{__python3} -pn \
+ tools/clang-format/*.py \
+ tools/clang-format/git-clang-format \
+ utils/hmaptool/hmaptool \
+ tools/scan-view/bin/scan-view
+%endif
+
+%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}
+# Decrease debuginfo verbosity to reduce memory consumption during final library linking
+%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
+%endif
+
+%cmake .. \
+ -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DPYTHON_EXECUTABLE=%{__python3} \
+%if 0%{?compat_build}
+ -DLLVM_CONFIG:FILEPATH=%{_bindir}/llvm-config-%{maj_ver}.%{min_ver}-%{__isa_bits} \
+ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \
+ -DCLANG_INCLUDE_TESTS:BOOL=OFF \
+%else
+ -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
+%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="%{?fedora:Fedora}%{?rhel:Red Hat}
%{version}-%{release}" \
+ -DLIB_SUFFIX=
+
+make %{?_smp_mflags}
+
+%install
+make install DESTDIR=%{buildroot} -C _build
+
+%if 0%{?compat_build}
+
+# Remove binaries/other files
+rm -Rf %{buildroot}%{install_bindir}
+rm -Rf %{buildroot}%{install_prefix}/share
+rm -Rf %{buildroot}%{install_prefix}/libexec
+
+# Move include files
+mkdir -p %{buildroot}%{pkg_includedir}
+mv %{buildroot}/%{install_includedir}/clang %{buildroot}/%{pkg_includedir}/
+mv %{buildroot}/%{install_includedir}/clang-c %{buildroot}/%{pkg_includedir}/
+
+%else
+
+# install clang python bindings
+mkdir -p %{buildroot}%{python2_sitelib}/clang/
+install -p -m644 bindings/python/clang/* %{buildroot}%{python2_sitelib}/clang/
+
+# multilib fix
+%multilib_fix_c_header --file %{_includedir}/clang/Config/config.h
+
+# 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}%{_pkgdocdir}
+
+# TODO: What are the Fedora guidelines for packaging bash autocomplete files?
+rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh
+
+# Add clang++-{version} sylink
+ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver}
+
+# 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
+
+# Fix permission
+chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1*
+
+%endif
+
+%check
+%if !0%{?compat_build}
+# requires lit.py from LLVM utilities
+cd _build
+# FIXME: Fix failing ARM tests
+PATH=%{_libdir}/llvm:$PATH make %{?_smp_mflags} check-all || \
+%ifarch %{arm}
+:
+%else
+false
+%endif
+
+%endif
+
+
+%if !0%{?compat_build}
+%files
+%{clang_binaries}
+%{_bindir}/c-index-test
+%{_mandir}/man1/clang.1.gz
+%{_mandir}/man1/clang++.1.gz
+%{_mandir}/man1/clang-%{maj_ver}.1.gz
+%{_mandir}/man1/clang++-%{maj_ver}.1.gz
+%{_mandir}/man1/diagtool.1.gz
+%{_emacs_sitestartdir}/clang-format.el
+%{_datadir}/clang/clang-format.py*
+%{_datadir}/clang/clang-format-diff.py*
+%endif
+
+%files libs
+%if !0%{?compat_build}
+%{_libdir}/clang/
+%{_libdir}/*.so.*
+%else
+%{pkg_libdir}/*.so.*
+%{pkg_libdir}/clang/%{version}
+%endif
+
+%files devel
+%if !0%{?compat_build}
+%{_libdir}/*.so
+%{_includedir}/clang/
+%{_includedir}/clang-c/
+%{_libdir}/cmake/*
+%dir %{_datadir}/clang/
+%else
+%{pkg_libdir}/*.so
+%{pkg_includedir}/clang/
+%{pkg_includedir}/clang-c/
+%{pkg_libdir}/cmake/
+%endif
+
+%if !0%{?compat_build}
+%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
+%{clang_tools_binaries}
+%{_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/
+
+%endif
+%changelog
+* Mon Feb 18 2019 sguelton(a)redhat.com - 7.0.1-7
+- Sync specfile with llvm7.0 package
+
+* Tue Feb 05 2019 sguelton(a)redhat.com - 7.0.1-6
+- Update patch for Python3 port of scan-view
+
+* Tue Feb 05 2019 sguelton(a)redhat.com - 7.0.1-5
+- Working CI test suite
+
+* Mon Feb 04 2019 sguelton(a)redhat.com - 7.0.1-4
+- Workaround gcc-9 bug when compiling bitfields
+
+* Fri Feb 01 2019 sguelton(a)redhat.com - 7.0.1-3
+- Fix uninitialized error detected by gcc-9
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng(a)fedoraproject.org> -
7.0.1-2.1
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Wed Dec 19 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.1-2
+- Fix for rhbz#1657544
+
+* Tue Dec 18 2018 sguelton(a)redhat.com - 7.0.1-1
+- 7.0.1
+
+* Tue Dec 18 2018 sguelton(a)redhat.com - 7.0.0-10
+- Install proper manpage symlinks for clang/clang++ versions
+
+* Fri Dec 14 2018 sguelton(a)redhat.com - 7.0.0-9
+- No longer Ignore -fstack-clash-protection option
+
+* Tue Dec 04 2018 sguelton(a)redhat.com - 7.0.0-8
+- Ensure rpmlint passes on specfile
+
+* Fri Nov 30 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-7
+- Drop python2 dependency from clang-tools-extra
+
+* Wed Nov 21 2018 sguelton(a)redhat.com - 7.0.0-6
+- Prune unneeded reference to llvm-test-suite sub-package
+
+* Mon Nov 19 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-5
+- Run 'make check-all' instead of 'make check-clang'
+
+* Mon Nov 19 2018 sergesanspaille <sguelton(a)redhat.com> - 7.0.0-4
+- Avoid Python2 + Python3 dependency for clang-analyzer
+
+* Mon Nov 05 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-3
+- User helper macro to fixup config.h for multilib
+
+* Tue Oct 02 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-2
+- Use correct shebang substitution for python scripts
+
+* Mon Sep 24 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-1
+- 7.0.0 Release
+
+* Wed Sep 19 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.16.rc3
+- Move builtin headers into clang-libs sub-package
+
+* Wed Sep 19 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.15.rc3
+- Remove ambiguous python shebangs
+
+* Thu Sep 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.14.rc3
+- Move unversioned shared objects to devel package
+
+* Thu Sep 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.13.rc3
+- Rebuild with new llvm-devel that disables rpath on install
+
+* Thu Sep 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.12.rc3
+- Fix clang++-7 symlink
+
+* Wed Sep 12 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.11.rc3
+- 7.0.0-rc3 Release
+
+* Mon Sep 10 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.10.rc2
+- Drop siod from llvm-test-suite
+
+* Fri Sep 07 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.9.rc2
+- Drop python2 dependency from clang package
+
+* Thu Sep 06 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.8.rc2
+- Drop all uses of python2 from lit tests
+
+* Sat Sep 01 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.7.rc2
+- Add Fedora specific version string
+
+* Tue Aug 28 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.6.rc2
+- 7.0.0-rc2 Release
+
+* Tue Aug 28 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.5.rc1
+- Enable unit tests
+
+* Fri Aug 17 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.4.rc1
+- Move llvm-test-suite into a sub-package
+
+* Fri Aug 17 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.3.rc1
+- Recommend the same version of compiler-rt
+
+* Wed Aug 15 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.2.rc1
+- Rebuild for f30
+
+* Mon Aug 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.1.rc1
+- 7.0.0-rc1 Release
+
+* Mon Jul 23 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-3
+- Sync spec file with the clang6.0 package
+
+* Thu Jul 12 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.1-2
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Tue Jun 26 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-1
+- 6.0.1 Release
+
+* Wed Jun 13 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.2.rc2
+- 6.0.1-rc2
+
+* Fri May 11 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.1.rc1
+- 6.0.1-rc1 Release
+
+* Fri Mar 23 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-5
+- Add a clang++-{version} symlink rhbz#1534098
+
+* Thu Mar 22 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-4
+- Use correct script for running lit tests
+
+* Wed Mar 21 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-3
+- Fix toolchain detection so we don't default to using cross-compilers:
+ rhbz#1482491
+
+* Mon Mar 12 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-2
+- Add Provides: clang(major) rhbz#1547444
+
+* Fri Mar 09 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-1
+- 6.0.0 Release
+
+* Mon Feb 12 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.6.rc2
+- 6.0.0-rc2 Release
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> -
6.0.0-0.5.rc1
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Thu Feb 01 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.4.rc1
+- Package python helper scripts for tools
+
+* Fri Jan 26 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.3.rc1
+- Ignore -fstack-clash-protection option instead of giving an error
+
+* Fri Jan 26 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.2.rc1
+- Package emacs integration files
+
+* Wed Jan 24 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.1.rc1
+- 6.0.0-rc1 Release
+
+* Wed Jan 24 2018 Tom Stellard <tstellar(a)redhat.com> - 5.0.1-3
+- Rebuild against llvm5.0 compatibility package
+- rhbz#1538231
+
+* Wed Jan 03 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 5.0.1-2
+- Update Python 2 dependency declarations to new packaging standards
+ (See
https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
+
+* Wed Dec 20 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.1-1
+- 5.0.1 Release
+
+* Wed Dec 13 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-3
+- Make compiler-rt a weak dependency and add a weak dependency on libomp
+
+* Mon Nov 06 2017 Merlin Mathesius <mmathesi(a)redhat.com> - 5.0.0-2
+- Cleanup spec file conditionals
+
+* Mon Oct 16 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-1
+- 5.0.0 Release
+
+* Wed Oct 04 2017 Rex Dieter <rdieter(a)fedoraproject.org> - 4.0.1-6
+- python2-clang subpkg (#1490997)
+- tools-extras: tighten (internal) -libs dep
+- %%install: avoid cd
+
+* Wed Aug 30 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-5
+- Add Requires: python for git-clang-format
+
+* Sun Aug 06 2017 Bjrn Esser <besser82(a)fedoraproject.org> - 4.0.1-4
+- Rebuilt for AutoReq cmake-filesystem
+
+* Wed Aug 02 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 4.0.1-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 4.0.1-2
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri Jun 23 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-1
+- 4.0.1 Release.
+
+* Fri Jun 16 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-8
+- Enable make check-clang
+
+* Mon Jun 12 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-7
+- Package git-clang-format
+
+* Thu Jun 08 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-6
+- Generate man pages
+
+* Thu Jun 08 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-5
+- Ignore test-suite failures until all arches are fixed.
+
+* Mon Apr 03 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-4
+- Run llvm test-suite
+
+* Mon Mar 27 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-3
+- Enable eh/rtti, which are required by lldb.
+
+* Fri Mar 24 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-2
+- Fix clang-tools-extra build
+- Fix install
+
+* Thu Mar 23 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-1
+- clang 4.0.0 final release
+
+* Mon Mar 20 2017 David Goerger <david.goerger(a)yale.edu> - 3.9.1-3
+- add clang-tools-extra rhbz#1328091
+
+* Thu Mar 16 2017 Tom Stellard <tstellar(a)redhat.com> - 3.9.1-2
+- Enable build-id by default rhbz#1432403
+
+* Thu Mar 02 2017 Dave Airlie <airlied(a)redhat.com> - 3.9.1-1
+- clang 3.9.1 final release
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.9.0-4
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Mon Nov 14 2016 Nathaniel McCallum <npmccallum(a)redhat.com> - 3.9.0-3
+- Add Requires: compiler-rt to clang-libs.
+- Without this, compiling with certain CFLAGS breaks.
+
+* Tue Nov 1 2016 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.9.0-2
+- Rebuild for new arches
+
+* Fri Oct 14 2016 Dave Airlie <airlied(a)redhat.com> - 3.9.0-1
+- clang 3.9.0 final release
+
+* Fri Jul 01 2016 Stephan Bergmann <sbergman(a)redhat.com> - 3.8.0-2
+- Resolves: rhbz#1282645 add GCC abi_tag support
+
+* Thu Mar 10 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-1
+- clang 3.8.0 final release
+
+* Thu Mar 03 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-0.4
+- clang 3.8.0rc3
+
+* Wed Feb 24 2016 Dave Airlie <airlied(a)redhat.com> - 3.8.0-0.3
+- package all libs into clang-libs.
+
+* Wed Feb 24 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-0.2
+- enable dynamic linking of clang against llvm
+
+* Thu Feb 18 2016 Dave Airlie <airlied(a)redhat.com> - 3.8.0-0.1
+- clang 3.8.0rc2
+
+* Fri Feb 12 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-4
+- rebuild against latest llvm packages
+- add BuildRequires llvm-static
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.1-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Thu Jan 28 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-2
+- just accept clang includes moving to /usr/lib64, upstream don't let much else
happen
+
+* Thu Jan 28 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-1
+- initial build in Fedora.
+
+* Tue Oct 06 2015 Jan Vcelak <jvcelak(a)fedoraproject.org> 3.7.0-100
+- initial version using cmake build system
diff --git a/sources b/sources
new file mode 100644
index 0000000..110ceb3
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (cfe-7.0.1.src.tar.xz) =
df2f38153ebdc261bcfa6a569567f759bbb1a803192882a9d4eca55a47878166ac9057151a94ad341dc1281136547e4faa783a68070dfde2307b48cacd4b9194