LOG New version 3.3, too many spec changes to mention

This commit is contained in:
Andrey Bondrov 2013-10-11 00:27:42 +11:00
parent 95a084eda9
commit 861fec9cdd
5 changed files with 363 additions and 107 deletions

View file

@ -1,3 +1,5 @@
sources: sources:
"clang-3.1.src.tar.gz": 19f33b187a50d22fda2a6f9ed989699a9a9efd62 llvm-3.3.src.tar.gz: c6c22d5593419e3cb47cbcf16d967640e5cce133
"llvm-3.1.src.tar.gz": 234c96e73ef81aec9a54da92fc2a9024d653b059 cfe-3.3.src.tar.gz: ccd6dbf2cdb1189a028b70bcb8a22509c25c74c8
clang-tools-extra-3.3.src.tar.gz: 6f7af9ba8014f7e286a02e4ae2e3f2017b8bfac2
polly-3.3.src.tar.gz: eb75f5674fedf77425d16c9c0caec04961f03e04

144
0000-clang-mandriva.patch Normal file
View file

@ -0,0 +1,144 @@
--- clang/lib/Driver/ToolChains.cpp.orig 2013-05-06 12:08:21.033135389 +0200
+++ clang/lib/Driver/ToolChains.cpp 2013-05-06 12:53:31.740246887 +0200
@@ -1082,11 +1082,23 @@ Generic_GCC::GCCInstallationDetector::GC
static const char *const ARMLibDirs[] = { "/lib" };
static const char *const ARMTriples[] = {
"arm-linux-gnueabi",
- "arm-linux-androideabi"
+ "arm-linux-androideabi",
+ "arm-mandriva-linux-gnueabi",
+ "arm-mandriva-linux-androideabi",
+ "armv6-mandriva-linux-gnueabi",
+ "armv6-mandriva-linux-androideabi",
+ "armv7-mandriva-linux-gnueabi",
+ "armv7-mandriva-linux-androideabi",
+ "armv7hl-mandriva-linux-gnueabi",
+ "armv7hl-mandriva-linux-androideabi",
};
static const char *const ARMHFTriples[] = {
"arm-linux-gnueabihf",
"armv7hl-redhat-linux-gnueabi"
+ "arm-mandriva-linux-gnueabihf",
+ "armv6-mandriva-linux-gnueabihf",
+ "armv7-mandriva-linux-gnueabihf",
+ "armv7hl-mandriva-linux-gnueabihf",
};
static const char *const X86_64LibDirs[] = { "/lib64", "/lib" };
@@ -1094,6 +1106,7 @@ Generic_GCC::GCCInstallationDetector::GC
"x86_64-linux-gnu",
"x86_64-unknown-linux-gnu",
"x86_64-pc-linux-gnu",
+ "x86_64-mandriva-linux-gnu",
"x86_64-redhat-linux6E",
"x86_64-redhat-linux",
"x86_64-suse-linux",
@@ -1107,6 +1120,8 @@ Generic_GCC::GCCInstallationDetector::GC
"i686-pc-linux-gnu",
"i486-linux-gnu",
"i386-linux-gnu",
+ "i586-mandriva-linux-gnu",
+ "i686-mandriva-linux-gnu",
"i386-redhat-linux6E",
"i686-redhat-linux",
"i586-redhat-linux",
@@ -1135,11 +1150,13 @@ Generic_GCC::GCCInstallationDetector::GC
"powerpc-linux-gnu",
"powerpc-unknown-linux-gnu",
"powerpc-linux-gnuspe",
+ "powerpc-mandriva-linux-gnu",
"powerpc-suse-linux",
"powerpc-montavista-linuxspe"
};
static const char *const PPC64LibDirs[] = { "/lib64", "/lib" };
static const char *const PPC64Triples[] = {
+ "powerpc64-mandriva-linux-gnu",
"powerpc64-linux-gnu",
"powerpc64-unknown-linux-gnu",
"powerpc64-suse-linux",
@@ -1993,6 +2010,9 @@ enum Distro {
UbuntuPrecise,
UbuntuQuantal,
UbuntuRaring,
+ Mandriva,
+ OpenMandriva,
+ ROSA,
UnknownDistro
};
@@ -2013,6 +2033,10 @@ static bool IsUbuntu(enum Distro Distro)
return Distro >= UbuntuHardy && Distro <= UbuntuRaring;
}
+static bool IsMandriva(enum Distro Distro) {
+ return Distro >= Mandriva && Distro <= ROSA;
+}
+
static Distro DetectDistro(llvm::Triple::ArchType Arch) {
OwningPtr<llvm::MemoryBuffer> File;
if (!llvm::MemoryBuffer::getFile("/etc/lsb-release", File)) {
@@ -2020,7 +2044,15 @@ static Distro DetectDistro(llvm::Triple:
SmallVector<StringRef, 8> Lines;
Data.split(Lines, "\n");
Distro Version = UnknownDistro;
- for (unsigned i = 0, s = Lines.size(); i != s; ++i)
+ for (unsigned i = 0, s = Lines.size(); i != s; ++i) {
+ if (Version == UnknownDistro && Lines[i].startswith("DISTRIB_ID=MandrivaLinux"))
+ Version = Mandriva; // It's either Mandriva or a close derivate, will get details from DISTRIB_DESCRIPTION
+ if (Version == Mandriva && Lines[i].startswith("DISTRIB_DESCRIPTION=")) {
+ if(Lines[i].substr(20).find("ROSA") != StringRef::npos)
+ Version = ROSA;
+ else if(Lines[i].substr(20).find("Open") != StringRef::npos)
+ Version = OpenMandriva;
+ }
if (Version == UnknownDistro && Lines[i].startswith("DISTRIB_CODENAME="))
Version = llvm::StringSwitch<Distro>(Lines[i].substr(17))
.Case("hardy", UbuntuHardy)
@@ -2035,6 +2067,7 @@ static Distro DetectDistro(llvm::Triple:
.Case("quantal", UbuntuQuantal)
.Case("raring", UbuntuRaring)
.Default(UnknownDistro);
+ }
return Version;
}
@@ -2181,8 +2214,10 @@ static bool isMipsR2Arch(llvm::Triple::A
static StringRef getMultilibDir(const llvm::Triple &Triple,
const ArgList &Args) {
- if (!isMipsArch(Triple.getArch()))
- return Triple.isArch32Bit() ? "lib32" : "lib64";
+ llvm::Triple::ArchType Arch = Triple.getArch();
+ Distro Distro = DetectDistro(Arch);
+ if (!isMipsArch(Arch))
+ return Triple.isArch32Bit() ? (IsMandriva(Distro) ? "lib" : "lib32") : "lib64";
// lib32 directory has a special meaning on MIPS targets.
// It contains N32 ABI binaries. Use this folder if produce
@@ -2208,7 +2243,7 @@ Linux::Linux(const Driver &D, const llvm
Distro Distro = DetectDistro(Arch);
- if (IsOpenSuse(Distro) || IsUbuntu(Distro)) {
+ if (IsOpenSuse(Distro) || IsUbuntu(Distro) || IsMandriva(Distro)) {
ExtraOpts.push_back("-z");
ExtraOpts.push_back("relro");
}
@@ -2228,7 +2263,7 @@ Linux::Linux(const Driver &D, const llvm
// ABI requires a mapping between the GOT and the symbol table.
// Android loader does not support .gnu.hash.
if (!IsMips && !IsAndroid) {
- if (IsRedhat(Distro) || IsOpenSuse(Distro) ||
+ if (IsRedhat(Distro) || IsOpenSuse(Distro) || IsMandriva(Distro) ||
(IsUbuntu(Distro) && Distro >= UbuntuMaverick))
ExtraOpts.push_back("--hash-style=gnu");
@@ -2246,7 +2281,7 @@ Linux::Linux(const Driver &D, const llvm
(IsUbuntu(Distro) && Distro >= UbuntuKarmic))
ExtraOpts.push_back("--build-id");
- if (IsOpenSuse(Distro))
+ if (IsOpenSuse(Distro) || IsMandriva(Distro))
ExtraOpts.push_back("--enable-new-dtags");
// The selection of paths to try here is designed to match the patterns which

View file

@ -0,0 +1,13 @@
--- llvm-3.2.src.orig/lib/Driver/Tools.cpp 2012-11-21 01:56:23.000000000 -0600
+++ llvm-3.2.src/lib/Driver/Tools.cpp 2013-03-31 21:08:41.890206683 -0500
@@ -688,8 +688,8 @@
}
default:
// Assume "soft", but warn the user we are guessing.
- FloatABI = "soft";
- D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << "soft";
+ FloatABI = "hard";
+ D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << "hard";
break;
}
}

1
llvm.rpmlintrc Normal file
View file

@ -0,0 +1 @@
addFilter("E: hardcoded-library-path")

254
llvm.spec
View file

@ -9,39 +9,52 @@
%bcond_without clang %bcond_without clang
Name: llvm
Version: 3.1
Release: 2
Summary: Low Level Virtual Machine (LLVM) Summary: Low Level Virtual Machine (LLVM)
License: University of Illinois/NCSA Open Source License Name: llvm
Version: 3.3
Release: 4
License: NCSA
Group: Development/Other Group: Development/Other
URL: http://llvm.org/ Url: http://llvm.org/
# There's a branch of LLVM maintained at
# git://people.freedesktop.org/~tstellar/llvm
# Ir is the working branch of the AMDGPU/R600 backend needed by Mesa (and is otherwise
# more or less identical to upstream llvm).
# At times it may be necessary to package this branch instead.
Source0: http://llvm.org/releases/%{version}/llvm-%{version}.src.tar.gz Source0: http://llvm.org/releases/%{version}/llvm-%{version}.src.tar.gz
Source1: http://llvm.org/releases/%{version}/clang-%{version}.src.tar.gz Source1: http://llvm.org/releases/%{version}/cfe-%{version}.src.tar.gz
Source2: http://llvm.org/releases/%{version}/clang-tools-extra-%{version}.src.tar.gz
Source3: http://llvm.org/releases/%{version}/polly-%{version}.src.tar.gz
Source1000: llvm.rpmlintrc
# Versionize libclang.so (Anssi 08/2012): # Versionize libclang.so (Anssi 08/2012):
Patch0: clang-soname.patch Patch0: clang-soname.patch
# Add libclangTooling.a to libclang.so, backport from upstream # Adjust search paths to match the OS
Patch1: clang-shared-tooling.patch Patch1: 0000-clang-mandriva.patch
Obsoletes: llvm-ocaml # ARM hardfloat hack
Requires: libstdc++-devel # see http://llvm.org/bugs/show_bug.cgi?id=15557
# and https://bugzilla.redhat.com/show_bug.cgi?id=803433
Patch2: clang-hardfloat-hack.patch
BuildRequires: bison BuildRequires: bison
BuildRequires: groff
BuildRequires: chrpath BuildRequires: chrpath
BuildRequires: flex
BuildRequires: graphviz
BuildRequires: groff
BuildRequires: libtool
BuildRequires: ocaml BuildRequires: ocaml
BuildRequires: sed
BuildRequires: tcl BuildRequires: tcl
BuildRequires: zip
BuildRequires: libstdc++-devel
BuildRequires: pkgconfig(cloog-isl)
BuildRequires: pkgconfig(isl)
BuildRequires: pkgconfig(libffi)
%if %{compile_apidox} %if %{compile_apidox}
BuildRequires: doxygen BuildRequires: doxygen
%endif %endif
BuildRequires: flex Requires: libstdc++-devel
BuildRequires: sed
BuildRequires: graphviz
BuildRequires: libstdc++-devel
BuildRequires: libtool
BuildRequires: zip
BuildRequires: libffi-devel
%description %description
LLVM is a robust system, particularly well suited for developing new mid-level LVM is a robust system, particularly well suited for developing new mid-level
language-independent analyses and optimizations of all sorts, including those language-independent analyses and optimizations of all sorts, including those
that require extensive interprocedural analysis. LLVM is also a great target that require extensive interprocedural analysis. LLVM is also a great target
for front-end development for conventional or research programming languages, for front-end development for conventional or research programming languages,
@ -60,7 +73,6 @@ for effective implementation, proper tail calls or garbage collection.
%{_bindir}/llvm-diff %{_bindir}/llvm-diff
%{_bindir}/llvm-dis %{_bindir}/llvm-dis
%{_bindir}/llvm-extract %{_bindir}/llvm-extract
%{_bindir}/llvm-ld
%{_bindir}/llvm-link %{_bindir}/llvm-link
%{_bindir}/llvm-mc %{_bindir}/llvm-mc
%{_bindir}/llvm-nm %{_bindir}/llvm-nm
@ -68,54 +80,51 @@ for effective implementation, proper tail calls or garbage collection.
%{_bindir}/llvm-prof %{_bindir}/llvm-prof
%{_bindir}/llvm-ranlib %{_bindir}/llvm-ranlib
%{_bindir}/llvm-readobj %{_bindir}/llvm-readobj
%{_bindir}/llvm-stub
%{_bindir}/llvm-cov %{_bindir}/llvm-cov
%{_bindir}/llvm-dwarfdump %{_bindir}/llvm-dwarfdump
%{_bindir}/llvm-mcmarkup
%{_bindir}/llvm-rtdyld %{_bindir}/llvm-rtdyld
%{_bindir}/llvm-size %{_bindir}/llvm-size
%{_bindir}/llvm-stress %{_bindir}/llvm-stress
%{_bindir}/llvm-symbolizer
%{_bindir}/llvm-tblgen %{_bindir}/llvm-tblgen
%{_bindir}/macho-dump %{_bindir}/macho-dump
%{_mandir}/man1/bugpoint.1*
%{_mandir}/man1/l*
%{_mandir}/man1/opt.1*
%{_mandir}/man1/tblgen.1*
%{_libdir}/ocaml/* %{_libdir}/ocaml/*
#----------------------------------------------------------- #----------------------------------------------------------------------------
%define major %version %define major %{version}
%define libname %mklibname %name %major %define libname %mklibname %{name} %{major}
%package -n %libname %package -n %{libname}
Summary: LLVM shared libraries Summary: LLVM shared libraries
Group: System/Libraries Group: System/Libraries
Conflicts: llvm < 3.0-4 Conflicts: llvm < 3.0-4
%description -n %libname %description -n %{libname}
Shared libraries for the LLVM compiler infrastructure. This is needed by Shared libraries for the LLVM compiler infrastructure. This is needed by
programs that are dynamically linked against libLLVM. programs that are dynamically linked against libLLVM.
%files -n %libname %files -n %{libname}
%{_libdir}/libLLVM-%major.so %{_libdir}/libLLVM-%{major}.so
#----------------------------------------------------------- #----------------------------------------------------------------------------
%define libname_devel %mklibname -d %name %define devname %mklibname -d %{name}
%package -n %{libname_devel} %package -n %{devname}
Summary: Development files for LLVM Summary: Development files for LLVM
Group: Development/Other Group: Development/Other
Provides: llvm-devel = %version-%release Provides: llvm-devel = %{EVRD}
Requires: %libname = %version-%release Requires: %{libname} = %{EVRD}
Requires: %name = %version-%release Requires: %{name} = %{EVRD}
Conflicts: llvm < 3.0-7 Conflicts: llvm < 3.0-7
Conflicts: %{_lib}llvm3.0 < 3.0-9 Conflicts: %{_lib}llvm3.0 < 3.0-9
%description -n %{libname_devel} %description -n %{devname}
This package contains the development files for LLVM. This package contains the development files for LLVM.
%files -n %{libname_devel} %files -n %{devname}
%{_bindir}/%{name}-config %{_bindir}/%{name}-config
%{_libdir}/libLLVM.so %{_libdir}/libLLVM.so
%{_includedir}/%{name} %{_includedir}/%{name}
@ -130,24 +139,21 @@ This package contains the development files for LLVM.
%{_libdir}/%{name}/libprofile_rt.so %{_libdir}/%{name}/libprofile_rt.so
%{_libdir}/%{name}/libllvm*.a %{_libdir}/%{name}/libllvm*.a
#----------------------------------------------------------- #----------------------------------------------------------------------------
%package doc %package doc
Summary: Documentation for LLVM Summary: Documentation for LLVM
Group: Books/Computer books Group: Books/Computer books
Requires: %{name} = %{version} Requires: %{name} = %{EVRD}
BuildArch: noarch BuildArch: noarch
Obsoletes: llvm-doc-devel
%description doc %description doc
Documentation for the LLVM compiler infrastructure. Documentation for the LLVM compiler infrastructure.
%files doc %files doc
%defattr(-,root,root,-)
%doc README.txt %doc README.txt
%doc docs/*.css %doc docs/*.css
%doc docs/*.html %doc docs/*.html
%doc docs/img
%doc docs/tutorial %doc docs/tutorial
%doc docs/ocamldoc %doc docs/ocamldoc
%doc examples %doc examples
@ -155,12 +161,62 @@ Documentation for the LLVM compiler infrastructure.
%doc docs/doxygen %doc docs/doxygen
%endif %endif
#----------------------------------------------------------- #----------------------------------------------------------------------------
%package polly
Summary: Polyhedral optimizations for LLVM
License: MIT
Group: Development/Other
%description polly
Polly is a polyhedral optimizer for LLVM.
Using an abstract mathematical representation it analyzes and optimizes
the memory access pattern of a program. This includes data-locality
optimizations for cache locality as well as automatic parallelization
for thread-level and SIMD parallelism.
Our overall goal is an integrated optimizer for data-locality and
parallelism that takes advantage of multi-cores, cache hierarchies,
short vector instructions as well as dedicated accelerators.
%files polly
%{_bindir}/pollycc
%{_bindir}/pollyc++
%{_libdir}/llvm/LLVMPolly.so
#----------------------------------------------------------------------------
%package polly-devel
Summary: Development files for Polly
License: MIT
Group: Development/Other
%description polly-devel
Development files for Polly.
Polly is a polyhedral optimizer for LLVM.
Using an abstract mathematical representation it analyzes and optimizes
the memory access pattern of a program. This includes data-locality
optimizations for cache locality as well as automatic parallelization
for thread-level and SIMD parallelism.
Our overall goal is an integrated optimizer for data-locality and
parallelism that takes advantage of multi-cores, cache hierarchies,
short vector instructions as well as dedicated accelerators.
%files polly-devel
%{_includedir}/polly
%{_libdir}/llvm/libpollyanalysis.a
%{_libdir}/llvm/libpollycodegen.a
%{_libdir}/llvm/libpollyexchange.a
%{_libdir}/llvm/libpollyjson.a
%{_libdir}/llvm/libpollysupport.a
#----------------------------------------------------------------------------
%if %{with clang} %if %{with clang}
%define clang_major %version
%define clang_libname %mklibname clang %clang_major
# TODO: %{_bindir}/clang is linked against static libclang.a, could it be # TODO: %{_bindir}/clang is linked against static libclang.a, could it be
# linked against libclang.so instead, like llvm-* are against livLLVM.so? # linked against libclang.so instead, like llvm-* are against livLLVM.so?
@ -169,7 +225,7 @@ Summary: A C language family front-end for LLVM
License: NCSA License: NCSA
Group: Development/Other Group: Development/Other
# TODO: is this requires:llvm needed, or just legacy from fedora pkg layout? # TODO: is this requires:llvm needed, or just legacy from fedora pkg layout?
Requires: llvm%{?_isa} = %{version}-%{release} Requires: llvm = %{EVRD}
# clang requires gcc, clang++ requires libstdc++-devel # clang requires gcc, clang++ requires libstdc++-devel
Requires: gcc Requires: gcc
Requires: libstdc++-devel >= %{gcc_version} Requires: libstdc++-devel >= %{gcc_version}
@ -187,50 +243,65 @@ as libraries and designed to be loosely-coupled and extensible.
%files -n clang %files -n clang
%doc clang-docs/* %doc clang-docs/*
%{_bindir}/clang* %{_bindir}/clang*
%{_bindir}/cpp11-migrate
%{_libdir}/llvm/libmigrateCore.a
%{_bindir}/c-index-test %{_bindir}/c-index-test
%{_prefix}/lib/clang %{_prefix}/lib/clang
%doc %{_mandir}/man1/clang.1.* %doc %{_mandir}/man1/clang.1.*
%endif
%package -n %clang_libname #----------------------------------------------------------------------------
%if %{with clang}
%define clang_major %{version}
%define libclang %mklibname clang %{clang_major}
%package -n %{libclang}
Summary: Shared library for clang Summary: Shared library for clang
Group: System/Libraries Group: System/Libraries
%description -n %clang_libname %description -n %{libclang}
Shared libraries for the clang compiler. This is needed by Shared libraries for the clang compiler. This is needed by
programs that are dynamically linked against libclang. programs that are dynamically linked against libclang.
%files -n %clang_libname %files -n %{libclang}
%{_libdir}/libclang-%clang_major.so %{_libdir}/libclang-%{clang_major}.so
%endif
#----------------------------------------------------------- #----------------------------------------------------------------------------
%define clang_libname_devel %mklibname -d clang %if %{with clang}
%define devclang %mklibname -d clang
%package -n %{clang_libname_devel} %package -n %{devclang}
Summary: Development files for clang Summary: Development files for clang
Group: Development/Other Group: Development/Other
Requires: %clang_libname = %version-%release Requires: %{libclang} = %{EVRD}
Provides: clang-devel = %version-%release Provides: clang-devel = %{EVRD}
Conflicts: llvm-devel < 3.1 Conflicts: llvm-devel < 3.1
Obsoletes: clang-devel < 3.1 Obsoletes: clang-devel < 3.1
%description -n %{clang_libname_devel} %description -n %{devclang}
This package contains header files and libraries needed for using This package contains header files and libraries needed for using
libclang. libclang.
%files -n %{clang_libname_devel} %files -n %{devclang}
%{_includedir}/clang %{_includedir}/clang
%{_includedir}/clang-c %{_includedir}/clang-c
%{_libdir}/libclang.so %{_libdir}/libclang.so
%dir %{_libdir}/%{name} %dir %{_libdir}/%{name}
%{_libdir}/%{name}/libclang*.a %{_libdir}/%{name}/libclang*.a
%{_libdir}/%{name}/libclang*.so %{_libdir}/%{name}/libclang*.so
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%package -n clang-analyzer %package -n clang-analyzer
Summary: A source code analysis framework Summary: A source code analysis framework
License: NCSA License: NCSA
Group: Development/Other Group: Development/Other
Requires: clang%{?_isa} = %{version}-%{release} Requires: clang = %{EVRD}
# not picked up automatically since files are currently not instaled # not picked up automatically since files are currently not instaled
# in standard Python hierarchies yet # in standard Python hierarchies yet
Requires: python Requires: python
@ -245,42 +316,51 @@ intended to run in tandem with a build of a project or code base.
%{_bindir}/scan-build %{_bindir}/scan-build
%{_bindir}/scan-view %{_bindir}/scan-view
%{_libdir}/clang-analyzer %{_libdir}/clang-analyzer
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%package -n clang-doc %package -n clang-doc
Summary: Documentation for Clang Summary: Documentation for Clang
Group: Books/Computer books Group: Books/Computer books
BuildArch: noarch BuildArch: noarch
Requires: %{name} = %{version}-%{release} Requires: %{name} = %{EVRD}
%description -n clang-doc %description -n clang-doc
Documentation for the Clang compiler front-end. Documentation for the Clang compiler front-end.
%files -n clang-doc %files -n clang-doc
%doc clang-docs-full/* %doc clang-docs-full/*
%endif %endif
#----------------------------------------------------------- #----------------------------------------------------------------------------
%prep %prep
%setup -qn %{name}-%{version}.src %{?with_clang:-a1} %setup -qn %{name}-%{version}.src %{?with_clang:-a1 -a2 -a3}
rm -rf tools/clang rm -rf tools/clang
%if %{with clang} %if %{with clang}
mv clang-%{version}%{?prerel}.src tools/clang mv cfe-%{version}%{?prerel}.src tools/clang
mv polly-%{version}%{?prerel}.src tools/polly
mv clang-tools-extra-%{version}%{?prerel}.src tools/clang/tools/extra
cd tools/clang cd tools/clang
%patch0 -p1 %patch0 -p1
%patch1 -p1 %patch1 -p1 -b .mandriva~
%patch2 -p1 -b .armhf
cd - cd -
%endif %endif
%build # Upstream tends to forget to remove "rc" and "svn" markers from version
# numbers before making releases
sed -i -re 's|^(AC_INIT[^,]*,\[)([0-9.]*)([^]])*(.*)|\1\2\4|' autoconf/configure.ac
sed -i -re "s|(PACKAGE_VERSION='[0-9.]*)([^']*)(.*)|\1\3|g;s|(PACKAGE_STRING='LLVM [0-9.]*)([^']*)(.*)|\1\3|g" configure
%build
# Build with gcc/g++, not clang if it happens to be installed # Build with gcc/g++, not clang if it happens to be installed
# (blino) clang < 3.1 does not handle system headers from gcc 4.7 # (blino) clang < 3.1 does not handle system headers from gcc 4.7
# http://llvm.org/bugs/show_bug.cgi?id=11916 # http://llvm.org/bugs/show_bug.cgi?id=11916
export CC=gcc export CC=%__cc
export CXX=g++ export CXX=%__cxx
%configure2_5x \ %configure2_5x \
--libdir=%{_libdir}/%{name} \ --libdir=%{_libdir}/%{name} \
@ -289,11 +369,14 @@ export CXX=g++
--enable-jit \ --enable-jit \
--enable-libffi \ --enable-libffi \
--enable-optimized \ --enable-optimized \
--enable-targets=host-only \ --enable-targets=all \
--enable-experimental-targets=R600 \
--disable-expensive-checks \ --disable-expensive-checks \
--enable-debug-runtime \ --enable-debug-runtime \
--disable-assertions \ --disable-assertions \
--enable-threads \ --enable-threads \
--with-cloog=%{_prefix} \
--with-isl=%{_prefix} \
%if %{compile_apidox} %if %{compile_apidox}
--enable-doxygen --enable-doxygen
%endif %endif
@ -317,15 +400,15 @@ cp bindings/ocaml/llvm/META.llvm bindings/ocaml/llvm/Release/
PROJ_libdir=%{_libdir}/%{name} PROJ_libdir=%{_libdir}/%{name}
# Invalid dir # Invalid dir
rm -rf %buildroot%_bindir/.dir rm -rf %{buildroot}%{_bindir}/.dir
# wrong rpath entries (Anssi 11/2011) # wrong rpath entries (Anssi 11/2011)
file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
file %{buildroot}/%{_libdir}/llvm/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d file %{buildroot}/%{_libdir}/llvm/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
# move shared library to standard library path and add devel symlink (Anssi 11/2011) # move shared library to standard library path and add devel symlink (Anssi 11/2011)
mv %{buildroot}%{_libdir}/llvm/libLLVM-%major.so %{buildroot}%{_libdir} mv %{buildroot}%{_libdir}/llvm/libLLVM-%{major}.so %{buildroot}%{_libdir}
ln -s libLLVM-%major.so %{buildroot}%{_libdir}/libLLVM.so ln -s libLLVM-%{major}.so %{buildroot}%{_libdir}/libLLVM.so
# Also, create shared library symlinks corresponding to all the static library # Also, create shared library symlinks corresponding to all the static library
# names, so that using e.g. "-lLLVMBitReader" will cause the binary to be linked # names, so that using e.g. "-lLLVMBitReader" will cause the binary to be linked
# against the shared library instead of static library by default. (Anssi 08/2012) # against the shared library instead of static library by default. (Anssi 08/2012)
@ -335,10 +418,10 @@ for staticlib in %{buildroot}%{_libdir}/llvm/libLLVM*.a; do
ln -s ../libLLVM.so "$sharedlib" ln -s ../libLLVM.so "$sharedlib"
done done
%if %with clang %if %{with clang}
# Versionize libclang.so (patch0 makes the same change to soname) and move it to standard path. # Versionize libclang.so (patch0 makes the same change to soname) and move it to standard path.
mv %{buildroot}%{_libdir}/llvm/libclang.so %{buildroot}%{_libdir}/libclang-%version.so mv %{buildroot}%{_libdir}/llvm/libclang.so %{buildroot}%{_libdir}/libclang-%{version}.so
ln -s libclang-%clang_major.so %{buildroot}%{_libdir}/libclang.so ln -s libclang-%{clang_major}.so %{buildroot}%{_libdir}/libclang.so
ln -s ../libclang.so %{buildroot}%{_libdir}/llvm/libclang.so ln -s ../libclang.so %{buildroot}%{_libdir}/llvm/libclang.so
# NOTE: We don't create devel symlinks for the libclang.so for libclang*.a libraries # NOTE: We don't create devel symlinks for the libclang.so for libclang*.a libraries
@ -352,7 +435,6 @@ ln -s ../libclang.so %{buildroot}%{_libdir}/llvm/libclang.so
strip --strip-debug %{buildroot}%{_libdir}/llvm/*.a strip --strip-debug %{buildroot}%{_libdir}/llvm/*.a
%if %{with clang} %if %{with clang}
# Static analyzer not installed by default: # Static analyzer not installed by default:
# http://clang-analyzer.llvm.org/installation#OtherPlatforms # http://clang-analyzer.llvm.org/installation#OtherPlatforms
mkdir -p %{buildroot}%{_libdir}/clang-analyzer mkdir -p %{buildroot}%{_libdir}/clang-analyzer
@ -375,7 +457,21 @@ rm -rf clang-docs-full
cp -al tools/clang/docs clang-docs-full cp -al tools/clang/docs clang-docs-full
rm -rf clang-docs-full/{doxygen*,Makefile*,*.graffle,tools} rm -rf clang-docs-full/{doxygen*,Makefile*,*.graffle,tools}
# Polly bits as described on
# http://polly.llvm.org/example_load_Polly_into_clang.html
cat >%{buildroot}%{_bindir}/pollycc <<'EOF'
#!/bin/sh
exec %{_bindir}/clang -O3 -Xclang -load -Xclang %{_libdir}/llvm/LLVMPolly.so "$@"
EOF
cat >%{buildroot}%{_bindir}/pollyc++ <<'EOF'
#!/bin/sh
exec %{_bindir}/clang++ -O3 -Xclang -load -Xclang %{_libdir}/llvm/LLVMPolly.so "$@"
EOF
chmod 0755 %{buildroot}%{_bindir}/pollycc %{buildroot}%{_bindir}/pollyc++
%endif %endif
# Get rid of erroneously installed example files. # Get rid of erroneously installed example files.
rm %{buildroot}%{_libdir}/%{name}/LLVMHello.so rm %{buildroot}%{_libdir}/%{name}/LLVMHello.so
# Fix bogus permissions
find %{buildroot} -name "*.a" -a -type f|xargs chmod 0644