diff --git a/docs/reference/meson.build b/docs/reference/meson.build
index 77d9fdee4..be92d0297 100644
--- a/docs/reference/meson.build
+++ b/docs/reference/meson.build
@@ -1,5 +1,18 @@
-version_conf = configuration_data()
-version_conf.set('VERSION', meson.project_version())
+gidocgen = find_program('gi-docgen', required: get_option('gtk_doc'))
+
+doc_conf = configuration_data()
+doc_conf.set('MUTTER_API_VERSION', mutter_api_version)
+
+gi_docgen_common_args = [
+ '--quiet',
+ '--no-namespace-dir',
+]
+
+if get_option('werror')
+ gi_docgen_common_args += ['--fatal-warnings']
+endif
+
+docs_dir = datadir / 'doc'
subdir('shell')
subdir('st')
diff --git a/docs/reference/shell/meson.build b/docs/reference/shell/meson.build
index 96b0d087d..4ea7069e5 100644
--- a/docs/reference/shell/meson.build
+++ b/docs/reference/shell/meson.build
@@ -1,51 +1,25 @@
-private_headers = [
- 'gactionmuxer.h',
- 'gactionobservable.h',
- 'gactionobserver.h',
- 'shell-network-agent.h',
-]
-
-exclude_directories = [
- 'calendar-server',
- 'hotplug-sniffer',
- 'st',
- 'tray'
-]
-
-ifaces = [
- ['org.gnome.Shell.Screenshot', 'org.gnome.Shell.Screenshot.xml'],
- ['org.gnome.ShellSearchProvider', 'org.gnome.Shell.SearchProvider.xml'],
- ['org.gnome.ShellSearchProvider2', 'org.gnome.Shell.SearchProvider2.xml']
-]
-foreach iface : ifaces
- custom_target(iface[0] + ' docs',
- input: '../../../data/dbus-interfaces/@0@.xml'.format(iface[0]),
- output: 'doc-gen-' + iface[1],
- command: [
- 'gdbus-codegen',
- '--interface-prefix=@0@.'.format(iface[0]),
- '--generate-docbook', 'doc-gen',
- '--output-directory', '@OUTDIR@',
- '@INPUT@'
- ],
- build_by_default: true
- )
-endforeach
-
-configure_file(
- input: 'version.xml.in',
- output: 'version.xml',
- configuration: version_conf
+shell_toml = configure_file(
+ input: 'shell.toml.in',
+ output: 'shell.toml',
+ configuration: doc_conf
)
-gnome.gtkdoc('shell',
- main_sgml: 'shell-docs.sgml',
- src_dir: [
- join_paths(meson.project_source_root(), 'src'),
- join_paths(meson.project_build_root(), 'src')
+custom_target('shell-doc',
+ input: [shell_toml, libshell_gir[0]],
+ output: 'shell',
+ command: [
+ gidocgen,
+ 'generate',
+ gi_docgen_common_args,
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src'),
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src/st'),
+ '--add-include-path=@0@'.format(mutter_dep.get_variable('girdir')),
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../subprojects/gvc'),
+ '--config=@INPUT0@',
+ '--output-dir=@OUTPUT@',
+ '--content-dir=@0@'.format(meson.current_source_dir()),
+ '@INPUT1@',
],
- scan_args: [
- '--ignore-headers=' + ' '.join(private_headers + exclude_directories)
- ],
- install: true
+ install: true,
+ install_dir: docs_dir,
)
diff --git a/docs/reference/shell/shell-docs.sgml b/docs/reference/shell/shell-docs.sgml
deleted file mode 100644
index 04255cd01..000000000
--- a/docs/reference/shell/shell-docs.sgml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-]>
-
-
- Shell Reference Manual
-
- for Shell &version;.
-
-
-
-
-
- Actors
-
-
-
- Application tracking
-
-
-
-
-
- Search
-
-
-
- Tray Icons
-
-
-
-
- Integration helpers and utilities
-
-
-
-
-
-
-
-
-
-
-
-
- API Index
-
-
-
- Index of deprecated API
-
-
-
-
-
diff --git a/docs/reference/shell/shell.toml.in b/docs/reference/shell/shell.toml.in
new file mode 100644
index 000000000..565fc8d69
--- /dev/null
+++ b/docs/reference/shell/shell.toml.in
@@ -0,0 +1,41 @@
+[library]
+namespace = "Shell"
+version = "@MUTTER_API_VERSION@"
+browse_url = "https://gitlab.gnome.org/GNOME/gnome-shell/"
+repository_url = "https://gitlab.gnome.org/GNOME/gnome-shell.git"
+website_url = "https://www.gnome.org"
+license = "GPL-2.0-or-later"
+description = "Shell"
+dependencies = ["GObject-2.0", "Gio-2.0", "Meta-@MUTTER_API_VERSION@", "Clutter-@MUTTER_API_VERSION@"]
+devhelp = true
+search_index = true
+
+ [dependencies."GObject-2.0"]
+ name = "GObject"
+ description = "The base type system library"
+ docs_url = "https://docs.gtk.org/gobject"
+
+ [dependencies."Gio-2.0"]
+ name = "Gio"
+ description = "GObject Interfaces and Objects, Networking, IPC, and I/O"
+ docs_url = "https://docs.gtk.org/gio"
+
+ [dependencies."Meta-@MUTTER_API_VERSION@"]
+ name = "Meta"
+ description = "The mutter display server, window manager and compositor library"
+ docs_url = "https://gnome.pages.gitlab.gnome.org/mutter/meta/"
+
+ [dependencies."Clutter-@MUTTER_API_VERSION@"]
+ name = "Clutter"
+ description = "An OpenGL based 'interactive canvas' library"
+ docs_url = "https://gnome.pages.gitlab.gnome.org/mutter/clutter/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+
+[source-location]
+base_url = "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/HEAD/"
+
+[extra]
+urlmap_file = "urlmap.js"
diff --git a/docs/reference/shell/urlmap.js b/docs/reference/shell/urlmap.js
new file mode 100644
index 000000000..85f05ecc5
--- /dev/null
+++ b/docs/reference/shell/urlmap.js
@@ -0,0 +1,11 @@
+baseURLs = [
+ [ 'GLib', 'https://docs.gtk.org/glib/' ],
+ [ 'GObject', 'https://docs.gtk.org/gobject/' ],
+ [ 'Gio', 'https://docs.gtk.org/gio/' ],
+ [ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ],
+ [ 'Meta', 'https://gnome.pages.gitlab.gnome.org/mutter/meta/' ],
+ [ 'Mtk', 'https://gnome.pages.gitlab.gnome.org/mutter/mtk/' ],
+ [ 'Cogl', 'https://gnome.pages.gitlab.gnome.org/mutter/cogl/' ],
+ [ 'Clutter', 'https://gnome.pages.gitlab.gnome.org/mutter/clutter/' ],
+ [ 'St', 'https://gnome.pages/gitlab.gnome.org/gnome-shell/st/' ],
+]
diff --git a/docs/reference/shell/version.xml.in b/docs/reference/shell/version.xml.in
deleted file mode 100644
index d78bda934..000000000
--- a/docs/reference/shell/version.xml.in
+++ /dev/null
@@ -1 +0,0 @@
-@VERSION@
diff --git a/docs/reference/st/meson.build b/docs/reference/st/meson.build
index 0c4b4207b..ad63a9456 100644
--- a/docs/reference/st/meson.build
+++ b/docs/reference/st/meson.build
@@ -1,23 +1,24 @@
-private_headers = [
- 'st-private.h',
- 'st-theme-node-private.h'
-]
-
-configure_file(
- input: 'version.xml.in',
- output: 'version.xml',
- configuration: version_conf
+st_toml = configure_file(
+ input: 'st.toml.in',
+ output: 'st.toml',
+ configuration: doc_conf
)
-gnome.gtkdoc('st',
- main_sgml: 'st-docs.sgml',
- src_dir: [
- join_paths(meson.project_source_root(), 'src', 'st'),
- join_paths(meson.project_build_root(), 'src', 'st')
+custom_target('st-doc',
+ input: [st_toml, libst_gir[0]],
+ output: 'st',
+ command: [
+ gidocgen,
+ 'generate',
+ gi_docgen_common_args,
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src'),
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src/st'),
+ '--add-include-path=@0@'.format(mutter_dep.get_variable('girdir')),
+ '--config=@INPUT0@',
+ '--output-dir=@OUTPUT@',
+ '--content-dir=@0@'.format(meson.current_source_dir()),
+ '@INPUT1@',
],
- scan_args: [
- '--ignore-headers=' + ' '.join(private_headers),
- '--rebuild-sections'
- ],
- install: true
+ install: true,
+ install_dir: docs_dir,
)
diff --git a/docs/reference/st/st-docs.sgml b/docs/reference/st/st-docs.sgml
deleted file mode 100644
index 4e5fd9997..000000000
--- a/docs/reference/st/st-docs.sgml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-]>
-
-
- St Reference Manual
-
- for St &version;.
-
-
-
-
-
- API reference
-
- Abstract classes and Interfaces
-
-
-
-
-
- Widgets
-
-
-
-
-
-
-
- Containers
-
-
-
-
-
-
- Styling
-
-
-
-
-
-
-
-
-
-
- API Index
-
-
-
- Index of deprecated API
-
-
-
-
-
diff --git a/docs/reference/st/st.toml.in b/docs/reference/st/st.toml.in
new file mode 100644
index 000000000..c1f35c7f3
--- /dev/null
+++ b/docs/reference/st/st.toml.in
@@ -0,0 +1,36 @@
+[library]
+namespace = "St"
+version = "@MUTTER_API_VERSION@"
+browse_url = "https://gitlab.gnome.org/GNOME/gnome-shell/"
+repository_url = "https://gitlab.gnome.org/GNOME/gnome-shell.git"
+website_url = "https://www.gnome.org"
+license = "LGPL-2.0-or-later"
+description = "Shell Toolkit"
+dependencies = ["GObject-2.0", "Gio-2.0", "Clutter-@MUTTER_API_VERSION@"]
+devhelp = true
+search_index = true
+
+ [dependencies."GObject-2.0"]
+ name = "GObject"
+ description = "The base type system library"
+ docs_url = "https://docs.gtk.org/gobject"
+
+ [dependencies."Gio-2.0"]
+ name = "Gio"
+ description = "GObject Interfaces and Objects, Networking, IPC, and I/O"
+ docs_url = "https://docs.gtk.org/gio"
+
+ [dependencies."Clutter-@MUTTER_API_VERSION@"]
+ name = "Clutter"
+ description = "An OpenGL based 'interactive canvas' library"
+ docs_url = "https://gnome.pages.gitlab.gnome.org/mutter/clutter/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+
+[source-location]
+base_url = "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/HEAD/"
+
+[extra]
+urlmap_file = "urlmap.js"
diff --git a/docs/reference/st/urlmap.js b/docs/reference/st/urlmap.js
new file mode 100644
index 000000000..eed228a90
--- /dev/null
+++ b/docs/reference/st/urlmap.js
@@ -0,0 +1,10 @@
+baseURLs = [
+ [ 'GLib', 'https://docs.gtk.org/glib/' ],
+ [ 'GObject', 'https://docs.gtk.org/gobject/' ],
+ [ 'Gio', 'https://docs.gtk.org/gio/' ],
+ [ 'Pango', 'https://docs.gtk.org/pango/' ],
+ [ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ],
+ [ 'Clutter', 'https://gnome.pages.gitlab.gnome.org/mutter/clutter/' ],
+ [ 'Cogl', 'https://gnome.pages.gitlab.gnome.org/mutter/cogl/' ],
+ [ 'Meta', 'https://gnome.pages.gitlab.gnome.org/mutter/meta/' ],
+]
diff --git a/docs/reference/st/version.xml.in b/docs/reference/st/version.xml.in
deleted file mode 100644
index d78bda934..000000000
--- a/docs/reference/st/version.xml.in
+++ /dev/null
@@ -1 +0,0 @@
-@VERSION@
diff --git a/meson.build b/meson.build
index 70ba71106..e550dd91a 100644
--- a/meson.build
+++ b/meson.build
@@ -95,6 +95,11 @@ x11_dep = dependency('x11')
schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
gnome_desktop_dep = dependency('gnome-desktop-4', version: gnome_desktop_req)
+gidocgen_dep = dependency('gi-docgen',
+ version: '>= 2021.1',
+ fallback: ['gi-docgen', 'dummy_dep'],
+ required: get_option('gtk_doc'))
+
nm_deps = []
if get_option('networkmanager')
nm_deps += dependency('libnm', version: nm_req)
diff --git a/src/meson.build b/src/meson.build
index 070312bd0..748d855a3 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -231,7 +231,7 @@ libshell_gir_includes += [
libst_gir[0]
]
-gnome.generate_gir(libshell,
+libshell_gir = gnome.generate_gir(libshell,
sources: libshell_gir_sources,
nsversion: mutter_api_version,
namespace: 'Shell',
diff --git a/subprojects/gi-docgen.wrap b/subprojects/gi-docgen.wrap
new file mode 100644
index 000000000..98cd92118
--- /dev/null
+++ b/subprojects/gi-docgen.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+directory=gi-docgen
+url=https://gitlab.gnome.org/GNOME/gi-docgen.git
+push-url=ssh://git@gitlab.gnome.org:GNOME/gi-docgen.git
+revision=main
+depth=1