package rosa import ( "strings" "hakurei.app/internal/pkg" ) // NewPython returns a [pkg.Artifact] containing an installation of Python. 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", // hits std.PresetExt ruleset "test_os", "test_posix", "test_shutil", // somehow picks up mtime of source code "test_zipfile", // requires gcc "test_ctypes", // breaks on llvm "test_dbm_gnu", } return t.New("python-"+version, []pkg.Artifact{ t.NewMake(), t.NewZlib(), }, nil, []string{ "EXTRATESTOPTS=-j0 -x " + strings.Join(skipTests, " -x "), }, ` # 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 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, ))) }