nixpkgs/pkgs/development/python-modules/sudachidict/default.nix
Yueh-Shun Li 91b3db1309 treewide: fix sourceRoot for fetchgit-based src
According to Nixpkgs manual[1] and NixOS 23.11 Release Note[2], the
`sourceRoot` attribute passed to `stdenv.mkDerivation` should be
specified as `"${src.name}"` or `"${src.name}/subdir"` when `src` is
produced using `fetchgit`-based fetchers.

`sourceRoot = "source"` or `sourceRoot = "source/subdir"` is based on
the assumption that the `name` attribute of these pre-unpacked fetchers
are always `"source"`, which is not the case. Expecting constant `name`
also makes the source FODs prone to irrelevent hashes during version
bumps.

[1]: https://nixos.org/manual/nixpkgs/unstable/#var-stdenv-sourceRoot
[2]: https://nixos.org/manual/nixos/stable/release-notes#sec-release-23.11
2024-03-09 07:53:25 +08:00

48 lines
1.3 KiB
Nix

{ buildPythonPackage
, fetchFromGitHub
, sudachidict
, setuptools
, sudachipy
}:
buildPythonPackage rec {
pname = "sudachidict-${sudachidict.dict-type}";
inherit (sudachidict) version meta;
pyproject = true;
src = fetchFromGitHub {
owner = "WorksApplications";
repo = "SudachiDict";
rev = "refs/tags/v${version}";
hash = "sha256-xJ/iPywOZA2kzHaVU43Bc8TUboj3OpDg1kLFMIc/T90=";
};
sourceRoot = "${src.name}/python";
# setup script tries to get data from the network but we use the nixpkgs' one
postPatch = ''
substituteInPlace setup.py \
--replace 'ZIP_NAME = urlparse(ZIP_URL).path.split("/")[-1]' "" \
--replace "not os.path.exists(RESOURCE_DIR)" "False"
substituteInPlace INFO.json \
--replace "%%VERSION%%" ${version} \
--replace "%%DICT_VERSION%%" ${version} \
--replace "%%DICT_TYPE%%" ${sudachidict.dict-type}
'';
nativeBuildInputs = [
setuptools
];
propagatedBuildInputs = [
sudachipy
];
# we need to prepare some files before the build
# https://github.com/WorksApplications/SudachiDict/blob/develop/package_python.sh
preBuild = ''
install -Dm644 ${sudachidict}/share/system.dic -t sudachidict_${sudachidict.dict-type}/resources
touch sudachidict_${sudachidict.dict-type}/__init__.py
'';
}