Merge 'staging' into closure-size
- there were many easy merge conflicts - cc-wrapper needed nontrivial changes Many other problems might've been created by interaction of the branches, but stdenv and a few other packages build fine now.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
{ stdenv, fetchurl, unzip
|
||||
# If jdk is null, require JAVA_HOME in runtime environment, else store
|
||||
# JAVA_HOME=${jdk.home} into grails.
|
||||
, jdk ? null
|
||||
, coreutils, ncurses, gnused, gnugrep # for purity
|
||||
}:
|
||||
|
||||
let
|
||||
binpath = stdenv.lib.makeSearchPath "bin"
|
||||
([ coreutils ncurses gnused gnugrep ] ++ stdenv.lib.optional (jdk != null) jdk);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "grails-2.4.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/${name}.zip";
|
||||
sha256 = "0lqkv0hsiiqa36pfnq5wv7s7nsp9xadmh1ri039bn0llpfck4742";
|
||||
};
|
||||
|
||||
buildInputs = [ unzip ];
|
||||
|
||||
buildPhase = "true";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p "$out"
|
||||
cp -vr . "$out"
|
||||
# Remove (for now) uneeded Windows .bat files
|
||||
rm -f "$out"/bin/*.bat
|
||||
# Improve purity
|
||||
sed -i -e '2iPATH=${binpath}:\$PATH' "$out"/bin/grails
|
||||
'' + stdenv.lib.optionalString (jdk != null) ''
|
||||
# Inject JDK path into grails
|
||||
sed -i -e '2iJAVA_HOME=${jdk.home}' "$out"/bin/grails
|
||||
'';
|
||||
|
||||
preferLocalBuild = true;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Full stack, web application framework for the JVM";
|
||||
longDescription = ''
|
||||
Grails is an Open Source, full stack, web application framework for the
|
||||
JVM. It takes advantage of the Groovy programming language and convention
|
||||
over configuration to provide a productive and stream-lined development
|
||||
experience.
|
||||
'';
|
||||
homepage = http://grails.org/;
|
||||
license = licenses.asl20;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.bjornfor ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{ stdenv, fetchurl, python, utillinux, openssl, http-parser, zlib, libuv, nightly ? false }:
|
||||
|
||||
let
|
||||
version = if nightly then "1.6.5-nightly20150409ff74931107" else "1.6.4";
|
||||
inherit (stdenv.lib) optional maintainers licenses platforms;
|
||||
in stdenv.mkDerivation {
|
||||
name = "iojs-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = if nightly
|
||||
then "https://iojs.org/download/nightly/v${version}/iojs-v${version}.tar.gz"
|
||||
else "https://iojs.org/dist/v${version}/iojs-v${version}.tar.gz";
|
||||
sha256 = if nightly
|
||||
then "04f7r4iv8p0jfylw4sxg3vsv14rbsi6n9hbqnwvdh6554yrm6d35"
|
||||
else "1qzvf7g457dppzxn23wppjcm09vh1n6bhsvz5szhwgjvl0iv2pc7";
|
||||
};
|
||||
|
||||
prePatch = ''
|
||||
sed -e 's|^#!/usr/bin/env python$|#!${python}/bin/python|g' -i configure
|
||||
'';
|
||||
|
||||
configureFlags = [ "--shared-openssl" "--shared-http-parser" "--shared-zlib" "--shared-libuv" ];
|
||||
|
||||
buildInputs = [ python openssl http-parser zlib libuv ] ++ (optional stdenv.isLinux utillinux);
|
||||
setupHook = ../nodejs/setup-hook.sh;
|
||||
|
||||
passthru.interpreterName = "iojs";
|
||||
|
||||
meta = {
|
||||
description = "A friendly fork of Node.js with an open governance model";
|
||||
homepage = https://iojs.org/;
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
Executable
+54
@@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Fetch the latest io.js release (stable/nightly) and update
|
||||
# `default.nix` in this directory.
|
||||
#
|
||||
# Call this from the root of your nixpkgs directory.
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
HERE="$(dirname "$0")"
|
||||
|
||||
latest() {
|
||||
curl -s "$1" | grep 'href="v' \
|
||||
| tail -1 | sed 's/.*href="v//;s/\/".*//'
|
||||
}
|
||||
|
||||
latest_log() {
|
||||
echo "Getting latest $1 version from $2" >&2
|
||||
version=$(latest "$2")
|
||||
echo " -> $version" >&2
|
||||
echo "$version"
|
||||
}
|
||||
|
||||
url() {
|
||||
nix-instantiate -A "$1" \
|
||||
| xargs cat \
|
||||
| sed 's/.*"urls","//;s/".*//'
|
||||
}
|
||||
|
||||
hash() {
|
||||
nix-prefetch-url "$1"
|
||||
}
|
||||
|
||||
hash_log() {
|
||||
echo "Finding hash for $1" >&2
|
||||
value=$(hash "$1")
|
||||
echo " -> $value" >&2
|
||||
echo "$value"
|
||||
}
|
||||
|
||||
stable=$(latest_log stable 'https://iojs.org/dist/')
|
||||
nightly=$(latest_log nightly 'https://iojs.org/download/nightly/')
|
||||
|
||||
sed -i \
|
||||
"/version = if nightly/s/then.*/then \"$nightly\" else \"$stable\";/" \
|
||||
"$HERE/default.nix"
|
||||
|
||||
stableHash=$(hash_log "$(url iojs.src)")
|
||||
nightlyHash=$(hash_log "$(url iojs-nightly.src)")
|
||||
|
||||
sed -i \
|
||||
"/sha256 = if nightly/{N;s/\"[^\"]*\"/\"$nightlyHash\"/;N;s/\"[^\"]*\";/\"$stableHash\";/}" \
|
||||
"$HERE/default.nix"
|
||||
@@ -1,99 +1,333 @@
|
||||
{ stdenv, runCommand, nodejs, neededNatives}:
|
||||
|
||||
args @ { name, src, deps ? [], peerDependencies ? [], flags ? [], preShellHook ? "", postShellHook ? "", ... }:
|
||||
{
|
||||
name, version ? "", src,
|
||||
|
||||
# by default name of nodejs interpreter e.g. "nodejs-${name}"
|
||||
namePrefix ? nodejs.interpreterName + "-",
|
||||
|
||||
# Node package name
|
||||
pkgName ?
|
||||
if version != "" then stdenv.lib.removeSuffix "-${version}" name else
|
||||
(builtins.parseDrvName name).name,
|
||||
|
||||
# List or attribute set of dependencies
|
||||
deps ? {},
|
||||
|
||||
# List or attribute set of peer depencies
|
||||
peerDependencies ? {},
|
||||
|
||||
# List or attribute set of optional dependencies
|
||||
optionalDependencies ? {},
|
||||
|
||||
# List of optional dependencies to skip
|
||||
skipOptionalDependencies ? [],
|
||||
|
||||
# Whether package is binary or library
|
||||
bin ? false,
|
||||
|
||||
# Additional flags passed to npm install
|
||||
flags ? "",
|
||||
|
||||
# Command to be run before shell hook
|
||||
preShellHook ? "",
|
||||
|
||||
# Command to be run after shell hook
|
||||
postShellHook ? "",
|
||||
|
||||
# Same as https://docs.npmjs.com/files/package.json#os
|
||||
os ? [],
|
||||
|
||||
# Same as https://docs.npmjs.com/files/package.json#cpu
|
||||
cpu ? [],
|
||||
|
||||
# Attribute set of already resolved deps (internal),
|
||||
# for avoiding infinite recursion
|
||||
resolvedDeps ? {},
|
||||
|
||||
...
|
||||
} @ args:
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
npmFlags = concatStringsSep " " (map (v: "--${v}") flags);
|
||||
self = let
|
||||
sources = runCommand "node-sources" {} ''
|
||||
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
|
||||
mv $(find . -type d -mindepth 1 -maxdepth 1) $out
|
||||
'';
|
||||
|
||||
sources = runCommand "node-sources" {} ''
|
||||
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
|
||||
mv *node* $out
|
||||
'';
|
||||
platforms = if os == [] then nodejs.meta.platforms else
|
||||
fold (entry: platforms:
|
||||
let
|
||||
filterPlatforms =
|
||||
stdenv.lib.platforms.${removePrefix "!" entry} or [];
|
||||
in
|
||||
# Ignore unknown platforms
|
||||
if filterPlatforms == [] then platforms
|
||||
else
|
||||
if hasPrefix "!" entry then
|
||||
subtractLists (intersectLists filterPlatforms nodejs.meta.platforms) platforms
|
||||
else
|
||||
platforms ++ (intersectLists filterPlatforms nodejs.meta.platforms)
|
||||
) [] os;
|
||||
|
||||
peerDeps = listToAttrs (concatMap (dep: map (name: {
|
||||
inherit name;
|
||||
value = dep;
|
||||
}) (filter (nm: !(elem nm (args.passthru.names or []))) dep.names)) (peerDependencies));
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
unpackPhase = "true";
|
||||
mapDependencies = deps: f: rec {
|
||||
# Convert deps to attribute set
|
||||
attrDeps = if isAttrs deps then deps else
|
||||
(listToAttrs (map (dep: nameValuePair dep.name dep) deps));
|
||||
|
||||
inherit src;
|
||||
# All required node modules, without already resolved dependencies
|
||||
# Also override with already resolved dependencies
|
||||
requiredDeps = mapAttrs (name: dep:
|
||||
dep.override {
|
||||
resolvedDeps = resolvedDeps // { "${name}" = self; };
|
||||
}
|
||||
) (filterAttrs f (removeAttrs attrDeps (attrNames resolvedDeps)));
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
mkdir node_modules
|
||||
${concatStrings (concatMap (dep: map (name: ''
|
||||
ln -sv ${dep}/lib/node_modules/${name} node_modules/
|
||||
'') dep.names) deps)}
|
||||
${concatStrings (mapAttrsToList (name: dep: ''
|
||||
ln -sv ${dep}/lib/node_modules/${name} node_modules/
|
||||
'') peerDeps)}
|
||||
export HOME=$(pwd)
|
||||
runHook postConfigure
|
||||
'';
|
||||
# Recursive dependencies that we want to avoid with shim creation
|
||||
recursiveDeps = filterAttrs f (removeAttrs attrDeps (attrNames requiredDeps));
|
||||
};
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
npm --registry http://www.example.com --nodedir=${sources} install $src ${npmFlags}
|
||||
runHook postBuild
|
||||
'';
|
||||
_dependencies = mapDependencies deps (name: dep:
|
||||
dep.pkgName != pkgName);
|
||||
_optionalDependencies = mapDependencies optionalDependencies (name: dep:
|
||||
(builtins.tryEval dep).success &&
|
||||
!(elem dep.pkgName skipOptionalDependencies)
|
||||
);
|
||||
_peerDependencies = mapDependencies peerDependencies (name: dep:
|
||||
dep.pkgName != pkgName);
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/lib/node_modules
|
||||
${concatStrings (map (name: ''
|
||||
mv node_modules/${name} $out/lib/node_modules
|
||||
rm -fR $out/lib/node_modules/${name}/node_modules
|
||||
ln -sv $out/.dependent-node-modules $out/lib/node_modules/${name}/node_modules
|
||||
if [ -e "$out/lib/node_modules/${name}/man" ]; then
|
||||
mkdir -p $out/share
|
||||
for dir in "$out/lib/node_modules/${name}/man/"*; do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*; do
|
||||
ln -sv $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
fi
|
||||
'') args.passthru.names)}
|
||||
${concatStrings (mapAttrsToList (name: dep: ''
|
||||
mv node_modules/${name} $out/lib/node_modules
|
||||
'') peerDeps)}
|
||||
mv node_modules/.bin $out/lib/node_modules 2>/dev/null || true
|
||||
mv node_modules $out/.dependent-node-modules
|
||||
if [ -d "$out/lib/node_modules/.bin" ]; then
|
||||
ln -sv $out/lib/node_modules/.bin $out/bin
|
||||
requiredDependencies =
|
||||
_dependencies.requiredDeps //
|
||||
_optionalDependencies.requiredDeps //
|
||||
_peerDependencies.requiredDeps;
|
||||
|
||||
recursiveDependencies =
|
||||
_dependencies.recursiveDeps //
|
||||
_optionalDependencies.recursiveDeps //
|
||||
_peerDependencies.recursiveDeps;
|
||||
|
||||
patchShebangs = dir: ''
|
||||
node=`type -p node`
|
||||
coffee=`type -p coffee || true`
|
||||
find -L $out/lib/node_modules/.bin/* -type f -print0 | \
|
||||
xargs -0 sed --follow-symlinks -i \
|
||||
find -L ${dir} -type f -print0 | xargs -0 grep -Il . | \
|
||||
xargs sed --follow-symlinks -i \
|
||||
-e 's@#!/usr/bin/env node@#!'"$node"'@' \
|
||||
-e 's@#!/usr/bin/env coffee@#!'"$coffee"'@' \
|
||||
-e 's@#!/.*/node@#!'"$node"'@' \
|
||||
-e 's@#!/.*/coffee@#!'"$coffee"'@'
|
||||
fi
|
||||
runHook postInstall
|
||||
'';
|
||||
-e 's@#!/.*/coffee@#!'"$coffee"'@' || true
|
||||
'';
|
||||
|
||||
preFixup = concatStringsSep "\n" (map (src: ''
|
||||
find $out -type f -print0 | xargs -0 sed -i 's|${src}|${src.name}|g'
|
||||
'') src);
|
||||
in stdenv.mkDerivation ({
|
||||
inherit src;
|
||||
|
||||
shellHook = ''
|
||||
${preShellHook}
|
||||
export PATH=${nodejs}/bin:$(pwd)/node_modules/.bin:$PATH
|
||||
mkdir -p node_modules
|
||||
${concatStrings (concatMap (dep: map (name: ''
|
||||
ln -sfv ${dep}/lib/node_modules/${name} node_modules/
|
||||
'') dep.names) deps)}
|
||||
${postShellHook}
|
||||
'';
|
||||
} // args // {
|
||||
# Run the node setup hook when this package is a build input
|
||||
propagatedNativeBuildInputs = (args.propagatedNativeBuildInputs or []) ++ [ nodejs ];
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
# Make buildNodePackage useful with --run-env
|
||||
nativeBuildInputs = (args.nativeBuildInputs or []) ++ deps ++ peerDependencies ++ neededNatives;
|
||||
} )
|
||||
${patchShebangs "./"}
|
||||
|
||||
# Some version specifiers (latest, unstable, URLs, file paths) force NPM
|
||||
# to make remote connections or consult paths outside the Nix store.
|
||||
# The following JavaScript replaces these by * to prevent that:
|
||||
# Also some packages require a specific npm version because npm may
|
||||
# resovle dependencies differently, but npm is not used by Nix for dependency
|
||||
# reslution, so these requirements are dropped.
|
||||
|
||||
(
|
||||
cat <<EOF
|
||||
var fs = require('fs');
|
||||
var url = require('url');
|
||||
|
||||
/*
|
||||
* Replaces an impure version specification by *
|
||||
*/
|
||||
function replaceImpureVersionSpec(versionSpec) {
|
||||
var parsedUrl = url.parse(versionSpec);
|
||||
|
||||
if(versionSpec == "latest" || versionSpec == "unstable" ||
|
||||
versionSpec.substr(0, 2) == ".." || dependency.substr(0, 2) == "./" || dependency.substr(0, 2) == "~/" || dependency.substr(0, 1) == '/' || /^[^/]+\/[^/]+$/.test(versionSpec))
|
||||
return '*';
|
||||
else if(parsedUrl.protocol == "git:" || parsedUrl.protocol == "git+ssh:" || parsedUrl.protocol == "git+http:" || parsedUrl.protocol == "git+https:" ||
|
||||
parsedUrl.protocol == "http:" || parsedUrl.protocol == "https:")
|
||||
return '*';
|
||||
else
|
||||
return versionSpec;
|
||||
}
|
||||
|
||||
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
|
||||
|
||||
/* Replace dependencies */
|
||||
if(packageObj.dependencies !== undefined) {
|
||||
for(var dependency in packageObj.dependencies) {
|
||||
var versionSpec = packageObj.dependencies[dependency];
|
||||
packageObj.dependencies[dependency] = replaceImpureVersionSpec(versionSpec);
|
||||
}
|
||||
}
|
||||
|
||||
/* Replace development dependencies */
|
||||
if(packageObj.devDependencies !== undefined) {
|
||||
for(var dependency in packageObj.devDependencies) {
|
||||
var versionSpec = packageObj.devDependencies[dependency];
|
||||
packageObj.devDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
|
||||
}
|
||||
}
|
||||
|
||||
/* Replace optional dependencies */
|
||||
if(packageObj.optionalDependencies !== undefined) {
|
||||
for(var dependency in packageObj.optionalDependencies) {
|
||||
var versionSpec = packageObj.optionalDependencies[dependency];
|
||||
packageObj.optionalDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
|
||||
}
|
||||
}
|
||||
|
||||
/* Ignore npm version requirement */
|
||||
if(packageObj.engines) {
|
||||
delete packageObj.engines.npm;
|
||||
}
|
||||
|
||||
/* Write the fixed JSON file */
|
||||
fs.writeFileSync("package.json", JSON.stringify(packageObj));
|
||||
EOF
|
||||
) | node
|
||||
|
||||
# We do not handle shrinkwraps yet
|
||||
rm npm-shrinkwrap.json 2>/dev/null || true
|
||||
|
||||
mkdir ../build-dir
|
||||
(
|
||||
cd ../build-dir
|
||||
mkdir node_modules
|
||||
|
||||
# Symlink or copy dependencies for node modules
|
||||
# copy is needed if dependency has recursive dependencies,
|
||||
# because node can't follow symlinks while resolving recursive deps.
|
||||
${concatMapStrings (dep:
|
||||
if dep.recursiveDeps == [] then ''
|
||||
ln -sv ${dep}/lib/node_modules/${dep.pkgName} node_modules/
|
||||
'' else ''
|
||||
cp -R ${dep}/lib/node_modules/${dep.pkgName} node_modules/
|
||||
''
|
||||
) (attrValues requiredDependencies)}
|
||||
|
||||
# Create shims for recursive dependenceies
|
||||
${concatMapStrings (dep: ''
|
||||
mkdir -p node_modules/${dep.pkgName}
|
||||
cat > node_modules/${dep.pkgName}/package.json <<EOF
|
||||
{
|
||||
"name": "${dep.pkgName}",
|
||||
"version": "${getVersion dep}"
|
||||
}
|
||||
EOF
|
||||
'') (attrValues recursiveDependencies)}
|
||||
)
|
||||
|
||||
export HOME=$PWD/../build-dir
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# If source was a file, repackage it, so npm pre/post publish hooks are not triggered,
|
||||
if [[ -f $src ]]; then
|
||||
GZIP=-1 tar -czf ../build-dir/package.tgz ./
|
||||
export src=$HOME/package.tgz
|
||||
else
|
||||
export src=$PWD
|
||||
fi
|
||||
|
||||
# Install package
|
||||
(cd $HOME && npm --registry http://www.example.com --nodedir=${sources} install $src --fetch-retries 0 ${flags})
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
(
|
||||
cd $HOME
|
||||
|
||||
# Remove shims
|
||||
${concatMapStrings (dep: ''
|
||||
rm node_modules/${dep.pkgName}/package.json
|
||||
rmdir node_modules/${dep.pkgName}
|
||||
'') (attrValues recursiveDependencies)}
|
||||
|
||||
mkdir -p $out/lib/node_modules
|
||||
|
||||
# Install manual
|
||||
mv node_modules/${pkgName} $out/lib/node_modules
|
||||
rm -fR $out/lib/node_modules/${pkgName}/node_modules
|
||||
cp -r node_modules $out/lib/node_modules/${pkgName}/node_modules
|
||||
|
||||
if [ -e "$out/lib/node_modules/${pkgName}/man" ]; then
|
||||
mkdir -p $out/share
|
||||
for dir in "$out/lib/node_modules/${pkgName}/man/"*; do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*; do
|
||||
ln -sv $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Move peer dependencies to node_modules
|
||||
${concatMapStrings (dep: ''
|
||||
mv node_modules/${dep.pkgName} $out/lib/node_modules
|
||||
'') (attrValues _peerDependencies.requiredDeps)}
|
||||
|
||||
# Install binaries and patch shebangs
|
||||
mv node_modules/.bin $out/lib/node_modules 2>/dev/null || true
|
||||
if [ -d "$out/lib/node_modules/.bin" ]; then
|
||||
ln -sv $out/lib/node_modules/.bin $out/bin
|
||||
${patchShebangs "$out/lib/node_modules/.bin/*"}
|
||||
fi
|
||||
)
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
preFixup = ''
|
||||
find $out -type f -print0 | xargs -0 sed -i 's|${src}|${src.name}|g'
|
||||
'';
|
||||
|
||||
shellHook = ''
|
||||
${preShellHook}
|
||||
export PATH=${nodejs}/bin:$(pwd)/node_modules/.bin:$PATH
|
||||
mkdir -p node_modules
|
||||
${concatMapStrings (dep: ''
|
||||
ln -sfv ${dep}/lib/node_modules/${dep.pkgName} node_modules/
|
||||
'') (attrValues requiredDependencies)}
|
||||
${postShellHook}
|
||||
'';
|
||||
|
||||
# Stipping does not make a lot of sense in node packages
|
||||
dontStrip = true;
|
||||
|
||||
meta = {
|
||||
inherit platforms;
|
||||
maintainers = [ stdenv.lib.maintainers.offline ];
|
||||
};
|
||||
|
||||
passthru.pkgName = pkgName;
|
||||
} // (filterAttrs (n: v: all (k: n != k) ["deps" "resolvedDeps" "optionalDependencies"]) args) // {
|
||||
name = namePrefix + name;
|
||||
|
||||
# Run the node setup hook when this package is a build input
|
||||
propagatedNativeBuildInputs = (args.propagatedNativeBuildInputs or []) ++ [ nodejs ];
|
||||
|
||||
nativeBuildInputs =
|
||||
(args.nativeBuildInputs or []) ++ neededNatives ++
|
||||
(attrValues requiredDependencies);
|
||||
|
||||
# Expose list of recursive dependencies upstream, up to the package that
|
||||
# caused recursive dependency
|
||||
recursiveDeps =
|
||||
(flatten (
|
||||
map (dep: remove name dep.recursiveDeps) (attrValues requiredDependencies)
|
||||
)) ++
|
||||
(attrNames recursiveDependencies);
|
||||
});
|
||||
|
||||
in self
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{ stdenv, fetchurl, openssl, python, zlib, v8, utillinux, http-parser, c-ares, pkgconfig, runCommand, which }:
|
||||
{ stdenv, fetchurl, openssl, python, zlib, libuv, v8, utillinux, http-parser
|
||||
, pkgconfig, runCommand, which, unstableVersion ? false
|
||||
}:
|
||||
|
||||
let
|
||||
dtrace = runCommand "dtrace-native" {} ''
|
||||
@@ -6,17 +8,17 @@ let
|
||||
ln -sv /usr/sbin/dtrace $out/bin
|
||||
'';
|
||||
|
||||
version = "0.10.30";
|
||||
version = "0.12.0";
|
||||
|
||||
# !!! Should we also do shared libuv?
|
||||
deps = {
|
||||
inherit openssl zlib http-parser;
|
||||
cares = c-ares;
|
||||
inherit openssl zlib libuv;
|
||||
|
||||
# disabled system v8 because v8 3.14 no longer receives security fixes
|
||||
# we fall back to nodejs' internal v8 copy which receives backports for now
|
||||
# inherit v8
|
||||
};
|
||||
} // (stdenv.lib.optionalAttrs (!stdenv.isDarwin) {
|
||||
inherit http-parser;
|
||||
});
|
||||
|
||||
sharedConfigureFlags = name: [
|
||||
"--shared-${name}"
|
||||
@@ -30,7 +32,7 @@ in stdenv.mkDerivation {
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://nodejs.org/dist/v${version}/node-v${version}.tar.gz";
|
||||
sha256 = "1li5hs8dada2lj9j82xas39kr1fs0wql9qbly5p2cpszgwqbvz1x";
|
||||
sha256 = "0cifd2qhpyrbxx71a4hsagzk24qas8m5zvwcyhx69cz9yhxf404p";
|
||||
};
|
||||
|
||||
configureFlags = concatMap sharedConfigureFlags (builtins.attrNames deps);
|
||||
@@ -50,6 +52,8 @@ in stdenv.mkDerivation {
|
||||
++ optionals stdenv.isDarwin [ pkgconfig dtrace ];
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
passthru.interpreterName = "nodejs";
|
||||
|
||||
meta = {
|
||||
description = "Event-driven I/O framework for the V8 JavaScript engine";
|
||||
homepage = http://nodejs.org;
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
{ stdenv, fetchurl, openssl, python, zlib, v8, utillinux, http-parser, c-ares
|
||||
, pkgconfig, runCommand, which
|
||||
}:
|
||||
|
||||
let
|
||||
dtrace = runCommand "dtrace-native" {} ''
|
||||
mkdir -p $out/bin
|
||||
ln -sv /usr/sbin/dtrace $out/bin
|
||||
'';
|
||||
|
||||
version = "0.10.38";
|
||||
|
||||
# !!! Should we also do shared libuv?
|
||||
deps = {
|
||||
inherit openssl zlib;
|
||||
|
||||
# disabled system v8 because v8 3.14 no longer receives security fixes
|
||||
# we fall back to nodejs' internal v8 copy which receives backports for now
|
||||
# inherit v8
|
||||
} // (stdenv.lib.optionalAttrs (!stdenv.isDarwin) {
|
||||
inherit http-parser;
|
||||
})
|
||||
// ({ cares = c-ares; });
|
||||
|
||||
sharedConfigureFlags = name: [
|
||||
"--shared-${name}"
|
||||
"--shared-${name}-includes=${builtins.getAttr name deps}/include"
|
||||
"--shared-${name}-libpath=${builtins.getAttr name deps}/lib"
|
||||
];
|
||||
|
||||
inherit (stdenv.lib) concatMap optional optionals maintainers licenses platforms;
|
||||
in stdenv.mkDerivation {
|
||||
name = "nodejs-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://nodejs.org/dist/v${version}/node-v${version}.tar.gz";
|
||||
sha256 = "12xpa9jzry5g0j41908498qqs8v0q6miqkv6mggyzas8bvnshgai";
|
||||
};
|
||||
|
||||
configureFlags = concatMap sharedConfigureFlags (builtins.attrNames deps);
|
||||
|
||||
prePatch = ''
|
||||
sed -e 's|^#!/usr/bin/env python$|#!${python}/bin/python|g' -i configure
|
||||
'';
|
||||
|
||||
patches = if stdenv.isDarwin then [ ./no-xcode.patch ] else null;
|
||||
|
||||
postPatch = if stdenv.isDarwin then ''
|
||||
(cd tools/gyp; patch -Np1 -i ${../../python-modules/gyp/no-darwin-cflags.patch})
|
||||
'' else null;
|
||||
|
||||
buildInputs = [ python which ]
|
||||
++ (optional stdenv.isLinux utillinux)
|
||||
++ optionals stdenv.isDarwin [ pkgconfig openssl dtrace ];
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
meta = {
|
||||
description = "Event-driven I/O framework for the V8 JavaScript engine";
|
||||
homepage = http://nodejs.org;
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.goibhniu maintainers.shlevy ];
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
};
|
||||
}
|
||||
@@ -14,11 +14,11 @@ let
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "remarkjs-${version}";
|
||||
|
||||
version = "0.6.5";
|
||||
version = "0.7.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/gnab/remark/archive/v${version}.tar.gz";
|
||||
sha256 = "1bh3hmhq99qqd3qg747xwjqkyppc9vf3b5nhi56556rwc02cn17p";
|
||||
sha256 = "1a2il6aa0g9cnig56ykmq8lr626pbxlsllk6js41h6gcn214rw60";
|
||||
};
|
||||
|
||||
buildInputs = with nodePackages; [
|
||||
@@ -58,7 +58,7 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
meta = {
|
||||
homepage = http://remarkjs.com;
|
||||
description = "A simple, in-browser, markdown-driven slideshow tool.";
|
||||
description = "A simple, in-browser, markdown-driven slideshow tool";
|
||||
maintainers = [ stdenv.lib.maintainers.rickynils ];
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
license = stdenv.lib.licenses.mit;
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{ stdenv, fetchgit, lessc, closurecompiler }:
|
||||
{ stdenv, fetchFromGitHub, lessc, closurecompiler }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "twitter-bootstrap-${version}";
|
||||
version = "2.3.2";
|
||||
|
||||
src = fetchgit {
|
||||
url = https://github.com/twitter/bootstrap.git;
|
||||
rev = "refs/tags/v${version}";
|
||||
sha256 = "093z4yxqhrr30vna67ksxz3bq146q2xr05hinh78pg2ls88k77la";
|
||||
src = fetchFromGitHub {
|
||||
owner = "twitter";
|
||||
repo = "bootstrap";
|
||||
rev = "v${version}";
|
||||
sha256 = "0b4dsk9sqlkwwfgqqjlgi6p05qz2jssmmz4adm83f31sx70lgh4g";
|
||||
};
|
||||
|
||||
buildInputs = [ lessc closurecompiler ];
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
{ stdenv, fetchurl, perlPackages, ncurses, lynx, makeWrapper }:
|
||||
|
||||
perlPackages.buildPerlPackage rec {
|
||||
name = "wml-2.0.11";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://thewml.org/distrib/${name}.tar.gz";
|
||||
sha256 = "0jjxpq91x7y2mgixz7ghqp01m24qa37wl3zz515rrzv7x8cyy4cf";
|
||||
};
|
||||
|
||||
# Getting lots of Non-ASCII character errors from pod2man.
|
||||
# Inserting =encoding utf8 before the first =head occurrence.
|
||||
# Wasn't able to fix mp4h.
|
||||
preConfigure = ''
|
||||
touch Makefile.PL
|
||||
for i in wml_backend/p6_asubst/asubst.src wml_aux/freetable/freetable.src wml_docs/*.pod wml_include/des/*.src wml_include/fmt/*.src; do
|
||||
sed -i '0,/^=head/{s/^=head/=encoding utf8\n=head/}' $i
|
||||
done
|
||||
sed -i 's/ doc / /g' wml_backend/p2_mp4h/Makefile.in
|
||||
sed -i '/p2_mp4h\/doc/d' Makefile.in
|
||||
'';
|
||||
|
||||
buildInputs = [ perlPackages.perl ncurses lynx makeWrapper ];
|
||||
|
||||
patches = [ ./redhat-with-thr.patch ./dynaloader.patch ./no_bitvector.patch ];
|
||||
|
||||
preFixup = ''
|
||||
substituteInPlace $out/bin/wml \
|
||||
--replace "File::PathConvert::realpath" "Cwd::realpath" \
|
||||
--replace "File::PathConvert::abs2rel" "File::Spec->abs2rel" \
|
||||
--replace "File::PathConvert" "File::Spec"
|
||||
|
||||
wrapProgram $out/bin/wml \
|
||||
--set PERL5LIB ${with perlPackages; stdenv.lib.makePerlPath [
|
||||
BitVector TermReadKey ImageSize
|
||||
]}
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = http://thewml.org/;
|
||||
description = "Off-line HTML generation toolkit for Unix";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
# Not sure what broke this build, it used to work
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
--- a/wml_backend/p3_eperl/configure 2009-10-03 19:12:29.000000000 -0500
|
||||
+++ b/wml_backend/p3_eperl/configure 2009-10-03 19:12:45.000000000 -0500
|
||||
@@ -678,7 +678,7 @@
|
||||
#define HAVE_PERL_DYNALOADER 1
|
||||
EOF
|
||||
|
||||
- perl_dla=$perl_archlib/auto/DynaLoader/DynaLoader.a
|
||||
+ perl_dla=$perl_archlib/CORE/libperl.so
|
||||
;;
|
||||
* )
|
||||
rc=no
|
||||
@@ -0,0 +1,10 @@
|
||||
--- a/wml_common/Makefile.in 2014-12-17 00:28:25.156736048 +0100
|
||||
+++ b/wml_common/Makefile.in 2014-12-17 00:28:30.501817958 +0100
|
||||
@@ -45,7 +45,6 @@
|
||||
have_gd=0
|
||||
|
||||
SUBDIRS = \
|
||||
- bitvector \
|
||||
filepathconvert \
|
||||
gd \
|
||||
getoptlong \
|
||||
@@ -0,0 +1,19 @@
|
||||
Description: Fix FTBFS with Perl 5.16
|
||||
Patch taken from Fedora
|
||||
Debian-Bug: 676263
|
||||
Fedora-Bug: 839609
|
||||
Author: Jitka Plesnikova
|
||||
Origin: https://bugzilla.redhat.com/show_bug.cgi?id=839609
|
||||
|
||||
--- a/wml_backend/p3_eperl/eperl_perl5.h 2012-07-27 10:49:27.048508799 +0200
|
||||
+++ b/wml_backend/p3_eperl/eperl_perl5.h 2012-07-27 10:50:16.288714291 +0200
|
||||
@@ -72,9 +72,6 @@
|
||||
# define PL_curstash curstash
|
||||
#endif
|
||||
|
||||
-#ifndef WITH_THR
|
||||
-# define PL_defoutgv defoutgv
|
||||
-#endif
|
||||
|
||||
/*
|
||||
Initialization of locales when building a new Perl interpreter.
|
||||
Reference in New Issue
Block a user