Files
IUP_Nix/iup.nix
2026-03-31 21:08:44 +02:00

193 lines
5.4 KiB
Nix

{ builtins
, stdenv
, cd
, fetchurl
, lsb-release
, pkg-config
, gtk2
, gtk3
, webkitgtk_4_1
, libsoup_3
, im
, libGL
, libGLU
, lua
, lib
, ftgl-tecgraf
, withGTK3 ? false
}:
let
makePc = import ./make-pc.nix { inherit lib builtins; };
in stdenv.mkDerivation rec {
pname = "iup";
version = "3.32";
src = fetchurl {
url = "mirror://sourceforge/iup/${version}/Docs%20and%20Sources/iup-${version}_Sources.tar.gz";
sha256 = "sha256-hx4X/KD7BNChO2jS/bmINZYzeCbqRMklTKOOPqu2pqU=";
};
nativeBuildInputs = [
lsb-release
pkg-config
];
buildInputs = [
(if withGTK3 then gtk3 else gtk2)
libGL
libGLU
lua
ftgl-tecgraf
] ++ lib.optional withGTK3 [ webkitgtk_4_1 libsoup_3 ];
propagatedBuildInputs = [
cd
im
];
postPatch = ''
sed -i 's/\biupvled\b//g' Makefile
'' + lib.optionalString withGTK3 ''
substituteInPlace srcweb/config.mak \
--replace-fail "\$(GTK)/include/webkitgtk-4.1" "${webkitgtk_4_1.dev}/include/webkitgtk-4.1" \
--replace-fail "\$(GTK)/include/libsoup-3.0" "${libsoup_3.dev}/include/libsoup-3.0"
'' + lib.optionalString (!withGTK3) ''
sed -i 's/\biupweb\b//g' Makefile
sed -i 's/\biupluaweb\b//g' srclua5/Makefile
'';
makeFlags = [
"NO_DEPEND=Yes"
"USE_PKGCONFIG=Yes"
"USE_LUA_VERSION=52"
"GTK_DEFAULT=Yes"
"LUA_SFX="
"CD_LIB=${cd}/lib"
"IM_LIB=${im}/lib"
"LUA_LIB=${lua}/lib"
"LUA_INC=${lua}/include"
"FTGL_LIB=${ftgl-tecgraf}/lib"
"FTGL_INC=${ftgl-tecgraf}/include"
] ++ (if withGTK3 then [ "USE_GTK3=Yes" ] else [ "USE_GTK2=Yes" ]);
NIX_CFLAGS_COMPILE = ''
-Wno-implicit-function-declaration
-Wno-incompatible-pointer-types
'';
iupPc = builtins.toFile "iup.pc" (makePc
"iup"
"A portable toolkit for building graphical user interfaces"
version
(if withGTK3 then "gtk+-3.0" else "gtk+-2.0")
);
iupglPc = builtins.toFile "iupgl.pc" (makePc
"iupgl"
"A portable toolkit for building graphical user interfaces (OpenGL support)"
version
"gl glu"
);
iupcdPc = builtins.toFile "iupcd.pc" (makePc
"iupcd"
"A portable toolkit for building graphical user interfaces (CD support)"
version
"iup cd"
);
iupcontrolsPc = builtins.toFile "iupcontrols.pc" (makePc
"iupcontrols"
"A portable toolkit for building graphical user interfaces (extra widgets)"
version
"iupcd"
);
iupPlotPc = builtins.toFile "iup_plot.pc" (makePc
"iup_plot"
"A portable toolkit for building graphical user interfaces (plotting support)"
version
"iupcd"
);
iupimPc = builtins.toFile "iupim.pc" (makePc
"iupim"
"A portable toolkit for building graphical user interfaces (IM support)"
version
"iup im"
);
iupimglibPc = builtins.toFile "iupimglib.pc" (makePc
"iupimglib"
"A portable toolkit for building graphical user interfaces (image support)"
version
"iup"
);
iupwebPc = builtins.toFile "iupweb.pc" (makePc
"iupweb"
"A portable toolkit for building graphical user interfaces (web view widget)"
version
"webkit2gtk-4.1"
);
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,etc,include,lib/pkgconfig,share/lua/5.2}
mkdir -p $out/share/lua/5.2/{ctrl,elem,gl,lh,scripter}
cp -v lib/Linux*/*.so $out/lib/
cp -v lib/Linux*/*.a $out/lib/ || true
cp -vr include/*.h $out/include/
cp -v lib/Linux*/Lua*/*.so $out/lib/
cp -v lib/Linux*/Lua*/*.a $out/lib/ || true
cp -v srclua5/*.lua "$out/share/lua/5.2/"
cp -v srclua5/ctrl/*.lua "$out/share/lua/5.2/ctrl/"
cp -v srclua5/elem/*.lua "$out/share/lua/5.2/elem/"
cp -v srclua5/gl/*.lua "$out/share/lua/5.2/gl/"
cp -v srclua5/lh/*.lh "$out/share/lua/5.2/lh/"
cp -v srclua5/scripter/*.lua "$out/share/lua/5.2/scripter/"
ln -fs $out/lib/libiuplua52.so $out/share/lua/5.2/iuplua.so
ln -fs $out/lib/libiupluacd52.so $out/share/lua/5.2/iupluacd.so
ln -fs $out/lib/libiupluacontrols52.so $out/share/lua/5.2/iupluacontrols.so
ln -fs $out/lib/libiupluagl52.so $out/share/lua/5.2/iupluagl.so
ln -fs $out/lib/libiupluaglcontrols52.so $out/share/lua/5.2/iupluaglcontrols.so
ln -fs $out/lib/libiupluaim52.so $out/share/lua/5.2/iupluaim.so
ln -fs $out/lib/libiuplua_plot52.so $out/share/lua/5.2/iuplua_plot.so
ln -fs $out/lib/libiuplua_mglplot52.so $out/share/lua/5.2/iuplua_mglplot.so
ln -fs $out/lib/libiuplua_scintilla52.so $out/share/lua/5.2/iuplua_scintilla.so
ln -fs $out/lib/libiupluascripterdlg52.so $out/share/lua/5.2/iupluascripterdlg.so
ln -fs $out/lib/libiupluaimglib52.so $out/share/lua/5.2/iupluaimglib.so
cp -v ${iupPc} $out/lib/pkgconfig/iup.pc
cp -v ${iupglPc} $out/lib/pkgconfig/iupgl.pc
cp -v ${iupcdPc} $out/lib/pkgconfig/iupcd.pc
cp -v ${iupcontrolsPc} $out/lib/pkgconfig/iupcontrols.pc
cp -v ${iupPlotPc} $out/lib/pkgconfig/iup_plot.pc
cp -v ${iupimPc} $out/lib/pkgconfig/iupim.pc
cp -v ${iupimglibPc} $out/lib/pkgconfig/iupimglib.pc
cp -vr bin/Linux*/* $out/bin/
chmod +x $out/bin/*
cp -r etc/* $out/etc
'' + lib.optionalString withGTK3 ''
ln -fs $out/lib/libiupluaweb52.so $out/share/lua/5.2/iupluaweb.so
cp -v ${iupwebPc} $out/lib/pkgconfig/iupweb.pc
'' + ''
runHook postInstall
'';
meta = with lib; {
description = "A portable toolkit for building graphical user interfaces";
license = licenses.mit;
maintainers = [ eko5z ];
platforms = with platforms; gnu ++ linux ++ darwin;
};
}