diff options
author | Sven Eden <yamakuzure@gmx.net> | 2017-07-31 08:28:21 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-08-04 14:34:53 +0200 |
commit | f3dca9e3c3373a5817582d4b583077b8f9358604 (patch) | |
tree | ea76ef30c91cf194ec7b47f59df44d452f26e10b /man/meson.build | |
parent | f3061b4c6efa8275466c56f291eca43d36178213 (diff) |
General: Update build system to upstream support of meson+ninja.
Upstream thinks, that the auto tools are too 'legacy', or that they
are at least no longer fitting.
We follow, as the classic auto tools files have been removed, so no
other choice here...
Diffstat (limited to 'man/meson.build')
-rw-r--r-- | man/meson.build | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/man/meson.build b/man/meson.build new file mode 100644 index 000000000..8fdb512f6 --- /dev/null +++ b/man/meson.build @@ -0,0 +1,218 @@ +# This is lame, I know, but meson has no other include mechanism +subdir('rules') + +want_man = get_option('man') +want_html = get_option('html') +xsltproc = find_program('xsltproc', + required : want_man == 'true' or want_html == 'true') +want_man = want_man != 'false' and xsltproc.found() +want_html = want_html != 'false' and xsltproc.found() + +xsltproc_flags = [ + '--nonet', + '--xinclude', + '--stringparam', 'man.output.quietly', '1', + '--stringparam', 'funcsynopsis.style', 'ansi', + '--stringparam', 'man.authors.section.enabled', '0', + '--stringparam', 'man.copyright.section.enabled', '0', + '--stringparam', 'elogind.version', '@0@'.format(meson.project_version()), + '--path', + '@0@:@1@'.format(meson.current_build_dir(), meson.current_source_dir())] + +custom_man_xsl = files('custom-man.xsl') +custom_html_xsl = files('custom-html.xsl') +xslt_cmd = [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags + +#if 0 /// UNNEEDED by elogind +# custom_entities_ent = configure_file( +# input : 'custom-entities.ent.in', +# output : 'custom-entities.ent', +# configuration : conf) +#endif // 0 + +man_pages = [] +html_pages = [] +source_xml_files = [] +foreach tuple : manpages + stem = tuple[0] + section = tuple[1] + aliases = tuple[2] + condition = tuple[3] + + xml = stem + '.xml' + html = stem + '.html' + man = stem + '.' + section + + manaliases = [] + htmlaliases = [] + foreach alias : aliases + manaliases += [alias + '.' + section] + htmlaliases += [alias + '.html'] + endforeach + + mandirn = join_paths(get_option('mandir'), 'man' + section) + + if condition == '' or conf.get(condition, false) + p1 = custom_target( + man, + input : xml, + output : [man] + manaliases, + command : xslt_cmd + [custom_man_xsl, '@INPUT@'], +#if 0 /// UNNEEDED by elogind +# depend_files : custom_entities_ent, +#endif // 0 + install : want_man, + install_dir : mandirn) + man_pages += [p1] + + p2 = [] + foreach htmlalias : htmlaliases + link = custom_target( + htmlalias, + input : p2, + output : htmlalias, + command : ['ln', '-fs', html, '@OUTPUT@']) + if want_html + dst = join_paths(docdir, 'html', htmlalias) + cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst) + meson.add_install_script('sh', '-c', cmd) + p2 += [link] + endif + html_pages += [link] + endforeach + + p3 = custom_target( + html, + input : xml, + output : html, + command : xslt_cmd + [custom_html_xsl, '@INPUT@'], +#if 0 /// UNNEEDED by elogind +# depend_files : custom_entities_ent, +#endif // 0 + depends : p2, + install : want_html, + install_dir : join_paths(docdir, 'html')) + html_pages += [p3] + + source_xml_files += files(tuple[0] + '.xml') + else + message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition)) + endif +endforeach + +############################################################ + +have_lxml = run_command(xml_helper_py).returncode() == 0 +if not have_lxml + message('python-lxml not available, not making man page indices') +endif + +elogind_directives_xml = custom_target( + 'elogind.directives.xml', + input : source_xml_files, + output : 'elogind.directives.xml', + command : [make_directive_index_py, '@OUTPUT@'] + source_xml_files) + +nonindex_xml_files = source_xml_files + [elogind_directives_xml] +elogind_index_xml = custom_target( + 'elogind.index.xml', + input : nonindex_xml_files, + output : 'elogind.index.xml', + command : [make_man_index_py, '@OUTPUT@'] + nonindex_xml_files) + +foreach tuple : [['elogind.directives', '7', elogind_directives_xml], + ['elogind.index', '7', elogind_index_xml]] + stem = tuple[0] + section = tuple[1] + xml = tuple[2] + + html = stem + '.html' + man = stem + '.' + section + + mandirn = join_paths(get_option('mandir'), 'man' + section) + + p1 = custom_target( + man, + input : xml, + output : man, + command : xslt_cmd + [custom_man_xsl, '@INPUT@'], + install : want_man and have_lxml, + install_dir : mandirn) + man_pages += [p1] + + p2 = [] + if html == 'elogind.index.html' + htmlalias = 'index.html' + link = custom_target( + htmlalias, + input : p2, + output : htmlalias, + command : ['ln', '-fs', html, '@OUTPUT@']) + if want_html + dst = join_paths(docdir, 'html', htmlalias) + cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst) + meson.add_install_script('sh', '-c', cmd) + p2 += [link] + endif + html_pages += [link] + endif + + p3 = custom_target( + html, + input : xml, + output : html, + command : xslt_cmd + [custom_html_xsl, '@INPUT@'], +#if 0 /// UNNEEDED by elogind +# depend_files : custom_entities_ent, +#endif // 0 + depends : p2, + install : want_html and have_lxml, + install_dir : join_paths(docdir, 'html')) + html_pages += [p3] +endforeach + +# cannot use run_target until https://github.com/mesonbuild/meson/issues/1644 is resolved +man = custom_target( + 'man', + output : 'man', + depends : man_pages, + command : ['echo']) + +html = run_target( + 'html', + depends : html_pages, + output : 'html', + command : ['echo']) + +#if 0 /// UNNEEDED in elogind +# run_target( +# 'doc-sync', +# depends : man_pages + html_pages, +# command : ['rsync', '-rlv', +# '--delete-excluded', +# '--include=man', +# '--include=*.html', +# '--exclude=*', +# '--omit-dir-times', +# meson.current_build_dir(), +# get_option('www-target')]) +#endif // 0 + +############################################################ + +if git.found() + run_target( + 'update-man-rules', + # slightly strange syntax because of + # https://github.com/mesonbuild/meson/issues/1643 + # and https://github.com/mesonbuild/meson/issues/1512 + command : ['sh', '-c', + 'cd @0@ && '.format(meson.build_root()) + + 'python3 @0@/tools/make-man-rules.py `git ls-files ":/man/*.xml"` >t && '.format(meson.source_root()) + + 'mv t @0@/rules/meson.build'.format(meson.current_source_dir())], +#if 0 /// UNNEEDED by elogind +# depend_files : custom_entities_ent) +#else + ) +#endif // 0 +endif |