mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 05:50:30 +00:00
attempt to add valgrind support to the CIs and testament (#12646)
* attempt to add valgrind support to the CIs and testament * valgrind (currently) works only on 64-bit Linux
This commit is contained in:
@@ -51,6 +51,8 @@ addons:
|
||||
- libsdl1.2-dev
|
||||
- libgc-dev
|
||||
- libsfml-dev
|
||||
- libc6-dbg
|
||||
- valgrind
|
||||
homebrew:
|
||||
packages:
|
||||
- boehmgc
|
||||
|
||||
@@ -46,7 +46,7 @@ steps:
|
||||
sudo apt-fast update -qq
|
||||
DEBIAN_FRONTEND='noninteractive' \
|
||||
sudo apt-fast install --no-install-recommends -yq \
|
||||
libcurl4-openssl-dev libgc-dev libsdl1.2-dev libsfml-dev
|
||||
libcurl4-openssl-dev libgc-dev libsdl1.2-dev libsfml-dev valgrind libc6-dbg
|
||||
displayName: 'Install dependencies (amd64 Linux)'
|
||||
condition: and(eq(variables['Agent.OS'], 'Linux'), eq(variables['CPU'], 'amd64'))
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ type
|
||||
nimout*: string
|
||||
parseErrors*: string # when the spec definition is invalid, this is not empty.
|
||||
unjoinable*: bool
|
||||
useValgrind*: bool
|
||||
timeout*: float # in seconds, fractions possible,
|
||||
# but don't rely on much precision
|
||||
|
||||
@@ -195,6 +196,14 @@ proc parseSpec*(filename: string): TSpec =
|
||||
result.nimout = e.value
|
||||
of "joinable":
|
||||
result.unjoinable = not parseCfgBool(e.value)
|
||||
of "valgrind":
|
||||
when defined(linux) and sizeof(int) == 8:
|
||||
result.useValgrind = parseCfgBool(e.value)
|
||||
result.unjoinable = true
|
||||
else:
|
||||
# Windows lacks valgrind. Silly OS.
|
||||
# Valgrind only supports OSX <= 17.x
|
||||
result.useValgrind = false
|
||||
of "disabled":
|
||||
case e.value.normalize
|
||||
of "y", "yes", "true", "1", "on": result.err = reDisabled
|
||||
|
||||
@@ -100,8 +100,8 @@ proc execCmdEx2(command: string, args: openarray[string]; workingDir, input: str
|
||||
for arg in args:
|
||||
result.cmdLine.add ' '
|
||||
result.cmdLine.add quoteShell(arg)
|
||||
|
||||
var p = startProcess(command, workingDir=workingDir, args=args, options={poStdErrToStdOut, poUsePath})
|
||||
var p = startProcess(command, workingDir=workingDir, args=args,
|
||||
options={poStdErrToStdOut, poUsePath})
|
||||
var outp = outputStream(p)
|
||||
|
||||
# There is no way to provide input for the child process
|
||||
@@ -441,12 +441,16 @@ proc testSpecHelper(r: var TResults, test: TTest, expected: TSpec, target: TTarg
|
||||
if isJsTarget:
|
||||
exeCmd = nodejs
|
||||
args = concat(@[exeFile], args)
|
||||
elif defined(posix) and not exeFile.contains('/'):
|
||||
# "security" in Posix is actually just a euphemism
|
||||
# for "unproductive arbitrary shit"
|
||||
exeCmd = "./" & exeFile
|
||||
else:
|
||||
exeCmd = exeFile
|
||||
if defined(posix) and not exeFile.contains('/'):
|
||||
# "security" in Posix is actually just a euphemism
|
||||
# for "unproductive arbitrary shit"
|
||||
exeCmd = "./" & exeFile
|
||||
else:
|
||||
exeCmd = exeFile
|
||||
if expected.useValgrind:
|
||||
args = exeCmd & args
|
||||
exeCmd = "valgrind"
|
||||
var (_, buf, exitCode) = execCmdEx2(exeCmd, args, input = expected.input)
|
||||
# Treat all failure codes from nodejs as 1. Older versions of nodejs used
|
||||
# to return other codes, but for us it is sufficient to know that it's not 0.
|
||||
|
||||
6
tests/valgrind/tbasic_valgrind.nim
Normal file
6
tests/valgrind/tbasic_valgrind.nim
Normal file
@@ -0,0 +1,6 @@
|
||||
discard """
|
||||
valgrind: true
|
||||
cmd: "nim c --gc:destructors $file"
|
||||
"""
|
||||
|
||||
echo "hello world"
|
||||
Reference in New Issue
Block a user