This commit is contained in:
sergesanspaille 2019-02-01 06:40:38 +00:00
parent b4f2f9a2ea
commit b53704a451
13 changed files with 47 additions and 978 deletions

1
.gitignore vendored
View File

@ -52,3 +52,4 @@
/clang-tools-extra-7.0.0.src.tar.xz
/clang-tools-extra-7.0.1.src.tar.xz
/cfe-7.0.1.src.tar.xz
/clang-tools-extra-8.0.0rc1.src.tar.xz

View File

@ -1,36 +0,0 @@
From f5f712dfcac6ee99381c5aca212950276f1743e8 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric@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

View File

@ -1,122 +0,0 @@
From b9d6dba608ab50d2e4a1b0f2318a5d1b390fc702 Mon Sep 17 00:00:00 2001
From: Vedant Kumar <vsk@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

View File

@ -1,52 +0,0 @@
From a1bccf89a02accab69b359ef004faa95257333c0 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,61 +0,0 @@
From 6430ef09aecb30bce588c2d7f35b2294d219c835 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,411 +0,0 @@
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

View File

@ -1,24 +0,0 @@
From d13bd5108e3471cc6f6203ba1c0c0e67323bbb12 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,120 +0,0 @@
From d84a971ba917569829b51fff6057e5fd0d85e402 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,27 +0,0 @@
From 06cde370a44393d65bae7f61279900b5838b4a2c Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,73 +0,0 @@
From c4d409e8481e402eb34739c6579bd9ffe383f3cd Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@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

View File

@ -1,17 +1,17 @@
From 3b2afecc227d652f84f883d4018d43971de6a311 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@redhat.com>
Date: Wed, 21 Mar 2018 07:17:00 -0700
Subject: [PATCH] gtest reorg
From 1f26a0284925859b72ee520ce74452d77d822409 Mon Sep 17 00:00:00 2001
From: serge-sans-paille <sguelton@redhat.com>
Date: Mon, 28 Jan 2019 19:12:27 +0000
Subject: [PATCH 2/2] [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
index c2016a45ca..48ea3c3bb9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -142,12 +142,6 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.")
@@ -157,12 +157,6 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.")
set(LLVM_UTILS_PROVIDED ON)
set(CLANG_TEST_DEPS FileCheck count not)
endif()
@ -24,7 +24,7 @@ index 2eee8e6..01d290f 100644
else()
# Seek installed Lit.
find_program(LLVM_LIT
@@ -477,7 +471,11 @@ endif()
@@ -507,7 +501,11 @@ endif()
if( CLANG_INCLUDE_TESTS )
@ -38,5 +38,5 @@ index 2eee8e6..01d290f 100644
list(APPEND CLANG_TEST_DEPS ClangUnitTests)
list(APPEND CLANG_TEST_PARAMS
--
1.8.3.1
2.19.2

View File

@ -1,9 +1,9 @@
%global compat_build 0
%global maj_ver 7
%global maj_ver 8
%global min_ver 0
%global patch_ver 1
#%%global rc_ver 3
%global patch_ver 0
%global rc_ver 1
%global clang_tools_binaries \
%{_bindir}/clangd \
@ -24,8 +24,8 @@
%{_bindir}/clang-check \
%{_bindir}/clang-cl \
%{_bindir}/clang-cpp \
%{_bindir}/clang-extdef-mapping \
%{_bindir}/clang-format \
%{_bindir}/clang-func-mapping \
%{_bindir}/clang-import-test \
%{_bindir}/clang-offload-bundler \
%{_bindir}/diagtool \
@ -45,6 +45,7 @@
%global pkg_libdir %{install_libdir}
%else
%global pkg_name clang
%global install_prefix /usr
%endif
%if 0%{?fedora} || 0%{?rhel} > 7
@ -53,6 +54,8 @@
%bcond_with python3
%endif
%global build_install_prefix %{buildroot}%{install_prefix}
%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
@ -68,23 +71,14 @@ Source0: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}
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
Patch4: 0002-gtest-reorg.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
BuildRequires: ninja-build
%if 0%{?compat_build}
BuildRequires: llvm%{maj_ver}.%{min_ver}-devel = %{version}
BuildRequires: llvm%{maj_ver}.%{min_ver}-static = %{version}
@ -109,7 +103,6 @@ BuildRequires: emacs
BuildRequires: python3-lit
%endif
BuildRequires: python2-rpm-macros
BuildRequires: python3-sphinx
BuildRequires: libatomic
@ -179,25 +172,27 @@ 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
# 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}%{?_isa} = %{version}-%{release}
Requires: git
Requires: python2
Requires: python3
%description -n git-clang-format
clang-format integration for git.
%package -n python2-clang
Summary: Python2 bindings for clang
%package -n python3-clang
Summary: Python3 bindings for clang
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: python2
%description -n python2-clang
Requires: python3
%description -n python3-clang
%{summary}.
%endif
@ -207,7 +202,6 @@ Requires: python2
%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 \
@ -215,14 +209,9 @@ pathfix.py -i %{__python3} -pn \
%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
%patch10 -p1 -b .bitfields
mv ../%{clang_tools_srcdir} tools/extra
@ -249,7 +238,7 @@ cd _build
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
%endif
%cmake .. \
%cmake .. -G Ninja \
-DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPYTHON_EXECUTABLE=%{__python3} \
@ -258,7 +247,7 @@ cd _build
-DCMAKE_INSTALL_PREFIX=%{install_prefix} \
-DCLANG_INCLUDE_TESTS:BOOL=OFF \
%else
-DLLVM_CONFIG:FILEPATH=/usr/bin/llvm-config-%{__isa_bits} \
-DLLVM_TOOLS_BINARY_DIR=%{_libdir}/llvm \
-DCLANG_INCLUDE_TESTS:BOOL=ON \
-DLLVM_EXTERNAL_LIT=%{_bindir}/lit \
-DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \
@ -281,13 +270,12 @@ cd _build
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
\
-DCLANG_BUILD_EXAMPLES:BOOL=OFF \
-DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}" \
-DLIB_SUFFIX=
-DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}"
make %{?_smp_mflags}
ninja -v
%install
make install DESTDIR=%{buildroot} -C _build
DESTDIR=%{buildroot} ninja install -C _build
%if 0%{?compat_build}
@ -304,8 +292,9 @@ 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/
mkdir -p %{buildroot}%{python3_sitelib}/clang/
install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/
%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang
# multilib fix
%multilib_fix_c_header --file %{_includedir}/clang/Config/config.h
@ -327,6 +316,9 @@ rm -Rvf %{buildroot}%{_pkgdocdir}
rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh
# Add clang++-{version} sylink
ln -s clang %{buildroot}%{_bindir}/clang++
ln -s clang %{buildroot}%{_bindir}/clang-cl
ln -s clang %{buildroot}%{_bindir}/clang-cpp
ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver}
# Create Manpage symlinks
@ -342,9 +334,8 @@ chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1*
%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 || \
PATH=%{_libdir}/llvm:$PATH ninja check-all -C _build || \
%ifarch %{arm}
:
%else
@ -417,11 +408,15 @@ false
%files -n git-clang-format
%{_bindir}/git-clang-format
%files -n python2-clang
%{python2_sitelib}/clang/
%files -n python3-clang
%{python3_sitelib}/clang/
%endif
%changelog
* Sat Feb 09 2019 sguelton@redhat.com - 8.0.0-1.rc1
- 8.0.0 Release candidate 1
* Tue Feb 05 2019 sguelton@redhat.com - 7.0.1-6
- Update patch for Python3 port of scan-view

View File

@ -1,2 +1 @@
SHA512 (clang-tools-extra-7.0.1.src.tar.xz) = f0aa73217560f952261201e9049310e4a038bc5d4b4120a4c5d13a42aacfbbfe702f1891745755e1702269751d3df19237271caecba43c810a6f50d35494c798
SHA512 (cfe-7.0.1.src.tar.xz) = df2f38153ebdc261bcfa6a569567f759bbb1a803192882a9d4eca55a47878166ac9057151a94ad341dc1281136547e4faa783a68070dfde2307b48cacd4b9194
SHA512 (clang-tools-extra-8.0.0rc1.src.tar.xz) = 292a65f2b49a0d8c1be078755cc5df682f9dd91ffd66a19900c615b05619009e292d6f6bc3b5c917629d870dbd2b59b0c9b56e2298b281d810f82103de2ec26a