Compare commits

..

48 commits

Author SHA1 Message Date
Benjamin A. Beasley
1a4fef6368 Correct SPDX License expression 2024-12-12 14:55:54 -05:00
Benjamin A. Beasley
769d411bc3 Respect %_smp_build_ncpus 2024-12-12 14:55:51 -05:00
Benjamin A. Beasley
17d195d789 Allow warnings in the build
Turning all warnings into errors is too strict for downstream packaging.
2023-12-20 10:39:48 -05:00
Benjamin A. Beasley
e00502a64f Update to version 2077 2023-12-20 10:39:48 -05:00
Benjamin A. Beasley
a240613c5e Indicate dirs. in files list with trailing slashes 2023-12-20 10:39:48 -05:00
Benjamin A. Beasley
ab3c2afb5b Convert License to SPDX 2023-12-20 10:39:48 -05:00
Benjamin A. Beasley
bab0024e01 Add patch upstream status for gn-0153d369-no-O3.patch 2023-12-20 10:26:57 -05:00
Benjamin A. Beasley
caf1fc00ec Form the short commit hash with only shell builtins
[skip changelog]
2023-12-20 10:26:22 -05:00
Benjamin A. Beasley
0f28070aae Fix a spec-file comment
[skip changelog]
2023-12-20 10:25:46 -05:00
Benjamin A. Beasley
81d60534a4 Improve handling of bundled ICU components 2023-12-20 10:20:56 -05:00
Benjamin A. Beasley
4a9e0b5430 BR emacs-common for RPM macros 2023-12-20 10:20:52 -05:00
Benjamin A. Beasley
fef93112a2 Drop even the emacs-nox BR
We are just installing a mode file.
2023-12-20 10:20:49 -05:00
Benjamin A. Beasley
6a2ed2ab98 BR emacs-nox instead of full emacs 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
799d0e50c3 Update to version 1953 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
d7dc2b72d4 Drop BR on python3, redundant with python3-devel 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
98d8922488 Update to version 1951 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
ecdaf02c32 Update to version 1945 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
7288e9e7fe Update to version 1944 2023-12-20 10:19:47 -05:00
Benjamin A. Beasley
2c07ba74ac Drop “gcc cleanup” patch (finally upstreamed) 2023-12-20 10:19:07 -05:00
Benjamin A. Beasley
556bd97d80 Update to version 1943 2023-12-20 10:18:56 -05:00
Benjamin A. Beasley
7648eb431c Update to version 1942 2023-12-20 10:18:24 -05:00
Benjamin A. Beasley
d9fa2be4a7 Use %%python3 macro instead of %%__python3 2023-12-20 10:15:38 -05:00
Benjamin A. Beasley
afeddcf216 Update to version 1939 2023-12-20 10:15:36 -05:00
Benjamin A. Beasley
638f494530 Reduce macro indirection in the spec file 2023-12-20 10:15:29 -05:00
Benjamin A. Beasley
67c353ac34 Correctly stop overriding optimization flags 2023-12-20 10:15:18 -05:00
Benjamin A. Beasley
43cd4a0a65 Update to version 1938 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
9c2ae1fcab Update to version 1937 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
650481f69d Update to version 1936 (Fix typos in README.md) 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
e5152bf844 Update to version 1935 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
9568879c68 Update to version 1934 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
5911aa81bf Update to version 1931 2023-12-20 10:14:46 -05:00
Benjamin A. Beasley
e23ab35303 Drop workarounds for F32 and EPEL7 2023-12-20 10:10:58 -05:00
Benjamin A. Beasley
17f03f2e05 Update to version 1929 2023-12-20 10:09:25 -05:00
Benjamin A. Beasley
2e36ed7a43 Update to version 1924 2023-12-20 10:09:06 -05:00
Benjamin A. Beasley
ac92af90f7 Update to version 1921 2023-12-20 10:08:28 -05:00
Benjamin A. Beasley
0fa9596fe1 Stop overriding optimization flags 2023-12-20 10:05:04 -05:00
Benjamin A. Beasley
327ee1af6b Update to 1920 2023-12-20 10:04:28 -05:00
Benjamin A. Beasley
34cf56ec3d Update to version 1919 2023-12-20 10:03:52 -05:00
Benjamin A. Beasley
f86ac885c4 Update to version 1916 2023-12-20 10:03:18 -05:00
Benjamin A. Beasley
70b288a124 Rebase chromium-84.0.4147.105-gn-gcc-cleanup.patch as gn-39a87c0b-gcc-cleanup.patch 2023-12-20 09:58:14 -05:00
Benjamin A. Beasley
2b716e45a3 Update to version 1910 2023-12-20 09:33:16 -05:00
Benjamin A. Beasley
7e350a4e22 s/master/main/ (thanks, upstream!) 2023-12-20 09:32:15 -05:00
Benjamin A. Beasley
c354a00481 Update to version 1898 2023-12-20 09:32:01 -05:00
Benjamin A. Beasley
75b10e236d Update to version 1897 2023-12-20 09:31:37 -05:00
Benjamin A. Beasley
a2b7d1cb43 Update to version 1896 2023-12-20 09:18:52 -05:00
Benjamin A. Beasley
d8a3fc5f71 Do not use %exclude for unpackaged files (RPM 4.17 compatibility) 2023-12-20 09:18:52 -05:00
Benjamin A. Beasley
958042a682 Correctly stop overriding optimization flags 2021-09-27 18:13:06 -04:00
Benjamin A. Beasley
aade52cc80 Opt in to rpmautospec 2021-09-27 17:22:17 -04:00
11 changed files with 72 additions and 471 deletions

146
.gitignore vendored
View file

@ -1,118 +1,28 @@
*.bak
*.gypcmd
*.mk
*.ncb
*.opensdf
*.orig
*.pdb
*.props
*.pyc
*.pyproj
*.rules
*.sdf
*.sln
*.sublime-project
*.sublime-workspace
*.suo
*.targets
*.user
*.vc.opendb
*.vcproj
*.vcxproj
*.vcxproj.filters
*.vpj
*.vpw
*.vpwhistu
*.vtg
*.xcodeproj
*.xcworkspace
*.VC.db
*_proto.xml
*_proto_cpp.xml
*~
!Android.mk
.*.sw?
.DS_Store
.cache
.cipd
.classpath
.cproject
.gdb_history
.gdbinit
.landmines
.metadata
.project
.pydevproject
.recipe_deps
.checkstyle
/clang
compile_commands.json
cscope.*
out/
GPATH
GRTAGS
GSYMS
GTAGS
Session.vim
tags
Thumbs.db
# Settings directories for eclipse
/.externalToolBuilders/
/.settings/
/.vs/
# Visual Studio Code
/.vscode/
/_out
# VSChromium configuration file
vs-chromium-project.txt
/gn-22581fb46c0c.tar.gz
/gn-cfddfffb7913.tar.gz
/gn-93ee9b91423c.tar.gz
/gn-415b3b19e094.tar.gz
/gn-d823fd85da3f.tar.gz
/gn-155c53952ec2.tar.gz
/gn-b0c2742896b6.tar.gz
/gn-df98b86690c8.tar.gz
/gn-d010969ecc31.tar.gz
/gn-b3a0bff47dd8.tar.gz
/gn-b2afae122eeb.tar.gz
/gn-0ee833e823f2.tar.gz
/gn-8f2193f70793.tar.gz
/gn-05eed8f6252e.tar.gz
/gn-449f3e4dfb45.tar.gz
/gn-54f5b539df8c.tar.gz
/gn-32f63e70484f.tar.gz
/gn-d010e218ca70.tar.gz
/gn-225e90c5025b.tar.gz
/gn-20806f79c6b4.tar.gz
/gn-95b0f8fe31a9.tar.gz
/gn-feafd1012a32.tar.gz
/gn-468c6128db7f.tar.gz
/gn-c97a86a72105.tar.gz
/gn-ed1abc107815.tar.gz
/gn-ab638bd7cbb9.tar.gz
/gn-4a8016dc3915.tar.gz
/gn-3d0d3445f67d.tar.gz
/gn-7a8aa3a08a13.tar.gz
/gn-18602f6cf116.tar.gz
/gn-6e8e0d6d4a15.tar.gz
/gn-90478db6b59b.tar.gz
/gn-487f8353f154.tar.gz
/gn-0c25d1bbde6e.tar.gz
/gn-cad8f67e2dd0.tar.gz
/gn-ebc8f16ca7b0.tar.gz
/gn-afd24ed11bc5.tar.gz
/gn-54169531ed6d.tar.gz
/gn-635a71e20e99.tar.gz
/gn-c15bfa41e526.tar.gz
/gn-5d0a4153b0bc.tar.gz
/gn-aa3ecaecac29.tar.gz
/gn-81b24e01531e.tar.gz
/gn-07d3c6f4dc29.tar.gz
/gn-092f4f0d612e.tar.gz
/gn-e7f3202128bd.tar.gz
/gn-c5a0003bcc2a.tar.gz
/gn-5964f4997670.tar.gz
/gn-64d35867ca0a.tar.gz
/gn-5550ba0f4053.tar.gz
/gn-9673115bc14c.tar.gz
/64b3b9401c1c3ed5f3c43c1cac00b91f83597ab8.tar.gz
/gn-64b3b940.tar.gz
/gn-b2e3d862.tar.gz
/gn-a95c8a3c.tar.gz
/gn-dba01723.tar.gz
/gn-6771ce56.tar.gz
/gn-39a87c0b.tar.gz
/gn-d2dce752.tar.gz
/gn-e9b84332.tar.gz
/gn-d924640c.tar.gz
/gn-4d207c94.tar.gz
/gn-24e2f7df.tar.gz
/gn-d565aa3e.tar.gz
/gn-eea3906f.tar.gz
/gn-69ec4fca.tar.gz
/gn-46b572ce.tar.gz
/gn-07e2e1b9.tar.gz
/gn-de86ec41.tar.gz
/gn-0153d369.tar.gz
/gn-693f9fb8.tar.gz
/gn-8926696a.tar.gz
/gn-90294ccd.tar.gz
/gn-18512455.tar.gz
/gn-4aa9bdfa.tar.gz
/gn-b7903130.tar.gz
/gn-e0afadf7.tar.gz
/gn-5e19d2fb.tar.gz
/gn-5e19d2fb166f.tar.gz

View file

@ -1,31 +0,0 @@
From 8969bb39cc827bd36a9fd5b5742eb645fb2c4bf6 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Thu, 30 May 2024 08:49:32 -0400
Subject: [PATCH 1/2] Downstream-only: do not override optimization flags
Stop overriding optimization flags; not sent upstream because this is
intentional on their part.
https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_flags
---
build/gen.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/build/gen.py b/build/gen.py
index 6f3652ee..2cb433bc 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -432,10 +432,8 @@ def WriteGNNinja(path, platform, host, options, args_list):
cflags.extend(['-D_LIBCPP_DEBUG=1', '-D_GLIBCXX_DEBUG=1'])
else:
cflags.append('-DNDEBUG')
- cflags.append('-O3')
if options.no_strip:
cflags.append('-g')
- ldflags.append('-O3')
# Use -fdata-sections and -ffunction-sections to place each function
# or data item into its own section so --gc-sections can eliminate any
# unused functions and data items.
--
2.44.0

View file

@ -1,25 +0,0 @@
From 8bbbd89be97178be941bd11071c009145d3caf4b Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Thu, 30 May 2024 08:56:58 -0400
Subject: [PATCH 2/2] Downstream-only: do not build with -Wno-format
This conflicts with -Werror=format-security.
---
build/gen.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/build/gen.py b/build/gen.py
index 2cb433bc..155c579f 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -513,7 +513,6 @@ def WriteGNNinja(path, platform, host, options, args_list):
'-Wno-implicit-fallthrough',
'-Wno-redundant-move',
'-Wno-unused-variable',
- '-Wno-format', # Use of %llx, which is supported by _UCRT, false positive
'-Wno-strict-aliasing', # Dereferencing punned pointer
'-Wno-cast-function-type', # Casting FARPROC to RegDeleteKeyExPtr
])
--
2.44.0

219
README.md
View file

@ -1,218 +1,3 @@
# GN
# gn
GN is a meta-build system that generates build files for
[Ninja](https://ninja-build.org).
Related resources:
* Documentation in [docs/](https://gn.googlesource.com/gn/+/main/docs/). In
particular:
* [GN quick start guide](https://gn.googlesource.com/gn/+/main/docs/quick_start.md).
* [Frequently asked questions](https://gn.googlesource.com/gn/+/main/docs/faq.md)
* [Reference](https://gn.googlesource.com/gn/+/main/docs/reference.md)
(all builtin help converted to a single file).
* An introductory [presentation](https://docs.google.com/presentation/d/15Zwb53JcncHfEwHpnG_PoIbbzQ3GQi_cpujYwbpcbZo/edit?usp=sharing).
* The [mailing list](https://groups.google.com/a/chromium.org/forum/#!forum/gn-dev).
* The [bug database](https://bugs.chromium.org/p/gn/issues/list).
## What GN is for
GN is currently used as the build system for Chromium, Fuchsia, and related
projects. Some strengths of GN are:
* It is designed for large projects and large teams. It scales efficiently to
many thousands of build files and tens of thousands of source files.
* It has a readable, clean syntax. Once a build is set-up, it is generally
easy for people with no backround in GN to make basic edits to the build.
* It is designed for multi-platform projects. It can cleanly express many
complicated build variants across different platforms. A single build
invocation can target multiple platforms.
* It supports multiple parallel output directories, each with their own
configuration. This allows a developer to maintain builds targeting debug,
release, or different platforms in parallel without forced rebuilds when
switching.
* It has a focus on correctness. GN checks for the correct dependencies,
inputs, and outputs to the extent possible, and has a number of tools to
allow developers to ensure the build evolves as desired (for example, `gn
check`, `testonly`, `assert_no_deps`).
* It has comprehensive build-in help available from the command-line.
Although small projects successfully use GN, the focus on large projects has
some disadvanages:
* GN has the goal of being minimally expressive. Although it can be quite
flexible, a design goal is to direct members of a large team (who may not
have much knowledge about the build) down an easy-to-understand, well-lit
path. This isn't necessarily the correct trade-off for smaller projects.
* The minimal build configuration is relatively heavyweight. There are several
files required and the exact way all compilers and linkers are run must be
specified in the configuration (see "Examples" below). There is no default
compiler configuration.
* It is not easily composable. GN is designed to compile a single large
project with relatively uniform settings and rules. Projects like Chromium
do bring together multiple repositories from multiple teams, but the
projects must agree on some conventions in the build files to allow this to
work.
* GN is designed with the expectation that the developers building a project
want to compile an identical configuration. So while builds can integrate
with the user's environment like the CXX and CFLAGS variables if they want,
this is not the default and most project's builds do not do this. The result
is that many GN projects do not integrate well with other systems like
ebuild.
* There is no simple release scheme (see "Versioning and distribution" below).
Projects are expected to manage the version of GN they require. Getting an
appropriate GN binary can be a hurdle for new contributors to a project.
Since GN is relatively uncommon, it can be more difficult to find
information and examples.
GN can generate Ninja build files for C, C++, Rust, Objective C, and Swift
source on most popular platforms. Other languages can be compiled using the
general "action" rules which are executed by Python or another scripting
language (Google does this to compile Java and Go). But because this is not as
clean, generally GN is only used when the bulk of the build is in one of the
main built-in languages.
## Getting a binary
You can download the latest version of GN binary for
[Linux](https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/latest),
[macOS](https://chrome-infra-packages.appspot.com/dl/gn/gn/mac-amd64/+/latest) and
[Windows](https://chrome-infra-packages.appspot.com/dl/gn/gn/windows-amd64/+/latest)
from Google's build infrastructure (see "Versioning and distribution" below for
how this is expected to work).
Alternatively, you can build GN from source with a C++17 compiler:
git clone https://gn.googlesource.com/gn
cd gn
python build/gen.py # --allow-warning if you want to build with warnings.
ninja -C out
# To run tests:
out/gn_unittests
On Windows, it is expected that `cl.exe`, `link.exe`, and `lib.exe` can be found
in `PATH`, so you'll want to run from a Visual Studio command prompt, or
similar.
On Linux, Mac and z/OS, the default compiler is `clang++`, a recent version is
expected to be found in `PATH`. This can be overridden by setting the `CC`, `CXX`,
and `AR` environment variables.
On z/OS, building GN requires [ZOSLIB](https://github.com/ibmruntimes/zoslib) to be
installed, as described at that URL. When building with `build/gen.py`, use the option
`--zoslib-dir` to specify the path to [ZOSLIB](https://github.com/ibmruntimes/zoslib):
cd gn
python build/gen.py --zoslib-dir /path/to/zoslib
By default, if you don't specify `--zoslib-dir`, `gn/build/gen.py` expects to find
`zoslib` directory under `gn/third_party/`.
## Examples
There is a simple example in [examples/simple_build](examples/simple_build)
directory that is a good place to get started with the minimal configuration.
To build and run the simple example with the default gcc compiler:
cd examples/simple_build
../../out/gn gen -C out
ninja -C out
./out/hello
For a maximal configuration see the Chromium setup:
* [.gn](https://cs.chromium.org/chromium/src/.gn)
* [BUILDCONFIG.gn](https://cs.chromium.org/chromium/src/build/config/BUILDCONFIG.gn)
* [Toolchain setup](https://cs.chromium.org/chromium/src/build/toolchain/)
* [Compiler setup](https://cs.chromium.org/chromium/src/build/config/compiler/BUILD.gn)
and the Fuchsia setup:
* [.gn](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/.gn)
* [BUILDCONFIG.gn](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/build/config/BUILDCONFIG.gn)
* [Toolchain setup](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/build/toolchain/)
* [Compiler setup](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/build/config/BUILD.gn)
## Reporting bugs
If you find a bug, you can see if it is known or report it in the [bug
database](https://bugs.chromium.org/p/gn/issues/list).
## Sending patches
GN uses [Gerrit](https://www.gerritcodereview.com/) for code review hosted at
[gn-review.googlesource.com](https://gn-review.googlesource.com/). The short
version of how to patch is:
Register at https://gn-review.googlesource.com.
... edit code ...
ninja -C out && out/gn_unittests
Then, to upload a change for review:
git commit
git push origin HEAD:refs/for/main
The first time you do this you'll get an error from the server about a missing
change-ID. Follow the directions in the error message to install the change-ID
hook and run `git commit --amend` to apply the hook to the current commit.
When revising a change, use:
git commit --amend
git push origin HEAD:refs/for/main
which will add the new changes to the existing code review, rather than creating
a new one.
We ask that all contributors
[sign Google's Contributor License Agreement](https://cla.developers.google.com/)
(either individual or corporate as appropriate, select 'any other Google
project').
## Community
You may ask questions and follow along with GN's development on Chromium's
[gn-dev@](https://groups.google.com/a/chromium.org/forum/#!forum/gn-dev)
Google Group.
## Versioning and distribution
Most open-source projects are designed to use the developer's computer's current
toolchain such as compiler, linker, and build tool. But the large
centrally controlled projects that GN is designed for typically want a more
hermetic environment. They will ensure that developers are using a specific
compatible toolchain that is versioned with the code.
As a result, GN expects that the project choose the appropriate version of GN
that will work with each version of the project. There is no "current stable
version" of GN that is expected to work for all projects.
As a result, the GN developers do not maintain any packages in any of the
various packaging systems (Debian, RedHat, HomeBrew, etc.). Some of these
systems to have GN packages, but they are maintained by third parties and you
should use them at your own risk. Instead, we recommend you refer your checkout
tooling to download binaries for a specific hash from [Google's build
infrastructure](https://chrome-infra-packages.appspot.com/p/gn/gn) or compile
your own.
GN does not guarantee the backwards-compatibility of new versions and has no
branches or versioning scheme beyond the sequence of commits to the main git
branch (which is expected to be stable).
In practice, however, GN is very backwards-compatible. The core functionality
has been stable for many years and there is enough GN code at Google alone to
make non-backwards-compatible changes very difficult, even if they were
desirable.
There have been discussions about adding a versioning scheme with some
guarantees about backwards-compatibility, but nothing has yet been implemented.
The gn package

View file

@ -1,36 +1,3 @@
* Thu Jul 08 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1924-1.20210708git24e2f7df
- Update to version 1924
* Sun Jun 27 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1921-1.20210627git4d207c94
- Update to version 1921
* Wed Jun 23 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1920-1.20210623gitd924640c
- Update to version 1920
- Stop overriding optimization flags
* Tue Jun 22 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1919-1.20210622gite9b84332
- Update to version 1919
* Wed Jun 16 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1916-1.20210616gitd2dce752
- Update to version 1916
* Tue May 11 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1910-2.20210511git39a87c0b
- Rebase chromium-84.0.4147.105-gn-gcc-cleanup.patch as
gn-39a87c0b-gcc-cleanup.patch
* Tue May 11 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1910-1.20210511git39a87c0b
- Update to version 1910
* Sun May 02 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1898-1.20210502git6771ce56
- Update to version 1898
* Sat Apr 10 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1897-1.20210410gitdba01723
- Update to version 1897
* Tue Apr 06 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1896-1.20210406gita95c8a3c
- Update to version 1896
- Do not use %%exclude for unpackaged files (RPM 4.17 compatibility)
* Mon Mar 29 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1894-4.20210329gitb2e3d862
- Update to version 1894

14
gn-0153d369-no-O3.patch Normal file
View file

@ -0,0 +1,14 @@
diff -Naur gn-0153d369bbccc908f4da4993b1ba82728055926a-original/build/gen.py gn-0153d369bbccc908f4da4993b1ba82728055926a/build/gen.py
--- gn-0153d369bbccc908f4da4993b1ba82728055926a-original/build/gen.py 2021-09-27 14:58:14.000000000 -0400
+++ gn-0153d369bbccc908f4da4993b1ba82728055926a/build/gen.py 2021-09-27 15:59:42.330405195 -0400
@@ -344,10 +344,8 @@
cflags.extend(['-O0', '-g'])
else:
cflags.append('-DNDEBUG')
- cflags.append('-O3')
if options.no_strip:
cflags.append('-g')
- ldflags.append('-O3')
# Use -fdata-sections and -ffunction-sections to place each function
# or data item into its own section so --gc-sections can eliminate any
# unused functions and data items.

View file

@ -1,15 +1,8 @@
# Hardinking duplicates is not worthwhile because these files are small and few
# in number.
addFilter(r"gn-doc\..*: files-duplicate /.*\.json")
# This script is for documentation only; it has a weird polyglot self-exec
# trick.
addFilter(r"gn-doc\..*: (potential-bashisms|bin-sh-syntax-error) /.*/infra/recipes\.py")
# These are all acceptable in the context of sample projects in the docs:
addFilter(r"gn-doc\..*: (zero-length|version-control-internal-file) /.*/examples/")
addFilter(r"gn-doc\..*: hidden-file-or-dir /.*/examples/.*/\.(gitignore|gn)")
# This script is for looking at, not for executing:
addFilter(r"gn-doc\..*: env-script-interpreter /.*/infra/config/main\.star .*")
# This is as prescribed in
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Emacs/, and the
# macro is not unexpanded in practice.
addFilter(r"Possible unexpanded macro in: Requires:\s+emacs-filesystem")
# This is a maintainer script, so it should indeed be executable:
addFilter(r' strange-permission update-version 775$')
# The source URL exports a tarball directly from git; while the contents are
# stable since it references a particular commit, the tarball checksum and even
# file size are different every time. I havent looked too closely, but I
# suspect this is due to timestamps in the tar stream being based on the access
# time rather than the time of the commit.
addFilter(r' file-size-mismatch gn-[0-9A-Fa-f]{8}\.tar\.gz = ')

42
gn.spec
View file

@ -1,5 +1,5 @@
# Build HTML docs from markdown using pandoc?
%bcond html_docs 1
%bcond_without html_docs
Name: gn
# Upstream uses the number of commits in the git history as the version number.
@ -24,12 +24,11 @@ Name: gn
# 7. Commit the changes
#
# See https://gn.googlesource.com/gn/+log for the latest changes.
%global commit 9673115bc14c8630da5b7f6fe07e0b362ac49dcb
%global access 20260111
%global shortcommit %{sub %{commit} 1 12}
%global position 2316
Version: %{position}^%{access}.%{shortcommit}
Release: %autorelease
%global commit 5e19d2fb166fbd4f6f32147fbb2f497091a54ad8
%global access 20231220
%global shortcommit %(c='%{commit}'; echo "${c:0:12}")
Version: 2077
Release: %autorelease -s %{access}git%{shortcommit}
Summary: Meta-build system that generates build files for Ninja
# The entire source is BSD-3-Clause, except:
@ -42,27 +41,15 @@ Summary: Meta-build system that generates build files for Ninja
# not installed; you may verify this with:
# gdb -ex 'set pagination off' -ex 'info sources' gn | grep -F gn_test.cc
License: BSD-3-Clause AND Unicode-DFS-2016 AND ICU
SourceLicense: %{license} AND Apache-2.0
URL: https://gn.googlesource.com/gn
Source0: %{url}/+archive/%{commit}.tar.gz#/gn-%{shortcommit}.tar.gz
# Generated using script update-version:
Source1: last_commit_position.h
Source2: update-version
# Downstream-only: do not override optimization flags
#
# Stop overriding optimization flags; not sent upstream because this is
# intentional on their part.
#
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_flags
Patch: 0001-Downstream-only-do-not-override-optimization-flags.patch
# Downstream-only: do not build with -Wno-format
#
# This conflicts with -Werror=format-security.
Patch: 0002-Downstream-only-do-not-build-with-Wno-format.patch
# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
ExcludeArch: %{ix86}
# intentional on their part
Patch0: gn-0153d369-no-O3.patch
BuildRequires: python3-devel
BuildRequires: ninja-build
@ -125,8 +112,12 @@ cp -vp misc/vim/README.md README-vim.md
%py3_shebang_fix .
%conf
%build
# We need to set CC and CXX explicitly before Fedora 33, including on the EPELs.
CC='gcc'; export CC
CXX='g++'; export CXX
AR='gcc-ar'; export AR
%set_build_flags
# Treating warnings as errors is too strict for downstream builds.
#
# Both --use-icf and --use-lto add compiler flags that only work with clang++,
@ -137,9 +128,6 @@ AR='gcc-ar'; export AR
--no-last-commit-position \
--no-strip \
--no-static-libstdc++
%build
ninja -j %{_smp_build_ncpus} -C out -v
%if %{with html_docs}
@ -180,10 +168,10 @@ out/gn_unittests
# Verify consistency of the version header with the spec file
grep -E '^#define[[:blank:]]+LAST_COMMIT_POSITION_NUM[[:blank:]]+'\
'%{position}[[:blank:]]*' \
'%{version}[[:blank:]]*' \
'out/last_commit_position.h' >/dev/null
grep -E '^#define[[:blank:]]+LAST_COMMIT_POSITION[[:blank:]]+'\
'"%{position} \(%{shortcommit}\)"[[:blank:]]*' \
'"%{version} \(%{shortcommit}\)"[[:blank:]]*' \
'out/last_commit_position.h' >/dev/null

View file

@ -3,7 +3,7 @@
#ifndef OUT_LAST_COMMIT_POSITION_H_
#define OUT_LAST_COMMIT_POSITION_H_
#define LAST_COMMIT_POSITION_NUM 2316
#define LAST_COMMIT_POSITION "2316 (9673115bc14c)"
#define LAST_COMMIT_POSITION_NUM 2077
#define LAST_COMMIT_POSITION "2077 (5e19d2fb166f)"
#endif // OUT_LAST_COMMIT_POSITION_H_

View file

@ -1 +1 @@
SHA512 (gn-9673115bc14c.tar.gz) = b05e287b5e700e1cd725ef75a0af6088abd51be0a0c072f42daa61e39f6d159355ef95130a9f4478d7c62129a17c51f341624cfc4b58fb7d29e1c77a2e2cf3af
SHA512 (gn-5e19d2fb166f.tar.gz) = 618fc914f21721f819a232430862b4a42ef68cf6d8fe5e354aae3d9ebb30f92bd3d74b0079f1b37f987a9687a37c4cad2d57782cd27ca8a1fea3b461a921866e

View file

@ -83,7 +83,7 @@ sed -r -i \
-e 's/(%global[[:blank:]]+access[[:blank:]]+)[[:digit:]]{8}[[:blank:]]*$/\1'"$(
date -u '+%Y%m%d'
)/" \
-e 's/(%global[[:blank:]]+position[[:blank:]]+)[[:digit:]]+[[:blank:]]*$/\1'"${POSITION}/" \
-e 's/(Version:[[:blank:]]+)[[:digit:]]+[[:blank:]]*$/\1'"${POSITION}/" \
"${SPEC}"
# Download the new tarball
@ -95,7 +95,7 @@ fedpkg new-sources "$(
grep -E '^Source0:' |
sed -r 's|.*/||'
)"
git add 'last_commit_position.h' gn.spec
fedpkg commit -m "Update to version ${POSITION}"
git add 'last_commit_position.h' gn.spec
# vim: tw=78 ts=2 sw=2 sts=2 et ai nojs