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
|
||||
# the Nix store to 1. So treat that as a special case.
|
||||
./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) ''
|
||||
|
|
|
@ -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;
|
||||
|
||||
preConfigure = ''
|
||||
export DETERMINISTIC_BUILD=1
|
||||
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
|
||||
${preConfigure}
|
||||
'';
|
||||
|
|
Loading…
Reference in New Issue