Add tests for conan, recurse implies preprocess
This commit is contained in:
parent
6d256d1271
commit
c63d82bf77
5 changed files with 77 additions and 10 deletions
|
|
@ -1018,26 +1018,33 @@ macro getHeader*(
|
||||||
##
|
##
|
||||||
## This allows a single wrapper to be used in different ways depending on the user's needs.
|
## This allows a single wrapper to be used in different ways depending on the user's needs.
|
||||||
## If no `-d:xxx` defines are specified, `outdir` will be searched for the header as is.
|
## If no `-d:xxx` defines are specified, `outdir` will be searched for the header as is.
|
||||||
|
## The user can opt to download the sources to `outdir` using any other method such as
|
||||||
|
## git sub-modules, vendoring or pointing to a repository that was already cloned.
|
||||||
##
|
##
|
||||||
## If multiple `-d:xxx` defines are specified, precedence is `Std` and then `Git`, `DL` or
|
## If multiple `-d:xxx` defines are specified, precedence is `Std` and then `Git`, `DL` or
|
||||||
## `Conan`. This allows using a system installed library if available before falling back
|
## `Conan`. This allows using a system installed library if available before falling back
|
||||||
## to manual building.
|
## to manual building. The user would need to specify both `-d:xxxStd` and one of the other
|
||||||
|
## methods.
|
||||||
##
|
##
|
||||||
## `-d:xxxSetVer=x.y.z` can be used to specify which version to use. It is used as a tag
|
## `-d:xxxSetVer=x.y.z` can be used to specify which version to use. It is used as a tag
|
||||||
## name for Git whereas for DL and Conan, it replaces `$1` in the URL defined.
|
## name for Git whereas for DL and Conan, it replaces `$1` in the URL defined.
|
||||||
##
|
##
|
||||||
## All defines can also be set in code using `setDefines()`.
|
## All defines can also be set in code using `setDefines()` and checked for using
|
||||||
|
## `isDefined()` which checks for defines set from both `-d` and `setDefines()`.
|
||||||
##
|
##
|
||||||
## The library is then configured (with `cmake` or `autotools` if possible) and built
|
## The library is then configured (with `cmake` or `autotools` if possible) and built
|
||||||
## using `make`, unless using `-d:xxxStd` which presumes that the system package
|
## using `make`, unless using `-d:xxxStd` which presumes that the system package
|
||||||
## manager was used to install prebuilt headers and binaries.
|
## manager was used to install prebuilt headers and binaries, or using `-d:xxxConan`
|
||||||
|
## which downloads pre-built binaries.
|
||||||
##
|
##
|
||||||
## The header path is stored in `const xxxPath` and can be used in a `cImport()` call
|
## The header path is stored in `const xxxPath` and can be used in a `cImport()` call
|
||||||
## in the calling wrapper. The dynamic library path is stored in `const xxxLPath` and can
|
## in the calling wrapper. The dynamic library path is stored in `const xxxLPath` and can
|
||||||
## be used for the `dynlib` parameter (within quotes) or with `{.passL.}`.
|
## be used for the `dynlib` parameter (within quotes) or with `{.passL.}`.
|
||||||
##
|
##
|
||||||
## `-d:xxxStatic` can be specified to statically link with the library instead. This
|
## `-d:xxxStatic` can be specified to statically link with the library instead. This
|
||||||
## will automatically add a `{.passL.}` call to the static library for convenience.
|
## will automatically add a `{.passL.}` call to the static library for convenience. Note
|
||||||
|
## that `-d:xxxConan` downloads all dependency libs as well and the `xxxLPath` will
|
||||||
|
## include all separated by space in the right order for linking.
|
||||||
##
|
##
|
||||||
## `conFlags`, `cmakeFlags` and `makeFlags` allow sending custom parameters to `configure`,
|
## `conFlags`, `cmakeFlags` and `makeFlags` allow sending custom parameters to `configure`,
|
||||||
## `cmake` and `make` in case additional configuration is required as part of the build process.
|
## `cmake` and `make` in case additional configuration is required as part of the build process.
|
||||||
|
|
@ -1047,13 +1054,13 @@ macro getHeader*(
|
||||||
## with cmake. In this case, `altNames = "z,zlib"`. Comma separate for multiple alternate names without
|
## with cmake. In this case, `altNames = "z,zlib"`. Comma separate for multiple alternate names without
|
||||||
## spaces.
|
## spaces.
|
||||||
##
|
##
|
||||||
## `buildTypes` specifies a list of in order build strategies to use when building the downloaded source
|
|
||||||
## files. Default is [btCmake, btAutoconf]
|
|
||||||
##
|
|
||||||
## The original header name is not included by default if `altNames` is set since it could cause the
|
## The original header name is not included by default if `altNames` is set since it could cause the
|
||||||
## wrong lib to be selected. E.g. `SDL2/SDL.h` could pick `libSDL.so` even if `altNames = "SDL2"`.
|
## wrong lib to be selected. E.g. `SDL2/SDL.h` could pick `libSDL.so` even if `altNames = "SDL2"`.
|
||||||
## Explicitly include it in `altNames` like the `zlib` example when required.
|
## Explicitly include it in `altNames` like the `zlib` example when required.
|
||||||
##
|
##
|
||||||
|
## `buildTypes` specifies a list of ordered build strategies to use when building the downloaded source
|
||||||
|
## files. Default is [btCmake, btAutoconf]
|
||||||
|
##
|
||||||
## `xxxPreBuild` is a hook that is called after the source code is pulled from Git or downloaded but
|
## `xxxPreBuild` is a hook that is called after the source code is pulled from Git or downloaded but
|
||||||
## before the library is built. This might be needed if some initial prep needs to be done before
|
## before the library is built. This might be needed if some initial prep needs to be done before
|
||||||
## compilation. A few values are provided to the hook to help provide context:
|
## compilation. A few values are provided to the hook to help provide context:
|
||||||
|
|
|
||||||
|
|
@ -342,6 +342,8 @@ proc downloadConan*(pkg: ConanPackage, outdir: string, clean = true) =
|
||||||
elif clean:
|
elif clean:
|
||||||
cleanDir(outdir)
|
cleanDir(outdir)
|
||||||
|
|
||||||
|
echo &"# Downloading {pkg.name} v{pkg.version} from Conan"
|
||||||
|
|
||||||
pkg.getConanBuilds()
|
pkg.getConanBuilds()
|
||||||
|
|
||||||
for recipe, builds in pkg.recipes:
|
for recipe, builds in pkg.recipes:
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,10 @@ proc main(
|
||||||
if check and outputFile.len == 0:
|
if check and outputFile.len == 0:
|
||||||
outputFile = getTempDir() / "toast_" & ($getTime().toUnix()).addFileExt("nim")
|
outputFile = getTempDir() / "toast_" & ($getTime().toUnix()).addFileExt("nim")
|
||||||
|
|
||||||
|
# Recurse implies preprocess
|
||||||
|
if gState.recurse:
|
||||||
|
gState.preprocess = true
|
||||||
|
|
||||||
# Redirect output to file
|
# Redirect output to file
|
||||||
if outputFile.len != 0:
|
if outputFile.len != 0:
|
||||||
doAssert gState.outputHandle.open(outputFile, fmWrite),
|
doAssert gState.outputHandle.open(outputFile, fmWrite),
|
||||||
|
|
@ -248,7 +252,7 @@ when isMainModule:
|
||||||
"pnim": "print Nim output",
|
"pnim": "print Nim output",
|
||||||
"prefix": "strip prefix from identifiers",
|
"prefix": "strip prefix from identifiers",
|
||||||
"preprocess": "run preprocessor on header",
|
"preprocess": "run preprocessor on header",
|
||||||
"recurse": "process #include files",
|
"recurse": "process #include files - implies --preprocess",
|
||||||
"replace": "replace X with Y in identifiers, X1=Y1,X2=Y2, @X for regex",
|
"replace": "replace X with Y in identifiers, X1=Y1,X2=Y2, @X for regex",
|
||||||
"source" : "C/C++ source/header(s) and command line file(s)",
|
"source" : "C/C++ source/header(s) and command line file(s)",
|
||||||
"stub": "stub out undefined type references as objects",
|
"stub": "stub out undefined type references as objects",
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,12 @@ var
|
||||||
cmd = "nim c -f --hints:off -d:FLAGS=\"-f:ast2\" -d:checkAbi"
|
cmd = "nim c -f --hints:off -d:FLAGS=\"-f:ast2\" -d:checkAbi"
|
||||||
lrcmd = " -r lzma.nim"
|
lrcmd = " -r lzma.nim"
|
||||||
zrcmd = " -r zlib.nim"
|
zrcmd = " -r zlib.nim"
|
||||||
|
sshcmd = " -r libssh2.nim"
|
||||||
lexp = "liblzma version = "
|
lexp = "liblzma version = "
|
||||||
zexp = "zlib version = "
|
zexp = "zlib version = "
|
||||||
|
|
||||||
testCall(cmd & lrcmd, "No build files found", 1)
|
testCall(cmd & lrcmd, "No build files found", 1)
|
||||||
|
testCall(cmd & " -d:libssh2Conan" & sshcmd, "Need version for Conan uri", 1)
|
||||||
|
|
||||||
when defined(posix):
|
when defined(posix):
|
||||||
# stdlib
|
# stdlib
|
||||||
|
|
@ -35,6 +37,9 @@ when defined(posix):
|
||||||
testCall(cmd & " -d:lzmaGit -d:lzmaSetVer=v5.2.0" & lrcmd, lexp & "5.2.0", 0)
|
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(cmd & " -d:lzmaGit -d:lzmaStatic -d:lzmaSetVer=v5.2.0" & lrcmd, lexp & "5.2.0", 0, delete = false)
|
||||||
|
|
||||||
|
# conan static
|
||||||
|
testCall(cmd & " -d:libssh2Conan -d:libssh2SetVer=1.9.0 -d:libssh2Static" & sshcmd, zexp, 0)
|
||||||
|
|
||||||
# git
|
# git
|
||||||
testCall(cmd & " -d:envTest" & zrcmd, zexp, 0)
|
testCall(cmd & " -d:envTest" & zrcmd, zexp, 0)
|
||||||
testCall(cmd & " -d:envTestStatic" & zrcmd, zexp, 0, delete = false)
|
testCall(cmd & " -d:envTestStatic" & zrcmd, zexp, 0, delete = false)
|
||||||
|
|
@ -51,3 +56,6 @@ testCall(cmd & " -d:lzmaDL -d:lzmaStatic -d:lzmaSetVer=5.2.4" & lrcmd, lexp & "5
|
||||||
# dl
|
# dl
|
||||||
testCall(cmd & " -d:zlibDL -d:zlibSetVer=1.2.11" & zrcmd, zexp & "1.2.11", 0)
|
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)
|
testCall(cmd & " -d:zlibDL -d:zlibStatic -d:zlibSetVer=1.2.11" & zrcmd, zexp & "1.2.11", 0, delete = false)
|
||||||
|
|
||||||
|
# conan
|
||||||
|
testCall(cmd & " -d:libssh2Conan -d:libssh2SetVer=1.9.0" & sshcmd, zexp, 0)
|
||||||
|
|
|
||||||
46
tests/libssh2.nim
Normal file
46
tests/libssh2.nim
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
import nimterop/[build, cimport]
|
||||||
|
|
||||||
|
const
|
||||||
|
outdir = getProjectCacheDir("libssh2")
|
||||||
|
|
||||||
|
getHeader(
|
||||||
|
header = "libssh2.h",
|
||||||
|
conanuri = "libssh2/$1",
|
||||||
|
outdir = outdir
|
||||||
|
)
|
||||||
|
|
||||||
|
cOverride:
|
||||||
|
type
|
||||||
|
stat = object
|
||||||
|
stat64 = object
|
||||||
|
SOCKET = object
|
||||||
|
|
||||||
|
when not libssh2Static:
|
||||||
|
cImport(libssh2Path, recurse = true, dynlib = "libssh2LPath", flags = "-f:ast2 -c -E_ -F_")
|
||||||
|
|
||||||
|
when not defined(Windows):
|
||||||
|
proc zlibVersion(): cstring {.importc, dynlib: libssh2LPath.}
|
||||||
|
else:
|
||||||
|
cImport(libssh2Path, recurse = true, flags = "-f:ast2 -c -E_ -F_")
|
||||||
|
|
||||||
|
when not defined(Windows):
|
||||||
|
proc zlibVersion(): cstring {.importc.}
|
||||||
|
|
||||||
|
{.passL: "-lpthread".}
|
||||||
|
|
||||||
|
assert libssh2_init(0) == 0
|
||||||
|
|
||||||
|
let
|
||||||
|
session = libssh2_session_init_ex(nil, nil, nil, nil)
|
||||||
|
|
||||||
|
if session == nil:
|
||||||
|
quit(1)
|
||||||
|
|
||||||
|
libssh2_session_set_blocking(session, 0.cint)
|
||||||
|
|
||||||
|
echo "zlib version = " & (block:
|
||||||
|
when not defined(Windows):
|
||||||
|
$zlibVersion()
|
||||||
|
else:
|
||||||
|
""
|
||||||
|
)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue