gn/gn.spec

188 lines
5.7 KiB
RPMSpec
Raw Normal View History

2021-03-17 14:46:27 +00:00
# Build HTML docs from markdown using pandoc?
%bcond_without html_docs
Name: gn
# Upstream uses the number of commits in the git history as the version number.
# See gn --version, which outputs something like “1874 (2b683eff)”. The commit
# position and short commit hash in this string come from “git describe HEAD
# --match initial-commit”; see build/gen.py. This means that a complete git
# checkout is required to establish the version number; the information is not
# in the tarball! This is terribly inconvenient. See
# https://bugs.chromium.org/p/gn/issues/detail?id=3.
#
# As a result, it is necessary to use our custom update-version script,
# supplying the new full commit hash as the sole argument or providing no
# arguments to select the latest commit. This will:
# 1. Clone the git repository from the Internet (a substantial download)
# 2. Run build/gen.py to generate last_commit_position.h, the header with
# version information, and copy it into the same directory as the script
# 3. Modify the commit and access macros and the Version field in this spec
# file.
# 4. Download the source tarball (spectool -g)
# 5. Update the sources (fedpkg new-sources %%{commit}.tar.gz)
# 6. Stage all changes in git
2021-07-20 20:45:44 +00:00
# 7. Commit the changes
2021-06-22 19:54:51 +00:00
#
# See https://gn.googlesource.com/gn/+log for the latest changes.
2022-04-13 17:26:14 +00:00
%global commit c114b7e0b3a327e854cae6b560902230436f1ac7
%global access 20220413
2021-03-17 14:46:27 +00:00
%global shortcommit %(echo %{commit} | cut -b -8)
2022-04-13 17:26:14 +00:00
Version: 2014
2021-07-20 20:45:44 +00:00
Release: %autorelease -s %{access}git%{shortcommit}
2021-03-17 14:46:27 +00:00
Summary: Meta-build system that generates build files for Ninja
# BSD except for src/base/third_party/icu/, which is (Unicode and MIT); note
# that the “ICU License” is MIT,
# https://fedoraproject.org/wiki/Licensing:MIT#Modern_style_.28ICU_Variant.29
#
# Note that src/util/test/gn_test.cc, which is licensed ASL 2.0, does not
# contribute to the installed RPM, only to the gn_unittests executable; you may
# verify this with:
# gdb -ex 'set pagination off' -ex 'info sources' gn | grep -F gn_test.cc
License: BSD and Unicode and MIT
URL: https://gn.googlesource.com/gn
Source0: %{url}/+archive/%{commit}.tar.gz#/gn-%{shortcommit}.tar.gz
2021-03-17 14:46:27 +00:00
# Generated using script update-version:
Source1: last_commit_position.h
Source2: update-version
# Stop overriding optimization flags
Patch0: gn-0153d369-no-O3.patch
2021-03-17 14:46:27 +00:00
2021-07-20 20:51:11 +00:00
BuildRequires: python3-devel
2021-03-17 14:46:27 +00:00
BuildRequires: ninja-build
BuildRequires: gcc-c++
2022-02-12 04:29:00 +00:00
# For RPM macros:
BuildRequires: emacs-common
2021-03-17 14:46:27 +00:00
%if %{with html_docs}
BuildRequires: pandoc
BuildRequires: parallel
%endif
BuildRequires: help2man
Requires: vim-filesystem
2021-07-20 20:51:11 +00:00
Requires: python3
Provides: vim-gn = %{version}-%{release}
2021-03-17 14:46:27 +00:00
Requires: emacs-filesystem >= %{_emacs_version}
Provides: emacs-gn = %{version}-%{release}
2021-03-17 14:46:27 +00:00
%description
GN is a meta-build system that generates build files for Ninja.
%package doc
Summary: Documentation for GN
BuildArch: noarch
%description doc
The gn-doc package contains detailed documentation for GN.
2021-03-17 14:46:27 +00:00
%prep
%autosetup -c -n gn-%{commit} -p1
2021-03-17 14:46:27 +00:00
# Use pre-generated last_commit_position.h.
mkdir -p ./out
cp -vp '%{SOURCE1}' ./out
# Copy and rename vim extensions readme for use in the main documentation
# directory.
cp -vp misc/vim/README.md README-vim.md
# Fix shebangs in examples and such.
%py3_shebang_fix .
%build
AR='gcc-ar'; export AR
%set_build_flags
# Both --use-icf and --use-lto add compiler flags that only work with clang++,
# not with g++. We do get LTO on Fedora anyway, since we respect the
# distributions build flags.
%{python3} build/gen.py \
2021-03-17 14:46:27 +00:00
--no-last-commit-position \
--no-strip \
--no-static-libstdc++
ninja -C out -v
%if %{with html_docs}
# There is a script, misc/help_as_html.py, that generates some HTML help, but
# pandoc does a better job and we can cover more Markdown sources.
find . -type f -name '*.md' | parallel -v pandoc -o '{.}.html' '{}'
%endif
help2man \
--name='%{summary}' \
--version-string="gn $(./out/gn --version)" \
2021-03-17 14:46:27 +00:00
--no-info \
./out/gn |
2021-03-17 14:46:27 +00:00
# Clean up a couple of stray binary bytes in the help output
tr -d '\302\240' |
# Format the entries within the sections as tagged paragraphs, and italicise
# [placeholders in square brackets].
sed -r -e 's/(^[[:alnum:]_]+:)/.TP\n.B \1\n/' \
-e 's/\[([^]]+)\]/\\fI[\1]\\fR/g' > out/gn.1
2021-03-17 14:46:27 +00:00
%install
install -t '%{buildroot}%{_bindir}' -D -p out/gn
2021-03-17 14:46:27 +00:00
install -d '%{buildroot}%{_datadir}/vim/vimfiles'
cp -vrp misc/vim/* '%{buildroot}%{_datadir}/vim/vimfiles'
find '%{buildroot}%{_datadir}/vim/vimfiles' \
2021-04-06 15:55:51 +00:00
-type f -name 'README.*' -print -delete
%py_byte_compile %{python3} '%{buildroot}%{_datadir}/vim/vimfiles/gn-format.py'
2021-03-17 14:46:27 +00:00
2021-07-20 20:51:11 +00:00
install -t '%{buildroot}%{_emacs_sitestartdir}' -D -p -m 0644 misc/emacs/*.el
2021-03-17 14:46:27 +00:00
install -t '%{buildroot}%{_mandir}/man1' -D -m 0644 -p out/gn.1
2021-03-17 14:46:27 +00:00
%check
out/gn_unittests
# Verify consistency of the version header with the spec file
grep -E '^#define[[:blank:]]+LAST_COMMIT_POSITION_NUM[[:blank:]]+'\
'%{version}[[:blank:]]*' \
'out/last_commit_position.h' >/dev/null
grep -E '^#define[[:blank:]]+LAST_COMMIT_POSITION[[:blank:]]+'\
'"%{version} \(%{shortcommit}\)"[[:blank:]]*' \
'out/last_commit_position.h' >/dev/null
%files
%license LICENSE
%{_bindir}/gn
2021-03-17 14:46:27 +00:00
%{_mandir}/man1/gn.1*
2021-03-17 14:46:27 +00:00
%{_datadir}/vim/vimfiles/gn-format.py
%{_datadir}/vim/vimfiles/autoload/gn.vim
%{_datadir}/vim/vimfiles/ftdetect/gnfiletype.vim
%{_datadir}/vim/vimfiles/ftplugin/gn.vim
%{_datadir}/vim/vimfiles/syntax/gn.vim
2021-03-17 14:46:27 +00:00
%{_emacs_sitestartdir}/gn-mode.el
2021-03-17 14:46:27 +00:00
%files doc
%license LICENSE
%doc AUTHORS
%doc OWNERS
%doc README*.md
%if %{with html_docs}
%doc README*.html
%endif
%doc docs
%doc examples
%doc infra
%doc tools
%changelog
2021-07-20 20:45:44 +00:00
%autochangelog