diff options
Diffstat (limited to 'skeletonmm/skeleton/skeletonmm/meson.build')
-rw-r--r-- | skeletonmm/skeleton/skeletonmm/meson.build | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/skeletonmm/skeleton/skeletonmm/meson.build b/skeletonmm/skeleton/skeletonmm/meson.build new file mode 100644 index 0000000..ae36c58 --- /dev/null +++ b/skeletonmm/skeleton/skeletonmm/meson.build @@ -0,0 +1,172 @@ +# skeleton/skeletonmm + +# 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, +# skeletonmm_dep + +defs_basefiles = [ + 'skeleton.defs', + 'skeleton_methods.defs', + 'skeleton_enums.defs', + 'skeleton_signals.defs', + 'skeleton_vfuncs.defs', + 'skeleton_docs.xml', +] + +defs_files = [] +foreach file : defs_basefiles + defs_files += '..' / 'src' / file +endforeach + +hg_ccg_basenames = [ + 'skeleton', +] + +extra_cc_files = [ +] + +extra_h_files = [ + 'wrap_init.h', +] + +install_headers('..' / 'skeletonmm.h', subdir: skeletonmm_pcname) +install_headers(extra_h_files, subdir: skeletonmm_pcname / 'skeletonmm') + +untracked_skeletonmm = 'untracked' / 'skeleton' / 'skeletonmm' +src_untracked_skeletonmm = project_source_root / untracked_skeletonmm + +if maintainer_mode + + # Maintainer mode. Generate .h and .cc files from .hg and .ccg files in ../src. + + # doc/reference/meson.build needs this. + built_files_root = project_build_root + + hg_files = [] + foreach file : hg_ccg_basenames + hg_files += '..' / 'src' / file + '.hg' + endforeach + + # Create wrap_init.cc in project_build_root/skeleton/skeletonmm. + wrap_init_target = custom_target('wrap_init.cc', + input: hg_files, + output: 'wrap_init.cc', + command: [ + python3, generate_binding, 'generate_wrap_init', + gmmproc_dir, + '@OUTPUT@', + 'Skeleton', # namespace + '@INPUT@', + ], + build_by_default: 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', + input: [hg_file, ccg_file], + output: [file + '.stamp', file + '.cc'], + command: [ + python3, generate_binding, 'gmmproc', + gmmproc_dir, + '@OUTPUT0@', + file, + meson.current_source_dir() / '..' / 'src', + project_source_root / 'tools' / 'm4', + ], + depend_files: defs_files + m4_files, + build_by_default: maintainer_mode, + install: false, + ) + endforeach + + extra_include_dirs = ['..'] + skeletonmm_library = library(skeletonmm_pcname, + wrap_init_target, built_file_targets, extra_cc_files, + version: skeletonmm_libversion, + include_directories: extra_include_dirs, + dependencies: skeletonmm_build_dep, + install: true, + ) + + built_h_cc_dir = meson.current_build_dir() + +else # not maintainer_mode + + # Not maintainer mode. Compile built source code files in + # project_source_root/untracked/skeleton/skeletonmm. + + # doc/reference/meson.build needs these. + built_file_targets = [] + built_files_root = project_source_root / 'untracked' + + # Two cases: + # 1. The source code comes from a tarball, where the built files + # are stored in project_source_root/untracked. + # There are no built files in the build tree. + # 2. Files have been built in the build tree. Then maintainer_mode has + # been changed from true to false. Files that are missing or not up to date + # in project_source_root/untracked are copied from the build tree. + + # Try to copy built source code files to the source tree. + run_command( + python3, generate_binding, 'copy_built_files', + meson.current_build_dir(), + src_untracked_skeletonmm, + hg_ccg_basenames, + ) + + built_cc_files = [ src_untracked_skeletonmm / 'wrap_init.cc' ] + foreach file : hg_ccg_basenames + built_cc_files += src_untracked_skeletonmm / file + '.cc' + endforeach + + extra_include_dirs = [ '..', '..' / '..' / 'untracked' / 'skeleton' ] + skeletonmm_library = library(skeletonmm_pcname, + built_cc_files, extra_cc_files, + version: skeletonmm_libversion, + include_directories: extra_include_dirs, + dependencies: skeletonmm_build_dep, + install: true, + ) + + built_h_cc_dir = src_untracked_skeletonmm + +endif + +# Install built .h and _p.h files. +meson.add_install_script( + python3.path(), generate_binding, 'install_built_h_files', + built_h_cc_dir, + install_includedir / skeletonmm_pcname / 'skeletonmm', # subdir below {prefix} + hg_ccg_basenames +) + +if not meson.is_subproject() + # Distribute built files. + # (add_dist_script() is not allowed in a subproject) + meson.add_dist_script( + python3.path(), dist_cmd, + python3.path(), generate_binding, 'dist_built_files', + built_h_cc_dir, + untracked_skeletonmm, + hg_ccg_basenames, + ) +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( + link_with: skeletonmm_library, + include_directories: extra_include_dirs, + dependencies: skeletonmm_build_dep +) |