[rygel/wip/phako/190] wip: Fix gtkdoc generation and installation




commit c9264d221c988e3af6e646a49b69601212667cdf
Author: Jens Georg <mail jensge org>
Date:   Sat Dec 19 01:04:41 2020 +0100

    wip: Fix gtkdoc generation and installation
    
    Fixes #190

 build-aux/meson/install-gtkdoc.py                  | 15 ++++++++++++++
 doc/reference/librygel-core/meson.build            | 13 ++++++------
 doc/reference/librygel-db/meson.build              | 10 ++++-----
 doc/reference/librygel-renderer-gst/meson.build    | 10 ++++-----
 doc/reference/librygel-renderer/meson.build        | 10 ++++-----
 .../gtkdoc/implementing-media-engines.xml          |  4 ++--
 .../gtkdoc/implementing-server-plugins.xml         | 24 +++++++++++-----------
 .../gtkdoc/implementing-servers.xml                |  8 ++++----
 doc/reference/librygel-server/meson.build          | 10 ++++-----
 meson.build                                        |  5 ++++-
 10 files changed, 59 insertions(+), 50 deletions(-)
---
diff --git a/build-aux/meson/install-gtkdoc.py b/build-aux/meson/install-gtkdoc.py
new file mode 100644
index 00000000..e391a69a
--- /dev/null
+++ b/build-aux/meson/install-gtkdoc.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+
+import sys
+from os import environ, path, getcwd
+import shutil
+
+destdir = environ.get('MESON_INSTALL_DESTDIR_PREFIX', '')
+
+a = path.join(sys.argv[1], 'html')
+b = path.join(destdir, sys.argv[2])
+
+print(a,b)
+shutil.copytree(a, b, dirs_exist_ok=True)
+
+
diff --git a/doc/reference/librygel-core/meson.build b/doc/reference/librygel-core/meson.build
index 8a74cc90..f4ceca96 100644
--- a/doc/reference/librygel-core/meson.build
+++ b/doc/reference/librygel-core/meson.build
@@ -22,22 +22,22 @@ custom_target('valadoc-core',
     [
         valadoc,
         core_doc_common_args,
-        '-o', 'valadoc',
         core_sources
     ]
 )
 
 if gtkdoc.found()
-custom_target('gtkdoc-core',
+    subdir('gtkdoc')
+
+gtkdoc_core_target = custom_target('gtkdoc-core',
     input: core_sources,
     output: 'gtkdoc',
     depends : core_lib,
     build_by_default : get_option('api-docs'),
-    command :
+    command:
     [
         valadoc,
         '--doclet', 'gtkdoc',
-        '-o', 'gtkdoc',
         core_doc_common_args,
         '-X', join_paths(meson.build_root(), 'src/librygel-core/rygel-core.h'),
         '-X', '-l',
@@ -48,9 +48,8 @@ custom_target('gtkdoc-core',
 )
 
 if get_option('api-docs')
-    install_subdir('gtkdoc/html',
-                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-core'),
-                   strip_directory : true)
+    meson.add_install_script(install_doc, gtkdoc_core_target,
+                   join_paths(get_option('datadir'), 'gtk-doc/html/librygel-core'))
 endif
 endif
 endif
diff --git a/doc/reference/librygel-db/meson.build b/doc/reference/librygel-db/meson.build
index 3463c56e..9c6fffd5 100644
--- a/doc/reference/librygel-db/meson.build
+++ b/doc/reference/librygel-db/meson.build
@@ -28,13 +28,13 @@ custom_target('valadoc-db',
     [
         valadoc,
         db_doc_common_args,
-        '-o', 'valadoc',
         db_sources
     ]
 )
 
 if gtkdoc.found()
-custom_target('gtkdoc-db',
+subdir('gtkdoc')
+gtkdoc_db_target = custom_target('gtkdoc-db',
     input: db_sources,
     output: 'gtkdoc',
     depends : db_lib,
@@ -44,7 +44,6 @@ custom_target('gtkdoc-db',
         valadoc,
         db_doc_common_args,
         '--doclet', 'gtkdoc',
-        '-o', 'gtkdoc',
         '-X', join_paths(meson.build_root(), 'src/librygel-db/rygel-db.h'),
         '-X', '-l',
         '-X', join_paths(meson.build_root(), 'src/librygel-db/librygel-db-2.6.so'),
@@ -55,9 +54,8 @@ custom_target('gtkdoc-db',
 )
 
 if get_option('api-docs')
-    install_subdir('gtkdoc/html',
-                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-db'),
-                   strip_directory : true)
+    meson.add_install_script(install_doc, gtkdoc_db_target,
+                   join_paths(get_option('datadir'), 'gtk-doc/html/librygel-db'))
 endif
 
 endif
diff --git a/doc/reference/librygel-renderer-gst/meson.build b/doc/reference/librygel-renderer-gst/meson.build
index 21977856..51e95d72 100644
--- a/doc/reference/librygel-renderer-gst/meson.build
+++ b/doc/reference/librygel-renderer-gst/meson.build
@@ -31,13 +31,13 @@ custom_target('valadoc-renderer-gst',
     [
         valadoc,
         renderer_gst_doc_common_args,
-        '-o', 'valadoc',
         renderer_gst_sources
     ]
 )
 
 if gtkdoc.found()
-custom_target('gtkdoc-renderer-gst',
+subdir('gtkdoc')
+gtkdoc_renderer_gst_target = custom_target('gtkdoc-renderer-gst',
     input: renderer_gst_sources,
     output: 'gtkdoc',
     depends : renderer_gst_lib,
@@ -47,7 +47,6 @@ custom_target('gtkdoc-renderer-gst',
         valadoc,
         renderer_gst_doc_common_args,
         '--doclet', 'gtkdoc',
-        '-o', 'gtkdoc',
         '-X', join_paths(meson.build_root(), 'src/librygel-renderer/rygel-renderer.h'),
         '-X', '-l',
         '-X', join_paths(meson.build_root(), 'src/librygel-renderer/librygel-renderer-2.6.so'),
@@ -59,9 +58,8 @@ custom_target('gtkdoc-renderer-gst',
     ]
 )
 if get_option('api-docs')
-    install_subdir('gtkdoc/html',
-                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer-gst'),
-                   strip_directory : true)
+    meson.add_install_script(install_doc, gtkdoc_renderer_gst_target,
+                   join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer-gst'))
 endif
 endif
 endif
diff --git a/doc/reference/librygel-renderer/meson.build b/doc/reference/librygel-renderer/meson.build
index a2826425..1b2532f8 100644
--- a/doc/reference/librygel-renderer/meson.build
+++ b/doc/reference/librygel-renderer/meson.build
@@ -27,13 +27,13 @@ custom_target('valadoc-renderer',
     [
         valadoc,
         renderer_doc_common_args,
-        '-o', 'valadoc',
         renderer_sources
     ]
 )
 
 if gtkdoc.found()
-custom_target('gtkdoc-renderer',
+subdir('gtkdoc')
+gtkdoc_renderer_target = custom_target('gtkdoc-renderer',
     input: renderer_sources,
     output: 'gtkdoc',
     depends : renderer_lib,
@@ -43,7 +43,6 @@ custom_target('gtkdoc-renderer',
         valadoc,
         renderer_doc_common_args,
         '--doclet', 'gtkdoc',
-        '-o', 'gtkdoc',
         '-X', join_paths(meson.build_root(), 'src/librygel-renderer/rygel-renderer.h'),
         '-X', '-l',
         '-X', join_paths(meson.build_root(), 'src/librygel-renderer/librygel-renderer-2.6.so'),
@@ -53,9 +52,8 @@ custom_target('gtkdoc-renderer',
     ]
 )
 if get_option('api-docs')
-    install_subdir('gtkdoc/html',
-                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer'),
-                   strip_directory : true)
+    meson.add_install_script(install_doc, gtkdoc_renderer_target,
+                   join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer'))
 endif
 endif
 endif
diff --git a/doc/reference/librygel-server/gtkdoc/implementing-media-engines.xml 
b/doc/reference/librygel-server/gtkdoc/implementing-media-engines.xml
index ab0f43ea..68bf3f13 100644
--- a/doc/reference/librygel-server/gtkdoc/implementing-media-engines.xml
+++ b/doc/reference/librygel-server/gtkdoc/implementing-media-engines.xml
@@ -11,9 +11,9 @@
 <title>Implementing Media Engines: Overview</title>
 
 <para>
-This library may be used to create Rygel media engines by 
+This library may be used to create Rygel media engines by
 implementing the <link linkend="RygelMediaEngine">RygelMediaEngine</link> class.
-Rygel media engines contain knowledge about the streaming and (optionally) the 
+Rygel media engines contain knowledge about the streaming and (optionally) the
 transcoding and seeking capabilites of the media library in use.</para>
 
 <para>The actual media engine used by Rygel at runtime is specified
diff --git a/doc/reference/librygel-server/gtkdoc/implementing-server-plugins.xml 
b/doc/reference/librygel-server/gtkdoc/implementing-server-plugins.xml
index 5be0903f..9ae1c288 100644
--- a/doc/reference/librygel-server/gtkdoc/implementing-server-plugins.xml
+++ b/doc/reference/librygel-server/gtkdoc/implementing-server-plugins.xml
@@ -12,10 +12,10 @@
 <title>Implementing Server Plugins: Overview</title>
 
 <para>
-This library may be used to create Rygel server plugins by 
+This library may be used to create Rygel server plugins by
 implementing the <link linkend="RygelMediaServerPlugin">RygelMediaServerPlugin</link> class.</para>
 
-<para>The <link linkend="RygelMediaServerPlugin">RygelMediaServerPlugin</link> reference documentation 
+<para>The <link linkend="RygelMediaServerPlugin">RygelMediaServerPlugin</link> reference documentation
 and these examples explain how to implement these plugins.
 </para>
 
@@ -32,30 +32,30 @@ This example source code shows how to implement a Rygel Server plugin.</para>
 deriving from <link linkend="RygelSimpleContainer">RygelSimpleContainer</link> and adding some
 hard-coded items. A real Rygel server plugin's root container, or its child items, would typically
 populate themselves dynamically. For instance, they might add and remove items based on some source
-such as a file system or database. See, for instance, the 
+such as a file system or database. See, for instance, the
 <ulink url="&url_git_browse_base_src;plugins/tracker">Rygel Tracker Plugin</ulink> or the
 <ulink url="&url_git_browse_base_src;plugins/media-export">Rygel MediaExport Plugin</ulink> plugins,
 implemented in Vala.
 </para>
 
 <!-- Do not indent the xi:include node. That puts spaces at the start of the code. -->
-<programlisting role="C">
-<xi:include  href="../../../../examples/server-plugins/C/example-server-plugin.h"
+<programlisting language="C">
+<xi:include  href="@EXAMPLEDIR@/server-plugins/C/example-server-plugin.h"
     parse="text"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </programlisting>
-<programlisting role="C">
-<xi:include  href="../../../../examples/server-plugins/C/example-server-plugin.c"
+<programlisting language="C">
+<xi:include  href="@EXAMPLEDIR@/server-plugins/C/example-server-plugin.c"
     parse="text"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </programlisting>
-<programlisting role="C">
-<xi:include  href="../../../../examples/server-plugins/C/example-root-container.h"
+<programlisting language="C">
+<xi:include  href="@EXAMPLEDIR@/server-plugins/C/example-root-container.h"
     parse="text"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </programlisting>
-<programlisting role="C">
-<xi:include  href="../../../../examples/server-plugins/C/example-root-container.c"
+<programlisting language="C">
+<xi:include  href="@EXAMPLEDIR@/server-plugins/C/example-root-container.c"
     parse="text"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </programlisting>
@@ -73,7 +73,7 @@ implemented in Vala.
 
 <para>The <classname>RygelMediaExportRootContainer</classname> creates an instance of a 
<classname>RygelMediaExportMediaCache</classname> class and a 
<classname>RygelMediaExportHarvester</classname> class. The harvester finds files on the filesystem, and 
stores them in the media cache, which uses SQLite to keep track of them.</para>
 
-<para><classname>RygelMediaExportRootContainer</classname> informs the media cache that it should have a 
child container for the media content as organised on the filesystem, and additionally some virtual folders 
for Music, Pictures, Video and Playlists, with further sub-divisions under these, for instance by publication 
year. These containers are added to the media cache via instances of the 
<classname>RygelMediaExportNullContainer</classname> class, but that is just to simplify the media cache API 
and these instances then serve no further purpose. The virtual folders are re-added whenever the filesystem's 
container is updated, so that they can show the updated 
+<para><classname>RygelMediaExportRootContainer</classname> informs the media cache that it should have a 
child container for the media content as organised on the filesystem, and additionally some virtual folders 
for Music, Pictures, Video and Playlists, with further sub-divisions under these, for instance by publication 
year. These containers are added to the media cache via instances of the 
<classname>RygelMediaExportNullContainer</classname> class, but that is just to simplify the media cache API 
and these instances then serve no further purpose. The virtual folders are re-added whenever the filesystem's 
container is updated, so that they can show the updated
 content, though that is not particularly efficient.</para>
 
 <para><classname>RygelMediaExportRootContainer</classname> then delegates its 
<classname>RygelMediaContainer</classname> virtual function implementations to this media cache, which in 
turn uses the <classname>RygelMediaExportObjectFactory</classname> to instantiate new containers for each 
request based on their ID. For instance, it returns a <classname>RygelMediaExportDBContainer</classname> if 
the requested ID indicates a virtual container, using the definition in the rest of the ID to build a 
suitable SQL query.</para>
diff --git a/doc/reference/librygel-server/gtkdoc/implementing-servers.xml 
b/doc/reference/librygel-server/gtkdoc/implementing-servers.xml
index ca9171c9..3b08007b 100644
--- a/doc/reference/librygel-server/gtkdoc/implementing-servers.xml
+++ b/doc/reference/librygel-server/gtkdoc/implementing-servers.xml
@@ -14,7 +14,7 @@
 This library may be used to create UPnP or DLNA servers via its <link 
linkend="RygelMediaServer">RygelMediaServer</link> class.
 </para>
 
-<para>The <link linkend="RygelMediaServer">RygelMediaServer</link> reference documentation 
+<para>The <link linkend="RygelMediaServer">RygelMediaServer</link> reference documentation
 and this example explains how to implement a server.
 </para>
 
@@ -25,13 +25,13 @@ and this example explains how to implement a server.
 
 <!-- TODO: Find a way to mention this C example code in the RygelMediaServer valadoc comments instead. -->
 <para>
-This example program shows how to fill a container with media items and then instantiate a server to serve 
+This example program shows how to fill a container with media items and then instantiate a server to serve
 them.
 </para>
 
 <!-- Do not indent the xi:include node. That puts spaces at the start of the code. -->
-<programlisting role="C">
-<xi:include  href="../../../../examples/standalone-server.c"
+<programlisting languae="C">
+  <xi:include  href="@EXAMPLEDIR@/standalone-server.c"
     parse="text"
     xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </programlisting>
diff --git a/doc/reference/librygel-server/meson.build b/doc/reference/librygel-server/meson.build
index d0bf4bf7..390e575a 100644
--- a/doc/reference/librygel-server/meson.build
+++ b/doc/reference/librygel-server/meson.build
@@ -28,13 +28,13 @@ custom_target('valadoc-server',
     [
         valadoc,
         server_doc_common_args,
-        '-o', 'valadoc',
         server_sources
     ]
 )
 
 if gtkdoc.found()
-custom_target('gtkdoc-server',
+subdir('gtkdoc')
+gtkdoc_server_target = custom_target('gtkdoc-server',
     input: server_sources,
     output: 'gtkdoc',
     depends : server_lib,
@@ -44,7 +44,6 @@ custom_target('gtkdoc-server',
         valadoc,
         server_doc_common_args,
         '--doclet', 'gtkdoc',
-        '-o', 'gtkdoc',
         '-X', join_paths(meson.build_root(), 'src/librygel-server/rygel-server.h'),
         '-X', '-l',
         '-X', join_paths(meson.build_root(), 'src/librygel-server/librygel-server-2.6.so'),
@@ -54,9 +53,8 @@ custom_target('gtkdoc-server',
     ]
 )
 if get_option('api-docs')
-    install_subdir('gtkdoc/html',
-                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-server'),
-                   strip_directory : true)
+    meson.add_install_script(install_doc, gtkdoc_server_target,
+                   join_paths(get_option('datadir'), 'gtk-doc/html/librygel-server'))
 endif
 endif
 endif
diff --git a/meson.build b/meson.build
index 4aa683d6..48301dce 100644
--- a/meson.build
+++ b/meson.build
@@ -1,4 +1,4 @@
-project('rygel', 'vala', 'c', version : '0.40.0', meson_version : '>= 0.50.0')
+project('rygel', 'vala', 'c', version : '0.40.0', meson_version : '>= 0.55.0')
 vala = meson.get_compiler('vala')
 
 # Check for the required vala version
@@ -9,6 +9,8 @@ if not vala_version_found.version_compare(vala_version_required)
     error('Found Vala version @0@, need @1@'.format(vala_version_found, vala_version_required))
 endif
 
+install_doc = find_program('build-aux/meson/install-gtkdoc.py')
+
 i18n = import('i18n')
 gnome = import('gnome')
 
@@ -60,6 +62,7 @@ conf.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('locale
 conf.set_quoted('MX_EXTRACT_PATH', join_paths(rygel_libexecdir, 'mx-extract'))
 conf.set_quoted('DESKTOP_DIR', join_paths(get_option('prefix'), get_option('datadir'), 'applications'))
 conf.set_quoted('VERSION', meson.project_version())
+conf.set('EXAMPLEDIR', join_paths(meson.current_source_dir(), 'examples'))
 config_include = include_directories('.')
 
 add_global_arguments(['-include','config.h'], language : 'c')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]