wayland: Stable protocols can have a version

Fixes: #12968
diff --git a/docs/markdown/snippets/wayland_stable_prot_version.md b/docs/markdown/snippets/wayland_stable_prot_version.md
new file mode 100644
index 0000000..78d0a50
--- /dev/null
+++ b/docs/markdown/snippets/wayland_stable_prot_version.md
@@ -0,0 +1,13 @@
+## Wayland stable protocols can be versioned
+
+The wayland module now accepts a version number for stable protocols.
+
+```meson
+wl_mod = import('unstable-wayland')
+
+wl_mod.find_protocol(
+  'linux-dmabuf',
+  state: 'stable'
+  version: 1
+)
+```
diff --git a/mesonbuild/modules/wayland.py b/mesonbuild/modules/wayland.py
index cab2ff4..e17cf99 100644
--- a/mesonbuild/modules/wayland.py
+++ b/mesonbuild/modules/wayland.py
@@ -8,7 +8,7 @@
 from . import ExtensionModule, ModuleReturnValue, ModuleInfo
 from ..build import CustomTarget
 from ..interpreter.type_checking import NoneType, in_set_validator
-from ..interpreterbase import typed_pos_args, typed_kwargs, KwargInfo
+from ..interpreterbase import typed_pos_args, typed_kwargs, KwargInfo, FeatureNew
 from ..mesonlib import File, MesonException
 
 if T.TYPE_CHECKING:
@@ -122,7 +122,7 @@
             raise MesonException(f'{xml_state} protocols require a version number.')
 
         if xml_state == 'stable' and version is not None:
-            raise MesonException('stable protocols do not require a version number.')
+            FeatureNew.single_use('Version number in stable wayland protocol', '1.5.0', state.subproject, location=state.current_node)
 
         if self.protocols_dep is None:
             self.protocols_dep = state.dependency('wayland-protocols')
@@ -130,12 +130,12 @@
         if self.pkgdatadir is None:
             self.pkgdatadir = self.protocols_dep.get_variable(pkgconfig='pkgdatadir', internal='pkgdatadir')
 
-        if xml_state == 'stable':
-            xml_name = f'{base_name}.xml'
-        elif xml_state == 'staging':
-            xml_name = f'{base_name}-v{version}.xml'
-        else:
-            xml_name = f'{base_name}-unstable-v{version}.xml'
+        xml_name = base_name
+        if xml_state == 'unstable':
+            xml_name += '-unstable'
+        if version is not None:
+            xml_name += f'-v{version}'
+        xml_name += '.xml'
 
         path = os.path.join(self.pkgdatadir, xml_state, base_name, xml_name)