aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2019-12-16 21:25:10 -0600
committerGanesh Viswanathan <dev@genotrance.com>2019-12-16 21:25:10 -0600
commitfaeb43afbe8c8dfe13cada97ae2705db75246c85 (patch)
tree100e393c689f7a18a84785625d2659ecaf7cfb6f
parentc878a4be05cadd512db2182181b187de2a566ce8 (diff)
downloadnimterop-faeb43afbe8c8dfe13cada97ae2705db75246c85.tar.gz
nimterop-faeb43afbe8c8dfe13cada97ae2705db75246c85.zip
Fix getHeader - PCRE case where header is generated
-rw-r--r--nimterop/build.nim41
1 files changed, 33 insertions, 8 deletions
diff --git a/nimterop/build.nim b/nimterop/build.nim
index 6f9c47e..bcc8b2b 100644
--- a/nimterop/build.nim
+++ b/nimterop/build.nim
@@ -896,6 +896,7 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
var
name = header.extractFilename().split(".")[0]
+ # -d:xxx for this header
stdStr = name & "Std"
gitStr = name & "Git"
dlStr = name & "DL"
@@ -903,20 +904,24 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
staticStr = name & "Static"
verStr = name & "SetVer"
+ # Ident nodes of the -d:xxx to check in when statements
nameStd = newIdentNode(stdStr)
nameGit = newIdentNode(gitStr)
nameDL = newIdentNode(dlStr)
nameStatic = newIdentNode(staticStr)
+ # Consts to generate
path = newIdentNode(name & "Path")
lpath = newIdentNode(name & "LPath")
version = newIdentNode(verStr)
lname = newIdentNode(name & "LName")
preBuild = newIdentNode(name & "PreBuild")
+ # Regex for library search
lre = "(lib)?$1[_]?(static)?[0-9.\\-]*\\"
+ # If -d:xxx set with setDefines()
stdVal = gDefines.hasKey(stdStr)
gitVal = gDefines.hasKey(gitStr)
dlVal = gDefines.hasKey(dlStr)
@@ -927,6 +932,7 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
else:
""
+ # Use alternate library names if specified for regex search
if altNames.len != 0:
lre = lre % ("(" & altNames.replace(",", "|") & ")")
else:
@@ -934,12 +940,23 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
result = newNimNode(nnkStmtList)
result.add(quote do:
+ # Need to check -d:xxx or setDefines()
const
`nameStd`* = when defined(`nameStd`): true else: `stdVal` == 1
`nameGit`* = when defined(`nameGit`): true else: `gitVal` == 1
`nameDL`* = when defined(`nameDL`): true else: `dlVal` == 1
`nameStatic`* = when defined(`nameStatic`): true else: `staticVal` == 1
+ # Search for header in outdir (after retrieving code) depending on -d:xxx mode
+ proc getPath(header, giturl, dlurl, outdir, version: string): string =
+ when `nameGit`:
+ getGitPath(header, giturl, outdir, version)
+ elif `nameDL`:
+ getDlPath(header, dlurl, outdir, version)
+ else:
+ getLocalPath(header, outdir)
+
+ const
`version`* {.strdefine.} = `verVal`
`lname` =
when `nameStatic`:
@@ -947,37 +964,45 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
else:
`lre` & getDynlibExt()
+ # Look in standard path if requested by user
stdPath =
when `nameStd`: getStdPath(`header`) else: ""
stdLPath =
when `nameStd`: getStdLibPath(`lname`) else: ""
- `path`* =
+ # Look elsewhere if requested while prioritizing standard paths
+ prePath =
when stdPath.len != 0 and stdLPath.len != 0:
stdPath
- elif `nameGit`:
- getGitPath(`header`, `giturl`, `outdir`, `version`)
- elif `nameDL`:
- getDlPath(`header`, `dlurl`, `outdir`, `version`)
else:
- getLocalPath(`header`, `outdir`)
+ getPath(`header`, `giturl`, `dlurl`, `outdir`, `version`)
- when `path` != stdPath and declared(`preBuild`):
+ # Run preBuild hook before building library if not standard
+ when (prePath != stdPath or prePath.len == 0) and declared(`preBuild`):
static:
- `preBuild`(`outdir`, `path`)
+ `preBuild`(`outdir`, prePath)
const
+ # Library binary path - build if not standard
`lpath`* =
when stdPath.len != 0 and stdLPath.len != 0:
stdLPath
else:
buildLibrary(`lname`, `outdir`, `conFlags`, `cmakeFlags`, `makeFlags`)
+ # Header path - search again in case header is generated in build
+ `path`* =
+ if prePath.len != 0:
+ prePath
+ else:
+ getPath(`header`, `giturl`, `dlurl`, `outdir`, `version`)
+
static:
doAssert `path`.len != 0, "\nHeader " & `header` & " not found - " & "missing/empty outdir or -d:$1Std -d:$1Git or -d:$1DL not specified" % `name`
doAssert `lpath`.len != 0, "\nLibrary " & `lname` & " not found"
echo "# Including library " & `lpath`
+ # Automatically link with static libary
when `nameStatic`:
{.passL: `lpath`.}
)