From d9533d4e5fde228b985ac15764241fb76d231713 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 13 Jan 2020 18:48:50 +0100 Subject: skeletonmm Meson build: Improve internal dependencies * skeletonmm/doc/reference/meson.build: Less difference between maintainer-mode and not maintainer-mode. * keletonmm/skeleton/skeletonmm/meson.build: Make separate lists of built .h files and built .cc files. --- skeletonmm/doc/reference/meson.build | 54 +++++++++++++----------------- skeletonmm/skeleton/skeletonmm/meson.build | 24 +++++++------ 2 files changed, 38 insertions(+), 40 deletions(-) (limited to 'skeletonmm') diff --git a/skeletonmm/doc/reference/meson.build b/skeletonmm/doc/reference/meson.build index 7344252..1ff7194 100644 --- a/skeletonmm/doc/reference/meson.build +++ b/skeletonmm/doc/reference/meson.build @@ -1,7 +1,7 @@ # doc/reference # Input: built_files_root, project_source_root, skeletonmm_pcname, perl, -# hg_ccg_basenames, extra_h_files, built_file_targets, install_datadir, +# hg_ccg_basenames, extra_h_files, built_h_file_targets, install_datadir, # dist_cmd, python3 # Output: install_docdir, install_devhelpdir @@ -81,40 +81,34 @@ src_h_files += project_source_root / 'skeleton' / 'skeletonmm.h' doctool_dir = project_source_root / 'untracked' / 'doc' # MMDOCTOOLDIR doctool_dist_dir = 'untracked' / 'doc' # Relative to MESON_DIST_ROOT -if built_file_targets.length() > 0 +doc_h_files = src_h_files +if built_h_file_targets.length() > 0 # .h files have been generated from .hg files (maintainer mode). - tag_file = custom_target('html_and_tag', - input: src_h_files, - output: book_name + '.tag', - command: [ - python3, doc_reference, 'doxygen', - doctool_dir, - '@OUTPUT@', - built_h_files, - '@INPUT@', - ], - build_by_default: build_documentation, - depends: built_file_targets, - install: true, - install_dir: install_reference_docdir, - ) + # Use built_h_file_targets instead of built_h_files here, or else Meson won't + # know that Doxygen must not be executed until the .h files have been built. + doc_h_files += built_h_file_targets else # All .h files are stored in the source tree (not maintainer mode). - tag_file = custom_target('html_and_tag', - input: src_h_files + built_h_files, - output: book_name + '.tag', - command: [ - python3, doc_reference, 'doxygen', - doctool_dir, - '@OUTPUT@', - '@INPUT@', - ], - build_by_default: build_documentation, - install: true, - install_dir: install_reference_docdir, - ) + doc_h_files += built_h_files endif +# Can't use @INPUT@ in the command. It requires absolute file paths. +# Paths in built_h_file_targets are relative to project_build_root. +tag_file = custom_target('html_and_tag', + input: doc_h_files, + output: book_name + '.tag', + command: [ + python3, doc_reference, 'doxygen', + doctool_dir, + '@OUTPUT@', + src_h_files, + built_h_files, + ], + build_by_default: build_documentation, + install: true, + install_dir: install_reference_docdir, +) + devhelp_file = custom_target('devhelp', input: tag_file, output: book_name + '.devhelp2', diff --git a/skeletonmm/skeleton/skeletonmm/meson.build b/skeletonmm/skeleton/skeletonmm/meson.build index ae36c58..89e9373 100644 --- a/skeletonmm/skeleton/skeletonmm/meson.build +++ b/skeletonmm/skeleton/skeletonmm/meson.build @@ -3,7 +3,7 @@ # Input: skeletonmm_build_dep, skeletonmm_pcname, maintainer_mode, project_source_root, # generate_binding, m4_files, skeletonmm_libversion, install_includedir, # dist_cmd, python3 -# Output: hg_ccg_basenames, extra_h_files, built_file_targets, built_files_root, +# Output: hg_ccg_basenames, extra_h_files, built_h_file_targets, built_files_root, # skeletonmm_dep defs_basefiles = [ @@ -43,6 +43,11 @@ if maintainer_mode # doc/reference/meson.build needs this. built_files_root = project_build_root + built_h_file_targets = [] + + # Force meson+ninja to generate source files before anything is compiled. + # Compilation must depend on these targets. + built_cc_file_targets = [] hg_files = [] foreach file : hg_ccg_basenames @@ -50,7 +55,7 @@ if maintainer_mode endforeach # Create wrap_init.cc in project_build_root/skeleton/skeletonmm. - wrap_init_target = custom_target('wrap_init.cc', + built_cc_file_targets += custom_target('wrap_init.cc', input: hg_files, output: 'wrap_init.cc', command: [ @@ -64,17 +69,13 @@ if maintainer_mode install: false, ) - # Force meson+ninja to generate source files before anything is compiled. - # Compilation must depend on these targets. - built_file_targets = [] - # Create .h/_p.h/.cc files from .hg/.ccg files in project_build_root/skeleton/skeletonmm. foreach file : hg_ccg_basenames hg_file = '..' / 'src' / file + '.hg' ccg_file = '..' / 'src' / file + '.ccg' - built_file_targets += custom_target(file + '.cc', + built_file_target = custom_target(file + '.cc', input: [hg_file, ccg_file], - output: [file + '.stamp', file + '.cc'], + output: [file + '.stamp', file + '.cc', file + '.h'], command: [ python3, generate_binding, 'gmmproc', gmmproc_dir, @@ -87,11 +88,13 @@ if maintainer_mode build_by_default: maintainer_mode, install: false, ) + built_cc_file_targets += built_file_target[1] + built_h_file_targets += built_file_target[2] endforeach extra_include_dirs = ['..'] skeletonmm_library = library(skeletonmm_pcname, - wrap_init_target, built_file_targets, extra_cc_files, + built_cc_file_targets, built_h_file_targets, extra_cc_files, version: skeletonmm_libversion, include_directories: extra_include_dirs, dependencies: skeletonmm_build_dep, @@ -106,8 +109,8 @@ else # not maintainer_mode # project_source_root/untracked/skeleton/skeletonmm. # doc/reference/meson.build needs these. - built_file_targets = [] built_files_root = project_source_root / 'untracked' + built_h_file_targets = [] # Two cases: # 1. The source code comes from a tarball, where the built files @@ -166,6 +169,7 @@ endif # This is useful in the main project when skeletonmm is used as a subproject. # It's also used when building example programs and test programs. skeletonmm_dep = declare_dependency( + sources: built_h_file_targets, link_with: skeletonmm_library, include_directories: extra_include_dirs, dependencies: skeletonmm_build_dep -- cgit v1.2.1