Skip to content

Commit

Permalink
fix(build): compilation on macos when including nim-nat-traversal
Browse files Browse the repository at this point in the history
- removes the `VERSION` rename to `VERSION_temp` in the Makefile
- instead, relies on `-iqoute` to include the `nim-nat-traversal/vendor/libnatpmp-upstream` directory in the search paths. `-iquote` will match the `vendor/libnatpmp-upstream/VERSION` file for `#include "version"` and not `#include <version>`, the latter being what is included by the macos sdk and was causing issues with `-I`. The [gcc 14.2 docs](https://gcc.gnu.org/onlinedocs/gcc-14.2.0/cpp/Invocation.html#index-I) describe how `-iquote` alleviates this issue:
> Directories specified with -iquote apply only to the quote form of the directive, #include "file". Directories specified with -I, -isystem, or -idirafter apply to lookup for both the #include "file" and #include <file> directives.

For more info, please see status-im/nim-nat-traversal#34.
  • Loading branch information
emizzle committed Jan 22, 2025
1 parent e5df8c5 commit 9c3c2dd
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 22 deletions.
23 changes: 2 additions & 21 deletions build.nims
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,8 @@ mode = ScriptMode.Verbose

import std/os except commandLineParams

const VendorPath = "vendor/nim-nat-traversal/vendor/libnatpmp-upstream"
let
oldVersionFile = joinPath(VendorPath, "VERSION")
newVersionFile = joinPath(VendorPath, "VERSION_temp")

proc renameFile(oldName, newName: string) =
if fileExists(oldName):
mvFile(oldName, newName)
else:
echo "File ", oldName, " does not exist"


### Helper functions
proc buildBinary(name: string, srcDir = "./", params = "", lang = "c") =
# This is a quick workaround to avoid VERSION file conflict on macOS
# More details here: https://github.com/codex-storage/nim-codex/issues/1059
if defined(macosx):
renameFile(oldVersionFile, newVersionFile)

if not dirExists "build":
mkDir "build"
Expand All @@ -37,11 +21,8 @@ proc buildBinary(name: string, srcDir = "./", params = "", lang = "c") =
# Place build output in 'build' folder, even if name includes a longer path.
outName = os.lastPathPart(name)
cmd = "nim " & lang & " --out:build/" & outName & " " & extra_params & " " & srcDir & name & ".nim"
try:
exec(cmd)
finally:
if defined(macosx):
renameFile(newVersionFile, oldVersionFile)

exec(cmd)

proc test(name: string, srcDir = "tests/", params = "", lang = "c") =
buildBinary name, srcDir, params
Expand Down
2 changes: 1 addition & 1 deletion vendor/nim-nat-traversal

0 comments on commit 9c3c2dd

Please sign in to comment.