%bcond_with test

%define build_compat32 %{?_with_compat32:1}%{!?_with_compat32:0}

%define ver_suffix %(echo "%{version}" | cut -d . -f 1)

%define _unpackaged_files_terminate_build 1

# Build options:
# Components skipped by default:
%bcond_with doxygen
%bcond_with ocaml
%bcond_with force_gold
%bcond_with lld_libs
%bcond_with clang_tools_extra

# Documentation install path
%global llvmdocdir() %{_docdir}/%1-%{version}

%define _unpackaged_files_terminate_build 1

Name:           llvm
Version:        9.0.0
Release:        2%{?_dist_release}
Summary:        The Low Level Virtual Machine
Summary(ja):    LLVM - 低レベルバーチャルマシン

Group:          Development/Languages
License:        NCSA
URL:            http://llvm.org/

Vendor:         Project Vine
Distribution:   Vine Linux

Source0:        http://releases.llvm.org/%{version}/llvm-%{version}.src.tar.xz
Source1:        http://releases.llvm.org/%{version}/cfe-%{version}.src.tar.xz
Source2:        http://releases.llvm.org/%{version}/compiler-rt-%{version}.src.tar.xz
Source3:        http://releases.llvm.org/%{version}/lldb-%{version}.src.tar.xz
Source4:        http://releases.llvm.org/%{version}/lld-%{version}.src.tar.xz
%if %{with clang_tools_extra}
Source5:        http://releases.llvm.org/%{version}/clang-tools-extra-%{version}.src.tar.xz
%endif
Source6:        http://releases.llvm.org/%{version}/openmp-%{version}.src.tar.xz

# multilib fixes
Source10:        llvm-config.h
Source11:        clang-config.h

# patches

# llvm
Patch0:         0001-Filter-out-cxxflags-not-supported-by-clang.patch
# TODO: I'm not sure why this is needed.  Could be a change in newer version
# of gold.
Patch1:         0001-Pass-target-to-gold-linker-to-avoid-faliures-on-i686.patch
Patch2:         0001-CMake-Split-static-library-exports-into-their-own-ex.patch
Patch3:         0001-CMake-Split-test-binary-exports-into-their-own-expor.patch

# clang
Patch100:       0002-gtest-reorg.patch
Patch101:       0001-Fix-uninitialized-value-in-ABIArgInfo.patch
Patch102:       0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
Patch103:       0001-Fix-Driver-modules.cpp-test-to-work-when-build-direc.patch

# compiler-rt
Patch200:       0001-PATCH-std-thread-copy.patch

# lld
Patch400:       0001-CMake-Check-for-gtest-headers-even-if-lit.py-is-not-.patch

# Vine Patch
Patch1000: clang-3.8.1-driver-ld.gold.patch
Patch1002: clang-3.8.1-driver-vine.patch

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

BuildRequires:  binutils-devel
BuildRequires:  cmake
BuildRequires:  ninja
BuildRequires:  bison
BuildRequires:  python3
BuildRequires:  python3-rpm-macros
BuildRequires:  chrpath
BuildRequires:  flex
BuildRequires:  git
BuildRequires:  gcc-c++ >= 3.4
BuildRequires:  groff
BuildRequires:  libffi-devel
BuildRequires:  libstdc++-devel
BuildRequires:  libstdc++-static
BuildRequires:  libtool-ltdl-devel
BuildRequires:  libxml2-devel
%if %{with ocaml}
BuildRequires:  ocaml-findlib
BuildRequires:  ocaml-ctypes
BuildRequires:  ocaml-ounit
%endif
# for DejaGNU test suite
BuildRequires:  dejagnu tcl-devel
%if %{with doxygen}
BuildRequires:  doxygen graphviz
%endif
# pod2man 
BuildRequires:  perl
# lldb
BuildRequires:  swig
BuildRequires:  libedit-devel
BuildRequires:  python3-devel
# lld
BuildRequires: ncurses-devel
BuildRequires: zlib-devel

Requires:       llvm%{ver_suffix}-libs = %{version}-%{release}

# LLVM is not supported on PPC64
# http://llvm.org/bugs/show_bug.cgi?id=3729
ExcludeArch:    ppc64

%description
LLVM is a compiler infrastructure designed for compile-time,
link-time, runtime, and idle-time optimization of programs from
arbitrary programming languages.  The compiler infrastructure includes
mirror sets of programming tools as well as libraries with equivalent
functionality.


%package devel
Summary:        Libraries and header files for LLVM
Summary(ja):    LLVM のライブラリおよびヘッダファイル
Group:          Development/Libraries
Requires:       %{name} = %{version}-%{release}
Requires:       libstdc++-devel
Requires:       libffi-devel
Requires:       libedit-devel

%description devel
This package contains library and header files needed to develop new
native programs that use the LLVM infrastructure.


%package doc
Summary:        Documentation for LLVM
Summary(ja):    LLVM のドキュメント
Group:          Documentation
BuildArch:      noarch
Requires:       %{name} = %{version}-%{release}
# might seem redundant, but needed to kill off the old arch-ed -doc subpackage
Obsoletes:      %{name}-doc < %{version}-%{release}

%description doc
Documentation for the LLVM compiler infrastructure.


%package -n llvm%{ver_suffix}-libs
Summary:        LLVM shared libraries
Summary(ja):    LLVM 共有ライブラリ
Group:          System Environment/Libraries
Provides:       llvm-libs = %{version}-%{release}
Obsoletes:      llvm-libs <= 7.0.0

%description -n llvm%{ver_suffix}-libs
Shared libraries for the LLVM compiler infrastructure.

%description -n llvm%{ver_suffix}-libs -l ja
LLVM コンパイラ基盤の共有ライブラリです.

%package static
Summary:        LLVM static libraries
Summary(ja):    LLVM 静的ライブラリ
Requires:       llvm-devel = %{version}-%{release}

%description static
Static libraries for the LLVM compiler infrastructure.

%description static -l ja
LLVM コンパイラ基盤の静的ライブラリです.


%package -n clang
Summary:        A C language family front-end for LLVM
Summary(ja):    LLVM の C 言語フロントエンド
License:        NCSA
Group:          Development/Languages
Requires:       %{name} = %{version}-%{release}
# clang requires gcc, clang++ requires libstdc++-devel
Requires:       libstdc++-devel
# remove clang-doc pacakge
Obsoletes:      clang-doc < %{version}-%{release}

%description -n clang
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 -n clang-libs
Summary:        Runtime library for clang
Summary(ja):    Clang のランタイムライブラリ
Group:          System Environment/Libraries

%description -n clang-libs
Runtime library for clang.

%description -n clang-libs -l ja
Clang のランタイムライブラリです.

%package -n clang-devel
Summary:        Header files for clang
Summary(ja):    Clang のヘッダファイル
Group:          Development/Libraries
Requires:       clang = %{version}-%{release}

%description -n clang-devel
This package contains header files for the Clang compiler.

%description -n clang-devel -l ja
Clang コンパイラのヘッダファイル集です.

%package -n clang-analyzer
Summary:        A source code analysis framework
Summary(ja):    ソースコード分析フレームワーク
License:        NCSA
Group:          Development/Languages
Requires:       clang = %{version}-%{release}
# not picked up automatically since files are currently not instaled
# in standard Python hierarchies yet
Requires:       python3

%description -n clang-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 -n python3-clang
Summary: Python3 bindings for clang
Requires: %{name}%{ver_suffix}-libs%{?_isa} = %{version}-%{release}
Requires: python3
%description -n python3-clang
Python3 bindings for clang


#%package -n clang-doc
#Summary:        Documentation for Clang
#Summary(ja):    Clang のドキュメント
#Group:          Documentation
#Requires:       %{name} = %{version}-%{release}
#
#%description -n clang-doc
#Documentation for the Clang compiler front-end.

%package -n lldb
Summary:        Next generation high-performance debugger
Summary(ja):    高性能デバッガー
License:        NCSA
Group:          Development/Debuggers
Requires:       %{name} = %{version}-%{release}

%description -n lldb
LLDB is a next generation, high-performance debugger. It is built as a set
of reusable components which highly leverage existing libraries in the
larger LLVM Project, such as the Clang expression parser and LLVM
disassembler.

%package -n lldb-devel
Summary:        Header files for LLDB
Summary(ja):    LLDB のヘッダファイル
Group:          Development/Libraries
Requires:       lldb = %{version}-%{release}

%description -n lldb-devel
This package contains header files for the LLDB debugger.


%package -n lld
Summary:        The LLVM Linker
Summary(ja):    LLVMリンカー
License:        NCSA
Group:          Development/Tools

%description -n lld
The LLVM project linker.

%if %{with lld_libs}
%package -n lld-libs
Summary:        LLD shared libraries
Summary(ja):    LLD 共有ライブラリ
License:        NCSA
Group:          System Environment/Libraries

%description -n lld-libs
Shared libraries for LLD.


%package -n lld-devel
Summary:        Libraries and header files for LLD
Summary(ja):    LLD 用ライブラリとヘッダファイル
License:        NCSA
Group:          System Environment/Libraries
Requires:       lld-libs = %{version}-%{release}

%description -n lld-devel
This package contains library and header files needed to develop new native
programs that use the LLD infrastructure.
%endif

%if %{with doxygen}
%package apidoc
Summary:        API documentation for LLVM
Summary(ja):    LLVM の API ドキュメント
Group:          Documentation
BuildArch:      noarch
Requires:       %{name}-docs = %{version}-%{release}

%description apidoc
API documentation for the LLVM compiler infrastructure.

%package -n clang-apidoc
Summary:        API documentation for Clang
Summary(ja):    Clang の API ドキュメント
Group:          Documentation
BuildArch:      noarch

%description -n clang-apidoc
API documentation for the Clang compiler.
%endif


%package -n python3-lldb
Summary:        Python3 module for LLDB
Summary(ja):    LLDB用Python3モジュール
BuildRequires:  python-devel
Requires:       python-six

%description -n python3-lldb
The package contains the LLDB Python3 module.


%package -n libomp
Summary:        OpenMP runtime for clang
Summary(ja):    clang用OpenMPランタイム

%description -n libomp
The package contains the OpenMP runtime for clang.


%package -n libomp-devel
Summary:        OpenMP header files
Summary(ja):    OpenMPヘッダファイル
Requires:       clang-devel%{?isa} = %{version}

%description -n libomp-devel
The package contains the OpenMP header files.


%if %{with ocaml}
%package        ocaml
Summary:        OCaml binding for LLVM
Summary(ja):    LLVM の OCaml バインディング
Group:          System Environment/Libraries
Requires:       %{name} = %{version}-%{release}
Requires:       ocaml

%description    ocaml
OCaml binding for LLVM.

%package        ocaml-devel
Summary:        Development files for %{name}-ocaml
Summary(ja):    %{name}-ocaml の開発ファイル
Group:          Development/Libraries
Requires:       %{name}-devel = %{version}-%{release}
Requires:       %{name}-ocaml = %{version}-%{release}
Requires:       ocaml

%description    ocaml-devel
The %{name}-ocaml-devel package contains libraries and signature files
for developing applications that use %{name}-ocaml.

%package ocaml-doc
Summary:        Documentation for %{name}-ocaml
Summary(ja):    %{name}-ocaml のドキュメント
Group:          Documentation
BuildArch:      noarch
Requires:       %{name}-ocaml = %{version}-%{release}
# might seem redundant, but needed to kill off the old arch-ed -doc subpackage
Obsoletes:      %{name}-ocaml-doc < %{version}-%{release}

%description ocaml-doc
HTML documentation for LLVM's OCaml binding.

%endif

# compat32'
%package -n compat32-%{name}%{ver_suffix}-libs
Summary:        LLVM shared libraries
Summary(ja):    LLVM 共有ライブラリ
Group:          System Environment/Libraries
Provides:       compat32-llvm-libs = %{version}-%{release}
Requires:       %{name}%{ver_suffix}-libs = %{version}-%{release}

%description -n compat32-%{name}%{ver_suffix}-libs
Shared libraries for the LLVM compiler infrastructure.


%prep
%setup -q -a1 -a2 -a3 -a4 -a6 -n llvm-%{version}.src 

#%patch0 -p2
#%patch1 -p2
#%patch2 -p2
##patch3 -p2

rm -rf tools/clang tools/lld tools/lldb projects/compiler-rt
mv cfe-%{version}.src tools/clang
mv compiler-rt-%{version}.src projects/compiler-rt
mv lldb-%{version}.src tools/lldb
mv lld-%{version}.src tools/lld
mv openmp-%{version}.src projects/openmp

%if %{with clang_tools_extra}
tar xvf %{SOURCE5}
mv clang-tools-extra-%{version}.src tools/clang/tools/extra
%endif

pushd tools/clang
##patch100 -p1
#%patch101 -p2
#%patch102 -p1
#%patch103 -p2
popd

pushd projects/compiler-rt
#%patch200 -p1
popd

pushd tools/lld
#%patch400 -p1
popd

# Vine Linux
%if %{with force_gold}
pushd tools/clang
%patch1000 -p1 -b .driver-ld.gold
popd
%endif
#%patch1002 -p1 -b .driver-vine

sed -i -e 's/"i686-linux-gnu",/"i686-linux-gnu","i686-vine-linux","i686-vine-linux-gnu",/' tools/clang/lib/Driver/ToolChains/Gnu.cpp
sed -i -e 's/"x86_64-linux-gnu",/"x86_64-linux-gnu","x86_64-vine-linux","x86_64-vine-linux-gnu",/' tools/clang/lib/Driver/ToolChains/Gnu.cpp

sed -i -e 's/"ld"/"ld.gold"/' tools/clang/include/clang/Driver/ToolChain.h

%build
mkdir build
cd build

%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

#CFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security -fPIC"
#CXXFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security -fPIC -std=c++11"
#TMP_PWD=$(pwd)
#LDFLAGS="%{?__global_ldflags} -L$TMP_PWD/%{_lib} -lpthread -ldl"

%cmake .. \
        -GNinja \
        -DBUILD_SHARED_LIBS:BOOL=OFF \
        -DLLVM_PARALLEL_LINK_JOBS=1 \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_RPATH=";" \
%if 0%{?__isa_bits} == 64
        -DLLVM_LIBDIR_SUFFIX=64 \
%else
        -DLLVM_LIBDIR_SUFFIX= \
%endif
        -DLLVM_TARGETS_TO_BUILD=all \
        -DLLVM_ENABLE_LIBCXX:BOOL=OFF \
        -DLLVM_ENABLE_ZLIB:BOOL=ON \
        -DLLVM_ENABLE_FFI:BOOL=ON \
        -DLLVM_ENABLE_RTTI:BOOL=ON \
        -DLLVM_ENABLE_EH=ON \
        -DLLVM_BINUTILS_INCDIR=%{_includedir} \
        -DLLVM_BUILD_RUNTIME:BOOL=ON \
        -DLLVM_INCLUDE_TOOLS:BOOL=ON \
        -DLLVM_BUILD_TOOLS:BOOL=ON \
        -DLLVM_INCLUDE_TESTS:BOOL=ON \
        -DLLVM_BUILD_TESTS:BOOL=ON \
        -DLLVM_INCLUDE_EXAMPLES:BOOL=ON \
        -DLLVM_BUILD_EXAMPLES:BOOL=OFF \
        -DLLVM_INCLUDE_UTILS:BOOL=ON \
        -DLLVM_INSTALL_UTILS:BOOL=OFF \
        -DLLVM_INCLUDE_DOCS:BOOL=ON \
        -DLLVM_ENABLE_SPHINX:BOOL=OFF \
%if %{with doxygen}
        -DLLVM_ENABLE_DOXYGEN:BOOL=ON \
%else
        -DLLVM_ENABLE_DOXYGEN:BOOL=OFF \
%endif
        -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON \
        -DLLVM_DYLIB_EXPORT_ALL:BOOL=ON \
        -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
        -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF \
        -DLLVM_OPTIMIZED_TABLEGEN:BOOL=ON \
        \
        -DCLANG_ENABLE_ARCMT:BOOL=ON \
        -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON \
        -DCLANG_INCLUDE_DOCS:BOOL=ON \
        -DCLANG_INCLUDE_TESTS:BOOL=ON \
        -DCLANG_PLUGIN_SUPPORT:BOOL=ON \
        -DCLANG_BUILD_EXAMPLES:BOOL=OFF \
        -DCLANG_LINK_CLANG_DYLIB=ON \
        -DCLANG_REPOSITORY_STRING="Vine Linux %{version}-%{release}" \
        -DLIB_SUFFIX= \
        \
        -DLLDB_DISABLE_CURSES:BOOL=OFF \
        -DLLDB_DISABLE_LIBEDIT:BOOL=OFF \
        -DLLDB_DISABLE_PYTHON:BOOL=OFF \
        \
        -DLLDB_LINK_LLVM_DYLIB:BOOL=ON \
        \
        -DLIBOMP_INSTALL_ALIASES=OFF \
        -DLIBOMP_HEADERS_INSTALL_PATH:PATH=%{_libdir}/clang/%{version}/include \
        \
        -DPYTHON_EXECUTABLE:STRING=%{__python3} \
        -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF # could be on?

# workaround for all-in-one build
#TMP_PWD=$(pwd)
#LD_LIBRARY_PATH="$TMP_PWD/%{_lib}" make %{?_smp_mflags}

%ninja_build

%install
rm -rf %{buildroot}

cd build
%ninja_install

# llvm

install -m755 ./bin/lli-child-target %{buildroot}%{_bindir}/lli-child-target

# fix multi-lib
mv -v %{buildroot}%{_bindir}/llvm-config{,-%{__isa_bits}}
ln -sf llvm-config-%{__isa_bits} %{buildroot}%{_bindir}/llvm-config
mv -v %{buildroot}%{_includedir}/llvm/Config/llvm-config{,-%{__isa_bits}}.h
install -m 0644 %{SOURCE10} %{buildroot}%{_includedir}/llvm/Config/llvm-config.h

# clang

# remove static libraries
rm -fv %{buildroot}%{_libdir}/libclang*.a

# install clang python bindings
mkdir -p %{buildroot}%{python3_sitelib}/clang/
install -p -m644 ../tools/clang/bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/

mv -v %{buildroot}%{_includedir}/clang/Config/config{,-%{__isa_bits}}.h
install -m 0644 %{SOURCE11} %{buildroot}%{_includedir}/clang/Config/config.h

# remove git integration
rm -vf %{buildroot}%{_bindir}/git-clang-format
# 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*
# remove diff reformatter
rm -vf %{buildroot}%{_datadir}/clang/clang-format-diff.py*


# lldb

# remove static libraries
rm -fv %{buildroot}%{_libdir}/liblldb*.a

# python: fix binary libraries location
liblldb=$(basename $(readlink -e %{buildroot}%{_libdir}/liblldb.so))
ln -vsf "../../../${liblldb}" %{buildroot}%{python3_sitearch}/lldb/_lldb.so

# remove bundled six.py
rm -f %{buildroot}%{python3_sitearch}/six.*


# lld

# remove static libraries
rm -fv %{buildroot}%{_libdir}/liblld*.a

# Remove rpath
chrpath --delete %{buildroot}%{_bindir}/*lld
chrpath --delete %{buildroot}%{_bindir}/lld-link
chrpath --delete %{buildroot}%{_bindir}/wasm-ld
find %{buildroot}%{_libdir} -type f -name 'liblld*.so*' | \
  grep -v 'liblldb' | \
  xargs chrpath --delete

%if !%{with lld_libs}
  rm -rf %{buildroot}%{_includedir}/lld
%endif

# compiler-rt

# move sanitizer lists to better place
mkdir -p %{buildroot}%{_libdir}/clang/%{version}
for file in asan_blacklist.txt msan_blacklist.txt dfsan_blacklist.txt cfi_blacklist.txt dfsan_abilist.txt; do
        mv -v %{buildroot}%{_prefix}/${file} %{buildroot}%{_libdir}/clang/%{version}/ || :
done

# move sanitizer libs to better place
#mkdir -p %{buildroot}%{_libdir}/clang/%{version}/lib
#mv -v %{buildroot}%{_prefix}/lib/linux/libclang_rt* %{buildroot}%{_libdir}/clang/%{version}/lib
#mkdir -p %{buildroot}%{_libdir}/clang/%{version}/lib/linux/
#pushd %{buildroot}%{_libdir}/clang/%{version}/lib
#for i in *.a *.syms *.so; do
#        ln -s ../$i linux/$i
#done

#rm -rf %{buildroot}%{_libdir}/python*

rm -f %{buildroot}%{_datadir}/clang/bash-autocomplete.sh
rm -f %{buildroot}%{_datadir}/clang/clang-rename.el
rm -f %{buildroot}%{_datadir}/clang/clang-rename.py

%if %{with test}
%check
ninja -C build check
ninja -C build check-clang
ninja -C build check-lldb
ninja -C build check-lld
%endif

%clean
rm -rf %{buildroot}


%post -n llvm%{ver_suffix}-libs -p /sbin/ldconfig
%postun -n llvm%{ver_suffix}-libs -p /sbin/ldconfig

%post -n clang-libs -p /sbin/ldconfig
%postun -n clang-libs -p /sbin/ldconfig

%post -n lldb -p /sbin/ldconfig
%postun -n lldb -p /sbin/ldconfig

%post -n lld
  /sbin/alternatives --install /usr/bin/ld ld \
  /usr/bin/ld.lld 20

%preun -n lld
if [ $1 = 0 ]; then
  /sbin/alternatives --remove ld /usr/bin/ld.lld
fi

%if %{with lld_libs}
%post -n lld-libs -p /sbin/ldconfig
%postun -n lld-libs -p /sbin/ldconfig
%endif

%posttrans devel
# link llvm-config to the platform-specific file;
# use ISA bits as priority so that 64-bit is preferred
# over 32-bit if both are installed
alternatives \
  --install \
  %{_bindir}/llvm-config \
  llvm-config \
  %{_bindir}/llvm-config-%{__isa_bits} \
  %{__isa_bits}

%postun devel
if [ $1 -eq 0 ]; then
  alternatives --remove llvm-config \
    %{_bindir}/llvm-config-%{__isa_bits}
fi
exit 0


%files
%defattr(-,root,root,-)
%doc CREDITS.TXT README.txt
%{_bindir}/bugpoint
%{_bindir}/dsymutil
%{_bindir}/llc
%{_bindir}/lli
%{_bindir}/lli-child-target
%{_bindir}/obj2yaml
%{_bindir}/sancov
%{_bindir}/sanstats
%{_bindir}/verify-uselistorder
%{_bindir}/yaml2obj
%exclude %{_bindir}/llvm-config
%exclude %{_bindir}/llvm-config-%{__isa_bits}
%{_bindir}/llvm*
%{_bindir}/opt
%exclude %{_mandir}/man1/scan-build.1.*
%doc %{_mandir}/man1/*.1.*
%{_datadir}/opt-viewer

%files devel
%defattr(-,root,root,-)
#doc %{llvmdocdir %{name}-devel}/
%{_bindir}/llvm-config
%{_bindir}/llvm-config-%{__isa_bits}
%{_includedir}/%{name}
%{_includedir}/%{name}-c
#{_libdir}/BugpointPasses.so
%{_libdir}/LLVMgold.so
%{_libdir}/libLLVM.so
%{_libdir}/libLTO.so*
%{_libdir}/libRemarks.so
%{_libdir}/cmake/llvm
#exclude %{_libdir}/cmake/llvm/LLVMStaticExports.cmake

%files -n llvm%{ver_suffix}-libs
%defattr(-,root,root,-)
%doc LICENSE.TXT
#config(noreplace) %{_sysconfdir}/ld.so.conf.d/llvm-%{_arch}.conf
#dir %{_libdir}/%{name}
%{_libdir}/libLLVM-*.so
%{_libdir}/libRemarks.so.*
#exclude %{_libdir}/LLVMHello.so

%files static
%{_libdir}/*.a
#{_libdir}/cmake/llvm/LLVMStaticExports.cmake

%files -n clang
%defattr(-,root,root,-)
#doc %{llvmdocdir clang}/
%{_bindir}/clang*
%{_bindir}/c-index-test
%{_bindir}/diagtool
%{_bindir}/hmaptool
%{_libdir}/clang

%files -n clang-libs
%defattr(-,root,root,-)
%{_libdir}/libclang.so
%{_libdir}/libclang.so.*
%{_libdir}/libclang-cpp.so
%{_libdir}/libclang-cpp.so.*

%files -n clang-devel
%defattr(-,root,root,-)
#doc %{llvmdocdir clang-devel}/
%{_includedir}/clang
%{_includedir}/clang-c
%dir %{_datadir}/clang/
%{_libdir}/cmake/*

%files -n clang-analyzer
%defattr(-,root,root,-)
%{_bindir}/scan-build
%{_bindir}/scan-view
%{_libdir}/CheckerDependencyHandlingAnalyzerPlugin.so
%{_libdir}/CheckerOptionHandlingAnalyzerPlugin.so
%{_libdir}/SampleAnalyzerPlugin.so
%{_libexecdir}/ccc-analyzer
%{_libexecdir}/c++-analyzer
%{_datadir}/scan-view
%{_datadir}/scan-build
%{_mandir}/man1/scan-build.1.*

%files -n python3-clang
%{python3_sitelib}/clang/

%files -n lldb
%defattr(-,root,root,-)
#doc %{llvmdocdir lldb}/
%{_bindir}/lldb*
%{_libdir}/liblldb*.so.*

%files -n lldb-devel
%defattr(-,root,root,-)
%{_includedir}/lldb
%{_libdir}/liblldb*.so

%files -n python3-lldb
%{python3_sitearch}/lldb

%files -n lld
%defattr(-,root,root,-)
%{_bindir}/lld*
%{_bindir}/ld.lld
%{_bindir}/ld64.lld
%{_bindir}/wasm-ld
%exclude %{_bindir}/lldb*

%if %{with lld_libs}
%files -n lld-libs
%{_libdir}/liblld*.so.*
%exclude %{_libdir}/liblldb*.so.*

%files -n lld-devel
%{_includedir}/lld
%{_libdir}/liblld*.so
%exclude %{_libdir}/liblldb*.so
%endif

%files -n libomp
%{_libdir}/libomp.so
%{_libdir}/libomptarget.so

%files -n libomp-devel
%{_libdir}/clang/%{version}/include/omp.h
%{_libdir}/clang/%{version}/include/omp-tools.h
%{_libdir}/clang/%{version}/include/ompt.h

%files doc
%defattr(-,root,root,-)
%doc docs/*
#doc %{llvmdocdir %{name}-doc}/

%if %{with ocaml}
%files ocaml
%defattr(-,root,root,-)
%{_libdir}/ocaml/*.cma
%{_libdir}/ocaml/*.cmi
%{_libdir}/ocaml/*.so
%{_libdir}/ocaml/META.llvm*

%files ocaml-devel
%defattr(-,root,root,-)
%{_libdir}/ocaml/*.a
%{_libdir}/ocaml/*.cmx*
%{_libdir}/ocaml/*.mli

%files ocaml-doc
%defattr(-,root,root,-)
#doc %{llvmdocdir %{name}-ocaml-doc}/
%endif

%if 0%{?_with_doxygen}
%files apidoc
%defattr(-,root,root,-)
%doc %{llvmdocdir %{name}-apidoc}/

%files -n clang-apidoc
%defattr(-,root,root,-)
%doc %{llvmdocdir clang-apidoc}/
%endif

%if %{build_compat32}
%files -n compat32-%{name}%{ver_suffix}-libs
%defattr(-,root,root)
%doc LICENSE.TXT
#config(noreplace) %{_sysconfdir}/ld.so.conf.d/llvm-%{_arch}.conf
%exclude %{_libdir}/libLTO.so
#exclude %{_libdir}/BugpointPasses.so
%exclude %{_libdir}/libclang*.so
%exclude %{_libdir}/liblld*.so
%exclude %{_libdir}/LLVMGold.so
%exclude %{_libdir}/LLVMHello.so
%{_libdir}/*.so
%{_libdir}/libLTO.so.*
%endif

%changelog
* Sun Sep 22 2019 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 9.0.0-2
- dropped all patches.
- switched build-system to ninja.
- switched python to python3.

* Fri Sep 20 2019 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 9.0.0-1
- new upstream release.
- added OpenMP.

* Sun Dec 16 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 7.0.1-1
- fixed %%files.

* Wed Dec 05 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 7.0.0-1
- new upstream release.
- dropped Patch0, 4, 5, 100 and 200.
- imported Patch3, 7, 12, 15, 100, 101, 102 and 400 from rawhide.
- renamed a subpackage "llvm-libs".
- added a subpackage "lld".

* Tue Jan 02 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 5.0.1-2
- added subpackages "llvm-static", "python-lldb" and "python-clang".

* Mon Jan 01 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 5.0.1-1
- new upstream release.
- dropped Patch1 and 2: fixed in upstream.
- imported Patch0, 3-5, 100 and 200 from rawhide.
- disabled Patch1002: no longer needed?

* Fri Aug  5 2016 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 3.8.1-1
- new upstream release.
- switched to cmake.
- disable ocaml binding as default.
- updated Patch1000 and 1002.
- disabled Patch1000 as default.
- cleanup patches.

* Thu Jun 30 2016 Yoji TOYODA <bsyamato@sea.plala.or.jp> 3.6.2-2
- rebuild with gcc-5.4.0

* Sat Sep  5 2015 Ryoichi INAGAKI <ryo1@toki.waseda.jp> 3.6.2-1
- new upstream release
- added BR: ocaml-ctypes

* Thu Jun  4 2015 Ryoichi INAGAKI <ryo1@toki.waseda.jp> 3.6.1-1
- new upstream release
- dropt Patch 1, 201 and 1001
- updated Patch 1000

* Tue Mar 24 2015 Ryoichi INAGAKI <ryo1@toki.waseda.jp> 3.5.1-1
- updated to 3.5.1
- added Patch1, 2, 100, 101, 200, 201 and 202 from Fedora 
- added clang-libs, lldb, lldb-devel and compat32-llvm-libs subpackage
- obsoleted clang-doc
- built with ocaml 4.02.1

* Sat Nov 29 2014 Yoji TOYODA <bsyamato@sea.plala.or.jp> 3.5.0-2
- fix <BTS:2832>
  - fix configure option "--with-c-include-dirs"
  - update Patch1000: clang-3.5.0-driver-ld.gold.patch
  - update Patch1001: clang-3.5.0-driver-lib64.patch
  - update Patch1002: clang-3.5.0-driver-vine.patch

* Tue Oct 28 2014 Yoji TOYODA <bsyamato@sea.plala.or.jp> 3.5.0-1
- update to 3.5.0
- remove Patch11 (clang-hardfloat-hack.patch)

* Sun Jul 06 2014 Yoji TOYODA <bsyamato@sea.plala.or.jp> 3.3-2
- rebuild with libffi-3.0.13

* Mon Oct 28 2013 Daisuke SUZUKI <daisuke@linux.or.jp> 3.3-1
- update to 3.3

* Mon Dec 03 2012 Daisuke SUZUKI <daisuke@linux.or.jp> 3.1-2
- ld.gold (patch1000,1001)
- add /%{_lib} to ld search path
- add support *-vine-linux gcc (patch1002)

* Fri Nov 30 2012 Daisuke SUZUKI <daisuke@linux.or.jp> 3.1-1
- update to 3.1

* Tue Jan 24 2012 NAKAMURA Kenta <kenta@vinelinux.org> - 3.0-1
- updated to 3.0 release

* Sun Jan 15 2012 NAKAMURA Kenta <kenta@vinelinux.org> - 2.9-3
- added patch 2-4 to support -O4 link-time optimization

* Fri Sep  9 2011 MATSUBAYASHI Kohji <shaolin@vinelinux.org> - 2.9-2
- disable -fno-var-tracking-assignments on ppc
  (seems like gcc-4.4.5 still doesn't support this)

* Thu Aug 25 2011 Daisuke SUZUKI <daisuke@linux.or.jp> 2.9-1
- new upstream release
- add BR: libffi-devel
- add R: libffi-devel to -devel

* Sun May 23 2010 Daisuke SUZUKI <daisuke@linux.or.jp> 2.7-1
- initial build for Vine Linux

* Sun May  2 2010 Michel Salim <salimma@fedoraproject.org> - 2.7-1
- Update to final 2.7 release

* Sun Mar 28 2010 Michel Salim <salimma@fedoraproject.org> - 2.7-0.1.pre1
- Update to first 2.7 pre-release

* Fri Sep 18 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.6.pre2
- Update to 2.6 pre-release2
- -devel subpackage now virtually provides -static

* Wed Sep  9 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.5.pre1
- Disable var tracking assignments on PPC

* Wed Sep  9 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.4.pre1
- Don't adjust clang include dir; files there are noarch (bz#521893)
- Enable clang unit tests
- clang and clang-analyzer renamed; no longer depend on llvm at runtime

* Mon Sep  7 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.3.pre1
- Package Clang's static analyzer tools

* Mon Sep  7 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.2.pre1
- PIC is now enabled by default; explicitly disable on %%{ix86}

* Mon Sep  7 2009 Michel Salim <salimma@fedoraproject.org> - 2.6-0.1.pre1
- First 2.6 prerelease
- Enable Clang front-end
- Enable debuginfo generation

* Sat Sep  5 2009 Michel Salim <salimma@fedoraproject.org> - 2.5-6
- Disable assertions (needed by OpenGTL, bz#521261)
- Align spec file with upstream build instructions
- Enable unit tests

* Sat Aug 22 2009 Michel Salim <salimma@fedoraproject.org> - 2.5-5
- Only disable PIC on %%ix86; ppc actually needs it

* Sat Aug 22 2009 Michel Salim <salimma@fedoraproject.org> - 2.5-4
- Disable use of position-independent code on 32-bit platforms
  (buggy in LLVM <= 2.5)

* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild

* Wed Mar  4 2009 Michel Salim <salimma@fedoraproject.org> - 2.5-2
- Remove build scripts; they require the build directory to work

* Wed Mar  4 2009 Michel Salim <salimma@fedoraproject.org> - 2.5-1
- Update to 2.5
- Package build scripts (bug #457881)

* Tue Dec  2 2008 Michel Salim <salimma@fedoraproject.org> - 2.4-2
- Patched build process for the OCaml binding

* Tue Dec  2 2008 Michel Salim <salimma@fedoraproject.org> - 2.4-1
- Update to 2.4
- Package Ocaml binding

* Wed Jun 18 2008 Bryan O'Sullivan <bos@serpentine.com> - 2.3-2
- Add dependency on groff

* Wed Jun 18 2008 Bryan O'Sullivan <bos@serpentine.com> - 2.3-1
- LLVM 2.3

* Thu May 29 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 2.2-4
- fix license tags

* Wed Mar  5 2008 Bryan O'Sullivan <bos@serpentine.com> - 2.2-3
- Fix compilation problems with gcc 4.3

* Mon Feb 18 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 2.2-2
- Autorebuild for GCC 4.3

* Sun Jan 20 2008 Bryan O'Sullivan <bos@serpentine.com> - 2.1-2
- Fix review comments

* Sun Jan 20 2008 Bryan O'Sullivan <bos@serpentine.com> - 2.1-1
- Initial version