Compare commits
2 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
958042a682 | ||
|
|
aade52cc80 |
12 changed files with 145 additions and 535 deletions
121
.gitignore
vendored
121
.gitignore
vendored
|
|
@ -1,118 +1,3 @@
|
|||
*.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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
219
README.md
|
|
@ -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
|
||||
|
|
|
|||
33
changelog
33
changelog
|
|
@ -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
|
||||
|
||||
|
|
|
|||
45
chromium-84.0.4147.105-gn-gcc-cleanup.patch
Normal file
45
chromium-84.0.4147.105-gn-gcc-cleanup.patch
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
diff -up chromium-84.0.4147.105/tools/gn/src/gn/err.h.gn-gcc-cleanup chromium-84.0.4147.105/tools/gn/src/gn/err.h
|
||||
--- chromium-84.0.4147.105/tools/gn/src/gn/err.h.gn-gcc-cleanup 2020-08-01 10:04:57.354719575 -0400
|
||||
+++ chromium-84.0.4147.105/tools/gn/src/gn/err.h 2020-08-01 10:04:51.653974728 -0400
|
||||
@@ -55,7 +55,7 @@ class Err {
|
||||
const std::string& help_text = std::string());
|
||||
|
||||
Err(const Err& other);
|
||||
-
|
||||
+ Err& operator=(const Err& other) = default;
|
||||
~Err();
|
||||
|
||||
bool has_error() const { return has_error_; }
|
||||
diff -up chromium-84.0.4147.105/tools/gn/src/gn/label_pattern.h.gn-gcc-cleanup chromium-84.0.4147.105/tools/gn/src/gn/label_pattern.h
|
||||
--- chromium-84.0.4147.105/tools/gn/src/gn/label_pattern.h.gn-gcc-cleanup 2020-08-01 10:24:18.405934036 -0400
|
||||
+++ chromium-84.0.4147.105/tools/gn/src/gn/label_pattern.h 2020-08-01 10:24:56.664265755 -0400
|
||||
@@ -33,6 +33,7 @@ class LabelPattern {
|
||||
const std::string_view& name,
|
||||
const Label& toolchain_label);
|
||||
LabelPattern(const LabelPattern& other);
|
||||
+ LabelPattern& operator=(const LabelPattern& other) = default;
|
||||
~LabelPattern();
|
||||
|
||||
// Converts the given input string to a pattern. This does special stuff
|
||||
diff -up chromium-84.0.4147.105/tools/gn/src/gn/substitution_list.h.gn-gcc-cleanup chromium-84.0.4147.105/tools/gn/src/gn/substitution_list.h
|
||||
--- chromium-84.0.4147.105/tools/gn/src/gn/substitution_list.h.gn-gcc-cleanup 2020-08-01 10:04:51.721971684 -0400
|
||||
+++ chromium-84.0.4147.105/tools/gn/src/gn/substitution_list.h 2020-08-01 10:04:51.765969715 -0400
|
||||
@@ -15,6 +15,7 @@ class SubstitutionList {
|
||||
public:
|
||||
SubstitutionList();
|
||||
SubstitutionList(const SubstitutionList& other);
|
||||
+ SubstitutionList& operator=(const SubstitutionList& other) = default;
|
||||
~SubstitutionList();
|
||||
|
||||
bool Parse(const Value& value, Err* err);
|
||||
diff -up chromium-84.0.4147.105/tools/gn/src/gn/substitution_pattern.h.gn-gcc-cleanup chromium-84.0.4147.105/tools/gn/src/gn/substitution_pattern.h
|
||||
--- chromium-84.0.4147.105/tools/gn/src/gn/substitution_pattern.h.gn-gcc-cleanup 2020-08-01 10:04:51.637975444 -0400
|
||||
+++ chromium-84.0.4147.105/tools/gn/src/gn/substitution_pattern.h 2020-08-01 10:04:57.305721767 -0400
|
||||
@@ -35,6 +35,7 @@ class SubstitutionPattern {
|
||||
|
||||
SubstitutionPattern();
|
||||
SubstitutionPattern(const SubstitutionPattern& other);
|
||||
+ SubstitutionPattern& operator=(const SubstitutionPattern& other) = default;
|
||||
~SubstitutionPattern();
|
||||
|
||||
// Parses the given string and fills in the pattern. The pattern must only
|
||||
14
gn-0153d369-no-O3.patch
Normal file
14
gn-0153d369-no-O3.patch
Normal 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.
|
||||
23
gn.rpmlintrc
23
gn.rpmlintrc
|
|
@ -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 haven’t 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 = ')
|
||||
|
|
|
|||
155
gn.spec
155
gn.spec
|
|
@ -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.
|
||||
|
|
@ -21,55 +21,42 @@ Name: gn
|
|||
# 4. Download the source tarball (spectool -g)
|
||||
# 5. Update the sources (fedpkg new-sources %%{commit}.tar.gz)
|
||||
# 6. Stage all changes in git
|
||||
# 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 b2e3d8622c1ce1bd853c7a11f62a739946669cdd
|
||||
%global access 20210329
|
||||
%global shortcommit %(echo %{commit} | cut -b -8)
|
||||
Version: 1894
|
||||
Release: %autorelease -s %{access}git%{shortcommit} -b 4
|
||||
Summary: Meta-build system that generates build files for Ninja
|
||||
|
||||
# The entire source is BSD-3-Clause, except:
|
||||
# - src/base/third_party/icu/ is (Unicode-DFS-2016 AND ICU); see
|
||||
# src/base/third_party/icu/LICENSE and also the header comment in
|
||||
# src/base/third_party/icu/icu_utf.h.
|
||||
# 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 Apache-2.0, does not
|
||||
# contribute to the binary RPMs, only to the gn_unittests executable, which is
|
||||
# not installed; you may verify this with:
|
||||
# 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-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
|
||||
License: BSD and Unicode and MIT
|
||||
URL: https://%{name}.googlesource.com/%{name}
|
||||
Source0: %{url}/+archive/%{commit}.tar.gz#/%{name}-%{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
|
||||
# Clean up compiler warnings on gcc/g++:
|
||||
Patch0: https://src.fedoraproject.org/rpms/chromium/raw/ce30313f5e4af121140c037bf026453355534f24/f/chromium-84.0.4147.105-gn-gcc-cleanup.patch
|
||||
# Stop overriding optimization flags
|
||||
Patch1: %{name}-0153d369-no-O3.patch
|
||||
|
||||
# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
|
||||
ExcludeArch: %{ix86}
|
||||
|
||||
BuildRequires: python3-devel
|
||||
# The python3_pkgversion macro is required for EPEL; see
|
||||
# https://fedoraproject.org/wiki/PackagingDrafts:Python3EPEL. On Fedora (and
|
||||
# EPEL8) it simply expands to “3”.
|
||||
BuildRequires: python%{python3_pkgversion}
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: gcc-c++
|
||||
|
||||
# For RPM macros:
|
||||
BuildRequires: emacs-common
|
||||
BuildRequires: /usr/bin/pathfix.py
|
||||
|
||||
%if %{with html_docs}
|
||||
BuildRequires: pandoc
|
||||
|
|
@ -78,25 +65,13 @@ BuildRequires: parallel
|
|||
BuildRequires: help2man
|
||||
|
||||
Requires: vim-filesystem
|
||||
Requires: python3
|
||||
Provides: vim-gn = %{version}-%{release}
|
||||
Requires: python%{python3_pkgversion}
|
||||
Provides: vim-%{name} = %{version}-%{release}
|
||||
|
||||
BuildRequires: emacs
|
||||
Requires: emacs-filesystem >= %{_emacs_version}
|
||||
Provides: emacs-gn = %{version}-%{release}
|
||||
Provides: emacs-%{name} = %{version}-%{release}
|
||||
|
||||
# src/base/third_party/icu/icu_utf.h:
|
||||
#
|
||||
# This file has the relevant components from ICU copied to handle basic
|
||||
# UTF8/16/32 conversions. Components are copied from umachine.h, utf.h,
|
||||
# utf8.h, and utf16.h into icu_utf.h.
|
||||
#
|
||||
# The forked, bundled ICU components are copied from Chromium. Because of the
|
||||
# downstream changes (primarily, changing namespaces and symbol prefixes),
|
||||
# there is no clear path to unbundling.
|
||||
#
|
||||
# See src/base/third_party/icu/README.chromium, from which the version number
|
||||
# is taken.
|
||||
Provides: bundled(icu) = 60
|
||||
|
||||
%description
|
||||
GN is a meta-build system that generates build files for Ninja.
|
||||
|
|
@ -107,11 +82,13 @@ Summary: Documentation for GN
|
|||
BuildArch: noarch
|
||||
|
||||
%description doc
|
||||
The gn-doc package contains detailed documentation for GN.
|
||||
The %{name}-doc package contains detailed documentation for GN.
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -c -n gn-%{commit} -p1
|
||||
%setup -c -n %{name}-%{commit} -q
|
||||
%patch0 -p3
|
||||
%patch1 -p1
|
||||
|
||||
# Use pre-generated last_commit_position.h.
|
||||
mkdir -p ./out
|
||||
|
|
@ -125,22 +102,20 @@ 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
|
||||
# Treating warnings as errors is too strict for downstream builds.
|
||||
#
|
||||
%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
|
||||
# distribution’s build flags.
|
||||
%{python3} build/gen.py \
|
||||
--allow-warnings \
|
||||
%{__python3} build/gen.py \
|
||||
--no-last-commit-position \
|
||||
--no-strip \
|
||||
--no-static-libstdc++
|
||||
|
||||
|
||||
%build
|
||||
ninja -j %{_smp_build_ncpus} -C out -v
|
||||
ninja -C out -v
|
||||
|
||||
%if %{with html_docs}
|
||||
# There is a script, misc/help_as_html.py, that generates some HTML help, but
|
||||
|
|
@ -150,29 +125,30 @@ find . -type f -name '*.md' | parallel -v pandoc -o '{.}.html' '{}'
|
|||
|
||||
help2man \
|
||||
--name='%{summary}' \
|
||||
--version-string="gn $(./out/gn --version)" \
|
||||
--version-string="%{name} $(./out/%{name} --version)" \
|
||||
--no-info \
|
||||
./out/gn |
|
||||
./out/%{name} |
|
||||
# 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
|
||||
-e 's/\[([^]]+)\]/\\fI[\1]\\fR/g' > out/%{name}.1
|
||||
|
||||
|
||||
%install
|
||||
install -t '%{buildroot}%{_bindir}' -D -p out/gn
|
||||
install -d '%{buildroot}%{_bindir}'
|
||||
install -t '%{buildroot}%{_bindir}' -p out/%{name}
|
||||
|
||||
install -d '%{buildroot}%{_datadir}/vim/vimfiles'
|
||||
cp -vrp misc/vim/* '%{buildroot}%{_datadir}/vim/vimfiles'
|
||||
find '%{buildroot}%{_datadir}/vim/vimfiles' \
|
||||
-type f -name 'README.*' -print -delete
|
||||
%py_byte_compile %{python3} '%{buildroot}%{_datadir}/vim/vimfiles/gn-format.py'
|
||||
%py_byte_compile %{__python3} '%{buildroot}%{_datadir}/vim/vimfiles/%{name}-format.py'
|
||||
|
||||
install -t '%{buildroot}%{_emacs_sitestartdir}' -D -p -m 0644 misc/emacs/*.el
|
||||
install -d '%{buildroot}%{_emacs_sitestartdir}'
|
||||
install -t '%{buildroot}%{_emacs_sitestartdir}' -p -m 0644 misc/emacs/*.el
|
||||
|
||||
install -t '%{buildroot}%{_mandir}/man1' -D -m 0644 -p out/gn.1
|
||||
install -d '%{buildroot}%{_mandir}/man1'
|
||||
install -t '%{buildroot}%{_mandir}/man1' -m 0644 -p out/%{name}.1
|
||||
|
||||
|
||||
%check
|
||||
|
|
@ -180,40 +156,41 @@ 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
|
||||
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%{_bindir}/gn
|
||||
%{_bindir}/%{name}
|
||||
|
||||
%{_mandir}/man1/gn.1*
|
||||
%{_mandir}/man1/%{name}.1*
|
||||
|
||||
%{_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
|
||||
%exclude %{_datadir}/vim/vimfiles/README.*
|
||||
%{_datadir}/vim/vimfiles/%{name}-format.py
|
||||
%{_datadir}/vim/vimfiles/autoload/%{name}.vim
|
||||
%{_datadir}/vim/vimfiles/ftdetect/%{name}filetype.vim
|
||||
%{_datadir}/vim/vimfiles/ftplugin/%{name}.vim
|
||||
%{_datadir}/vim/vimfiles/syntax/%{name}.vim
|
||||
|
||||
%{_emacs_sitestartdir}/gn-mode.el
|
||||
%{_emacs_sitestartdir}/%{name}-mode.el
|
||||
|
||||
|
||||
%files doc
|
||||
%license LICENSE src/base/third_party/icu/README.chromium
|
||||
%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/
|
||||
%doc docs
|
||||
%doc examples
|
||||
%doc infra
|
||||
%doc tools
|
||||
|
||||
|
||||
%changelog
|
||||
|
|
|
|||
|
|
@ -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 1894
|
||||
#define LAST_COMMIT_POSITION "1894 (b2e3d862)"
|
||||
|
||||
#endif // OUT_LAST_COMMIT_POSITION_H_
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (gn-9673115bc14c.tar.gz) = b05e287b5e700e1cd725ef75a0af6088abd51be0a0c072f42daa61e39f6d159355ef95130a9f4478d7c62129a17c51f341624cfc4b58fb7d29e1c77a2e2cf3af
|
||||
SHA512 (gn-b2e3d862.tar.gz) = 1eb535474fa731bb8d92814b0a4d3fea9dad0a29b6b3fcee6f6a2477e8adec3ec765068cd099a11f7b6368a67eb2f5658eb3270f69731bd837207485f5baf7d1
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ then
|
|||
fi
|
||||
elif [ "$#" = '0' ]
|
||||
then
|
||||
COMMIT='main'
|
||||
COMMIT='master'
|
||||
fi
|
||||
if [ -z "${COMMIT}" ]
|
||||
then
|
||||
|
|
@ -23,7 +23,7 @@ Usage: $0 [COMMIT]
|
|||
|
||||
Parameters:
|
||||
COMMIT - full commit hash from upstream git (${REPO});
|
||||
otherwise the latest commit in main is used
|
||||
otherwise the latest commit in master is used
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue