diff options
author | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2021-03-12 16:29:01 +0100 |
---|---|---|
committer | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2021-03-12 16:29:01 +0100 |
commit | 5461f51e1f2e8ba55615c233ca41efa16da04005 (patch) | |
tree | b22ea38bad3fc248afe9ca2806c2163116347631 | |
parent | 62bf2765cf7eea7a74d083a36376f43ab01a5604 (diff) | |
download | mm-common-5461f51e1f2e8ba55615c233ca41efa16da04005.tar.gz |
meson.build: Make it possible to use mm-common as a subproject
If mm-common is a subproject, make mm-common-get2 that can be executed
without being installed. The main project is built before the subprojects
have been installed.
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | meson.build | 47 | ||||
-rwxr-xr-x | util/meson_aux/copy-files.py | 33 |
3 files changed, 80 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 3d8762e..c7511bd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -130,6 +130,7 @@ MAINTAINERCLEANFILES = $(dist_doctags_DATA) EXTRA_DIST = \ meson.build \ meson_options.txt \ + util/meson_aux/copy-files.py \ util/meson_aux/extra-dist-cmd.py \ util/meson_aux/extra-install-cmd.py \ util/meson_aux/libstdcxx-tag.py \ diff --git a/meson.build b/meson.build index b89ea25..3f91718 100644 --- a/meson.build +++ b/meson.build @@ -2,7 +2,7 @@ project('mm-common', version: '1.0.2', - meson_version: '>= 0.50.0', # required for python3.path() + meson_version: '>= 0.54.0', # required for meson.override_dependency() license: 'GPLv2+' ) @@ -205,6 +205,51 @@ configure_file( install_dir: install_man1dir ) +if meson.is_subproject() + # A version of mm-common-get that can be executed uninstalled. + conf_data_subproj = configuration_data() + conf_data_subproj.merge_from(conf_data) + conf_data_subproj.set('configure_input', 'mm-common-get2 (for execution uninstalled). Generated from util/mm-common-get.in') + conf_data_subproj.set('datadir_py', project_build_root) + mm_common_get2 = configure_file( + input: 'util' / 'mm-common-get.in', + output: 'mm-common-get2', + configuration: conf_data_subproj, + install: false, + ) + # Make the uninstalled mm-common-get2 executable. + cmd_py = ''' +import os +import sys +os.chmod(sys.argv[1], 0o755)''' + run_command(python3, '-c', cmd_py, project_build_root / 'mm-common-get2') + + # A main project that looks for mm-common-get shall find mm_common_get2. + meson.override_find_program('mm-common-get', mm_common_get2) + + # Copy files needed by mm-common-get2 from source dir to build dir. + # The directory structure must be the same as in the installation directory. + run_command(python3, script_dir / 'copy-files.py', + project_source_root / 'util' / 'build_scripts', + project_build_root / meson.project_name() / 'build', + meson_build_support_basefiles, + ) + run_command(python3, script_dir / 'copy-files.py', + project_source_root / 'util', + project_build_root / meson.project_name() / 'doctool', + doctool_basefiles, + ) + + mm_common_libstdc_dep = declare_dependency( + variables: { + 'doxytagfile': project_build_root / 'libstdc++.tag', + 'htmlrefpub': 'http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/' + } + ) + # A main project that looks for mm-common-libstdc++.pc shall find mm_common_libstdc_dep. + meson.override_dependency('mm-common-libstdc++', mm_common_libstdc_dep) +endif + # Skeleton project. skeletonmm_basefiles = [ '.gitignore', diff --git a/util/meson_aux/copy-files.py b/util/meson_aux/copy-files.py new file mode 100755 index 0000000..b6963e2 --- /dev/null +++ b/util/meson_aux/copy-files.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +# External command, intended to be called with run_command() in meson.build. + +# argv[1] argv[2] argv[3:] +# copy-files.py <from_dir> <to_dir> <file_names>... + +import os +import sys +import shutil + +# <from_dir> is an absolute or relative path of the directory to copy from. +# <to_dir> is an absolute or relative path of the directory to copy to. +from_dir_root = sys.argv[1] +to_dir_root = sys.argv[2] + +# Copy some files if they exist in from_dir, but not in the destination +# directory, or if they are not up to date in the destination directory. +# (The term "source directory" is avoided here, because from_dir might not +# be what Meson calls a source directory as opposed to a build directory.) + +for file in sys.argv[3:]: + from_file = os.path.join(from_dir_root, file) + to_file = os.path.join(to_dir_root, file) + if os.path.isfile(from_file) and ((not os.path.isfile(to_file)) + or (os.stat(from_file).st_mtime > os.stat(to_file).st_mtime)): + + # Create the destination directory, if it does not exist. + os.makedirs(os.path.dirname(to_file), exist_ok=True) + + # shutil.copy2() copies timestamps and some other file metadata. + shutil.copy2(from_file, to_file) +sys.exit(0) |