summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorMark Hudnall <me@markhudnall.com>2020-11-15 06:11:56 -0800
committerGitHub <noreply@github.com>2020-11-15 09:11:56 -0500
commit79b78663e52de262f662e8a2ee472209e07f0b63 (patch)
tree157486766721f0007f87e5c085004fae4abe4876 /pkgs
parent069f183f16c3ea5d4b6e7625433b92eba77534f7 (diff)
downloadnixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.gz
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.bz2
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.lz
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.xz
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.zst
nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.zip
chicken: support darwin platform (#103748)
Darwin was not included as a supported platform for chicken. However, it compiled and
worked fine after bypassing unsupported platforms.

We make two changes to chicken's derivation. First, we add darwin as a supported
platform.

Second, we set some envvars that force the build to use nix-supplied build
tools. Chicken's Makefile for macOS hardcodes paths to gcc and other build tools
(see
https://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=blob;f=Makefile.macosx;h=5d4d9b0aa1bb4c95e1ba7a55f9586fa86ee5034f;hb=317468e4994e6245d787400359726a9fb97d5d60#l31). We
override these envvars to use the wrapped $CC and bintools provided by nix to make
the build pure.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/compilers/chicken/4/chicken.nix26
-rw-r--r--pkgs/development/compilers/chicken/5/chicken.nix19
2 files changed, 30 insertions, 15 deletions
diff --git a/pkgs/development/compilers/chicken/4/chicken.nix b/pkgs/development/compilers/chicken/4/chicken.nix
index 11f4eaada60..50126fdac92 100644
--- a/pkgs/development/compilers/chicken/4/chicken.nix
+++ b/pkgs/development/compilers/chicken/4/chicken.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }:
+{ stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }:
 
 let
   version = "4.13.0";
@@ -21,31 +21,39 @@ stdenv.mkDerivation {
     sha256 = "0hvckhi5gfny3mlva6d7y9pmx7cbwvq0r7mk11k3sdiik9hlkmdd";
   };
 
-  setupHook = lib.ifEnable (bootstrap-chicken != null) ./setup-hook.sh;
+  setupHook = lib.optional (bootstrap-chicken != null) ./setup-hook.sh;
 
-  buildFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" "VARDIR=$(out)/var/lib" ];
-  installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" "VARDIR=$(out)/var/lib" ];
+  # -fno-strict-overflow is not a supported argument in clang on darwin
+  hardeningDisable = lib.optionals stdenv.isDarwin ["strictoverflow"];
+
+  makeFlags = [
+    "PLATFORM=${platform}" "PREFIX=$(out)"
+    "VARDIR=$(out)/var/lib"
+  ] ++ (lib.optionals stdenv.isDarwin [
+    "XCODE_TOOL_PATH=${darwin.binutils.bintools}/bin"
+    "C_COMPILER=$(CC)"
+  ]);
 
   # We need a bootstrap-chicken to regenerate the c-files after
   # applying a patch to add support for CHICKEN_REPOSITORY_EXTRA
-  patches = lib.ifEnable (bootstrap-chicken != null) [
+  patches = lib.optionals (bootstrap-chicken != null) [
     ./0001-Introduce-CHICKEN_REPOSITORY_EXTRA.patch
   ];
 
   buildInputs = [
     makeWrapper
-  ] ++ (lib.ifEnable (bootstrap-chicken != null) [
+  ] ++ (lib.optionals (bootstrap-chicken != null) [
     bootstrap-chicken
   ]);
 
-  preBuild = lib.ifEnable (bootstrap-chicken != null) ''
+  preBuild = lib.optionalString (bootstrap-chicken != null) ''
     # Backup the build* files - those are generated from hostname,
     # git-tag, etc. and we don't need/want that
     mkdir -p build-backup
     mv buildid buildbranch buildtag.h build-backup
 
     # Regenerate eval.c after the patch
-    make spotless $buildFlags
+    make spotless $makeFlags
 
     mv build-backup/* .
   '';
@@ -64,7 +72,7 @@ stdenv.mkDerivation {
     homepage = "http://www.call-cc.org/";
     license = stdenv.lib.licenses.bsd3;
     maintainers = with stdenv.lib.maintainers; [ corngood ];
-    platforms = stdenv.lib.platforms.linux; # Maybe other non-darwin Unix
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin; # Maybe other Unix
     description = "A portable compiler for the Scheme programming language";
     longDescription = ''
       CHICKEN is a compiler for the Scheme programming language.
diff --git a/pkgs/development/compilers/chicken/5/chicken.nix b/pkgs/development/compilers/chicken/5/chicken.nix
index f07b63ea26f..712012643f3 100644
--- a/pkgs/development/compilers/chicken/5/chicken.nix
+++ b/pkgs/development/compilers/chicken/5/chicken.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }:
+{ stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }:
 
 let
   version = "5.2.0";
@@ -21,14 +21,21 @@ stdenv.mkDerivation {
     sha256 = "1yl0hxm9cirgcp8jgxp6vv29lpswfvaw3zfkh6rsj0vkrv44k4c1";
   };
 
-  setupHook = lib.ifEnable (bootstrap-chicken != null) ./setup-hook.sh;
+  setupHook = lib.optional (bootstrap-chicken != null) ./setup-hook.sh;
 
-  buildFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" ];
-  installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" ];
+  # -fno-strict-overflow is not a supported argument in clang on darwin
+  hardeningDisable = lib.optionals stdenv.isDarwin ["strictoverflow"];
+
+  makeFlags = [
+    "PLATFORM=${platform}" "PREFIX=$(out)"
+  ] ++ (lib.optionals stdenv.isDarwin [
+    "XCODE_TOOL_PATH=${darwin.binutils.bintools}/bin"
+    "C_COMPILER=$(CC)"
+  ]);
 
   buildInputs = [
     makeWrapper
-  ] ++ (lib.ifEnable (bootstrap-chicken != null) [
+  ] ++ (lib.optionals (bootstrap-chicken != null) [
     bootstrap-chicken
   ]);
 
@@ -46,7 +53,7 @@ stdenv.mkDerivation {
     homepage = "http://www.call-cc.org/";
     license = stdenv.lib.licenses.bsd3;
     maintainers = with stdenv.lib.maintainers; [ corngood ];
-    platforms = stdenv.lib.platforms.linux; # Maybe other non-darwin Unix
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin; # Maybe other Unix
     description = "A portable compiler for the Scheme programming language";
     longDescription = ''
       CHICKEN is a compiler for the Scheme programming language.