nixpkgs/pkgs/development/compilers/factor-lang/default.nix
Jonathan Ringer 9bb3fccb5b treewide: pkgs.pkgconfig -> pkgs.pkg-config, move pkgconfig to alias.nix
continuation of #109595

pkgconfig was aliased in 2018, however, it remained in
all-packages.nix due to its wide usage. This cleans
up the remaining references to pkgs.pkgsconfig and
moves the entry to aliases.nix.

python3Packages.pkgconfig remained unchanged because
it's the canonical name of the upstream package
on pypi.
2021-01-19 01:16:25 -08:00

104 lines
3.9 KiB
Nix

{ stdenv, fetchurl, glib, git,
rlwrap, curl, pkg-config, perl, makeWrapper, tzdata, ncurses,
pango, cairo, gtk2, gdk-pixbuf, gtkglext,
mesa, xorg, openssl, unzip }:
stdenv.mkDerivation rec {
pname = "factor-lang";
version = "0.98";
rev = "7999e72aecc3c5bc4019d43dc4697f49678cc3b4";
src = fetchurl {
url = "https://downloads.factorcode.org/releases/0.98/factor-src-0.98.zip";
sha256 = "01ip9mbnar4sv60d2wcwfz62qaamdvbykxw3gbhzqa25z36vi3ri";
};
patches = [
./staging-command-line-0.98-pre.patch
./workdir-0.98-pre.patch
./fuel-dir.patch
];
buildInputs = with xorg; [ git rlwrap curl pkg-config perl makeWrapper
libX11 pango cairo gtk2 gdk-pixbuf gtkglext
mesa libXmu libXt libICE libSM openssl unzip ];
buildPhase = ''
sed -ie '4i GIT_LABEL = heads/master-${rev}' GNUmakefile
make linux-x86-64
# De-memoize xdg-* functions, otherwise they break the image.
sed -ie 's/^MEMO:/:/' basis/xdg/xdg.factor
'';
installPhase = ''
mkdir -p $out/bin $out/lib/factor
# The released image has library path info embedded, so we
# first have to recreate the boot image with Nix paths, and
# then use it to build the Nix release image.
cp boot.unix-x86.64.image $out/lib/factor/factor.image
cp -r basis core extra $out/lib/factor
# Factor uses XDG_CACHE_HOME for cache during compilation.
# We can't have that. So set it to $TMPDIR/.cache
export XDG_CACHE_HOME=$TMPDIR/.cache && mkdir -p $XDG_CACHE_HOME
# There is no ld.so.cache in NixOS so we construct one
# out of known libraries. The side effect is that find-lib
# will work only on the known libraries. There does not seem
# to be a generic solution here.
find $(echo ${stdenv.lib.makeLibraryPath (with xorg; [
glib libX11 pango cairo gtk2 gdk-pixbuf gtkglext
mesa libXmu libXt libICE libSM ])} | sed -e 's#:# #g') -name \*.so.\* > $TMPDIR/so.lst
(echo $(cat $TMPDIR/so.lst | wc -l) "libs found in cache \`/etc/ld.so.cache'";
for l in $(<$TMPDIR/so.lst);
do
echo " $(basename $l) (libc6,x86-64) => $l";
done)> $out/lib/factor/ld.so.cache
sed -ie "s#/sbin/ldconfig -p#cat $out/lib/factor/ld.so.cache#g" \
$out/lib/factor/basis/alien/libraries/finder/linux/linux.factor
sed -ie 's#/usr/share/zoneinfo/#${tzdata}/share/zoneinfo/#g' \
$out/lib/factor/extra/tzinfo/tzinfo.factor
sed -ie 's#/usr/share/terminfo#${ncurses.out}/share/terminfo#g' \
$out/lib/factor/extra/terminfo/terminfo.factor
cp ./factor $out/bin
wrapProgram $out/bin/factor --prefix LD_LIBRARY_PATH : \
"${stdenv.lib.makeLibraryPath (with xorg; [ glib
libX11 pango cairo gtk2 gdk-pixbuf gtkglext
mesa libXmu libXt libICE libSM openssl])}"
sed -ie 's#/bin/.factor-wrapped#/lib/factor/factor#g' $out/bin/factor
mv $out/bin/.factor-wrapped $out/lib/factor/factor
# build full factor image from boot image
(cd $out/bin && ./factor -script -e='"unix-x86.64" USING: system bootstrap.image memory ; make-image save 0 exit' )
# make a new bootstrap image
(cd $out/bin && ./factor -script -e='"unix-x86.64" USING: system tools.deploy.backend ; make-boot-image 0 exit' )
# rebuild final full factor image to include all patched sources
(cd $out/lib/factor && ./factor -i=boot.unix-x86.64.image)
# install fuel mode for emacs
mkdir -p $out/share/emacs/site-lisp
# update default paths in factor-listener.el for fuel mode
substituteInPlace misc/fuel/fuel-listener.el \
--subst-var-by fuel_factor_root_dir $out/lib/factor \
--subst-var-by fuel_listener_factor_binary $out/bin/factor
cp misc/fuel/*.el $out/share/emacs/site-lisp/
'';
meta = with stdenv.lib; {
homepage = "https://factorcode.org";
license = licenses.bsd2;
description = "A concatenative, stack-based programming language";
maintainers = [ maintainers.vrthra maintainers.spacefrogg ];
platforms = [ "x86_64-linux" ];
};
}