Skip to content

Commit 1ad9689

Browse files
committed
Improvements
1 parent 3bd6cbb commit 1ad9689

File tree

3 files changed

+37
-119
lines changed

3 files changed

+37
-119
lines changed

src/bootstrap.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ proc prepareCross*() =
2828

2929
proc setEnvBootstrap*() =
3030
const env = [
31-
("CORD", "../core"),
31+
("REPO", "../core"),
3232
("CRSD", "../cross"),
3333
("TMPD", "../tmp"),
3434
("TLCD", "../toolchain"),
@@ -76,7 +76,6 @@ proc setEnvNative*() =
7676
("AR", "gcc-ar"),
7777
("AWK", "mawk"),
7878
("CC", "gcc"),
79-
("CORD", pathCoreRepo),
8079
("CPP", "gcc -E"),
8180
("CXX", "g++"),
8281
("CXXCPP", "g++ -E"),
@@ -85,6 +84,7 @@ proc setEnvNative*() =
8584
("NM", "gcc-nm"),
8685
("PKG_CONFIG", "u-config"),
8786
("RANLIB", "gcc-ranlib"),
87+
("REPO", pathCoreRepo),
8888
("TMPD", pathTmp),
8989
("YACC", "byacc"),
9090
]

src/options.nim

Lines changed: 29 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,27 @@ USAGE:
1616
rad [ COMMAND ]
1717
1818
COMMANDS:
19+
bootstrap Bootstrap glaucus
1920
build Build packages
20-
clean Clean cache
21+
clean Clean build cache
2122
contents List package contents
22-
help Display this help message
23+
help Show help message
2324
info Show package information
24-
install Install packages
25-
list List installed packages
26-
orphan List orphaned packages
27-
remove Remove packages
25+
list List built packages
2826
search Search for packages
2927
update Update repositories
30-
upgrade Upgrade packages
31-
version Display rad version"""
28+
version Show rad version"""
3229
helpBootstrap =
3330
"""
3431
USAGE:
3532
rad bootstrap [ COMMAND ]
3633
3734
COMMANDS:
38-
clean Clean cache
39-
cross Bootstrap cross glaucus (stage 2)
40-
native Bootstrap native glaucus (stage 3)
41-
toolchain Bootstrap toolchain (stage 1)"""
35+
clean Clean bootstrap cache
36+
help Show help message
37+
1, stage1 Bootstrap stage 1 (toolchain)
38+
2, stage2 Bootstrap stage 2 (cross)
39+
3, stage3 Bootstrap stage 3 (native)"""
4240
version =
4341
"""
4442
rad version 0.1.0
@@ -72,7 +70,22 @@ Copyright © 2018-2025 Firas Khana"""
7270
cleanBootstrap()
7371

7472
echo "clean complete"
75-
of "cross":
73+
of "--help", "help":
74+
echo helpBootstrap
75+
of "1", "stage1", "toolchain":
76+
require()
77+
setEnvArch()
78+
setEnvBootstrap()
79+
cleanBootstrap()
80+
prepareBootstrap()
81+
82+
buildPackages(
83+
parsePackage("toolchain").run.split(), resolve = false, stage = $toolchain
84+
)
85+
86+
echo ""
87+
echo "stage 1 (toolchain) complete"
88+
of "2", "stage2", "cross":
7689
setEnvArch()
7790
setEnvBootstrap()
7891
setEnvCross()
@@ -83,28 +96,15 @@ Copyright © 2018-2025 Firas Khana"""
8396
)
8497

8598
echo ""
86-
echo "cross complete"
87-
of "native":
99+
echo "stage 2 (cross) complete"
100+
of "3", "stage3", "native":
88101
setEnvArch()
89102
setEnvNative()
90103

91104
buildPackages(parsePackage("native").run.split(), resolve = false)
92105

93106
echo ""
94-
echo "native complete"
95-
of "toolchain":
96-
require()
97-
setEnvArch()
98-
setEnvBootstrap()
99-
cleanBootstrap()
100-
prepareBootstrap()
101-
102-
buildPackages(
103-
parsePackage("toolchain").run.split(), resolve = false, stage = $toolchain
104-
)
105-
106-
echo ""
107-
echo "toolchain complete"
107+
echo "stage 3 (native) complete"
108108
else:
109109
exit(helpBootstrap, QuitFailure)
110110
of "build":
@@ -126,31 +126,13 @@ Copyright © 2018-2025 Firas Khana"""
126126
echo help
127127
of "info":
128128
showInfo(remainingArgs(p))
129-
of "install":
130-
setEnvArch()
131-
setEnvNative()
132-
cleanPackages()
133-
installPackages(remainingArgs(p))
134-
135-
echo ""
136-
echo "install complete"
137129
of "list":
138130
listPackages()
139-
of "orphan":
140-
listOrphans()
141-
of "remove":
142-
removePackages(remainingArgs(p))
143-
144-
echo ""
145-
echo "remove complete"
146131
of "search":
147132
searchPackages(remainingArgs(p))
148133
of "update":
149134
echo ""
150135
echo "update complete"
151-
of "upgrade":
152-
echo ""
153-
echo "upgrade complete"
154136
of "--version", "version":
155137
echo version
156138
else:

src/packages.nim

Lines changed: 6 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
88

99
import
10-
std/[algorithm, os, osproc, sequtils, strformat, strutils, tables, terminal, times],
10+
std/[algorithm, os, osproc, sequtils, strformat, strutils, tables, times],
1111
constants,
1212
flags,
1313
tools,
@@ -17,9 +17,8 @@ type Package = object
1717
nom, ver, url, sum, bld, run*, opt = "nil"
1818

1919
proc cleanPackages*() =
20-
for i in [pathLog, pathTmp]:
21-
removeDir(i)
22-
createDir(i)
20+
removeDir(pathTmp)
21+
createDir(pathTmp)
2322

2423
proc parsePackage*(nom: string): Package =
2524
let path = pathCoreRepo / nom
@@ -33,9 +32,9 @@ proc printContent(idx: int, nom, ver, cmd: string) =
3332
echo &"""{idx + 1:<8}{nom:24}{ver:24}{cmd:8}""" & now().format("hh:mm tt")
3433

3534
proc printHeader() =
36-
echo &"""
35+
echo """
3736
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38-
{"idx":8}{"nom":24}{"ver":24}{"cmd":8}fin
37+
idx nom ver cmd fin
3938
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"""
4039

4140
proc fetchPackages(packages: openArray[string]) =
@@ -196,8 +195,6 @@ proc buildPackages*(
196195

197196
if "no-parallel" in package.opt:
198197
setEnvFlags(parallel = false)
199-
else:
200-
putEnv("MAKEFLAGS", "parallel")
201198

202199
if dirExists(tmp):
203200
setCurrentDir(tmp)
@@ -206,7 +203,7 @@ proc buildPackages*(
206203

207204
let shell = execCmdEx(
208205
&"""sh -efu -c '
209-
nom={package} ver={package.ver} . {pathCoreRepo / package.nom / (if stage == $native: "build" else: "build" & '-' & stage)}
206+
nom={package.nom} ver={package.ver} . {pathCoreRepo / package.nom / (if stage == $native: "build" else: "build" & '-' & stage)}
210207
211208
for i in prepare configure build; do
212209
if command -v $i {shellRedirect}; then
@@ -334,67 +331,6 @@ proc listContents*(packages: openArray[string]) =
334331
for line in lines(pathLocalLib / package.nom / "contents"):
335332
echo &"/{line}"
336333

337-
proc listOrphans*(pkgLib = pathLocalLib) =
338-
let
339-
installed = walkDir(pathLocalLib, true, skipSpecial = true).toSeq().unzip()[1]
340-
skel = parsePackage("skel").run
341-
342-
for nom in installed:
343-
if nom notin skel and fileExists(pkgLib / $nom / "implicit"):
344-
if not dirExists(pkgLib / $nom / "run"):
345-
styledEcho fgYellow,
346-
styleBright, &"""{$QuitFailure:8}{&"\{nom\} is an orphan":48}"""
347-
348-
proc removePackages*(packages: openArray[string], pkgLib = pathLocalLib) =
349-
let
350-
installed = walkDir(pathLocalLib, true, skipSpecial = true).toSeq().unzip()[1]
351-
skel = parsePackage("skel").run
352-
var shouldAbort: bool
353-
354-
for nom in packages:
355-
if nom notin installed:
356-
abort(&"""{$QuitFailure:8}{&"\{nom\} not installed":48}""")
357-
if nom in skel:
358-
abort(&"""{$QuitFailure:8}{&"\{nom\} is a skel package":48}""")
359-
if dirExists(pkgLib / $nom / "run"):
360-
let runDeps = walkDir(pkgLib / $nom / "run", true, skipSpecial = true)
361-
.toSeq()
362-
.unzip()[1].sorted()
363-
if runDeps.len() > 0:
364-
for dep in runDeps:
365-
if dep notin packages:
366-
styledEcho fgYellow,
367-
styleBright, &"""{$QuitFailure:8}{&"\{dep\} depends on \{nom\}":48}"""
368-
shouldAbort = true
369-
370-
if shouldAbort:
371-
abort(&"""{$QuitFailure:8}{&"\{nom\} is a dependency":48}""")
372-
373-
printHeader()
374-
375-
for idx, nom in packages:
376-
let package = parsePackage(nom)
377-
378-
printContent(idx, package.nom, package.ver, "remove")
379-
380-
for line in lines(pathLocalLib / package.nom / "contents"):
381-
if not line.endsWith("/"):
382-
removeFile(&"/{line}")
383-
384-
for line in lines(pathLocalLib / package.nom / "contents"):
385-
if line.endsWith("/"):
386-
let path = &"/{line}"
387-
388-
if path.isEmpty():
389-
removeDir(path)
390-
391-
removeDir(pathLocalLib / package.nom)
392-
393-
for installedPackage in walkDir(pkgLib, true, skipSpecial = true).toSeq().unzip()[1].sorted():
394-
removeFile(pkgLib / $installedPackage / "run" / package.nom)
395-
if isEmpty(pkgLib / $installedPackage / "run"):
396-
removeDir(pkgLib / $installedPackage / "run")
397-
398334
proc searchPackages*(pattern: openArray[string]) =
399335
var packages: seq[string]
400336

0 commit comments

Comments
 (0)