[mm-common] Subprojects can use meson.add_dist_script() if meson.version() >= 0.58.0



commit f3a8d231863319ba8b221ca471175a040afef64b
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Wed May 5 11:53:54 2021 +0200

    Subprojects can use meson.add_dist_script() if meson.version() >= 0.58.0
    
    * meson.build:
    * skeletonmm/doc/reference/meson.build:
    * skeletonmm/meson.build:
    * skeletonmm/skeleton/skeletonmm/meson.build:
    Call add_dist_script() in a subproject, if meson.version() >= 0.58.0.
    * util/build_scripts/dist-build-scripts.py:
    * util/build_scripts/dist-changelog.py:
    * util/build_scripts/doc-reference.py:
    * util/build_scripts/generate-binding.py:
    * util/meson_aux/extra-dist-cmd.py:
    Use MESON_PROJECT_DIST_ROOT if it exists, else MESON_DIST_ROOT.
    It exists if meson.version() >= 0.58.0.

 meson.build                                |  5 +++--
 skeletonmm/doc/reference/meson.build       |  5 ++---
 skeletonmm/meson.build                     |  8 +++++---
 skeletonmm/skeleton/skeletonmm/meson.build |  5 ++---
 util/build_scripts/dist-build-scripts.py   | 19 ++++++++++---------
 util/build_scripts/dist-changelog.py       |  4 +++-
 util/build_scripts/doc-reference.py        |  7 +++++--
 util/build_scripts/generate-binding.py     |  7 +++++--
 util/meson_aux/extra-dist-cmd.py           |  6 ++++--
 9 files changed, 39 insertions(+), 27 deletions(-)
---
diff --git a/meson.build b/meson.build
index 3f91718..cb690f7 100644
--- a/meson.build
+++ b/meson.build
@@ -343,8 +343,9 @@ custom_target('libstdc++.tag',
   install: true
 )
 
-if not meson.is_subproject()
-  # Modify the contents of the distribution directory. (not allowed in a subproject)
+if not meson.is_subproject() or meson.version().version_compare('>= 0.58.0')
+  # Modify the contents of the distribution directory.
+  # (not allowed in a subproject if meson.version() < 0.58.0)
   meson.add_dist_script(
     python3.path(),
     script_dir / 'extra-dist-cmd.py',
diff --git a/skeletonmm/doc/reference/meson.build b/skeletonmm/doc/reference/meson.build
index 23662fa..a1ee30c 100644
--- a/skeletonmm/doc/reference/meson.build
+++ b/skeletonmm/doc/reference/meson.build
@@ -2,7 +2,7 @@
 
 # Input: built_files_root, project_source_root, skeletonmm_pcname, python3,
 #        hg_ccg_basenames, extra_h_files, built_h_file_targets, install_datadir,
-#        doc_reference
+#        doc_reference, can_add_dist_script
 # Output: install_docdir, install_devhelpdir
 
 tag_file_modules = [
@@ -139,9 +139,8 @@ meson.add_install_script(
   docinstall_flags
 )
 
-if not meson.is_subproject()
+if can_add_dist_script
   # Distribute built files and files copied by mm-common-prepare.
-  # (add_dist_script() is not allowed in a subproject)
   meson.add_dist_script(
     python3.path(), doc_reference, 'dist_doc',
     doctool_dir,
diff --git a/skeletonmm/meson.build b/skeletonmm/meson.build
index 7190ada..982a4b1 100644
--- a/skeletonmm/meson.build
+++ b/skeletonmm/meson.build
@@ -161,21 +161,23 @@ endif
 warning_flags = cpp_compiler.get_supported_arguments(warning_flags)
 add_project_arguments(warning_flags, language: 'cpp')
 
+# add_dist_script() is not allowed in a subproject if meson.version() < 0.58.0.
+can_add_dist_script = not meson.is_subproject() or meson.version().version_compare('>= 0.58.0')
+
 subdir('tools/extra_defs_gen')
 subdir('skeleton')
 subdir('examples')
 subdir('tests')
 subdir('doc/reference')
 
-if not meson.is_subproject()
+if can_add_dist_script
   # Add a ChangeLog file to the distribution directory.
-  # (add_dist_script() is not allowed in a subproject)
   meson.add_dist_script(
     python3.path(), dist_changelog,
     project_source_root,
   )
   # Add build scripts to the distribution directory, and delete .gitignore
-  # files and an empty $MESON_DIST_ROOT/build/ directory.
+  # files and an empty $MESON_PROJECT_DIST_ROOT/build/ directory.
   meson.add_dist_script(
     python3.path(), dist_build_scripts,
     project_source_root,
diff --git a/skeletonmm/skeleton/skeletonmm/meson.build b/skeletonmm/skeleton/skeletonmm/meson.build
index 2a424a7..8e41ba5 100644
--- a/skeletonmm/skeleton/skeletonmm/meson.build
+++ b/skeletonmm/skeleton/skeletonmm/meson.build
@@ -2,7 +2,7 @@
 
 # Input: skeletonmm_build_dep, skeletonmm_pcname, maintainer_mode, project_source_root,
 #        generate_binding, m4_files, skeletonmm_libversion, install_includedir,
-#        macos_darwin_versions, python3
+#        macos_darwin_versions, python3, can_add_dist_script
 # Output: hg_ccg_basenames, extra_h_files, built_h_file_targets, built_files_root,
 #         skeletonmm_dep
 
@@ -159,9 +159,8 @@ meson.add_install_script(
   hg_ccg_basenames
 )
 
-if not meson.is_subproject()
+if can_add_dist_script
   # Distribute built files.
-  # (add_dist_script() is not allowed in a subproject)
   meson.add_dist_script(
     python3.path(), generate_binding, 'dist_built_files',
     built_h_cc_dir,
diff --git a/util/build_scripts/dist-build-scripts.py b/util/build_scripts/dist-build-scripts.py
index 31aca50..a366a39 100755
--- a/util/build_scripts/dist-build-scripts.py
+++ b/util/build_scripts/dist-build-scripts.py
@@ -6,16 +6,17 @@
 # dist-build-scripts.py <root_src_dir> <script_dir> <no_dist>...
 
 # <script_dir> The directory with the build scripts, relative to <root_source_dir>.
-# <no_dist> Zero or more names (relative to MESON_DIST_ROOT) of files and
-#           directories that shall not be distributed.
+# <no_dist> Zero or more names (relative to MESON_PROJECT_DIST_ROOT)
+#           of files and directories that shall not be distributed.
 
 import os
 import sys
 import shutil
 
-dist_root = os.getenv('MESON_DIST_ROOT')
+# MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
 src_script_dir = os.path.join(sys.argv[1], sys.argv[2])
-dist_script_dir = os.path.join(dist_root, sys.argv[2])
+dist_script_dir = os.path.join(project_dist_root, sys.argv[2])
 
 # Create the distribution script directory, if it does not exist.
 os.makedirs(dist_script_dir, exist_ok=True)
@@ -32,12 +33,12 @@ for file in files:
   shutil.copy(os.path.join(src_script_dir, file), dist_script_dir)
 
 # Don't distribute .gitignore files.
-for dirpath, dirnames, filenames in os.walk(dist_root):
+for dirpath, dirnames, filenames in os.walk(project_dist_root):
   if '.gitignore' in filenames:
     os.remove(os.path.join(dirpath, '.gitignore'))
 
-# Remove an empty MESON_DIST_ROOT/build directory.
-dist_build_dir = os.path.join(dist_root, 'build')
+# Remove an empty MESON_PROJECT_DIST_ROOT/build directory.
+dist_build_dir = os.path.join(project_dist_root, 'build')
 if os.path.isdir(dist_build_dir):
   try:
     os.rmdir(dist_build_dir)
@@ -45,9 +46,9 @@ if os.path.isdir(dist_build_dir):
     # Ignore the error, if not empty.
     pass
 
-# Remove specified files and directories from the MESON_DIST_ROOT directory.
+# Remove specified files and directories from the MESON_PROJECT_DIST_ROOT directory.
 for rel_path in sys.argv[3:]:
-  abs_path = os.path.join(dist_root, rel_path)
+  abs_path = os.path.join(project_dist_root, rel_path)
   if os.path.isfile(abs_path):
     os.remove(abs_path)
   elif os.path.isdir(abs_path):
diff --git a/util/build_scripts/dist-changelog.py b/util/build_scripts/dist-changelog.py
index 4a11a5f..5eecb1a 100755
--- a/util/build_scripts/dist-changelog.py
+++ b/util/build_scripts/dist-changelog.py
@@ -20,5 +20,7 @@ cmd = [
   '--max-count=200',
   '--pretty=tformat:%cd  %an  <%ae>%n%n  %s%n%w(0,0,2)%+b',
 ]
-with open(os.path.join(os.getenv('MESON_DIST_ROOT'), 'ChangeLog'), mode='w') as logfile:
+# MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
+with open(os.path.join(project_dist_root, 'ChangeLog'), mode='w') as logfile:
   sys.exit(subprocess.run(cmd, stdout=logfile).returncode)
diff --git a/util/build_scripts/doc-reference.py b/util/build_scripts/doc-reference.py
index c9a3a80..9769688 100755
--- a/util/build_scripts/doc-reference.py
+++ b/util/build_scripts/doc-reference.py
@@ -142,10 +142,13 @@ def dist_doc():
   #      argv[3]              argv[4]       argv[5]     argv[6]
   # <doctool_dist_dir> <doc_ref_build_dir> <tagfile> <devhelpfile>
 
-  # <doctool_dist_dir> is a distribution directory, relative to MESON_DIST_ROOT.
+  # <doctool_dist_dir> is a distribution directory, relative to MESON_PROJECT_DIST_ROOT.
   # <doc_ref_build_dir> is a relative or absolute path in the build directory.
   # <tagfile> and <devhelpfile> are relative or absolute paths in the build directory.
-  doctool_dist_dir = os.path.join(os.getenv('MESON_DIST_ROOT'), sys.argv[3])
+
+  # MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+  project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
+  doctool_dist_dir = os.path.join(project_dist_root, sys.argv[3])
   doc_ref_build_dir = sys.argv[4]
   tagfile = sys.argv[5]
   devhelpfile = sys.argv[6]
diff --git a/util/build_scripts/generate-binding.py b/util/build_scripts/generate-binding.py
index c88bc5c..6d719ff 100755
--- a/util/build_scripts/generate-binding.py
+++ b/util/build_scripts/generate-binding.py
@@ -117,9 +117,12 @@ def dist_built_files():
   # <built_h_cc_dir> <dist_dir> <basefilenames>...
 
   # <built_h_cc_dir> is an absolute path in the build directory or source directory.
-  # <dist_dir> is a distribution directory, relative to MESON_DIST_ROOT.
+  # <dist_dir> is a distribution directory, relative to MESON_PROJECT_DIST_ROOT.
+
+  # MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+  project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
   built_h_cc_dir = sys.argv[2]
-  dist_dir = os.path.join(os.getenv('MESON_DIST_ROOT'), sys.argv[3])
+  dist_dir = os.path.join(project_dist_root, sys.argv[3])
 
   # Create the distribution directory, if it does not exist.
   os.makedirs(os.path.join(dist_dir, 'private'), exist_ok=True)
diff --git a/util/meson_aux/extra-dist-cmd.py b/util/meson_aux/extra-dist-cmd.py
index 484f4e9..ff2c230 100755
--- a/util/meson_aux/extra-dist-cmd.py
+++ b/util/meson_aux/extra-dist-cmd.py
@@ -27,12 +27,14 @@ cmd = [
   '--max-count=200',
   '--pretty=tformat:%cd  %an  <%ae>%n%n  %s%n%w(0,0,2)%+b',
 ]
-with open(os.path.join(os.getenv('MESON_DIST_ROOT'), 'ChangeLog'), mode='w') as logfile:
+# MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
+with open(os.path.join(project_dist_root, 'ChangeLog'), mode='w') as logfile:
   result = subprocess.run(cmd, stdout=logfile)
 
 # Distribute the libstdc++.tag file in addition to the files in the local git clone.
 # shutil.copy2() copies timestamps and some other file metadata.
 shutil.copy2(os.path.join(root_build_dir, 'libstdc++.tag'),
-             os.path.join(os.getenv('MESON_DIST_ROOT'), 'doctags'))
+             os.path.join(project_dist_root, 'doctags'))
 
 sys.exit(result.returncode)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]