From 9d2db4faf3ba52d186089301cd196caf8ded2c08 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 30 Apr 2025 09:16:43 +0700 Subject: [PATCH] maint(common): consolidate standard.meson.build configuration Use a shared function standard_meson_build to prep the resources/meson.build folder for consistency. A future cleanup would be to use meson-utils.inc.sh for all meson build scripts. --- core/build.sh | 10 ++---- developer/src/kmcmplib/build.sh | 14 +++----- linux/ibus-keyman/build.sh | 9 ++--- linux/keyman-system-service/build.sh | 10 +++--- resources/build/meson-utils.inc.sh | 8 ++--- resources/build/meson/standard.meson.build | 11 ++---- .../build/meson/standard_meson_build.inc.sh | 35 +++++++++++++++++++ 7 files changed, 56 insertions(+), 41 deletions(-) create mode 100644 resources/build/meson/standard_meson_build.inc.sh diff --git a/core/build.sh b/core/build.sh index 0efb56c9c7..291bb750b8 100755 --- a/core/build.sh +++ b/core/build.sh @@ -115,14 +115,10 @@ builder_describe_outputs \ build:arch /core/build/arch/$BUILDER_CONFIGURATION/src/libkeymancore.a \ build:wasm /core/build/wasm/$BUILDER_CONFIGURATION/src/libkeymancore.a -# Import our standard compiler defines; this is copied from -# /resources/build/meson/standard.meson.build by build.sh, because meson doesn't -# allow us to reference a file outside its root if builder_has_action configure; then - mkdir -p "$THIS_SCRIPT_PATH/resources" - cp "$KEYMAN_ROOT/resources/build/meson/standard.meson.build" "$THIS_SCRIPT_PATH/resources/meson.build" - # Write our tagged version environment variable into a file so meson can read it - echo "$VERSION_WITH_TAG" > "$THIS_SCRIPT_PATH/resources/VERSION_WITH_TAG.md" + # Import our standard compiler defines + source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" + standard_meson_build fi # Iterate through all possible targets; note that targets that cannot be built diff --git a/developer/src/kmcmplib/build.sh b/developer/src/kmcmplib/build.sh index 8a488cb4ae..77036cc990 100755 --- a/developer/src/kmcmplib/build.sh +++ b/developer/src/kmcmplib/build.sh @@ -92,14 +92,10 @@ fi do_action clean # Note, we have a 'global' configure and also a per-arch configure -if builder_start_action configure; then - # Import our standard compiler defines; this is copied from - # /resources/build/meson/standard.meson.build by build.sh, because meson doesn't - # allow us to reference a file outside its root - mkdir -p "$THIS_SCRIPT_PATH/resources" - cp "$KEYMAN_ROOT/resources/build/meson/standard.meson.build" "$THIS_SCRIPT_PATH/resources/meson.build" - # Write our tagged version environment variable into a file so meson can read it - echo "$VERSION_WITH_TAG" > "$THIS_SCRIPT_PATH/resources/VERSION_WITH_TAG.md" +if builder_has_action configure; then + # Import our standard compiler defines + source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" + standard_meson_build # We have to checkout the keyboards repo in a 'configure' action because # otherwise meson will not get the right list of keyboard source files, @@ -107,8 +103,6 @@ if builder_start_action configure; then if should_do_full_test; then checkout_keyboards fi - - builder_finish_action success configure fi do_action configure diff --git a/linux/ibus-keyman/build.sh b/linux/ibus-keyman/build.sh index 231e9039ea..d21c52c2ae 100755 --- a/linux/ibus-keyman/build.sh +++ b/linux/ibus-keyman/build.sh @@ -45,13 +45,10 @@ else MESON_COVERAGE= fi -# Import our standard compiler defines; this is copied from -# /resources/build/meson/standard.meson.build by build.sh, because meson doesn't -# allow us to reference a file outside its root. ${THIS_SCRIPT_PATH}/meson.build -# then includes `resources` as a subdir. if builder_has_action configure; then - mkdir -p "${THIS_SCRIPT_PATH}/resources" - cp "${KEYMAN_ROOT}/resources/build/meson/standard.meson.build" "${THIS_SCRIPT_PATH}/resources/meson.build" + # Import our standard compiler defines + source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" + standard_meson_build fi configure_action() { diff --git a/linux/keyman-system-service/build.sh b/linux/keyman-system-service/build.sh index c9507726f4..cb66486f01 100755 --- a/linux/keyman-system-service/build.sh +++ b/linux/keyman-system-service/build.sh @@ -23,12 +23,12 @@ builder_describe \ builder_parse "$@" -# Import our standard compiler defines; this is copied from -# /resources/build/meson/standard.meson.build by build.sh, because meson doesn't -# allow us to reference a file outside its root. ${THIS_SCRIPT_PATH}/meson.build -# then includes `resources` as a subdir. if builder_has_action configure; then - cp "${KEYMAN_ROOT}/resources/build/meson/standard.meson.build" "${THIS_SCRIPT_PATH}/resources/meson.build" + # Import our standard compiler defines + source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" + standard_meson_build + + # TODO: it would be cleaner to split this from the standard.meson.build file/folder cat "${THIS_SCRIPT_PATH}/resources/meson.build.in" >> "${THIS_SCRIPT_PATH}/resources/meson.build" fi diff --git a/resources/build/meson-utils.inc.sh b/resources/build/meson-utils.inc.sh index 24375a840a..271e017ea7 100644 --- a/resources/build/meson-utils.inc.sh +++ b/resources/build/meson-utils.inc.sh @@ -2,6 +2,7 @@ # This script contains common meson functions +source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" # ---------------------------------------------------------------------------- # clean @@ -17,11 +18,8 @@ do_meson_clean() { # ---------------------------------------------------------------------------- do_meson_configure() { - # Import our standard compiler defines; this is copied from - # /resources/build/meson/standard.meson.build by build.sh, because meson doesn't - # allow us to reference a file outside its root - mkdir -p "$THIS_SCRIPT_PATH/resources" - cp "$KEYMAN_ROOT/resources/build/meson/standard.meson.build" "$THIS_SCRIPT_PATH/resources/meson.build" + # Import our standard compiler defines + standard_meson_build pushd "$THIS_SCRIPT_PATH" > /dev/null # Additional arguments are used by Linux build, e.g. -Dprefix=${INSTALLDIR} diff --git a/resources/build/meson/standard.meson.build b/resources/build/meson/standard.meson.build index 531e7c78db..0bf48f9e9c 100644 --- a/resources/build/meson/standard.meson.build +++ b/resources/build/meson/standard.meson.build @@ -5,15 +5,10 @@ # and is copied into each project's /resources/meson.build in the # configure step, so that it can be referenced by meson directly. # -# Standard code block for copying this file into a meson project: +# Use standard_meson_build.inc.sh to make the file copy # -# # Import our standard compiler defines; this is copied from -# # /resources/build/meson/standard.meson.build by build.sh, because meson doesn't -# # allow us to reference a file outside its root -# mkdir -p "$THIS_SCRIPT_PATH/resources" -# cp "$KEYMAN_ROOT/resources/build/meson/standard.meson.build" "$THIS_SCRIPT_PATH/resources/meson.build" -# # Write our tagged version environment variable into a file so meson can read it -# echo "$VERSION_WITH_TAG" > "$THIS_SCRIPT_PATH/resources/VERSION_WITH_TAG.md" + + # # Where possible, we want to use these flags everywhere # diff --git a/resources/build/meson/standard_meson_build.inc.sh b/resources/build/meson/standard_meson_build.inc.sh new file mode 100644 index 0000000000..39fd49de05 --- /dev/null +++ b/resources/build/meson/standard_meson_build.inc.sh @@ -0,0 +1,35 @@ +# +# Keyman is copyright (C) SIL Global. MIT License. +# +# Created by mcdurdin on 2025-04-30 +# +# This import script helps us setup a consistent meson environment across all +# our build scripts. It will generate two files in the calling scripts +# resources/ folder (which should be git-ignored): +# +# * resources/meson.build - a copy of standard.meson.build from this folder +# * resources/VERSION_WITH_TAG.md - the value of the env var $VERSION_WITH_TAG +# +# We do this because meson doesn't allow us to: +# +# * reference a file outside the project root, or +# * read environment variables +# +# Sample of normal usage: +# +# if builder_has_action configure; then +# # Import our standard compiler defines +# source "$KEYMAN_ROOT/resources/build/meson/standard_meson_build.inc.sh" +# standard_meson_build +# fi +# +# ${THIS_SCRIPT_PATH}/meson.build then includes `resources` as a subdir: +# +# subdir('resources') +# + +standard_meson_build() { + mkdir -p "$THIS_SCRIPT_PATH/resources" + cp "$KEYMAN_ROOT/resources/build/meson/standard.meson.build" "$THIS_SCRIPT_PATH/resources/meson.build" + echo "$VERSION_WITH_TAG" > "$THIS_SCRIPT_PATH/resources/VERSION_WITH_TAG.md" +}