omdev 0.0.0.dev204__py3-none-any.whl → 0.0.0.dev206__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omdev/.manifests.json CHANGED
@@ -23,6 +23,18 @@
23
23
  }
24
24
  }
25
25
  },
26
+ {
27
+ "module": ".cc.__main__",
28
+ "attr": "_CLI_MODULE",
29
+ "file": "omdev/cc/__main__.py",
30
+ "line": 4,
31
+ "value": {
32
+ "$.cli.types.CliModule": {
33
+ "cmd_name": "cc",
34
+ "mod_name": "omdev.cc.__main__"
35
+ }
36
+ }
37
+ },
26
38
  {
27
39
  "module": ".cexts.cmake",
28
40
  "attr": "_CLI_MODULE",
@@ -227,18 +239,6 @@
227
239
  }
228
240
  }
229
241
  },
230
- {
231
- "module": ".tools.cc",
232
- "attr": "_CLI_MODULE",
233
- "file": "omdev/tools/cc.py",
234
- "line": 76,
235
- "value": {
236
- "$.cli.types.CliModule": {
237
- "cmd_name": "cc",
238
- "mod_name": "omdev.tools.cc"
239
- }
240
- }
241
- },
242
242
  {
243
243
  "module": ".tools.cloc",
244
244
  "attr": "_CLI_MODULE",
omdev/amalg/__main__.py CHANGED
@@ -6,6 +6,6 @@ _CLI_MODULE = CliModule('amalg', __name__)
6
6
 
7
7
 
8
8
  if __name__ == '__main__':
9
- from .main import _main
9
+ from .main import _main # noqa
10
10
 
11
11
  _main()
omdev/cache/data/cache.py CHANGED
@@ -27,7 +27,7 @@ from omlish import marshal as msh
27
27
  from omlish.formats import json
28
28
  from omlish.os.files import touch
29
29
 
30
- from ...git.subtrees import git_clone_subtree
30
+ from ...git.shallow import git_shallow_clone
31
31
  from .actions import Action
32
32
  from .actions import ExtractAction
33
33
  from .manifests import Manifest
@@ -141,14 +141,11 @@ class Cache:
141
141
  self._fetch_url(url, os.path.join(data_dir, out_file))
142
142
 
143
143
  elif isinstance(spec, GitSpec):
144
- if not spec.subtrees:
145
- raise NotImplementedError
146
-
147
144
  tmp_dir = tempfile.mkdtemp()
148
145
 
149
146
  log.info('Cloning git repo: %s -> %s', spec.url, tmp_dir)
150
147
 
151
- git_clone_subtree(
148
+ git_shallow_clone(
152
149
  base_dir=tmp_dir,
153
150
  repo_url=spec.url,
154
151
  repo_dir='data',
omdev/cache/data/specs.py CHANGED
@@ -50,7 +50,7 @@ class GitSpec(Spec):
50
50
  branch: str | None = dc.field(default=None, kw_only=True)
51
51
  rev: str | None = dc.field(default=None, kw_only=True)
52
52
 
53
- subtrees: ta.Sequence[str] = dc.xfield(default=None, kw_only=True, coerce=_maybe_sorted_strs)
53
+ subtrees: ta.Sequence[str] | None = dc.xfield(default=None, kw_only=True, coerce=_maybe_sorted_strs)
54
54
 
55
55
 
56
56
  ##
omdev/cc/__init__.py ADDED
File without changes
omdev/cc/__main__.py ADDED
@@ -0,0 +1,11 @@
1
+ from ..cli import CliModule
2
+
3
+
4
+ # @omlish-manifest
5
+ _CLI_MODULE = CliModule('cc', __name__)
6
+
7
+
8
+ if __name__ == '__main__':
9
+ from .cli import _main # noqa
10
+
11
+ _main()
omdev/cc/cli.py ADDED
@@ -0,0 +1,143 @@
1
+ """
2
+ //$(which true); exec om cc run "$0" "$@"
3
+ or
4
+ //usr/bin/true; exec om cc run "$0" "$@"
5
+
6
+ See: https://gist.github.com/jdarpinian/1952a58b823222627cc1a8b83a7aa4e2
7
+
8
+ ==
9
+
10
+ Freestanding options:
11
+
12
+ //usr/bin/env clang++ -std=c++20 -o ${X=`mktemp`} "$0" && exec -a "$0" "$X" "$@"
13
+ //usr/bin/env clang++ -std=c++20 -o ${D=`mktemp -d`}/x "$0" && ${D}/x ${@:1}; R=$?; rm -rf ${D}; exit $R
14
+ //$(which true); clang++ -std=c++20 -o ${D=`mktemp -d`}/x ${0} && ${D}/x ${@:1}; R=${?}; rm -rf ${D}; exit ${R}
15
+
16
+ ==
17
+
18
+ TODO:
19
+ - standard deps - cdeps.toml
20
+ - cext interop
21
+ - gen cmake
22
+ """
23
+ import os
24
+ import shlex
25
+ import shutil
26
+ import subprocess
27
+ import tempfile
28
+ import typing as ta
29
+
30
+ from omlish import check
31
+ from omlish.argparse import all as ap
32
+
33
+ from .. import magic
34
+ from ..cache import data as dcache
35
+
36
+
37
+ class Cli(ap.Cli):
38
+ @ap.cmd(
39
+ ap.arg('--cwd'),
40
+ ap.arg('src-file'),
41
+ ap.arg('args', nargs=ap.REMAINDER),
42
+ )
43
+ def run(self) -> int:
44
+ src_file = self.args.src_file
45
+
46
+ #
47
+
48
+ with open(src_file) as f:
49
+ src = f.read()
50
+
51
+ src_magics = magic.find_magic( # noqa
52
+ magic.C_MAGIC_STYLE,
53
+ src.splitlines(),
54
+ file=src_file,
55
+ preparer=magic.json_magic_preparer,
56
+ )
57
+
58
+ include_dirs: list[str] = []
59
+
60
+ for src_magic in src_magics:
61
+ if src_magic.key == '@omlish-cdeps':
62
+ for dep in check.isinstance(src_magic.prepared, ta.Sequence):
63
+ dep_git = dep['git']
64
+ dep_spec = dcache.GitSpec(
65
+ url=dep_git['url'],
66
+ rev=dep_git['rev'],
67
+ subtrees=dep_git.get('subtrees'),
68
+ )
69
+ dep_dir = dcache.default().get(dep_spec)
70
+ for dep_inc in dep.get('include', []):
71
+ inc_dir = os.path.join(dep_dir, dep_inc)
72
+ check.state(os.path.isdir(inc_dir))
73
+ include_dirs.append(inc_dir)
74
+
75
+ else:
76
+ raise KeyError(src_magic.key)
77
+
78
+ #
79
+
80
+ src_file_name = os.path.basename(src_file)
81
+
82
+ sh_parts: list[str] = [
83
+ 'clang++',
84
+ ]
85
+
86
+ for inc_dir in include_dirs:
87
+ sh_parts.append(f'-I{shlex.quote(inc_dir)}')
88
+
89
+ if cflags := os.environ.get('CFLAGS'):
90
+ sh_parts.append(cflags) # Explicitly shell-unquoted
91
+
92
+ sh_parts.extend([
93
+ '-std=c++20',
94
+ shlex.quote(os.path.abspath(src_file)),
95
+ '-o',
96
+ shlex.quote(src_file_name),
97
+ ])
98
+
99
+ #
100
+
101
+ tmp_dir = tempfile.mkdtemp()
102
+ try:
103
+ proc = subprocess.run( # noqa
104
+ ' '.join(sh_parts),
105
+ cwd=tmp_dir,
106
+ shell=True,
107
+ check=False,
108
+ )
109
+
110
+ if rc := proc.returncode:
111
+ return rc
112
+
113
+ exe_file = os.path.join(tmp_dir, src_file_name)
114
+ check.state(os.path.isfile(exe_file))
115
+
116
+ proc = subprocess.run(
117
+ [
118
+ exe_file,
119
+ *self.args.args,
120
+ ],
121
+ cwd=self.args.cwd,
122
+ check=False,
123
+ )
124
+
125
+ finally:
126
+ shutil.rmtree(tmp_dir)
127
+
128
+ return proc.returncode
129
+
130
+ # @ap.cmd(
131
+ # ap.arg('src-file', nargs='+'),
132
+ # )
133
+ # def add_shebang(self) -> None:
134
+ # # //$(which true); exec om cc run "$0" "$@"
135
+ # print(self.args.src_file)
136
+
137
+
138
+ def _main() -> None:
139
+ Cli().cli_run_and_exit()
140
+
141
+
142
+ if __name__ == '__main__':
143
+ _main()
@@ -8,7 +8,7 @@ from omlish.subprocesses import subprocesses
8
8
 
9
9
 
10
10
  @dc.dataclass(frozen=True)
11
- class GitSubtreeCloner:
11
+ class GitShallowCloner:
12
12
  base_dir: str
13
13
  repo_url: str
14
14
  repo_dir: str
@@ -37,14 +37,14 @@ class GitSubtreeCloner:
37
37
  '-c', 'advice.detachedHead=false',
38
38
  ]
39
39
 
40
- yield GitSubtreeCloner.Command(
40
+ yield GitShallowCloner.Command(
41
41
  cmd=(
42
42
  'git',
43
43
  *git_opts,
44
44
  'clone',
45
45
  '-n',
46
46
  '--depth=1',
47
- '--filter=tree:0',
47
+ *(['--filter=tree:0'] if self.repo_subtrees is not None else []),
48
48
  *(['-b', self.branch] if self.branch else []),
49
49
  '--single-branch',
50
50
  self.repo_url,
@@ -54,19 +54,20 @@ class GitSubtreeCloner:
54
54
  )
55
55
 
56
56
  rd = os.path.join(self.base_dir, self.repo_dir)
57
- yield GitSubtreeCloner.Command(
58
- cmd=(
59
- 'git',
60
- *git_opts,
61
- 'sparse-checkout',
62
- 'set',
63
- '--no-cone',
64
- *(self.repo_subtrees or []),
65
- ),
66
- cwd=rd,
67
- )
57
+ if self.repo_subtrees is not None:
58
+ yield GitShallowCloner.Command(
59
+ cmd=(
60
+ 'git',
61
+ *git_opts,
62
+ 'sparse-checkout',
63
+ 'set',
64
+ '--no-cone',
65
+ *self.repo_subtrees,
66
+ ),
67
+ cwd=rd,
68
+ )
68
69
 
69
- yield GitSubtreeCloner.Command(
70
+ yield GitShallowCloner.Command(
70
71
  cmd=(
71
72
  'git',
72
73
  *git_opts,
@@ -77,7 +78,7 @@ class GitSubtreeCloner:
77
78
  )
78
79
 
79
80
 
80
- def git_clone_subtree(
81
+ def git_shallow_clone(
81
82
  *,
82
83
  base_dir: str,
83
84
  repo_url: str,
@@ -86,7 +87,7 @@ def git_clone_subtree(
86
87
  rev: ta.Optional[str] = None,
87
88
  repo_subtrees: ta.Optional[ta.Sequence[str]] = None,
88
89
  ) -> None:
89
- for cmd in GitSubtreeCloner(
90
+ for cmd in GitShallowCloner(
90
91
  base_dir=base_dir,
91
92
  repo_url=repo_url,
92
93
  repo_dir=repo_dir,
@@ -9,7 +9,10 @@ if [ -z "${VENV}" ] ; then
9
9
  fi
10
10
  fi
11
11
 
12
- SCRIPT_DIR=$(dirname "$0")
12
+ SCRIPT_PATH=$(cd -- "$(dirname -- "$0")" && pwd)
13
+ SCRIPT_PATH="$SCRIPT_PATH/$(basename -- "$0")"
14
+ SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
15
+
13
16
  VENV_PYTHON_PATH="$SCRIPT_DIR/.venvs/$VENV/bin/python"
14
17
  if [ -f "$VENV_PYTHON_PATH" ] ; then
15
18
  PYTHON="$VENV_PYTHON_PATH"
@@ -19,7 +22,7 @@ else
19
22
  PYTHON=python
20
23
  fi
21
24
 
22
- export PYTHONPATH="$PYTHONPATH:."
25
+ export PYTHONPATH="$PYTHONPATH:$SCRIPT_DIR:."
23
26
 
24
27
  if [ $# -eq 0 ] && "$PYTHON" -c "import IPython" 2> /dev/null ; then
25
28
  exec "$PYTHON" -m IPython
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev204
3
+ Version: 0.0.0.dev206
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev204
15
+ Requires-Dist: omlish==0.0.0.dev206
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omdev/.manifests.json,sha256=TJ4UHHkpFJ99ixc049nQc4Bru6a-WP1iVL0h5xhEQsA,8812
1
+ omdev/.manifests.json,sha256=bXzztz3aC_of83Npb51gvXmqTLHQlSxd2c3IcO5kkS4,8820
2
2
  omdev/__about__.py,sha256=n5x-SO70OgbDQFzQ1d7sZDVMsnkQc4PxQZPFaIQFa0E,1281
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
@@ -13,7 +13,7 @@ omdev/tagstrings.py,sha256=hrinoRmYCFMt4WYCZAYrocVYKQvIApNGKbJaGz8whqs,5334
13
13
  omdev/tokens.py,sha256=zh2TCAfCbcq8ZnoVdQ824jrTiwNy3XJ_oCqlZpLpcCY,1574
14
14
  omdev/wheelfile.py,sha256=yfupGcGkbFlmzGzKU64k_vmOKpaKnUlDWxeGn2KdekU,10005
15
15
  omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- omdev/amalg/__main__.py,sha256=QKvvBlPJalD8Ta6ry7cxChH0lHFj78SKHMMHGUtpFYI,162
16
+ omdev/amalg/__main__.py,sha256=1sZH8SLAueWxMxK9ngvndUW3L_rw7f-s_jK3ZP1yAH8,170
17
17
  omdev/amalg/gen.py,sha256=wp5CmwMUibcaIJrvwE_gQ1kInhWWgpvRntAI0ONKsQg,5995
18
18
  omdev/amalg/imports.py,sha256=KNyuu0zWW63gOSsy4cl1mPs23YVAlICbaF1yEPF147o,2072
19
19
  omdev/amalg/main.py,sha256=a3QoSRInHhbt1vwQmfB5MXJJnse2Ar9gIgWVxqK93lo,4031
@@ -37,11 +37,14 @@ omdev/cache/compute/storage.py,sha256=woCUqHg8ZrwLEejRG3zu1L5ZXxGNNXveh3E8FnlEkj
37
37
  omdev/cache/compute/types.py,sha256=NpCTTJHDmpERjrbO6dh9TEzHuP6-vOuoX3ym9sA0ukc,2639
38
38
  omdev/cache/data/__init__.py,sha256=SQXtugLceRif463rcoklpQ33pxYLgEIm0xiI6NvOI6M,301
39
39
  omdev/cache/data/actions.py,sha256=KVYb3tBYP5c0g-wK1bXih_K7L0ER9UINKChhfc7mwKQ,1071
40
- omdev/cache/data/cache.py,sha256=mxO3RqEhj1UbPgnhSQGZZ5mSLy_r5f9O05sahlP29Q4,7742
40
+ omdev/cache/data/cache.py,sha256=aZJotj9kpVHBK7O0UdqMdeV7PtCqf9Rd8tqIwgWtQlQ,7664
41
41
  omdev/cache/data/consts.py,sha256=d6W_aeMqgah6PmPYi9RA8Be54oQ4BcNCy8kDQ7FlB_Q,26
42
42
  omdev/cache/data/defaults.py,sha256=HrapVUIf9Ozu3qSfRPyQj-vx-dz6Yyedjb-k3yV4CW8,277
43
43
  omdev/cache/data/manifests.py,sha256=4BparztsMZo9DDVVPhv6iv5g4kK7QAi8Vqtj3PbKkco,989
44
- omdev/cache/data/specs.py,sha256=0a9NPJ76Wz69s94KlNbr1Xma3UQ0z2oCAQN7s6uXe4w,2497
44
+ omdev/cache/data/specs.py,sha256=8o0b7goqvnezB_lD46w4ySp2KMZ8In3nqbtmfUT7v6c,2504
45
+ omdev/cc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ omdev/cc/__main__.py,sha256=n7gxSRYZ1QZOUxQPCT0_n9Xl26zi2UIvCwyGW_m67nA,166
47
+ omdev/cc/cli.py,sha256=rrqu-NnSFlofWBw3qKiWMqFwefC5z1o207nH1_6OAu0,3584
45
48
  omdev/cexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
49
  omdev/cexts/_boilerplate.cc,sha256=sbpXEgdFrkdzZXgaNWFFNN27fL9TZu6VrwvMY4-nnFM,1726
47
50
  omdev/cexts/build.py,sha256=F3z1-CjDlEM-Gzi5IunKUBO52qdH_pMsFylobTdGJnI,2654
@@ -79,8 +82,8 @@ omdev/clipboard/darwin_cf.py,sha256=SDUMfQtT_IJeDEwmsnxe6YyrZS5tPh_7ujkk1dg65Hg,
79
82
  omdev/clipboard/linux_x11.py,sha256=oa-mxMRNaZJOdBAZ8Nki-CAGIb63X8OFUTXKjmiwfSo,6718
80
83
  omdev/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
84
  omdev/git/revisions.py,sha256=1YY3Kf2WSalNVE2TgLXmOETct8HfiVEOqfV-qcvMVr4,1161
85
+ omdev/git/shallow.py,sha256=eCMbkOcjdpd6kNF1v4q5Y-iZO8P-ghLMUVZGbdUkg68,2572
82
86
  omdev/git/status.py,sha256=s_5kzyaSO-ikimdi54A6DrjOQPMeM5SRXLTrb22Alp4,8106
83
- omdev/git/subtrees.py,sha256=BuKbsNi74hp4Ki7w6y89Zq--4N71S129s4YZz3_8QWc,2446
84
87
  omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
85
88
  omdev/interp/__main__.py,sha256=GMCqeGYltgt5dlJzHxY9gqisa8cRkrPfmZYuZnjg4WI,162
86
89
  omdev/interp/cli.py,sha256=RMmMPYMbWnsb8mkmUaa2JKLoEvbLn201v41ExgZGfi0,2392
@@ -149,7 +152,7 @@ omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
149
152
  omdev/pyproject/venvs.py,sha256=GUurjC7qzGlFL-su4C0YPO_pxbwDAyl1CqyLOB3WLCA,1911
150
153
  omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
154
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
152
- omdev/pyproject/resources/python.sh,sha256=A5vBdUInKZqzM0aPpAaIkLwrR7kzvkmM8k7tpotKTXg,638
155
+ omdev/pyproject/resources/python.sh,sha256=jvrwddYw2KNttpuImLbdCdJK0HsUNMrHtTnmLvhxQxg,757
153
156
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
154
157
  omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,1064
155
158
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
@@ -160,7 +163,6 @@ omdev/scripts/pyproject.py,sha256=EEwu-5Fl0cCe0X6CaHOmjSt1vANXRFgsbvn487uKJnI,24
160
163
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
161
164
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
162
165
  omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
163
- omdev/tools/cc.py,sha256=ERi5pqcvqnGADS4wqbFIktJeUzSxKoAea4cGcCC6sSM,1920
164
166
  omdev/tools/cloc.py,sha256=jYlMHBae9oGKN4VKeBGuqjiQNcM2be7KIoTF0oNwx_I,5205
165
167
  omdev/tools/doc.py,sha256=wvgGhv6aFaV-Zl-Qivejx37i-lKQ207rZ-4K2fPf-Ss,2547
166
168
  omdev/tools/docker.py,sha256=KVFckA8eAdiapFUr8xkfMw9Uv3Qy4oNq0e70Lqt1F7I,7352
@@ -184,9 +186,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
184
186
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
185
187
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
186
188
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
187
- omdev-0.0.0.dev204.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
188
- omdev-0.0.0.dev204.dist-info/METADATA,sha256=xonF_YAYt18uF6ncqqHydhdDxWsTekhhtOstaY8lbzo,1760
189
- omdev-0.0.0.dev204.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
190
- omdev-0.0.0.dev204.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
191
- omdev-0.0.0.dev204.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
192
- omdev-0.0.0.dev204.dist-info/RECORD,,
189
+ omdev-0.0.0.dev206.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
190
+ omdev-0.0.0.dev206.dist-info/METADATA,sha256=GCfofnkHpmbLZxobRuLjC3PYfiG0tkzZTjJTm8idSU8,1760
191
+ omdev-0.0.0.dev206.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
192
+ omdev-0.0.0.dev206.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
193
+ omdev-0.0.0.dev206.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
194
+ omdev-0.0.0.dev206.dist-info/RECORD,,
omdev/tools/cc.py DELETED
@@ -1,81 +0,0 @@
1
- """
2
- //$(which true); exec om cc run "$0" "$@"
3
- or
4
- //usr/bin/true; exec om cc run "$0" "$@"
5
-
6
- See: https://gist.github.com/jdarpinian/1952a58b823222627cc1a8b83a7aa4e2
7
-
8
- ==
9
-
10
- Freestanding options:
11
-
12
- //usr/bin/env clang++ -std=c++20 -o ${X=`mktemp`} "$0" && exec -a "$0" "$X" "$@"
13
- //usr/bin/env clang++ -std=c++20 -o ${D=`mktemp -d`}/x "$0" && ${D}/x ${@:1}; R=$?; rm -rf ${D}; exit $R
14
- //$(which true); clang++ -std=c++20 -o ${D=`mktemp -d`}/x ${0} && ${D}/x ${@:1}; R=${?}; rm -rf ${D}; exit ${R}
15
- """
16
- import os
17
- import shutil
18
- import subprocess
19
- import tempfile
20
-
21
- from omlish import check
22
- from omlish.argparse import all as ap
23
-
24
- from ..cli import CliModule
25
-
26
-
27
- class Cli(ap.Cli):
28
- @ap.cmd(
29
- ap.arg('src-file'),
30
- ap.arg('args', nargs=ap.REMAINDER),
31
- )
32
- def run(self) -> int:
33
- src_file = self.args.src_file
34
- check.state(os.path.isfile(src_file))
35
-
36
- src_file_name = os.path.basename(src_file)
37
-
38
- tmp_dir = tempfile.mkdtemp()
39
- try:
40
- proc = subprocess.run(
41
- [
42
- check.non_empty_str(shutil.which('clang++')),
43
- '-std=c++20',
44
- os.path.abspath(src_file),
45
- '-o',
46
- src_file_name,
47
- ],
48
- cwd=tmp_dir,
49
- check=False,
50
- )
51
-
52
- if rc := proc.returncode:
53
- return rc
54
-
55
- exe_file = os.path.join(tmp_dir, src_file_name)
56
- check.state(os.path.isfile(exe_file))
57
-
58
- proc = subprocess.run(
59
- [
60
- exe_file,
61
- *self.args.args,
62
- ],
63
- check=False,
64
- )
65
-
66
- finally:
67
- shutil.rmtree(tmp_dir)
68
-
69
- return proc.returncode
70
-
71
-
72
- def _main() -> None:
73
- Cli().cli_run_and_exit()
74
-
75
-
76
- # @omlish-manifest
77
- _CLI_MODULE = CliModule('cc', __name__)
78
-
79
-
80
- if __name__ == '__main__':
81
- _main()