about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/fpc/lazarus.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/fpc/lazarus.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/fpc/lazarus.nix94
1 files changed, 74 insertions, 20 deletions
diff --git a/nixpkgs/pkgs/development/compilers/fpc/lazarus.nix b/nixpkgs/pkgs/development/compilers/fpc/lazarus.nix
index 31a0727da90b..713033057911 100644
--- a/nixpkgs/pkgs/development/compilers/fpc/lazarus.nix
+++ b/nixpkgs/pkgs/development/compilers/fpc/lazarus.nix
@@ -1,53 +1,107 @@
-{ stdenv, fetchurl, makeWrapper
+{ stdenv, lib, fetchurl, makeWrapper, writeText
 , fpc, gtk2, glib, pango, atk, gdk-pixbuf
 , libXi, xorgproto, libX11, libXext
 , gdb, gnumake, binutils
+, withQt ? false, qtbase ? null, libqt5pas ? null, wrapQtAppsHook ? null
 }:
+
+# TODO:
+#  1. the build date is embedded in the binary through `$I %DATE%` - we should dump that
+
+let
+  version = "2.0.10-2";
+
+  # as of 2.0.10 a suffix is being added. That may or may not disappear and then
+  # come back, so just leave this here.
+  majorMinorPatch = v:
+    builtins.concatStringsSep "." (lib.take 3 (lib.splitVersion v));
+
+  overrides = writeText "revision.inc" (lib.concatStringsSep "\n" (lib.mapAttrsToList (k: v:
+    "const ${k} = '${v}';") {
+      # this is technically the SVN revision but as we don't have that replace
+      # it with the version instead of showing "Unknown"
+      RevisionStr = version;
+    }));
+
+in
 stdenv.mkDerivation rec {
-  pname = "lazarus";
-  version = "2.0.8";
+  pname = "lazarus-${LCL_PLATFORM}";
+  inherit version;
 
   src = fetchurl {
-    url = "mirror://sourceforge/lazarus/Lazarus%20Zip%20_%20GZip/Lazarus%20${version}/lazarus-${version}.tar.gz";
-    sha256 = "1iciqydb0miqdrh89aj59gy7kfcwikkycqssq9djcqsw1ql3gc4h";
+    url = "mirror://sourceforge/lazarus/Lazarus%20Zip%20_%20GZip/Lazarus%20${majorMinorPatch version}/lazarus-${version}.tar.gz";
+    sha256 = "sha256-ZNViZGjdJKMzKyBfOr0KWBq33hsGCi1X4hhkBmz9Q7c=";
   };
 
+  postPatch = ''
+    cp ${overrides} ide/${overrides.name}
+  '';
+
   buildInputs = [
+    # we need gtk2 unconditionally as that is the default target when building applications with lazarus
     fpc gtk2 glib libXi xorgproto
     libX11 libXext pango atk
-    stdenv.cc makeWrapper gdk-pixbuf
-  ];
+    stdenv.cc gdk-pixbuf
+  ]
+  ++ lib.optionals withQt [ libqt5pas qtbase ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ] ++ lib.optional withQt wrapQtAppsHook;
 
   makeFlags = [
     "FPC=fpc"
     "PP=fpc"
+    "LAZARUS_INSTALL_DIR=${placeholder "out"}/share/lazarus/"
+    "INSTALL_PREFIX=${placeholder "out"}/"
     "REQUIRE_PACKAGES+=tachartlazaruspkg"
     "bigide"
   ];
 
+  LCL_PLATFORM = if withQt then "qt5" else "gtk2";
+
+  NIX_LDFLAGS = lib.concatStringsSep " " ([
+    "-L${stdenv.cc.cc.lib}/lib"
+    "-lX11"
+    "-lXext"
+    "-lXi"
+    "-latk-1.0"
+    "-lc"
+    "-lcairo"
+    "-lgcc_s"
+    "-lgdk-x11-2.0"
+    "-lgdk_pixbuf-2.0"
+    "-lglib-2.0"
+    "-lgtk-x11-2.0"
+    "-lpango-1.0"
+  ]
+  ++ lib.optionals withQt [
+    "-L${lib.getLib libqt5pas}/lib"
+    "-lQt5Pas"
+  ]);
+
   preBuild = ''
-    export makeFlags="$makeFlags LAZARUS_INSTALL_DIR=$out/share/lazarus/ INSTALL_PREFIX=$out/"
-    export NIX_LDFLAGS="$NIX_LDFLAGS -L${stdenv.cc.cc.lib}/lib -lXi -lX11 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lc -lXext -lpango-1.0 -latk-1.0 -lgdk_pixbuf-2.0 -lcairo -lgcc_s"
-    export LCL_PLATFORM=gtk2
     mkdir -p $out/share "$out/lazarus"
     tar xf ${fpc.src} --strip-components=1 -C $out/share -m
-    sed -e 's@/usr/fpcsrc@'"$out/share/fpcsrc@" -i ide/include/unix/lazbaseconf.inc
+    substituteInPlace ide/include/unix/lazbaseconf.inc \
+      --replace '/usr/fpcsrc' "$out/share/fpcsrc"
   '';
 
-  postInstall = ''
-    wrapProgram $out/bin/startlazarus --prefix NIX_LDFLAGS ' ' \
-      "$(echo "$NIX_LDFLAGS" | sed -re 's/-rpath [^ ]+//g')" \
-      --prefix NIX_LDFLAGS_${binutils.suffixSalt} ' ' \
-      "$(echo "$NIX_LDFLAGS" | sed -re 's/-rpath [^ ]+//g')" \
+  postInstall = let
+    ldFlags = ''$(echo "$NIX_LDFLAGS" | sed -re 's/-rpath [^ ]+//g')'';
+  in ''
+    wrapProgram $out/bin/startlazarus \
+      --prefix NIX_LDFLAGS ' ' "${ldFlags}" \
+      --prefix NIX_LDFLAGS_${binutils.suffixSalt} ' ' "${ldFlags}" \
       --prefix LCL_PLATFORM ' ' "$LCL_PLATFORM" \
-      --prefix PATH ':' "${fpc}/bin:${gdb}/bin:${gnumake}/bin:${binutils}/bin"
+      --prefix PATH ':' "${lib.makeBinPath [ fpc gdb gnumake binutils ]}"
   '';
 
   meta = with stdenv.lib; {
-    description = "Lazarus graphical IDE for FreePascal language";
-    homepage = "http://www.lazarus.freepascal.org";
+    description = "Graphical IDE for the FreePascal language";
+    homepage = "https://www.lazarus.freepascal.org";
     license = licenses.gpl2Plus ;
+    maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
-    maintainers = [ maintainers.raskin ];
   };
 }