mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-24 08:15:25 +00:00
Implement support for XZ dist tarball
Motivation ---------- Currenly tarballs for linux created manually. ZIP files are not suitable, because they do not preserve unix file permissions. Modification ------------ Implement 'koch xz' command to produce dist tarball in xz format. Also the same command implemented in niminst.nim. Result ------ Now it is easy to create source distribution for git stapshot and use it further in packaging scripts.
This commit is contained in:
@@ -36,6 +36,7 @@ type
|
||||
actionScripts # action: create install and deinstall scripts
|
||||
actionZip, # action: create zip file
|
||||
actionTargz, # action: create targz file
|
||||
actionXz, # action: create xz file
|
||||
actionDeb # action: prepare deb package
|
||||
|
||||
FileCategory = enum
|
||||
@@ -173,6 +174,7 @@ proc parseCmdLine(c: var ConfigData) =
|
||||
of "scripts": incl(c.actions, actionScripts)
|
||||
of "zip": incl(c.actions, actionZip)
|
||||
of "targz": incl(c.actions, actionTargz)
|
||||
of "xz": incl(c.actions, actionXz)
|
||||
of "inno": incl(c.actions, actionInno)
|
||||
of "nsis": incl(c.actions, actionNsis)
|
||||
of "deb": incl(c.actions, actionDeb)
|
||||
@@ -600,6 +602,44 @@ proc targzDist(c: var ConfigData) =
|
||||
finally:
|
||||
setCurrentDir(oldDir)
|
||||
|
||||
proc xzDist(c: var ConfigData) =
|
||||
let proj = toLower(c.name) & "-" & c.version
|
||||
var n = "$#.tar.xz" % proj
|
||||
let tmpDir = if c.outdir.len == 0: "build" else: c.outdir
|
||||
|
||||
template processFile(z, dest, src) =
|
||||
let s = src
|
||||
let d = dest
|
||||
echo "Copying ", s, " to ", tmpDir / d
|
||||
let destdir = tmpdir / d.splitFile.dir
|
||||
if not dirExists(destdir): createDir(destdir)
|
||||
copyFile(s, tmpDir / d)
|
||||
|
||||
processFile(z, proj / buildBatFile32, "build" / buildBatFile32)
|
||||
processFile(z, proj / buildBatFile64, "build" / buildBatFile64)
|
||||
processFile(z, proj / buildShFile, "build" / buildShFile)
|
||||
processFile(z, proj / makeFile, "build" / makeFile)
|
||||
processFile(z, proj / installShFile, installShFile)
|
||||
processFile(z, proj / deinstallShFile, deinstallShFile)
|
||||
for f in walkFiles(c.libpath / "lib/*.h"):
|
||||
processFile(z, proj / "c_code" / extractFilename(f), f)
|
||||
for osA in 1..c.oses.len:
|
||||
for cpuA in 1..c.cpus.len:
|
||||
var dir = buildDir(osA, cpuA)
|
||||
for k, f in walkDir("build" / dir):
|
||||
if k == pcFile: processFile(z, proj / dir / extractFilename(f), f)
|
||||
|
||||
for cat in items({fcConfig..fcOther, fcUnix}):
|
||||
for f in items(c.cat[cat]): processFile(z, proj / f, f)
|
||||
|
||||
let oldDir = getCurrentDir()
|
||||
setCurrentDir(tmpDir)
|
||||
try:
|
||||
if execShellCmd("tar Jcf $1.tar.xz $1" % proj) != 0:
|
||||
echo("External program failed")
|
||||
finally:
|
||||
setCurrentDir(oldDir)
|
||||
|
||||
# -- prepare build files for .deb creation
|
||||
|
||||
proc debDist(c: var ConfigData) =
|
||||
@@ -668,5 +708,7 @@ if actionZip in c.actions:
|
||||
quit("libzip is not installed")
|
||||
if actionTargz in c.actions:
|
||||
targzDist(c)
|
||||
if actionXz in c.actions:
|
||||
xzDist(c)
|
||||
if actionDeb in c.actions:
|
||||
debDist(c)
|
||||
|
||||
Reference in New Issue
Block a user