diff options
author | Sergey Avseyev <sergey.avseyev@gmail.com> | 2015-05-26 12:51:31 +0300 |
---|---|---|
committer | Sergey Avseyev <sergey.avseyev@gmail.com> | 2015-05-26 13:23:41 +0300 |
commit | ba2aa474a1e96acb06190236fbc2896d2e170494 (patch) | |
tree | bcaaed23837ba3a4036977890c0cdaa7ce058deb | |
parent | 8ee98b36814fd83973d408d49c8b702a3308d014 (diff) | |
download | Nim-ba2aa474a1e96acb06190236fbc2896d2e170494.tar.gz |
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.
-rw-r--r-- | koch.nim | 8 | ||||
-rw-r--r-- | tools/niminst/niminst.nim | 42 |
2 files changed, 50 insertions, 0 deletions
diff --git a/koch.nim b/koch.nim index a951b422f..c6db6893c 100644 --- a/koch.nim +++ b/koch.nim @@ -47,6 +47,7 @@ Possible Commands: csource [options] builds the C sources for installation pdf builds the PDF documentation zip builds the installation ZIP package + xz builds the installation XZ package nsis [options] builds the NSIS Setup installer (for Windows) tests [options] run the testsuite update updates nim to the latest version from github @@ -112,6 +113,12 @@ proc targz(args: string) = exec("$# --var:version=$# --var:mingw=none --main:compiler/nim.nim targz compiler/installer.ini" % ["tools" / "niminst" / "niminst".exe, VersionAsString]) +proc xz(args: string) = + exec("$3 cc -r $2 --var:version=$1 --var:mingw=none --main:compiler/nim.nim scripts compiler/installer.ini" % + [VersionAsString, compileNimInst, findNim()]) + exec("$# --var:version=$# --var:mingw=none --main:compiler/nim.nim xz compiler/installer.ini" % + ["tools" / "niminst" / "niminst".exe, VersionAsString]) + proc buildTool(toolname, args: string) = exec("$# cc $# $#" % [findNim(), args, toolname]) copyFile(dest="bin"/ splitFile(toolname).name.exe, source=toolname.exe) @@ -368,6 +375,7 @@ of cmdArgument: of "csource", "csources": csource(op.cmdLineRest) of "zip": zip(op.cmdLineRest) of "targz": targz(op.cmdLineRest) + of "xz": xz(op.cmdLineRest) of "nsis": nsis(op.cmdLineRest) of "install": install(op.cmdLineRest) of "test", "tests": tests(op.cmdLineRest) diff --git a/tools/niminst/niminst.nim b/tools/niminst/niminst.nim index f0ae45484..aed4624f5 100644 --- a/tools/niminst/niminst.nim +++ b/tools/niminst/niminst.nim @@ -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) |