From 3321f37e32521475e2adf27eae2f2895d4e6bc17 Mon Sep 17 00:00:00 2001 From: Ben Siraphob Date: Sun, 20 Jul 2025 23:48:42 -0700 Subject: [PATCH] pike: init at v8.0.2020 --- pkgs/by-name/pi/pike/package.nix | 214 +++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 pkgs/by-name/pi/pike/package.nix diff --git a/pkgs/by-name/pi/pike/package.nix b/pkgs/by-name/pi/pike/package.nix new file mode 100644 index 000000000000..421d5f95a840 --- /dev/null +++ b/pkgs/by-name/pi/pike/package.nix @@ -0,0 +1,214 @@ +{ + lib, + stdenv, + fetchFromGitHub, + fetchurl, + pkg-config, + autoconf, + automake, + libtool, + bison, + flex, + gmp, + pcre, + nettle, + libjpeg, + libpng, + libtiff, + freetype, + sqlite, + libmysqlclient, + postgresql, + openssl, + zlib, + bzip2, + gdbm, + libffi, + expat, + libxml2, + libxslt, + gtk3, + pango, + cairo, + glib, + SDL2, + libGL, + dpkg, + autoPatchelfHook, + ncurses, + libnsl, + libxcrypt-legacy, + nix-update-script, + makeBinaryWrapper, +}: + +let + # Pre-built Pike binary from Debian for bootstrapping + pike-bootstrap = stdenv.mkDerivation (finalAttrs: { + pname = "pike-bootstrap"; + version = "8.0.1956"; + + src = fetchurl { + # Using Debian's pike8.0-core package + url = "http://deb.debian.org/debian/pool/main/p/pike8.0/pike8.0-core_${finalAttrs.version}-1_amd64.deb"; + hash = "sha256-kDaP7GZOW9Wlzg9dSxi+Q8IYduIZneWSsFqRfNh1NFQ="; + }; + + nativeBuildInputs = [ + autoPatchelfHook + dpkg + makeBinaryWrapper + ]; + + buildInputs = [ + gmp + zlib + ncurses + libxcrypt-legacy # for libcrypt.so.1 + nettle # for libnettle and libhogweed + libnsl # for libnsl.so + ]; + + # Ignore missing dependencies since this is just for bootstrapping + autoPatchelfIgnoreMissingDeps = [ + "libcrypt.so.1" + "libnsl.so.2" + ]; + + dontBuild = true; + dontConfigure = true; + + installPhase = '' + runHook preInstall + mkdir -p $out + cp -r usr/* $out/ + + # The binary should be in bin/pike8.0 + if [ -f $out/bin/pike8.0 ]; then + ln -s pike8.0 $out/bin/pike + fi + + # Fix broken symlinks to Debian license files + rm -f $out/lib/pike8.0/modules/Tools.pmod/Legal.pmod/License.pmod/*.txt || true + + # Create wrapper to set proper paths + wrapProgram $out/bin/pike8.0 \ + --set PIKE_MODULE_PATH "$out/lib/pike8.0/modules" \ + --add-flags "-m$out/lib/pike8.0/master.pike" + runHook postInstall + ''; + meta = { + description = "Pike programming language bootstrap"; + longDescription = '' + Pike is a dynamic programming language with a syntax similar to Java and C. + It is simple to learn, does not require long compilation passes and has + powerful built-in data types allowing simple and really fast data manipulation. + ''; + homepage = "https://pike.lysator.liu.se/"; + license = with lib.licenses; [ + gpl2Only + # or + lgpl2Plus + # or + mpl20 + ]; + maintainers = with lib.maintainers; [ siraben ]; + platforms = with lib.platforms; unix ++ windows; + mainProgram = "pike"; + }; + }); +in +stdenv.mkDerivation (finalAttrs: { + pname = "pike"; + version = "v8.0.2020"; + + src = fetchFromGitHub { + owner = "pikelang"; + repo = "Pike"; + rev = finalAttrs.version; + hash = "sha256-VHfMfICtvCHdFTIjiYw9tR5g9KycR7jqdg3wT+T37mA="; + }; + + nativeBuildInputs = [ + pkg-config + bison + flex + autoconf + automake + libtool + pike-bootstrap # built above + ]; + + buildInputs = [ + gmp + pcre + nettle + libjpeg + libpng + libtiff + freetype + sqlite + libmysqlclient + postgresql + openssl + zlib + bzip2 + gdbm + libffi + expat + libxml2 + libxslt + gtk3 + pango + cairo + glib + SDL2 + libGL + ]; + + # Pike uses a custom build system + preConfigure = '' + patchShebangs . + cd src + ./run_autoconfig + ''; + + env = { + RUNPIKE = "${pike-bootstrap}/bin/pike"; + PIKE = "${pike-bootstrap}/bin/pike"; + }; + + configureFlags = [ + "--with-gmp" + "--with-nettle" + "--with-mysql=${libmysqlclient}" + "--with-postgres" + "--with-gtk" + "--with-sdl" + "--with-gl" + ]; + + makeFlags = [ "INSTALLARGS=--traditional" ]; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Pike programming language"; + longDescription = '' + Pike is a dynamic programming language with a syntax similar to Java and C. + It is simple to learn, does not require long compilation passes and has + powerful built-in data types allowing simple and really fast data manipulation. + ''; + homepage = "https://pike.lysator.liu.se/"; + license = with lib.licenses; [ + gpl2Only + # or + lgpl2Plus + # or + mpl20 + ]; + maintainers = with lib.maintainers; [ siraben ]; + platforms = with lib.platforms; unix ++ windows; + mainProgram = "pike"; + }; +})