diff --git a/pkgs/development/compilers/terra/default.nix b/pkgs/development/compilers/terra/default.nix index dea6df1b7aa..6d87d4bbd49 100644 --- a/pkgs/development/compilers/terra/default.nix +++ b/pkgs/development/compilers/terra/default.nix @@ -1,29 +1,40 @@ -{ stdenv, fetchFromGitHub, fetchurl, llvmPackages, ncurses, lua }: +{ stdenv, fetchurl, fetchFromGitHub +, llvmPackages, ncurses, lua +}: let luajitArchive = "LuaJIT-2.0.5.tar.gz"; luajitSrc = fetchurl { - url = "http://luajit.org/download/${luajitArchive}"; + url = "http://luajit.org/download/${luajitArchive}"; sha256 = "0yg9q4q6v028bgh85317ykc9whgxgysp76qzaqgq55y6jy11yjw7"; }; in - stdenv.mkDerivation rec { - pname = "terra-git"; - version = "1.0.0-beta1"; + pname = "terra"; + version = "1.0.0pre1175_${builtins.substring 0 7 src.rev}"; src = fetchFromGitHub { - owner = "zdevito"; - repo = "terra"; - rev = "release-${version}"; - sha256 = "1blv3mbmlwb6fxkck6487ck4qq67cbwq6s1zlp86hy2wckgf8q2c"; + owner = "zdevito"; + repo = "terra"; + rev = "ef6a75ffee15a30f3c74f4e6943851cfbc0fec3d"; + sha256 = "0aky17vbv3d9zng34hp17p9zb00dbzwhvzsdjzrrqvk9lmyvix0s"; }; + nativeBuildInputs = [ lua ]; + buildInputs = with llvmPackages; [ llvm clang-unwrapped ncurses ]; + + doCheck = true; + enableParallelBuilding = true; + hardeningDisable = [ "fortify" ]; outputs = [ "bin" "dev" "out" "static" ]; + patches = [ ./nix-cflags.patch ]; postPatch = '' - substituteInPlace Makefile --replace \ - '-lcurses' '-lncurses' + substituteInPlace Makefile \ + --replace '-lcurses' '-lncurses' + + substituteInPlace src/terralib.lua \ + --subst-var-by NIX_LIBC_INCLUDE ${stdenv.cc.libc.dev}/include ''; preBuild = '' @@ -36,6 +47,8 @@ stdenv.mkDerivation rec { cp ${luajitSrc} build/${luajitArchive} ''; + checkPhase = "(cd tests && ../terra run)"; + installPhase = '' install -Dm755 -t $bin/bin release/bin/terra install -Dm755 -t $out/lib release/lib/terra${stdenv.hostPlatform.extensions.sharedLibrary} @@ -45,13 +58,11 @@ stdenv.mkDerivation rec { cp -rv release/include/terra $dev/include ''; - buildInputs = with llvmPackages; [ lua llvm clang-unwrapped ncurses ]; - meta = with stdenv.lib; { description = "A low-level counterpart to Lua"; - homepage = http://terralang.org/; - platforms = platforms.x86_64; - maintainers = with maintainers; [ jb55 ]; - license = licenses.mit; + homepage = http://terralang.org/; + platforms = platforms.x86_64; + maintainers = with maintainers; [ jb55 thoughtpolice ]; + license = licenses.mit; }; } diff --git a/pkgs/development/compilers/terra/nix-cflags.patch b/pkgs/development/compilers/terra/nix-cflags.patch new file mode 100644 index 00000000000..339ae23cef6 --- /dev/null +++ b/pkgs/development/compilers/terra/nix-cflags.patch @@ -0,0 +1,22 @@ +diff --git a/src/terralib.lua b/src/terralib.lua +index 351238d..e638c90 100644 +--- a/src/terralib.lua ++++ b/src/terralib.lua +@@ -3395,6 +3395,17 @@ function terra.includecstring(code,cargs,target) + args:insert("-internal-isystem") + args:insert(path) + end ++ ++ -- NOTE(aseipp): include relevant Nix header files ++ args:insert("-isystem") ++ args:insert("@NIX_LIBC_INCLUDE@") ++ ++ 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)