1{
2 lib,
3 buildPythonPackage,
4 fetchPypi,
5 pythonOlder,
6 ncurses,
7 importlib-metadata,
8 setuptools,
9 wheel,
10 patchelf,
11}:
12
13buildPythonPackage rec {
14 pname = "cx-freeze";
15 version = "6.15.16";
16 pyproject = true;
17
18 disabled = pythonOlder "3.8";
19
20 src = fetchPypi {
21 pname = "cx_Freeze";
22 inherit version;
23 hash = "sha256-xjmRiG/ypTGfjw0HwDSaa74aZbXzIPi5JDiI5jyaSiI=";
24 };
25
26 nativeBuildInputs = [
27 setuptools
28 wheel
29 ];
30
31 propagatedBuildInputs = [
32 importlib-metadata # upstream has this for 3.8 as well
33 ncurses
34 setuptools
35 ];
36
37 postPatch = ''
38 # timestamp need to come after 1980 for zipfiles and nix store is set to epoch
39 substituteInPlace cx_Freeze/freezer.py \
40 --replace "st.st_mtime" "time.time()"
41
42 sed -i /patchelf/d pyproject.toml
43 '';
44
45 makeWrapperArgs = [
46 "--prefix"
47 "PATH"
48 ":"
49 (lib.makeBinPath [ patchelf ])
50 ];
51
52 # fails to find Console even though it exists on python 3.x
53 doCheck = false;
54
55 meta = with lib; {
56 description = "A set of scripts and modules for freezing Python scripts into executables";
57 homepage = "https://marcelotduarte.github.io/cx_Freeze/";
58 changelog = "https://github.com/marcelotduarte/cx_Freeze/releases/tag/${version}";
59 license = licenses.psfl;
60 maintainers = with maintainers; [ ];
61 mainProgram = "cxfreeze";
62 };
63}