-# TODO
-# - gcc/c++ packages: http://cvs.fedoraproject.org/viewvc/rpms/llvm/devel/llvm.spec?revision=HEAD&view=markup
-# - test gcc pkgs and all
#
-%define lgcc_vertar 4.2
-%define lgcc_version 4.2
+# Conditional build:
+%bcond_without ocaml # ocaml binding
+%bcond_with apidocs # The doxygen docs are HUGE, so they are not built by default.
+%bcond_with tests # run tests
+
+%ifarch s390 s390x sparc64
+# No ocaml on these arches
+%undefine with_ocaml
+%endif
+
Summary: The Low Level Virtual Machine (An Optimizing Compiler Infrastructure)
Summary(pl.UTF-8): Niskopoziomowa maszyna wirtualna (infrastruktura kompilatora optymalizującego)
Name: llvm
-Version: 2.7
-Release: 0.1
+Version: 2.9
+Release: 3
License: University of Illinois/NCSA Open Source License
Group: Development/Languages
Source0: http://llvm.org/releases/%{version}/%{name}-%{version}.tgz
-# Source0-md5: ac322661f20e7d6c810b1869f886ad9b
-Source1: http://llvm.org/releases/2.7/clang-%{version}.tgz
-# Source1-md5: b83260aa8c13494adf8978b5f238bf1b
+# Source0-md5: 793138412d2af2c7c7f54615f8943771
+Source1: http://llvm.org/releases/%{version}/clang-%{version}.tgz
+# Source1-md5: 634de18d04b7a4ded19ec4c17d23cfca
# Data files should be installed with timestamps preserved
Patch3: %{name}-2.6-timestamp.patch
+Patch4: %{name}-pld.patch
URL: http://llvm.org/
BuildRequires: bash
BuildRequires: bison
-BuildRequires: doxygen
BuildRequires: flex
+%if %{with apidocs}
+BuildRequires: doxygen
BuildRequires: graphviz
+%endif
+%if %{with tests}
+BuildRequires: dejagnu
+BuildRequires: python
+BuildRequires: tcl-devel
+%endif
BuildRequires: groff
BuildRequires: libltdl-devel
BuildRequires: libstdc++-devel >= 5:3.4
BuildRequires: ocaml-ocamldoc
+BuildRequires: perl-base >= 1:5.6
+BuildRequires: perl-tools-pod
+BuildRequires: rpm-pythonprov
# gcc4 might be installed, but not current __cc
%if "%(echo %{cc_version} | cut -d. -f1,2)" < "3.4"
BuildRequires: __cc >= 3.4
%endif
+# LLVM is not supported on PPC64
+# http://llvm.org/bugs/show_bug.cgi?id=3729
+ExcludeArch: ppc64
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%define _sysconfdir /etc/%{name}
+%define specflags_ppc -fno-var-tracking-assignments
+
# strip corrupts: $RPM_BUILD_ROOT/usr/lib64/llvm-gcc/bin/llvm-c++ ...
%define _noautostrip .*/\\(libmud.*\\.a\\|bin/llvm-.*\\|lib.*++\\.a\\)
link-time, runtime, and idle-time optimization of programs from
arbitrary programming languages. LLVM is written in C++ and has been
developed since 2000 at the University of Illinois and Apple. It
-currently supports compilation of C and C++ programs, using front-ends
-derived from GCC 4.0.1. A new front-end for the C family of languages
-is in development. The compiler infrastructure includes mirror sets of
-programming tools as well as libraries with equivalent functionality.
+currently supports compilation of C and C++ programs using clang
+frontend.
%description -l pl.UTF-8
LLVM to infrastruktura kompilatora zaprojektowana do optymalizacji
czasu kompilowania, linkowania, działania i bezczynności programów w
dowolnych językach programowania. Jest napisana w C++, rozwijana od
roku 2000 przez Uniwersytet w Illinois i Apple. Aktualnie obsługuje
-kompilację programów w C i C++ przy użyciu frontendów wywodzących się
-z GCC 4.0.1. W trakcie tworzenia jest nowy frontend do języków z
-rodziny C. Infrastruktura kompilatora zawiera lustrzane zestawy
-narzędzi programistycznych oraz biblioteki z odpowiadającą narzędziom
-funkcjonalnością.
-
-%package doc
-Summary: Documentation for LLVM
-Group: Documentation
-Requires: %{name} = %{version}-%{release}
-
-%description doc
-Documentation for the LLVM compiler infrastructure.
+kompilację programów w C i C++ przy użyciu frontendu clang.
%package devel
-Summary: Libraries and header files for LLVM
+Summary: Static libraries and header files for LLVM
+Summary(pl.UTF-8): Biblioteki statyczne i pliki nagłówkowe dla LLVM-a
Group: Development/Languages
Requires: %{name} = %{version}-%{release}
Requires: libstdc++-devel >= 6:3.4
%description devel
-This package contains library and header files needed to develop new
-native programs that use the LLVM infrastructure.
+This package contains static libraries and header files needed to
+develop new native programs that use the LLVM infrastructure.
-%package ocaml
-Summary: OCaml binding for LLVM
-Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
-%requires_eq ocaml-runtime
+%description devel -l pl.UTF-8
+Ten pakiet zawiera biblioteki statyczne oraz pliki nagłówkowe
+potrzebne do tworzenia nowych programów natywnych wykorzystujących
+infrastrukturę LLVM.
-%description ocaml
-OCaml binding for LLVM.
+%package doc
+Summary: Documentation for LLVM
+Summary(pl.UTF-8): Dokumentacja do LLVM-a
+Group: Documentation
+# does not require base
-%package ocaml-devel
-Summary: Development files for %{name}-ocaml
-Group: Development/Libraries
-Requires: %{name}-devel = %{version}-%{release}
-Requires: %{name}-ocaml = %{version}-%{release}
+%description doc
+Documentation for the LLVM compiler infrastructure.
-%description ocaml-devel
-The %{name}-ocaml-devel package contains libraries and signature files
-for developing applications that use %{name}-ocaml.
+%description doc -l pl.UTF-8
+Dokumentacja do infrastruktury kompilatorów LLVM.
+
+%package apidocs
+Summary: API documentation for LLVM
+Summary(pl.UTF-8): Dokumentacja API LLVM-a
+Group: Development/Languages
+Requires: %{name}-doc = %{version}-%{release}
+
+%description apidocs
+API documentation for the LLVM compiler infrastructure.
+
+%description apidocs -l pl.UTF-8
+Dokumentacja API infrastruktury kompilatorów LLVM.
%package -n clang
Summary: A C language family frontend for LLVM
+Summary(pl.UTF-8): Frontend LLVM-a do języków z rodziny C
License: NCSA
Group: Development/Languages
and Objective C++ front-end for the LLVM compiler. Its tools are built
as libraries and designed to be loosely-coupled and extendable.
+%description -n clang -l pl.UTF-8
+clang (z angielskiego): 1. głośny, rezonujący, metaliczny dźwięk; 2.
+piskliwy odgłos żurawia lub gęsi; 3. narzędzia frontendowe dla języków
+z rodziny C.
+
+Celem projektu Clang jest utworzenie nowego frontendu dla kompilatora
+LLVM do języków C, C++, Objective C i Objective C++. Narzędzia są
+budowane jako biblioteki i zaprojektowane z myślą o swobodnym łączeniu
+i rozszerzaniu.
+
%package -n clang-analyzer
Summary: A source code analysis framework
+Summary(pl.UTF-8): Szkielet do analizy kodu źródłowego
License: NCSA
Group: Development/Languages
Requires: clang = %{version}-%{release}
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.
+%description -n clang-analyzer -l pl.UTF-8
+Clang Static Analyzer składa się ze szkieletu do analizy kodu
+źródłowego oraz samodzielnego narzędzia znajdującego błędy w
+programach w C i C++. Narzędzie jest wywoływane z linii poleceń, z
+myślą o uruchamianiu wraz z kompilacją projektu lub kodu.
+
+%package -n clang-devel
+Summary: Header files for Clang
+Summary(pl.UTF-8): Pliki nagłówkowe Clanga
+Group: Development/Languages
+Requires: clang = %{version}-%{release}
+
+%description -n clang-devel
+This package contains header files for the Clang compiler.
+
+%description -n clang-devel -l pl.UTF-8
+Ten pakiet zawiera pliki nagłówkowe kompilatora Clang.
+
+%package -n clang-doc
+Summary: Documentation for Clang
+Summary(pl.UTF-8): Dokumentacja do Clanga
+Group: Documentation
+Requires: %{name} = %{version}-%{release}
+
+%description -n clang-doc
+Documentation for the Clang compiler front-end.
+
+%description -n clang-doc -l pl.UTF-8
+Dokumentacja do frontendu kompilatora Clang.
+
+%package -n clang-apidocs
+Summary: API documentation for Clang
+Summary(pl.UTF-8): Dokumentacja API Clanga
+Group: Development/Languages
+Requires: clang-doc = %{version}-%{release}
+
+%description -n clang-apidocs
+API documentation for the Clang compiler.
+
+%description -n clang-apidocs -l pl.UTF-8
+Dokumentacja API kompilatora Clang.
+
+%package ocaml
+Summary: OCaml binding for LLVM
+Summary(pl.UTF-8): Wiązanie OCamla do LLVM-a
+Group: Libraries
+Requires: %{name} = %{version}-%{release}
+%requires_eq ocaml-runtime
+
+%description ocaml
+OCaml binding for LLVM.
+
+%description ocaml -l pl.UTF-8
+Wiązanie OCamla do LLVM-a.
+
+%package ocaml-devel
+Summary: Development files for LLVM OCaml binding
+Summary(pl.UTF-8): Pliki programistyczne wiązania OCamla do LLVM-a
+Group: Development/Libraries
+Requires: %{name}-devel = %{version}-%{release}
+Requires: %{name}-ocaml = %{version}-%{release}
+
+%description ocaml-devel
+The llvm-ocaml-devel package contains libraries and signature files
+for developing applications that use llvm-ocaml binding.
+
+%description ocaml-devel -l pl.UTF-8
+Ten pakiet zawiera biblioteki i pliki sygnatur do tworzenia aplikacji
+wykorzystujących wiązanie llvm-ocaml.
+
+
+%package ocaml-doc
+Summary: Documentation for LLVM's OCaml binding
+Summary(pl.UTF-8): Dokumentacja wiązania OCamla do LLVM-a
+Group: Documentation
+Requires: %{name}-ocaml = %{version}-%{release}
+
+%description ocaml-doc
+HTML documentation for LLVM's OCaml binding.
+
+%description ocaml-doc -l pl.UTF-8
+Dokumentacja HTML wiązania OCamla do LLVM-a.
+
%prep
%setup -q -a1
mv clang-*.* tools/clang
-%patch3 -p1 -b .timestamp
+%patch3 -p1
+%patch4 -p1
+
+sed -i 's|triplet-plox-here|%{_host}|' tools/clang/lib/Driver/ToolChains.cpp
+
+# configure does not properly specify libdir
+sed -i 's|(PROJ_prefix)/lib|(PROJ_prefix)/%{_lib}|g' Makefile.config.in
+
+grep -rl /usr/bin/env tools utils | xargs sed -i -e '1{
+ s,^#!.*bin/env python,#!%{__python},
+ s,^#!.*bin/env perl,#!%{__perl},
+}'
+
+install -d obj
%build
# Disabling assertions now, rec. by pure and needed for OpenGTL
-# no PIC on ix86: http://llvm.org/bugs/show_bug.cgi?id=3239
+# TESTFIX no PIC on ix86: http://llvm.org/bugs/show_bug.cgi?id=3801
#
# bash specific 'test a < b'
-mkdir obj && cd obj
+cd obj
bash ../%configure \
--libdir=%{_libdir}/%{name} \
--datadir=%{_datadir}/%{name}-%{version} \
%ifarch %{ix86}
--enable-pic=no \
+%endif
+%if %{with apidocs}
+ --enable-doxygen \
%endif
--disable-static \
--disable-assertions \
--enable-shared \
--with-pic
-# FIXME file this
-# configure does not properly specify libdir
-sed -i 's|(PROJ_prefix)/lib|(PROJ_prefix)/%{_lib}/%{name}|g' Makefile.config
-
%{__make} \
+ REQUIRES_RTTI=1 \
OPTIMIZE_OPTION="%{rpmcflags} %{rpmcppflags}"
+%if %{with test}
+%{__make} check 2>&1 | tee llvm-testlog.txt
+%{__make} -C tools/clang test 2>&1 | tee clang-testlog.txt
+%endif
+
%install
rm -rf $RPM_BUILD_ROOT
-
-cd obj
-chmod -x examples/Makefile
-
-%{__make} -j1 install \
+%{__make} -C obj -j1 install \
PROJ_docsdir=/moredocs \
DESTDIR=$RPM_BUILD_ROOT
-cd ..
# Static analyzer not installed by default:
-install -d $RPM_BUILD_ROOT%{_libdir}/clang-analyzer/
-# wrong path used
-install -d $RPM_BUILD_ROOT%{_libexecdir}
+# http://clang-analyzer.llvm.org/installation#OtherPlatforms
+install -d $RPM_BUILD_ROOT%{_libdir}/clang-analyzer
# create launchers
-
for f in scan-{build,view}; do
- ln -s %{_libdir}/clang-analyzer/$f $RPM_BUILD_ROOT%{_bindir}/$f
+ ln -s %{_libdir}/clang-analyzer/$f/$f $RPM_BUILD_ROOT%{_bindir}/$f
+ cp -pr tools/clang/tools/$f $RPM_BUILD_ROOT%{_libdir}/clang-analyzer
done
-
-cd tools/clang/tools/scan-build
-
-for f in scan-build scanview.css sorttable.js; do
- cp -p $f $RPM_BUILD_ROOT%{_libdir}/clang-analyzer/
-done
-cp -pr * $RPM_BUILD_ROOT%{_libdir}/clang-analyzer/
-cd ../../../../
+%py_comp $RPM_BUILD_ROOT%{_libdir}/clang-analyzer/scan-view
+%py_ocomp $RPM_BUILD_ROOT%{_libdir}/clang-analyzer/scan-view
+%py_postclean %{_libdir}/clang-analyzer/scan-view
# Move documentation back to build directory
-#
rm -rf moredocs
mv $RPM_BUILD_ROOT/moredocs .
-rm moredocs/*.tar.gz
-#rm moredocs/ocamldoc/html/*.tar.gz
+rm -fv moredocs/*.tar.gz
+rm -fv moredocs/ocamldoc/html/*.tar.gz
+
+# and separate the apidoc
+%if %{with apidocs}
+rm -rf apidoc clang-apidoc
+mv moredocs/html/doxygen apidoc
+cp -a tools/clang/docs/doxygen/html clang-apidoc
+%endif
# And prepare Clang documentation
-#
rm -rf clang-docs
-mkdir clang-docs
+install -d clang-docs
for f in LICENSE.TXT NOTES.txt README.txt TODO.txt; do
- ln tools/clang/$f clang-docs/
+ ln tools/clang/$f clang-docs
done
-#rm -rf tools/clang/docs/{doxygen*,Makefile*,*.graffle,tools}
# Get rid of erroneously installed example files.
-rm $RPM_BUILD_ROOT%{_libdir}/%{name}/*LLVMHello.*
+rm -v $RPM_BUILD_ROOT%{_libdir}/*LLVMHello.*
# FIXME file this bug
-sed -i 's,ABS_RUN_DIR/lib",ABS_RUN_DIR/%{_lib}/%{name}",' \
+sed -i 's,ABS_RUN_DIR/lib",ABS_RUN_DIR/%{_lib}",' \
$RPM_BUILD_ROOT%{_bindir}/llvm-config
-chmod -x $RPM_BUILD_ROOT%{_libdir}/%{name}/*.a
-
# remove documentation makefiles:
# they require the build directory to work
-find examples -name 'Makefile' | xargs -0r rm -f
+rm -rf moredocs/examples
+cp -a examples moredocs/examples
+find moredocs/examples -name Makefile | xargs -0r rm -f
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc CREDITS.TXT LICENSE.TXT README.txt
+%doc CREDITS.TXT LICENSE.TXT README.txt %{?with_tests:llvm-testlog.txt}
%attr(755,root,root) %{_bindir}/bugpoint
%attr(755,root,root) %{_bindir}/llc
%attr(755,root,root) %{_bindir}/lli
-%attr(755,root,root) %{_bindir}/opt
%attr(755,root,root) %{_bindir}/llvmc
-%attr(755,root,root) %{_bindir}/llvm-*
-%exclude %attr(755,root,root) %{_bindir}/llvm-config
+%attr(755,root,root) %{_bindir}/llvm-ar
+%attr(755,root,root) %{_bindir}/llvm-as
+%attr(755,root,root) %{_bindir}/llvm-bcanalyzer
+%attr(755,root,root) %{_bindir}/llvm-diff
+%attr(755,root,root) %{_bindir}/llvm-dis
+%attr(755,root,root) %{_bindir}/llvm-extract
+%attr(755,root,root) %{_bindir}/llvm-ld
+%attr(755,root,root) %{_bindir}/llvm-link
+%attr(755,root,root) %{_bindir}/llvm-mc
+%attr(755,root,root) %{_bindir}/llvm-nm
+%attr(755,root,root) %{_bindir}/llvm-objdump
+%attr(755,root,root) %{_bindir}/llvm-prof
+%attr(755,root,root) %{_bindir}/llvm-ranlib
+%attr(755,root,root) %{_bindir}/llvm-stub
+%attr(755,root,root) %{_bindir}/macho-dump
+%attr(755,root,root) %{_bindir}/opt
+%attr(755,root,root) %{_libdir}/libLLVM-%{version}.so
%{_mandir}/man1/bugpoint.1*
+%{_mandir}/man1/lit.1*
%{_mandir}/man1/llc.1*
%{_mandir}/man1/lli.1*
+%{_mandir}/man1/llvm-ar.1*
+%{_mandir}/man1/llvm-as.1*
+%{_mandir}/man1/llvm-bcanalyzer.1*
+%{_mandir}/man1/llvm-diff.1*
+%{_mandir}/man1/llvm-dis.1*
+%{_mandir}/man1/llvm-extract.1*
+%{_mandir}/man1/llvm-ld.1*
+%{_mandir}/man1/llvm-link.1*
+%{_mandir}/man1/llvm-nm.1*
+%{_mandir}/man1/llvm-prof.1*
+%{_mandir}/man1/llvm-ranlib.1*
%{_mandir}/man1/llvmc.1*
-%{_mandir}/man1/llvm-*.1*
%{_mandir}/man1/llvmgcc.1*
%{_mandir}/man1/llvmgxx.1*
%{_mandir}/man1/opt.1*
-#%{_mandir}/man1/stkrc.1*
-%{_mandir}/man1/tblgen.1*
-
-%files doc
-%defattr(644,root,root,755)
-%doc docs/*.{html,css} docs/img examples moredocs/html
%files devel
%defattr(644,root,root,755)
-#%doc docs/doxygen
%attr(755,root,root) %{_bindir}/llvm-config
+%attr(755,root,root) %{_libdir}/profile_rt.so
+%{_libdir}/libCompilerDriver.a
+%{_libdir}/libLLVM*.a
+%{_libdir}/libllvm*.a
+%ifarch %{x8664}
+%attr(755,root,root) %{_libdir}/BugpointPasses.so
+%attr(755,root,root) %{_libdir}/libEnhancedDisassembly.so
+%attr(755,root,root) %{_libdir}/libLTO.so
+%{_libdir}/libEnhancedDisassembly.a
+%{_libdir}/libLTO.a
+%endif
%{_includedir}/llvm
%{_includedir}/llvm-c
-%{_libdir}/%{name}
+%{_mandir}/man1/llvm-config.1*
+
+%files doc
+%defattr(644,root,root,755)
+%doc moredocs/examples moredocs/html
+
+%if %{with apidocs}
+%files apidocs
+%defattr(644,root,root,755)
+%doc apidoc/*
+%endif
%files -n clang
%defattr(644,root,root,755)
-%doc clang-docs/*
-%doc tools/clang/docs/*
-%attr(755,root,root) %{_bindir}/clang*
+%doc clang-docs/{LICENSE.TXT,NOTES.txt,README.txt,TODO.txt} %{?with_tests:clang-testlog.txt}
+%attr(755,root,root) %{_bindir}/clang
+%attr(755,root,root) %{_bindir}/clang++
%attr(755,root,root) %{_bindir}/tblgen
+%attr(755,root,root) %{_libdir}/libclang.so
%{_prefix}/lib/clang
-%{_mandir}/man1/clang.1.*
+%{_mandir}/man1/clang.1*
+%{_mandir}/man1/tblgen.1*
%files -n clang-analyzer
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/scan-build
%attr(755,root,root) %{_bindir}/scan-view
%dir %{_libdir}/clang-analyzer
-%attr(755,root,root) %{_libdir}/clang-analyzer/scan-*
-%attr(755,root,root) %{_libdir}/clang-analyzer/c++-*
-%attr(755,root,root) %{_libdir}/clang-analyzer/ccc-*
-%attr(755,root,root) %{_libdir}/clang-analyzer/set-xcode-*
-%{_libdir}/clang-analyzer/*.*
+%dir %{_libdir}/clang-analyzer/scan-build
+%{_libdir}/clang-analyzer/scan-build/*.css
+%{_libdir}/clang-analyzer/scan-build/*.js
+%attr(755,root,root) %{_libdir}/clang-analyzer/scan-build/scan-build
+%attr(755,root,root) %{_libdir}/clang-analyzer/scan-build/*-analyzer
+
+%dir %{_libdir}/clang-analyzer/scan-view
+%attr(755,root,root) %{_libdir}/clang-analyzer/scan-view/scan-view
+%{_libdir}/clang-analyzer/scan-view/Resources
+%{_libdir}/clang-analyzer/scan-view/*.py[co]
+
+%files -n clang-devel
+%defattr(644,root,root,755)
+%{_libdir}/libclang*.a
+%{_includedir}/clang
+%{_includedir}/clang-c
+
+%files -n clang-doc
+%defattr(644,root,root,755)
+%doc tools/clang/docs/*.{css,html,png,txt}
+
+%if %{with apidocs}
+%files -n clang-apidocs
+%defattr(644,root,root,755)
+%doc clang-apidoc/*
+%endif
+
+%if %{with ocaml}
%files ocaml
%defattr(644,root,root,755)
-%doc moredocs/ocamldoc/html/*
-%{_libdir}/ocaml/*.cma
-%{_libdir}/ocaml/*.cmi
+%{_libdir}/ocaml/llvm*.cma
+%{_libdir}/ocaml/llvm*.cmi
%files ocaml-devel
%defattr(644,root,root,755)
-%{_libdir}/ocaml/*.a
-%{_libdir}/ocaml/*.cmx*
-%{_libdir}/ocaml/*.mli
+%{_libdir}/ocaml/libLLVM*.a
+%{_libdir}/ocaml/libllvm*.a
+%{_libdir}/ocaml/llvm*.a
+%{_libdir}/ocaml/llvm*.cmx*
+%{_libdir}/ocaml/llvm*.mli
+
+%files ocaml-doc
+%defattr(644,root,root,755)
+%doc moredocs/ocamldoc/html/*
+%endif