terra: patch to use NIX_CFLAGS_COMPILE for includes

Terra heavily depends on its ability to interface with C APIs, but
without scanning NIX_CFLAGS_COMPILE, it's awkward and annoying to set up
imports correctly (by scanning and adding the flags yourself) in every
single project.

Luckily most of the Clang initialization is hidden away, but the Lua
code for the Terra library handles all the high-level stuff, so we patch
it in there.

This allows simple examples like:

    C = terralib.includec("zlib.h")

to work instantly, provided `zlib` is a Nix dependency.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
This commit is contained in:
Austin Seipp 2019-09-18 21:44:55 -05:00
parent 5cc70a7b6b
commit 3288d3670f
No known key found for this signature in database
GPG Key ID: 25D2038DEB08021D
2 changed files with 21 additions and 0 deletions

View File

@ -23,6 +23,8 @@ stdenv.mkDerivation rec {
outputs = [ "bin" "dev" "out" "static" ];
patches = [ ./nix-cflags.patch ];
postPatch = ''
substituteInPlace Makefile --replace \
'-lcurses' '-lncurses'

View File

@ -0,0 +1,19 @@
diff --git a/src/terralib.lua b/src/terralib.lua
index 351238d..f26591b 100644
--- a/src/terralib.lua
+++ b/src/terralib.lua
@@ -3395,6 +3395,14 @@ function terra.includecstring(code,cargs,target)
args:insert("-internal-isystem")
args:insert(path)
end
+
+ -- NOTE(aseipp): include relevant Nix header files
+ local nix_cflags = os.getenv('NIX_CFLAGS_COMPILE')
+ if nix_cflags ~= nil then
+ for w in nix_cflags:gmatch("%S+") do
+ args:insert(w)
+ end
+ end
if cargs then
args:insertall(cargs)