diff --git a/clang.spec b/clang.spec index ddeede0..7db3685 100644 --- a/clang.spec +++ b/clang.spec @@ -36,13 +36,19 @@ %global install_includedir %{install_prefix}/include %global install_libdir %{install_prefix}/lib %global install_datadir %{install_prefix}/share +%global install_libexecdir %{install_prefix}/libexec +%global install_docdir %{install_datadir}/doc %global pkg_includedir %{install_includedir} %else %global pkg_name clang -%global install_prefix /usr +%global install_prefix %{_prefix} +%global install_bindir %{_bindir} %global install_datadir %{_datadir} %global install_libdir %{_libdir} +%global install_includedir %{_includedir} +%global install_libexecdir %{_libexecdir} +%global install_docdir %{_docdir} %endif %ifarch ppc64le @@ -68,10 +74,8 @@ Source1: %{llvm_snapshot_source_prefix}clang-tools-extra-%{llvm_snapshot_yyyy %else Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz.sig -%if %{without compat_build} Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz.sig -%endif Source4: release-keys.asc %endif %if %{without compat_build} @@ -100,11 +104,9 @@ Patch9: 0001-Clang-Defer-the-instantiation-of-explicit-specifier-.patch # Avoid unwanted dependency on python-recommonmark Patch101: 0009-disable-recommonmark.patch -%if %{without compat_build} # Patches for clang-tools-extra # See https://reviews.llvm.org/D120301 Patch201: 0001-clang-tools-extra-Make-test-dependency-on-LLVMHello-.patch -%endif BuildRequires: clang BuildRequires: cmake @@ -114,8 +116,8 @@ BuildRequires: ninja-build %global llvm_pkg_name llvm%{maj_ver} %else %global llvm_pkg_name llvm -BuildRequires: llvm-test = %{version} -BuildRequires: llvm-googletest = %{version} +BuildRequires: %{llvm_pkg_name}-test = %{version} +BuildRequires: %{llvm_pkg_name}-googletest = %{version} %endif BuildRequires: %{llvm_pkg_name}-devel = %{version} @@ -143,10 +145,10 @@ BuildRequires: libatomic # We need python3-devel for %%py3_shebang_fix BuildRequires: python3-devel -%if %{without compat_build} # For reproducible pyc file generation # See https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#_byte_compilation_reproducibility BuildRequires: /usr/bin/marshalparser +%if %{without compat_build} %global py_reproducible_pyc_path %{buildroot}%{python3_sitelib} %endif @@ -213,11 +215,9 @@ Runtime library for clang. %package devel Summary: Development header files for clang Requires: %{name}-libs = %{version}-%{release} -%if %{without compat_build} Requires: %{name}%{?_isa} = %{version}-%{release} # The clang CMake files reference tools from clang-tools-extra. Requires: %{name}-tools-extra%{?_isa} = %{version}-%{release} -%endif Provides: %{name}-devel(major) = %{maj_ver} %description devel @@ -231,7 +231,6 @@ BuildArch: noarch %description resource-filesystem This package owns the clang resouce directory: lib/clang/$version/ -%if %{without compat_build} %package analyzer Summary: A source code analysis framework License: Apache-2.0 WITH LLVM-exception OR NCSA OR MIT @@ -271,7 +270,7 @@ Requires: python3 %description -n git-clang-format clang-format integration for git. - +%if %{without compat_build} %package -n python3-clang Summary: Python3 bindings for clang Requires: %{name}-devel%{?_isa} = %{version}-%{release} @@ -288,9 +287,6 @@ Requires: python3 %{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE3}' --data='%{SOURCE0}' %endif -%if %{with compat_build} -%autosetup -n %{clang_srcdir} -p2 -%else %if %{without snapshot_build} %{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE2}' --data='%{SOURCE1}' @@ -321,7 +317,6 @@ rm test/CodeGen/profile-filter.c tools/scan-view/share/startfile.py \ tools/scan-build-py/bin/* \ tools/scan-build-py/libexec/* -%endif %build @@ -335,13 +330,6 @@ rm test/CodeGen/profile-filter.c %global _lto_cflags %nil %endif -%if 0%{?rhel} -%ifarch %{ix86} -# Linking libclang.so goes out of memory even with ThinLTO and a single link job. -%global _lto_cflags %nil -%endif -%endif - %ifarch s390 s390x aarch64 %ix86 ppc64le # Decrease debuginfo verbosity to reduce memory consumption during final library linking %global optflags %(echo %{optflags} | sed 's/-g /-g1 /') @@ -369,24 +357,21 @@ rm test/CodeGen/profile-filter.c -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \ %endif %if %{with compat_build} - -DCLANG_BUILD_TOOLS:BOOL=OFF \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ - -DCLANG_INCLUDE_TESTS:BOOL=OFF \ - -DLLVM_INCLUDE_TESTS:BOOL=OFF \ -DLLVM_CMAKE_DIR=%{install_libdir}/cmake/llvm \ %else - -DCLANG_INCLUDE_TESTS:BOOL=ON \ - -DLLVM_BUILD_UTILS:BOOL=ON \ - -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../%{clang_tools_srcdir} \ - -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ - -DLLVM_LIT_ARGS="-vv" \ - -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ %if 0%{?__isa_bits} == 64 -DLLVM_LIBDIR_SUFFIX=64 \ %else -DLLVM_LIBDIR_SUFFIX= \ %endif %endif + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_BUILD_UTILS:BOOL=ON \ + -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../%{clang_tools_srcdir} \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_LIT_ARGS="-vv" \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ \ %if %{with snapshot_build} -DLLVM_VERSION_SUFFIX="%{llvm_snapshot_version_suffix}" \ @@ -422,20 +407,13 @@ rm test/CodeGen/profile-filter.c %cmake_install -%if %{with compat_build} - -# Remove binaries/other files -rm -Rf %{buildroot}%{install_bindir} -rm -Rf %{buildroot}%{install_prefix}/share -rm -Rf %{buildroot}%{install_prefix}/libexec -# Remove scanview-py helper libs -rm -Rf %{buildroot}%{install_prefix}/lib/{libear,libscanbuild} - -%else +# Add a symlink in /usr/bin to clang-format-diff +ln -s %{install_datadir}/clang/clang-format-diff.py %{buildroot}%{install_bindir}/clang-format-diff # File in the macros file for other packages to use. We are not doing this # in the compat package, because the version macros would # conflict with # eachother if both clang and the clang compat package were installed together. +%if %{without compat_build} install -p -m0644 -D %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.%{name} sed -i -e "s|@@CLANG_MAJOR_VERSION@@|%{maj_ver}|" \ -e "s|@@CLANG_MINOR_VERSION@@|%{min_ver}|" \ @@ -451,80 +429,101 @@ install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/ mv %{buildroot}%{_prefix}/%{_lib}/{libear,libscanbuild} %{buildroot}%{python3_sitelib} %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/{libear,libscanbuild} -# Fix permissions of scan-view scripts -chmod a+x %{buildroot}%{_datadir}/scan-view/{Reporter.py,startfile.py} - -# 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* - -# TODO: Package html docs -rm -Rvf %{buildroot}%{_docdir}/Clang/clang/html -rm -Rvf %{buildroot}%{_datadir}/clang/clang-doc-default-stylesheet.css -rm -Rvf %{buildroot}%{_datadir}/clang/index.js - -# TODO: What are the Fedora guidelines for packaging bash autocomplete files? -rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh - # 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 +# Fix permission +chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* + # Add clang++-{version} symlink ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} +%else +# Not sure where to put these python modules for the compat build. +rm -Rf %{buildroot}%{install_libdir}/{libear,libscanbuild} + +# Not sure where to put the emacs integration files for the compat build. +rm -Rf %{buildroot}%{install_datadir}/clang/*.el + +# Not sure what to do with man pages for the compat builds +rm -Rf %{buildroot}%{install_prefix}/share/man/ + +# Add version suffix to binaries +mkdir -p %{buildroot}%{_bindir} +for f in %{buildroot}/%{install_bindir}/*; do + filename=`basename $f` + if echo $filename | grep -e '%{maj_ver}'; then + continue + fi + ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename-%{maj_ver} +done -# Fix permission -chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* +# Add clang++-{version} symlink +ln -s ../../%{install_bindir}/clang++ %{buildroot}%{install_bindir}/clang++-%{maj_ver} %endif +# Fix permissions of scan-view scripts +chmod a+x %{buildroot}%{install_datadir}/scan-view/{Reporter.py,startfile.py} + +# multilib fix +%multilib_fix_c_header --file %{install_includedir}/clang/Config/config.h + +# remove editor integrations (bbedit, sublime, emacs, vim) +rm -vf %{buildroot}%{install_datadir}/clang/clang-format-bbedit.applescript +rm -vf %{buildroot}%{install_datadir}/clang/clang-format-sublime.py* + +# TODO: Package html docs +rm -Rvf %{buildroot}%{install_docdir}/Clang/clang/html +rm -Rvf %{buildroot}%{install_datadir}/clang/clang-doc-default-stylesheet.css +rm -Rvf %{buildroot}%{install_datadir}/clang/index.js + +# TODO: What are the Fedora guidelines for packaging bash autocomplete files? +rm -vf %{buildroot}%{install_datadir}/clang/bash-autocomplete.sh + + # Create sub-directories in the clang resource directory that will be # populated by other packages mkdir -p %{buildroot}%{install_prefix}/lib/clang/%{maj_ver}/{bin,include,lib,share}/ -%if %{without compat_build} -# Add a symlink in /usr/bin to clang-format-diff -ln -s %{_datadir}/clang/clang-format-diff.py %{buildroot}%{_bindir}/clang-format-diff -%endif - %check -%if %{without compat_build} %if %{with check} # Build test dependencies separately, to prevent invocations of host clang from being affected # by LD_LIBRARY_PATH below. %cmake_build --target clang-test-depends \ ExtraToolsUnitTests ClangdUnitTests ClangIncludeCleanerUnitTests ClangPseudoUnitTests # requires lit.py from LLVM utilities -LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_builddir} -%endif +LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C %{__cmake_builddir} %endif -%if %{without compat_build} %files %license LICENSE.TXT -%{_bindir}/clang -%{_bindir}/clang++ -%{_bindir}/clang-%{maj_ver} -%{_bindir}/clang++-%{maj_ver} -%{_bindir}/clang-cl -%{_bindir}/clang-cpp +%{install_bindir}/clang +%{install_bindir}/clang++ +%{install_bindir}/clang-%{maj_ver} +%{install_bindir}/clang++-%{maj_ver} +%{install_bindir}/clang-cl +%{install_bindir}/clang-cpp +%if %{without compat_build} %{_mandir}/man1/clang.1.gz %{_mandir}/man1/clang++.1.gz %{_mandir}/man1/clang-%{maj_ver}.1.gz %{_mandir}/man1/clang++-%{maj_ver}.1.gz +%else +%{_bindir}/clang-%{maj_ver} +%{_bindir}/clang++-%{maj_ver} +%{_bindir}/clang-cl-%{maj_ver} +%{_bindir}/clang-cpp-%{maj_ver} %endif %files libs @@ -532,19 +531,15 @@ LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_buildd %{install_libdir}/*.so.* %files devel -%if %{without compat_build} -%{_libdir}/*.so -%{_includedir}/clang/ -%{_includedir}/clang-c/ -%{_libdir}/cmake/* -%{_bindir}/clang-tblgen -%dir %{_datadir}/clang/ -%else %{install_libdir}/*.so -%{pkg_includedir}/clang/ -%{pkg_includedir}/clang-c/ -%{install_libdir}/cmake/ +%{install_includedir}/clang/ +%{install_includedir}/clang-c/ +%{install_libdir}/cmake/* +%{install_bindir}/clang-tblgen +%if %{with compat_build} +%{_bindir}/clang-tblgen-%{maj_ver} %endif +%dir %{install_datadir}/clang/ %files resource-filesystem %dir %{install_prefix}/lib/clang/ @@ -555,76 +550,124 @@ LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_buildd %dir %{install_prefix}/lib/clang/%{maj_ver}/share/ %if %{without compat_build} %{_rpmmacrodir}/macros.%{name} +%endif %files analyzer -%{_bindir}/scan-view -%{_bindir}/scan-build -%{_bindir}/analyze-build -%{_bindir}/intercept-build -%{_bindir}/scan-build-py -%{_libexecdir}/ccc-analyzer -%{_libexecdir}/c++-analyzer -%{_libexecdir}/analyze-c++ -%{_libexecdir}/analyze-cc -%{_libexecdir}/intercept-c++ -%{_libexecdir}/intercept-cc -%{_datadir}/scan-view/ -%{_datadir}/scan-build/ +%{install_bindir}/scan-view +%{install_bindir}/scan-build +%{install_bindir}/analyze-build +%{install_bindir}/intercept-build +%{install_bindir}/scan-build-py +%if %{with compat_build} +%{_bindir}/scan-view-%{maj_ver} +%{_bindir}/scan-build-%{maj_ver} +%{_bindir}/analyze-build-%{maj_ver} +%{_bindir}/intercept-build-%{maj_ver} +%{_bindir}/scan-build-py-%{maj_ver} +%endif +%{install_libexecdir}/ccc-analyzer +%{install_libexecdir}/c++-analyzer +%{install_libexecdir}/analyze-c++ +%{install_libexecdir}/analyze-cc +%{install_libexecdir}/intercept-c++ +%{install_libexecdir}/intercept-cc +%{install_datadir}/scan-view/ +%{install_datadir}/scan-build/ +%if %{without compat_build} %{_mandir}/man1/scan-build.1.* %{python3_sitelib}/libear %{python3_sitelib}/libscanbuild +%endif %files tools-extra -%{_bindir}/amdgpu-arch -%{_bindir}/clang-apply-replacements -%{_bindir}/clang-change-namespace -%{_bindir}/clang-check -%{_bindir}/clang-doc -%{_bindir}/clang-extdef-mapping -%{_bindir}/clang-format -%{_bindir}/clang-include-cleaner -%{_bindir}/clang-include-fixer -%{_bindir}/clang-move -%{_bindir}/clang-offload-bundler -%{_bindir}/clang-offload-packager -%{_bindir}/clang-linker-wrapper -%{_bindir}/clang-pseudo -%{_bindir}/clang-query -%{_bindir}/clang-refactor -%{_bindir}/clang-rename -%{_bindir}/clang-reorder-fields -%{_bindir}/clang-repl -%{_bindir}/clang-scan-deps -%{_bindir}/clang-tidy -%{_bindir}/clangd -%{_bindir}/diagtool -%{_bindir}/hmaptool -%{_bindir}/nvptx-arch -%{_bindir}/pp-trace -%{_bindir}/c-index-test -%{_bindir}/find-all-symbols -%{_bindir}/modularize -%{_bindir}/clang-format-diff +%{install_bindir}/amdgpu-arch +%{install_bindir}/clang-apply-replacements +%{install_bindir}/clang-change-namespace +%{install_bindir}/clang-check +%{install_bindir}/clang-doc +%{install_bindir}/clang-extdef-mapping +%{install_bindir}/clang-format +%{install_bindir}/clang-include-cleaner +%{install_bindir}/clang-include-fixer +%{install_bindir}/clang-move +%{install_bindir}/clang-offload-bundler +%{install_bindir}/clang-offload-packager +%{install_bindir}/clang-linker-wrapper +%{install_bindir}/clang-pseudo +%{install_bindir}/clang-query +%{install_bindir}/clang-refactor +%{install_bindir}/clang-rename +%{install_bindir}/clang-reorder-fields +%{install_bindir}/clang-repl +%{install_bindir}/clang-scan-deps +%{install_bindir}/clang-tidy +%{install_bindir}/clangd +%{install_bindir}/diagtool +%{install_bindir}/hmaptool +%{install_bindir}/nvptx-arch +%{install_bindir}/pp-trace +%{install_bindir}/c-index-test +%{install_bindir}/find-all-symbols +%{install_bindir}/modularize +%{install_bindir}/clang-format-diff +%{install_bindir}/run-clang-tidy +%if %{with compat_build} +%{_bindir}/amdgpu-arch-%{maj_ver} +%{_bindir}/clang-apply-replacements-%{maj_ver} +%{_bindir}/clang-change-namespace-%{maj_ver} +%{_bindir}/clang-check-%{maj_ver} +%{_bindir}/clang-doc-%{maj_ver} +%{_bindir}/clang-extdef-mapping-%{maj_ver} +%{_bindir}/clang-format-%{maj_ver} +%{_bindir}/clang-include-cleaner-%{maj_ver} +%{_bindir}/clang-include-fixer-%{maj_ver} +%{_bindir}/clang-move-%{maj_ver} +%{_bindir}/clang-offload-bundler-%{maj_ver} +%{_bindir}/clang-offload-packager-%{maj_ver} +%{_bindir}/clang-linker-wrapper-%{maj_ver} +%{_bindir}/clang-pseudo-%{maj_ver} +%{_bindir}/clang-query-%{maj_ver} +%{_bindir}/clang-refactor-%{maj_ver} +%{_bindir}/clang-rename-%{maj_ver} +%{_bindir}/clang-reorder-fields-%{maj_ver} +%{_bindir}/clang-repl-%{maj_ver} +%{_bindir}/clang-scan-deps-%{maj_ver} +%{_bindir}/clang-tidy-%{maj_ver} +%{_bindir}/clangd-%{maj_ver} +%{_bindir}/diagtool-%{maj_ver} +%{_bindir}/hmaptool-%{maj_ver} +%{_bindir}/nvptx-arch-%{maj_ver} +%{_bindir}/pp-trace-%{maj_ver} +%{_bindir}/c-index-test-%{maj_ver} +%{_bindir}/find-all-symbols-%{maj_ver} +%{_bindir}/modularize-%{maj_ver} +%{_bindir}/clang-format-diff-%{maj_ver} +%{_bindir}/run-clang-tidy-%{maj_ver} +%else %{_mandir}/man1/diagtool.1.gz %{_emacs_sitestartdir}/clang-format.el %{_emacs_sitestartdir}/clang-rename.el %{_emacs_sitestartdir}/clang-include-fixer.el -%{_datadir}/clang/clang-format.py* -%{_datadir}/clang/clang-format-diff.py* -%{_datadir}/clang/clang-include-fixer.py* -%{_datadir}/clang/clang-tidy-diff.py* -%{_bindir}/run-clang-tidy -%{_datadir}/clang/run-find-all-symbols.py* -%{_datadir}/clang/clang-rename.py* +%endif +%{install_datadir}/clang/clang-format.py* +%{install_datadir}/clang/clang-format-diff.py* +%{install_datadir}/clang/clang-include-fixer.py* +%{install_datadir}/clang/clang-tidy-diff.py* +%{install_datadir}/clang/run-find-all-symbols.py* +%{install_datadir}/clang/clang-rename.py* %files tools-extra-devel -%{_includedir}/clang-tidy/ +%{install_includedir}/clang-tidy/ %files -n git-clang-format -%{_bindir}/git-clang-format +%{install_bindir}/git-clang-format +%if %{with compat_build} +%{_bindir}/git-clang-format-%{maj_ver} +%endif +%if %{without compat_build} %files -n python3-clang %{python3_sitelib}/clang/