From 25af5d11e999f34553eb22753aeb1332ccc71c1a Mon Sep 17 00:00:00 2001 From: AlexanderRichert-NOAA Date: Wed, 17 Dec 2025 20:40:06 +0000 Subject: [PATCH 1/9] put NCO-approved pkg list under wcoss2 site config instead of nco template --- .../tier1/wcoss2/approved_packages.txt} | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) rename configs/{templates/nco/approved_list.txt => sites/tier1/wcoss2/approved_packages.txt} (92%) diff --git a/configs/templates/nco/approved_list.txt b/configs/sites/tier1/wcoss2/approved_packages.txt similarity index 92% rename from configs/templates/nco/approved_list.txt rename to configs/sites/tier1/wcoss2/approved_packages.txt index 3fcdd8216..7eaf169a8 100644 --- a/configs/templates/nco/approved_list.txt +++ b/configs/sites/tier1/wcoss2/approved_packages.txt @@ -2,9 +2,9 @@ awscli bacio boost bufr -bufr_dump -bufr_tranjb -bufr_util +bufr-dump +bufr-tranjb +bufr-util cairo cdo cfitsio @@ -28,14 +28,14 @@ gempak geos gfsio git -grib_util +grib-util gsl hdf5 imagemagick ip ip2 jasper -lamp_shared +lamp-shared landsfcutil libdap4 libgeotiff @@ -54,19 +54,20 @@ mbedtls met metis metplus -mos_shared +mos-shared nco ncview nemsio nemsiogfs -netcdf +netcdf-c +netcdf-fortran perl pigz pio pixman prepobs -prod_envir -prod_util +prod-envir +prod-util proj python readline @@ -79,11 +80,11 @@ sp subversion udunits upp -util_shared +util-shared w3emc w3nco wgrib2 -wrf_io +wrf-io xyz2shp xz zlib @@ -210,7 +211,7 @@ xproto xtrans xxhash zstd -atlas +ecmwf-atlas eckit fckit gsl-lite @@ -223,3 +224,4 @@ glibc parallelio pkg-config ecbuild +gsi-ncdiag From 7d490c4af30b5f4ca3585f41a775f9e0211854eb Mon Sep 17 00:00:00 2001 From: AlexanderRichert-NOAA Date: Wed, 17 Dec 2025 20:39:05 +0000 Subject: [PATCH 2/9] acorn deployments.yaml: use @ --- configs/sites/tier1/acorn/deployments.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/sites/tier1/acorn/deployments.yaml b/configs/sites/tier1/acorn/deployments.yaml index f1d54a1ac..30912cfb4 100644 --- a/configs/sites/tier1/acorn/deployments.yaml +++ b/configs/sites/tier1/acorn/deployments.yaml @@ -1,6 +1,6 @@ deployments: - template: "unified-dev" - compilers: ["oneapi-2024.2.1", "intel-19.1.3.304"] + compilers: ["oneapi@2024.2.1", "intel@19.1.3.304"] packages_to_install: - ufs-weather-model-env - global-workflow-env @@ -20,7 +20,7 @@ deployments: - py-numpy - template: "nco" - compilers: ["oneapi-2024.2.1", "intel-19.1.3.304"] + compilers: ["oneapi@2024.2.1", "intel@19.1.3.304"] duplicates_to_ignore: ["crtm", "crtm-fix", "boost", "harfbuzz"] allowed_gcc_packages: - antlr From 47c114485ce93827a277e8a5c5c5df57d6144173 Mon Sep 17 00:00:00 2001 From: AlexanderRichert-NOAA Date: Thu, 11 Dec 2025 18:26:50 +0000 Subject: [PATCH 3/9] deploy.py: add option to list config'd deployments and exit --- util/acorn/deploy/deploy.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/util/acorn/deploy/deploy.py b/util/acorn/deploy/deploy.py index 1d349a147..9294fa327 100755 --- a/util/acorn/deploy/deploy.py +++ b/util/acorn/deploy/deploy.py @@ -9,6 +9,7 @@ parser.add_argument('-r', '--redeploy-existing', action='store_true', help="Redeploy existing deployments (default is skip existing env dirs)") parser.add_argument('-s', '--site', type=str, help='Site name override') parser.add_argument('-u', '--until', choices=("create", "concretize", "validate", "fetch", "install"), help='Carry out steps up to and including') +parser.add_argument('-l', '--list-only', action='store_true', help="List configured deployments for the detected site and exit") parser.add_argument('deployments', nargs='*', help="List of deployments to apply (default is all; specify template+compiler with, e.g., 'unified-dev%%oneapi@2024.2.1')") @@ -150,14 +151,17 @@ def run_batch_install(batch_config, deployment, env_dir_full_path, logfile, logf deployment["only_concretize_requested_packages"] = False env_dir_basename = get_env_dir_basename(deployment) deployments[env_dir_basename] = deployment - print(f" Registered deployment: {deployment['template']}/{deployment['compiler']} ({env_dir_basename})") + print(f" Registered deployment: {deployment['template']}%{deployment['compiler']} ({env_dir_basename})") + +if args.list_only: + sys.exit(0) print("="*30) # Create and install each deployment for env_dir_basename, deployment in deployments.items(): if not is_deployment_requested(env_dir_basename, deployment, args): - print(f"Skipping deployment: {deployment['template']}/{deployment['compiler']} ({env_dir_basename})") + print(f"Skipping deployment: {deployment['template']}%{deployment['compiler']} ({env_dir_basename})") continue print("="*30) # Create env based on config From eb77f9c0d054bfe868ff0eaea2ee025d8f96cf1f Mon Sep 17 00:00:00 2001 From: AlexanderRichert-NOAA Date: Thu, 11 Dec 2025 18:26:05 +0000 Subject: [PATCH 4/9] misc acorn/wcoss2 config updates --- configs/sites/tier1/acorn/modules.yaml | 2 ++ configs/sites/tier1/acorn/packages.yaml | 3 ++- configs/sites/tier1/wcoss2/modules.yaml | 2 ++ configs/sites/tier1/wcoss2/packages.yaml | 3 ++- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/configs/sites/tier1/acorn/modules.yaml b/configs/sites/tier1/acorn/modules.yaml index 65801706f..93dffdd39 100644 --- a/configs/sites/tier1/acorn/modules.yaml +++ b/configs/sites/tier1/acorn/modules.yaml @@ -5,3 +5,5 @@ modules: lmod: include: - python + all: + autoload: run diff --git a/configs/sites/tier1/acorn/packages.yaml b/configs/sites/tier1/acorn/packages.yaml index 65042c7fe..db9201d45 100644 --- a/configs/sites/tier1/acorn/packages.yaml +++ b/configs/sites/tier1/acorn/packages.yaml @@ -12,7 +12,7 @@ packages: blas: require:: ['openblas'] fftw-api: - require: ['fftw'] + require:: ['fftw'] jpeg: require: ['libjpeg-turbo'] lapack: @@ -39,6 +39,7 @@ packages: require: ['~crypto'] nco: require:: ['%oneapi'] + py-colorama:: {} py-pandas: require:: ['~excel'] subversion: diff --git a/configs/sites/tier1/wcoss2/modules.yaml b/configs/sites/tier1/wcoss2/modules.yaml index 68cdd1e90..18f7d2444 100644 --- a/configs/sites/tier1/wcoss2/modules.yaml +++ b/configs/sites/tier1/wcoss2/modules.yaml @@ -11,6 +11,8 @@ modules: - netcdf_c_virtual - esmf_virtual - python_virtual + all: + autoload: run boost: suffixes: '%gcc': gcc diff --git a/configs/sites/tier1/wcoss2/packages.yaml b/configs/sites/tier1/wcoss2/packages.yaml index 6a16bae7c..a266b09dd 100644 --- a/configs/sites/tier1/wcoss2/packages.yaml +++ b/configs/sites/tier1/wcoss2/packages.yaml @@ -12,7 +12,7 @@ packages: blas: require:: ['openblas'] fftw-api: - require: ['fftw'] + require:: ['fftw'] jpeg: require: ['libjpeg-turbo'] lapack: @@ -55,6 +55,7 @@ packages: require:: ['%oneapi'] netcdf-c: require:: ['@4.9.2', '+mpi', '~parallel-netcdf', '~dap', '~blosc', '~szip'] + py-colorama:: {} py-pandas: require:: ['~excel'] scotch: From a16c8d6ea808ca9dfe99960480fda179bf1908bb Mon Sep 17 00:00:00 2001 From: Alex Richert Date: Wed, 17 Dec 2025 13:01:41 -0800 Subject: [PATCH 5/9] remove deploy.py for now --- util/acorn/deploy/deploy.py | 318 ------------------------------------ 1 file changed, 318 deletions(-) delete mode 100755 util/acorn/deploy/deploy.py diff --git a/util/acorn/deploy/deploy.py b/util/acorn/deploy/deploy.py deleted file mode 100755 index 9294fa327..000000000 --- a/util/acorn/deploy/deploy.py +++ /dev/null @@ -1,318 +0,0 @@ -#!/usr/bin/env spack-python - -import argparse - -parser = argparse.ArgumentParser(description="Your script description") - -parser.add_argument('-n', '--no-scheduler', action='store_true', help="Run installation on local node (no job scheduler)") -parser.add_argument('-x', '--skip-go-rust-handling', action='store_true', help="Skip handling of Go/Rust dep fetching when using parallel job scheduler") -parser.add_argument('-r', '--redeploy-existing', action='store_true', help="Redeploy existing deployments (default is skip existing env dirs)") -parser.add_argument('-s', '--site', type=str, help='Site name override') -parser.add_argument('-u', '--until', choices=("create", "concretize", "validate", "fetch", "install"), help='Carry out steps up to and including') -parser.add_argument('-l', '--list-only', action='store_true', help="List configured deployments for the detected site and exit") - -parser.add_argument('deployments', nargs='*', help="List of deployments to apply (default is all; specify template+compiler with, e.g., 'unified-dev%%oneapi@2024.2.1')") - -args = parser.parse_args() - -import collections -from datetime import datetime -import logging -import os -import socket -import subprocess -import sys -import yaml -from contextlib import redirect_stdout, redirect_stderr -from types import SimpleNamespace - -logging.basicConfig(level=logging.CRITICAL) - -import spack.extensions -spack.extensions.load_extension("stack") -from spack.extensions.stack.cmd.stack_cmds.create import * -from spack.extensions.stack.meta_modules import setup_meta_modules -import spack.environment -from spack.cmd.concretize import concretize -from spack.cmd.fetch import fetch -from spack.cmd.module import module -from spack import modules -from spack.util.executable import which - -spack_stack_dir = os.getenv("SPACK_STACK_DIR") - -sys.path.append(os.path.join(spack_stack_dir, "util")) -from show_duplicate_packages import show_duplicate_packages - -nowdate = datetime.now().strftime("%Y%m%d-%H%M") -logdir = os.path.join(spack_stack_dir, "deploy_logs") -os.makedirs(logdir, exist_ok=True) - -def get_site_and_tier(deployment={}): - if args.site: - return args.site, "tier1" - if "site" in deployment: - return deployment["site"], "tier1" - fqdn = socket.getfqdn() - if "acorn.wcoss2" in fqdn: - return "acorn", "tier1" - -def get_env_dir_basename(deployment): - base = deployment["template"] - base = base.replace("unified-dev", "ue") - base = base.replace("-dev", "") - return "-".join([base, deployment["compiler"]]) - -def deployment_already_exists(env_dir_basename, args): - path_to_check = os.path.join(spack_stack_dir, "envs", env_dir_basename) - return os.path.isdir(path_to_check) - -def is_deployment_requested(env_dir_basename, deployment, args): - template = deployment["template"] - template_and_compiler = deployment["template"] + "%" + deployment["compiler"] - if args.deployments and (template not in args.deployments) and (template_and_compiler not in args.deployments): - return False - if template in args.deployments: - return True - if template_and_compiler in args.deployments: - return True - if args.redeploy_existing: - return True - return not deployment_already_exists(env_dir_basename, args) - -def get_create_env_settings(env_dir_basename, deployment, deployments): - config_dict = {} - config_dict["site"] = get_site_and_tier(deployment=deployment)[0] - config_dict["template"] = deployment["template"] - config_dict["dir"] = os.path.join(spack_stack_dir, "envs") - config_dict["name"] = env_dir_basename - if "upstreams" in deployment: - upstream_full_paths = [] - for upstream_template in deployment["upstreams"]: - for _candidate_upstream in deployments.values(): - if (_candidate_upstream["template"] == upstream_template) and (_candidate_upstream["compiler"] == deployment["compiler"]): - upstream_basename = get_env_dir_basename(_candidate_upstream) - upstream_full_path = os.path.join(spack_stack_dir, "envs", upstream_basename, "install") - upstream_full_paths.append([upstream_full_path]) - break - config_dict["upstreams"] = upstream_full_paths - config_dict["compiler"] = deployment["compiler"] - - return config_dict - -def run_batch_install(batch_config, deployment, env_dir_full_path, logfile, logfilepath, packages_to_install=[], suffix=".batch_install"): - if "walltime" in deployment: - walltime = deployment["walltime"] - elif "default_walltime" in batch_config: - walltime = batch_config["default_walltime"] - else: - assert False, "Set deployment-specific walltime or batch_config:default_walltime" - - if batch_config["scheduler"] == "pbspro": - cmd = [ - "qsub", - "-o", logfilepath + suffix, - "-e", logfilepath + suffix, - "-A", batch_config["account"], - "-q", batch_config["queue"], - "-l", "walltime=" + walltime + ",select=1:ncpus=12", - "-V", "-Wblock=true", "--", - which("spack").path, "--env", env_dir_full_path, - "install", "--fail-fast", "--show-log-on-error", - "--concurrent-packages", "4", "--jobs", "4", - ] - else: - assert False, "batch_config:scheduler must be pbspro" - if packages_to_install: - cmd.extend(packages_to_install) - logfile.write("Launching batch job:\n%s\n" % " ".join(cmd)) - subprocess.run(cmd, stdout=logfile, stderr=logfile, check=True) - -assert not os.getenv("SPACK_ENV"), "$SPACK_ENV is set. Reconsider your choices." - -# Load deployments.yaml configuration -site, tier = get_site_and_tier() -deployments_yaml_path = os.path.join(spack_stack_dir, "configs", "sites", tier, site, "deployments.yaml") -with open(deployments_yaml_path, "r") as f: - deployments_yaml = yaml.safe_load(f) -print(f"Loading deployments.yaml for site {site}") - -# Generate deployments object, including iterating over compilers -deployments = collections.OrderedDict() - -for _deployment in deployments_yaml["deployments"]: - for _compiler in _deployment["compilers"]: - deployment = _deployment.copy() - del(deployment["compilers"]) - deployment["compiler"] = _compiler - if "packages_to_install" not in deployment: - deployment["packages_to_install"] = [] - if "only_concretize_requested_packages" not in deployment: - deployment["only_concretize_requested_packages"] = False - env_dir_basename = get_env_dir_basename(deployment) - deployments[env_dir_basename] = deployment - print(f" Registered deployment: {deployment['template']}%{deployment['compiler']} ({env_dir_basename})") - -if args.list_only: - sys.exit(0) - -print("="*30) - -# Create and install each deployment -for env_dir_basename, deployment in deployments.items(): - if not is_deployment_requested(env_dir_basename, deployment, args): - print(f"Skipping deployment: {deployment['template']}%{deployment['compiler']} ({env_dir_basename})") - continue - print("="*30) - # Create env based on config - stack_settings = get_create_env_settings(env_dir_basename, deployment, deployments) - env_dir_full_path = os.path.join(spack_stack_dir, "envs", env_dir_basename) - if os.path.isdir(env_dir_full_path) and args.redeploy_existing: - backup_dir_full_path = os.path.join(spack_stack_dir, "envs", env_dir_basename + "_bkp") - assert not os.path.isdir(backup_dir_full_path), f"Backup dir {backup_dir_full_path} already exists" - print(f"Moving {env_dir_full_path}\n to {backup_dir_full_path}") - os.rename(env_dir_full_path, backup_dir_full_path) - logfilepath = os.path.join(logdir, nowdate + f".{deployment['template']}.{deployment['compiler']}.log") - print(f"Log file: {logfilepath}") - logfile = open(logfilepath, "a", buffering=1) - logfile.write(str(deployment) + "\n") - logfile.write(str(stack_settings) + "\n") - print(f"Creating environment for {deployment['template']}/{deployment['compiler']}") - print(f" at {env_dir_full_path} ...") - # Use equivalent of 'spack stack create env' - stack_env = StackEnv(**stack_settings) - stack_env.write() - stack_env.check_umask() - env = spack.environment.Environment(env_dir_full_path) - spack.environment.activate(env) - - # Filter out unwanted packages before concretization - if deployment["only_concretize_requested_packages"]: - for root_spec in env.roots(): - if root_spec.name not in deployment["packages_to_install"]: - env.remove(root_spec) - env.write() - - if args.until == "create": - spack.environment.deactivate() - logfile.close() - continue - - # Concretize environment - print(f"... concretizing ...") - with redirect_stdout(logfile), redirect_stderr(logfile): - with env.write_transaction(): - concretized_specs = env.concretize() - env.write() - spack.environment.display_specs([concrete for _, concrete in concretized_specs]) - - if args.until == "concretize": - spack.environment.deactivate() - logfile.close() - continue - - print("... validating concretization ...") - # Check for duplicate packages - with open(os.path.join(env_dir_full_path, "spack.lock"), "r") as f: - json_to_check = f.read() - ignore_list = [] if "duplicates_to_ignore" not in deployment else deployment["duplicates_to_ignore"] - ret = show_duplicate_packages(json_to_check, ignore_list=ignore_list) - assert ret==0, "Duplicates found! Check spack.lock/show_duplicate_packages.py" - - # Fail if there packages that shouldn't be built with GCC are built with GCC: - all_compilers = set() - for spec in env.all_specs(): - for language in ("c", "cxx", "fortran"): - if language not in spec: continue - compiler_name = spec[language].name - all_compilers.add(compiler_name) - if "allowed_gcc_packages" in deployment: - is_legal = not (compiler_name == "gcc" and spec.name not in deployment["allowed_gcc_packages"]) - assert is_legal, f"spec '{spec.name}/{spec.dag_hash()}' to be built with GCC but not in 'allowed_gcc_packages'!" - - if args.until == "validate": - spack.environment.deactivate() - logfile.close() - continue - - # Fetch packages - print(f"... fetching packages ...") - for spec in env.all_specs(): - logfile.write(f"Fetching {spec.name}@{spec.version}/{spec.dag_hash(length=7)}\n") - with redirect_stdout(logfile), redirect_stderr(logfile): - spec.package.do_fetch() - - if args.until == "fetch": - spack.environment.deactivate() - logfile.close() - continue - - # Install packages - print("... installing", end="") - if deployment["packages_to_install"]: - print(" specs: " +" ".join(deployment["packages_to_install"]), end="") - print(" ...") - if args.no_scheduler: - specs = env.all_matching_specs(*(" ".join(deployment["packages_to_install"]))) - env.install_specs(specs) - else: - logfile.write("Starting install jobs via job scheduler...\n") - if not args.skip_go_rust_handling: - run_batch_install(deployments_yaml["batch_config"], deployment, env_dir_full_path, logfile, logfilepath, packages_to_install=["rust", "go"], suffix=".rustgo") - shell_env = os.environ.copy() - shell_env["SPACK_ENV"] = env_dir_full_path - subprocess.run( - os.path.join(spack_stack_dir, "util", "fetch_cargo_deps.py"), - env=shell_env, - stdout=logfile, - stderr=logfile, - check=True, - text=True, - ) - subprocess.run( - os.path.join(spack_stack_dir, "util", "fetch_go_deps.py"), - env=shell_env, - stdout=logfile, - stderr=logfile, - check=True, - text=True, - ) - run_batch_install(deployments_yaml["batch_config"], deployment, env_dir_full_path, logfile, logfilepath, packages_to_install=deployment["packages_to_install"]) - - if args.until == "install": - spack.environment.deactivate() - logfile.close() - continue - - # Generate modules - print(f"... writing package modules ...") - subprocess.run( - ["spack", "--env", env_dir_full_path, "module", "lmod", "refresh", "--yes-to-all", "--upstream-modules"], - stdout=logfile, - stderr=logfile, - check=True, - text=True, - ) - # Also generate a modules dir with a flat structure, i.e., everything is under Core with no metamodules - cfg_hierarchy = "modules:default:lmod:hierarchy::[]" - cfg_compilers = "modules:default:lmod:core_compilers::[%s]" % ",".join(all_compilers) - cfg_root = "modules:default:roots:lmod:$env/modules_flat" - subprocess.run( - [ - "spack", "--env", env_dir_full_path, - "--config", cfg_hierarchy, - "--config", cfg_compilers, - "--config", cfg_root, - "module", "lmod", "refresh", "--yes-to-all" - ] - ) - - # Meta modules - print(f"... writing metamodules ...") - setup_meta_modules() - - # Close this deployment's logfile and zero out spack.environment's stored config info - spack.environment.deactivate() - logfile.close() - - print(f"... done.") From b2047fa0f90b176cac5a4c666e5dcd00245e4b76 Mon Sep 17 00:00:00 2001 From: Alex Richert Date: Wed, 17 Dec 2025 13:01:52 -0800 Subject: [PATCH 6/9] point to test repos/builtin/ --- .gitmodules | 4 ++-- repos/builtin | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 303cc47eb..4e943d138 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = v1.3.0 [submodule "repos/builtin"] path = repos/builtin - url = https://github.com/jcsda/spack-packages - branch = release/2.0 + url = https://github.com/AlexanderRichert-NOAA/spack-packages + branch = harfbuzz_dec25 diff --git a/repos/builtin b/repos/builtin index f37a67b80..227cfaa1f 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit f37a67b804eb966306ae3b8420cada9cf14d1c4a +Subproject commit 227cfaa1f89b99a053a9d1f29aabcdce27a0d231 From ba8e5ee7837098537569789e815d6454df788d28 Mon Sep 17 00:00:00 2001 From: AlexanderRichert-NOAA Date: Wed, 17 Dec 2025 21:12:33 +0000 Subject: [PATCH 7/9] allow setup.sh to run from outside of spack-stack dir structure --- setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.sh b/setup.sh index 1aa3c09c4..e88fda426 100755 --- a/setup.sh +++ b/setup.sh @@ -25,7 +25,7 @@ echo "Sourcing spack environment ${SPACK_STACK_DIR}/spack/share/spack/setup-env. echo "Changing bootstrap path to $(spack bootstrap root '$spack/bootstrap')" # Get the current hash of the spack-stack code -export SPACK_STACK_HASH=`git rev-parse --short HEAD` +export SPACK_STACK_HASH=`cd $SPACK_STACK_DIR && git rev-parse --short HEAD` echo "Current hash of spack-stack is ${SPACK_STACK_HASH}" ## Register the spack extension From 5f040187fa0a9f59c87b774a5f3135c0d5e31d31 Mon Sep 17 00:00:00 2001 From: Alex Richert Date: Wed, 17 Dec 2025 14:10:09 -0800 Subject: [PATCH 8/9] revert repos/builtin/ submodule --- .gitmodules | 4 ++-- repos/builtin | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 4e943d138..303cc47eb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = v1.3.0 [submodule "repos/builtin"] path = repos/builtin - url = https://github.com/AlexanderRichert-NOAA/spack-packages - branch = harfbuzz_dec25 + url = https://github.com/jcsda/spack-packages + branch = release/2.0 diff --git a/repos/builtin b/repos/builtin index 227cfaa1f..58a2d586f 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 227cfaa1f89b99a053a9d1f29aabcdce27a0d231 +Subproject commit 58a2d586f9aa965d2257cc3a43633e94fec61405 From ba82a9818227726874d417832e7daba0c55ca5cf Mon Sep 17 00:00:00 2001 From: Alex Richert Date: Wed, 17 Dec 2025 17:44:03 -0800 Subject: [PATCH 9/9] debug harfbuzz (disable cmake) --- configs/common/packages.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index d80145ea6..83c8e3561 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -161,6 +161,10 @@ packages: #gsl-lite: # require: # - '@0.37.0' + harfbuzz: + # cmake-based harfbuzz fails during build + require: + - one_of: ['build_system=meson', 'build_system=autotools'] hdf: require: - '@4.2.15'