From a6807a3fe52e1790d554e059f3a8ae4afb272817 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 09:48:22 +0100 Subject: [PATCH 01/11] Fix gen-version path --- pdns/recursordist/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdns/recursordist/meson.build b/pdns/recursordist/meson.build index 2726012ad6be..bcaa756c27e4 100644 --- a/pdns/recursordist/meson.build +++ b/pdns/recursordist/meson.build @@ -1,7 +1,7 @@ project( 'pdns-recursor', ['c', 'cpp'], - version: run_command('../../builder-support' / 'gen-version', check: true).stdout().strip(), + version: run_command(meson.current_source_dir() / 'builder-support' / 'gen-version', check: true).stdout().strip(), license: 'GPLv2', license_files: 'NOTICE', meson_version: '>= 1.2.1', From 87562142de41c165d9f58f3493bca9d22d578712 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 10:16:48 +0100 Subject: [PATCH 02/11] Add dist script --- pdns/recursordist/meson-dist-script | 4 ++++ pdns/recursordist/meson.build | 3 +++ 2 files changed, 7 insertions(+) create mode 100755 pdns/recursordist/meson-dist-script diff --git a/pdns/recursordist/meson-dist-script b/pdns/recursordist/meson-dist-script new file mode 100755 index 000000000000..f430a1de32e7 --- /dev/null +++ b/pdns/recursordist/meson-dist-script @@ -0,0 +1,4 @@ +#!/bin/sh + +echo HI AM AM THE DIST SCRIPT +env \ No newline at end of file diff --git a/pdns/recursordist/meson.build b/pdns/recursordist/meson.build index bcaa756c27e4..0e72b6fbbcd0 100644 --- a/pdns/recursordist/meson.build +++ b/pdns/recursordist/meson.build @@ -11,6 +11,9 @@ project( 'cpp_std=c++17', ], ) + +meson.add_dist_script('meson-dist-script') + add_project_arguments('-DRECURSOR', language: 'cpp') From efdcbb5364256391873826e6d6dd0e9c43b0425b Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 10:17:46 +0100 Subject: [PATCH 03/11] Replace a few symlinks with actual files --- pdns/recursordist/NOTICE | 17 +++- pdns/recursordist/builder-support/gen-version | 78 ++++++++++++++++++- pdns/recursordist/meson-dist-script | 3 +- pdns/recursordist/meson.build | 3 +- 4 files changed, 96 insertions(+), 5 deletions(-) mode change 120000 => 100644 pdns/recursordist/NOTICE mode change 120000 => 100755 pdns/recursordist/builder-support/gen-version diff --git a/pdns/recursordist/NOTICE b/pdns/recursordist/NOTICE deleted file mode 120000 index fb376cfaa471..000000000000 --- a/pdns/recursordist/NOTICE +++ /dev/null @@ -1 +0,0 @@ -../../NOTICE \ No newline at end of file diff --git a/pdns/recursordist/NOTICE b/pdns/recursordist/NOTICE new file mode 100644 index 000000000000..ddd9b4211242 --- /dev/null +++ b/pdns/recursordist/NOTICE @@ -0,0 +1,16 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as +published by the Free Software Foundation. + +In addition, for the avoidance of any doubt, permission is granted to +link this program with OpenSSL and to (re)distribute the binaries +produced as the result of such linking. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. diff --git a/pdns/recursordist/builder-support/gen-version b/pdns/recursordist/builder-support/gen-version deleted file mode 120000 index 68c709be98c2..000000000000 --- a/pdns/recursordist/builder-support/gen-version +++ /dev/null @@ -1 +0,0 @@ -../../../builder-support/gen-version \ No newline at end of file diff --git a/pdns/recursordist/builder-support/gen-version b/pdns/recursordist/builder-support/gen-version new file mode 100755 index 000000000000..c2a56b451bef --- /dev/null +++ b/pdns/recursordist/builder-support/gen-version @@ -0,0 +1,77 @@ +#!/bin/sh +if [ ! -z "${BUILDER_VERSION}" ]; then + printf ${BUILDER_VERSION} + exit 0 +fi + +VERSION="unknown" + +DIRTY="" +git status | grep -q clean || DIRTY='.dirty' + +# Special environment variable to signal that we are building a release, as this +# has consequenses for the version number. +if [ "${IS_RELEASE}" = "YES" ]; then + TAG="$(git describe --tags --exact-match 2> /dev/null | cut -d- -f 2-)" + if [ -n "${TAG}" ]; then + # We're on a tag + echo "${TAG}${DIRTY}" > .version + printf "${TAG}${DIRTY}" + exit 0 + fi + echo 'This is not a tag, either tag this commit or do not set $IS_RELEASE' >&2 + exit 1 +fi + +# +# Generate the version number based on the branch +# +if [ ! -z "$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" ]; then + if [ -n "${BUILDER_MODULES}" ]; then + match=${BUILDER_MODULES} + [ $match = "authoritative" ] && match='auth' + [ $match = "recursor" ] && match='rec' + GIT_VERSION="$(git describe --match=${match}-* --tags | cut -d- -f2-)" + if [ $(echo ${GIT_VERSION} | awk -F"-" '{print NF-1}') = '3' ]; then + # A prerelease happened before + LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1-2)" + COMMITS_SINCE_TAG="$(echo ${GIT_VERSION} | cut -d- -f3)" + GIT_HASH="$(echo ${GIT_VERSION} | cut -d- -f4)" + elif [ $(echo ${GIT_VERSION} | awk -F"-" '{print NF-1}') = '1' ]; then + # Exactly on a pre-release + LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1-2)" + else + LAST_TAG="$(echo ${GIT_VERSION} | cut -d- -f1)" + COMMITS_SINCE_TAG="$(echo ${GIT_VERSION} | cut -d- -f2)" + GIT_HASH="$(echo ${GIT_VERSION} | cut -d- -f3)" + fi + fi + + if [ -z "${GIT_VERSION}" ]; then + # BUILDER_SUPPORT has more than one product listed, fall back to the 0.0.0 logic + + # We used 0.0.XXXXgHASH for master in the previous incarnation of our build pipeline. + # This now becomes 0.0.XXXX.0.gHASH, as 0.0.0.XXXX.gHASH (which is more correct) + # would break upgrades for those running master + # This _should_ be ok for forever is we stick to X.Y.Z for version numbers + LAST_TAG=0.0 + COMMITS_SINCE_TAG="$(git rev-list --count 12c868770afc20b6cc0da439d881105151d557dd..HEAD 2> /dev/null).0" + [ "${COMMITS_SINCE_TAG}" = ".0" ] && COMMITS_SINCE_TAG=0.0 + GIT_HASH="g$(git rev-parse HEAD | cut -c1-10 2> /dev/null)" + fi + + BRANCH=".$(git rev-parse --abbrev-ref HEAD | perl -p -e 's/[^[:alnum:]]//g;')" + + TAG="$(git describe --tags --exact-match 2> /dev/null | cut -d- -f 2-)" + if [ -n "${TAG}" ]; then # We're exactly on a tag + COMMITS_SINCE_TAG="0" + GIT_HASH="g$(git show --no-patch --format=format:%h HEAD 2>/dev/null)" + if [ -z "$GIT_HASH" ]; then + GIT_HASH="g$(git show --format=format:%h HEAD | head -n1)" + fi + fi + + VERSION="${LAST_TAG}.${COMMITS_SINCE_TAG}${BRANCH}.${GIT_HASH}${DIRTY}" +fi + +printf $VERSION diff --git a/pdns/recursordist/meson-dist-script b/pdns/recursordist/meson-dist-script index f430a1de32e7..06f5572b1a0c 100755 --- a/pdns/recursordist/meson-dist-script +++ b/pdns/recursordist/meson-dist-script @@ -1,4 +1,5 @@ #!/bin/sh echo HI AM AM THE DIST SCRIPT -env \ No newline at end of file +pwd +env diff --git a/pdns/recursordist/meson.build b/pdns/recursordist/meson.build index 0e72b6fbbcd0..3c9976c87b45 100644 --- a/pdns/recursordist/meson.build +++ b/pdns/recursordist/meson.build @@ -1,7 +1,7 @@ project( 'pdns-recursor', ['c', 'cpp'], - version: run_command(meson.current_source_dir() / 'builder-support' / 'gen-version', check: true).stdout().strip(), + version: run_command('builder-support' / 'gen-version', check: true).stdout().strip(), license: 'GPLv2', license_files: 'NOTICE', meson_version: '>= 1.2.1', @@ -11,7 +11,6 @@ project( 'cpp_std=c++17', ], ) - meson.add_dist_script('meson-dist-script') add_project_arguments('-DRECURSOR', language: 'cpp') From ec409ef98360d50adad55c994c72c49c72b09ded Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 10:31:53 +0100 Subject: [PATCH 04/11] replace symlinks with actual files --- pdns/recursordist/meson-dist-script | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pdns/recursordist/meson-dist-script b/pdns/recursordist/meson-dist-script index 06f5572b1a0c..7d935a8713ce 100755 --- a/pdns/recursordist/meson-dist-script +++ b/pdns/recursordist/meson-dist-script @@ -1,5 +1,16 @@ -#!/bin/sh +#!/bin/sh -e + +echo Runnig meson-dist-script +echo PWD=$(pwd) +echo MESON_SOURCE_ROOT=$MESON_SOURCE_ROOT +echo MESON_PROJECT_DIST_ROOT=$MESON_PROJECT_DIST_ROOT + +cd "$MESON_PROJECT_DIST_ROOT" + +# Get all symlinks +symlinks=$(find . -type l) + +# Get the dereffed symbolic links (the actual files being pointed to) from the source dir +# Extract them over the existing symbolic links +tar -C "$MESON_SOURCE_ROOT" -hcf - $symlinks | tar -xf - -C "$MESON_PROJECT_DIST_ROOT" -echo HI AM AM THE DIST SCRIPT -pwd -env From 323133fa7aedc295a438b47812a31dda7342b691 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 12:17:29 +0100 Subject: [PATCH 05/11] Fix version number for Meson build --- meson/version/meson.build | 4 +--- .../{meson-dist-script => meson-dist-script.sh} | 0 pdns/recursordist/meson.build | 8 ++++++-- pdns/recursordist/version.sh | 9 +++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) rename pdns/recursordist/{meson-dist-script => meson-dist-script.sh} (100%) create mode 100755 pdns/recursordist/version.sh diff --git a/meson/version/meson.build b/meson/version/meson.build index 5fdf56938bf4..621272ce4ef6 100644 --- a/meson/version/meson.build +++ b/meson/version/meson.build @@ -1,4 +1,2 @@ -gen_version_prog = find_program('gen-version', dirs: product_source_dir / 'builder-support', required: true) -gen_version_prog_res = run_command(gen_version_prog, check: true) -product_version = gen_version_prog_res.stdout().strip() +product_version = meson.project_version() conf.set_quoted('VERSION', product_version, description: 'Version') diff --git a/pdns/recursordist/meson-dist-script b/pdns/recursordist/meson-dist-script.sh similarity index 100% rename from pdns/recursordist/meson-dist-script rename to pdns/recursordist/meson-dist-script.sh diff --git a/pdns/recursordist/meson.build b/pdns/recursordist/meson.build index 3c9976c87b45..c9ddfe2750cb 100644 --- a/pdns/recursordist/meson.build +++ b/pdns/recursordist/meson.build @@ -1,7 +1,7 @@ project( 'pdns-recursor', ['c', 'cpp'], - version: run_command('builder-support' / 'gen-version', check: true).stdout().strip(), + version: run_command('version.sh', 'get-vcs', check: true).stdout().strip(), license: 'GPLv2', license_files: 'NOTICE', meson_version: '>= 1.2.1', @@ -11,7 +11,11 @@ project( 'cpp_std=c++17', ], ) -meson.add_dist_script('meson-dist-script') +meson.add_dist_script('meson-dist-script.sh') + +# When runniog meson dist, the command below produces multiple lines on stderr: +# Unable to evaluate subdir([]) in AstInterpreter --> Skipping +meson.add_dist_script('version.sh', 'set-dist', meson.project_version()) add_project_arguments('-DRECURSOR', language: 'cpp') diff --git a/pdns/recursordist/version.sh b/pdns/recursordist/version.sh new file mode 100755 index 000000000000..320e6d0d65f6 --- /dev/null +++ b/pdns/recursordist/version.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ "$1" = "get-vcs" ]; then + builder-support/gen-version +elif [ "$1" = "set-dist" ]; then + $MESONREWRITE -V --sourcedir="$MESON_PROJECT_DIST_ROOT" kwargs set project / version "$2" +else + exit 1 +fi From 1e256fe49528120e1f0675e2c5ebd0e0be9c5044 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 13:12:53 +0100 Subject: [PATCH 06/11] Run autoconf -vi to create configure script (so that autotool builds get VERSION) --- pdns/recursordist/meson-dist-script.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index 7d935a8713ce..09970c260e0c 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -14,3 +14,14 @@ symlinks=$(find . -type l) # Extract them over the existing symbolic links tar -C "$MESON_SOURCE_ROOT" -hcf - $symlinks | tar -xf - -C "$MESON_PROJECT_DIST_ROOT" +# Run autoconf for people using autotools to build, this creates a configure script with VERSION set +echo Running autoreconf -vi so distfile is still usable for autotools building +# Run autoconf for people using autotools to build, this creates a configure sc +autoreconf -vi + +# Generate man pages +cd "$MESON_PROJECT_BUILD_ROOT" +ninja man-pages +cp -p rec-man-pages/*.1 "$MESON_PROJECT_DIST_ROOT" + + From 3b87737e15e0c7b576510db65f40e049ef27764f Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 22 Jan 2025 16:50:09 +0100 Subject: [PATCH 07/11] Include dnslabeltext.cc in trabal, otherwise ragel becomes a build dependency --- pdns/recursordist/meson-dist-script.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index 09970c260e0c..4b96d5fdf8ee 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -22,6 +22,7 @@ autoreconf -vi # Generate man pages cd "$MESON_PROJECT_BUILD_ROOT" ninja man-pages -cp -p rec-man-pages/*.1 "$MESON_PROJECT_DIST_ROOT" - +cp -vp rec-man-pages/*.1 "$MESON_PROJECT_DIST_ROOT" +ninja librec-dnslabeltext.a.p/dnslabeltext.cc +cp -vp librec-dnslabeltext.a.p/dnslabeltext.cc "$MESON_PROJECT_DIST_ROOT" From 805596a5245e737de6b0162f03f1059091b8589c Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Fri, 24 Jan 2025 07:51:30 +0100 Subject: [PATCH 08/11] Typo in comment Co-authored-by: Peter van Dijk --- pdns/recursordist/meson-dist-script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index 4b96d5fdf8ee..5be08c9bba33 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -echo Runnig meson-dist-script +echo Running meson-dist-script echo PWD=$(pwd) echo MESON_SOURCE_ROOT=$MESON_SOURCE_ROOT echo MESON_PROJECT_DIST_ROOT=$MESON_PROJECT_DIST_ROOT From 28e0d7aea0025acce547cbaefd0efc314264f7a8 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Fri, 24 Jan 2025 09:14:39 +0100 Subject: [PATCH 09/11] Update requirements, fetch effective_tld_names.dat --- pdns/recursordist/docs/requirements.in | 2 ++ pdns/recursordist/docs/requirements.txt | 10 +++++++++- pdns/recursordist/meson-dist-script.sh | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pdns/recursordist/docs/requirements.in b/pdns/recursordist/docs/requirements.in index 74fe2d56face..11375548e5fa 100644 --- a/pdns/recursordist/docs/requirements.in +++ b/pdns/recursordist/docs/requirements.in @@ -13,3 +13,5 @@ docutils!=0.15,<0.18 jinja2<3.1.0 alabaster==0.7.13 pbr==6.1.0 # setup-requires for sphinxcontrib-fulltoc +standard-imghdr +standard-pipes diff --git a/pdns/recursordist/docs/requirements.txt b/pdns/recursordist/docs/requirements.txt index 6fdceaf8d2ce..ef95c757677e 100644 --- a/pdns/recursordist/docs/requirements.txt +++ b/pdns/recursordist/docs/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile --generate-hashes requirements.in @@ -265,6 +265,14 @@ sphinxcontrib-websupport==1.2.4 \ --hash=sha256:4edf0223a0685a7c485ae5a156b6f529ba1ee481a1417817935b20bde1956232 \ --hash=sha256:6fc9287dfc823fe9aa432463edd6cea47fa9ebbf488d7f289b322ffcfca075c7 # via sphinx +standard-imghdr==3.13.0 \ + --hash=sha256:30a1bff5465605bb496f842a6ac3cc1f2131bf3025b0da28d4877d6d4b7cc8e9 \ + --hash=sha256:8d9c68058d882f6fc3542a8d39ef9ff94d2187dc90bd0c851e0902776b7b7a42 + # via -r requirements.in +standard-pipes==3.13.0 \ + --hash=sha256:5805d0738fa17192e58cc4dea26dcfe9b8c5cd9c77e78d5dbded8bc3bda428c9 \ + --hash=sha256:cde270ae625064211dbcd1c8f35a540b70d8ccd7443b099a496f8e6a44fed2f3 + # via -r requirements.in urllib3==2.2.3 \ --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index 5be08c9bba33..4ce83e3442a2 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -23,6 +23,10 @@ autoreconf -vi cd "$MESON_PROJECT_BUILD_ROOT" ninja man-pages cp -vp rec-man-pages/*.1 "$MESON_PROJECT_DIST_ROOT" + +# Generate a few files to reduce build dependencies ninja librec-dnslabeltext.a.p/dnslabeltext.cc cp -vp librec-dnslabeltext.a.p/dnslabeltext.cc "$MESON_PROJECT_DIST_ROOT" +ninja effective_tld_names.dat +cp -vp effective_tld_names.dat "$MESON_PROJECT_DIST_ROOT" From 6f2c8964b64d77d4ce36c98e6c8157415da9c9b9 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Fri, 24 Jan 2025 09:27:51 +0100 Subject: [PATCH 10/11] Skip a few files and dirs in the meson dist tarball --- pdns/recursordist/.gitattributes | 7 +++++++ pdns/recursordist/meson-dist-script.sh | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 pdns/recursordist/.gitattributes diff --git a/pdns/recursordist/.gitattributes b/pdns/recursordist/.gitattributes new file mode 100644 index 000000000000..3f006fb33934 --- /dev/null +++ b/pdns/recursordist/.gitattributes @@ -0,0 +1,7 @@ +Caddyfile export-ignore +/README.md export-ignore +docs export-ignore +examples export-ignore +make-ext-symlinks.py export-ignore +recursor-lsan.supp export-ignore +recursor-tsan.supp export-ignore diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index 4ce83e3442a2..a8699d94dd02 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -24,9 +24,14 @@ cd "$MESON_PROJECT_BUILD_ROOT" ninja man-pages cp -vp rec-man-pages/*.1 "$MESON_PROJECT_DIST_ROOT" +rm -rf "$MESON_PROJECT_DIST_ROOT"/autom4te.cache + + # Generate a few files to reduce build dependencies -ninja librec-dnslabeltext.a.p/dnslabeltext.cc +echo 'If the below command generates an error, remove dnslabeltext.cc from source dir (remains of an autotools build?) and start again with a clean meson setup' +ninja librec-dnslabeltext.a.p/dnslabeltext.cc cp -vp librec-dnslabeltext.a.p/dnslabeltext.cc "$MESON_PROJECT_DIST_ROOT" -ninja effective_tld_names.dat +echo 'If the below command generates an error, remove effective_tld_names.dat and pubsuffix.cc from source dir (remains of an autotools build?) and start again with a clean meson setup' +ninja effective_tld_names.dat cp -vp effective_tld_names.dat "$MESON_PROJECT_DIST_ROOT" From 4b02618cad9a146bd2d33063501ad0ce4a7f7bed Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Tue, 4 Feb 2025 12:37:21 +0100 Subject: [PATCH 11/11] Add a check to see if gen-version still is up-to-date --- pdns/recursordist/meson-dist-script.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pdns/recursordist/meson-dist-script.sh b/pdns/recursordist/meson-dist-script.sh index a8699d94dd02..b972994dad2b 100755 --- a/pdns/recursordist/meson-dist-script.sh +++ b/pdns/recursordist/meson-dist-script.sh @@ -10,6 +10,10 @@ cd "$MESON_PROJECT_DIST_ROOT" # Get all symlinks symlinks=$(find . -type l) +# If these two get out-of-sync, fix it! It used to be a symlink but that can no longer be as we are +# working with a partial checkout in the dist root dir. +cmp "$MESON_SOURCE_ROOT"/builder-support/gen-version "$MESON_PROJECT_DIST_ROOT"/builder-support/gen-version + # Get the dereffed symbolic links (the actual files being pointed to) from the source dir # Extract them over the existing symbolic links tar -C "$MESON_SOURCE_ROOT" -hcf - $symlinks | tar -xf - -C "$MESON_PROJECT_DIST_ROOT"