Bump version number for release.
diff --git a/docs/markdown/Release-notes-for-1.12.0.md b/docs/markdown/Release-notes-for-1.12.0.md
new file mode 100644
index 0000000..d07f3b0
--- /dev/null
+++ b/docs/markdown/Release-notes-for-1.12.0.md
@@ -0,0 +1,255 @@
+---
+title: Release 1.12.0
+short-description: Release notes for 1.12.0
+...
+
+# New features
+
+Meson 1.12.0 was released on 10 August 2026
+## Custom dependency for atomic now works on MSVC
+
+`dependency('atomic')` now works on MSVC >=19.35.32124.
+It requires `c_std=c11` or later, otherwise the dependency will return not found.
+
+## Support for CACHEDIR.TAG specification
+
+A CACHEDIR.TAG file (https://bford.info/cachedir/) is now created in the build
+directory as part of the setup and regenerate phases, allowing backup software
+to ignore the whole directory.
+
+## New "clippy-json" Ninja Target For rust-analyzer
+
+A new `clippy-json` ninja target will now be generated for rust projects.
+
+rust-analyzer supports non-cargo based projects so long as you provide it with a `rust-project.json` file and a custom "check command" to provide compiler errors.  Meson already for some time has generated a `rust-project.json` file for rust-analyzer, but had no way to hook up its rustc/clippy output to rust-analyzer.
+
+To use the new feature, you need to override the rust-analyzer check command as shown [in the rust-analyzer documentation](https://rust-analyzer.github.io/book/non_cargo_based_projects.html), and set it to a `ninja invocation along the lines of `ninja clippy-json -C build`.
+
+## Add a new `default()` function and object
+
+This function and object allow setting a keyword argument to it's default value.
+This is especially useful for cases when a non-default value is wanted in some
+cases but not all.
+
+For example:
+```meson
+library(
+  ...
+  name_prefix : host_machine.system() == 'windows' ? '' : default(),
+)
+```
+
+## Delay install script errors to install time
+
+Previously, `gnome.post_install` might've caused a configure to fail
+due to tools such as `update-desktop-database` not being installed or
+due to an `exe_wrapper` missing when cross-building glib. Those
+errors will now be delayed to install time, or not emitted at all
+if installing with `DESTDIR` set, since then they'll be skipped.
+
+## find_program() now respects --force-fallback-for
+
+If a subproject listed in --force-fallback-for provides a particular
+program (via program_names in its wrapfile), find_program will use the
+program from the subproject instead of looking it up from the system.
+
+## `fs.copyfile()` now has a `build_subdir` argument
+
+`fs.copyfile()`'s new `build_subdir` argument allows creating a file
+inside a subdirectory of the current build directory.
+
+## Added `depends` kwarg to `generator.process()`
+
+The [[generator.process]] method now supports specifying `depends` as a kwarg
+to extend the list of dependencies for generated files.
+
+## Added `msgfmt_args` arg to `i18n.gettext`
+
+`i18n.gettext` now supports the `msgfmt_args` argument.
+This argument can be used to pass additional arguments to
+`msgfmt` when building the translations.
+
+```meson
+i18n = import('i18n')
+i18n.gettext('mycatalog',
+             args : ['-k_', '-kN_'],
+             msgfmt_args : ['--use-fuzzy'])
+```
+
+## include_directories object now have a to_list() method
+
+The [[@inc]] object returned by [[include_directories]] now has a `to_list()` method that
+returns a list of strings of absolute paths. Unless the include path is a 
+system path, there will be a path for the source root and one for the build root.
+
+```
+inc = include_directories('include')
+include_paths = inc.to_list()
+```
+
+## Added integer base conversions to `str.to_int()` and `int.to_string()`
+
+Meson strings can now be converted from hexadecimal, octal, and binary
+integer literals with `str.to_int()`. Integers can also be formatted back to
+strings in those bases with `int.to_string(format:)`.
+
+```meson
+assert('0xff'.to_int() == 255)
+assert(255.to_string(format: 'hex') == '0xff')
+```
+
+## Multiple positional arguments for `meson wrap install`
+
+Previously `meson wrap install` only accepted a single wrap name to install.
+This limitation has now been lifted, and it is now possible to specify
+multiple wrap names for installation. The exit code will be non-zero
+if *any* of the wraps fail to install.
+
+## `meson format` allows `--recursive` with `--check-diff`
+
+Previously, the `--recursive` option to `meson format` required
+either `--inplace` or `--output`.  With this version, `--check-diff`
+is allowed to.
+
+## New option `--subprojects` for `meson format`
+
+A new option `--subprojects`, to be specified together with `--recursive`,
+tells `meson format` to also recurse into subprojects.
+
+## OpenHarmony (OHOS) is now recognized as an Android subsystem
+
+Meson now recognizes OpenHarmony / HarmonyOS (OHOS). OHOS behaves like
+Android -- applications are shared libraries, shared libraries are not
+versioned, and so on -- but uses musl instead of Bionic. It is therefore
+modelled as an Android subsystem rather than a separate system.
+
+Machine files select it in the `[host_machine]` section with:
+
+```ini
+[host_machine]
+system = 'android'
+subsystem = 'ohos'
+```
+
+With this, `host_machine.system()` is `'android'` (so all Android handling
+applies, including unversioned `libfoo.so` output) while
+`host_machine.subsystem()` is `'ohos'`. When cross-compiling a CMake
+subproject, the toolchain file generated by the CMake module sets
+`CMAKE_SYSTEM_NAME = OHOS`.
+
+## External programs as inputs and dependencies to custom targets
+
+Custom targets now allow specifying an external program in
+the `input` and `depends` keyword arguments.  This also applies
+to several methods provided by modules, as they are lowered to
+custom targets internally.
+
+## External programs as dependencies to tests
+
+Tests now allow specifying an external program in
+the `depends` keyword argument.
+
+
+## Support for Python 3.7, 3.8, and 3.9 dropped
+
+Meson 1.12 is the first version to require Python version 3.10 or greater.
+
+Support for older versions of Python is maintained with bug fixes only for
+some LTS releases. See the [FAQ
+entry](FAQ.md#Do-you-at-least-support-my-ancient-python-install) for more
+information.
+
+## More types of generated files allowed by `qt.preprocess`
+
+`qt.preprocess` now allows custom target indexes or generators
+in addition to custom targets for `ui_files`, `moc_sources`
+and `moc_headers`.
+
+## The Rust module includes a basic wrapper for cbindgen
+
+This will correctly track the config.toml, and generate a rust source from the
+marked C files. This handles structured_sources correctly, and also handles
+depfile generation transparently.
+
+## Non-default members of Cargo workspaces can now be built
+
+The new keyword argument `extra_members` to the `workspace()` method
+allows configuring non-default members of a Cargo workspace.  Previously,
+non-default members were never used for dependency resolution and
+could not be built.
+
+## subproject() and meson.override_find_program() now support the native keyword argument
+
+Subprojects may now be built for the host or build machine (or both). Therefore,
+in a cross compile setup, build-time dependencies can be built for the machine
+running the build. When a subproject is run for the build machine it will act
+just like a normal build == host setup, except that no targets will be installed.
+
+This necessarily means that `meson.override_find_program()` must differentiate
+between programs for the host and those for the build machine, as you may need
+two versions of the same program, which have different outputs based on the
+machine they are for. For backwards compatibility reasons the default is for the
+host machine. Inside a native subproject the host and build machine will both be
+the build machine.
+
+Cargo workspaces use this feature automatically when building procedural macro
+crates and their dependencies.
+
+## `meson test` now accepts `--exclude`
+
+`meson test` has a new `--exclude` argument to allow skipping named
+tests. It takes a full test name and can be specified repeatedly. This
+should help distributions that need to skip tests irrelevant for them
+or known to be buggy.
+
+## Vala cross compilation changes
+
+Traditionally Meson has used the same Vala compiler for cross and
+native compilation. It turned out that even though the Vala compiler
+generated C code, the output and its dependencies are platform
+dependent. Now Meson uses Vala in the same way as all other cross
+compilers and it can be defined in the cross file.
+
+## `werror=true` now applies to the linker as well
+
+When `werror=true` is set, Meson now passes the appropriate
+fatal-warnings flag to the linker (for example `--fatal-warnings`
+for GNU ld, `-fatal_warnings` for Apple ld, `/WX` for MSVC link).
+Previously, `werror=true` only affected compiler warnings.
+
+## Added `win_subsystem` to `shared_library()` and `shared_module()`
+
+Synonym for the one found in `executable()`.
+
+Mostly useful for setting the subsystem version in PE headers.
+This can affects Windows's ShimEngine, but not SxS lookups. Usually you still
+want to provide a manifest when targeting modern Windows.
+Sometime also useful for targeting other subsystems.
+
+Visual Studio backends now also properly supports setting subsystem versions.
+
+## i18n.xgettext recursive option now includes "private" dependencies
+
+Suppose we have:
+
+```
+libA.dll -> libB.dll -> libC.dll
+```
+
+Here, `libA` links with `libB`, and `libB` links with `libC`, but `libA` does
+not link with `libC` directly. So, `libC` is a "private" dependency of `libB`.
+If we collect strings to translate using:
+
+```
+i18n.xgettext(libC)
+i18n.xgettext(libB)
+pot_file = i18n.xgettext(libA, recursive: true)
+```
+
+Previously, strings from `libC` would not be included in `pot_file`, since
+`libC` is not a direct link dependency of `libA`. This has been fixed: when
+the `recursive: true` option is used, `xgettext` now recursively includes
+translations from all dependencies, including those of dependencies. This is
+more logical, as even if `libA` does not directly link with `libC`, it may
+still need translated strings from `libC`.
+
diff --git a/docs/markdown/snippets/atomic-now-supports-msvc.md b/docs/markdown/snippets/atomic-now-supports-msvc.md
deleted file mode 100644
index 8d3d300..0000000
--- a/docs/markdown/snippets/atomic-now-supports-msvc.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Custom dependency for atomic now works on MSVC
-
-`dependency('atomic')` now works on MSVC >=19.35.32124.
-It requires `c_std=c11` or later, otherwise the dependency will return not found.
diff --git a/docs/markdown/snippets/cachedir_tag.md b/docs/markdown/snippets/cachedir_tag.md
deleted file mode 100644
index 4702039..0000000
--- a/docs/markdown/snippets/cachedir_tag.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Support for CACHEDIR.TAG specification
-
-A CACHEDIR.TAG file (https://bford.info/cachedir/) is now created in the build
-directory as part of the setup and regenerate phases, allowing backup software
-to ignore the whole directory.
diff --git a/docs/markdown/snippets/clippy-json.md b/docs/markdown/snippets/clippy-json.md
deleted file mode 100644
index 7e59145..0000000
--- a/docs/markdown/snippets/clippy-json.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## New "clippy-json" Ninja Target For rust-analyzer
-
-A new `clippy-json` ninja target will now be generated for rust projects.
-
-rust-analyzer supports non-cargo based projects so long as you provide it with a `rust-project.json` file and a custom "check command" to provide compiler errors.  Meson already for some time has generated a `rust-project.json` file for rust-analyzer, but had no way to hook up its rustc/clippy output to rust-analyzer.
-
-To use the new feature, you need to override the rust-analyzer check command as shown [in the rust-analyzer documentation](https://rust-analyzer.github.io/book/non_cargo_based_projects.html), and set it to a `ninja invocation along the lines of `ninja clippy-json -C build`.
diff --git a/docs/markdown/snippets/default.md b/docs/markdown/snippets/default.md
deleted file mode 100644
index f2e4b73..0000000
--- a/docs/markdown/snippets/default.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Add a new `default()` function and object
-
-This function and object allow setting a keyword argument to it's default value.
-This is especially useful for cases when a non-default value is wanted in some
-cases but not all.
-
-For example:
-```meson
-library(
-  ...
-  name_prefix : host_machine.system() == 'windows' ? '' : default(),
-)
-```
diff --git a/docs/markdown/snippets/delayed_install_script_errors.md b/docs/markdown/snippets/delayed_install_script_errors.md
deleted file mode 100644
index 7c81f22..0000000
--- a/docs/markdown/snippets/delayed_install_script_errors.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Delay install script errors to install time
-
-Previously, `gnome.post_install` might've caused a configure to fail
-due to tools such as `update-desktop-database` not being installed or
-due to an `exe_wrapper` missing when cross-building glib. Those
-errors will now be delayed to install time, or not emitted at all
-if installing with `DESTDIR` set, since then they'll be skipped.
diff --git a/docs/markdown/snippets/find_program-forcefallback.md b/docs/markdown/snippets/find_program-forcefallback.md
deleted file mode 100644
index 5ed99de..0000000
--- a/docs/markdown/snippets/find_program-forcefallback.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## find_program() now respects --force-fallback-for
-
-If a subproject listed in --force-fallback-for provides a particular
-program (via program_names in its wrapfile), find_program will use the
-program from the subproject instead of looking it up from the system.
diff --git a/docs/markdown/snippets/fs-copyfile-build-subdir.md b/docs/markdown/snippets/fs-copyfile-build-subdir.md
deleted file mode 100644
index f166425..0000000
--- a/docs/markdown/snippets/fs-copyfile-build-subdir.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## `fs.copyfile()` now has a `build_subdir` argument
-
-`fs.copyfile()`'s new `build_subdir` argument allows creating a file
-inside a subdirectory of the current build directory.
diff --git a/docs/markdown/snippets/generator_process_depends.md b/docs/markdown/snippets/generator_process_depends.md
deleted file mode 100644
index c9c98b7..0000000
--- a/docs/markdown/snippets/generator_process_depends.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Added `depends` kwarg to `generator.process()`
-
-The [[generator.process]] method now supports specifying `depends` as a kwarg
-to extend the list of dependencies for generated files.
diff --git a/docs/markdown/snippets/i18n_msgfmt_args.md b/docs/markdown/snippets/i18n_msgfmt_args.md
deleted file mode 100644
index d7106d4..0000000
--- a/docs/markdown/snippets/i18n_msgfmt_args.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## Added `msgfmt_args` arg to `i18n.gettext`
-
-`i18n.gettext` now supports the `msgfmt_args` argument.
-This argument can be used to pass additional arguments to
-`msgfmt` when building the translations.
-
-```meson
-i18n = import('i18n')
-i18n.gettext('mycatalog',
-             args : ['-k_', '-kN_'],
-             msgfmt_args : ['--use-fuzzy'])
-```
diff --git a/docs/markdown/snippets/include_directories_to_list.md b/docs/markdown/snippets/include_directories_to_list.md
deleted file mode 100644
index 2b2d7db..0000000
--- a/docs/markdown/snippets/include_directories_to_list.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## include_directories object now have a to_list() method
-
-The [[@inc]] object returned by [[include_directories]] now has a `to_list()` method that
-returns a list of strings of absolute paths. Unless the include path is a 
-system path, there will be a path for the source root and one for the build root.
-
-```
-inc = include_directories('include')
-include_paths = inc.to_list()
-```
diff --git a/docs/markdown/snippets/int-base-conversions.md b/docs/markdown/snippets/int-base-conversions.md
deleted file mode 100644
index 4b1cbf2..0000000
--- a/docs/markdown/snippets/int-base-conversions.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Added integer base conversions to `str.to_int()` and `int.to_string()`
-
-Meson strings can now be converted from hexadecimal, octal, and binary
-integer literals with `str.to_int()`. Integers can also be formatted back to
-strings in those bases with `int.to_string(format:)`.
-
-```meson
-assert('0xff'.to_int() == 255)
-assert(255.to_string(format: 'hex') == '0xff')
-```
diff --git a/docs/markdown/snippets/meson_wrap_install_multiple.md b/docs/markdown/snippets/meson_wrap_install_multiple.md
deleted file mode 100644
index 4d226c3..0000000
--- a/docs/markdown/snippets/meson_wrap_install_multiple.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Multiple positional arguments for `meson wrap install`
-
-Previously `meson wrap install` only accepted a single wrap name to install.
-This limitation has now been lifted, and it is now possible to specify
-multiple wrap names for installation. The exit code will be non-zero
-if *any* of the wraps fail to install.
diff --git a/docs/markdown/snippets/mformat-recursive-check-diff.md b/docs/markdown/snippets/mformat-recursive-check-diff.md
deleted file mode 100644
index 0752098..0000000
--- a/docs/markdown/snippets/mformat-recursive-check-diff.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## `meson format` allows `--recursive` with `--check-diff`
-
-Previously, the `--recursive` option to `meson format` required
-either `--inplace` or `--output`.  With this version, `--check-diff`
-is allowed to.
diff --git a/docs/markdown/snippets/mformat-recursive-subprojects.md b/docs/markdown/snippets/mformat-recursive-subprojects.md
deleted file mode 100644
index 73416d2..0000000
--- a/docs/markdown/snippets/mformat-recursive-subprojects.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## New option `--subprojects` for `meson format`
-
-A new option `--subprojects`, to be specified together with `--recursive`,
-tells `meson format` to also recurse into subprojects.
diff --git a/docs/markdown/snippets/ohos-support.md b/docs/markdown/snippets/ohos-support.md
deleted file mode 100644
index 4331a87..0000000
--- a/docs/markdown/snippets/ohos-support.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## OpenHarmony (OHOS) is now recognized as an Android subsystem
-
-Meson now recognizes OpenHarmony / HarmonyOS (OHOS). OHOS behaves like
-Android -- applications are shared libraries, shared libraries are not
-versioned, and so on -- but uses musl instead of Bionic. It is therefore
-modelled as an Android subsystem rather than a separate system.
-
-Machine files select it in the `[host_machine]` section with:
-
-```ini
-[host_machine]
-system = 'android'
-subsystem = 'ohos'
-```
-
-With this, `host_machine.system()` is `'android'` (so all Android handling
-applies, including unversioned `libfoo.so` output) while
-`host_machine.subsystem()` is `'ohos'`. When cross-compiling a CMake
-subproject, the toolchain file generated by the CMake module sets
-`CMAKE_SYSTEM_NAME = OHOS`.
diff --git a/docs/markdown/snippets/programs-in-more-places.md b/docs/markdown/snippets/programs-in-more-places.md
deleted file mode 100644
index e561cce..0000000
--- a/docs/markdown/snippets/programs-in-more-places.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## External programs as inputs and dependencies to custom targets
-
-Custom targets now allow specifying an external program in
-the `input` and `depends` keyword arguments.  This also applies
-to several methods provided by modules, as they are lowered to
-custom targets internally.
-
-## External programs as dependencies to tests
-
-Tests now allow specifying an external program in
-the `depends` keyword argument.
-
diff --git a/docs/markdown/snippets/python-310-required.md b/docs/markdown/snippets/python-310-required.md
deleted file mode 100644
index 31a1de6..0000000
--- a/docs/markdown/snippets/python-310-required.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Support for Python 3.7, 3.8, and 3.9 dropped
-
-Meson 1.12 is the first version to require Python version 3.10 or greater.
-
-Support for older versions of Python is maintained with bug fixes only for
-some LTS releases. See the [FAQ
-entry](FAQ.md#Do-you-at-least-support-my-ancient-python-install) for more
-information.
diff --git a/docs/markdown/snippets/qt-preprocess-gen.md b/docs/markdown/snippets/qt-preprocess-gen.md
deleted file mode 100644
index 3ac0548..0000000
--- a/docs/markdown/snippets/qt-preprocess-gen.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## More types of generated files allowed by `qt.preprocess`
-
-`qt.preprocess` now allows custom target indexes or generators
-in addition to custom targets for `ui_files`, `moc_sources`
-and `moc_headers`.
diff --git a/docs/markdown/snippets/rust-cbindgen.md b/docs/markdown/snippets/rust-cbindgen.md
deleted file mode 100644
index f5fb0eb..0000000
--- a/docs/markdown/snippets/rust-cbindgen.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## The Rust module includes a basic wrapper for cbindgen
-
-This will correctly track the config.toml, and generate a rust source from the
-marked C files. This handles structured_sources correctly, and also handles
-depfile generation transparently.
diff --git a/docs/markdown/snippets/rust-workspace-non-default.md b/docs/markdown/snippets/rust-workspace-non-default.md
deleted file mode 100644
index deb74f7..0000000
--- a/docs/markdown/snippets/rust-workspace-non-default.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Non-default members of Cargo workspaces can now be built
-
-The new keyword argument `extra_members` to the `workspace()` method
-allows configuring non-default members of a Cargo workspace.  Previously,
-non-default members were never used for dependency resolution and
-could not be built.
diff --git a/docs/markdown/snippets/subproject_and_override_program_native.md b/docs/markdown/snippets/subproject_and_override_program_native.md
deleted file mode 100644
index 7514252..0000000
--- a/docs/markdown/snippets/subproject_and_override_program_native.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## subproject() and meson.override_find_program() now support the native keyword argument
-
-Subprojects may now be built for the host or build machine (or both). Therefore,
-in a cross compile setup, build-time dependencies can be built for the machine
-running the build. When a subproject is run for the build machine it will act
-just like a normal build == host setup, except that no targets will be installed.
-
-This necessarily means that `meson.override_find_program()` must differentiate
-between programs for the host and those for the build machine, as you may need
-two versions of the same program, which have different outputs based on the
-machine they are for. For backwards compatibility reasons the default is for the
-host machine. Inside a native subproject the host and build machine will both be
-the build machine.
-
-Cargo workspaces use this feature automatically when building procedural macro
-crates and their dependencies.
diff --git a/docs/markdown/snippets/tests-exclude.md b/docs/markdown/snippets/tests-exclude.md
deleted file mode 100644
index daf282e..0000000
--- a/docs/markdown/snippets/tests-exclude.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## `meson test` now accepts `--exclude`
-
-`meson test` has a new `--exclude` argument to allow skipping named
-tests. It takes a full test name and can be specified repeatedly. This
-should help distributions that need to skip tests irrelevant for them
-or known to be buggy.
diff --git a/docs/markdown/snippets/vala-cross.md b/docs/markdown/snippets/vala-cross.md
deleted file mode 100644
index c3abc50..0000000
--- a/docs/markdown/snippets/vala-cross.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Vala cross compilation changes
-
-Traditionally Meson has used the same Vala compiler for cross and
-native compilation. It turned out that even though the Vala compiler
-generated C code, the output and its dependencies are platform
-dependent. Now Meson uses Vala in the same way as all other cross
-compilers and it can be defined in the cross file.
diff --git a/docs/markdown/snippets/werror-linker.md b/docs/markdown/snippets/werror-linker.md
deleted file mode 100644
index 3976c26..0000000
--- a/docs/markdown/snippets/werror-linker.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## `werror=true` now applies to the linker as well
-
-When `werror=true` is set, Meson now passes the appropriate
-fatal-warnings flag to the linker (for example `--fatal-warnings`
-for GNU ld, `-fatal_warnings` for Apple ld, `/WX` for MSVC link).
-Previously, `werror=true` only affected compiler warnings.
diff --git a/docs/markdown/snippets/win_subsystem_for_more.md b/docs/markdown/snippets/win_subsystem_for_more.md
deleted file mode 100644
index e897846..0000000
--- a/docs/markdown/snippets/win_subsystem_for_more.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Added `win_subsystem` to `shared_library()` and `shared_module()`
-
-Synonym for the one found in `executable()`.
-
-Mostly useful for setting the subsystem version in PE headers.
-This can affects Windows's ShimEngine, but not SxS lookups. Usually you still
-want to provide a manifest when targeting modern Windows.
-Sometime also useful for targeting other subsystems.
-
-Visual Studio backends now also properly supports setting subsystem versions.
diff --git a/docs/markdown/snippets/xgettext-include-private-dependencies.md b/docs/markdown/snippets/xgettext-include-private-dependencies.md
deleted file mode 100644
index 81f97c6..0000000
--- a/docs/markdown/snippets/xgettext-include-private-dependencies.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## i18n.xgettext recursive option now includes "private" dependencies
-
-Suppose we have:
-
-```
-libA.dll -> libB.dll -> libC.dll
-```
-
-Here, `libA` links with `libB`, and `libB` links with `libC`, but `libA` does
-not link with `libC` directly. So, `libC` is a "private" dependency of `libB`.
-If we collect strings to translate using:
-
-```
-i18n.xgettext(libC)
-i18n.xgettext(libB)
-pot_file = i18n.xgettext(libA, recursive: true)
-```
-
-Previously, strings from `libC` would not be included in `pot_file`, since
-`libC` is not a direct link dependency of `libA`. This has been fixed: when
-the `recursive: true` option is used, `xgettext` now recursively includes
-translations from all dependencies, including those of dependencies. This is
-more logical, as even if `libA` does not directly link with `libC`, it may
-still need translated strings from `libC`.
diff --git a/docs/sitemap.txt b/docs/sitemap.txt
index 6f0672b..c6bbb10 100644
--- a/docs/sitemap.txt
+++ b/docs/sitemap.txt
@@ -90,6 +90,7 @@
 		Wrap-best-practices-and-tips.md
 		Shipping-prebuilt-binaries-as-wraps.md
 	Release-notes.md
+		Release-notes-for-1.12.0.md
 		Release-notes-for-1.11.0.md
 		Release-notes-for-1.10.0.md
 		Release-notes-for-1.9.0.md
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 551684b..c02f6f6 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -43,7 +43,7 @@
 #
 # Pip requires that RCs are named like this: '0.1.0.rc1'
 # But the corresponding Git tag needs to be '0.1.0rc1'
-version = '1.12.0.rc3'
+version = '1.12.0'
 
 # The next stable version when we are in dev. This is used to allow projects to
 # require meson version >=1.2.0 when using 1.1.99. FeatureNew won't warn when