summaryrefslogtreecommitdiff
path: root/skeletonmm/skeleton/skeletonmm/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'skeletonmm/skeleton/skeletonmm/meson.build')
-rw-r--r--skeletonmm/skeleton/skeletonmm/meson.build172
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
+)