package rosa import ( "slices" "strings" "hakurei.app/internal/pkg" ) func (t Toolchain) newPython() pkg.Artifact { const ( version = "3.14.2" checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys" ) skipTests := []string{ // requires internet access (http://www.pythontest.net/) "test_asyncio", "test_socket", "test_urllib2", "test_urllibnet", "test_urllib2net", // makes assumptions about uid_map/gid_map "test_os", "test_subprocess", // somehow picks up mtime of source code "test_zipfile", // requires gcc "test_ctypes", // breaks on llvm "test_dbm_gnu", } return t.New("python-"+version, false, []pkg.Artifact{ t.Load(Make), t.Load(Zlib), t.Load(Libffi), }, nil, []string{ "EXTRATESTOPTS=-j0 -x " + strings.Join(skipTests, " -x "), // _ctypes appears to infer something from the linker name "LDFLAGS=-Wl,--dynamic-linker=/system/lib/" + "ld-musl-" + linuxArch() + ".so.1", }, ` # test_synopsis_sourceless assumes this is writable and checks __pycache__ chmod -R +w /usr/src/python/ export HOME="$(mktemp -d)" cd "$(mktemp -d)" /usr/src/python/configure \ --prefix=/system \ --build="${ROSA_TRIPLE}" make "-j$(nproc)" make test make DESTDIR=/work install `, pkg.Path(AbsUsrSrc.Append("python"), true, pkg.NewHTTPGetTar( nil, "https://www.python.org/ftp/python/"+version+ "/Python-"+version+".tgz", mustDecode(checksum), pkg.TarGzip, ))) } func init() { artifactsF[Python] = Toolchain.newPython } // newViaPip is a helper for installing python dependencies via pip. func (t Toolchain) newViaPip( name, version, abi, platform, checksum, prefix string, extra ...pkg.Artifact, ) pkg.Artifact { wname := name + "-" + version + "-py3-" + abi + "-" + platform + ".whl" return t.New(name+"-"+version, false, slices.Concat([]pkg.Artifact{ t.Load(Python), }, extra), nil, nil, ` pip3 install \ --no-index \ --prefix=/system \ --root=/work \ /usr/src/`+wname+` `, pkg.Path(AbsUsrSrc.Append(wname), false, pkg.NewHTTPGet( nil, prefix+wname, mustDecode(checksum), ))) } func (t Toolchain) newSetuptools() pkg.Artifact { const ( version = "80.10.1" checksum = "p3rlwEmy1krcUH1KabprQz1TCYjJ8ZUjOQknQsWh3q-XEqLGEd3P4VrCc7ouHGXU" ) return t.New("setuptools-"+version, false, []pkg.Artifact{ t.Load(Python), }, nil, nil, ` pip3 install \ --no-index \ --prefix=/system \ --root=/work \ /usr/src/setuptools `, pkg.Path(AbsUsrSrc.Append("setuptools"), true, pkg.NewHTTPGetTar( nil, "https://github.com/pypa/setuptools/archive/refs/tags/"+ "v"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, ))) } func init() { artifactsF[Setuptools] = Toolchain.newSetuptools }