relenv 0.18.1__py3-none-any.whl → 0.18.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
relenv/build/__init__.py CHANGED
@@ -86,6 +86,12 @@ def setup_parser(subparsers):
86
86
  action="store_true",
87
87
  help="Force downloading source tarballs even if they exist",
88
88
  )
89
+ build_subparser.add_argument(
90
+ "--download-only",
91
+ default=False,
92
+ action="store_true",
93
+ help="Stop after downloading source tarballs",
94
+ )
89
95
  build_subparser.add_argument(
90
96
  "--step",
91
97
  dest="steps",
@@ -179,6 +185,7 @@ def main(args):
179
185
  clean=args.clean,
180
186
  cleanup=not args.no_cleanup,
181
187
  force_download=args.force_download,
188
+ download_only=args.download_only,
182
189
  show_ui=show_ui,
183
190
  log_level=args.log_level.upper(),
184
191
  )
relenv/build/common.py CHANGED
@@ -801,7 +801,6 @@ class Builder:
801
801
  recipies=None,
802
802
  build_default=build_default,
803
803
  populate_env=populate_env,
804
- force_download=False,
805
804
  arch="x86_64",
806
805
  version="",
807
806
  ):
@@ -824,7 +823,6 @@ class Builder:
824
823
 
825
824
  self.build_default = build_default
826
825
  self.populate_env = populate_env
827
- self.force_download = force_download
828
826
  self.toolchains = get_toolchain(root=self.dirs.root)
829
827
  self.set_arch(self.arch)
830
828
 
@@ -842,7 +840,6 @@ class Builder:
842
840
  recipies,
843
841
  self.build_default,
844
842
  self.populate_env,
845
- self.force_download,
846
843
  self.arch,
847
844
  version,
848
845
  )
@@ -1207,6 +1204,7 @@ class Builder:
1207
1204
  clean=True,
1208
1205
  cleanup=True,
1209
1206
  force_download=False,
1207
+ download_only=False,
1210
1208
  show_ui=False,
1211
1209
  log_level="WARNING",
1212
1210
  ):
@@ -1267,6 +1265,8 @@ class Builder:
1267
1265
  # Start a process for each build passing it an event used to notify each
1268
1266
  # process if it's dependencies have finished.
1269
1267
  self.download_files(steps, force_download=force_download, show_ui=show_ui)
1268
+ if download_only:
1269
+ return
1270
1270
  self.build(steps, cleanup, show_ui=show_ui, log_level=log_level)
1271
1271
 
1272
1272
  def check_versions(self):
@@ -1407,7 +1407,13 @@ def install_runtime(sitepackages):
1407
1407
  relenv = sitepackages / "relenv"
1408
1408
  os.makedirs(relenv, exist_ok=True)
1409
1409
 
1410
- for name in ["runtime.py", "relocate.py", "common.py", "__init__.py"]:
1410
+ for name in [
1411
+ "runtime.py",
1412
+ "relocate.py",
1413
+ "common.py",
1414
+ "buildenv.py",
1415
+ "__init__.py",
1416
+ ]:
1411
1417
  src = MODULE_DIR / name
1412
1418
  dest = relenv / name
1413
1419
  with io.open(src, "r") as rfp:
@@ -1495,6 +1501,15 @@ def finalize(env, dirs, logfp):
1495
1501
  format_shebang("../../../bin/python3"),
1496
1502
  )
1497
1503
 
1504
+ shutil.copy(
1505
+ pathlib.Path(dirs.toolchain)
1506
+ / env["RELENV_HOST"]
1507
+ / "sysroot"
1508
+ / "lib"
1509
+ / "libstdc++.so.6",
1510
+ libdir,
1511
+ )
1512
+
1498
1513
  # Moved in python 3.13 or removed?
1499
1514
  if (pymodules / "cgi.py").exists():
1500
1515
  patch_shebang(
relenv/build/darwin.py CHANGED
@@ -72,7 +72,7 @@ def build_python(env, dirs, logfp):
72
72
  runcmd(["make", "install"], env=env, stderr=logfp, stdout=logfp)
73
73
 
74
74
 
75
- build = builds.add("darwin", populate_env=populate_env, version="3.10.16")
75
+ build = builds.add("darwin", populate_env=populate_env, version="3.10.17")
76
76
 
77
77
  build.add(
78
78
  "openssl",
@@ -87,8 +87,7 @@ build.add(
87
87
  build.add(
88
88
  "XZ",
89
89
  download={
90
- "fallback_url": "http://tukaani.org/xz/xz-{version}.tar.gz",
91
- "url": "https://woz.io/relenv/dependencies/xz-{version}.tar.gz",
90
+ "url": "http://tukaani.org/xz/xz-{version}.tar.gz",
92
91
  "version": "5.6.2",
93
92
  "checksum": "0d6b10e4628fe08e19293c65e8dbcaade084a083",
94
93
  },
@@ -117,7 +116,7 @@ build.add(
117
116
  "url": "https://www.python.org/ftp/python/{version}/Python-{version}.tar.xz",
118
117
  "fallback_url": "https://woz.io/relenv/dependencies/Python-{version}.tar.gz",
119
118
  "version": build.version,
120
- "checksum": "401e6a504a956c8f0aab76c4f3ad9df601a83eb1",
119
+ "checksum": "d31d548cd2c5ca2ae713bebe346ba15e8406633a",
121
120
  },
122
121
  )
123
122
 
@@ -141,6 +140,6 @@ build = build.copy(
141
140
  builds.add("darwin", builder=build)
142
141
 
143
142
  build = build.copy(
144
- version="3.13.2", checksum="da39a3ee5e6b4b0d3255bfef95601890afd80709"
143
+ version="3.13.3", checksum="f26085cf12daef7b60b8a6fe93ef988b9a094aea"
145
144
  )
146
145
  builds.add("darwin", builder=build)
relenv/build/linux.py CHANGED
@@ -35,38 +35,36 @@ def populate_env(env, dirs):
35
35
  :type dirs: ``relenv.build.common.Dirs``
36
36
  """
37
37
  # CC and CXX need to be to have the full path to the executable
38
- env["CC"] = "{}/bin/{}-gcc -no-pie".format(dirs.toolchain, env["RELENV_HOST"])
39
- env["CXX"] = "{}/bin/{}-g++ -no-pie".format(dirs.toolchain, env["RELENV_HOST"])
38
+ env["CC"] = f"{dirs.toolchain}/bin/{env['RELENV_HOST']}-gcc"
39
+ env["CXX"] = f"{dirs.toolchain}/bin/{env['RELENV_HOST']}-g++"
40
40
  # Add our toolchain binaries to the path. We also add the bin directory of
41
41
  # our prefix so that libtirpc can find krb5-config
42
- env["PATH"] = "{}/bin/:{}/bin/:{PATH}".format(dirs.toolchain, dirs.prefix, **env)
42
+ env["PATH"] = f"{dirs.toolchain}/bin/:{dirs.prefix}/bin/:{env['PATH']}"
43
43
  ldflags = [
44
44
  "-Wl,--build-id=sha1",
45
- "-Wl,--rpath={prefix}/lib",
46
- "-L{prefix}/lib",
47
- "-L{}/{RELENV_HOST}/sysroot/lib".format(dirs.toolchain, **env),
48
- "-static-libstdc++",
45
+ f"-Wl,--rpath={dirs.prefix}/lib",
46
+ f"-L{dirs.prefix}/lib",
47
+ f"-L{dirs.toolchain}/{env['RELENV_HOST']}/sysroot/lib",
49
48
  ]
50
- env["LDFLAGS"] = " ".join(ldflags).format(prefix=dirs.prefix)
49
+ env["LDFLAGS"] = " ".join(ldflags)
51
50
  cflags = [
52
51
  "-g",
53
- "-I{prefix}/include",
54
- "-I{prefix}/include/readline",
55
- "-I{prefix}/include/ncursesw",
56
- "-I{}/{RELENV_HOST}/sysroot/usr/include".format(dirs.toolchain, **env),
52
+ f"-I{dirs.prefix}/include",
53
+ f"-I{dirs.prefix}/include/readline",
54
+ f"-I{dirs.prefix}/include/ncursesw",
55
+ f"-I{dirs.toolchain}/{env['RELENV_HOST']}/sysroot/usr/include",
57
56
  ]
58
- env["CFLAGS"] = " ".join(cflags).format(prefix=dirs.prefix)
57
+ env["CFLAGS"] = " ".join(cflags)
59
58
  # CPPFLAGS are needed for Python's setup.py to find the 'nessicery bits'
60
59
  # for things like zlib and sqlite.
61
60
  cpplags = [
62
- "-I{prefix}/include",
63
- "-I{prefix}/include/readline",
64
- "-I{prefix}/include/ncursesw",
65
- "-I{}/{RELENV_HOST}/sysroot/usr/include".format(dirs.toolchain, **env),
61
+ f"-I{dirs.prefix}/include",
62
+ f"-I{dirs.prefix}/include/readline",
63
+ f"-I{dirs.prefix}/include/ncursesw",
64
+ f"-I{dirs.toolchain}/{env['RELENV_HOST']}/sysroot/usr/include",
66
65
  ]
67
- env["CPPFLAGS"] = " ".join(cpplags).format(prefix=dirs.prefix)
68
- env["CXXFLAGS"] = " ".join(cpplags).format(prefix=dirs.prefix)
69
- env["LD_LIBRARY_PATH"] = "{prefix}/lib"
66
+ # env["CXXFLAGS"] = " ".join(cpplags)
67
+ env["CPPFLAGS"] = " ".join(cpplags)
70
68
  env["PKG_CONFIG_PATH"] = f"{dirs.prefix}/lib/pkgconfig"
71
69
 
72
70
 
@@ -85,12 +83,12 @@ def build_bzip2(env, dirs, logfp):
85
83
  [
86
84
  "make",
87
85
  "-j8",
88
- "PREFIX={}".format(dirs.prefix),
89
- "LDFLAGS={}".format(env["LDFLAGS"]),
86
+ f"PREFIX={dirs.prefix}",
87
+ f"LDFLAGS={env['LDFLAGS']}",
90
88
  "CFLAGS=-fPIC",
91
- "CC={}".format(env["CC"]),
92
- "BUILD={}".format("x86_64-linux-gnu"),
93
- "HOST={}".format(env["RELENV_HOST"]),
89
+ f"CC={env['CC']}",
90
+ "BUILD=x86_64-linux-gnu",
91
+ f"HOST={env['RELENV_HOST']}",
94
92
  "install",
95
93
  ],
96
94
  env=env,
@@ -102,10 +100,10 @@ def build_bzip2(env, dirs, logfp):
102
100
  "make",
103
101
  "-f",
104
102
  "Makefile-libbz2_so",
105
- "CC={}".format(env["CC"]),
106
- "LDFLAGS={}".format(env["LDFLAGS"]),
107
- "BUILD={}".format("x86_64-linux-gnu"),
108
- "HOST={}".format(env["RELENV_HOST"]),
103
+ f"CC={env['CC']}",
104
+ f"LDFLAGS={env['LDFLAGS']}",
105
+ "BUILD=x86_64-linux-gnu",
106
+ f"HOST={env['RELENV_HOST']}",
109
107
  ],
110
108
  env=env,
111
109
  stderr=logfp,
@@ -128,10 +126,10 @@ def build_libxcrypt(env, dirs, logfp):
128
126
  runcmd(
129
127
  [
130
128
  "./configure",
131
- "--prefix={}".format(dirs.prefix),
129
+ f"--prefix={dirs.prefix}",
132
130
  # "--enable-libgdbm-compat",
133
- "--build={}".format(env["RELENV_BUILD"]),
134
- "--host={}".format(env["RELENV_HOST"]),
131
+ f"--build={env['RELENV_BUILD']}",
132
+ f"--host={env['RELENV_HOST']}",
135
133
  ],
136
134
  env=env,
137
135
  stderr=logfp,
@@ -155,10 +153,10 @@ def build_gdbm(env, dirs, logfp):
155
153
  runcmd(
156
154
  [
157
155
  "./configure",
158
- "--prefix={}".format(dirs.prefix),
156
+ f"--prefix={dirs.prefix}",
159
157
  "--enable-libgdbm-compat",
160
- "--build={}".format(env["RELENV_BUILD"]),
161
- "--host={}".format(env["RELENV_HOST"]),
158
+ f"--build={env['RELENV_BUILD']}",
159
+ f"--host={env['RELENV_HOST']}",
162
160
  ],
163
161
  env=env,
164
162
  stderr=logfp,
@@ -205,19 +203,20 @@ def build_ncurses(env, dirs, logfp):
205
203
  "--disable-stripping",
206
204
  f"--with-pkg-config={dirs.prefix}/lib/pkgconfig",
207
205
  "--enable-pc-files",
208
- "--build={}".format(env["RELENV_BUILD"]),
209
- "--host={}".format(env["RELENV_HOST"]),
206
+ f"--build={env['RELENV_BUILD']}",
207
+ f"--host={env['RELENV_HOST']}",
210
208
  ],
211
209
  env=env,
212
210
  stderr=logfp,
213
211
  stdout=logfp,
214
212
  )
215
213
  runcmd(["make", "-j8"], env=env, stderr=logfp, stdout=logfp)
214
+ ticdir = str(pathlib.Path(dirs.tmpbuild) / "progs" / "tic")
216
215
  runcmd(
217
216
  [
218
217
  "make",
219
- "DESTDIR={}".format(dirs.prefix),
220
- "TIC_PATH={}".format(str(pathlib.Path(dirs.tmpbuild) / "progs" / "tic")),
218
+ f"DESTDIR={dirs.prefix}",
219
+ f"TIC_PATH={ticdir}",
221
220
  "install",
222
221
  ],
223
222
  env=env,
@@ -240,12 +239,12 @@ def build_readline(env, dirs, logfp):
240
239
  env["LDFLAGS"] = f"{env['LDFLAGS']} -ltinfow"
241
240
  cmd = [
242
241
  "./configure",
243
- "--prefix={}".format(dirs.prefix),
242
+ f"--prefix={dirs.prefix}",
244
243
  ]
245
244
  if env["RELENV_HOST"].find("linux") > -1:
246
245
  cmd += [
247
- "--build={}".format(env["RELENV_BUILD"]),
248
- "--host={}".format(env["RELENV_HOST"]),
246
+ f"--build={env['RELENV_BUILD']}",
247
+ f"--host={env['RELENV_HOST']}",
249
248
  ]
250
249
  runcmd(cmd, env=env, stderr=logfp, stdout=logfp)
251
250
  runcmd(["make", "-j8"], env=env, stderr=logfp, stdout=logfp)
@@ -266,10 +265,10 @@ def build_libffi(env, dirs, logfp):
266
265
  runcmd(
267
266
  [
268
267
  "./configure",
269
- "--prefix={}".format(dirs.prefix),
268
+ f"--prefix={dirs.prefix}",
270
269
  "--disable-multi-os-directory",
271
- "--build={}".format(env["RELENV_BUILD"]),
272
- "--host={}".format(env["RELENV_HOST"]),
270
+ f"--build={env['RELENV_BUILD']}",
271
+ f"--host={env['RELENV_HOST']}",
273
272
  ],
274
273
  env=env,
275
274
  stderr=logfp,
@@ -294,12 +293,12 @@ def build_zlib(env, dirs, logfp):
294
293
  :param logfp: A handle for the log file
295
294
  :type logfp: file
296
295
  """
297
- env["CFLAGS"] = "-fPIC {}".format(env["CFLAGS"])
296
+ env["CFLAGS"] = f"-fPIC {env['CFLAGS']}"
298
297
  runcmd(
299
298
  [
300
299
  "./configure",
301
- "--prefix={}".format(dirs.prefix),
302
- "--libdir={}/lib".format(dirs.prefix),
300
+ f"--prefix={dirs.prefix}",
301
+ f"--libdir={dirs.prefix}/lib",
303
302
  "--shared",
304
303
  ],
305
304
  env=env,
@@ -329,11 +328,11 @@ def build_krb(env, dirs, logfp):
329
328
  runcmd(
330
329
  [
331
330
  "./configure",
332
- "--prefix={}".format(dirs.prefix),
331
+ f"--prefix={dirs.prefix}",
333
332
  "--without-system-verto",
334
333
  "--without-libedit",
335
- "--build={}".format(env["RELENV_BUILD"]),
336
- "--host={}".format(env["RELENV_HOST"]),
334
+ f"--build={env['RELENV_BUILD']}",
335
+ f"--host={env['RELENV_HOST']}",
337
336
  ],
338
337
  env=env,
339
338
  stderr=logfp,
@@ -354,9 +353,9 @@ def build_python(env, dirs, logfp):
354
353
  :param logfp: A handle for the log file
355
354
  :type logfp: file
356
355
  """
357
- env["LDFLAGS"] = "-Wl,--rpath={prefix}/lib {ldflags}".format(
358
- prefix=dirs.prefix, ldflags=env["LDFLAGS"]
359
- )
356
+ ldflagopt = f"-Wl,--rpath={dirs.prefix}/lib"
357
+ if ldflagopt not in env["LDFLAGS"]:
358
+ env["LDFLAGS"] = f"{ldflagopt} {env['LDFLAGS']}"
360
359
 
361
360
  # Needed when using a toolchain even if build and host match.
362
361
  runcmd(
@@ -433,6 +432,8 @@ def build_python(env, dirs, logfp):
433
432
  with io.open("Modules/Setup", "a+") as fp:
434
433
  fp.seek(0, io.SEEK_END)
435
434
  fp.write("*disabled*\n" "_tkinter\n" "nsl\n" "nis\n")
435
+ for _ in ["LDFLAGS", "CFLAGS", "CPPFLAGS", "CXX", "CC"]:
436
+ env.pop(_)
436
437
  runcmd(["make", "-j8"], env=env, stderr=logfp, stdout=logfp)
437
438
  runcmd(["make", "install"], env=env, stderr=logfp, stdout=logfp)
438
439
 
@@ -444,14 +445,13 @@ def build_python(env, dirs, logfp):
444
445
  # runcmd([str(python), "-m", "ensurepip", "-U"], env=env, stderr=logfp, stdout=logfp)
445
446
 
446
447
 
447
- build = builds.add("linux", populate_env=populate_env, version="3.10.16")
448
+ build = builds.add("linux", populate_env=populate_env, version="3.10.17")
448
449
 
449
450
  build.add(
450
451
  "openssl",
451
452
  build_func=build_openssl,
452
453
  download={
453
454
  "url": "https://github.com/openssl/openssl/releases/download/openssl-{version}/openssl-{version}.tar.gz",
454
- # "fallback_url": "https://woz.io/relenv/dependencies/openssl-{version}.tar.gz",
455
455
  "version": "3.2.4",
456
456
  "checksum": "2247802a1193c0f8eb41c870e8de45a2241422d5",
457
457
  "checkfunc": tarball_version,
@@ -466,7 +466,6 @@ build.add(
466
466
  wait_on=["openssl"],
467
467
  download={
468
468
  "url": "https://www.openssl.org/source/openssl-{version}.tar.gz",
469
- # "fallback_url": "https://woz.io/relenv/dependencies/openssl-{version}.tar.gz",
470
469
  "version": "3.0.8",
471
470
  "checksum": "580d8a7232327fe1fa6e7db54ac060d4321f40ab",
472
471
  "checkfunc": tarball_version,
@@ -479,8 +478,8 @@ build.add(
479
478
  "libxcrypt",
480
479
  download={
481
480
  "url": "https://github.com/besser82/libxcrypt/releases/download/v{version}/libxcrypt-{version}.tar.xz",
482
- "version": "4.4.36",
483
- "checksum": "c040de2fd534f84082c9c42114ba11b4e1a67635",
481
+ "version": "4.4.38",
482
+ "checksum": "9aa2fa261be6144af492e9b6bfd03bfaa47f7159",
484
483
  "checkfunc": github_version,
485
484
  "checkurl": "https://github.com/besser82/libxcrypt/releases/",
486
485
  },
@@ -490,7 +489,6 @@ build.add(
490
489
  "XZ",
491
490
  download={
492
491
  "url": "http://tukaani.org/xz/xz-{version}.tar.gz",
493
- # "fallback_url": "https://woz.io/relenv/dependencies/xz-{version}.tar.gz",
494
492
  "version": "5.6.2",
495
493
  "checksum": "0d6b10e4628fe08e19293c65e8dbcaade084a083",
496
494
  "checkfunc": tarball_version,
@@ -502,7 +500,6 @@ build.add(
502
500
  build_func=build_sqlite,
503
501
  download={
504
502
  "url": "https://sqlite.org/2024/sqlite-autoconf-{version}.tar.gz",
505
- # "fallback_url": "https://woz.io/relenv/dependencies/sqlite-autoconf-{version}.tar.gz",
506
503
  "version": "3460100",
507
504
  "checksum": "1fdbada080f3285ac864c314bfbfc581b13e804b",
508
505
  "checkfunc": sqlite_version,
@@ -515,7 +512,6 @@ build.add(
515
512
  build_func=build_bzip2,
516
513
  download={
517
514
  "url": "https://sourceware.org/pub/bzip2/bzip2-{version}.tar.gz",
518
- # "fallback_url": "https://woz.io/relenv/dependencies/bzip2-{version}.tar.gz",
519
515
  "version": "1.0.8",
520
516
  "checksum": "bf7badf7e248e0ecf465d33c2f5aeec774209227",
521
517
  "checkfunc": tarball_version,
@@ -527,9 +523,8 @@ build.add(
527
523
  build_func=build_gdbm,
528
524
  download={
529
525
  "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-{version}.tar.gz",
530
- # "fallback_url": "https://woz.io/relenv/dependencies/gdbm-{version}.tar.gz",
531
- "version": "1.24",
532
- "checksum": "7bd455f28c9e4afacc042e0c712aac1b2391fef2",
526
+ "version": "1.25",
527
+ "checksum": "d55bdf2bb5f92f80006166dd8a8323cb2a428bd1",
533
528
  "checkfunc": tarball_version,
534
529
  },
535
530
  )
@@ -539,7 +534,6 @@ build.add(
539
534
  build_func=build_ncurses,
540
535
  download={
541
536
  "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-{version}.tar.gz",
542
- # "fallback_url": "https://woz.io/relenv/dependencies/ncurses-{version}.tar.gz",
543
537
  # XXX: Need to work out tinfo linkage
544
538
  # "version": "6.5",
545
539
  # "checksum": "cde3024ac3f9ef21eaed6f001476ea8fffcaa381",
@@ -554,9 +548,8 @@ build.add(
554
548
  build_libffi,
555
549
  download={
556
550
  "url": "https://github.com/libffi/libffi/releases/download/v{version}/libffi-{version}.tar.gz",
557
- # "fallback_url": "https://woz.io/relenv/dependencies/libffi-{version}.tar.gz",
558
- "version": "3.4.7",
559
- "checksum": "b07136211f47fa30c0512ebd7484fde724978d99",
551
+ "version": "3.4.8",
552
+ "checksum": "6930b77aebe2465a8e1a8617c4c9a8fa3199b256",
560
553
  "checkfunc": github_version,
561
554
  "checkurl": "https://github.com/libffi/libffi/releases/",
562
555
  },
@@ -567,7 +560,6 @@ build.add(
567
560
  build_zlib,
568
561
  download={
569
562
  "url": "https://zlib.net/fossils/zlib-{version}.tar.gz",
570
- # "fallback_url": "https://woz.io/relenv/dependencies/zlib-{version}.tar.gz",
571
563
  "version": "1.3.1",
572
564
  "checksum": "f535367b1a11e2f9ac3bec723fb007fbc0d189e5",
573
565
  "checkfunc": tarball_version,
@@ -578,7 +570,6 @@ build.add(
578
570
  "uuid",
579
571
  download={
580
572
  "url": "https://sourceforge.net/projects/libuuid/files/libuuid-{version}.tar.gz",
581
- # "fallback_url": "https://woz.io/relenv/dependencies/libuuid-{version}.tar.gz",
582
573
  "version": "1.0.3",
583
574
  "checksum": "46eaedb875ae6e63677b51ec583656199241d597",
584
575
  "checkfunc": uuid_version,
@@ -591,7 +582,6 @@ build.add(
591
582
  wait_on=["openssl"],
592
583
  download={
593
584
  "url": "https://kerberos.org/dist/krb5/{version}/krb5-{version}.tar.gz",
594
- # "fallback_url": "https://woz.io/relenv/dependencies/krb5-{version}.tar.gz",
595
585
  "version": "1.21",
596
586
  "checksum": "e2ee531443122376ac8b62b3848d94376f646089",
597
587
  "checkfunc": krb_version,
@@ -605,7 +595,6 @@ build.add(
605
595
  wait_on=["ncurses"],
606
596
  download={
607
597
  "url": "https://ftp.gnu.org/gnu/readline/readline-{version}.tar.gz",
608
- # "fallback_url": "https://woz.io/relenv/dependencies/readline-{version}.tar.gz",
609
598
  "version": "8.2.13",
610
599
  "checksum": "5ffb6a334c2422acbe8f4d2cb11e345265c8d930",
611
600
  "checkfunc": tarball_version,
@@ -620,7 +609,6 @@ build.add(
620
609
  download={
621
610
  "url": "https://sourceforge.net/projects/libtirpc/files/libtirpc-{version}.tar.bz2",
622
611
  # "url": "https://downloads.sourceforge.net/projects/libtirpc/files/libtirpc-{version}.tar.bz2",
623
- # "fallback_url": "https://woz.io/relenv/dependencies/libtirpc-{version}.tar.bz2",
624
612
  "version": "1.3.4",
625
613
  "checksum": "63c800f81f823254d2706637bab551dec176b99b",
626
614
  "checkfunc": tarball_version,
@@ -647,9 +635,8 @@ build.add(
647
635
  ],
648
636
  download={
649
637
  "url": "https://www.python.org/ftp/python/{version}/Python-{version}.tar.xz",
650
- # "fallback_url": "https://woz.io/relenv/dependencies/Python-{version}.tar.xz",
651
638
  "version": build.version,
652
- "checksum": "401e6a504a956c8f0aab76c4f3ad9df601a83eb1",
639
+ "checksum": "d31d548cd2c5ca2ae713bebe346ba15e8406633a",
653
640
  "checkfunc": python_version,
654
641
  "checkurl": "https://www.python.org/ftp/python/",
655
642
  },
@@ -676,6 +663,6 @@ build = build.copy(
676
663
  builds.add("linux", builder=build)
677
664
 
678
665
  build = build.copy(
679
- version="3.13.2", checksum="da39a3ee5e6b4b0d3255bfef95601890afd80709"
666
+ version="3.13.3", checksum="f26085cf12daef7b60b8a6fe93ef988b9a094aea"
680
667
  )
681
668
  builds.add("linux", builder=build)
relenv/build/windows.py CHANGED
@@ -130,7 +130,7 @@ def build_python(env, dirs, logfp):
130
130
  )
131
131
 
132
132
 
133
- build = builds.add("win32", populate_env=populate_env, version="3.10.16")
133
+ build = builds.add("win32", populate_env=populate_env, version="3.10.17")
134
134
 
135
135
  build.add(
136
136
  "python",
@@ -138,7 +138,7 @@ build.add(
138
138
  download={
139
139
  "url": "https://www.python.org/ftp/python/{version}/Python-{version}.tar.xz",
140
140
  "version": build.version,
141
- "checksum": "401e6a504a956c8f0aab76c4f3ad9df601a83eb1",
141
+ "checksum": "d31d548cd2c5ca2ae713bebe346ba15e8406633a",
142
142
  },
143
143
  )
144
144
 
@@ -222,6 +222,6 @@ build = build.copy(
222
222
  builds.add("win32", builder=build)
223
223
 
224
224
  build = build.copy(
225
- version="3.13.2", checksum="da39a3ee5e6b4b0d3255bfef95601890afd80709"
225
+ version="3.13.3", checksum="f26085cf12daef7b60b8a6fe93ef988b9a094aea"
226
226
  )
227
227
  builds.add("win32", builder=build)
relenv/buildenv.py CHANGED
@@ -51,20 +51,20 @@ def buildenv(relenv_path=None):
51
51
  "TOOLCHAIN_PATH": f"{toolchain}",
52
52
  "TRIPLET": f"{triplet}",
53
53
  "RELENV_PATH": f"{relenv_path}",
54
- "CC": f"{toolchain}/bin/{triplet}-gcc -no-pie",
55
- "CXX": f"{toolchain}/bin/{triplet}-g++ -no-pie",
56
- "CFLAGS": (
57
- # f"-L{relenv_path}/lib -L{toolchain}/{triplet}/sysroot/lib "
54
+ "CC": f"{toolchain}/bin/{triplet}-gcc",
55
+ "CXX": f"{toolchain}/bin/{triplet}-g++",
56
+ "CFLAGS": f"-I{relenv_path}/include -I{toolchain}/sysroot/usr/include",
57
+ "CXXFLAGS": (
58
58
  f"-I{relenv_path}/include "
59
- f"-I{toolchain}/sysroot/usr/include"
59
+ f"-I{toolchain}/{triplet}/sysroot/usr/include "
60
+ f"-L{relenv_path}/lib -L{toolchain}/{triplet}/sysroot/lib "
61
+ f"-Wl,-rpath,{relenv_path}/lib"
60
62
  ),
61
63
  "CPPFLAGS": (
62
- # f"-L{relenv_path}/lib -L{toolchain}/{triplet}/sysroot/lib "
63
- f"-I{relenv_path}/include -I{toolchain}/{triplet}/sysroot/usr/include"
64
+ f"-I{relenv_path}/include " f"-I{toolchain}/{triplet}/sysroot/usr/include"
64
65
  ),
65
66
  "CMAKE_CFLAGS": (
66
- # f"-L{relenv_path}/lib -L{toolchain}/{triplet}/sysroot/lib "
67
- f"-I{relenv_path}/include -I{toolchain}/{triplet}/sysroot/usr/include"
67
+ f"-I{relenv_path}/include " f"-I{toolchain}/{triplet}/sysroot/usr/include"
68
68
  ),
69
69
  "LDFLAGS": (
70
70
  f"-L{relenv_path}/lib -L{toolchain}/{triplet}/sysroot/lib "
relenv/common.py CHANGED
@@ -18,7 +18,7 @@ import threading
18
18
  import time
19
19
 
20
20
  # relenv package version
21
- __version__ = "0.18.1"
21
+ __version__ = "0.18.2"
22
22
 
23
23
  MODULE_DIR = pathlib.Path(__file__).resolve().parent
24
24
 
relenv/runtime.py CHANGED
@@ -70,6 +70,17 @@ def relocate():
70
70
  return relocate.relocate
71
71
 
72
72
 
73
+ def buildenv():
74
+ """
75
+ Late import relenv buildenv.
76
+ """
77
+ if not hasattr(buildenv, "builenv"):
78
+ buildenv.buildenv = path_import(
79
+ "relenv.buildenv", str(pathlib.Path(__file__).parent / "buildenv.py")
80
+ )
81
+ return buildenv.buildenv
82
+
83
+
73
84
  def get_major_version():
74
85
  """
75
86
  Current python major version.
@@ -1024,3 +1035,11 @@ def bootstrap():
1024
1035
  setup_crossroot()
1025
1036
  install_cargo_config()
1026
1037
  sys.meta_path = [importer] + sys.meta_path
1038
+ # XXX This causes our m2crypto test to break
1039
+ # if "RELENV_BUILDENV" in os.environ:
1040
+ # env = buildenv().buildenv()
1041
+ # for key in env:
1042
+ # if key in os.environ:
1043
+ # os.environ[key] = f"{env[key]} {os.environ[key]}"
1044
+ # else:
1045
+ # os.environ[key] = env[key]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: relenv
3
- Version: 0.18.1
3
+ Version: 0.18.2
4
4
  Project-URL: Source Code, https://github.com/saltstack/relative-environment-for-python
5
5
  Project-URL: Documentation, https://relenv.readthedocs.io/en/latest/
6
6
  Project-URL: Changelog, https://relenv.readthedocs.io/en/latest/changelog.html
@@ -8,6 +8,7 @@ Description-Content-Type: text/markdown
8
8
  License-File: LICENSE.md
9
9
  License-File: NOTICE
10
10
  Requires-Dist: ppbt; sys_platform == "linux"
11
+ Dynamic: license-file
11
12
 
12
13
  Relenv
13
14
  ======
@@ -1,26 +1,28 @@
1
1
  relenv/__init__.py,sha256=NyZyghiBF5up_Uq6iJhmBr5HUKzfDtP-yZlU1OS6lQM,101
2
2
  relenv/__main__.py,sha256=otLGprkP5mrzRn-KI7hx3p61enpKdIxJq37iPjHgURY,1330
3
- relenv/buildenv.py,sha256=sKlk37NgwRe3e4E0s6uToNtVnlmEDyuZBFOX9rUqo7s,2973
3
+ relenv/buildenv.py,sha256=GcctZxbH1lfShN8bsbqG-xtrnI4rjWv2PUktHLSYlRo,2946
4
4
  relenv/check.py,sha256=AIGxq_2ZBVVIBO8QiJZHknGILyjmxLgN00TTHlFjNsY,951
5
- relenv/common.py,sha256=VCTjuSCNF_MskH_z1V6Tz-V9ugILNB_Nm3hIcIgQyu4,15216
5
+ relenv/common.py,sha256=ViVbtJCKRgTpnx7pVSic-NebAc_WOXRb_-3kUPJBFrs,15216
6
6
  relenv/create.py,sha256=DFKXtANcM4_axUCHF6Fg1Bhr3xWreLt9jxNYLXVZEsM,3930
7
7
  relenv/fetch.py,sha256=1qQLQuPBpDqvRO7dkjnmeLfo-I0NSA8vFkcMd-Nqbrk,2388
8
8
  relenv/relocate.py,sha256=P5l4s5H4bR8cYm1PEtwp9yJyVfZ5km44jLe0LvL8CL0,11797
9
- relenv/runtime.py,sha256=_U4hx89o2N_V6KY2WTg6VwZzxTB1DHYBQyeWPyg1IjQ,30575
9
+ relenv/runtime.py,sha256=65WYEAGnpH5hZgujaJSaJExhn-VRTdRO9-Y6Qo8X-Do,31163
10
10
  relenv/toolchain.py,sha256=H--mpJnlLR0mWP5djgYss7qDOTdSub7e7rQxa4cPBBE,5858
11
11
  relenv/_scripts/install_vc_build.ps1,sha256=LwzqinKppwht2tacu2jl_gY6gcGWaSq-5Lr1aKduzhs,6423
12
12
  relenv/_toolchain/aarch64/aarch64-linux-gnu-ct-ng.config,sha256=2s_7fX6A3p4380qLiOS78kgijN7GdRHfiW0FArnhjEE,20665
13
13
  relenv/_toolchain/aarch64/x86_64-linux-gnu-ct-ng.config,sha256=-CFXq0SLFCRkKhhMEWraWsGbEv-hBpZl7-Dz0lUMyfs,20774
14
14
  relenv/_toolchain/x86_64/aarch64-linux-gnu-ct-ng.config,sha256=NnkGKF2oIfwOFFFIAQzVgpa-J1gfVM4eOm5VlkLnXqA,20672
15
15
  relenv/_toolchain/x86_64/x86_64-linux-gnu-ct-ng.config,sha256=pCdwXWcd0wEV-dfAIccN_tkpJshRjSyx_RByfcdakF4,20791
16
- relenv/build/__init__.py,sha256=RvEb7YnDMNzMWsTpTyPYrW_QMdomuMs1OWTSiWxxSy4,5157
17
- relenv/build/common.py,sha256=qwe-kdkIrZLnMmJa79wx8JhLW_mD1pCcCvs4XwvWMsw,48797
18
- relenv/build/darwin.py,sha256=djvglAAXeG3aXlL_0APDJV73I8U3kALPw3GyJjfD94M,4002
19
- relenv/build/linux.py,sha256=hwYdRAnlS80ztjqUHnx60KVFF6dALSApNe0Uh1hbHSg,20768
20
- relenv/build/windows.py,sha256=1R5vLpc7gWF4RJY-MzgLF_jnMRUMF_X9aqHXYmWRQaM,6169
16
+ relenv/build/__init__.py,sha256=Mk5Cn1W7C7ZGGbNxCCcQNMk4AHNvMByPSZ8akpnq9YI,5373
17
+ relenv/build/common.py,sha256=1pULuR3DPifB0H3wKGCofwGgDWuLeSSsea_8buWnAYI,49027
18
+ relenv/build/darwin.py,sha256=57riuVU12oydmVp5Mi3Tys4cqai55uHF0vHtdKxHXWc,3920
19
+ relenv/build/linux.py,sha256=TCI3NH_Yjzxizb8529qlO7pCxVleptRYcGtMzKUx7-0,19193
20
+ relenv/build/windows.py,sha256=yYm-8jziiUMJb6SVKGQZpHtP6wQmDK06BYC7HWgwzwA,6169
21
+ relenv-0.18.2.dist-info/licenses/LICENSE.md,sha256=T0SRk3vJM1YcAJjDz9vsX9gsCRatAVSBS7LeU0tklRM,9919
22
+ relenv-0.18.2.dist-info/licenses/NOTICE,sha256=Ns0AybPHBsgJKJJfjE6YnGgWEQQ9F7lQ6QNlYLlQT3E,548
21
23
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
24
  tests/conftest.py,sha256=VfuB1T7Tjoy2mhKpwKUJNIoq9RX69sRvRXIxw_R09qU,2040
23
- tests/test_build.py,sha256=VQa_hx0Epp5zI0qEWjXGFlzJ-y6Xri5vyH4wWTkFEwQ,1450
25
+ tests/test_build.py,sha256=vuUxCTGQa1FcoeS3ls-7e9v2ry9sgWJHzKWMYKKrwNo,1407
24
26
  tests/test_common.py,sha256=mCKBQMQYZqoq47T7tk9gRxfK64Be_OfXBa_t_RKTZ4U,6590
25
27
  tests/test_create.py,sha256=gnwNukmYJR02CunQBH6JJ3ClUYgjzBWlOm0SJ_rtJkI,1584
26
28
  tests/test_downloads.py,sha256=zdULspcHcepOVkEQKOMr0pw02t9GRiBCcIP72So0EYc,3302
@@ -28,11 +30,9 @@ tests/test_fips_photon.py,sha256=pR6MxzdT1vyaC-nN609fy7Nl68eyqOo46BUdluOXKjI,124
28
30
  tests/test_relocate.py,sha256=_3Eb22qhzWvMnLIgPCqO-t_WZ-hklSMfy8GBTrdjCf0,8854
29
31
  tests/test_runtime.py,sha256=n_gTiQqAgO_Vqk6Xf_2Hi3gIkBn_lhDqoovOiQ5fxG8,626
30
32
  tests/test_toolchain.py,sha256=02ZxSj72fMTINVl-PHhBkS6eLGWKvwO3nweHYEt4SMQ,4379
31
- tests/test_verify_build.py,sha256=50wawHqH-F-JPZW4HVgccuEtaEKAqKIABR3960CzI5s,40090
32
- relenv-0.18.1.dist-info/LICENSE.md,sha256=T0SRk3vJM1YcAJjDz9vsX9gsCRatAVSBS7LeU0tklRM,9919
33
- relenv-0.18.1.dist-info/METADATA,sha256=C4ycXCGCAnLRpCNHfNbMkiiAqACNtaj-jBR4f7i5k1U,1315
34
- relenv-0.18.1.dist-info/NOTICE,sha256=Ns0AybPHBsgJKJJfjE6YnGgWEQQ9F7lQ6QNlYLlQT3E,548
35
- relenv-0.18.1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
36
- relenv-0.18.1.dist-info/entry_points.txt,sha256=dO66nWPPWl8ALWWnZFlHKAo6mfPFuQid7purYWL2ddc,48
37
- relenv-0.18.1.dist-info/top_level.txt,sha256=P4Ro6JLZE53ZdsQ76o2OzBcpb0MaVJmbfr0HAn9WF8M,13
38
- relenv-0.18.1.dist-info/RECORD,,
33
+ tests/test_verify_build.py,sha256=b6aGdPUK-wHMRL1A5NDnJ2v5GjiletfFCe1oFPll-LU,41182
34
+ relenv-0.18.2.dist-info/METADATA,sha256=TvSF2zY2FqJSI7_CbjE6rErKcY07HkL2kMHwV98W-QY,1337
35
+ relenv-0.18.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
36
+ relenv-0.18.2.dist-info/entry_points.txt,sha256=dO66nWPPWl8ALWWnZFlHKAo6mfPFuQid7purYWL2ddc,48
37
+ relenv-0.18.2.dist-info/top_level.txt,sha256=P4Ro6JLZE53ZdsQ76o2OzBcpb0MaVJmbfr0HAn9WF8M,13
38
+ relenv-0.18.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tests/test_build.py CHANGED
@@ -33,7 +33,6 @@ def test_builder_defaults_linux():
33
33
  assert builder.toolchain == DATA_DIR / "toolchain" / "x86_64-linux-gnu"
34
34
  assert callable(builder.build_default)
35
35
  assert callable(builder.populate_env)
36
- assert builder.force_download is False
37
36
  assert builder.recipies == {}
38
37
 
39
38
 
@@ -107,6 +107,11 @@ def test_pip_install_salt_git(pipexec, build, build_dir, pyexec, build_version):
107
107
  if sys.platform == "darwin" and "3.13" in build_version:
108
108
  pytest.xfail("Salt does not work with 3.13 on macos yet")
109
109
 
110
+ # if sys.platform == "linux":
111
+ # subprocess.run(
112
+ # [pipexec, "--upgrade", "install", "setuptools>=72.2.0"], check=True
113
+ # )
114
+
110
115
  env = os.environ.copy()
111
116
  env["RELENV_BUILDENV"] = "yes"
112
117
  if sys.platform == "linux" and shutil.which("git"):
@@ -339,31 +344,35 @@ def test_pip_install_salt_w_package_requirements(
339
344
  "23.2.0",
340
345
  "25.1.2",
341
346
  "26.2.0",
347
+ "26.4.0",
342
348
  ],
343
349
  )
344
- def test_pip_install_pyzmq(pipexec, pyzmq_version, build_version, arch):
350
+ def test_pip_install_pyzmq(pipexec, pyzmq_version, build_version, arch, build):
345
351
 
346
352
  if pyzmq_version == "23.2.0" and "3.12" in build_version:
347
353
  pytest.xfail(f"{pyzmq_version} does not install on 3.12")
348
354
 
355
+ if pyzmq_version == "23.2.0" and "3.13" in build_version:
356
+ pytest.xfail(f"{pyzmq_version} does not install on 3.13")
357
+
349
358
  if pyzmq_version == "23.2.0" and sys.platform == "darwin":
350
359
  pytest.xfail("pyzmq 23.2.0 fails on macos arm64")
351
360
 
352
- if sys.platform == "win32" and pyzmq_version == "25.1.2":
353
- pytest.xfail("pyzmq 25.1.2 fails on windows")
354
-
355
- if sys.platform == "win32" and pyzmq_version == "23.2.0":
356
- pytest.xfail("vcredist not found as of 9/9/24")
357
-
358
- if sys.platform == "win32" and pyzmq_version == "26.2.0":
361
+ if pyzmq_version == "23.2.0" and sys.platform == "win32":
359
362
  pytest.xfail("vcredist not found as of 9/9/24")
360
363
 
361
- if pyzmq_version == "23.2.0" and "3.13" in build_version:
362
- pytest.xfail(f"{pyzmq_version} does not install on 3.13")
363
-
364
364
  if pyzmq_version == "25.1.2" and "3.13" in build_version:
365
365
  pytest.xfail(f"{pyzmq_version} does not install on 3.13")
366
366
 
367
+ if pyzmq_version == "25.1.2" and sys.platform == "win32":
368
+ pytest.xfail("pyzmq 25.1.2 fails on windows")
369
+
370
+ if pyzmq_version == "26.2.0" and sys.platform == "win32":
371
+ pytest.xfail("vcredist not found as of 9/9/24")
372
+
373
+ if pyzmq_version == "26.4.0" and sys.platform == "win32":
374
+ pytest.xfail("Needs troubleshooting 4/12/25")
375
+
367
376
  env = os.environ.copy()
368
377
 
369
378
  p = subprocess.run(
@@ -404,6 +413,21 @@ def test_pip_install_pyzmq(pipexec, pyzmq_version, build_version, arch):
404
413
  )
405
414
  assert p.returncode == 0, "Failed to pip install package requirements"
406
415
 
416
+ if shutil.which("docker"):
417
+ subprocess.run(
418
+ [
419
+ "docker",
420
+ "run",
421
+ "-v",
422
+ f"{build}:/test",
423
+ "amazonlinux:2",
424
+ "/test/bin/python3",
425
+ "-c",
426
+ "import zmq",
427
+ ],
428
+ check=True,
429
+ )
430
+
407
431
 
408
432
  def test_pip_install_cryptography(pipexec):
409
433
  packages = [
@@ -553,18 +577,35 @@ def test_pip_install_m2crypto_system_ssl(pipexec, pyexec):
553
577
 
554
578
 
555
579
  @pytest.mark.skip_unless_on_linux
556
- def test_pip_install_m2crypto_relenv_ssl(pipexec, pyexec, build):
580
+ @pytest.mark.parametrize(
581
+ "m2crypto_version",
582
+ [
583
+ "0.38.0",
584
+ "0.44.0",
585
+ ],
586
+ )
587
+ def test_pip_install_m2crypto_relenv_ssl(
588
+ m2crypto_version, pipexec, pyexec, build, build_version, minor_version
589
+ ):
590
+ if m2crypto_version == "0.38.0" and minor_version in ["3.12", "3.13"]:
591
+ pytest.xfail("Fails due to no distutils")
557
592
  env = os.environ.copy()
558
593
  env["RELENV_BUILDENV"] = "yes"
559
594
  env["RELENV_DEBUG"] = "yes"
560
595
  env["LDFLAGS"] = f"-L{build}lib"
561
- env["CFLAGS"] = f"-I{build}/include"
562
- env["SWIG_FEATURES"] = f"-I{build}/include"
596
+ env["CFLAGS"] = f"-I{build}/include -I{build}/include/python{minor_version}"
597
+ env["SWIG_FEATURES"] = f"-I{build}/include -I{build}/include/python{minor_version}"
563
598
  p = subprocess.run(
564
599
  ["swig", "-version"],
565
600
  )
566
601
  p = subprocess.run(
567
- [str(pipexec), "install", "m2crypto", "--no-cache-dir", "-v"],
602
+ [
603
+ str(pipexec),
604
+ "install",
605
+ f"m2crypto=={m2crypto_version}",
606
+ "--no-cache-dir",
607
+ "-v",
608
+ ],
568
609
  env=env,
569
610
  stderr=subprocess.PIPE,
570
611
  )