internal/rosa/package: migrate python packages
All checks were successful
Test / Create distribution (push) Successful in 1m6s
Test / Sandbox (push) Successful in 2m46s
Test / ShareFS (push) Successful in 3m47s
Test / Hakurei (push) Successful in 3m52s
Test / Sandbox (race detector) (push) Successful in 5m20s
Test / Hakurei (race detector) (push) Successful in 6m29s
Test / Flake checks (push) Successful in 1m23s

This also migrates LLVM LIT via the newly implemented special case.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-19 18:15:04 +09:00
parent 3010a209b5
commit ff44060763
5 changed files with 643 additions and 563 deletions

View File

@@ -0,0 +1,15 @@
package lit {
description = "a portable tool for executing LLVM and Clang style test suites";
website = "https://llvm.org/docs/CommandGuide/lit.html";
source = llvm-project;
exec = pip {
append = [ "llvm", "utils", "lit" ];
// already checked during llvm
skipCheck = true;
};
inputs = [ python-setuptools ];
runtime = [ python ];
}

View File

@@ -68,3 +68,440 @@ package python {
openssl,
];
}
package python-setuptools {
description = "the autotools of the Python ecosystem";
website = "https://pypi.org/project/setuptools";
anitya = 4021;
version* = "82.0.1";
source = remoteGitHub {
suffix = "pypa/setuptools";
tag = "v"+version;
checksum = "nznP46Tj539yqswtOrIM4nQgwLA1h-ApKX7z7ghazROCpyF5swtQGwsZoI93wkhc";
};
exec = pip {
// error: invalid command 'dist_info'
buildIsolation = true;
// pytest circular dependency
skipCheck = true;
};
runtime = [ python ];
}
package python-wheel {
description = "the official binary distribution format for Python";
website = "https://peps.python.org/pep-0427";
anitya = 11428;
version* = "0.47.0";
source = remoteGitHub {
suffix = "pypa/wheel";
tag = version;
checksum = "HZ-MvkUP8mbbx2YmsRNswj_bbOCIiXckuHqL5Qbvb5NxN5DYfWnqwkGNyS7OrId0";
};
exec = pip {
install = true;
};
inputs = [
python-flit-core,
python-setuptools,
];
runtime = [ python ];
}
package python-vcs-versioning {
description = "core VCS versioning functionality extracted as a standalone library";
website = "https://setuptools-scm.readthedocs.io/en/latest";
anitya = 389421;
version* = "1.1.1";
source = remoteGitHub {
suffix = "pypa/setuptools-scm";
tag = "vcs-versioning-v"+version;
checksum = "rXZixTsZcRcIoUC1LvWrjySsiXSv5uhW6ng2P-yXZrbdj7FrSrDeJLCfC2b-ladV";
};
env = [
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
];
exec = pip {
// upstream is monorepo of two packages (setuptools-scm)
append = [ "vcs-versioning" ];
// pytest circular dependency
skipCheck = true;
};
inputs = [
python-setuptools,
python-packaging,
];
runtime = [
python-setuptools,
python-packaging,
];
}
package python-setuptools-scm {
description = "extracts Python package versions from Git or Mercurial metadata";
website = "https://setuptools-scm.readthedocs.io/en/latest";
anitya = 7874;
version* = "10.0.5";
source = remoteGitHub {
suffix = "pypa/setuptools-scm";
tag = "setuptools-scm-v"+version;
checksum = "vTN_TPd-b4Wbsw5WmAcsWjrs-FNXXznOeVTDnb54NtXve9Oy-eb2HPy-RG3FzNqp";
};
env = [
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
];
exec = pip {
// upstream is monorepo of two packages
append = [ "setuptools-scm" ];
// pytest circular dependency
skipCheck = true;
};
inputs = [
python-setuptools,
python-vcs-versioning,
];
runtime = [
python-setuptools,
python-vcs-versioning,
];
}
package python-flit-core {
description = "a PEP 517 build backend for packages using Flit";
website = "https://flit.pypa.io";
anitya = 44841;
version* = "3.12.0";
source = remoteGitHub {
suffix = "pypa/flit";
tag = version;
checksum = "VcTsiGiDU1aPLbjSPe38f9OjJDCLcxFz9loObJqUI1ZxDHXAaQMxBpNyLz_G1Rff";
};
exec = pip {
// upstream has other unused packages with many dependencies
append = [ "flit_core" ];
// pytest circular dependency
skipCheck = true;
};
runtime = [ python ];
}
package python-packaging {
description = "reusable core utilities for various Python Packaging interoperability specifications";
website = "https://packaging.pypa.io";
anitya = 60461;
version* = "26.2";
source = remoteGitHub {
suffix = "pypa/packaging";
tag = version;
checksum = "rdpGa2EkPFbj1mFtLKLnSwIX9gPfELcuneiICjRVDNw6By49szTFVoW8gtMMZ6ZS";
};
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-flit-core ];
runtime = [ python ];
}
package python-pathspec {
description = "utility library for gitignore style pattern matching of file paths";
website = "https://github.com/cpburnz/python-pathspec";
anitya = 23424;
version* = "1.1.1";
source = remoteGitHub {
suffix = "cpburnz/python-pathspec";
tag = "v"+version;
checksum = "1fVwoal6FoKXczoG3qRUi87TxSWESSGcgvnbEZDYuaOgsO25o36iF3SbAhwkr4Va";
};
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-flit-core ];
runtime = [ python ];
}
package python-trove-classifiers {
description = "canonical source for classifiers on PyPI";
website = "https://pypi.org/p/trove-classifiers";
anitya = 88298;
version* = "2026.5.7.17";
source = remoteGitHub {
suffix = "pypa/trove-classifiers";
tag = version;
checksum = "1Fcps0gK9P4ofwGL8MISN9k1Q40-quxX7NDpIna50TmziBNrZy-0Vz0I9yIeHCoP";
};
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-setuptools ];
runtime = [ python ];
}
package python-pluggy {
description = "the core framework used by the pytest, tox, and devpi projects";
website = "https://pluggy.readthedocs.io/en/latest";
anitya = 7500;
version* = "1.6.0";
source = remoteGitHub {
suffix = "pytest-dev/pluggy";
tag = version;
checksum = "GiUgDkKjF8Xn1cmq6iMhTGXzcPIYeaJrvQpHBSAJapNVx4UyuiTXqd5eVlxSClJu";
};
env = [
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PLUGGY=" + version,
];
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-setuptools-scm ];
runtime = [ python ];
}
package python-hatchling {
description = "the extensible, standards compliant build backend used by Hatch";
website = "https://hatch.pypa.io";
anitya = 16137;
version* = "1.16.5";
source = remoteGitHub {
suffix = "pypa/hatch";
tag = "hatch-v"+version;
checksum = "V2eREtqZLZeV85yb4O-bfAJCUluHcQP76Qfs0QH5s7RF_Oc8xIP8jD0jl85qFyWk";
};
exec = pip {
// upstream has other unused packages with many dependencies
append = [ "backend" ];
// pytest circular dependency
skipCheck = true;
};
inputs = [
python-packaging,
python-pathspec,
python-trove-classifiers,
python-pluggy,
];
runtime = [
python-packaging,
python-pathspec,
python-trove-classifiers,
python-pluggy,
];
}
package python-pygments {
description = "a syntax highlighting package written in Python";
website = "https://pygments.org";
anitya = 3986;
version* = "2.20.0";
source = remoteGitHub {
suffix = "pygments/pygments";
tag = version;
checksum = "L-2P6vn7c_CNZYliE5CJAWLxO1ziDQVVkf8bnZbHj8aSCQ43oWv11wC9KzU9MeCa";
};
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-hatchling ];
runtime = [ python ];
}
package python-iniconfig {
description = "a small and simple INI-file parser module";
website = "https://github.com/pytest-dev/iniconfig";
anitya = 114778;
version* = "2.3.0";
source = remoteGitHub {
suffix = "pytest-dev/iniconfig";
tag = "v"+version;
checksum = "mH7VBZaXcYatBPE3RQQZvSzz_Ay8IPPek60NpPHZulPq4ReAFUUsA4EPWfiyMknZ";
};
env = [
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_INICONFIG=" + version,
];
exec = pip {
// pytest circular dependency
skipCheck = true;
};
inputs = [ python-setuptools-scm ];
runtime = [ python ];
}
package python-pytest {
description = "the pytest framework";
website = "https://pytest.org";
anitya = 3765;
version* = "9.0.3";
source = remoteGitHub {
suffix = "pytest-dev/pytest";
tag = version;
checksum = "qfLL_znWhbJCDbNJvrx9H3-orJ86z4ifhaW0bIn21jl2sDP-FVoX_1yieOypArQe";
};
env = [
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST=" + version,
];
exec = pip {
// many dependencies
skipCheck = true;
};
inputs = [
python-iniconfig,
python-packaging,
python-pluggy,
python-pygments,
python-setuptools-scm,
];
runtime = [
python-iniconfig,
python-packaging,
python-pluggy,
python-pygments,
];
}
package python-markupsafe {
description = "implements a text object that escapes characters so it is safe to use in HTML and XML";
website = "https://markupsafe.palletsprojects.com";
anitya = 3918;
version* = "3.0.3";
source = remoteGitHub {
suffix = "pallets/markupsafe";
tag = version;
checksum = "txRGYdWE3his1lHHRI-lZADw0-ILvUg2l5OGdFHtFXIb_QowGxwdxHCUSJIgmjQs";
};
exec = pip {
// ModuleNotFoundError: No module named 'markupsafe'
install = true;
};
inputs = [ python-setuptools ];
runtime = [ python ];
}
package python-mako {
description = "a template library written in Python";
website = "https://www.makotemplates.org";
anitya = 3915;
version* = "1.3.12";
source = remoteGitHub {
suffix = "sqlalchemy/mako";
tag = "rel_"+join {
elems = split {
s = version;
sep = ".";
n = 3;
};
sep = "_";
};
checksum = "OZbBsQe2MzRuAo5Mr4qRwWHGqU1EEZeBuSprDDIceAtMLIUJtO7SbERlxHIxNhLk";
};
exec = pip {};
inputs = [
python-markupsafe,
python-setuptools,
];
runtime = [ python-markupsafe ];
}
package python-pyyaml {
description = "a YAML parser and emitter for Python";
website = "https://pyyaml.org";
anitya = 4123;
version* = "6.0.3";
source = remoteGitHub {
suffix = "yaml/pyyaml";
tag = version;
checksum = "7wDv0RW9chBdu9l5Q4Hun5F2HHdo105ZSIixwdFPKbEYbftW9YxmsegfL-zafnbJ";
};
exec = pip {
// ModuleNotFoundError: No module named 'yaml'
install = true;
};
inputs = [ python-setuptools ];
runtime = [ python ];
}
package python-pycparser {
description = "complete C99 parser in pure Python";
website = "https://github.com/eliben/pycparser";
anitya = 8175;
version* = "3.00";
source = remoteGitHub {
suffix = "eliben/pycparser";
tag = "release_v"+version;
checksum = "4qfCMFKp0fLsRsloOAF780tXX_Ce_68RwinCmjNGObAX32WpF_iBafIKW1S1bYlA";
};
// test case hard codes gcc
early = `
ln -s clang /system/bin/gcc
`;
exec = pip {};
inputs = [ python-setuptools ];
runtime = [ python ];
}

View File

@@ -2,7 +2,6 @@ package rosa
import (
"slices"
"strings"
"hakurei.app/internal/pkg"
)
@@ -120,388 +119,3 @@ func (s *S) newPythonPackage(
)...)
})
}
func init() {
const (
version = "0.47.0"
checksum = "HZ-MvkUP8mbbx2YmsRNswj_bbOCIiXckuHqL5Qbvb5NxN5DYfWnqwkGNyS7OrId0"
)
native.newPythonPackage(
"wheel", 11428,
"the official binary distribution format for Python",
"https://peps.python.org/pep-0427/",
version, newFromGitHub(
"pypa/wheel",
version, checksum,
), nil, &PipHelper{
Install: true,
}, P{PythonFlitCore, PythonSetuptools},
)
}
func init() {
const (
version = "82.0.1"
checksum = "nznP46Tj539yqswtOrIM4nQgwLA1h-ApKX7z7ghazROCpyF5swtQGwsZoI93wkhc"
)
native.newPythonPackage(
"setuptools", 4021,
"the autotools of the Python ecosystem",
"https://pypi.org/project/setuptools/",
version, newFromGitHub(
"pypa/setuptools",
"v"+version, checksum,
), nil, &PipHelper{
// error: invalid command 'dist_info'
BuildIsolation: true,
// pytest circular dependency
SkipCheck: true,
}, nil)
}
func init() {
const (
version = "1.1.1"
checksum = "rXZixTsZcRcIoUC1LvWrjySsiXSv5uhW6ng2P-yXZrbdj7FrSrDeJLCfC2b-ladV"
)
native.newPythonPackage(
"vcs-versioning", 389421,
"core VCS versioning functionality extracted as a standalone library",
"https://setuptools-scm.readthedocs.io/en/latest/",
version, newFromGitHub(
"pypa/setuptools-scm",
"vcs-versioning-v"+version, checksum,
), &PackageAttr{
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
},
}, &PipHelper{
// upstream is monorepo of two packages (setuptools-scm)
Append: []string{"vcs-versioning"},
// pytest circular dependency
SkipCheck: true,
}, nil,
PythonSetuptools,
PythonPackaging,
)
}
func init() {
const (
version = "10.0.5"
checksum = "vTN_TPd-b4Wbsw5WmAcsWjrs-FNXXznOeVTDnb54NtXve9Oy-eb2HPy-RG3FzNqp"
)
native.newPythonPackage(
"setuptools-scm", 7874,
"extracts Python package versions from Git or Mercurial metadata",
"https://setuptools-scm.readthedocs.io/en/latest/",
version, newFromGitHub(
"pypa/setuptools-scm",
"setuptools-scm-v"+version, checksum,
), &PackageAttr{
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
},
}, &PipHelper{
// upstream is monorepo of two packages
Append: []string{"setuptools-scm"},
// pytest circular dependency
SkipCheck: true,
}, nil,
PythonSetuptools,
PythonVCSVersioning,
)
}
func init() {
const (
version = "3.12.0"
checksum = "VcTsiGiDU1aPLbjSPe38f9OjJDCLcxFz9loObJqUI1ZxDHXAaQMxBpNyLz_G1Rff"
)
native.newPythonPackage(
"flit-core", 44841,
"a PEP 517 build backend for packages using Flit",
"https://flit.pypa.io/",
version, newFromGitHub(
"pypa/flit",
version, checksum,
), nil, &PipHelper{
// upstream has other unused packages with many dependencies
Append: []string{"flit_core"},
// pytest circular dependency
SkipCheck: true,
}, nil,
)
}
func init() {
const (
version = "26.2"
checksum = "rdpGa2EkPFbj1mFtLKLnSwIX9gPfELcuneiICjRVDNw6By49szTFVoW8gtMMZ6ZS"
)
native.newPythonPackage(
"packaging", 60461,
"reusable core utilities for various Python Packaging interoperability specifications",
"https://packaging.pypa.io/",
version, newFromGitHub(
"pypa/packaging",
version, checksum,
), nil, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonFlitCore},
)
}
func init() {
native.mustRegister(func(t Toolchain) (pkg.Artifact, string) {
meta, source := t.Load(llvmSource)
return t.NewPackage("lit", meta.Version, source, nil, &PipHelper{
Append: []string{"llvm", "utils", "lit"},
// already checked during llvm
SkipCheck: true,
},
PythonSetuptools,
), meta.Version
}, &Metadata{
Name: "lit",
Description: "a portable tool for executing LLVM and Clang style test suites",
Website: "https://llvm.org/docs/CommandGuide/lit.html",
Dependencies: P{
Python,
},
})
}
func init() {
const (
version = "1.1.1"
checksum = "1fVwoal6FoKXczoG3qRUi87TxSWESSGcgvnbEZDYuaOgsO25o36iF3SbAhwkr4Va"
)
native.newPythonPackage(
"pathspec", 23424,
"utility library for gitignore style pattern matching of file paths",
"https://github.com/cpburnz/python-pathspec",
version, newFromGitHub(
"cpburnz/python-pathspec",
"v"+version, checksum,
), nil, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonFlitCore},
)
}
func init() {
const (
version = "2026.5.7.17"
checksum = "1Fcps0gK9P4ofwGL8MISN9k1Q40-quxX7NDpIna50TmziBNrZy-0Vz0I9yIeHCoP"
)
native.newPythonPackage(
"trove-classifiers", 88298,
"canonical source for classifiers on PyPI",
"https://pypi.org/p/trove-classifiers/",
version, newFromGitHub(
"pypa/trove-classifiers",
version, checksum,
), nil, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonSetuptools},
)
}
func init() {
const (
version = "1.6.0"
checksum = "GiUgDkKjF8Xn1cmq6iMhTGXzcPIYeaJrvQpHBSAJapNVx4UyuiTXqd5eVlxSClJu"
)
native.newPythonPackage(
"pluggy", 7500,
"the core framework used by the pytest, tox, and devpi projects",
"https://pluggy.readthedocs.io/en/latest/",
version, newFromGitHub(
"pytest-dev/pluggy",
version, checksum,
), &PackageAttr{
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PLUGGY=" + version,
},
}, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonSetuptoolsSCM},
)
}
func init() {
const (
version = "1.16.5"
checksum = "V2eREtqZLZeV85yb4O-bfAJCUluHcQP76Qfs0QH5s7RF_Oc8xIP8jD0jl85qFyWk"
)
native.newPythonPackage(
"hatchling", 16137,
"the extensible, standards compliant build backend used by Hatch",
"https://hatch.pypa.io/latest/",
version, newFromGitHub(
"pypa/hatch",
"hatch-v"+version, checksum,
), nil, &PipHelper{
// upstream has other unused packages with many dependencies
Append: []string{"backend"},
// pytest circular dependency
SkipCheck: true,
}, nil,
PythonPackaging,
PythonPathspec,
PythonTroveClassifiers,
PythonPluggy,
)
}
func init() {
const (
version = "2.20.0"
checksum = "L-2P6vn7c_CNZYliE5CJAWLxO1ziDQVVkf8bnZbHj8aSCQ43oWv11wC9KzU9MeCa"
)
native.newPythonPackage(
"pygments", 3986,
"a syntax highlighting package written in Python",
"https://pygments.org/",
version, newFromGitHub(
"pygments/pygments",
version, checksum,
), nil, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonHatchling},
)
}
func init() {
const (
version = "2.3.0"
checksum = "mH7VBZaXcYatBPE3RQQZvSzz_Ay8IPPek60NpPHZulPq4ReAFUUsA4EPWfiyMknZ"
)
native.newPythonPackage(
"iniconfig", 114778,
"a small and simple INI-file parser module",
"https://github.com/pytest-dev/iniconfig",
version, newFromGitHub(
"pytest-dev/iniconfig",
"v"+version, checksum,
), &PackageAttr{
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_INICONFIG=" + version,
},
}, &PipHelper{
// pytest circular dependency
SkipCheck: true,
}, P{PythonSetuptoolsSCM},
)
}
func init() {
const (
version = "9.0.3"
checksum = "qfLL_znWhbJCDbNJvrx9H3-orJ86z4ifhaW0bIn21jl2sDP-FVoX_1yieOypArQe"
)
native.newPythonPackage(
"pytest", 3765,
"the pytest framework",
"https://pytest.org",
version, newFromGitHub(
"pytest-dev/pytest",
version, checksum,
), &PackageAttr{
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST=" + version,
},
}, &PipHelper{
// many dependencies
SkipCheck: true,
}, P{PythonSetuptoolsSCM},
PythonIniConfig,
PythonPackaging,
PythonPluggy,
PythonPygments,
)
}
func init() {
const (
version = "3.0.3"
checksum = "txRGYdWE3his1lHHRI-lZADw0-ILvUg2l5OGdFHtFXIb_QowGxwdxHCUSJIgmjQs"
)
native.newPythonPackage(
"markupsafe", 3918,
"implements a text object that escapes characters so it is safe to use in HTML and XML",
"https://markupsafe.palletsprojects.com/",
version, newFromGitHub(
"pallets/markupsafe",
version, checksum,
), nil, &PipHelper{
// ModuleNotFoundError: No module named 'markupsafe'
Install: true,
}, P{PythonSetuptools},
)
}
func init() {
const (
version = "1.3.12"
checksum = "OZbBsQe2MzRuAo5Mr4qRwWHGqU1EEZeBuSprDDIceAtMLIUJtO7SbERlxHIxNhLk"
)
native.newPythonPackage(
"mako", 3915,
"a template library written in Python",
"https://www.makotemplates.org/",
version, newFromGitHub(
"sqlalchemy/mako",
"rel_"+strings.Join(strings.SplitN(version, ".", 3), "_"),
checksum,
), nil, nil, P{PythonSetuptools},
PythonMarkupSafe,
)
}
func init() {
const (
version = "6.0.3"
checksum = "7wDv0RW9chBdu9l5Q4Hun5F2HHdo105ZSIixwdFPKbEYbftW9YxmsegfL-zafnbJ"
)
native.newPythonPackage(
"pyyaml", 4123,
"a YAML parser and emitter for Python",
"https://pyyaml.org/",
version, newFromGitHub(
"yaml/pyyaml",
version, checksum,
), nil, &PipHelper{
// ModuleNotFoundError: No module named 'yaml'
Install: true,
}, P{PythonSetuptools},
)
}
func init() {
const (
version = "3.00"
checksum = "4qfCMFKp0fLsRsloOAF780tXX_Ce_68RwinCmjNGObAX32WpF_iBafIKW1S1bYlA"
)
native.newPythonPackage(
"pycparser", 8175,
"complete C99 parser in pure Python",
"https://github.com/eliben/pycparser",
version, newFromGitHub(
"eliben/pycparser",
"release_v"+version, checksum,
), &PackageAttr{
// test case hard codes gcc
ScriptEarly: `
ln -s clang /system/bin/gcc
`,
}, nil, P{PythonSetuptools},
)
}

View File

@@ -451,6 +451,30 @@ func (s *S) getFrame() azalea.Frame {
return
}},
k("split"): {F: func(
args azalea.FArgs,
) (v any, set bool, err error) {
var p, sep string
var n int64
if err = args.Apply(map[unique.Handle[azalea.Ident]]any{
k("s"): &p,
k("sep"): &sep,
k("n"): &n,
}); err != nil {
return
}
if n < 0 {
n = 0
} else if n == 0 {
n = -1
}
v = strings.SplitN(p, sep, int(n))
set = true
return
}},
// intenral/pkg built-ins
k("remoteTar"): {F: func(

View File

@@ -122,22 +122,12 @@ var (
Pixman = H("pixman")
PkgConfig = H("pkg-config")
Procps = H("procps")
PythonFlitCore = H("python-flit-core")
PythonHatchling = H("python-hatchling")
PythonIniConfig = H("python-iniconfig")
PythonMako = H("python-mako")
PythonMarkupSafe = H("python-markupsafe")
PythonPackaging = H("python-packaging")
PythonPathspec = H("python-pathspec")
PythonPluggy = H("python-pluggy")
PythonPyTest = H("python-pytest")
PythonPyYAML = H("python-pyyaml")
PythonPycparser = H("python-pycparser")
PythonPygments = H("python-pygments")
PythonSetuptools = H("python-setuptools")
PythonSetuptoolsSCM = H("python-setuptools-scm")
PythonTroveClassifiers = H("python-trove-classifiers")
PythonVCSVersioning = H("python-vcs-versioning")
PythonWheel = H("python-wheel")
QEMU = H("qemu")
Rdfind = H("rdfind")