scons-xo-exts-lib 1.0.0__py3-none-any.whl → 1.0.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.

Potentially problematic release.


This version of scons-xo-exts-lib might be problematic. Click here for more details.

@@ -11,40 +11,98 @@ import subprocess
11
11
  from SCons.Script import Builder
12
12
  from SCons.Script import Environment
13
13
 
14
+ from scons_xo_exts_lib.BuildSupport import NodeMangling
14
15
 
15
- def _get_dune_project(sources: list):
16
- for source in sources:
17
- source_str = str(source)
18
16
 
19
- if "dune-project" in source_str:
20
- return source_str
17
+ def _get_dune_project(source: list):
18
+ for source_node in source:
19
+ path = source_node.abspath
21
20
 
22
- raise RuntimeError("No dune-project in specified sources")
21
+ if "dune-project" in path:
22
+ return path
23
23
 
24
+ raise RuntimeError("No dune-project in specified sources")
24
25
 
25
- def dune_build_action(target, source, env) -> int:
26
- dune_project = _get_dune_project(sources=source)
27
- dune_base_dir = os.path.dirname(dune_project)
28
26
 
27
+ def _dune_command(env: Environment, args_string: str, cwd: str) -> int:
29
28
  dune_exe = env.get("DUNE_EXE", "dune")
30
29
  dune_flags = env.get("DUNE_FLAGS", "--display=short")
31
30
 
32
- cmd = f"{dune_exe} build {dune_flags} @install"
31
+ command = f"{dune_exe} {args_string} {dune_flags}"
32
+
33
33
  result = subprocess.run(
34
- args=cmd,
34
+ args=command,
35
35
  capture_output=False,
36
36
  check=False,
37
- cwd=dune_base_dir,
37
+ cwd=cwd,
38
38
  shell=True,
39
39
  )
40
40
 
41
41
  return result.returncode
42
42
 
43
43
 
44
+ def _dune_get_install_prefix(target) -> str:
45
+ """
46
+ Guess the install prefix for "dune install --prefix=...".
47
+ """
48
+
49
+ separators = ["/bin/", "/lib/"]
50
+
51
+ target_node = NodeMangling.get_first_node(target)
52
+ path = str(target_node)
53
+
54
+ try:
55
+ for separator in separators:
56
+ if separator in path:
57
+ substrings = path.split(sep=separator, maxsplit=1)
58
+ prefix = substrings[0]
59
+
60
+ return os.path.abspath(prefix)
61
+
62
+ raise RuntimeError("Separator not found in target")
63
+
64
+ except Exception:
65
+ raise RuntimeError(f"Could not guess prefix, given: {path}")
66
+
67
+
68
+ def dune_build_action(target, source, env) -> int:
69
+ dune_project = _get_dune_project(source=source)
70
+ dune_base_dir = os.path.dirname(dune_project)
71
+
72
+ result = _dune_command(
73
+ env=env,
74
+ args_string="build @install",
75
+ cwd=dune_base_dir,
76
+ )
77
+
78
+ return result
79
+
80
+
81
+ def dune_image_action(target, source, env) -> int:
82
+ dune_project = _get_dune_project(source=source)
83
+ dune_base_dir = os.path.dirname(dune_project)
84
+
85
+ install_prefix = _dune_get_install_prefix(target=target)
86
+
87
+ result = _dune_command(
88
+ env=env,
89
+ args_string=f"install --prefix={install_prefix}",
90
+ cwd=dune_base_dir,
91
+ )
92
+
93
+ return result
94
+
95
+
44
96
  def generate(env: Environment) -> None:
45
97
  dune_binary_builder = Builder(action=dune_build_action)
98
+ dune_image_builder = Builder(action=dune_image_action)
46
99
 
47
- env.Append(BUILDERS={"DuneBinary": dune_binary_builder})
100
+ env.Append(
101
+ BUILDERS={
102
+ "DuneBinary": dune_binary_builder,
103
+ "DuneImage": dune_image_builder,
104
+ },
105
+ )
48
106
 
49
107
 
50
108
  def exists(env: Environment):
@@ -19,7 +19,7 @@ def pandoc_action(target, source, env):
19
19
  inp = NodeMangling.get_first_node(source).abspath
20
20
  out = NodeMangling.get_first_node(target).abspath
21
21
 
22
- cmd = f"{pandoc_exe} {pandoc_flags} -o {inp} {out}"
22
+ cmd = f"{pandoc_exe} {pandoc_flags} -o {out} {inp}"
23
23
  result = subprocess.run(
24
24
  args=cmd,
25
25
  capture_output=False,
@@ -31,9 +31,9 @@ def pandoc_action(target, source, env):
31
31
 
32
32
 
33
33
  def generate(env):
34
- pandoc_binary_builder = Builder(action=pandoc_action)
34
+ pandoc_file_builder = Builder(action=pandoc_action)
35
35
 
36
- env.Append(BUILDERS={"PandocFile": pandoc_binary_builder})
36
+ env.Append(BUILDERS={"PandocFile": pandoc_file_builder})
37
37
 
38
38
 
39
39
  def exists(env):
scons_xo_exts_lib/Read.py CHANGED
@@ -30,7 +30,7 @@ def read_line(file_path: str) -> str:
30
30
 
31
31
  lines = read_lines(file_path)
32
32
 
33
- return lines[0]
33
+ return lines[0].strip()
34
34
 
35
35
 
36
36
  def read_version(base_path: str) -> str:
@@ -4,5 +4,5 @@
4
4
  Scons extensions library by XGQT.
5
5
  """
6
6
 
7
- __version__ = "1.0.0"
7
+ __version__ = "1.0.2"
8
8
  __description__ = "Scons extensions library by XGQT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scons-xo-exts-lib
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Scons extensions library by XGQT.
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: scons>=4.8.1
@@ -1,7 +1,7 @@
1
1
  scons_xo_exts_lib/Find.py,sha256=J5VcXfBjg9kW_o4v8S3ugnv-JKAV6wzD6xrIw1jMerA,767
2
2
  scons_xo_exts_lib/GenericExtensions.py,sha256=c56PZZuDHdche-x1ERC6gIcIENAP8ZD20EQkxvTXAz4,916
3
- scons_xo_exts_lib/Read.py,sha256=sXnCuW1-gMX-MeIpCvx45N8Sqnr8Fb4UsJfGdB8reeA,1042
4
- scons_xo_exts_lib/__init__.py,sha256=Eza5CXe9vm2-z7K6-duPg2qiceQBWKD0uy6Dend33lY,141
3
+ scons_xo_exts_lib/Read.py,sha256=2W-NIeph4qgWC0ZbhMMKIsE0f8s3nGZZQKYBJGHhi24,1050
4
+ scons_xo_exts_lib/__init__.py,sha256=kmNr_DmHM8t3z9CTZP73klGl0_qiGbFTolYne__r6kM,141
5
5
  scons_xo_exts_lib/Actions/Uv.py,sha256=kdocY_tAvzA4awBs4f6djy4Hku4alXh_L7Vy7llNprY,1172
6
6
  scons_xo_exts_lib/Actions/__init__.py,sha256=-JIt3g1eBf4bVQNNQd4JBeQNA7o0LK0W9tYKKX_r5s8,22
7
7
  scons_xo_exts_lib/BuildSupport/Make.py,sha256=JG7Wi_G9vQeU9UyKTnN8D8akzmrhFYhsQH2zDmO1-u8,472
@@ -11,13 +11,13 @@ scons_xo_exts_lib/Builders/__init__.py,sha256=-JIt3g1eBf4bVQNNQd4JBeQNA7o0LK0W9t
11
11
  scons_xo_exts_lib/Builders/bazel.py,sha256=eFJZysWV4v63RapZI2Xg0S1FgDJfLbpYtGElx6qENj8,866
12
12
  scons_xo_exts_lib/Builders/cmake.py,sha256=FoWPK-GUv56aswFdrE6JWqtTIKE2oymPKi_C2ZmNHGo,863
13
13
  scons_xo_exts_lib/Builders/dotnet.py,sha256=AD-OGbQuvCd1LuJSDtfdCE1OOKB8NQ4_hujaEvfZMbk,4426
14
- scons_xo_exts_lib/Builders/dune.py,sha256=tO_gMTnEDanr4C9MDWG2CcggByWaaXCjYHyhDiH1pFY,1277
14
+ scons_xo_exts_lib/Builders/dune.py,sha256=cdPwunYSKM_UCm_OD4nBv6wMDo_AHVoG8kt5TX_KCg4,2681
15
15
  scons_xo_exts_lib/Builders/elisp.py,sha256=T7j4z6mvCXz1gd9oPoOLqOiVE3YLoY3q6y5wwhZAw8U,2723
16
16
  scons_xo_exts_lib/Builders/make.py,sha256=fa_cZjR-lTVqFGLjm5EyDBwVxcaaZCL-2h_QKb6RCzU,848
17
17
  scons_xo_exts_lib/Builders/ninja.py,sha256=FEOMGfTbMWOE2cSlOu9FPXJjYw-uOCY2tfSM-5XFao4,863
18
18
  scons_xo_exts_lib/Builders/orgmode.py,sha256=iyu4O0xWWVZqx_LNhBb5i1Dt30iuE8VpwmmDNQSMJ4U,1273
19
- scons_xo_exts_lib/Builders/pandoc.py,sha256=CAPyV9K1gdL_XWFodXpw8bEiFhu2_CvV8qNHWdKbifA,985
19
+ scons_xo_exts_lib/Builders/pandoc.py,sha256=XJO5RVReYTsaCnqzsIvgTYOQo7ylBWP3rkIrN2FrNKI,981
20
20
  scons_xo_exts_lib/Builders/racket.py,sha256=yDj_YYtVk15SqrXrjLb8efbYjR8j6VGpLU2pYAVID5I,3171
21
- scons_xo_exts_lib-1.0.0.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82
22
- scons_xo_exts_lib-1.0.0.dist-info/METADATA,sha256=DbEXjnGDrH6ta2z9kKJJF6Dy4_wARbg55-QV5AXbxL4,156
23
- scons_xo_exts_lib-1.0.0.dist-info/RECORD,,
21
+ scons_xo_exts_lib-1.0.2.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82
22
+ scons_xo_exts_lib-1.0.2.dist-info/METADATA,sha256=rOE3D8VLLXOn5JxP7IjVpwkPnfiIxN9a_9-p-Sh0WPo,156
23
+ scons_xo_exts_lib-1.0.2.dist-info/RECORD,,