diff --git a/.clang.metadata b/.clang.metadata
index 0ea63d6..87814fb 100644
--- a/.clang.metadata
+++ b/.clang.metadata
@@ -1,2 +1,2 @@
-427e12762836d808583fb4149c033d02de0a8db2 SOURCES/cfe-7.0.1.src.tar.xz
-6f4048482c4cf1818133120565c2dcd1d3a62747 SOURCES/clang-tools-extra-7.0.1.src.tar.xz
+e1d7f274c4fd623f19255cc52c6d7b39cf8769ee SOURCES/cfe-8.0.1.src.tar.xz
+0174e060781fc01e5f97f2ff9b51a03165d7b37a SOURCES/clang-tools-extra-8.0.1.src.tar.xz
diff --git a/.gitignore b/.gitignore
index 061149c..1d9c55c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-SOURCES/cfe-7.0.1.src.tar.xz
-SOURCES/clang-tools-extra-7.0.1.src.tar.xz
+SOURCES/cfe-8.0.1.src.tar.xz
+SOURCES/clang-tools-extra-8.0.1.src.tar.xz
diff --git a/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch b/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch
deleted file mode 100644
index 2c15ece..0000000
--- a/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch
+++ /dev/null
@@ -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
-
diff --git a/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch b/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
deleted file mode 100644
index 620f80d..0000000
--- a/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
+++ /dev/null
@@ -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
-
diff --git a/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch b/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch
deleted file mode 100644
index 2534c6e..0000000
--- a/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From c760f8d703af0c67774681b5a259d5dd3a1e5a77 Mon Sep 17 00:00:00 2001
-From: Tom Stellard <tstellar@redhat.com>
-Date: Wed, 19 Sep 2018 08:53:10 -0700
-Subject: [PATCH] Convert scan-view to python3 using 2to3
-
----
- tools/scan-view/bin/scan-view | 24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/tools/scan-view/bin/scan-view b/tools/scan-view/bin/scan-view
-index 1b6e8ba..ca3dac5 100755
---- a/tools/scan-view/bin/scan-view
-+++ b/tools/scan-view/bin/scan-view
-@@ -7,9 +7,9 @@ import sys
- import imp
- import os
- import posixpath
--import thread
-+import _thread
- import time
--import urllib
-+import urllib.request, urllib.parse, urllib.error
- import webbrowser
- 
- # How long to wait for server to start.
-@@ -27,7 +27,7 @@ kMaxPortsToTry = 100
- 
- def url_is_up(url):
-     try:
--        o = urllib.urlopen(url)
-+        o = urllib.request.urlopen(url)
-     except IOError:
-         return False
-     o.close()
-@@ -35,7 +35,7 @@ def url_is_up(url):
- 
- 
- def start_browser(port, options):
--    import urllib
-+    import urllib.request, urllib.parse, urllib.error
-     import webbrowser
- 
-     url = 'http://%s:%d' % (options.host, port)
-@@ -52,10 +52,10 @@ def start_browser(port, options):
-             sys.stderr.flush()
-         time.sleep(kSleepTimeout)
-     else:
--        print >> sys.stderr, 'WARNING: Unable to detect that server started.'
-+        print('WARNING: Unable to detect that server started.', file=sys.stderr)
- 
-     if options.debug:
--        print >> sys.stderr, '%s: Starting webbrowser...' % sys.argv[0]
-+        print('%s: Starting webbrowser...' % sys.argv[0], file=sys.stderr)
-     webbrowser.open(url)
- 
- 
-@@ -69,9 +69,9 @@ def run(port, options, root):
- 
-     import ScanView
-     try:
--        print 'Starting scan-view at: http://%s:%d' % (options.host,
--                                                       port)
--        print '  Use Ctrl-C to exit.'
-+        print('Starting scan-view at: http://%s:%d' % (options.host,
-+                                                       port))
-+        print('  Use Ctrl-C to exit.')
-         httpd = ScanView.create_server((options.host, port),
-                                        options, root)
-         httpd.serve_forever()
-@@ -80,9 +80,9 @@ def run(port, options, root):
- 
- 
- def port_is_open(port):
--    import SocketServer
-+    import socketserver
-     try:
--        t = SocketServer.TCPServer((kDefaultHost, port), None)
-+        t = socketserver.TCPServer((kDefaultHost, port), None)
-     except:
-         return False
-     t.server_close()
-@@ -135,7 +135,7 @@ def main():
-     # Kick off thread to wait for server and start web browser, if
-     # requested.
-     if args.startBrowser:
--        t = thread.start_new_thread(start_browser, (port, args))
-+        t = _thread.start_new_thread(start_browser, (port, args))
- 
-     run(port, args, args.root)
- 
--- 
-1.8.3.1
-
diff --git a/SOURCES/0001-Don-t-prefer-python2.7.patch b/SOURCES/0001-Don-t-prefer-python2.7.patch
deleted file mode 100644
index fb9963d..0000000
--- a/SOURCES/0001-Don-t-prefer-python2.7.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 3f9cebe235dac01f22c8edd84a2d5d075cb90a17 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 d4f67f1..f82de1e 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/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch b/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
index b9d0aee..66e623e 100644
--- a/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
+++ b/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
@@ -23,65 +23,65 @@ Differential Revision: https://reviews.llvm.org/D42608
  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(
+@@ -1870,8 +1870,8 @@
    // 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-suse-linux", "aarch64-linux-android"};
++      "aarch64-redhat-linux", "aarch64-suse-linux", "aarch64-linux-android",
 +      "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"};
- 
+@@ -1879,31 +1879,34 @@
    static const char *const ARMLibDirs[] = {"/lib"};
-   static const char *const ARMTriples[] = {"arm-linux-gnueabi"};
+   static const char *const ARMTriples[] = {"arm-linux-gnueabi",
+                                            "arm-linux-androideabi"};
 -  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",
-+  };
++                                             "arm-linux-gnueabihf"};
    static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
    static const char *const ARMebHFTriples[] = {
-@@ -1830,19 +1831,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+-      "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi"};
++      "armebv7hl-redhat-linux-gnueabi", "armeb-linux-gnueabihf"};
  
    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"};
++      "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-linux-android"};
++      "x86_64-amazon-linux",    "x86_64-linux-android",
++      "x86_64-linux-gnu",       "x86_64-unknown-linux-gnu",
++      "x86_64-pc-linux-gnu"
++  };
    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"};
++      "i386-redhat-linux6E",   "i686-redhat-linux",
+       "i586-redhat-linux",    "i386-redhat-linux",     "i586-suse-linux",
+-      "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu",
++      "i486-slackware-linux", "i686-montavista-linux", 
++      "i686-linux-gnu",       "i686-pc-linux-gnu",     "i486-linux-gnu",
++      "i386-linux-gnu",       "i586-linux-gnu",
+       "i686-linux-android",   "i386-gnu",              "i486-gnu",
+       "i586-gnu",             "i686-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(
+@@ -1940,16 +1943,16 @@
  
    static const char *const PPCLibDirs[] = {"/lib32", "/lib"};
    static const char *const PPCTriples[] = {
@@ -104,7 +104,7 @@ index 3755673..5a49a6e 100644
  
    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(
+@@ -1965,8 +1968,8 @@
  
    static const char *const SystemZLibDirs[] = {"/lib64", "/lib"};
    static const char *const SystemZTriples[] = {
diff --git a/SOURCES/0001-Fix-uninitialized-value-in-ABIArgInfo.patch b/SOURCES/0001-Fix-uninitialized-value-in-ABIArgInfo.patch
new file mode 100644
index 0000000..9755200
--- /dev/null
+++ b/SOURCES/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@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/SOURCES/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch b/SOURCES/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch
deleted file mode 100644
index 5683b71..0000000
--- a/SOURCES/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 428ca4520a79ec5a6df9c6adc8b8069623868cdb Mon Sep 17 00:00:00 2001
-From: Tom Stellard <tstellar@redhat.com>
-Date: Fri, 26 Jan 2018 11:38:04 -0800
-Subject: [PATCH] GCC compatibility: Ignore -fstack-clash-protection
-
-Reviewers: sylvestre.ledru
-
-Subscribers: cfe-commits
-
-Differential Revision: https://reviews.llvm.org/D42593
----
- include/clang/Driver/Options.td | 1 +
- test/Driver/clang_f_opts.c      | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
-index 41f31cf..e9078a2 100644
---- a/include/clang/Driver/Options.td
-+++ b/include/clang/Driver/Options.td
-@@ -2705,6 +2705,7 @@ defm single_precision_constant : BooleanFFlag<"single-precision-constant">,
-     Group<clang_ignored_gcc_optimization_f_Group>;
- defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group<clang_ignored_f_Group>;
- defm stack_check : BooleanFFlag<"stack-check">, Group<clang_ignored_f_Group>;
-+defm stack_clash_protection : BooleanFFlag<"stack-clash-protection">, Group<clang_ignored_f_Group>;
- defm strength_reduce :
-     BooleanFFlag<"strength-reduce">, Group<clang_ignored_gcc_optimization_f_Group>;
- defm tls_model : BooleanFFlag<"tls-model">, Group<clang_ignored_f_Group>;
-diff --git a/test/Driver/clang_f_opts.c b/test/Driver/clang_f_opts.c
-index 5755c5d..8710ff4 100644
---- a/test/Driver/clang_f_opts.c
-+++ b/test/Driver/clang_f_opts.c
-@@ -284,6 +284,7 @@
- // RUN:     -ffriend-injection                                                \
- // RUN:     -fno-implement-inlines -fimplement-inlines                        \
- // RUN:     -fstack-check                                                     \
-+// RUN:     -fstack-clash-protection                                          \
- // RUN:     -fforce-addr                                                      \
- // RUN:     -malign-functions=100                                             \
- // RUN:     -malign-loops=100                                                 \
--- 
-1.8.3.1
-
diff --git a/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch b/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
new file mode 100644
index 0000000..f4f0fa3
--- /dev/null
+++ b/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
@@ -0,0 +1,50 @@
+From 09ae3ef5710a89505318ec721c65b6c838147276 Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar@redhat.com>
+Date: Thu, 7 Feb 2019 21:05:37 -0800
+Subject: [PATCH] ToolChain: Add -lgcc_s to the linker flags when using libc++
+
+The libc++ build for Fedora does not include an implementation of
+libunwind, so we need to explicitly link against something that
+provides this implementation.
+---
+ clang/lib/Driver/ToolChain.cpp | 1 +
+ clang/test/Driver/netbsd.cpp   | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
+index 88a627e..cb99844 100644
+--- a/lib/Driver/ToolChain.cpp
++++ b/lib/Driver/ToolChain.cpp
+@@ -767,6 +767,7 @@ void ToolChain::AddCXXStdlibLibArgs(const ArgList &Args,
+   switch (Type) {
+   case ToolChain::CST_Libcxx:
+     CmdArgs.push_back("-lc++");
++    CmdArgs.push_back("-lgcc_s");
+     break;
+ 
+   case ToolChain::CST_Libstdcxx:
+diff --git a/test/Driver/netbsd.cpp b/test/Driver/netbsd.cpp
+index 4af7d83..ff18c62 100644
+--- a/test/Driver/netbsd.cpp
++++ b/test/Driver/netbsd.cpp
+@@ -131,7 +131,7 @@
+ // ARM-7: clang{{.*}}" "-cc1" "-triple" "armv5e-unknown-netbsd7.0.0-eabi"
+ // ARM-7: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
+ // ARM-7: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}eabi{{/|\\\\}}crti.o"
+-// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lm" "-lc"
++// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lgcc_s" "-lm" "-lc"
+ // ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
+ 
+ // AARCH64: clang{{.*}}" "-cc1" "-triple" "aarch64-unknown-netbsd"
+@@ -250,7 +250,7 @@
+ // S-ARM-7: clang{{.*}}" "-cc1" "-triple" "armv5e-unknown-netbsd7.0.0-eabi"
+ // S-ARM-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
+ // S-ARM-7: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}eabi{{/|\\\\}}crti.o"
+-// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lm" "-lc"
++// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lgcc_s" "-lm" "-lc"
+ // S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
+ 
+ // S-AARCH64: clang{{.*}}" "-cc1" "-triple" "aarch64-unknown-netbsd"
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0001-gtest-reorg.patch b/SOURCES/0001-gtest-reorg.patch
deleted file mode 100644
index 4d8693a..0000000
--- a/SOURCES/0001-gtest-reorg.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-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
-
----
- 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/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch b/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch
deleted file mode 100644
index 508434d..0000000
--- a/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch
+++ /dev/null
@@ -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
-
diff --git a/SOURCES/0002-gtest-reorg.patch b/SOURCES/0002-gtest-reorg.patch
new file mode 100644
index 0000000..121ac46
--- /dev/null
+++ b/SOURCES/0002-gtest-reorg.patch
@@ -0,0 +1,42 @@
+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 c2016a45ca..48ea3c3bb9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -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()
+-      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
+@@ -507,7 +501,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
+-- 
+2.19.2
+
diff --git a/SPECS/clang.spec b/SPECS/clang.spec
index d6be913..5c009b2 100644
--- a/SPECS/clang.spec
+++ b/SPECS/clang.spec
@@ -1,6 +1,13 @@
-%global maj_ver 7
+%global maj_ver 8
 %global min_ver 0
 %global patch_ver 1
+#%%global rc_ver 2
+
+#i686 disabled because llvm-test is not built for this target
+# other targets disables because of failing tests
+%ifnarch s390x i686 ppc64le %{arm}
+%global enable_test_pkg 1
+%endif
 
 %global clang_tools_binaries \
 	%{_bindir}/clangd \
@@ -17,71 +24,100 @@
 	%{_bindir}/clang \
 	%{_bindir}/clang++ \
 	%{_bindir}/clang-%{maj_ver} \
+	%{_bindir}/clang++-%{maj_ver} \
 	%{_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 \
 	%{_bindir}/hmaptool
 
+%global pkg_name clang
+%global install_prefix /usr
+
 %if 0%{?fedora} || 0%{?rhel} > 7
 %bcond_without python3
 %else
 %bcond_with python3
 %endif
 
+%global build_install_prefix %{buildroot}%{install_prefix}
 %ifarch ppc64le
 # Too many threads on 32 core ppc64 systems causes OOM errors.
 %global _smp_mflags -j8
 %endif
 
-Name:		clang
+%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:	1%{?dist}
+Release:	1%{?rc_ver:.rc%{rc_ver}}%{?dist}
 Summary:	A C language family front-end for LLVM
 
 License:	NCSA
 URL:		http://llvm.org
-Source0:	http://llvm.org/releases/%{version}/cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src.tar.xz
-Source1:	http://llvm.org/releases/%{version}/clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src.tar.xz
-
-Patch0:		0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch
-Patch1:		0001-GCC-compatibility-Ignore-fstack-clash-protection.patch
-Patch2:		0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
-Patch4:		0001-gtest-reorg.patch
-Patch5:		0001-Don-t-prefer-python2.7.patch
-Patch6:		0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch
-Patch7:		0001-Convert-scan-view-to-python3-using-2to3.patch
-
-# clang-tools-extra patches
-Patch100: 0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch
-
-BuildRequires:  gcc
-BuildRequires:  gcc-c++
+Source0:	https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}%{?rc_ver:-%{rc_ver}}/%{clang_srcdir}.tar.xz
+%if !0%{?compat_build}
+Source1:	https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}%{?rc_ver:-%{rc_ver}}/%{clang_tools_srcdir}.tar.xz
+%endif
+
+Patch3:		0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
+Patch4:		0002-gtest-reorg.patch
+Patch9:		0001-Fix-uninitialized-value-in-ABIArgInfo.patch
+Patch11:	0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
+
+BuildRequires:	gcc
+BuildRequires:	gcc-c++
 BuildRequires:	cmake
+BuildRequires:	ninja-build
 BuildRequires:	llvm-devel = %{version}
-BuildRequires:	libxml2-devel
 # llvm-static is required, because clang-tablegen needs libLLVMTableGen, which
 # is not included in libLLVM.so.
-BuildRequires:  llvm-static = %{version}
+BuildRequires:	llvm-static = %{version}
 # Required for make check
+%if 0%{?enable_test_pkg}
+BuildRequires:	llvm-test = %{version}
 BuildRequires:	llvm-googletest = %{version}
+%endif
 BuildRequires:	libxml2-devel
-BuildRequires:  ncurses-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:	python3-sphinx
 BuildRequires:	libatomic
-BuildRequires:	%{_bindir}/pathfix.py
-BuildRequires:  /usr/bin/python3
+
+# We need python3-devel for pathfix.py.
+BuildRequires:	python3-devel
 
 # Needed for %%multilib_fix_c_header
-BuildRequires:  multilib-rpm-config
+BuildRequires:	multilib-rpm-config
+BuildRequires: chrpath
 
 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.
@@ -94,34 +130,17 @@ as libraries and designed to be loosely-coupled and extensible.
 
 %package libs
 Summary: Runtime library for clang
-Recommends: compiler-rt%{?_isa} >= %{version}
-
-# libomp does not support s390x.
-%ifnarch s390x
-Recommends: libomp%{?_isa} >= %{version}
-%endif
-
-# 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
-
-# Making these BuildRequires because they are needed by tests
-BuildRequires:	libstdc++-devel
-BuildRequires:	gcc-c++
-Requires:	libstdc++-devel
-Requires:	gcc-c++
-
+Recommends: compiler-rt%{?_isa} = %{version}
+Recommends: libomp%{_isa} = %{version}
 
 %description libs
 Runtime library for clang.
 
 %package devel
-Summary: Development header files for clang.
+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}
-Requires: llvm-libs%{?_isa} = %{version}
-
 
 %description devel
 Development header files for clang.
@@ -131,9 +150,6 @@ Summary:	A source code analysis framework
 License:	NCSA and MIT
 BuildArch:	noarch
 Requires:	%{name} = %{version}-%{release}
-# not picked up automatically since files are currently not installed in
-# standard Python hierarchies yet
-Requires:	platform-python
 
 %description analyzer
 The Clang Static Analyzer consists of both a source code analysis
@@ -142,44 +158,51 @@ 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: llvm-libs%{?_isa} = %{version}
-Requires: clang-libs%{?_isa} = %{version}-%{release}
+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
+# 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: clang-format integration for git
-Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: git
+Summary:	Integration of clang-format for git
+Requires:	%{name}%{?_isa} = %{version}-%{release}
+Requires:	git
+Requires:	python3
 
 %description -n git-clang-format
 clang-format integration for git.
 
-%prep
+ 
+%package -n python3-clang
+Summary:       Python3 bindings for clang
+Requires:      %{name}-libs%{?_isa} = %{version}-%{release}
+Requires:      python3
+%description -n python3-clang
+%{summary}.
+
+
 
-%setup -T -q -b 1 -n clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src
 
-%patch100 -p1 -b .find-all-symbols-py3
+%prep
+%setup -T -q -b 1 -n clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src
 
 pathfix.py -i %{__python3} -pn \
 	clang-tidy/tool/*.py \
 	include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 
 %setup -q -n cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src
-%patch0 -p1 -b .lit-search-path
-%patch1 -p1 -b .fstack-clash-protection
-%patch2 -p1 -b .vendor-gcc
+
+%patch3 -p1 -b .rhel
 %patch4 -p1 -b .gtest
-%patch5 -p1 -b .no-python2
-%patch6 -p1 -b .clang-format-diff-py3
-%patch7 -p1 -b .scan-view-py3
+%patch9 -p1 -b .abi-arginfo
+%patch11 -p1 -b .libcxx-fix
 
-mv ../clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src tools/extra
+mv ../%{clang_tools_srcdir} tools/extra
 
 %if 0%{?__isa_bits} == 64
 sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@/64/g' test/lit.cfg.py
@@ -200,14 +223,28 @@ pathfix.py -i %{__python3} -pn \
 mkdir -p _build
 cd _build
 
-%cmake .. \
+%ifarch s390 s390x %{arm} %ix86
+# Decrease debuginfo verbosity to reduce memory consumption during final library linking
+%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
+%endif
+
+%cmake .. -G Ninja \
+	-DLLVM_PARALLEL_LINK_JOBS=1 \
 	-DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
 	-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-	-DLLVM_CONFIG:FILEPATH=%{_bindir}/llvm-config-%{__isa_bits} \
+	-DPYTHON_EXECUTABLE=%{__python3} \
+	-DCMAKE_SKIP_RPATH:BOOL=ON \
+	-DCMAKE_INSTALL_RPATH:BOOL=OFF \
 	-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
 	\
+	-DLLVM_TABLEGEN_EXE:FILEPATH=%{_bindir}/llvm-tblgen \
 	-DCLANG_ENABLE_ARCMT:BOOL=ON \
 	-DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON \
 	-DCLANG_INCLUDE_DOCS:BOOL=ON \
@@ -220,67 +257,81 @@ cd _build
 	-DSPHINX_WARNINGS_AS_ERRORS=OFF \
 	\
 	-DCLANG_BUILD_EXAMPLES:BOOL=OFF \
-	-DLLVM_EXTERNAL_LIT=%{_bindir}/lit \
-%if 0%{?__isa_bits} == 64
-        -DLLVM_LIBDIR_SUFFIX=64 \
-%else
-        -DLLVM_LIBDIR_SUFFIX= \
-%endif
-	-DLIB_SUFFIX=
+	-DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}"
 
-make %{?_smp_mflags}
+ninja -v -j2
 
 %install
-make install DESTDIR=%{buildroot} -C _build
+DESTDIR=%{buildroot} ninja install -C _build
+
+
+# install clang python bindings
+mkdir -p %{buildroot}%{python3_sitelib}/clang/
+install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/
+%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang
 
 # 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*
-rm -vf %{buildroot}%{_datadir}/clang/clang-format.el
-rm -vf %{buildroot}%{_datadir}/clang/clang-format.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
-# clang-tools-extra
-rm -vf %{buildroot}%{_datadir}/clang/clang-include-fixer.py
-rm -vf %{buildroot}%{_datadir}/clang/clang-tidy-diff.py
-rm -vf %{buildroot}%{_datadir}/clang/run-clang-tidy.py
-rm -vf %{buildroot}%{_datadir}/clang/run-find-all-symbols.py
-rm -vf %{buildroot}%{_datadir}/clang/clang-include-fixer.el
-rm -vf %{buildroot}%{_datadir}/clang/clang-rename.el
-rm -vf %{buildroot}%{_datadir}/clang/clang-rename.py
-# remove diff reformatter
-rm -vf %{buildroot}%{_datadir}/clang/clang-format-diff.py*
-
-# Remove html docs
-rm -vRf %{buildroot}%{_docdir}/clang/html
+
+# Create Manpage symlinks
+ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++.1.gz
+ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz
+ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz
+
+# Add clang++-{version} sylink
+ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver}
+
+
+# Fix permission
+chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1*
+
 
 %check
-cd _build
-PATH=%{_libdir}/llvm:$PATH make %{?_smp_mflags} check-all || \
-%ifarch %{arm}
-:
-%else
-false
+# requires lit.py from LLVM utilities
+
+%if 0%{?enable_test_pkg}
+LD_LIBRARY_PATH=%{buildroot}%{_libdir} ninja check-all -j2 -C _build
 %endif
 
-%files libs
-%{_libdir}/*.so.*
-%{_libdir}/*.so
+
 
 %files
-%{_libdir}/clang/
 %{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*
 
+%files libs
+%{_libdir}/clang/
+%{_libdir}/*.so.*
 
 %files devel
+%{_libdir}/*.so
 %{_includedir}/clang/
 %{_includedir}/clang-c/
-%{_libdir}/cmake/
+%{_libdir}/cmake/*
 %dir %{_datadir}/clang/
 
 %files analyzer
@@ -296,11 +347,31 @@ false
 %{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 python3-clang
+%{python3_sitelib}/clang/
+
+
 %changelog
+* Thu Aug 1 2019 sguelton@redhat.com - 8.0.1-1
+- 8.0.1 Release
+
+* Thu Jun 13 2019 sguelton@redhat.com - 8.0.1-0.1.rc2
+- 8.0.1rc2 Release
+
+* Thu Apr 11 2019 sguelton@redhat.com - 8.0.0-1
+- 8.0.0 Release
+
 * Fri Dec 14 2018 Tom Stellard <tstellar@redhat.com> - 7.0.1-1
 - 7.0.1-1 Release