Generate release notes for 1.3.0.
diff --git a/docs/markdown/Release-notes-for-1.3.0.md b/docs/markdown/Release-notes-for-1.3.0.md
new file mode 100644
index 0000000..cf6ad46
--- /dev/null
+++ b/docs/markdown/Release-notes-for-1.3.0.md
@@ -0,0 +1,338 @@
+---
+title: Release 1.3.0
+short-description: Release notes for 1.3.0
+...
+
+# New features
+
+Meson 1.3.0 was released on 19 November 2023
+## Clarify of implicitly-included headers in C-like compiler checks
+
+Compiler check methods `compiler.compute_int()`, `compiler.alignment()`
+and `compiler.sizeof()` now have their implicitly-included headers
+corrected and documented.
+
+`<stdio.h>` was included unintentionally when cross-compiling, which
+is less than ideal because there is no guarantee that a standard library
+is available for the target platform. Only `<stddef.h>` is included instead.
+
+For projects that depend on the old behavior, the compiler check methods
+have an optional argument `prefix`, which can be used to specify additional
+`#include` directives.
+
+## Treat warnings as error in compiler checks
+
+Compiler check methods `compiler.compiles()`, `compiler.links()` and `compiler.run()`
+now have a new `werror: true` keyword argument to treat compiler warnings as error.
+This can be used to check if code compiles without warnings.
+
+## Compilers now have a `has_define` method
+
+This method returns true if the given preprocessor symbol is
+defined, else false is returned. This is useful is cases where
+an empty define has to be distinguished from a non-set one, which
+is not possible using `get_define`.
+
+Additionally it makes intent clearer for code that only needs
+to check if a specific define is set at all and does not care
+about its value.
+
+## [[configure_file]] now has a `macro_name` parameter.
+
+This new paramater, `macro_name` allows C macro-style include guards to be added
+to [[configure_file]]'s output when a template file is not given. This change
+simplifies the creation of configure files that define macros with dynamic names
+and want the C-style include guards.
+
+## `c_std` and `cpp_std` options now accepts a list of values
+
+Projects that prefer GNU C, but can fallback to ISO C, can now set, for
+example, `default_options: 'c_std=gnu11,c11'`, and it will use `gnu11` when
+available, but fallback to `c11` otherwise. It is an error only if none of the
+values are supported by the current compiler.
+
+Likewise, a project that can take benefit of `c++17` but can still build with
+`c++11` can set `default_options: 'cpp_std=c++17,c++11'`.
+
+This allows us to deprecate `gnuXX` values from the MSVC compiler. That means
+that `default_options: 'c_std=gnu11'` will now print a warning with MSVC
+but fallback to `c11`. No warning is printed if at least one
+of the values is valid, i.e. `default_options: 'c_std=gnu11,c11'`.
+
+In the future that deprecation warning will become an hard error because
+`c_std=gnu11` should mean GNU is required, for projects that cannot be
+built with MSVC for example.
+
+## More meaningful description of many generative tasks
+
+When a module uses a `CustomTarget` to process files, it now has the possibility
+to customize the message displayed by ninja.
+
+Many modules were updated to take advantage of this new feature.
+
+## Deprecate 'jar' as a build_target type
+
+The point of `build_target()` is that what is produced can be conditionally
+changed. However, `jar()` has a significant number of non-overlapping arguments
+from other build_targets, including the kinds of sources it can include. Because
+of this crafting a `build_target` that can be used as a Jar and as something
+else is incredibly hard to do. As such, it has been deprecated, and using
+`jar()` directly is recommended.
+
+## generator.process() gains 'env' keyword argument
+
+Like the kwarg of the same name in `custom_target()`, `env` allows
+you to set the environment in which the generator will process inputs.
+
+## Target names for executables now take into account suffixes.
+
+In previous versions of meson, a `meson.build` file like this:
+
+```
+exectuable('foo', 'main.c')
+exectuable('foo', 'main.c', name_suffix: 'bar')
+```
+
+would result in a configure error because meson internally used
+the same id for both executables. This build file is now allowed
+since meson takes into account the `bar` suffix when generating the
+second executable. This allows for executables with the same basename
+but different suffixes to be built in the same subdirectory.
+
+## Executable gains vs_module_defs keyword
+
+This allows using a .def file to control which functions an [[executable]] will
+expose to a [[shared_module]].
+
+## find_program() now supports the 'default_options' argument
+
+In a similar fashion as dependency(), find_program() now also allows you to set default 
+options for the subproject that gets built in case of a fallback.
+
+## `fs.relative_to()`
+
+The `fs` module now has a `relative_to` method. The method will return the
+relative path from argument one to argument two, if one exists. Otherwise, the
+absolute path to argument one is returned.
+
+```meson
+assert(fs.relative_to('c:\\prefix\\lib', 'c:\\prefix\\bin') == '..\\lib')
+assert(fs.relative_to('c:\\proj1\\foo', 'd:\\proj1\\bar') == 'c:\\proj1\\foo')
+assert(fs.relative_to('prefix\\lib\\foo', 'prefix') == 'lib\\foo')
+
+assert(fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')
+assert(fs.relative_to('prefix/lib/foo', 'prefix') == 'lib/foo')
+```
+
+In addition to strings, it can handle files, custom targets, custom target
+indices, and build targets.
+
+## Added follow_symlinks arg to install_data, install_header, and install_subdir
+
+The [[install_data]], [[install_headers]], [[install_subdir]] functions now
+have an optional argument `follow_symlinks` that, if set to `true`, makes it so
+symbolic links in the source are followed, rather than copied into the
+destination tree, to match the old behavior.  The default, which is currently
+to follow links, is subject to change in the future.
+
+## Added 'fill' kwarg to int.to_string()
+
+int.to_string() now accepts a `fill` argument. This allows you to pad the
+string representation of the integer with leading zeroes:
+
+```meson
+n = 4
+message(n.to_string())
+message(n.to_string(fill: 3))
+
+n = -4
+message(n.to_string(fill: 3))
+```
+
+OUTPUT:
+```meson
+4
+004
+-04
+```
+
+## Added 'json' output_format to configure_file()
+
+When no input file is specified, [[configure_file]] can now
+generate a `json` file from given [[@cfg_data]]. 
+Field descriptions are not preserved in the json file.
+
+## `@GLOBAL_SOURCE_ROOT@` and `@DIRNAME@` in machine files
+
+Some tokens are now replaced in the machine file before parsing it:
+- `@GLOBAL_SOURCE_ROOT@`: the absolute path to the project's source tree
+- `@DIRNAME@`: the absolute path to the machine file's parent directory.
+
+It can be used, for example, to have paths relative to the source directory, or
+relative to toolchain's installation directory.
+```ini
+[binaries]
+c = '@DIRNAME@/toolchain/gcc'
+exe_wrapper = '@GLOBAL_SOURCE_ROOT@' / 'build-aux' / 'my-exe-wrapper.sh'
+```
+
+## clang-tidy-fix target
+
+If `clang-tidy` is installed and the project's source root contains a
+`.clang-tidy` (or `_clang-tidy`) file, Meson will automatically define
+a `clang-tidy-fix` target that runs `run-clang-tidy` tool with `-fix`
+option to apply the changes found by clang-tidy to the source code.
+
+If you have defined your own `clang-tidy-fix` target, Meson will not
+generate its own target.
+
+## Meson compile command now accepts suffixes for TARGET
+
+The syntax for specifying a target for meson compile is now
+`[PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]` where
+`TARGET_SUFFIX` is the suffix argument given in the build target
+within meson.build. It is optional and `TARGET_NAME` remains
+sufficient if it uniquely resolves to one single target.
+
+## New environment variable `MESON_PACKAGE_CACHE_DIR`
+
+If the `MESON_PACKAGE_CACHE_DIR` environment variable is set, it is used instead of the
+project's `subprojects/packagecache`. This allows sharing the cache across multiple
+projects. In addition it can contain an already extracted source tree as long as it
+has the same directory name as the `directory` field in the wrap file. In that
+case, the directory will be copied into `subprojects/` before applying patches.
+
+## Update options with `meson setup <builddir> -Dopt=value`
+
+If the build directory already exists, options are updated with their new value
+given on the command line (`-Dopt=value`). Unless `--reconfigure` is also specified,
+this won't reconfigure immediately. This has the same behaviour as
+`meson configure <builddir> -Dopt=value`.
+
+Previous Meson versions were simply a no-op.
+
+## Clear persistent cache with `meson setup --clearcache`
+
+Just like `meson configure --clearcache`, it is now possible to clear the cache
+and reconfigure in a single command with `meson setup --clearcache --reconfigure <builddir>`.
+
+## pkg-config dependencies can now get a variable with multiple replacements
+
+When using [[dep.get_variable]] and defining a `pkgconfig_define`, it is
+sometimes useful to remap multiple dependency variables. For example, if the
+upstream project changed the variable name that is interpolated and it is
+desirable to support both versions.
+
+It is now possible to pass multiple pairs of variable/value.
+
+The same applies to the compatibility [[dep.get_pkgconfig_variable]] method.
+
+## Machine files: `pkgconfig` field deprecated and replaced by `pkg-config`
+
+Meson used to allow both `pkgconfig` and `pkg-config` entries in machine files,
+the former was used for `dependency()` lookup and the latter was used as return
+value for `find_program('pkg-config')`.
+
+This inconsistency is now fixed by deprecating `pkgconfig` in favor of
+`pkg-config` which matches the name of the binary. For backward compatibility
+it is still allowed to define both with the same value, in that case no
+deprecation warning is printed.
+
+## Support targeting Python's limited C API
+
+The Python module's `extension_module` function has gained the ability
+to build extensions which target Python's limited C API via a new keyword
+argument: `limited_api`.
+
+## All compiler `has_*` methods support the `required` keyword
+
+Now instead of
+
+```meson
+assert(cc.has_function('some_function'))
+assert(cc.has_type('some_type'))
+assert(cc.has_member('struct some_type', 'x'))
+assert(cc.has_members('struct some_type', ['x', 'y']))
+```
+
+we can use
+
+```meson
+cc.has_function('some_function', required: true)
+cc.has_type('some_type', required: true)
+cc.has_member('struct some_type', 'x', required: true)
+cc.has_members('struct some_type', ['x', 'y'], required: true)
+```
+
+## Deprecated `rust_crate_type` and replaced by `rust_abi`
+
+The new `rust_abi` keyword argument is accepted by [[shared_library]],
+[[static_library]], [[library]] and [[shared_module]] functions. It can be either
+`'rust'` (the default) or `'c'` strings.
+
+`rust_crate_type` is now deprecated because Meson already knows if it's a shared
+or static library, user only need to specify the ABI (Rust or C).
+
+`proc_macro` crates are now handled by the [`rust.proc_macro()`](Rust-module.md#proc_macro)
+method.
+
+## Tests now abort on errors by default under sanitizers
+
+Sanitizers like AddressSanitizer and UndefinedBehaviorSanitizer do not abort
+by default on detected violations. Meson now exports `ASAN_OPTIONS` and `UBSAN_OPTIONS`
+when unset in the environment to provide sensible abort-by-default behavior.
+
+## `<lang>_(shared|static)_args` for both_library, library, and build_target
+
+We now allow passing arguments like `c_static_args` and `c_shared_args`. This
+allows a [[both_libraries]] to have arguments specific to either the shared or
+static library, as well as common arguments to both.
+
+There is a drawback to this, since Meson now cannot re-use object files between
+the static and shared targets. This could lead to much higher compilation time
+when using a [[both_libraries]] if there are many sources.
+
+## `-j` shorthand for `--num-processes`
+
+`-j` now means the same thing as `--num-processes`. It was inconsistently
+supported only in some subcommands. Now you may use it everywhere
+
+## Unified message(), str.format() and f-string formatting
+
+They now all support the same set of values: strings, integers, bools, options,
+dictionaries and lists thereof.
+
+- Feature options (i.e. enabled, disabled, auto) were not previously supported
+  by any of those functions.
+- Lists and dictionaries were not previously supported by f-string.
+- str.format() allowed any type and often resulted in printing the internal
+  representation which is now deprecated.
+
+## Subprojects excluded from scan-build reports
+
+The `scan-build` target, created when using the `ninja` backend with `scan-build`
+present, now excludes bugs found in subprojects from its final report.
+
+## vs_module_defs keyword now supports indexes of custom_target
+
+This means you can do something like:
+```meson
+defs = custom_target('generate_module_defs', ...)
+shared_library('lib1', vs_module_defs : defs[0])
+shared_library('lib2', vs_module_defs : defs[2])
+```
+
+## Automatic fallback to `cmake` and `cargo` subproject
+
+CMake subprojects have been supported for a while using the `cmake.subproject()`
+module method. However until now it was not possible to use a CMake subproject
+as fallback in a `dependency()` call.
+
+A wrap file can now specify the method used to build it by setting the `method`
+key in the wrap file's first section. The method defaults to `meson`.
+
+Supported methods:
+- `meson` requires `meson.build` file.
+- `cmake` requires `CMakeLists.txt` file. [See details](Wrap-dependency-system-manual.md#cmake-wraps).
+- `cargo` requires `Cargo.toml` file. [See details](Wrap-dependency-system-manual.md#cargo-wraps).
+
diff --git a/docs/markdown/snippets/clike_compilers_implicit_includes.md b/docs/markdown/snippets/clike_compilers_implicit_includes.md
deleted file mode 100644
index a26ec03..0000000
--- a/docs/markdown/snippets/clike_compilers_implicit_includes.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Clarify of implicitly-included headers in C-like compiler checks
-
-Compiler check methods `compiler.compute_int()`, `compiler.alignment()`
-and `compiler.sizeof()` now have their implicitly-included headers
-corrected and documented.
-
-`<stdio.h>` was included unintentionally when cross-compiling, which
-is less than ideal because there is no guarantee that a standard library
-is available for the target platform. Only `<stddef.h>` is included instead.
-
-For projects that depend on the old behavior, the compiler check methods
-have an optional argument `prefix`, which can be used to specify additional
-`#include` directives.
diff --git a/docs/markdown/snippets/compile_werror.md b/docs/markdown/snippets/compile_werror.md
deleted file mode 100644
index e81abb8..0000000
--- a/docs/markdown/snippets/compile_werror.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Treat warnings as error in compiler checks
-
-Compiler check methods `compiler.compiles()`, `compiler.links()` and `compiler.run()`
-now have a new `werror: true` keyword argument to treat compiler warnings as error.
-This can be used to check if code compiles without warnings.
diff --git a/docs/markdown/snippets/compiler_has_define.md b/docs/markdown/snippets/compiler_has_define.md
deleted file mode 100644
index 64de26b..0000000
--- a/docs/markdown/snippets/compiler_has_define.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Compilers now have a `has_define` method
-
-This method returns true if the given preprocessor symbol is
-defined, else false is returned. This is useful is cases where
-an empty define has to be distinguished from a non-set one, which
-is not possible using `get_define`.
-
-Additionally it makes intent clearer for code that only needs
-to check if a specific define is set at all and does not care
-about its value.
\ No newline at end of file
diff --git a/docs/markdown/snippets/configure_file_macro_guard.md b/docs/markdown/snippets/configure_file_macro_guard.md
deleted file mode 100644
index ebb4fc5..0000000
--- a/docs/markdown/snippets/configure_file_macro_guard.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## [[configure_file]] now has a `macro_name` parameter.
-
-This new paramater, `macro_name` allows C macro-style include guards to be added
-to [[configure_file]]'s output when a template file is not given. This change
-simplifies the creation of configure files that define macros with dynamic names
-and want the C-style include guards.
diff --git a/docs/markdown/snippets/cstd.md b/docs/markdown/snippets/cstd.md
deleted file mode 100644
index cc1f083..0000000
--- a/docs/markdown/snippets/cstd.md
+++ /dev/null
@@ -1,18 +0,0 @@
-## `c_std` and `cpp_std` options now accepts a list of values
-
-Projects that prefer GNU C, but can fallback to ISO C, can now set, for
-example, `default_options: 'c_std=gnu11,c11'`, and it will use `gnu11` when
-available, but fallback to `c11` otherwise. It is an error only if none of the
-values are supported by the current compiler.
-
-Likewise, a project that can take benefit of `c++17` but can still build with
-`c++11` can set `default_options: 'cpp_std=c++17,c++11'`.
-
-This allows us to deprecate `gnuXX` values from the MSVC compiler. That means
-that `default_options: 'c_std=gnu11'` will now print a warning with MSVC
-but fallback to `c11`. No warning is printed if at least one
-of the values is valid, i.e. `default_options: 'c_std=gnu11,c11'`.
-
-In the future that deprecation warning will become an hard error because
-`c_std=gnu11` should mean GNU is required, for projects that cannot be
-built with MSVC for example.
diff --git a/docs/markdown/snippets/custom_target_description.md b/docs/markdown/snippets/custom_target_description.md
deleted file mode 100644
index fd8820e..0000000
--- a/docs/markdown/snippets/custom_target_description.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## More meaningful description of many generative tasks
-
-When a module uses a `CustomTarget` to process files, it now has the possibility
-to customize the message displayed by ninja.
-
-Many modules were updated to take advantage of this new feature.
diff --git a/docs/markdown/snippets/deprecate_build_target_jar.md b/docs/markdown/snippets/deprecate_build_target_jar.md
deleted file mode 100644
index 1aa5a81..0000000
--- a/docs/markdown/snippets/deprecate_build_target_jar.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Deprecate 'jar' as a build_target type
-
-The point of `build_target()` is that what is produced can be conditionally
-changed. However, `jar()` has a significant number of non-overlapping arguments
-from other build_targets, including the kinds of sources it can include. Because
-of this crafting a `build_target` that can be used as a Jar and as something
-else is incredibly hard to do. As such, it has been deprecated, and using
-`jar()` directly is recommended.
diff --git a/docs/markdown/snippets/env_kwarg_generator_process.md b/docs/markdown/snippets/env_kwarg_generator_process.md
deleted file mode 100644
index cdf73a3..0000000
--- a/docs/markdown/snippets/env_kwarg_generator_process.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## generator.process() gains 'env' keyword argument
-
-Like the kwarg of the same name in `custom_target()`, `env` allows
-you to set the environment in which the generator will process inputs.
diff --git a/docs/markdown/snippets/executable-suffixes.md b/docs/markdown/snippets/executable-suffixes.md
deleted file mode 100644
index 44471e9..0000000
--- a/docs/markdown/snippets/executable-suffixes.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Target names for executables now take into account suffixes.
-
-In previous versions of meson, a `meson.build` file like this:
-
-```
-exectuable('foo', 'main.c')
-exectuable('foo', 'main.c', name_suffix: 'bar')
-```
-
-would result in a configure error because meson internally used
-the same id for both executables. This build file is now allowed
-since meson takes into account the `bar` suffix when generating the
-second executable. This allows for executables with the same basename
-but different suffixes to be built in the same subdirectory.
diff --git a/docs/markdown/snippets/executable_vs_module_defs.md b/docs/markdown/snippets/executable_vs_module_defs.md
deleted file mode 100644
index 7901748..0000000
--- a/docs/markdown/snippets/executable_vs_module_defs.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Executable gains vs_module_defs keyword
-
-This allows using a .def file to control which functions an [[executable]] will
-expose to a [[shared_module]].
diff --git a/docs/markdown/snippets/find_program_default_options.md b/docs/markdown/snippets/find_program_default_options.md
deleted file mode 100644
index 2cf9822..0000000
--- a/docs/markdown/snippets/find_program_default_options.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## find_program() now supports the 'default_options' argument
-
-In a similar fashion as dependency(), find_program() now also allows you to set default 
-options for the subproject that gets built in case of a fallback.
diff --git a/docs/markdown/snippets/fs_relative_to.md b/docs/markdown/snippets/fs_relative_to.md
deleted file mode 100644
index 82e6a42..0000000
--- a/docs/markdown/snippets/fs_relative_to.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## `fs.relative_to()`
-
-The `fs` module now has a `relative_to` method. The method will return the
-relative path from argument one to argument two, if one exists. Otherwise, the
-absolute path to argument one is returned.
-
-```meson
-assert(fs.relative_to('c:\\prefix\\lib', 'c:\\prefix\\bin') == '..\\lib')
-assert(fs.relative_to('c:\\proj1\\foo', 'd:\\proj1\\bar') == 'c:\\proj1\\foo')
-assert(fs.relative_to('prefix\\lib\\foo', 'prefix') == 'lib\\foo')
-
-assert(fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')
-assert(fs.relative_to('prefix/lib/foo', 'prefix') == 'lib/foo')
-```
-
-In addition to strings, it can handle files, custom targets, custom target
-indices, and build targets.
diff --git a/docs/markdown/snippets/install_follow_symlink_arg.md b/docs/markdown/snippets/install_follow_symlink_arg.md
deleted file mode 100644
index ce971d7..0000000
--- a/docs/markdown/snippets/install_follow_symlink_arg.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Added follow_symlinks arg to install_data, install_header, and install_subdir
-
-The [[install_data]], [[install_headers]], [[install_subdir]] functions now
-have an optional argument `follow_symlinks` that, if set to `true`, makes it so
-symbolic links in the source are followed, rather than copied into the
-destination tree, to match the old behavior.  The default, which is currently
-to follow links, is subject to change in the future.
diff --git a/docs/markdown/snippets/int_to_string_fill.md b/docs/markdown/snippets/int_to_string_fill.md
deleted file mode 100644
index 44885ff..0000000
--- a/docs/markdown/snippets/int_to_string_fill.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## Added 'fill' kwarg to int.to_string()
-
-int.to_string() now accepts a `fill` argument. This allows you to pad the
-string representation of the integer with leading zeroes:
-
-```meson
-n = 4
-message(n.to_string())
-message(n.to_string(fill: 3))
-
-n = -4
-message(n.to_string(fill: 3))
-```
-
-OUTPUT:
-```meson
-4
-004
--04
-```
diff --git a/docs/markdown/snippets/json_output_format.md b/docs/markdown/snippets/json_output_format.md
deleted file mode 100644
index 626840f..0000000
--- a/docs/markdown/snippets/json_output_format.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Added 'json' output_format to configure_file()
-
-When no input file is specified, [[configure_file]] can now
-generate a `json` file from given [[@cfg_data]]. 
-Field descriptions are not preserved in the json file.
diff --git a/docs/markdown/snippets/machine_file_source_dir.md b/docs/markdown/snippets/machine_file_source_dir.md
deleted file mode 100644
index 5af344e..0000000
--- a/docs/markdown/snippets/machine_file_source_dir.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## `@GLOBAL_SOURCE_ROOT@` and `@DIRNAME@` in machine files
-
-Some tokens are now replaced in the machine file before parsing it:
-- `@GLOBAL_SOURCE_ROOT@`: the absolute path to the project's source tree
-- `@DIRNAME@`: the absolute path to the machine file's parent directory.
-
-It can be used, for example, to have paths relative to the source directory, or
-relative to toolchain's installation directory.
-```ini
-[binaries]
-c = '@DIRNAME@/toolchain/gcc'
-exe_wrapper = '@GLOBAL_SOURCE_ROOT@' / 'build-aux' / 'my-exe-wrapper.sh'
-```
diff --git a/docs/markdown/snippets/meson_clang_tidy_fix.md b/docs/markdown/snippets/meson_clang_tidy_fix.md
deleted file mode 100644
index 3a8c772..0000000
--- a/docs/markdown/snippets/meson_clang_tidy_fix.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## clang-tidy-fix target
-
-If `clang-tidy` is installed and the project's source root contains a
-`.clang-tidy` (or `_clang-tidy`) file, Meson will automatically define
-a `clang-tidy-fix` target that runs `run-clang-tidy` tool with `-fix`
-option to apply the changes found by clang-tidy to the source code.
-
-If you have defined your own `clang-tidy-fix` target, Meson will not
-generate its own target.
diff --git a/docs/markdown/snippets/meson_compile_suffixes.md b/docs/markdown/snippets/meson_compile_suffixes.md
deleted file mode 100644
index 481e8ad..0000000
--- a/docs/markdown/snippets/meson_compile_suffixes.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Meson compile command now accepts suffixes for TARGET
-
-The syntax for specifying a target for meson compile is now
-`[PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]` where
-`TARGET_SUFFIX` is the suffix argument given in the build target
-within meson.build. It is optional and `TARGET_NAME` remains
-sufficient if it uniquely resolves to one single target.
diff --git a/docs/markdown/snippets/meson_home.md b/docs/markdown/snippets/meson_home.md
deleted file mode 100644
index 2d656fc..0000000
--- a/docs/markdown/snippets/meson_home.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## New environment variable `MESON_PACKAGE_CACHE_DIR`
-
-If the `MESON_PACKAGE_CACHE_DIR` environment variable is set, it is used instead of the
-project's `subprojects/packagecache`. This allows sharing the cache across multiple
-projects. In addition it can contain an already extracted source tree as long as it
-has the same directory name as the `directory` field in the wrap file. In that
-case, the directory will be copied into `subprojects/` before applying patches.
diff --git a/docs/markdown/snippets/msetup.md b/docs/markdown/snippets/msetup.md
deleted file mode 100644
index f68313d..0000000
--- a/docs/markdown/snippets/msetup.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Update options with `meson setup <builddir> -Dopt=value`
-
-If the build directory already exists, options are updated with their new value
-given on the command line (`-Dopt=value`). Unless `--reconfigure` is also specified,
-this won't reconfigure immediately. This has the same behaviour as
-`meson configure <builddir> -Dopt=value`.
-
-Previous Meson versions were simply a no-op.
-
-## Clear persistent cache with `meson setup --clearcache`
-
-Just like `meson configure --clearcache`, it is now possible to clear the cache
-and reconfigure in a single command with `meson setup --clearcache --reconfigure <builddir>`.
diff --git a/docs/markdown/snippets/pkgconfig_define_variable.md b/docs/markdown/snippets/pkgconfig_define_variable.md
deleted file mode 100644
index 0f7082b..0000000
--- a/docs/markdown/snippets/pkgconfig_define_variable.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## pkg-config dependencies can now get a variable with multiple replacements
-
-When using [[dep.get_variable]] and defining a `pkgconfig_define`, it is
-sometimes useful to remap multiple dependency variables. For example, if the
-upstream project changed the variable name that is interpolated and it is
-desirable to support both versions.
-
-It is now possible to pass multiple pairs of variable/value.
-
-The same applies to the compatibility [[dep.get_pkgconfig_variable]] method.
diff --git a/docs/markdown/snippets/pkgconfig_deprecated_machine_file.md b/docs/markdown/snippets/pkgconfig_deprecated_machine_file.md
deleted file mode 100644
index 36647e9..0000000
--- a/docs/markdown/snippets/pkgconfig_deprecated_machine_file.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Machine files: `pkgconfig` field deprecated and replaced by `pkg-config`
-
-Meson used to allow both `pkgconfig` and `pkg-config` entries in machine files,
-the former was used for `dependency()` lookup and the latter was used as return
-value for `find_program('pkg-config')`.
-
-This inconsistency is now fixed by deprecating `pkgconfig` in favor of
-`pkg-config` which matches the name of the binary. For backward compatibility
-it is still allowed to define both with the same value, in that case no
-deprecation warning is printed.
diff --git a/docs/markdown/snippets/python_extension_module_limited_api.md b/docs/markdown/snippets/python_extension_module_limited_api.md
deleted file mode 100644
index f5da969..0000000
--- a/docs/markdown/snippets/python_extension_module_limited_api.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Support targeting Python's limited C API
-
-The Python module's `extension_module` function has gained the ability
-to build extensions which target Python's limited C API via a new keyword
-argument: `limited_api`.
diff --git a/docs/markdown/snippets/required_keyword_for_has_functions.md b/docs/markdown/snippets/required_keyword_for_has_functions.md
deleted file mode 100644
index 0752ac7..0000000
--- a/docs/markdown/snippets/required_keyword_for_has_functions.md
+++ /dev/null
@@ -1,19 +0,0 @@
-## All compiler `has_*` methods support the `required` keyword
-
-Now instead of
-
-```meson
-assert(cc.has_function('some_function'))
-assert(cc.has_type('some_type'))
-assert(cc.has_member('struct some_type', 'x'))
-assert(cc.has_members('struct some_type', ['x', 'y']))
-```
-
-we can use
-
-```meson
-cc.has_function('some_function', required: true)
-cc.has_type('some_type', required: true)
-cc.has_member('struct some_type', 'x', required: true)
-cc.has_members('struct some_type', ['x', 'y'], required: true)
-```
diff --git a/docs/markdown/snippets/rust_crate_type.md b/docs/markdown/snippets/rust_crate_type.md
deleted file mode 100644
index 9b32f0e..0000000
--- a/docs/markdown/snippets/rust_crate_type.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## Deprecated `rust_crate_type` and replaced by `rust_abi`
-
-The new `rust_abi` keyword argument is accepted by [[shared_library]],
-[[static_library]], [[library]] and [[shared_module]] functions. It can be either
-`'rust'` (the default) or `'c'` strings.
-
-`rust_crate_type` is now deprecated because Meson already knows if it's a shared
-or static library, user only need to specify the ABI (Rust or C).
-
-`proc_macro` crates are now handled by the [`rust.proc_macro()`](Rust-module.md#proc_macro)
-method.
diff --git a/docs/markdown/snippets/sanitizers_test.md b/docs/markdown/snippets/sanitizers_test.md
deleted file mode 100644
index 2492911..0000000
--- a/docs/markdown/snippets/sanitizers_test.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Tests now abort on errors by default under sanitizers
-
-Sanitizers like AddressSanitizer and UndefinedBehaviorSanitizer do not abort
-by default on detected violations. Meson now exports `ASAN_OPTIONS` and `UBSAN_OPTIONS`
-when unset in the environment to provide sensible abort-by-default behavior.
diff --git a/docs/markdown/snippets/shared_static_only_args.md b/docs/markdown/snippets/shared_static_only_args.md
deleted file mode 100644
index 0963c71..0000000
--- a/docs/markdown/snippets/shared_static_only_args.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## `<lang>_(shared|static)_args` for both_library, library, and build_target
-
-We now allow passing arguments like `c_static_args` and `c_shared_args`. This
-allows a [[both_libraries]] to have arguments specific to either the shared or
-static library, as well as common arguments to both.
-
-There is a drawback to this, since Meson now cannot re-use object files between
-the static and shared targets. This could lead to much higher compilation time
-when using a [[both_libraries]] if there are many sources.
diff --git a/docs/markdown/snippets/shorthand_argument_for_mtest_num_processes.md b/docs/markdown/snippets/shorthand_argument_for_mtest_num_processes.md
deleted file mode 100644
index 7ff661b..0000000
--- a/docs/markdown/snippets/shorthand_argument_for_mtest_num_processes.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## `-j` shorthand for `--num-processes`
-
-`-j` now means the same thing as `--num-processes`. It was inconsistently
-supported only in some subcommands. Now you may use it everywhere
diff --git a/docs/markdown/snippets/string_format.md b/docs/markdown/snippets/string_format.md
deleted file mode 100644
index fa33617..0000000
--- a/docs/markdown/snippets/string_format.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Unified message(), str.format() and f-string formatting
-
-They now all support the same set of values: strings, integers, bools, options,
-dictionaries and lists thereof.
-
-- Feature options (i.e. enabled, disabled, auto) were not previously supported
-  by any of those functions.
-- Lists and dictionaries were not previously supported by f-string.
-- str.format() allowed any type and often resulted in printing the internal
-  representation which is now deprecated.
diff --git a/docs/markdown/snippets/subprojects_excluded_from_scanbuild.md b/docs/markdown/snippets/subprojects_excluded_from_scanbuild.md
deleted file mode 100644
index d740006..0000000
--- a/docs/markdown/snippets/subprojects_excluded_from_scanbuild.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Subprojects excluded from scan-build reports
-
-The `scan-build` target, created when using the `ninja` backend with `scan-build`
-present, now excludes bugs found in subprojects from its final report.
diff --git a/docs/markdown/snippets/vs_module_defs_customtargetindex.md b/docs/markdown/snippets/vs_module_defs_customtargetindex.md
deleted file mode 100644
index d50d04e..0000000
--- a/docs/markdown/snippets/vs_module_defs_customtargetindex.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## vs_module_defs keyword now supports indexes of custom_target
-
-This means you can do something like:
-```meson
-defs = custom_target('generate_module_defs', ...)
-shared_library('lib1', vs_module_defs : defs[0])
-shared_library('lib2', vs_module_defs : defs[2])
-```
diff --git a/docs/markdown/snippets/wrap.md b/docs/markdown/snippets/wrap.md
deleted file mode 100644
index 3a5521e..0000000
--- a/docs/markdown/snippets/wrap.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Automatic fallback to `cmake` and `cargo` subproject
-
-CMake subprojects have been supported for a while using the `cmake.subproject()`
-module method. However until now it was not possible to use a CMake subproject
-as fallback in a `dependency()` call.
-
-A wrap file can now specify the method used to build it by setting the `method`
-key in the wrap file's first section. The method defaults to `meson`.
-
-Supported methods:
-- `meson` requires `meson.build` file.
-- `cmake` requires `CMakeLists.txt` file. [See details](Wrap-dependency-system-manual.md#cmake-wraps).
-- `cargo` requires `Cargo.toml` file. [See details](Wrap-dependency-system-manual.md#cargo-wraps).
diff --git a/docs/sitemap.txt b/docs/sitemap.txt
index b6d57a4..5eb2284 100644
--- a/docs/sitemap.txt
+++ b/docs/sitemap.txt
@@ -88,6 +88,7 @@
 		Wrap-best-practices-and-tips.md
 		Shipping-prebuilt-binaries-as-wraps.md
 	Release-notes.md
+		Release-notes-for-1.3.0.md
 		Release-notes-for-1.2.0.md
 		Release-notes-for-1.1.0.md
 		Release-notes-for-1.0.0.md