From 7828199827cac4056a008d679cb5c45ff3d34f6e Mon Sep 17 00:00:00 2001 From: Euan Date: Tue, 21 Apr 2020 14:05:21 +0100 Subject: [PATCH] #12103 - CI for OpenBSD (#12105) * Working on OpenBSD CI * Condense steps into 2 steps to make output easier to follow. * Move up one directory after csources build. * Remove FreeBSD build manifest and add OpenBSD test ignores for coroutines and hot code reloading. * If runCI fails, run the test results script. * Add email trigger for build failure * Remove .git from repository URL * Disable SFML test on OpenBSD * Disable tgetaddrinfo on OpenBSD as only UDP and TCP protocols are supported. * Remove getFilePermissions as it causes CI test failures with NimScript. * Set clang as cc in nim.cfg and use gmake to build csources. * Add getCurrentDir to nimscript. * Remove duplicate getCurrentDir and check for not weirdTarget. * Add CI badge for OpenBSD. * Disable tests which allocate lots of memory for OpenBSD. * Use `CORO_BACKEND_SETJMP` on OpenBSD rather than ucontext. * Simplify building of koch * Disable t8657 on OpenBSD. See issue #13760. * Fix #12142 - tarray_of_channels fails on OpenBSD * Disable thhtpclient_ssl and tosprocterminate on OpenBSD. These tests can be enabled at a later date after fixing them. * Install libffi. * Set path to libc for openbsd. * Disable tevalffi for now. * Remove tevalffi.nim. * Use ncpuonline sysctl rather than ncpu. * Disable tacceptcloserace and tasynchttpserver on OpenBSD. * Enable tacceptcloserace and tasynchttpserver. * Fix #13775 as suggested by @alaviss - use /bin/cat on OpenBSD rather than /bin/sh. * Enable test on OpenBSD. * Disable tflowvar on OpenBSD. --- .builds/openbsd.yml | 31 +++++++++++++++++++ compiler/evalffi.nim | 2 ++ config/nim.cfg | 2 +- lib/pure/coro.nim | 2 +- lib/pure/os.nim | 13 ++------ readme.md | 2 +- testament/specs.nim | 2 ++ tests/coroutines/tgc.nim | 1 + tests/coroutines/twait.nim | 1 + tests/dll/nimhcr_integration.nim | 3 +- tests/dll/nimhcr_unit.nim | 1 + tests/exception/t9657.nim | 1 + tests/niminaction/Chapter8/sfml/sfml_test.nim | 1 + tests/parallel/tarray_of_channels.nim | 1 + tests/parallel/tflowvar.nim | 1 + tests/stdlib/tgetaddrinfo.nim | 2 +- tests/stdlib/thttpclient_ssl.nim | 1 + tests/stdlib/tosprocterminate.nim | 2 ++ tests/system/talloc2.nim | 1 + tests/system/trealloc.nim | 1 + 20 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 .builds/openbsd.yml diff --git a/.builds/openbsd.yml b/.builds/openbsd.yml new file mode 100644 index 000000000000..c4db2f6216be --- /dev/null +++ b/.builds/openbsd.yml @@ -0,0 +1,31 @@ +image: openbsd/latest +packages: +- gmake +- sqlite3 +- node +- boehm-gc +- pcre +- sfml +- sdl2 +- libffi +sources: +- https://github.com/nim-lang/Nim +environment: + CC: /usr/bin/clang +tasks: +- setup: | + cd Nim + git clone --depth 1 -q https://github.com/nim-lang/csources.git + gmake -C csources -j $(sysctl -n hw.ncpuonline) + bin/nim c koch + echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv +- test: | + cd Nim + if ! ./koch runCI; then + nim c -r tools/ci_testresults.nim + exit 1 + fi +triggers: +- action: email + condition: failure + to: Andreas Rumpf diff --git a/compiler/evalffi.nim b/compiler/evalffi.nim index 58c505a5bc1e..f89451f514fe 100644 --- a/compiler/evalffi.nim +++ b/compiler/evalffi.nim @@ -17,6 +17,8 @@ when defined(windows): const libcDll = "msvcrt.dll" elif defined(linux): const libcDll = "libc.so(.6|.5|)" +elif defined(openbsd): + const libcDll = "/usr/lib/libc.so(.95.1|)" elif defined(bsd): const libcDll = "/lib/libc.so.7" elif defined(osx): diff --git a/config/nim.cfg b/config/nim.cfg index 9f152b879307..eea04ec11a8e 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -167,7 +167,7 @@ path="$lib/pure" @end @end -@if macosx or freebsd: +@if macosx or freebsd or openbsd: cc = clang tlsEmulation:on gcc.options.always = "-w" diff --git a/lib/pure/coro.nim b/lib/pure/coro.nim index 350b9f18744d..ead3849c6b98 100644 --- a/lib/pure/coro.nim +++ b/lib/pure/coro.nim @@ -48,7 +48,7 @@ when defined(windows): {.warning: "ucontext coroutine backend is not available on windows, defaulting to fibers.".} when defined(nimCoroutinesSetjmp): {.warning: "setjmp coroutine backend is not available on windows, defaulting to fibers.".} -elif defined(haiku): +elif defined(haiku) or defined(openbsd): const coroBackend = CORO_BACKEND_SETJMP when defined(nimCoroutinesUcontext): {.warning: "ucontext coroutine backend is not available on haiku, defaulting to setjmp".} diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 98143bc1a6f7..e1e5f31b4b24 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -2818,11 +2818,7 @@ when not weirdTarget and (defined(linux) or defined(solaris) or defined(bsd) or len = readlink(procPath, result, len) setLen(result, len) -when defined(openbsd): - proc isExecutable(path: string): bool = - let p = getFilePermissions(path) - result = fpUserExec in p and fpGroupExec in p and fpOthersExec in p - +when not weirdTarget and defined(openbsd): proc getApplOpenBsd(): string = # similar to getApplHeuristic, but checks current working directory when declared(paramStr): @@ -2846,15 +2842,12 @@ when defined(openbsd): break if len(result) > 0: - if isExecutable(result): - return expandFilename(result) - - return "" + return expandFilename(result) # search in path for p in split(string(getEnv("PATH")), {PathSep}): var x = joinPath(p, exePath) - if existsFile(x) and isExecutable(x): + if existsFile(x): return expandFilename(x) else: result = "" diff --git a/readme.md b/readme.md index 59107af34a42..575d856bb1ef 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -# Nim [![Build Status][badge-nim-travisci]][nim-travisci] [![builds.sr.ht freebsd status](https://builds.sr.ht/~araq/nim/freebsd.yml.svg)](https://builds.sr.ht/~araq/nim/freebsd.yml?) +# Nim [![Build Status][badge-nim-travisci]][nim-travisci] [![builds.sr.ht freebsd status](https://builds.sr.ht/~araq/nim/freebsd.yml.svg)](https://builds.sr.ht/~araq/nim/freebsd.yml?) [![builds.sr.ht openbsd status](https://builds.sr.ht/~araq/nim/openbsd.yml.svg)](https://builds.sr.ht/~araq/nim/openbsd.yml?) This repository contains the Nim compiler, Nim's stdlib, tools and documentation. For more information about Nim, including downloads and documentation for diff --git a/testament/specs.nim b/testament/specs.nim index d0770d03e5f5..c988222f4373 100644 --- a/testament/specs.nim +++ b/testament/specs.nim @@ -237,6 +237,8 @@ proc parseSpec*(filename: string): TSpec = when defined(freebsd): result.err = reDisabled of "arm64": when defined(arm64): result.err = reDisabled + of "openbsd": + when defined(openbsd): result.err = reDisabled else: result.parseErrors.addLine "cannot interpret as a bool: ", e.value of "cmd": diff --git a/tests/coroutines/tgc.nim b/tests/coroutines/tgc.nim index 46f4f8e838f0..86b62537088b 100644 --- a/tests/coroutines/tgc.nim +++ b/tests/coroutines/tgc.nim @@ -1,5 +1,6 @@ discard """ target: "c" + disabled: "openbsd" """ import coro diff --git a/tests/coroutines/twait.nim b/tests/coroutines/twait.nim index 1769966ab16d..2563ad7d301f 100644 --- a/tests/coroutines/twait.nim +++ b/tests/coroutines/twait.nim @@ -1,6 +1,7 @@ discard """ output: "Exit 1\nExit 2" disabled: "macosx" + disabled: "openbsd" target: "c" """ import coro diff --git a/tests/dll/nimhcr_integration.nim b/tests/dll/nimhcr_integration.nim index 64f6bb7086cd..3f73341be70a 100644 --- a/tests/dll/nimhcr_integration.nim +++ b/tests/dll/nimhcr_integration.nim @@ -1,4 +1,5 @@ discard """ + disabled: "openbsd" disabled: "macosx" output: ''' main: HELLO! @@ -151,4 +152,4 @@ update 0 update 1 update 2 -echo "done" +echo "done" \ No newline at end of file diff --git a/tests/dll/nimhcr_unit.nim b/tests/dll/nimhcr_unit.nim index f539a53c8d60..31f39825866c 100644 --- a/tests/dll/nimhcr_unit.nim +++ b/tests/dll/nimhcr_unit.nim @@ -1,4 +1,5 @@ discard """ +disabled: "openbsd" output: ''' fastcall_proc implementation #1 10 11 diff --git a/tests/exception/t9657.nim b/tests/exception/t9657.nim index 0b6e128e0147..1023f9593fc2 100644 --- a/tests/exception/t9657.nim +++ b/tests/exception/t9657.nim @@ -2,6 +2,7 @@ discard """ action: run exitcode: 1 target: "c" + disabled: "openbsd" """ # todo: remove `target: "c"` workaround once #10343 is properly fixed close stdmsg diff --git a/tests/niminaction/Chapter8/sfml/sfml_test.nim b/tests/niminaction/Chapter8/sfml/sfml_test.nim index 3c158d1de73e..5280196c2a28 100644 --- a/tests/niminaction/Chapter8/sfml/sfml_test.nim +++ b/tests/niminaction/Chapter8/sfml/sfml_test.nim @@ -2,6 +2,7 @@ discard """ action: compile disabled: "windows" disabled: "freebsd" +disabled: "openbsd" """ import sfml, os diff --git a/tests/parallel/tarray_of_channels.nim b/tests/parallel/tarray_of_channels.nim index 5139920ea7dd..9479227aac2a 100644 --- a/tests/parallel/tarray_of_channels.nim +++ b/tests/parallel/tarray_of_channels.nim @@ -8,6 +8,7 @@ test test test ''' +disabled: "openbsd" """ # bug #2257 diff --git a/tests/parallel/tflowvar.nim b/tests/parallel/tflowvar.nim index fd3aa326e5ec..9d93bc7c8717 100644 --- a/tests/parallel/tflowvar.nim +++ b/tests/parallel/tflowvar.nim @@ -4,6 +4,7 @@ bazbearbazbear 1''' cmd: "nim $target --threads:on $options $file" + disabled: "openbsd" """ import threadpool diff --git a/tests/stdlib/tgetaddrinfo.nim b/tests/stdlib/tgetaddrinfo.nim index 225546aa9e4a..1c9d020a1278 100644 --- a/tests/stdlib/tgetaddrinfo.nim +++ b/tests/stdlib/tgetaddrinfo.nim @@ -15,7 +15,7 @@ block DGRAM_UDP: doAssert aiList.ai_next == nil freeAddrInfo aiList -when defined(posix) and not defined(haiku) and not defined(freebsd): +when defined(posix) and not defined(haiku) and not defined(freebsd) and not defined(openbsd): block RAW_ICMP: # the port will be ignored diff --git a/tests/stdlib/thttpclient_ssl.nim b/tests/stdlib/thttpclient_ssl.nim index f247ae4426ed..aa278c8117c3 100644 --- a/tests/stdlib/thttpclient_ssl.nim +++ b/tests/stdlib/thttpclient_ssl.nim @@ -1,5 +1,6 @@ discard """ cmd: "nim $target --threads:on -d:ssl $options $file" + disabled: "openbsd" """ # Nim - Basic SSL integration tests diff --git a/tests/stdlib/tosprocterminate.nim b/tests/stdlib/tosprocterminate.nim index d487b5e601f0..c02e0a8da872 100644 --- a/tests/stdlib/tosprocterminate.nim +++ b/tests/stdlib/tosprocterminate.nim @@ -8,6 +8,8 @@ import os, osproc, times, std / monotimes when defined(Windows): const ProgramWhichDoesNotEnd = "notepad" +elif defined(openbsd): + const ProgramWhichDoesNotEnd = "/bin/cat" else: const ProgramWhichDoesNotEnd = "/bin/sh" diff --git a/tests/system/talloc2.nim b/tests/system/talloc2.nim index a321fe741eab..c498a3f4b3d4 100644 --- a/tests/system/talloc2.nim +++ b/tests/system/talloc2.nim @@ -1,5 +1,6 @@ discard """ disabled: "windows" +disabled: "openbsd" joinable: false disabled: 32bit """ diff --git a/tests/system/trealloc.nim b/tests/system/trealloc.nim index e8d772dbd698..1d3e00aff48f 100644 --- a/tests/system/trealloc.nim +++ b/tests/system/trealloc.nim @@ -1,6 +1,7 @@ discard """ output: '''success''' joinable: false + disabled: "openbsd" """ # bug #4818