outline of how the support for native package managers should look like
This commit is contained in:
parent
a7913b5d23
commit
f972236ed9
1 changed files with 56 additions and 1 deletions
|
|
@ -42,3 +42,58 @@ proc getPkgDir*(): string =
|
||||||
## Returns the package directory containing the .nimble file currently
|
## Returns the package directory containing the .nimble file currently
|
||||||
## being evaluated.
|
## being evaluated.
|
||||||
builtin
|
builtin
|
||||||
|
|
||||||
|
from strutils import contains
|
||||||
|
|
||||||
|
type
|
||||||
|
Distribution* {.pure.} = enum ## an enum so that the poor programmer
|
||||||
|
## cannot introduce typos
|
||||||
|
Windows, ## some version of Windows
|
||||||
|
Posix, ## some Posix system
|
||||||
|
MacOSX, ## some version of OSX
|
||||||
|
Linux, ## some version of Linux
|
||||||
|
Ubuntu,
|
||||||
|
Gentoo,
|
||||||
|
Fedora,
|
||||||
|
RedHat,
|
||||||
|
BSD,
|
||||||
|
FreeBSD,
|
||||||
|
OpenBSD
|
||||||
|
|
||||||
|
proc detectOsImpl(d: Distribution): bool =
|
||||||
|
case d
|
||||||
|
of Distribution.Windows: ## some version of Windows
|
||||||
|
result = defined(windows)
|
||||||
|
of Distribution.Posix: result = defined(posix)
|
||||||
|
of Distribution.MacOSX: result = defined(macosx)
|
||||||
|
of Distribution.Linux: result = defined(linux)
|
||||||
|
of Distribution.Ubuntu, Distribution.Gentoo, Distribution.FreeBSD,
|
||||||
|
Distribution.OpenBSD, Distribution.Fedora:
|
||||||
|
result = $d in gorge"uname"
|
||||||
|
of Distribution.RedHat:
|
||||||
|
result = "Red Hat" in gorge"uname"
|
||||||
|
of Distribution.BSD: result = defined(bsd)
|
||||||
|
|
||||||
|
template detectOs*(d: untyped): bool =
|
||||||
|
detectOsImpl(Distribution.d)
|
||||||
|
|
||||||
|
var foreignDeps: seq[string] = @[]
|
||||||
|
|
||||||
|
proc foreignCmd*(cmd: string; requiresSudo=false) =
|
||||||
|
foreignDeps.add((if requiresSudo: "sudo " else: "") & cmd)
|
||||||
|
|
||||||
|
proc foreignDep*(foreignPackageName: string) =
|
||||||
|
let p = foreignPackageName
|
||||||
|
when defined(windows):
|
||||||
|
foreignCmd "Chocolatey install " & p
|
||||||
|
elif defined(bsd):
|
||||||
|
foreignCmd "ports install " & p, true
|
||||||
|
elif defined(linux):
|
||||||
|
if detectOs(Ubuntu):
|
||||||
|
foreignCmd "apt-get install " & p, true
|
||||||
|
elif detectOs(Gentoo):
|
||||||
|
foreignCmd "emerge install " & p, true
|
||||||
|
elif detectOs(Fedora):
|
||||||
|
foreignCmd "yum install " & p, true
|
||||||
|
else:
|
||||||
|
discard
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue