9 Commits
Author SHA1 Message Date
Robin Candau 00de9837a4 tools: Skip date in headers when SOURCE_DATE_EPOCH env var is set (#4152)
Recording the current date in header file comments (from the
`cef_api_untracked.json` file generated during the build) introduces
non-deterministic timestamps into build artifacts, preventing
[reproducible builds](https://reproducible-builds.org/) (see the
[diffoscope
output](https://reproducible.archlinux.org/api/v0/builds/1028387/diffoscope)).

This commit skips generating date based comments for untracked versions
if the [SOURCE_DATE_EPOCH environment
variable](https://reproducible-builds.org/docs/source-date-epoch/) is
set, allowing reproducible builds in environments that expect them.
2026-04-15 13:01:37 -04:00
Marshall Greenblatt 5d801ed841 bootstrap: Add sandbox compatibility hash (fixes #4092)
Introduce a hash of Chromium sandbox interface files to detect
incompatibilities between bootstrap.exe and libcef.dll at runtime,
allowing the strict version check to be skipped when interfaces match.

Core implementation:
- Add sandbox_compat_hash.py to calculate SHA-256 of interface files
  (chrome_elf_main.h, sandbox.h, sandbox_types.h, sandbox.mojom)
- Update make_version_header.py to generate CEF_SANDBOX_COMPAT_HASH
- Add sandbox_compat_hash field to cef_version_info_t struct
- Add entry 3 to cef_api_hash() for retrieving the hash
- Compare hashes in cef_scoped_library_loader_win.cc during load

Version management:
- Include sandbox_compat in cef_api_versions.json and cef_api_untracked.json
- Compare sandbox_compat for untracked versions (NEXT, EXPERIMENTAL)
- Trigger version bumps when sandbox interface files change

Build automation:
- Update cefbuilds JSON builder to include sandbox_compat in version records
- Run version_manager.py -a after Chromium updates on release branches
  to auto-detect hash changes and add new API versions
2026-02-16 17:19:33 -05:00
Marshall Greenblatt b00d59c2b4 docs: Rewrite blob md links to GitHub Pages (isse #4085) 2026-01-29 18:13:59 -05:00
Marshall Greenblatt 2415738c75 docs: Rewrite Bitbucket Wiki links to docs/ (see #4085) 2026-01-29 16:44:54 -05:00
Marshall Greenblatt 18b65ced23 tools: Also check for CEF_NEXT in .cc files (see #3836) 2025-02-28 18:22:33 -05:00
Nik Pavlov fdd36e8461 Support API versioning in platform-specific headers (see #3836)
- Exclude platform-specific includes (anything in < >) from the
  clang preprocessor by using `!defined(GENERATING_CEF_API_HASH)`
  in CEF header files.
- Define "target platforms" by passing platform- and architecture-
  specific ifdefs to the clang preprocessor. Grep for `defined(OS_`
  to identify headers that require target platform processing, and
  then process for each target as the platform-specific API hash
  contribution.
- Delete the univeral hash which is no longer a useful concept.
2025-02-25 12:36:00 -05:00
Marshall Greenblatt 0c25276083 tools: win: Fix grep usage with system Git (see #3836) 2025-02-19 12:05:35 -05:00
Marshall Greenblatt 6a3233f945 Add debugging help link (see #3836) 2025-01-14 12:56:21 -05:00
Marshall Greenblatt dd81904a2f Add initial support for API versioning (see #3836)
- Generated files are now created when running cef_create_projects or
  the new version_manager.py tool. These files are still created in the
  cef/ source tree (same location as before) but Git ignores them due to
  the generated .gitignore file.
- API hashes are committed to Git as a new cef_api_versions.json file.
  This file is used for both code generation and CEF version calculation
  (replacing the previous usage of cef_api_hash.h for this purpose).
  It will be updated by the CEF admin before merging breaking API
  changes upstream.
- As an added benefit to the above, contributor PRs will no longer
  contain generated code that is susceptible to frequent merge conflicts.
- From a code generation perspective, the main difference is that we now
  use versioned structs (e.g. cef_browser_0_t instead of cef_browser_t)
  on the libcef (dll/framework) side. Most of the make_*.py tool changes
  are related to supporting this.
- From the client perspective, you can now define CEF_API_VERSION in the
  project configuration (or get CEF_EXPERIMENTAL by default). This
  define will change the API exposed in CEF’s include/ and include/capi
  header files. All client-side targets including libcef_dll_wrapper
  will need be recompiled when changing this define.
- Examples of the new API-related define usage are provided in
  cef_api_version_test.h, api_version_test_impl.cc and
  api_version_unittest.cc.

To test:
- Run `ceftests --gtest_filter=ApiVersionTest.*`
- Add `cef_api_version=13300` to GN_DEFINES. Re-run configure, build and
  ceftests steps.
- Repeat with 13301, 13302, 13303 (all supported test versions).
2025-01-08 17:19:43 -05:00