# Wedge derivations for oils-for-unix # # These mirror oils' upstream wedge system (build/deps.sh): # - Python 2.7 and 3.10 built from official tarballs # - mypy and dependencies downloaded via pip (FOD) # - mypy installed in a venv from cached packages { stdenv, fetchFromGitHub, fetchurl, symlinkJoin, pkg-config, cacert, openssl, zlib, libffi, readline, ncurses, bzip2, xz, gdbm, sqlite, }: let mkPythonWedge = { version, hash, extraConfigureFlags ? [ ], }: stdenv.mkDerivation (finalAttrs: { pname = "oils-python-wedge"; inherit version; src = fetchurl { url = "https://www.python.org/ftp/python/${finalAttrs.version}/Python-${finalAttrs.version}.tar.xz"; inherit hash; }; nativeBuildInputs = [ pkg-config ]; buildInputs = [ readline ncurses zlib bzip2 openssl libffi xz gdbm sqlite ]; env = { CPPFLAGS = "-I${zlib.dev}/include -I${libffi.dev}/include"; LDFLAGS = "-L${zlib}/lib -L${libffi}/lib -Wl,-rpath,${placeholder "out"}/lib"; PKG_CONFIG_PATH = "${libffi.dev}/lib/pkgconfig:${zlib.dev}/lib/pkgconfig:${openssl.dev}/lib/pkgconfig"; LIBFFI_INCLUDEDIR = "${libffi.dev}/include"; LIBFFI_LIBDIR = "${libffi}/lib"; }; configureFlags = [ "--enable-shared" "--with-system-ffi" ] ++ extraConfigureFlags; doCheck = false; enableParallelBuilding = true; }); python2Wedge = mkPythonWedge { version = "2.7.18"; hash = "sha256-tiwOeTdVHQzAK4/Vyw9UT5QFuvyaVNOAjtRZSBLt70M="; extraConfigureFlags = [ "--enable-unicode=ucs4" "--with-ensurepip=no" ]; }; python3Wedge = mkPythonWedge { version = "3.10.4"; hash = "sha256-gL+SX1cdpDazUhCIbPefbrX6XWxXExa3NWg0NFH3ehk="; extraConfigureFlags = [ "--with-ensurepip=install" ]; }; py3LibsCache = stdenv.mkDerivation { name = "oils-py3-libs-cache"; nativeBuildInputs = [ python3Wedge cacert ]; dontUnpack = true; buildPhase = '' export HOME=$TMPDIR export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt mkdir -p $out ${python3Wedge}/bin/pip3 install --upgrade pip setuptools wheel # Download exact versions (see requirements.txt) ${python3Wedge}/bin/pip3 download -d $out --only-binary=:all: --no-deps \ -r ${./requirements.txt} ''; dontInstall = true; outputHashMode = "recursive"; outputHash = "sha256-dTO5D4vr42A7Pui0i8ggt8rD6xQplG17rGB76M4ntRY="; }; mypyWedge = stdenv.mkDerivation (finalAttrs: { pname = "oils-mypy-wedge"; version = "0.780"; src = fetchFromGitHub { owner = "python"; repo = "mypy"; rev = "v${finalAttrs.version}"; hash = "sha256-czwCx6ZjCu3CrVmbI6NbstzWM0GvuPTWJiiUhXSznu4="; fetchSubmodules = true; }; nativeBuildInputs = [ python3Wedge ]; buildPhase = '' runHook preBuild export HOME=$TMPDIR ${python3Wedge}/bin/python3 -m venv $out # Install all packages from cached wheels (--no-deps to bypass version conflicts) $out/bin/pip install \ --no-index \ --find-links=${py3LibsCache} \ --no-deps \ setuptools wheel packaging \ typing_extensions mypy_extensions typed_ast \ mypy # Copy mypy source (mycpp extends mypy classes) cp -r . $out/mypy-src runHook postBuild ''; dontInstall = true; dontFixup = true; }); readline-all = symlinkJoin { name = "readline-all"; paths = [ readline readline.dev ]; }; in { inherit python2Wedge python3Wedge mypyWedge readline-all ; }