Python: add DETERMINISTIC_BUILD env var. If set, python doesn't write timestamps to pyc files. Tested by
building argparse, compiling from cli, compiling using py_compile.
This commit is contained in:
parent
a3bf1ca3b1
commit
09e6ae577b
|
@ -25,6 +25,10 @@ let
|
||||||
# doesn't work in Nix because Nix changes the mtime of files in
|
# doesn't work in Nix because Nix changes the mtime of files in
|
||||||
# the Nix store to 1. So treat that as a special case.
|
# the Nix store to 1. So treat that as a special case.
|
||||||
./nix-store-mtime.patch
|
./nix-store-mtime.patch
|
||||||
|
|
||||||
|
# patch python to put zero timestamp into pyc
|
||||||
|
# if DETERMINISTIC_BUILD env var is set
|
||||||
|
./deterministic-build.patch
|
||||||
];
|
];
|
||||||
|
|
||||||
postPatch = stdenv.lib.optionalString (stdenv.gcc.libc != null) ''
|
postPatch = stdenv.lib.optionalString (stdenv.gcc.libc != null) ''
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
diff -ur orig/Lib/py_compile.py new/Lib/py_compile.py
|
||||||
|
--- orig/Lib/py_compile.py
|
||||||
|
+++ new/Lib/py_compile.py
|
||||||
|
@@ -122,7 +122,10 @@
|
||||||
|
cfile = file + (__debug__ and 'c' or 'o')
|
||||||
|
with open(cfile, 'wb') as fc:
|
||||||
|
fc.write('\0\0\0\0')
|
||||||
|
- wr_long(fc, timestamp)
|
||||||
|
+ if "DETERMINISTIC_BUILD" in os.environ:
|
||||||
|
+ fc.write('\0\0\0\0')
|
||||||
|
+ else:
|
||||||
|
+ wr_long(fc, timestamp)
|
||||||
|
marshal.dump(codeobject, fc)
|
||||||
|
fc.flush()
|
||||||
|
fc.seek(0, 0)
|
||||||
|
diff -ur orig/Python/import.c new/Python/import.c
|
||||||
|
--- orig/Python/import.c
|
||||||
|
+++ new/Python/import.c
|
||||||
|
@@ -939,10 +939,12 @@
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* Now write the true mtime (as a 32-bit field) */
|
||||||
|
- fseek(fp, 4L, 0);
|
||||||
|
- assert(mtime <= 0xFFFFFFFF);
|
||||||
|
- PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
|
||||||
|
- fflush(fp);
|
||||||
|
+ if (Py_GETENV("DETERMINISTIC_BUILD") == NULL) {
|
||||||
|
+ fseek(fp, 4L, 0);
|
||||||
|
+ assert(mtime <= 0xFFFFFFFF);
|
||||||
|
+ PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
|
||||||
|
+ fflush(fp);
|
||||||
|
+ }
|
||||||
|
fclose(fp);
|
||||||
|
if (Py_VerboseFlag)
|
||||||
|
PySys_WriteStderr("# wrote %s\n", cpathname);
|
||||||
|
|
|
@ -68,6 +68,7 @@ python.stdenv.mkDerivation (attrs // {
|
||||||
pythonPath = [ setuptools ] ++ pythonPath;
|
pythonPath = [ setuptools ] ++ pythonPath;
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
|
export DETERMINISTIC_BUILD=1
|
||||||
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
|
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
|
||||||
${preConfigure}
|
${preConfigure}
|
||||||
'';
|
'';
|
||||||
|
|
Loading…
Reference in New Issue