mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-28 00:24:18 +00:00
625d7b9043
This includes a lot of fixes for cross-building to Windows and Mac OS X and could possibly fix things even for non-cross-builds, like for example OpenSSL on Windows. The main reason for merging this in 14.04 already is that we already have runInWindowsVM in master and it doesn't work until we actually cross-build Cygwin's setup binary as the upstream version is a fast moving target which gets _overwritten_ on every new release. Conflicts: pkgs/top-level/all-packages.nix
104 lines
3.5 KiB
Nix
104 lines
3.5 KiB
Nix
{ stdenv, fetchurl, readline, compat ? false }:
|
|
|
|
let
|
|
dsoPatch = fetchurl {
|
|
url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/liblua.so.patch?h=packages/lua";
|
|
sha256 = "1by1dy4ql61f5c6njq9ibf9kaqm3y633g2q8j54iyjr4cxvqwqz9";
|
|
name = "lua-arch.patch";
|
|
};
|
|
in
|
|
stdenv.mkDerivation rec {
|
|
name = "lua-${version}";
|
|
majorVersion = "5.2";
|
|
version = "${majorVersion}.2";
|
|
|
|
src = fetchurl {
|
|
url = "http://www.lua.org/ftp/${name}.tar.gz";
|
|
sha256 = "004zyh9p3lpvbwhyhlmrw6wwcia5abx84q4h2brkn4zdypipvmiz";
|
|
};
|
|
|
|
nativeBuildInputs = [ readline ];
|
|
|
|
patches = if stdenv.isDarwin then [ ./5.2.darwin.patch ] else [ dsoPatch ];
|
|
|
|
configurePhase =
|
|
if stdenv.isDarwin
|
|
then ''
|
|
makeFlagsArray=( INSTALL_TOP=$out INSTALL_MAN=$out/share/man/man1 PLAT=macosx CFLAGS="-DLUA_USE_LINUX -fno-common -O2 -fPIC${if compat then " -DLUA_COMPAT_ALL" else ""}" LDLAGS="-fPIC" V=${majorVersion} R=${version} )
|
|
installFlagsArray=( TO_BIN="lua luac" TO_LIB="liblua.${version}.dylib" INSTALL_DATA='cp -d' )
|
|
'' else ''
|
|
makeFlagsArray=( INSTALL_TOP=$out INSTALL_MAN=$out/share/man/man1 PLAT=linux CFLAGS="-DLUA_USE_LINUX -O2 -fPIC${if compat then " -DLUA_COMPAT_ALL" else ""}" LDLAGS="-fPIC" V=${majorVersion} R=${version} )
|
|
installFlagsArray=( TO_BIN="lua luac" TO_LIB="liblua.a liblua.so liblua.so.${majorVersion} liblua.so.${version}" INSTALL_DATA='cp -d' )
|
|
'';
|
|
|
|
postInstall = ''
|
|
mkdir -p "$out/share/doc/lua" "$out/lib/pkgconfig"
|
|
mv "doc/"*.{gif,png,css,html} "$out/share/doc/lua/"
|
|
rmdir $out/{share,lib}/lua/${majorVersion} $out/{share,lib}/lua
|
|
mkdir -p "$out/lib/pkgconfig"
|
|
cat >"$out/lib/pkgconfig/lua.pc" <<EOF
|
|
prefix=$out
|
|
libdir=$out/lib
|
|
includedir=$out/include
|
|
INSTALL_BIN=$out/bin
|
|
INSTALL_INC=$out/include
|
|
INSTALL_LIB=$out/lib
|
|
INSTALL_MAN=$out/man/man1
|
|
|
|
Name: Lua
|
|
Description: An Extensible Extension Language
|
|
Version: ${version}
|
|
Requires:
|
|
Libs: -L$out/lib -llua -lm
|
|
Cflags: -I$out/include
|
|
EOF
|
|
'';
|
|
|
|
crossAttrs = let
|
|
isMingw = stdenv.cross.libc == "msvcrt";
|
|
isDarwin = stdenv.cross.libc == "libSystem";
|
|
in {
|
|
configurePhase = ''
|
|
makeFlagsArray=(
|
|
INSTALL_TOP=$out
|
|
INSTALL_MAN=$out/share/man/man1
|
|
CC=${stdenv.cross.config}-gcc
|
|
STRIP=:
|
|
RANLIB=${stdenv.cross.config}-ranlib
|
|
V=${majorVersion}
|
|
R=${version}
|
|
${if isMingw then "mingw" else stdenv.lib.optionalString isDarwin ''
|
|
AR="${stdenv.cross.config}-ar rcu"
|
|
macosx
|
|
''}
|
|
)
|
|
'' + stdenv.lib.optionalString isMingw ''
|
|
installFlagsArray=(
|
|
TO_BIN="lua.exe luac.exe"
|
|
TO_LIB="liblua.a lua52.dll"
|
|
INSTALL_DATA="cp -d"
|
|
)
|
|
'';
|
|
} // stdenv.lib.optionalAttrs isDarwin {
|
|
postPatch = ''
|
|
sed -i -e 's/-Wl,-soname[^ ]* *//' src/Makefile
|
|
'';
|
|
};
|
|
|
|
meta = {
|
|
homepage = "http://www.lua.org";
|
|
description = "Powerful, fast, lightweight, embeddable scripting language";
|
|
longDescription = ''
|
|
Lua combines simple procedural syntax with powerful data
|
|
description constructs based on associative arrays and extensible
|
|
semantics. Lua is dynamically typed, runs by interpreting bytecode
|
|
for a register-based virtual machine, and has automatic memory
|
|
management with incremental garbage collection, making it ideal
|
|
for configuration, scripting, and rapid prototyping.
|
|
'';
|
|
license = "MIT";
|
|
platforms = stdenv.lib.platforms.unix;
|
|
maintainers = [ stdenv.lib.maintainers.simons ];
|
|
};
|
|
}
|