diff --git a/devel-docs/g-ir-docs/meson.build b/devel-docs/g-ir-docs/meson.build new file mode 100644 index 0000000000000000000000000000000000000000..d54f0af0d93344415d4f277c41436abe902c588a --- /dev/null +++ b/devel-docs/g-ir-docs/meson.build @@ -0,0 +1,110 @@ +if gir_doc_tool.found() and yelp_build.found() + + # XXX meson does not allow building into subdir: + # https://github.com/mesonbuild/meson/issues/2320 + # Otherwise I could use '-o', '@OUTDIR@' into following commands if + # the `output` was subdir-able. + gir_docs_dir = custom_target('g-ir-docs-dir', + depends: [ libgimp_gir, libgimpui_gir ], + input: [ ], + output: [ 'html-dirs' ], + command: [ + 'mkdir', '-p', + '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version, + '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version + ], + build_by_default: false) + + # XXX `output` is bogus. g-ir-doc-tool produces a lot of output, + # basically one page per public symbol, which is more than 1000 so + # it's not usable. Since custom_target() requires an 'output', I could + # just set one output such as 'index.page` as a trick, but since we + # have another issue on subdir anyway (cf. above), I use some bogus + # file instead. The fact the bogus file is not even created does not + # even seem to be a problem for meson. + # Moreover I realized that the targets listed by ninja are only the + # output files (not the target name), so I basically ends up using + # this field to create understandable names). + gir_docs_python = custom_target('g-ir-Gimp-python-pages', + depends: [ gir_docs_dir, libgimp_gir ], + input: [ libgimp_gir[0] ], + output: [ 'Gimp-python-pages' ], + command: [ + gir_doc_tool, + '-I', prefix / 'share/gir-1.0/', + '-I', meson.build_root() / 'libgimp', + '--language=Python', + '-o', '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version, + '@INPUT@' + ], + build_by_default: false) + + ## Gimp Module ## + + gir_cache_python = custom_target('g-ir-Gimp-python-cache', + input: [ gir_docs_python ], + output: [ 'Gimp-python-cache' ], + command: [ + yelp_build, 'cache', + '-o', '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version + '/index.cache', + '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version, + ], + build_by_default: false) + + gir_html_python = custom_target('g-ir-Gimp-python-html', + input: [ gir_cache_python ], + output: [ 'Gimp-python-html' ], + # TODO: `output` needs to be complete for installation to work. So + # we need to figure out how to install the generated files (listing + # all of them is a crazy idea, but maybe we can generate the + # expected list somehow? Maybe even using the .def file which is + # already an exhaustive listing would be a good idea? + # Also where should we install exactly? + #install_dir: prefix / gimpdatadir / 'g-ir-docs/html/Python/Gimp', + #install: true, + command: [ + 'yelp-build', 'html', + '-o', '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version, + '@OUTDIR@' + '/html/Python/Gimp-' + gimp_api_version, + ]) + + ## GimpUi module ## + + gir_docs_python = custom_target('g-ir-GimpUi-python-pages', + depends: [ gir_docs_dir, libgimpui_gir ], + input: [ libgimpui_gir[0] ], + output: [ 'GimpUi-python-pages' ], + command: [ + gir_doc_tool, + '-I', prefix / 'share/gir-1.0/', + '-I', meson.build_root() / 'libgimp', + '--language=Python', + '-o', '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version, + '@INPUT@' + ], + build_by_default: false) + + gir_cache_python = custom_target('g-ir-GimpUi-python-cache', + input: [ gir_docs_python ], + output: [ 'GimpUi-python-cache' ], + command: [ + yelp_build, 'cache', + '-o', '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version + '/index.cache', + '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version, + ], + build_by_default: false) + + gir_html_python = custom_target('g-ir-GimpUi-python-html', + input: [ gir_cache_python ], + output: [ 'GimpUi-python-html' ], + #install_dir: prefix / gimpdatadir / 'g-ir-docs/html/Python/GimpUi', + #install: true, + command: [ + 'yelp-build', 'html', + '-o', '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version, + '@OUTDIR@' + '/html/Python/GimpUi-' + gimp_api_version, + ]) + + ## TODO: a unit test using yelp-check would be useful. + +endif diff --git a/devel-docs/meson.build b/devel-docs/meson.build index 1cf1b94b39a7b897f214ddcc1ba0331e1cfb5022..f6d944291ddd153cb10aa5eea774478407deb230 100644 --- a/devel-docs/meson.build +++ b/devel-docs/meson.build @@ -30,3 +30,4 @@ subdir('libgimpmodule') subdir('libgimpthumb') subdir('libgimpwidgets') subdir('tools') +subdir('g-ir-docs') diff --git a/meson.build b/meson.build index e0e6598e6decb49afb4fb2c62bfc8e0264ff2421..ce635ce858b9d077a1248c169496dac5a084b0c9 100644 --- a/meson.build +++ b/meson.build @@ -1014,6 +1014,9 @@ appstream_util = find_program('appstream-util', required: get_option('appdata-te # Check for doc generation tools have_gtk_doc = get_option('gtk-doc') +gir_doc_tool = find_program('g-ir-doc-tool', required: false) +yelp_build = find_program('yelp-build', required: false) + # Check for vector icons have_vector_icons = get_option('vec-icons') if have_vector_icons