Build pre-hook, altNames, uInt, getType() calls, add zlib test

Fix subdir header, static lib name, [u]int[\d]+
This commit is contained in:
Ganesh Viswanathan 2019-09-09 15:33:44 -07:00
commit b0447677f1
8 changed files with 279 additions and 90 deletions

View file

@ -3,6 +3,7 @@ import strutils
proc testCall(cmd, output: string, exitCode: int, delete = true) =
if delete:
rmDir("build/liblzma")
rmDir("build/zlib")
echo cmd
var
ccmd =
@ -17,26 +18,45 @@ proc testCall(cmd, output: string, exitCode: int, delete = true) =
var
cmd = "nim c -f"
rcmd = " -r lzma.nim"
exp = "liblzma version = "
lrcmd = " -r lzma.nim"
zrcmd = " -r zlib.nim"
lexp = "liblzma version = "
zexp = "zlib version = "
testCall(cmd & lrcmd, "No build files found", 1)
when defined(posix):
testCall(cmd & rcmd, "No build files found", 1)
# stdlib
testCall(cmd & " -d:lzmaStd" & rcmd, exp, 0)
testCall(cmd & " -d:lzmaStd -d:lzmaStatic" & rcmd, exp, 0)
testCall(cmd & " -d:lzmaStd" & lrcmd, lexp, 0)
testCall(cmd & " -d:lzmaStd -d:lzmaStatic" & lrcmd, lexp, 0)
when not defined(osx):
testCall(cmd & " -d:zlibStd" & zrcmd, zexp, 0)
testCall(cmd & " -d:zlibStd -d:zlibStatic" & zrcmd, zexp, 0)
# git
testCall(cmd & " -d:lzmaGit" & rcmd, exp, 0)
testCall(cmd & " -d:lzmaGit -d:lzmaStatic" & rcmd, exp, 0, delete = false)
testCall(cmd & " -d:lzmaGit" & lrcmd, lexp, 0)
testCall(cmd & " -d:lzmaGit -d:lzmaStatic" & lrcmd, lexp, 0, delete = false)
# git tag
testCall(cmd & " -d:lzmaGit -d:lzmaVersion=v5.2.0" & rcmd, exp & "5.2.0", 0)
testCall(cmd & " -d:lzmaGit -d:lzmaStatic -d:lzmaVersion=v5.2.0" & rcmd, exp & "5.2.0", 0, delete = false)
testCall(cmd & " -d:lzmaGit -d:lzmaSetVer=v5.2.0" & lrcmd, lexp & "5.2.0", 0)
testCall(cmd & " -d:lzmaGit -d:lzmaStatic -d:lzmaSetVer=v5.2.0" & lrcmd, lexp & "5.2.0", 0, delete = false)
testCall("cd build/liblzma && git branch", "v5.2.0", 0, delete = false)
# git
testCall(cmd & " -d:zlibGit" & zrcmd, zexp, 0)
testCall(cmd & " -d:zlibGit -d:zlibStatic" & zrcmd, zexp, 0, delete = false)
# git tag
testCall(cmd & " -d:zlibGit -d:zlibSetVer=v1.2.10" & zrcmd, zexp & "1.2.10", 0)
testCall(cmd & " -d:zlibGit -d:zlibStatic -d:zlibSetVer=v1.2.10" & zrcmd, zexp & "1.2.10", 0, delete = false)
testCall("cd build/zlib && git branch", "v1.2.10", 0, delete = false)
# dl
testCall(cmd & " -d:lzmaDL" & rcmd, "Need version", 1)
testCall(cmd & " -d:lzmaDL -d:lzmaVersion=5.2.4" & rcmd, exp & "5.2.4", 0)
testCall(cmd & " -d:lzmaDL -d:lzmaStatic -d:lzmaVersion=5.2.4" & rcmd, exp & "5.2.4", 0, delete = false)
testCall(cmd & " -d:lzmaDL" & lrcmd, "Need version", 1)
testCall(cmd & " -d:lzmaDL -d:lzmaSetVer=5.2.4" & lrcmd, lexp & "5.2.4", 0)
testCall(cmd & " -d:lzmaDL -d:lzmaStatic -d:lzmaSetVer=5.2.4" & lrcmd, lexp & "5.2.4", 0, delete = false)
# dl
testCall(cmd & " -d:zlibDL -d:zlibSetVer=1.2.11" & zrcmd, zexp & "1.2.11", 0)
testCall(cmd & " -d:zlibDL -d:zlibStatic -d:zlibSetVer=1.2.11" & zrcmd, zexp & "1.2.11", 0, delete = false)

68
tests/zlib.nim Normal file
View file

@ -0,0 +1,68 @@
import os, strutils
import nimterop/[build, cimport]
const
baseDir = currentSourcePath.parentDir()/"build"/"zlib"
static:
cDebug()
proc zlibPreBuild(outdir, path: string) =
let
mf = outdir / "Makefile"
if mf.fileExists():
# Delete default Makefile
if mf.readFile().contains("configure first"):
mf.rmFile()
when defined(windows):
# Fix static lib name on Windows
setCmakeLibName(outdir, "zlibstatic", prefix = "lib", oname = "zlib", suffix = ".a")
getHeader(
"zlib.h",
giturl = "https://github.com/madler/zlib",
dlurl = "http://zlib.net/zlib-$1.tar.gz",
outdir = baseDir,
altNames = "z"
)
cPlugin:
import regex, strutils
proc onSymbol*(sym: var Symbol) {.exportc, dynlib.} =
sym.name = sym.name.replace(re"_[_]+", "_").strip(chars = {'_'})
cOverride:
type
voidpf = ptr object
voidpc = ptr object
voidp = ptr object
uLongf = culong
z_size_t = culong
z_crc_t = culong
alloc_func* {.importc.} = proc(opaque: voidpf, items, size: uint) {.cdecl.}
Bytef {.importc.} = object
when defined(posix):
type
pthread_mutex_s = object
pthread_cond_s = object
pthread_rwlock_arch_t = object
extension = object
fd_set = object
when defined(posix):
static:
cSkipSymbol(@["u_int8_t", "u_int16_t", "u_int32_t", "u_int64_t"])
when defined(zlibGit) or defined(zlibDL):
when dirExists(baseDir / "build"):
cIncludeDir(baseDir / "build")
when not defined(zlibStatic):
cImport(zlibPath, recurse = true, dynlib = "zlibLPath")
else:
cImport(zlibPath, recurse = true)
echo "zlib version = " & $zlibVersion()