File llvm.spec of Package llvm

#
# spec file for package llvm
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%define _revision        142912
%define _release_version 3.0

%if 0%{?suse_version} >= 1200
%define     _gcc_ver 4.6
%else
%define     _gcc_ver 4.5
%endif

Name:           llvm
Version:        2.9.99.svn20111025
Release:        1
License:        NCSA
Summary:        Low Level Virtual Machine
Url:            http://www.llvm.org
Group:          Development/Languages/Other
Source0:        %{name}-%{version}.tar.bz2
Source100:      %{name}-rpmlintrc
# PATCH-FIX-OPENSUSE set-revision.patch idoenmez@suse.de -- Allow us to set revision
Patch1:         set-revision.patch
# PATCH-FIX-OPENSUSE set-revision.patch idoenmez@suse.de -- Use correct lib prefix
Patch2:         clang-cmake-lib.patch
# PATCH-FIX-OPENSUSE assume-opensuse.patch idoenmez@suse.de -- Always enable openSUSE/SUSE features
Patch3:         assume-opensuse.patch
# PATCH-FIX-UPSTREAM llvm-pr9614-part1.patch idoenmez@suse.de -- Fix LLVM PR9614
Patch4:         llvm-pr9614-part1.patch
Patch5:         llvm-pr9614-part2.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  bison
BuildRequires:  chrpath
BuildRequires:  cmake
BuildRequires:  dejagnu
BuildRequires:  fdupes
BuildRequires:  flex
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  libtool
BuildRequires:  python-devel
BuildRequires:  tcl-devel
BuildRequires:  tk-devel

# Code10 does not have libffi
%if 0%{?suse_version} > 1100
BuildRequires:  libffi-devel
%endif

# 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
Group:          Development/Languages/Other
Requires:       %{name} = %{version}
Requires:       libffi-devel
Requires:       libstdc++-devel >= 3.4

%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
Group:          Documentation/HTML
Requires:       %{name} = %{version}

%description doc
Documentation for the LLVM compiler infrastructure.

%package clang

Summary:        CLANG frontend for LLVM
Group:          Development/Languages/Other
Requires:       %{name} = %{version}
Provides:       clang
%{py_requires}

%description clang
This package contains the clang (C language) frontend for LLVM.

%package clang-devel

Summary:        CLANG frontend for LLVM (devel package)
Group:          Development/Languages/Other
Requires:       llvm-devel = %{version}
Requires:       clang = %{version}
%{py_requires}

%description clang-devel
This package contains the clang (C language) frontend for LLVM.
(development files)

%package        vim-plugins

Summary:        Vim plugins for LLVM
Group:          Productivity/Text/Editors
Requires:       vim

%description    vim-plugins
This package contains vim plugins for LLVM like syntax highlighting.

%prep
%setup -q
%patch1
%patch2
%patch3

pushd tools/clang
%patch4 -p2
%patch5 -p2
popd

sed -i s,SVN_REVISION,\"%{_revision}\",g tools/clang/lib/Basic/Version.cpp

%build
TOPLEVEL=$PWD
mkdir stage1 stage2
cd stage1

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DLLVM_ENABLE_ASSERTIONS=TRUE \
      -DLLVM_TARGETS_TO_BUILD="ARM;X86" \
      ..

make %{?_smp_mflags}

cd ../stage2
# Needed to make clang resource dir working inside build tree
ln -s lib lib64

export CC=$TOPLEVEL/stage1/bin/clang
export CXX=$TOPLEVEL/stage1/bin/clang++
export CXXFLAGS="%{optflags} -frtti"

cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DLLVM_ENABLE_ASSERTIONS=FALSE \
      -DLLVM_ENABLE_PIC=TRUE \
      -DLLVM_ENABLE_TIMESTAMPS=FALSE \
      -DLLVM_TARGETS_TO_BUILD=X86 \
      -DCLANG_VENDOR="SUSE Linux" \
%ifarch x86_64
      -DLLVM_LIBDIR_SUFFIX=64 \
%endif
      -DCLANG_RESOURCE_DIR="../%{_lib}/clang/%{_release_version}" \
      -DC_INCLUDE_DIRS="/usr/include:\
%{_libdir}/gcc/%{_target_cpu}-suse-linux/%{_gcc_ver}/include:\
%{_libdir}/gcc/%{_target_cpu}-suse-linux/%{_gcc_ver}/include-fixed" \
      ..
make %{?_smp_mflags}

%check
cd stage2
make check
make clang-test

%install
cd stage2
%makeinstall
cd ..

# Fixup libdir for x86-64
%ifarch x86_64
sed -i s,ABS_RUN_DIR/lib,ABS_RUN_DIR/lib64, %{buildroot}/%{_bindir}/llvm-config
%endif

# cleanup
file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
file %{buildroot}/%{_libdir}/%{name}/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d

find %{buildroot}%{_includedir}/clang -name '*.tmp' -exec rm {} +

for file in `find examples -type f`; do
	install -d %{buildroot}%{_docdir}/%{name}-doc/`dirname $file`
	install -m 644 $file %{buildroot}%{_docdir}/%{name}-doc/$file
done

find %{buildroot}%{_docdir}/%{name}-doc/ -name '*.tar.gz' -exec rm {} \;

# install scan-build et al
install -d %{buildroot}%{_datadir}/clang
install -d %{buildroot}%{py_sitedir}

pushd tools/clang/tools
for file in scan-build/ccc-analyzer scan-build/scan-build \
		scan-view/scan-view; do
	install $file %{buildroot}%{_bindir}
done
for file in scan-build/scanview.css scan-build/sorttable.js; do
	install -m 644 $file %{buildroot}%{_datadir}/clang/
done
for file in scan-view/Reporter.py scan-view/ScanView.py \
		scan-view/startfile.py; do
	install -m 644 $file %{buildroot}%{py_sitedir}
done
install -d %{buildroot}%{py_sitedir}/Resources/
for file in scan-view/Resources/*; do
	install -m 644 $file %{buildroot}%{py_sitedir}/Resources/
done
popd
pushd %{buildroot}%{_bindir}
ln -s ccc-analyzer c++-analyzer
popd

sed -i 's,RealBin/bin/clang,RealBin/clang,' \
  %{buildroot}%{_bindir}/scan-build

sed -i 's,RealBin/bin/ccc-analyzer,RealBin/ccc-analyzer,' \
  %{buildroot}%{_bindir}/scan-build

sed -i 's,RealBin/bin/ccc-analyzer,RealBin/ccc-analyzer,' \
  %{buildroot}%{_bindir}/scan-build

sed -i 's,$RealBin/sorttable.js,%{_datadir}/clang/sorttable.js,' \
  %{buildroot}%{_bindir}/scan-build

sed -i 's,$RealBin/scanview.css,%{_datadir}/clang/scanview.css,' \
  %{buildroot}%{_bindir}/scan-build

sed -i 's,RealBin/bin,RealBin,' \
  %{buildroot}%{_bindir}/scan-build

install -m 755 -d %{buildroot}%{_datadir}/vim/site/syntax/
install -m 644 utils/vim/*.vim %{buildroot}%{_datadir}/vim/site/syntax/
mv utils/vim/README utils/vim/README.vim

# Create man pages because cmake buildsystem doesn't do for us
install -m 755 -d %{buildroot}%{_mandir}/man1
# tblgen is not installed anymore.
rm docs/CommandGuide/tblgen.pod
for i in docs/CommandGuide/*.pod tools/clang/docs/tools/*.pod; do
    page=`echo $i|awk -F"/" '{print $(NF)}'|sed s,.pod,,` &&
    pod2man -s1 $i %{buildroot}%{_mandir}/man1/$page.1;
done

# Remove gtest library
rm -f %{buildroot}%{_libdir}/*gtest*

# Wrong lib name + static
rm -f %{buildroot}%{_libdir}/liblibclang.a

# Stuff we don't want to include
rm -f %{buildroot}%{_libdir}/BugpointPasses.*
rm -f %{buildroot}%{_libdir}/LLVMHello.*
rm -f %{buildroot}%{_libdir}/libCompilerDriver.*
rm -f %{buildroot}%{_libdir}/libEnhancedDisassembly.*

%fdupes -s %{buildroot}%{_docdir}/%{name}
%fdupes -s %{buildroot}%{_docdir}/%{name}-doc

%post clang -p /sbin/ldconfig                                                                               

%postun clang -p /sbin/ldconfig

%post clang-devel -p /sbin/ldconfig

%postun clang-devel -p /sbin/ldconfig

%files
%defattr(-,root,root)
%doc *.TXT *.txt
%{_bindir}/bugpoint
%{_bindir}/diagtool
%{_bindir}/llc
%{_bindir}/lli
%{_bindir}/macho-dump
%exclude %{_bindir}/%{name}-config
%{_bindir}/%{name}*
%{_bindir}/opt
%{_mandir}/man1/bugpoint.1%{ext_man}
%exclude %{_mandir}/man1/lit.1%{ext_man}
%{_mandir}/man1/llc.1%{ext_man}
%{_mandir}/man1/lli.1%{ext_man}
%exclude %{_mandir}/man1/%{name}-config.1%{ext_man}
%{_mandir}/man1/llvm*.1%{ext_man}
%{_mandir}/man1/opt.1%{ext_man}
%{_mandir}/man1/FileCheck.1%{ext_man}

%files clang
%defattr(-,root,root)
%{_bindir}/clang
%{_bindir}/clang-*
%{_bindir}/clang++
%{_bindir}/c-index-test
%{_bindir}/ccc-analyzer
%{_bindir}/c++-analyzer
%{_bindir}/scan-build
%{_bindir}/scan-view
%{py_sitedir}/ScanView.py
%{py_sitedir}/Reporter.py
%{py_sitedir}/startfile.py
%{py_sitedir}/Resources
%{_datadir}/clang
%{_mandir}/man1/clang.1.gz
%{_libdir}/libclang.so.*
%{_libdir}/libLTO.so
%dir %{_libdir}/clang
%dir %{_libdir}/clang/*
%dir %{_libdir}/clang/*/include
%{_libdir}/clang/*/include/altivec.h
%{_libdir}/clang/*/include/arm_neon.h
%{_libdir}/clang/*/include/avxintrin.h
%{_libdir}/clang/*/include/emmintrin.h
%{_libdir}/clang/*/include/float.h
%{_libdir}/clang/*/include/immintrin.h
%{_libdir}/clang/*/include/iso646.h
%{_libdir}/clang/*/include/limits.h
%{_libdir}/clang/*/include/mm_malloc.h
%{_libdir}/clang/*/include/mmintrin.h
%{_libdir}/clang/*/include/nmmintrin.h
%{_libdir}/clang/*/include/pmmintrin.h
%{_libdir}/clang/*/include/smmintrin.h
%{_libdir}/clang/*/include/stdalign.h
%{_libdir}/clang/*/include/stdarg.h
%{_libdir}/clang/*/include/stdbool.h
%{_libdir}/clang/*/include/stddef.h
%{_libdir}/clang/*/include/stdint.h
%{_libdir}/clang/*/include/tgmath.h
%{_libdir}/clang/*/include/tmmintrin.h
%{_libdir}/clang/*/include/varargs.h
%{_libdir}/clang/*/include/wmmintrin.h
%{_libdir}/clang/*/include/x86intrin.h
%{_libdir}/clang/*/include/xmmintrin.h
%{_libdir}/clang/*/include/mm3dnow.h

%files clang-devel
%defattr(-,root,root)
%{_includedir}/clang
%{_includedir}/clang-c
%{_libdir}/libclang.so
%{_libdir}/libLTO.a
%{_libdir}/libclang*.a
%{_libdir}/*profile_rt*

%files devel
%defattr(-,root,root,-)
%{_bindir}/%{name}-config
%dir %{_datadir}/llvm/
%{_datadir}/llvm/*
%doc %{_mandir}/man1/%{name}-config.1%{ext_man}
%{_includedir}/%{name}/
%{_includedir}/%{name}-c/
%{_libdir}/libLLVM*

%files doc
%defattr(-,root,root,-)
%{_docdir}/%{name}-doc

%files vim-plugins
%defattr(-,root,root,-)
%doc utils/vim/README.vim
%{_datadir}/vim/

%changelog
openSUSE Build Service is sponsored by