Fix #16937; --clib option pass library name to backend C compiler correctly (#19754)

* Fix 16937: Make --clib option works

* Make tests/compiler/tcmdlineclib.nim works from any current dir

* Try to fix link error on macosx

* Add a comment to tests/compiler/tcmdlineclib.nims

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
This commit is contained in:
Tomohiro
2022-09-02 02:57:17 +09:00
committed by GitHub
parent a95b6391fd
commit 2a34d143ac
4 changed files with 16 additions and 1 deletions

View File

@@ -803,7 +803,7 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
of "clib":
expectArg(conf, switch, arg, pass, info)
if pass in {passCmd2, passPP}:
conf.cLinkedLibs.add processPath(conf, arg, info).string
conf.cLinkedLibs.add arg
of "header":
if conf != nil: conf.headerFile = arg
incl(conf.globalOptions, optGenIndex)

View File

@@ -0,0 +1,2 @@
# Sample library used by tcmdlineclib.nim
proc test(): int {.cdecl, exportc, dynlib.} = 123

View File

@@ -0,0 +1,3 @@
proc test(): int {.importc, cdecl.}
doAssert test() == 123

View File

@@ -0,0 +1,10 @@
import os
selfExec "c --app:lib " & (projectDir() / "samplelib.nim")
switch("clibdir", projectDir())
--clib:samplelib
# Make test executable can load sample shared library.
# `-rpath` option doesn't work and ignored on Windows.
# But the dll file in same directory as executable file is loaded.
switch("passL", "-Wl,-rpath," & projectDir())