uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead
https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948 this can do it nicely. Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
commit
56de2bcd43
30691 changed files with 3076956 additions and 0 deletions
47
pkgs/development/web/bloomrpc/default.nix
Normal file
47
pkgs/development/web/bloomrpc/default.nix
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
{ lib, fetchurl, appimageTools }:
|
||||
|
||||
let
|
||||
pname = "bloomrpc";
|
||||
version = "1.5.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/uw-labs/${pname}/releases/download/${version}/BloomRPC-${version}.AppImage";
|
||||
name = "${pname}-${version}.AppImage";
|
||||
sha512 = "PebdYDpcplPN5y3mRu1mG6CXenYfYvBXNLgIGEr7ZgKnR5pIaOfJNORSNYSdagdGDb/B1sxuKfX4+4f2cqgb6Q==";
|
||||
};
|
||||
|
||||
appimageContents = appimageTools.extractType2 {
|
||||
inherit pname src version;
|
||||
};
|
||||
in
|
||||
appimageTools.wrapType2 {
|
||||
inherit pname src version;
|
||||
|
||||
profile = ''
|
||||
export LC_ALL=C.UTF-8
|
||||
'';
|
||||
|
||||
multiPkgs = null; # no 32bit needed
|
||||
extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs ++ [ pkgs.bash ];
|
||||
|
||||
extraInstallCommands = ''
|
||||
ln -s $out/bin/${pname}-${version} $out/bin/${pname}
|
||||
install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
|
||||
install -m 444 -D ${appimageContents}/${pname}.png \
|
||||
$out/share/icons/hicolor/512x512/apps/${pname}.png
|
||||
substituteInPlace $out/share/applications/${pname}.desktop \
|
||||
--replace 'Exec=AppRun' 'Exec=${pname}'
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "GUI Client for GRPC Services";
|
||||
longDescription = ''
|
||||
Inspired by Postman and GraphQL Playground BloomRPC aims to provide the simplest
|
||||
and most efficient developer experience for exploring and querying your GRPC services.
|
||||
'';
|
||||
homepage = "https://github.com/uw-labs/bloomrpc";
|
||||
license = licenses.lgpl3Plus;
|
||||
maintainers = with maintainers; [ zoedsoupe ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
||||
34
pkgs/development/web/bootstrap-studio/default.nix
Normal file
34
pkgs/development/web/bootstrap-studio/default.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{ lib, fetchurl, appimageTools }:
|
||||
|
||||
let
|
||||
pname = "bootstrap-studio";
|
||||
version = "6.0.1";
|
||||
src = fetchurl {
|
||||
url = "https://bootstrapstudio.io/releases/desktop/${version}/Bootstrap%20Studio.AppImage";
|
||||
sha256 = "sha256-piRqIB/bCF0IBZfXdlXrc7gmPTIUDbk8xhP7X5ozyWg=";
|
||||
};
|
||||
appimageContents = appimageTools.extractType2 { inherit pname version src; };
|
||||
in
|
||||
appimageTools.wrapType2 {
|
||||
inherit pname version src;
|
||||
|
||||
extraInstallCommands = ''
|
||||
mv $out/bin/${pname}-${version} $out/bin/${pname}
|
||||
|
||||
install -m 444 -D ${appimageContents}/bstudio.desktop -t $out/share/applications
|
||||
|
||||
substituteInPlace $out/share/applications/bstudio.desktop \
|
||||
--replace 'Exec=AppRun' 'Exec=${pname}'
|
||||
|
||||
install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/0x0/apps/bstudio.png \
|
||||
$out/share/icons/hicolor/512x512/apps/bstudio.png
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Drag-and-drop designer for bootstrap";
|
||||
homepage = "https://bootstrapstudio.io/";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ khushraj ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
||||
68
pkgs/development/web/cog/default.nix
Normal file
68
pkgs/development/web/cog/default.nix
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, cmake
|
||||
, pkg-config
|
||||
, wayland
|
||||
, wayland-protocols
|
||||
, libwpe
|
||||
, libwpe-fdo
|
||||
, glib-networking
|
||||
, webkitgtk
|
||||
, makeWrapper
|
||||
, wrapGAppsHook
|
||||
, gnome
|
||||
, gdk-pixbuf
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "cog";
|
||||
version = "0.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "igalia";
|
||||
repo = "cog";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-eF7rvOjZntcMmn622342yqfp4ksZ6R/FFBT36bYCViE=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
wayland-protocols
|
||||
wayland
|
||||
libwpe
|
||||
libwpe-fdo
|
||||
webkitgtk
|
||||
glib-networking
|
||||
gdk-pixbuf
|
||||
gnome.adwaita-icon-theme
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
wayland
|
||||
makeWrapper
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
depsBuildsBuild = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCOG_USE_WEBKITGTK=ON"
|
||||
];
|
||||
|
||||
# not ideal, see https://github.com/WebPlatformForEmbedded/libwpe/issues/59
|
||||
preFixup = ''
|
||||
wrapProgram $out/bin/cog \
|
||||
--prefix LD_LIBRARY_PATH : ${libwpe-fdo}/lib
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A small single “window” launcher for the WebKit WPE port";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.matthewbauer ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
35
pkgs/development/web/csslint/default.nix
Normal file
35
pkgs/development/web/csslint/default.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{ lib, stdenv, fetchurl, nodejs }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "0.10.0";
|
||||
pname = "csslint";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://registry.npmjs.org/csslint/-/${pname}-${version}.tgz";
|
||||
sha256 = "1gq2x0pf2p4jhccvn3y3kjhm1lmb4jsfdbzjdh924w8m3sr9jdid";
|
||||
};
|
||||
|
||||
# node is the interpreter used to run this script
|
||||
buildInputs = [ nodejs ];
|
||||
|
||||
installPhase = ''
|
||||
sed -i "s/path\.join/path\.resolve/g" cli.js # fixes csslint issue #167
|
||||
mkdir -p $out/bin;
|
||||
cp -r * $out/bin
|
||||
mv $out/bin/cli.js $out/bin/csslint
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Checks CSS for syntax errors and other problems";
|
||||
longDescription = ''
|
||||
CSSLint is a tool to help point out problems with your CSS
|
||||
code. It does basic syntax checking as well as applying a set of
|
||||
rules to the code that look for problematic patterns or signs of
|
||||
inefficiency. The rules are all pluggable, so you can easily
|
||||
write your own or omit ones you don't want. '';
|
||||
homepage = "https://nodejs.org";
|
||||
license = licenses.bsd2;
|
||||
maintainers = [ maintainers.goibhniu ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
# `cypress-example-kitchensink`
|
||||
|
||||
This directory 'packages' [cypress-example-kitchensink](https://github.com/cypress-io/cypress-example-kitchensink),
|
||||
which is used in `cypress.passthru.tests`.
|
||||
|
||||
The app is not really intended for deployment, so I didn't bother with actual packaging, just testing.
|
||||
If your real-world app looks like `cypress-example-kitchensink`, you'll want to use Nix multiple outputs so you don't deploy your test videos along with your app.
|
||||
Alternatively, you can set it up so that one derivation builds your server exe and another derivation takes that server exe and runs it with the cypress e2e tests.
|
||||
|
||||
## Peculiarities
|
||||
|
||||
**cypress and Cypress** are distinct names.
|
||||
- `cypress` is the npm module, containing the executable `cypress`
|
||||
- whereas the executable `Cypress` comes from `pkgs.cypress`, a binary distribution (as of writing) by cypress.io.
|
||||
|
||||
**updateScript** is not provided for this example project. This seems preferable,
|
||||
because updates to it aren't particularly valuable and have a significant overhead.
|
||||
The goal is to smoke test `cypress`; not run the latest test suite (which it isn't anyway).
|
||||
|
||||
## Updating
|
||||
|
||||
- update the hash in `src.nix`
|
||||
- run `regen-nix`
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# This file has been generated by node2nix 1.9.0. Do not edit!
|
||||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
|
||||
inherit pkgs nodejs;
|
||||
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
|
||||
};
|
||||
in
|
||||
import ./node-packages.nix {
|
||||
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit callPackage;
|
||||
inherit nodeEnv;
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
{ callPackage
|
||||
, cypress
|
||||
, nodejs-12_x
|
||||
, # FIXME: duplicated from ./regen-nix. node2nix should expose this
|
||||
nodePackages
|
||||
, xorg
|
||||
, pkgs
|
||||
, stdenv
|
||||
,
|
||||
}:
|
||||
|
||||
let
|
||||
fromNode2nix = import ./cypress-example-kitchensink.nix {
|
||||
inherit pkgs;
|
||||
};
|
||||
|
||||
nodeDependencies = fromNode2nix.shell.nodeDependencies.overrideAttrs (o: {
|
||||
CYPRESS_INSTALL_BINARY = "0";
|
||||
PUPPETEER_SKIP_DOWNLOAD = "1";
|
||||
});
|
||||
|
||||
fontConfigEtc = (
|
||||
pkgs.nixos { config.fonts.fontconfig.enable = true; }
|
||||
).config.environment.etc.fonts.source;
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "cypress-example-kitchensink";
|
||||
src = callPackage ./src.nix { };
|
||||
passthru.fc = fontConfigEtc;
|
||||
nativeBuildInputs = [
|
||||
cypress
|
||||
nodejs-12_x
|
||||
xorg.xorgserver
|
||||
nodePackages.jsonplaceholder
|
||||
];
|
||||
FONTCONFIG_PATH = fontConfigEtc;
|
||||
postPatch = ''
|
||||
# Use our own offline backend. 15011 means js0n ;)
|
||||
sed -e 's^https://jsonplaceholder.cypress.io^http://localhost:15011^g' -i $(find . -type f)
|
||||
'';
|
||||
buildPhase = ''
|
||||
ln -s ${nodeDependencies}/lib/node_modules ./node_modules
|
||||
PATH="${nodeDependencies}/bin:$PATH"
|
||||
runHook preBuild
|
||||
PORT=15011 jsonplaceholder &
|
||||
# assumption: jsonplaceholder start far quicker than cypress run
|
||||
|
||||
export CYPRESS_RUN_BINARY=${cypress}/bin/Cypress
|
||||
export HOME=$PWD/home
|
||||
mkdir $HOME
|
||||
npm run test
|
||||
runHook postBuild
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r cypress/videos $out/
|
||||
'';
|
||||
}
|
||||
|
|
@ -0,0 +1,567 @@
|
|||
# This file originates from node2nix
|
||||
|
||||
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile}:
|
||||
|
||||
let
|
||||
# Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
|
||||
utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
|
||||
|
||||
python = if nodejs ? python then nodejs.python else python2;
|
||||
|
||||
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
|
||||
tarWrapper = runCommand "tarWrapper" {} ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
cat > $out/bin/tar <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
|
||||
EOF
|
||||
|
||||
chmod +x $out/bin/tar
|
||||
'';
|
||||
|
||||
# Function that generates a TGZ file from a NPM project
|
||||
buildNodeSourceDist =
|
||||
{ name, version, src, ... }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "node-tarball-${name}-${version}";
|
||||
inherit src;
|
||||
buildInputs = [ nodejs ];
|
||||
buildPhase = ''
|
||||
export HOME=$TMPDIR
|
||||
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/tarballs
|
||||
mv $tgzFile $out/tarballs
|
||||
mkdir -p $out/nix-support
|
||||
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
};
|
||||
|
||||
includeDependencies = {dependencies}:
|
||||
lib.optionalString (dependencies != [])
|
||||
(lib.concatMapStrings (dependency:
|
||||
''
|
||||
# Bundle the dependencies of the package
|
||||
mkdir -p node_modules
|
||||
cd node_modules
|
||||
|
||||
# Only include dependencies if they don't exist. They may also be bundled in the package.
|
||||
if [ ! -e "${dependency.name}" ]
|
||||
then
|
||||
${composePackage dependency}
|
||||
fi
|
||||
|
||||
cd ..
|
||||
''
|
||||
) dependencies);
|
||||
|
||||
# Recursively composes the dependencies of a package
|
||||
composePackage = { name, packageName, src, dependencies ? [], ... }@args:
|
||||
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
|
||||
DIR=$(pwd)
|
||||
cd $TMPDIR
|
||||
|
||||
unpackFile ${src}
|
||||
|
||||
# Make the base dir in which the target dependency resides first
|
||||
mkdir -p "$(dirname "$DIR/${packageName}")"
|
||||
|
||||
if [ -f "${src}" ]
|
||||
then
|
||||
# Figure out what directory has been unpacked
|
||||
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
|
||||
|
||||
# Restore write permissions to make building work
|
||||
find "$packageDir" -type d -exec chmod u+x {} \;
|
||||
chmod -R u+w "$packageDir"
|
||||
|
||||
# Move the extracted tarball into the output folder
|
||||
mv "$packageDir" "$DIR/${packageName}"
|
||||
elif [ -d "${src}" ]
|
||||
then
|
||||
# Get a stripped name (without hash) of the source directory.
|
||||
# On old nixpkgs it's already set internally.
|
||||
if [ -z "$strippedName" ]
|
||||
then
|
||||
strippedName="$(stripHash ${src})"
|
||||
fi
|
||||
|
||||
# Restore write permissions to make building work
|
||||
chmod -R u+w "$strippedName"
|
||||
|
||||
# Move the extracted directory into the output folder
|
||||
mv "$strippedName" "$DIR/${packageName}"
|
||||
fi
|
||||
|
||||
# Unset the stripped name to not confuse the next unpack step
|
||||
unset strippedName
|
||||
|
||||
# Include the dependencies of the package
|
||||
cd "$DIR/${packageName}"
|
||||
${includeDependencies { inherit dependencies; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
'';
|
||||
|
||||
pinpointDependencies = {dependencies, production}:
|
||||
let
|
||||
pinpointDependenciesFromPackageJSON = writeTextFile {
|
||||
name = "pinpointDependencies.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function resolveDependencyVersion(location, name) {
|
||||
if(location == process.env['NIX_STORE']) {
|
||||
return null;
|
||||
} else {
|
||||
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
|
||||
|
||||
if(fs.existsSync(dependencyPackageJSON)) {
|
||||
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
|
||||
|
||||
if(dependencyPackageObj.name == name) {
|
||||
return dependencyPackageObj.version;
|
||||
}
|
||||
} else {
|
||||
return resolveDependencyVersion(path.resolve(location, ".."), name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function replaceDependencies(dependencies) {
|
||||
if(typeof dependencies == "object" && dependencies !== null) {
|
||||
for(var dependency in dependencies) {
|
||||
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
|
||||
|
||||
if(resolvedVersion === null) {
|
||||
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
|
||||
} else {
|
||||
dependencies[dependency] = resolvedVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the package.json configuration */
|
||||
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
|
||||
|
||||
/* Pinpoint all dependencies */
|
||||
replaceDependencies(packageObj.dependencies);
|
||||
if(process.argv[2] == "development") {
|
||||
replaceDependencies(packageObj.devDependencies);
|
||||
}
|
||||
replaceDependencies(packageObj.optionalDependencies);
|
||||
|
||||
/* Write the fixed package.json file */
|
||||
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
|
||||
'';
|
||||
};
|
||||
in
|
||||
''
|
||||
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
|
||||
|
||||
${lib.optionalString (dependencies != [])
|
||||
''
|
||||
if [ -d node_modules ]
|
||||
then
|
||||
cd node_modules
|
||||
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
|
||||
cd ..
|
||||
fi
|
||||
''}
|
||||
'';
|
||||
|
||||
# Recursively traverses all dependencies of a package and pinpoints all
|
||||
# dependencies in the package.json file to the versions that are actually
|
||||
# being used.
|
||||
|
||||
pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
|
||||
''
|
||||
if [ -d "${packageName}" ]
|
||||
then
|
||||
cd "${packageName}"
|
||||
${pinpointDependencies { inherit dependencies production; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
fi
|
||||
'';
|
||||
|
||||
# Extract the Node.js source code which is used to compile packages with
|
||||
# native bindings
|
||||
nodeSources = runCommand "node-sources" {} ''
|
||||
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
|
||||
mv node-* $out
|
||||
'';
|
||||
|
||||
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
|
||||
addIntegrityFieldsScript = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function augmentDependencies(baseDir, dependencies) {
|
||||
for(var dependencyName in dependencies) {
|
||||
var dependency = dependencies[dependencyName];
|
||||
|
||||
// Open package.json and augment metadata fields
|
||||
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
|
||||
var packageJSONPath = path.join(packageJSONDir, "package.json");
|
||||
|
||||
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
|
||||
console.log("Adding metadata fields to: "+packageJSONPath);
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
|
||||
|
||||
if(dependency.integrity) {
|
||||
packageObj["_integrity"] = dependency.integrity;
|
||||
} else {
|
||||
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
|
||||
}
|
||||
|
||||
if(dependency.resolved) {
|
||||
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
|
||||
} else {
|
||||
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
|
||||
}
|
||||
|
||||
if(dependency.from !== undefined) { // Adopt from property if one has been provided
|
||||
packageObj["_from"] = dependency.from;
|
||||
}
|
||||
|
||||
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
|
||||
}
|
||||
|
||||
// Augment transitive dependencies
|
||||
if(dependency.dependencies !== undefined) {
|
||||
augmentDependencies(packageJSONDir, dependency.dependencies);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(fs.existsSync("./package-lock.json")) {
|
||||
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
|
||||
|
||||
if(![1, 2].includes(packageLock.lockfileVersion)) {
|
||||
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if(packageLock.dependencies !== undefined) {
|
||||
augmentDependencies(".", packageLock.dependencies);
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
|
||||
reconstructPackageLock = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var packageObj = JSON.parse(fs.readFileSync("package.json"));
|
||||
|
||||
var lockObj = {
|
||||
name: packageObj.name,
|
||||
version: packageObj.version,
|
||||
lockfileVersion: 1,
|
||||
requires: true,
|
||||
dependencies: {}
|
||||
};
|
||||
|
||||
function augmentPackageJSON(filePath, dependencies) {
|
||||
var packageJSON = path.join(filePath, "package.json");
|
||||
if(fs.existsSync(packageJSON)) {
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
|
||||
dependencies[packageObj.name] = {
|
||||
version: packageObj.version,
|
||||
integrity: "sha1-000000000000000000000000000=",
|
||||
dependencies: {}
|
||||
};
|
||||
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
|
||||
}
|
||||
}
|
||||
|
||||
function processDependencies(dir, dependencies) {
|
||||
if(fs.existsSync(dir)) {
|
||||
var files = fs.readdirSync(dir);
|
||||
|
||||
files.forEach(function(entry) {
|
||||
var filePath = path.join(dir, entry);
|
||||
var stats = fs.statSync(filePath);
|
||||
|
||||
if(stats.isDirectory()) {
|
||||
if(entry.substr(0, 1) == "@") {
|
||||
// When we encounter a namespace folder, augment all packages belonging to the scope
|
||||
var pkgFiles = fs.readdirSync(filePath);
|
||||
|
||||
pkgFiles.forEach(function(entry) {
|
||||
if(stats.isDirectory()) {
|
||||
var pkgFilePath = path.join(filePath, entry);
|
||||
augmentPackageJSON(pkgFilePath, dependencies);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
augmentPackageJSON(filePath, dependencies);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
processDependencies("node_modules", lockObj.dependencies);
|
||||
|
||||
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
|
||||
'';
|
||||
};
|
||||
|
||||
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
|
||||
let
|
||||
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
|
||||
in
|
||||
''
|
||||
# Pinpoint the versions of all dependencies to the ones that are actually being used
|
||||
echo "pinpointing versions of dependencies..."
|
||||
source $pinpointDependenciesScriptPath
|
||||
|
||||
# Patch the shebangs of the bundled modules to prevent them from
|
||||
# calling executables outside the Nix store as much as possible
|
||||
patchShebangs .
|
||||
|
||||
# Deploy the Node.js package by running npm install. Since the
|
||||
# dependencies have been provided already by ourselves, it should not
|
||||
# attempt to install them again, which is good, because we want to make
|
||||
# it Nix's responsibility. If it needs to install any dependencies
|
||||
# anyway (e.g. because the dependency parameters are
|
||||
# incomplete/incorrect), it fails.
|
||||
#
|
||||
# The other responsibilities of NPM are kept -- version checks, build
|
||||
# steps, postprocessing etc.
|
||||
|
||||
export HOME=$TMPDIR
|
||||
cd "${packageName}"
|
||||
runHook preRebuild
|
||||
|
||||
${lib.optionalString bypassCache ''
|
||||
${lib.optionalString reconstructLock ''
|
||||
if [ -f package-lock.json ]
|
||||
then
|
||||
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
|
||||
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
|
||||
rm package-lock.json
|
||||
else
|
||||
echo "No package-lock.json file found, reconstructing..."
|
||||
fi
|
||||
|
||||
node ${reconstructPackageLock}
|
||||
''}
|
||||
|
||||
node ${addIntegrityFieldsScript}
|
||||
''}
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
|
||||
|
||||
if [ "''${dontNpmInstall-}" != "1" ]
|
||||
then
|
||||
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
|
||||
rm -f npm-shrinkwrap.json
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
|
||||
fi
|
||||
'';
|
||||
|
||||
# Builds and composes an NPM package including all its dependencies
|
||||
buildNodePackage =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, preRebuild ? ""
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "node_${name}-${version}";
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit nodejs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall preRebuild unpackPhase buildPhase;
|
||||
|
||||
compositionScript = composePackage args;
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
# Create and enter a root node_modules/ folder
|
||||
mkdir -p $out/lib/node_modules
|
||||
cd $out/lib/node_modules
|
||||
|
||||
# Compose the package and all its dependencies
|
||||
source $compositionScriptPath
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Create symlink to the deployed executable folder, if applicable
|
||||
if [ -d "$out/lib/node_modules/.bin" ]
|
||||
then
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
fi
|
||||
|
||||
# Create symlinks to the deployed manual page folders, if applicable
|
||||
if [ -d "$out/lib/node_modules/${packageName}/man" ]
|
||||
then
|
||||
mkdir -p $out/share
|
||||
for dir in "$out/lib/node_modules/${packageName}/man/"*
|
||||
do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*
|
||||
do
|
||||
ln -s $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Run post install hook, if provided
|
||||
runHook postInstall
|
||||
'';
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a node environment (a node_modules folder and a set of binaries)
|
||||
buildNodeDependencies =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "node-dependencies-${name}-${version}";
|
||||
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall unpackPhase buildPhase;
|
||||
|
||||
includeScript = includeDependencies { inherit dependencies; };
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/${packageName}
|
||||
cd $out/${packageName}
|
||||
|
||||
source $includeScriptPath
|
||||
|
||||
# Create fake package.json to make the npm commands work properly
|
||||
cp ${src}/package.json .
|
||||
chmod 644 package.json
|
||||
${lib.optionalString bypassCache ''
|
||||
if [ -f ${src}/package-lock.json ]
|
||||
then
|
||||
cp ${src}/package-lock.json .
|
||||
fi
|
||||
''}
|
||||
|
||||
# Go to the parent folder to make sure that all packages are pinpointed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Expose the executables that were installed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
mv ${packageName} lib
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
'';
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a development shell
|
||||
buildNodeShell =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
nodeDependencies = buildNodeDependencies args;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "node-shell-${name}-${version}";
|
||||
|
||||
buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
cat > $out/bin/shell <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$shellHook
|
||||
exec ${stdenv.shell}
|
||||
EOF
|
||||
chmod +x $out/bin/shell
|
||||
'';
|
||||
|
||||
# Provide the dependencies in a development shell through the NODE_PATH environment variable
|
||||
inherit nodeDependencies;
|
||||
shellHook = lib.optionalString (dependencies != []) ''
|
||||
export NODE_PATH=${nodeDependencies}/lib/node_modules
|
||||
export PATH="${nodeDependencies}/bin:$PATH"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
|
||||
buildNodePackage = lib.makeOverridable buildNodePackage;
|
||||
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
|
||||
buildNodeShell = lib.makeOverridable buildNodeShell;
|
||||
}
|
||||
10290
pkgs/development/web/cypress/cypress-example-kitchensink/node-packages.nix
generated
Normal file
10290
pkgs/development/web/cypress/cypress-example-kitchensink/node-packages.nix
generated
Normal file
File diff suppressed because it is too large
Load diff
21
pkgs/development/web/cypress/cypress-example-kitchensink/regen-nix
Executable file
21
pkgs/development/web/cypress/cypress-example-kitchensink/regen-nix
Executable file
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell ./regen-nix.nix
|
||||
#!nix-shell -i bash
|
||||
|
||||
node2nix \
|
||||
--nodejs-12 \
|
||||
--input $src/package.json \
|
||||
--lock $src/package-lock.json \
|
||||
--composition cypress-example-kitchensink.nix \
|
||||
--development \
|
||||
;
|
||||
|
||||
# node2nix produces opinionated expressions that work for in-repo packaging
|
||||
# but aren't ideal for Nixpkgs:
|
||||
sed -i cypress-example-kitchensink.nix \
|
||||
-e 's^fetchgit^fetchgit callPackage^'
|
||||
sed -i node-packages.nix \
|
||||
-e 's^fetchgit, ^fetchgit, callPackage, ^' \
|
||||
-e 's^src = .*/nix/store/.*-source^src = callPackage ./src.nix {}^' \
|
||||
-e 's^nix-gitignore.gitignoreSourcePure^(ignore: src: src)^' \
|
||||
;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
{ pkgs ? import ../../../../.. { config = { }; overlays = [ ]; } }:
|
||||
|
||||
pkgs.mkShell {
|
||||
nativeBuildInputs = [
|
||||
pkgs.nodePackages.node2nix
|
||||
];
|
||||
src = pkgs.callPackage ./src.nix { };
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{ fetchFromGitHub }: fetchFromGitHub {
|
||||
owner = "cypress-io";
|
||||
repo = "cypress-example-kitchensink";
|
||||
rev = "1572887a2003c2f35ff46d14f5f1cdfef975c9be";
|
||||
sha256 = "sha256-A7d95b9V707iOzlIg+3nItPPB8HNVVOjPhGqa8MXRPE=";
|
||||
}
|
||||
77
pkgs/development/web/cypress/default.nix
Normal file
77
pkgs/development/web/cypress/default.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{ alsa-lib
|
||||
, autoPatchelfHook
|
||||
, callPackage
|
||||
, fetchzip
|
||||
, gtk2
|
||||
, gtk3
|
||||
, lib
|
||||
, mesa
|
||||
, nss
|
||||
, stdenv
|
||||
, udev
|
||||
, unzip
|
||||
, wrapGAppsHook
|
||||
, xorg
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "cypress";
|
||||
version = "9.6.0";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip";
|
||||
sha256 = "Mac6lmwQqbj9EPfpG0iLI8Qx04q7E0swmTqXx0J+Sdc=";
|
||||
};
|
||||
|
||||
# don't remove runtime deps
|
||||
dontPatchELF = true;
|
||||
|
||||
nativeBuildInputs = [ autoPatchelfHook wrapGAppsHook unzip ];
|
||||
|
||||
buildInputs = with xorg; [
|
||||
libXScrnSaver
|
||||
libXdamage
|
||||
libXtst
|
||||
libxshmfence
|
||||
] ++ [
|
||||
nss
|
||||
gtk2
|
||||
alsa-lib
|
||||
gtk3
|
||||
mesa # for libgbm
|
||||
];
|
||||
|
||||
runtimeDependencies = [ (lib.getLib udev) ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin $out/opt/cypress
|
||||
cp -vr * $out/opt/cypress/
|
||||
# Let's create the file binary_state ourselves to make the npm package happy on initial verification.
|
||||
# Cypress now verifies version by reading bin/resources/app/package.json
|
||||
mkdir -p $out/bin/resources/app
|
||||
printf '{"version":"%b"}' $version > $out/bin/resources/app/package.json
|
||||
# Cypress now looks for binary_state.json in bin
|
||||
echo '{"verified": true}' > $out/binary_state.json
|
||||
ln -s $out/opt/cypress/Cypress $out/bin/Cypress
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = ./update.sh;
|
||||
|
||||
tests = {
|
||||
example = callPackage ./cypress-example-kitchensink { };
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Fast, easy and reliable testing for anything that runs in a browser";
|
||||
homepage = "https://www.cypress.io";
|
||||
license = licenses.mit;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ tweber mmahut ];
|
||||
};
|
||||
}
|
||||
10
pkgs/development/web/cypress/update.sh
Executable file
10
pkgs/development/web/cypress/update.sh
Executable file
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p common-updater-scripts curl jq
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
basedir="$(git rev-parse --show-toplevel)"
|
||||
version="$(curl -sL https://cdn.cypress.io/desktop/ | jq '.version' --raw-output)"
|
||||
|
||||
cd "$basedir"
|
||||
update-source-version cypress "$version"
|
||||
89
pkgs/development/web/deno/default.nix
Normal file
89
pkgs/development/web/deno/default.nix
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, callPackage
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, installShellFiles
|
||||
, libiconv
|
||||
, libobjc
|
||||
, Security
|
||||
, CoreServices
|
||||
, Metal
|
||||
, Foundation
|
||||
, QuartzCore
|
||||
, librusty_v8 ? callPackage ./librusty_v8.nix { }
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "deno";
|
||||
version = "1.22.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "denoland";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-HKuP3P7gBimzbhdEr2NwZNkp8hhkN7sJA9qRa0CDVew=";
|
||||
};
|
||||
cargoSha256 = "sha256-hxaqMcvwVeOSybqp10BzJOetVTwCx1mrUIP2H8WjCGw=";
|
||||
|
||||
postPatch = ''
|
||||
# upstream uses lld on aarch64-darwin for faster builds
|
||||
# within nix lld looks for CoreFoundation rather than CoreFoundation.tbd and fails
|
||||
substituteInPlace .cargo/config --replace '"-C", "link-arg=-fuse-ld=lld"' ""
|
||||
'';
|
||||
|
||||
# Install completions post-install
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
buildAndTestSubdir = "cli";
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin
|
||||
[ libiconv libobjc Security CoreServices Metal Foundation QuartzCore ];
|
||||
|
||||
# The v8 package will try to download a `librusty_v8.a` release at build time to our read-only filesystem
|
||||
# To avoid this we pre-download the file and export it via RUSTY_V8_ARCHIVE
|
||||
RUSTY_V8_ARCHIVE = librusty_v8;
|
||||
|
||||
# Tests have some inconsistencies between runs with output integration tests
|
||||
# Skipping until resolved
|
||||
doCheck = false;
|
||||
|
||||
preInstall = ''
|
||||
find ./target -name libswc_common${stdenv.hostPlatform.extensions.sharedLibrary} -delete
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
installShellCompletion --cmd deno \
|
||||
--bash <($out/bin/deno completions bash) \
|
||||
--fish <($out/bin/deno completions fish) \
|
||||
--zsh <($out/bin/deno completions zsh)
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
$out/bin/deno --help
|
||||
$out/bin/deno --version | grep "deno ${version}"
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update/update.ts;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://deno.land/";
|
||||
changelog = "https://github.com/denoland/deno/releases/tag/v${version}";
|
||||
description = "A secure runtime for JavaScript and TypeScript";
|
||||
longDescription = ''
|
||||
Deno aims to be a productive and secure scripting environment for the modern programmer.
|
||||
Deno will always be distributed as a single executable.
|
||||
Given a URL to a Deno program, it is runnable with nothing more than the ~15 megabyte zipped executable.
|
||||
Deno explicitly takes on the role of both runtime and package manager.
|
||||
It uses a standard browser-compatible protocol for loading modules: URLs.
|
||||
Among other things, Deno is a great replacement for utility scripts that may have been historically written with
|
||||
bash or python.
|
||||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ jk ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
};
|
||||
}
|
||||
21
pkgs/development/web/deno/librusty_v8.nix
Normal file
21
pkgs/development/web/deno/librusty_v8.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# auto-generated file -- DO NOT EDIT!
|
||||
{ rust, stdenv, fetchurl }:
|
||||
|
||||
let
|
||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
||||
fetch_librusty_v8 = args: fetchurl {
|
||||
name = "librusty_v8-${args.version}";
|
||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${arch}.a";
|
||||
sha256 = args.shas.${stdenv.hostPlatform.system};
|
||||
meta = { inherit (args) version; };
|
||||
};
|
||||
in
|
||||
fetch_librusty_v8 {
|
||||
version = "0.43.1";
|
||||
shas = {
|
||||
x86_64-linux = "sha256-xsKV3/MXwQExON5Bq1qRUShPV0wXEtUHB/DTVjVyWfQ=";
|
||||
aarch64-linux = "sha256-wBtpDG4GxSR4jeAZjclNqVDankWBmxf0cH0LKM4smjM=";
|
||||
x86_64-darwin = "sha256-BGrbwRoPUcSIW4Q3PF8p6vjkTKGLISBxLjOXDWcSjag=";
|
||||
aarch64-darwin = "sha256-4OyQPQPIQ94TanY1hxRTdcWZi5didvyLupLfQ516YL4=";
|
||||
};
|
||||
}
|
||||
55
pkgs/development/web/deno/update/common.ts
Normal file
55
pkgs/development/web/deno/update/common.ts
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
interface GHRelease {
|
||||
tag_name: string;
|
||||
}
|
||||
|
||||
const decode = (buffer: Uint8Array) => new TextDecoder("utf-8").decode(buffer);
|
||||
const decodeTrim = (b: Uint8Array) => decode(b).trimEnd();
|
||||
export const run = async (command: string, args: string[]) => {
|
||||
const cmd = Deno.run({
|
||||
cmd: [command, ...args],
|
||||
stdout: "piped",
|
||||
stderr: "piped",
|
||||
});
|
||||
if (!(await cmd.status()).success) {
|
||||
const error = await cmd.stderrOutput().then(decodeTrim);
|
||||
// Known error we can ignore
|
||||
if (error.includes("'allow-unsafe-native-code-during-evaluation'")) {
|
||||
// Extract the target sha256 out of the error
|
||||
const target = " got: sha256:";
|
||||
const match = error
|
||||
.split("\n")
|
||||
.find((l) => l.includes(target))
|
||||
?.split(target)[1];
|
||||
if (typeof match !== "undefined") {
|
||||
return match;
|
||||
}
|
||||
}
|
||||
throw new Error(error);
|
||||
}
|
||||
return cmd.output().then(decodeTrim);
|
||||
};
|
||||
|
||||
// Exports
|
||||
export const versionRegExp = /\d+\.\d+\.\d+/;
|
||||
export const sha256RegExp = /[a-z0-9]{52}|sha256-.{44}/;
|
||||
|
||||
export const getExistingVersion = async (filePath: string) =>
|
||||
read(filePath).then(
|
||||
(s) => s.match(genValueRegExp("version", versionRegExp))?.shift() || "",
|
||||
);
|
||||
|
||||
export const getLatestVersion = (owner: string, repo: string) =>
|
||||
fetch(`https://api.github.com/repos/${owner}/${repo}/releases`)
|
||||
.then((res) => res.json())
|
||||
.then((res: GHRelease[]) => res[0].tag_name);
|
||||
|
||||
// The (?<=) and (?=) allow replace to only change inside
|
||||
// Match the regex passed in or empty
|
||||
export const genValueRegExp = (key: string, regex: RegExp) =>
|
||||
new RegExp(`(?<=${key} = ")(${regex.source}|)(?=")`);
|
||||
|
||||
export const logger = (name: string) =>
|
||||
(...a: any) => console.log(`[${name}]`, ...a);
|
||||
|
||||
export const read = Deno.readTextFile;
|
||||
export const write = Deno.writeTextFile;
|
||||
90
pkgs/development/web/deno/update/librusty_v8.ts
Normal file
90
pkgs/development/web/deno/update/librusty_v8.ts
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
import {
|
||||
genValueRegExp,
|
||||
getExistingVersion,
|
||||
logger,
|
||||
run,
|
||||
versionRegExp,
|
||||
write,
|
||||
} from "./common.ts";
|
||||
|
||||
const log = logger("librusty_v8");
|
||||
|
||||
export interface Architecture {
|
||||
nix: string;
|
||||
rust: string;
|
||||
}
|
||||
interface PrefetchResult {
|
||||
arch: Architecture;
|
||||
sha256: string;
|
||||
}
|
||||
|
||||
const getLibrustyV8Version = async (
|
||||
owner: string,
|
||||
repo: string,
|
||||
version: string,
|
||||
) =>
|
||||
fetch(`https://github.com/${owner}/${repo}/raw/${version}/core/Cargo.toml`)
|
||||
.then((res) => res.text())
|
||||
.then((txt) => txt.match(genValueRegExp("v8", versionRegExp))?.shift());
|
||||
|
||||
const fetchArchShaTasks = (version: string, arches: Architecture[]) =>
|
||||
arches.map(
|
||||
async (arch: Architecture): Promise<PrefetchResult> => {
|
||||
log("Fetching:", arch.nix);
|
||||
const sha256 = await run("nix-prefetch", [
|
||||
`
|
||||
{ fetchurl }:
|
||||
fetchurl {
|
||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${version}/librusty_v8_release_${arch.rust}.a";
|
||||
}
|
||||
`,
|
||||
]);
|
||||
log("Done: ", arch.nix);
|
||||
return { arch, sha256 };
|
||||
},
|
||||
);
|
||||
|
||||
const templateDeps = (version: string, deps: PrefetchResult[]) =>
|
||||
`# auto-generated file -- DO NOT EDIT!
|
||||
{ rust, stdenv, fetchurl }:
|
||||
|
||||
let
|
||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
||||
fetch_librusty_v8 = args: fetchurl {
|
||||
name = "librusty_v8-\${args.version}";
|
||||
url = "https://github.com/denoland/rusty_v8/releases/download/v\${args.version}/librusty_v8_release_\${arch}.a";
|
||||
sha256 = args.shas.\${stdenv.hostPlatform.system};
|
||||
meta = { inherit (args) version; };
|
||||
};
|
||||
in
|
||||
fetch_librusty_v8 {
|
||||
version = "${version}";
|
||||
shas = {
|
||||
${deps.map(({ arch, sha256 }) => ` ${arch.nix} = "${sha256}";`).join("\n")}
|
||||
};
|
||||
}
|
||||
`;
|
||||
|
||||
export async function updateLibrustyV8(
|
||||
filePath: string,
|
||||
owner: string,
|
||||
repo: string,
|
||||
denoVersion: string,
|
||||
arches: Architecture[],
|
||||
) {
|
||||
log("Starting librusty_v8 update");
|
||||
// 0.0.0
|
||||
const version = await getLibrustyV8Version(owner, repo, denoVersion);
|
||||
if (typeof version !== "string") {
|
||||
throw "no librusty_v8 version";
|
||||
}
|
||||
log("librusty_v8 version:", version);
|
||||
const existingVersion = await getExistingVersion(filePath);
|
||||
if (version === existingVersion) {
|
||||
log("Version already matches latest, skipping...");
|
||||
return;
|
||||
}
|
||||
const archShaResults = await Promise.all(fetchArchShaTasks(version, arches));
|
||||
await write(filePath, templateDeps(version, archShaResults));
|
||||
log("Finished deps update");
|
||||
}
|
||||
67
pkgs/development/web/deno/update/src.ts
Normal file
67
pkgs/development/web/deno/update/src.ts
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
import {
|
||||
genValueRegExp,
|
||||
logger,
|
||||
read,
|
||||
run,
|
||||
sha256RegExp,
|
||||
versionRegExp,
|
||||
write,
|
||||
} from "./common.ts";
|
||||
|
||||
interface Replacer {
|
||||
regex: RegExp;
|
||||
value: string;
|
||||
}
|
||||
|
||||
const log = logger("src");
|
||||
|
||||
const prefetchSha256 = (nixpkgs: string, version: string) =>
|
||||
run("nix-prefetch", ["-f", nixpkgs, "deno.src", "--rev", version]);
|
||||
const prefetchCargoSha256 = (nixpkgs: string) =>
|
||||
run(
|
||||
"nix-prefetch",
|
||||
[`{ sha256 }: (import ${nixpkgs} {}).deno.cargoDeps.overrideAttrs (_: { inherit sha256; })`],
|
||||
);
|
||||
|
||||
const replace = (str: string, replacers: Replacer[]) =>
|
||||
replacers.reduce(
|
||||
(str, r) => str.replace(r.regex, r.value),
|
||||
str,
|
||||
);
|
||||
|
||||
const updateNix = (filePath: string, replacers: Replacer[]) =>
|
||||
read(filePath).then((str) => write(filePath, replace(str, replacers)));
|
||||
|
||||
const genVerReplacer = (k: string, value: string): Replacer => (
|
||||
{ regex: genValueRegExp(k, versionRegExp), value }
|
||||
);
|
||||
const genShaReplacer = (k: string, value: string): Replacer => (
|
||||
{ regex: genValueRegExp(k, sha256RegExp), value }
|
||||
);
|
||||
|
||||
export async function updateSrc(
|
||||
filePath: string,
|
||||
nixpkgs: string,
|
||||
denoVersion: string,
|
||||
) {
|
||||
log("Starting src update");
|
||||
const trimVersion = denoVersion.substr(1);
|
||||
log("Fetching sha256 for:", trimVersion);
|
||||
const sha256 = await prefetchSha256(nixpkgs, denoVersion);
|
||||
log("sha256 to update:", sha256);
|
||||
await updateNix(
|
||||
filePath,
|
||||
[
|
||||
genVerReplacer("version", trimVersion),
|
||||
genShaReplacer("sha256", sha256),
|
||||
],
|
||||
);
|
||||
log("Fetching cargoSha256 for:", sha256);
|
||||
const cargoSha256 = await prefetchCargoSha256(nixpkgs);
|
||||
log("cargoSha256 to update:", cargoSha256);
|
||||
await updateNix(
|
||||
filePath,
|
||||
[genShaReplacer("cargoSha256", cargoSha256)],
|
||||
);
|
||||
log("Finished src update");
|
||||
}
|
||||
43
pkgs/development/web/deno/update/update.ts
Executable file
43
pkgs/development/web/deno/update/update.ts
Executable file
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
/*
|
||||
#!nix-shell -i "deno run --allow-net --allow-run --allow-read --allow-write" -p deno git nix-prefetch
|
||||
*/
|
||||
import { getExistingVersion, getLatestVersion, logger } from "./common.ts";
|
||||
import { Architecture, updateLibrustyV8 } from "./librusty_v8.ts";
|
||||
import { updateSrc } from "./src.ts";
|
||||
|
||||
const log = logger("update");
|
||||
// TODO: Getting current file position to more-safely point to nixpkgs root
|
||||
const nixpkgs = Deno.cwd();
|
||||
// TODO: Read values from default.nix
|
||||
const owner = "denoland";
|
||||
const repo = "deno";
|
||||
const denoDir = `${nixpkgs}/pkgs/development/web/${repo}`;
|
||||
const src = `${denoDir}/default.nix`;
|
||||
const librusty_v8 = `${denoDir}/librusty_v8.nix`;
|
||||
const architectures: Architecture[] = [
|
||||
{ nix: "x86_64-linux", rust: "x86_64-unknown-linux-gnu" },
|
||||
{ nix: "aarch64-linux", rust: "aarch64-unknown-linux-gnu" },
|
||||
{ nix: "x86_64-darwin", rust: "x86_64-apple-darwin" },
|
||||
{ nix: "aarch64-darwin", rust: "aarch64-apple-darwin" },
|
||||
];
|
||||
|
||||
log("Updating deno");
|
||||
|
||||
log("Getting latest deno version");
|
||||
const version = await getLatestVersion(owner, repo);
|
||||
const existingVersion = await getExistingVersion(src);
|
||||
const trimVersion = version.substr(1); // Strip v from v0.0.0
|
||||
log("Latest version: ", trimVersion);
|
||||
log("Extracted version:", existingVersion);
|
||||
if (trimVersion === existingVersion) {
|
||||
log("Version already matches latest, skipping...");
|
||||
Deno.exit(0);
|
||||
}
|
||||
|
||||
const tasks = [
|
||||
updateSrc(src, nixpkgs, version),
|
||||
updateLibrustyV8(librusty_v8, owner, repo, version, architectures),
|
||||
];
|
||||
await Promise.all(tasks);
|
||||
log("Updating deno complete");
|
||||
51
pkgs/development/web/flyctl/default.nix
Normal file
51
pkgs/development/web/flyctl/default.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{ buildGoModule, fetchFromGitHub, lib, testers, flyctl }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "flyctl";
|
||||
version = "0.0.330";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "superfly";
|
||||
repo = "flyctl";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-lgyr2NgurOZPqJv8ZUD8ut7ELxMZqLZ+rXYTjZauv8Y=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-T1E2VJiaGKhk/rDVKYEju3AyDPEUMGFNvj/KrMjLKEc=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
ldflags = [
|
||||
"-s" "-w"
|
||||
"-X github.com/superfly/flyctl/internal/buildinfo.commit=${src.rev}"
|
||||
"-X github.com/superfly/flyctl/internal/buildinfo.buildDate=1970-01-01T00:00:00Z"
|
||||
"-X github.com/superfly/flyctl/internal/buildinfo.environment=production"
|
||||
"-X github.com/superfly/flyctl/internal/buildinfo.version=${version}"
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
go generate ./...
|
||||
'';
|
||||
|
||||
preCheck = ''
|
||||
HOME=$(mktemp -d)
|
||||
'';
|
||||
|
||||
postCheck = ''
|
||||
go test ./... -ldflags="-X 'github.com/superfly/flyctl/internal/buildinfo.buildDate=1970-01-01T00:00:00Z'"
|
||||
'';
|
||||
|
||||
passthru.tests.version = testers.testVersion {
|
||||
package = flyctl;
|
||||
command = "HOME=$(mktemp -d) flyctl version";
|
||||
version = "v${flyctl.version}";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Command line tools for fly.io services";
|
||||
downloadPage = "https://github.com/superfly/flyctl";
|
||||
homepage = "https://fly.io/";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ aaronjanse jsierles techknowlogick ];
|
||||
};
|
||||
}
|
||||
52
pkgs/development/web/grails/default.nix
Normal file
52
pkgs/development/web/grails/default.nix
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{ lib, 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 = lib.makeBinPath
|
||||
([ coreutils ncurses gnused gnugrep ] ++ lib.optional (jdk != null) jdk);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "grails";
|
||||
version = "5.1.6";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/grails/grails-core/releases/download/v${version}/grails-${version}.zip";
|
||||
sha256 = "sha256-H4c/Nu6iOgaRLl/uV51nYnNQg5p9cjl/taexZnl4t+I=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
dontBuild = 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
|
||||
'' + lib.optionalString (jdk != null) ''
|
||||
# Inject JDK path into grails
|
||||
sed -i -e '2iJAVA_HOME=${jdk.home}' "$out"/bin/grails
|
||||
'';
|
||||
|
||||
preferLocalBuild = true;
|
||||
|
||||
meta = with 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 = "https://grails.org/";
|
||||
license = licenses.asl20;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.bjornfor ];
|
||||
};
|
||||
}
|
||||
90
pkgs/development/web/insomnia/default.nix
Normal file
90
pkgs/development/web/insomnia/default.nix
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
{ lib, stdenv, makeWrapper, fetchurl, dpkg, alsa-lib, atk, cairo, cups, dbus, expat
|
||||
, fontconfig, freetype, gdk-pixbuf, glib, pango, mesa, nspr, nss, gtk3
|
||||
, at-spi2-atk, gsettings-desktop-schemas, gobject-introspection, wrapGAppsHook
|
||||
, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
|
||||
, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb, libxshmfence, nghttp2
|
||||
, libudev0-shim, glibc, curl, openssl, autoPatchelfHook }:
|
||||
|
||||
let
|
||||
runtimeLibs = lib.makeLibraryPath [
|
||||
curl
|
||||
glibc
|
||||
libudev0-shim
|
||||
nghttp2
|
||||
openssl
|
||||
];
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "insomnia";
|
||||
version = "2022.1.1";
|
||||
|
||||
src = fetchurl {
|
||||
url =
|
||||
"https://github.com/Kong/insomnia/releases/download/core%40${version}/Insomnia.Core-${version}.deb";
|
||||
sha256 = "sha256-AaRiXGdKCzcsY4GEgLr5PO+f7STsR+p7ybGISdJlCVk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs =
|
||||
[ autoPatchelfHook dpkg makeWrapper gobject-introspection wrapGAppsHook ];
|
||||
|
||||
buildInputs = [
|
||||
alsa-lib
|
||||
at-spi2-atk
|
||||
atk
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
expat
|
||||
fontconfig
|
||||
freetype
|
||||
gdk-pixbuf
|
||||
glib
|
||||
pango
|
||||
gtk3
|
||||
gsettings-desktop-schemas
|
||||
libX11
|
||||
libXScrnSaver
|
||||
libXcomposite
|
||||
libXcursor
|
||||
libXdamage
|
||||
libXext
|
||||
libXfixes
|
||||
libXi
|
||||
libXrandr
|
||||
libXrender
|
||||
libXtst
|
||||
libxcb
|
||||
libxshmfence
|
||||
mesa # for libgbm
|
||||
nspr
|
||||
nss
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
|
||||
unpackPhase = "dpkg-deb -x $src .";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/insomnia $out/lib $out/bin
|
||||
|
||||
mv usr/share/* $out/share/
|
||||
mv opt/Insomnia/* $out/share/insomnia
|
||||
mv $out/share/insomnia/*.so $out/lib/
|
||||
|
||||
ln -s $out/share/insomnia/insomnia $out/bin/insomnia
|
||||
sed -i 's|\/opt\/Insomnia|'$out'/bin|g' $out/share/applications/insomnia.desktop
|
||||
'';
|
||||
|
||||
preFixup = ''
|
||||
wrapProgram "$out/bin/insomnia" --prefix LD_LIBRARY_PATH : ${runtimeLibs}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://insomnia.rest/";
|
||||
description = "The most intuitive cross-platform REST API Client";
|
||||
license = licenses.mit;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ markus1189 babariviere ];
|
||||
};
|
||||
|
||||
}
|
||||
34
pkgs/development/web/kcgi/default.nix
Normal file
34
pkgs/development/web/kcgi/default.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{ lib, stdenv, pkg-config, fetchFromGitHub, libbsd }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kcgi";
|
||||
version = "0.10.8";
|
||||
underscoreVersion = lib.replaceChars ["."] ["_"] version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kristapsdz";
|
||||
repo = pname;
|
||||
rev = "VERSION_${underscoreVersion}";
|
||||
sha256 = "0ha6r7bcgf6pcn5gbd2sl7835givhda1jql49c232f1iair1yqyp";
|
||||
};
|
||||
patchPhase = ''substituteInPlace configure \
|
||||
--replace /usr/local /
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ ] ++ lib.optionals stdenv.isLinux [ libbsd ] ;
|
||||
|
||||
dontAddPrefix = true;
|
||||
|
||||
installFlags = [ "DESTDIR=$(out)" ];
|
||||
|
||||
meta = with lib; {
|
||||
broken = (stdenv.isLinux && stdenv.isAarch64);
|
||||
homepage = "https://kristaps.bsd.lv/kcgi";
|
||||
description = "Minimal CGI and FastCGI library for C/C++";
|
||||
license = licenses.isc;
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.leenaars ];
|
||||
mainProgram = "kfcgi";
|
||||
};
|
||||
}
|
||||
43
pkgs/development/web/kore/default.nix
Normal file
43
pkgs/development/web/kore/default.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{ lib, stdenv, fetchFromGitHub, openssl, curl, postgresql, yajl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kore";
|
||||
version = "4.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jorisvink";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-MC4PCjRuAqWuGvNDsZXKohb4HdSWMV0Oc0pZ0rnhG7Y=";
|
||||
};
|
||||
|
||||
buildInputs = [ openssl curl postgresql yajl ];
|
||||
|
||||
makeFlags = [
|
||||
"PREFIX=${placeholder "out"}"
|
||||
"ACME=1"
|
||||
"CURL=1"
|
||||
"TASKS=1"
|
||||
"PGSQL=1"
|
||||
"JSONRPC=1"
|
||||
"DEBUG=1"
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
make platform.h
|
||||
'';
|
||||
|
||||
# added to fix build w/gcc7 and clang5
|
||||
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU "-Wno-error=pointer-compare"
|
||||
+ lib.optionalString stdenv.cc.isClang " -Wno-error=unknown-warning-option";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "An easy to use web application framework for C";
|
||||
homepage = "https://kore.io";
|
||||
license = licenses.isc;
|
||||
platforms = platforms.all;
|
||||
maintainers = with maintainers; [ johnmh ];
|
||||
};
|
||||
}
|
||||
44
pkgs/development/web/lucky-cli/default.nix
Normal file
44
pkgs/development/web/lucky-cli/default.nix
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{ lib, fetchFromGitHub, crystal, makeWrapper, openssl }:
|
||||
|
||||
crystal.buildCrystalPackage rec {
|
||||
pname = "lucky-cli";
|
||||
version = "0.29.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "luckyframework";
|
||||
repo = "lucky_cli";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-OmvKd35jR003qQnA/NBI4MjGRw044bYUYa59RKbz+lI=";
|
||||
};
|
||||
|
||||
# the integration tests will try to clone a remote repos
|
||||
postPatch = ''
|
||||
rm -rf spec/integration
|
||||
'';
|
||||
|
||||
format = "crystal";
|
||||
|
||||
lockFile = ./shard.lock;
|
||||
shardsFile = ./shards.nix;
|
||||
|
||||
crystalBinaries.lucky.src = "src/lucky.cr";
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/lucky \
|
||||
--prefix PATH : ${lib.makeBinPath [ crystal ]}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A Crystal library for creating and running tasks. Also generates Lucky projects";
|
||||
homepage = "https://luckyframework.org/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ peterhoeg ];
|
||||
mainProgram = "lucky";
|
||||
platforms = platforms.unix;
|
||||
broken = lib.versionOlder crystal.version "0.35.1";
|
||||
};
|
||||
}
|
||||
14
pkgs/development/web/lucky-cli/shard.lock
Normal file
14
pkgs/development/web/lucky-cli/shard.lock
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
version: 2.0
|
||||
shards:
|
||||
ameba:
|
||||
git: https://github.com/crystal-ameba/ameba.git
|
||||
version: 0.14.3
|
||||
|
||||
lucky_task:
|
||||
git: https://github.com/luckyframework/lucky_task.git
|
||||
version: 0.1.1
|
||||
|
||||
teeplate:
|
||||
git: https://github.com/luckyframework/teeplate.git
|
||||
version: 0.8.5
|
||||
|
||||
20
pkgs/development/web/lucky-cli/shards.nix
Normal file
20
pkgs/development/web/lucky-cli/shards.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
ameba = {
|
||||
owner = "crystal-ameba";
|
||||
repo = "ameba";
|
||||
rev = "v0.14.3";
|
||||
sha256 = "1cfr95xi6hsyxw1wlrh571hc775xhwmssk3k14i8b7dgbwfmm5x1";
|
||||
};
|
||||
lucky_task = {
|
||||
owner = "luckyframework";
|
||||
repo = "lucky_task";
|
||||
rev = "v0.1.1";
|
||||
sha256 = "0w0rnf22pvj3lp5z8c4sshzwhqgwpbjpm7nry9mf0iz3fa0v48f7";
|
||||
};
|
||||
teeplate = {
|
||||
owner = "luckyframework";
|
||||
repo = "teeplate";
|
||||
rev = "v0.8.5";
|
||||
sha256 = "1kr05qrp674rph1324wry57gzvgvcvlz0w27brlvdgd3gi4s8sdj";
|
||||
};
|
||||
}
|
||||
2
pkgs/development/web/mailcatcher/Gemfile
Normal file
2
pkgs/development/web/mailcatcher/Gemfile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
source 'https://rubygems.org'
|
||||
gem 'mailcatcher'
|
||||
41
pkgs/development/web/mailcatcher/Gemfile.lock
Normal file
41
pkgs/development/web/mailcatcher/Gemfile.lock
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
daemons (1.3.1)
|
||||
eventmachine (1.0.9.1)
|
||||
mail (2.7.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
mailcatcher (0.7.1)
|
||||
eventmachine (= 1.0.9.1)
|
||||
mail (~> 2.3)
|
||||
rack (~> 1.5)
|
||||
sinatra (~> 1.2)
|
||||
skinny (~> 0.2.3)
|
||||
sqlite3 (~> 1.3)
|
||||
thin (~> 1.5.0)
|
||||
mini_mime (1.0.1)
|
||||
rack (1.6.11)
|
||||
rack-protection (1.5.5)
|
||||
rack
|
||||
sinatra (1.4.8)
|
||||
rack (~> 1.5)
|
||||
rack-protection (~> 1.4)
|
||||
tilt (>= 1.3, < 3)
|
||||
skinny (0.2.4)
|
||||
eventmachine (~> 1.0.0)
|
||||
thin (>= 1.5, < 1.7)
|
||||
sqlite3 (1.4.0)
|
||||
thin (1.5.1)
|
||||
daemons (>= 1.0.9)
|
||||
eventmachine (>= 0.12.6)
|
||||
rack (>= 1.0.0)
|
||||
tilt (2.0.9)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
mailcatcher
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
17
pkgs/development/web/mailcatcher/default.nix
Normal file
17
pkgs/development/web/mailcatcher/default.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{ lib, bundlerApp, bundlerUpdateScript }:
|
||||
|
||||
bundlerApp {
|
||||
pname = "mailcatcher";
|
||||
gemdir = ./.;
|
||||
exes = [ "mailcatcher" "catchmail" ];
|
||||
|
||||
passthru.updateScript = bundlerUpdateScript "mailcatcher";
|
||||
|
||||
meta = with lib; {
|
||||
description = "SMTP server and web interface to locally test outbound emails";
|
||||
homepage = "https://mailcatcher.me/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ zarelit nicknovitski ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
128
pkgs/development/web/mailcatcher/gemset.nix
Normal file
128
pkgs/development/web/mailcatcher/gemset.nix
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
{
|
||||
daemons = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.1";
|
||||
};
|
||||
eventmachine = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17jr1caa3ggg696dd02g2zqzdjqj9x9q2nl7va82l36f7c5v6k4z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.9.1";
|
||||
};
|
||||
mail = {
|
||||
dependencies = ["mini_mime"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
};
|
||||
mailcatcher = {
|
||||
dependencies = ["eventmachine" "mail" "rack" "sinatra" "skinny" "sqlite3" "thin"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "02w1ycyfv7x0sh9799lz7xa65p5qvl5z4pa8a7prb68h2zwkfq0n";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.7.1";
|
||||
};
|
||||
mini_mime = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.1";
|
||||
};
|
||||
rack = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.6.11";
|
||||
};
|
||||
rack-protection = {
|
||||
dependencies = ["rack"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.5";
|
||||
};
|
||||
sinatra = {
|
||||
dependencies = ["rack" "rack-protection" "tilt"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.4.8";
|
||||
};
|
||||
skinny = {
|
||||
dependencies = ["eventmachine" "thin"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1y3yvx88ylgz4d2s1wskjk5rkmrcr15q3ibzp1q88qwzr5y493a9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.2.4";
|
||||
};
|
||||
sqlite3 = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0pmgpqx2sg8pms54rk7kjjy8jwsw21g1f7mb02fggbdcqy8jk3fx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.4.0";
|
||||
};
|
||||
thin = {
|
||||
dependencies = ["daemons" "eventmachine" "rack"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0hrq9m3hb6pm8yrqshhg0gafkphdpvwcqmr7k722kgdisp3w91ga";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.1";
|
||||
};
|
||||
tilt = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.9";
|
||||
};
|
||||
}
|
||||
24
pkgs/development/web/minify/default.nix
Normal file
24
pkgs/development/web/minify/default.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{ buildGoModule, fetchFromGitHub, lib }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "minify";
|
||||
version = "2.11.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tdewolff";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-qna2u+Y4eRGLNvRKDbL/VQud1pn8b1wWzbKQM1p0Yws=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-stj3fOaPM70kF6vTX/DEs4qFq/O0Vq0TFw0J/3L5NmA=";
|
||||
|
||||
ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Minifiers for web formats";
|
||||
license = licenses.mit;
|
||||
homepage = "https://go.tacodewolff.nl/minify";
|
||||
downloadPage = "https://github.com/tdewolff/minify";
|
||||
};
|
||||
}
|
||||
17
pkgs/development/web/netlify-cli/composition.nix
Normal file
17
pkgs/development/web/netlify-cli/composition.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# This file has been generated by node2nix 1.9.0. Do not edit!
|
||||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
|
||||
inherit pkgs nodejs;
|
||||
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
|
||||
};
|
||||
in
|
||||
import ./node-packages.nix {
|
||||
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
|
||||
inherit nodeEnv;
|
||||
}
|
||||
14
pkgs/development/web/netlify-cli/default.nix
Normal file
14
pkgs/development/web/netlify-cli/default.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ callPackage, fetchFromGitHub, lib, pkgs }:
|
||||
let
|
||||
nodePackages = import ./composition.nix { inherit pkgs; };
|
||||
in
|
||||
nodePackages.package.override {
|
||||
preRebuild = ''
|
||||
export ESBUILD_BINARY_PATH="${pkgs.esbuild_netlify}/bin/esbuild"
|
||||
'';
|
||||
src = fetchFromGitHub (lib.importJSON ./netlify-cli.json);
|
||||
bypassCache = true;
|
||||
reconstructLock = true;
|
||||
passthru.tests.test = callPackage ./test.nix { };
|
||||
meta.maintainers = with lib.maintainers; [ roberth ];
|
||||
}
|
||||
14
pkgs/development/web/netlify-cli/generate.sh
Executable file
14
pkgs/development/web/netlify-cli/generate.sh
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
set -eu -o pipefail
|
||||
cd "$( dirname "${BASH_SOURCE[0]}" )"
|
||||
rm -f ./node-env.nix
|
||||
src="$(nix-build --expr '(import ../../../.. {}).fetchFromGitHub (lib.importJSON ./netlify-cli.json)')"
|
||||
echo $src
|
||||
node2nix \
|
||||
--input $src/package.json \
|
||||
--lock $src/npm-shrinkwrap.json \
|
||||
--output node-packages.nix \
|
||||
--composition composition.nix \
|
||||
--node-env node-env.nix \
|
||||
--nodejs-14 \
|
||||
;
|
||||
7
pkgs/development/web/netlify-cli/netlify-cli.json
Normal file
7
pkgs/development/web/netlify-cli/netlify-cli.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"owner": "netlify",
|
||||
"repo": "cli",
|
||||
"rev": "a50e410fddda92d3f3f256321eddefb8cb8ba6e1",
|
||||
"sha256": "sisX58I5UxxEPGCh5JGtQHw72A4+pLuENpBB9WKRTZc=",
|
||||
"fetchSubmodules": false
|
||||
}
|
||||
573
pkgs/development/web/netlify-cli/node-env.nix
Normal file
573
pkgs/development/web/netlify-cli/node-env.nix
Normal file
|
|
@ -0,0 +1,573 @@
|
|||
# This file originates from node2nix
|
||||
|
||||
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile}:
|
||||
|
||||
let
|
||||
# Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
|
||||
utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
|
||||
|
||||
python = if nodejs ? python then nodejs.python else python2;
|
||||
|
||||
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
|
||||
tarWrapper = runCommand "tarWrapper" {} ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
cat > $out/bin/tar <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
|
||||
EOF
|
||||
|
||||
chmod +x $out/bin/tar
|
||||
'';
|
||||
|
||||
# Function that generates a TGZ file from a NPM project
|
||||
buildNodeSourceDist =
|
||||
{ name, version, src, ... }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "node-tarball-${name}-${version}";
|
||||
inherit src;
|
||||
buildInputs = [ nodejs ];
|
||||
buildPhase = ''
|
||||
export HOME=$TMPDIR
|
||||
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/tarballs
|
||||
mv $tgzFile $out/tarballs
|
||||
mkdir -p $out/nix-support
|
||||
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
};
|
||||
|
||||
includeDependencies = {dependencies}:
|
||||
lib.optionalString (dependencies != [])
|
||||
(lib.concatMapStrings (dependency:
|
||||
''
|
||||
# Bundle the dependencies of the package
|
||||
mkdir -p node_modules
|
||||
cd node_modules
|
||||
|
||||
# Only include dependencies if they don't exist. They may also be bundled in the package.
|
||||
if [ ! -e "${dependency.name}" ]
|
||||
then
|
||||
${composePackage dependency}
|
||||
fi
|
||||
|
||||
cd ..
|
||||
''
|
||||
) dependencies);
|
||||
|
||||
# Recursively composes the dependencies of a package
|
||||
composePackage = { name, packageName, src, dependencies ? [], ... }@args:
|
||||
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
|
||||
DIR=$(pwd)
|
||||
cd $TMPDIR
|
||||
|
||||
unpackFile ${src}
|
||||
|
||||
# Make the base dir in which the target dependency resides first
|
||||
mkdir -p "$(dirname "$DIR/${packageName}")"
|
||||
|
||||
if [ -f "${src}" ]
|
||||
then
|
||||
# Figure out what directory has been unpacked
|
||||
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
|
||||
|
||||
# Restore write permissions to make building work
|
||||
find "$packageDir" -type d -exec chmod u+x {} \;
|
||||
chmod -R u+w "$packageDir"
|
||||
|
||||
# Move the extracted tarball into the output folder
|
||||
mv "$packageDir" "$DIR/${packageName}"
|
||||
elif [ -d "${src}" ]
|
||||
then
|
||||
# Get a stripped name (without hash) of the source directory.
|
||||
# On old nixpkgs it's already set internally.
|
||||
if [ -z "$strippedName" ]
|
||||
then
|
||||
strippedName="$(stripHash ${src})"
|
||||
fi
|
||||
|
||||
# Restore write permissions to make building work
|
||||
chmod -R u+w "$strippedName"
|
||||
|
||||
# Move the extracted directory into the output folder
|
||||
mv "$strippedName" "$DIR/${packageName}"
|
||||
fi
|
||||
|
||||
# Unset the stripped name to not confuse the next unpack step
|
||||
unset strippedName
|
||||
|
||||
# Include the dependencies of the package
|
||||
cd "$DIR/${packageName}"
|
||||
${includeDependencies { inherit dependencies; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
'';
|
||||
|
||||
pinpointDependencies = {dependencies, production}:
|
||||
let
|
||||
pinpointDependenciesFromPackageJSON = writeTextFile {
|
||||
name = "pinpointDependencies.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function resolveDependencyVersion(location, name) {
|
||||
if(location == process.env['NIX_STORE']) {
|
||||
return null;
|
||||
} else {
|
||||
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
|
||||
|
||||
if(fs.existsSync(dependencyPackageJSON)) {
|
||||
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
|
||||
|
||||
if(dependencyPackageObj.name == name) {
|
||||
return dependencyPackageObj.version;
|
||||
}
|
||||
} else {
|
||||
return resolveDependencyVersion(path.resolve(location, ".."), name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function replaceDependencies(dependencies) {
|
||||
if(typeof dependencies == "object" && dependencies !== null) {
|
||||
for(var dependency in dependencies) {
|
||||
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
|
||||
|
||||
if(resolvedVersion === null) {
|
||||
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
|
||||
} else {
|
||||
dependencies[dependency] = resolvedVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the package.json configuration */
|
||||
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
|
||||
|
||||
/* Pinpoint all dependencies */
|
||||
replaceDependencies(packageObj.dependencies);
|
||||
if(process.argv[2] == "development") {
|
||||
replaceDependencies(packageObj.devDependencies);
|
||||
}
|
||||
replaceDependencies(packageObj.optionalDependencies);
|
||||
|
||||
/* Write the fixed package.json file */
|
||||
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
|
||||
'';
|
||||
};
|
||||
in
|
||||
''
|
||||
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
|
||||
|
||||
${lib.optionalString (dependencies != [])
|
||||
''
|
||||
if [ -d node_modules ]
|
||||
then
|
||||
cd node_modules
|
||||
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
|
||||
cd ..
|
||||
fi
|
||||
''}
|
||||
'';
|
||||
|
||||
# Recursively traverses all dependencies of a package and pinpoints all
|
||||
# dependencies in the package.json file to the versions that are actually
|
||||
# being used.
|
||||
|
||||
pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
|
||||
''
|
||||
if [ -d "${packageName}" ]
|
||||
then
|
||||
cd "${packageName}"
|
||||
${pinpointDependencies { inherit dependencies production; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
fi
|
||||
'';
|
||||
|
||||
# Extract the Node.js source code which is used to compile packages with
|
||||
# native bindings
|
||||
nodeSources = runCommand "node-sources" {} ''
|
||||
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
|
||||
mv node-* $out
|
||||
'';
|
||||
|
||||
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
|
||||
addIntegrityFieldsScript = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function augmentDependencies(baseDir, dependencies) {
|
||||
for(var dependencyName in dependencies) {
|
||||
var dependency = dependencies[dependencyName];
|
||||
|
||||
// Open package.json and augment metadata fields
|
||||
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
|
||||
var packageJSONPath = path.join(packageJSONDir, "package.json");
|
||||
|
||||
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
|
||||
console.log("Adding metadata fields to: "+packageJSONPath);
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
|
||||
|
||||
if(dependency.integrity) {
|
||||
packageObj["_integrity"] = dependency.integrity;
|
||||
} else {
|
||||
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
|
||||
}
|
||||
|
||||
if(dependency.resolved) {
|
||||
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
|
||||
} else {
|
||||
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
|
||||
}
|
||||
|
||||
if(dependency.from !== undefined) { // Adopt from property if one has been provided
|
||||
packageObj["_from"] = dependency.from;
|
||||
}
|
||||
|
||||
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
|
||||
}
|
||||
|
||||
// Augment transitive dependencies
|
||||
if(dependency.dependencies !== undefined) {
|
||||
augmentDependencies(packageJSONDir, dependency.dependencies);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(fs.existsSync("./package-lock.json")) {
|
||||
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
|
||||
|
||||
if(![1, 2].includes(packageLock.lockfileVersion)) {
|
||||
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if(packageLock.dependencies !== undefined) {
|
||||
augmentDependencies(".", packageLock.dependencies);
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
|
||||
reconstructPackageLock = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var packageObj = JSON.parse(fs.readFileSync("package.json"));
|
||||
|
||||
var lockObj = {
|
||||
name: packageObj.name,
|
||||
version: packageObj.version,
|
||||
lockfileVersion: 1,
|
||||
requires: true,
|
||||
dependencies: {}
|
||||
};
|
||||
|
||||
function augmentPackageJSON(filePath, dependencies) {
|
||||
var packageJSON = path.join(filePath, "package.json");
|
||||
if(fs.existsSync(packageJSON)) {
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
|
||||
dependencies[packageObj.name] = {
|
||||
version: packageObj.version,
|
||||
integrity: "sha1-000000000000000000000000000=",
|
||||
dependencies: {}
|
||||
};
|
||||
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
|
||||
}
|
||||
}
|
||||
|
||||
function processDependencies(dir, dependencies) {
|
||||
if(fs.existsSync(dir)) {
|
||||
var files = fs.readdirSync(dir);
|
||||
|
||||
files.forEach(function(entry) {
|
||||
var filePath = path.join(dir, entry);
|
||||
var stats = fs.statSync(filePath);
|
||||
|
||||
if(stats.isDirectory()) {
|
||||
if(entry.substr(0, 1) == "@") {
|
||||
// When we encounter a namespace folder, augment all packages belonging to the scope
|
||||
var pkgFiles = fs.readdirSync(filePath);
|
||||
|
||||
pkgFiles.forEach(function(entry) {
|
||||
if(stats.isDirectory()) {
|
||||
var pkgFilePath = path.join(filePath, entry);
|
||||
augmentPackageJSON(pkgFilePath, dependencies);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
augmentPackageJSON(filePath, dependencies);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
processDependencies("node_modules", lockObj.dependencies);
|
||||
|
||||
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
|
||||
'';
|
||||
};
|
||||
|
||||
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
|
||||
let
|
||||
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
|
||||
in
|
||||
''
|
||||
# Pinpoint the versions of all dependencies to the ones that are actually being used
|
||||
echo "pinpointing versions of dependencies..."
|
||||
source $pinpointDependenciesScriptPath
|
||||
|
||||
# Patch the shebangs of the bundled modules to prevent them from
|
||||
# calling executables outside the Nix store as much as possible
|
||||
patchShebangs .
|
||||
|
||||
# Deploy the Node.js package by running npm install. Since the
|
||||
# dependencies have been provided already by ourselves, it should not
|
||||
# attempt to install them again, which is good, because we want to make
|
||||
# it Nix's responsibility. If it needs to install any dependencies
|
||||
# anyway (e.g. because the dependency parameters are
|
||||
# incomplete/incorrect), it fails.
|
||||
#
|
||||
# The other responsibilities of NPM are kept -- version checks, build
|
||||
# steps, postprocessing etc.
|
||||
|
||||
export HOME=$TMPDIR
|
||||
cd "${packageName}"
|
||||
runHook preRebuild
|
||||
|
||||
${lib.optionalString bypassCache ''
|
||||
${lib.optionalString reconstructLock ''
|
||||
if [ -f package-lock.json ]
|
||||
then
|
||||
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
|
||||
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
|
||||
rm package-lock.json
|
||||
else
|
||||
echo "No package-lock.json file found, reconstructing..."
|
||||
fi
|
||||
|
||||
node ${reconstructPackageLock}
|
||||
''}
|
||||
|
||||
node ${addIntegrityFieldsScript}
|
||||
''}
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
|
||||
|
||||
if [ "''${dontNpmInstall-}" != "1" ]
|
||||
then
|
||||
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
|
||||
rm -f npm-shrinkwrap.json
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
|
||||
fi
|
||||
'';
|
||||
|
||||
# Builds and composes an NPM package including all its dependencies
|
||||
buildNodePackage =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, preRebuild ? ""
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, meta ? {}
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "${name}-${version}";
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit nodejs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall preRebuild unpackPhase buildPhase;
|
||||
|
||||
compositionScript = composePackage args;
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
# Create and enter a root node_modules/ folder
|
||||
mkdir -p $out/lib/node_modules
|
||||
cd $out/lib/node_modules
|
||||
|
||||
# Compose the package and all its dependencies
|
||||
source $compositionScriptPath
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Create symlink to the deployed executable folder, if applicable
|
||||
if [ -d "$out/lib/node_modules/.bin" ]
|
||||
then
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
fi
|
||||
|
||||
# Create symlinks to the deployed manual page folders, if applicable
|
||||
if [ -d "$out/lib/node_modules/${packageName}/man" ]
|
||||
then
|
||||
mkdir -p $out/share
|
||||
for dir in "$out/lib/node_modules/${packageName}/man/"*
|
||||
do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*
|
||||
do
|
||||
ln -s $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Run post install hook, if provided
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
# default to Node.js' platforms
|
||||
platforms = nodejs.meta.platforms;
|
||||
} // meta;
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a node environment (a node_modules folder and a set of binaries)
|
||||
buildNodeDependencies =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "node-dependencies-${name}-${version}";
|
||||
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall unpackPhase buildPhase;
|
||||
|
||||
includeScript = includeDependencies { inherit dependencies; };
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/${packageName}
|
||||
cd $out/${packageName}
|
||||
|
||||
source $includeScriptPath
|
||||
|
||||
# Create fake package.json to make the npm commands work properly
|
||||
cp ${src}/package.json .
|
||||
chmod 644 package.json
|
||||
${lib.optionalString bypassCache ''
|
||||
if [ -f ${src}/package-lock.json ]
|
||||
then
|
||||
cp ${src}/package-lock.json .
|
||||
fi
|
||||
''}
|
||||
|
||||
# Go to the parent folder to make sure that all packages are pinpointed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Expose the executables that were installed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
mv ${packageName} lib
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
'';
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a development shell
|
||||
buildNodeShell =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
nodeDependencies = buildNodeDependencies args;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "node-shell-${name}-${version}";
|
||||
|
||||
buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
cat > $out/bin/shell <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$shellHook
|
||||
exec ${stdenv.shell}
|
||||
EOF
|
||||
chmod +x $out/bin/shell
|
||||
'';
|
||||
|
||||
# Provide the dependencies in a development shell through the NODE_PATH environment variable
|
||||
inherit nodeDependencies;
|
||||
shellHook = lib.optionalString (dependencies != []) ''
|
||||
export NODE_PATH=${nodeDependencies}/lib/node_modules
|
||||
export PATH="${nodeDependencies}/bin:$PATH"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
|
||||
buildNodePackage = lib.makeOverridable buildNodePackage;
|
||||
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
|
||||
buildNodeShell = lib.makeOverridable buildNodeShell;
|
||||
}
|
||||
12318
pkgs/development/web/netlify-cli/node-packages.nix
generated
Normal file
12318
pkgs/development/web/netlify-cli/node-packages.nix
generated
Normal file
File diff suppressed because it is too large
Load diff
7
pkgs/development/web/netlify-cli/shell.nix
Normal file
7
pkgs/development/web/netlify-cli/shell.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{ pkgs ? import ../../../.. {} }:
|
||||
pkgs.mkShell {
|
||||
nativeBuildInputs = [
|
||||
pkgs.nodePackages.node2nix
|
||||
pkgs.nix-prefetch-github
|
||||
];
|
||||
}
|
||||
37
pkgs/development/web/netlify-cli/test.nix
Normal file
37
pkgs/development/web/netlify-cli/test.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
curl,
|
||||
netlify-cli,
|
||||
runCommand,
|
||||
}:
|
||||
|
||||
runCommand "netlify-cli-test" {
|
||||
nativeBuildInputs = [
|
||||
netlify-cli
|
||||
curl
|
||||
];
|
||||
meta.timeout = 600;
|
||||
} ''
|
||||
mkdir home
|
||||
export HOME=$PWD/home
|
||||
|
||||
# Create a simple site
|
||||
echo '<h1>hi</h1>' >index.html
|
||||
echo '/with-redirect /' >_redirects
|
||||
|
||||
# Start a local server and wait for it to respond
|
||||
netlify dev --offline --port 8888 2>&1 | tee log &
|
||||
sleep 0.1 || true
|
||||
for (( i=0; i<300; i++ )); do
|
||||
if grep --ignore-case 'Server now ready' <log; then
|
||||
break
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Test the local server
|
||||
curl -L http://localhost:8888/with-redirect | grep '<h1>hi</h1>'
|
||||
|
||||
# Success
|
||||
touch $out
|
||||
''
|
||||
11
pkgs/development/web/netlify-cli/update.sh
Executable file
11
pkgs/development/web/netlify-cli/update.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash
|
||||
set -euo pipefail
|
||||
mv netlify-cli.json{,.old}
|
||||
nix-prefetch-github-latest-release netlify cli >netlify-cli.json
|
||||
|
||||
if ! diff -U3 netlify-cli.json{.old,}; then
|
||||
echo New version detected\; generating expressions...
|
||||
./generate.sh
|
||||
fi
|
||||
rm -f netlify-cli.json.old
|
||||
19
pkgs/development/web/newman/default.nix
Normal file
19
pkgs/development/web/newman/default.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{ pkgs, nodejs, stdenv, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
packageName = with lib; concatStrings (map (entry: (concatStrings (mapAttrsToList (key: value: "${key}-${value}") entry))) (importJSON ./package.json));
|
||||
|
||||
nodePackages = import ./node-composition.nix {
|
||||
inherit pkgs nodejs;
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
};
|
||||
in
|
||||
nodePackages.newman.override {
|
||||
meta = with lib; {
|
||||
homepage = "https://www.getpostman.com";
|
||||
description = "A command-line collection runner for Postman";
|
||||
maintainers = with maintainers; [ freezeboy ];
|
||||
license = licenses.asl20;
|
||||
};
|
||||
}
|
||||
9
pkgs/development/web/newman/generate-dependencies.sh
Executable file
9
pkgs/development/web/newman/generate-dependencies.sh
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p nodePackages.node2nix
|
||||
|
||||
node2nix \
|
||||
--node-env node-env.nix \
|
||||
--development \
|
||||
--input package.json \
|
||||
--output node-packages.nix \
|
||||
--composition node-composition.nix
|
||||
17
pkgs/development/web/newman/node-composition.nix
Normal file
17
pkgs/development/web/newman/node-composition.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# This file has been generated by node2nix 1.9.0. Do not edit!
|
||||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
|
||||
inherit pkgs nodejs;
|
||||
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
|
||||
};
|
||||
in
|
||||
import ./node-packages.nix {
|
||||
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
|
||||
inherit nodeEnv;
|
||||
}
|
||||
567
pkgs/development/web/newman/node-env.nix
Normal file
567
pkgs/development/web/newman/node-env.nix
Normal file
|
|
@ -0,0 +1,567 @@
|
|||
# This file originates from node2nix
|
||||
|
||||
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile}:
|
||||
|
||||
let
|
||||
# Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
|
||||
utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
|
||||
|
||||
python = if nodejs ? python then nodejs.python else python2;
|
||||
|
||||
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
|
||||
tarWrapper = runCommand "tarWrapper" {} ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
cat > $out/bin/tar <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
|
||||
EOF
|
||||
|
||||
chmod +x $out/bin/tar
|
||||
'';
|
||||
|
||||
# Function that generates a TGZ file from a NPM project
|
||||
buildNodeSourceDist =
|
||||
{ name, version, src, ... }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "node-tarball-${name}-${version}";
|
||||
inherit src;
|
||||
buildInputs = [ nodejs ];
|
||||
buildPhase = ''
|
||||
export HOME=$TMPDIR
|
||||
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/tarballs
|
||||
mv $tgzFile $out/tarballs
|
||||
mkdir -p $out/nix-support
|
||||
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
};
|
||||
|
||||
includeDependencies = {dependencies}:
|
||||
lib.optionalString (dependencies != [])
|
||||
(lib.concatMapStrings (dependency:
|
||||
''
|
||||
# Bundle the dependencies of the package
|
||||
mkdir -p node_modules
|
||||
cd node_modules
|
||||
|
||||
# Only include dependencies if they don't exist. They may also be bundled in the package.
|
||||
if [ ! -e "${dependency.name}" ]
|
||||
then
|
||||
${composePackage dependency}
|
||||
fi
|
||||
|
||||
cd ..
|
||||
''
|
||||
) dependencies);
|
||||
|
||||
# Recursively composes the dependencies of a package
|
||||
composePackage = { name, packageName, src, dependencies ? [], ... }@args:
|
||||
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
|
||||
DIR=$(pwd)
|
||||
cd $TMPDIR
|
||||
|
||||
unpackFile ${src}
|
||||
|
||||
# Make the base dir in which the target dependency resides first
|
||||
mkdir -p "$(dirname "$DIR/${packageName}")"
|
||||
|
||||
if [ -f "${src}" ]
|
||||
then
|
||||
# Figure out what directory has been unpacked
|
||||
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
|
||||
|
||||
# Restore write permissions to make building work
|
||||
find "$packageDir" -type d -exec chmod u+x {} \;
|
||||
chmod -R u+w "$packageDir"
|
||||
|
||||
# Move the extracted tarball into the output folder
|
||||
mv "$packageDir" "$DIR/${packageName}"
|
||||
elif [ -d "${src}" ]
|
||||
then
|
||||
# Get a stripped name (without hash) of the source directory.
|
||||
# On old nixpkgs it's already set internally.
|
||||
if [ -z "$strippedName" ]
|
||||
then
|
||||
strippedName="$(stripHash ${src})"
|
||||
fi
|
||||
|
||||
# Restore write permissions to make building work
|
||||
chmod -R u+w "$strippedName"
|
||||
|
||||
# Move the extracted directory into the output folder
|
||||
mv "$strippedName" "$DIR/${packageName}"
|
||||
fi
|
||||
|
||||
# Unset the stripped name to not confuse the next unpack step
|
||||
unset strippedName
|
||||
|
||||
# Include the dependencies of the package
|
||||
cd "$DIR/${packageName}"
|
||||
${includeDependencies { inherit dependencies; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
'';
|
||||
|
||||
pinpointDependencies = {dependencies, production}:
|
||||
let
|
||||
pinpointDependenciesFromPackageJSON = writeTextFile {
|
||||
name = "pinpointDependencies.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function resolveDependencyVersion(location, name) {
|
||||
if(location == process.env['NIX_STORE']) {
|
||||
return null;
|
||||
} else {
|
||||
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
|
||||
|
||||
if(fs.existsSync(dependencyPackageJSON)) {
|
||||
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
|
||||
|
||||
if(dependencyPackageObj.name == name) {
|
||||
return dependencyPackageObj.version;
|
||||
}
|
||||
} else {
|
||||
return resolveDependencyVersion(path.resolve(location, ".."), name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function replaceDependencies(dependencies) {
|
||||
if(typeof dependencies == "object" && dependencies !== null) {
|
||||
for(var dependency in dependencies) {
|
||||
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
|
||||
|
||||
if(resolvedVersion === null) {
|
||||
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
|
||||
} else {
|
||||
dependencies[dependency] = resolvedVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the package.json configuration */
|
||||
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
|
||||
|
||||
/* Pinpoint all dependencies */
|
||||
replaceDependencies(packageObj.dependencies);
|
||||
if(process.argv[2] == "development") {
|
||||
replaceDependencies(packageObj.devDependencies);
|
||||
}
|
||||
replaceDependencies(packageObj.optionalDependencies);
|
||||
|
||||
/* Write the fixed package.json file */
|
||||
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
|
||||
'';
|
||||
};
|
||||
in
|
||||
''
|
||||
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
|
||||
|
||||
${lib.optionalString (dependencies != [])
|
||||
''
|
||||
if [ -d node_modules ]
|
||||
then
|
||||
cd node_modules
|
||||
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
|
||||
cd ..
|
||||
fi
|
||||
''}
|
||||
'';
|
||||
|
||||
# Recursively traverses all dependencies of a package and pinpoints all
|
||||
# dependencies in the package.json file to the versions that are actually
|
||||
# being used.
|
||||
|
||||
pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
|
||||
''
|
||||
if [ -d "${packageName}" ]
|
||||
then
|
||||
cd "${packageName}"
|
||||
${pinpointDependencies { inherit dependencies production; }}
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
fi
|
||||
'';
|
||||
|
||||
# Extract the Node.js source code which is used to compile packages with
|
||||
# native bindings
|
||||
nodeSources = runCommand "node-sources" {} ''
|
||||
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
|
||||
mv node-* $out
|
||||
'';
|
||||
|
||||
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
|
||||
addIntegrityFieldsScript = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
function augmentDependencies(baseDir, dependencies) {
|
||||
for(var dependencyName in dependencies) {
|
||||
var dependency = dependencies[dependencyName];
|
||||
|
||||
// Open package.json and augment metadata fields
|
||||
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
|
||||
var packageJSONPath = path.join(packageJSONDir, "package.json");
|
||||
|
||||
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
|
||||
console.log("Adding metadata fields to: "+packageJSONPath);
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
|
||||
|
||||
if(dependency.integrity) {
|
||||
packageObj["_integrity"] = dependency.integrity;
|
||||
} else {
|
||||
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
|
||||
}
|
||||
|
||||
if(dependency.resolved) {
|
||||
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
|
||||
} else {
|
||||
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
|
||||
}
|
||||
|
||||
if(dependency.from !== undefined) { // Adopt from property if one has been provided
|
||||
packageObj["_from"] = dependency.from;
|
||||
}
|
||||
|
||||
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
|
||||
}
|
||||
|
||||
// Augment transitive dependencies
|
||||
if(dependency.dependencies !== undefined) {
|
||||
augmentDependencies(packageJSONDir, dependency.dependencies);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(fs.existsSync("./package-lock.json")) {
|
||||
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
|
||||
|
||||
if(![1, 2].includes(packageLock.lockfileVersion)) {
|
||||
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if(packageLock.dependencies !== undefined) {
|
||||
augmentDependencies(".", packageLock.dependencies);
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
|
||||
reconstructPackageLock = writeTextFile {
|
||||
name = "addintegrityfields.js";
|
||||
text = ''
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var packageObj = JSON.parse(fs.readFileSync("package.json"));
|
||||
|
||||
var lockObj = {
|
||||
name: packageObj.name,
|
||||
version: packageObj.version,
|
||||
lockfileVersion: 1,
|
||||
requires: true,
|
||||
dependencies: {}
|
||||
};
|
||||
|
||||
function augmentPackageJSON(filePath, dependencies) {
|
||||
var packageJSON = path.join(filePath, "package.json");
|
||||
if(fs.existsSync(packageJSON)) {
|
||||
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
|
||||
dependencies[packageObj.name] = {
|
||||
version: packageObj.version,
|
||||
integrity: "sha1-000000000000000000000000000=",
|
||||
dependencies: {}
|
||||
};
|
||||
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
|
||||
}
|
||||
}
|
||||
|
||||
function processDependencies(dir, dependencies) {
|
||||
if(fs.existsSync(dir)) {
|
||||
var files = fs.readdirSync(dir);
|
||||
|
||||
files.forEach(function(entry) {
|
||||
var filePath = path.join(dir, entry);
|
||||
var stats = fs.statSync(filePath);
|
||||
|
||||
if(stats.isDirectory()) {
|
||||
if(entry.substr(0, 1) == "@") {
|
||||
// When we encounter a namespace folder, augment all packages belonging to the scope
|
||||
var pkgFiles = fs.readdirSync(filePath);
|
||||
|
||||
pkgFiles.forEach(function(entry) {
|
||||
if(stats.isDirectory()) {
|
||||
var pkgFilePath = path.join(filePath, entry);
|
||||
augmentPackageJSON(pkgFilePath, dependencies);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
augmentPackageJSON(filePath, dependencies);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
processDependencies("node_modules", lockObj.dependencies);
|
||||
|
||||
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
|
||||
'';
|
||||
};
|
||||
|
||||
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
|
||||
let
|
||||
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
|
||||
in
|
||||
''
|
||||
# Pinpoint the versions of all dependencies to the ones that are actually being used
|
||||
echo "pinpointing versions of dependencies..."
|
||||
source $pinpointDependenciesScriptPath
|
||||
|
||||
# Patch the shebangs of the bundled modules to prevent them from
|
||||
# calling executables outside the Nix store as much as possible
|
||||
patchShebangs .
|
||||
|
||||
# Deploy the Node.js package by running npm install. Since the
|
||||
# dependencies have been provided already by ourselves, it should not
|
||||
# attempt to install them again, which is good, because we want to make
|
||||
# it Nix's responsibility. If it needs to install any dependencies
|
||||
# anyway (e.g. because the dependency parameters are
|
||||
# incomplete/incorrect), it fails.
|
||||
#
|
||||
# The other responsibilities of NPM are kept -- version checks, build
|
||||
# steps, postprocessing etc.
|
||||
|
||||
export HOME=$TMPDIR
|
||||
cd "${packageName}"
|
||||
runHook preRebuild
|
||||
|
||||
${lib.optionalString bypassCache ''
|
||||
${lib.optionalString reconstructLock ''
|
||||
if [ -f package-lock.json ]
|
||||
then
|
||||
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
|
||||
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
|
||||
rm package-lock.json
|
||||
else
|
||||
echo "No package-lock.json file found, reconstructing..."
|
||||
fi
|
||||
|
||||
node ${reconstructPackageLock}
|
||||
''}
|
||||
|
||||
node ${addIntegrityFieldsScript}
|
||||
''}
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
|
||||
|
||||
if [ "''${dontNpmInstall-}" != "1" ]
|
||||
then
|
||||
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
|
||||
rm -f npm-shrinkwrap.json
|
||||
|
||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
|
||||
fi
|
||||
'';
|
||||
|
||||
# Builds and composes an NPM package including all its dependencies
|
||||
buildNodePackage =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, preRebuild ? ""
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "node_${name}-${version}";
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit nodejs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall preRebuild unpackPhase buildPhase;
|
||||
|
||||
compositionScript = composePackage args;
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
# Create and enter a root node_modules/ folder
|
||||
mkdir -p $out/lib/node_modules
|
||||
cd $out/lib/node_modules
|
||||
|
||||
# Compose the package and all its dependencies
|
||||
source $compositionScriptPath
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Create symlink to the deployed executable folder, if applicable
|
||||
if [ -d "$out/lib/node_modules/.bin" ]
|
||||
then
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
fi
|
||||
|
||||
# Create symlinks to the deployed manual page folders, if applicable
|
||||
if [ -d "$out/lib/node_modules/${packageName}/man" ]
|
||||
then
|
||||
mkdir -p $out/share
|
||||
for dir in "$out/lib/node_modules/${packageName}/man/"*
|
||||
do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*
|
||||
do
|
||||
ln -s $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
# Run post install hook, if provided
|
||||
runHook postInstall
|
||||
'';
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a node environment (a node_modules folder and a set of binaries)
|
||||
buildNodeDependencies =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
name = "node-dependencies-${name}-${version}";
|
||||
|
||||
buildInputs = [ tarWrapper python nodejs ]
|
||||
++ lib.optional (stdenv.isLinux) utillinux
|
||||
++ lib.optional (stdenv.isDarwin) libtool
|
||||
++ buildInputs;
|
||||
|
||||
inherit dontStrip; # Stripping may fail a build for some package deployments
|
||||
inherit dontNpmInstall unpackPhase buildPhase;
|
||||
|
||||
includeScript = includeDependencies { inherit dependencies; };
|
||||
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
|
||||
|
||||
passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/${packageName}
|
||||
cd $out/${packageName}
|
||||
|
||||
source $includeScriptPath
|
||||
|
||||
# Create fake package.json to make the npm commands work properly
|
||||
cp ${src}/package.json .
|
||||
chmod 644 package.json
|
||||
${lib.optionalString bypassCache ''
|
||||
if [ -f ${src}/package-lock.json ]
|
||||
then
|
||||
cp ${src}/package-lock.json .
|
||||
fi
|
||||
''}
|
||||
|
||||
# Go to the parent folder to make sure that all packages are pinpointed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
|
||||
|
||||
# Expose the executables that were installed
|
||||
cd ..
|
||||
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
|
||||
|
||||
mv ${packageName} lib
|
||||
ln -s $out/lib/node_modules/.bin $out/bin
|
||||
'';
|
||||
} // extraArgs);
|
||||
|
||||
# Builds a development shell
|
||||
buildNodeShell =
|
||||
{ name
|
||||
, packageName
|
||||
, version
|
||||
, src
|
||||
, dependencies ? []
|
||||
, buildInputs ? []
|
||||
, production ? true
|
||||
, npmFlags ? ""
|
||||
, dontNpmInstall ? false
|
||||
, bypassCache ? false
|
||||
, reconstructLock ? false
|
||||
, dontStrip ? true
|
||||
, unpackPhase ? "true"
|
||||
, buildPhase ? "true"
|
||||
, ... }@args:
|
||||
|
||||
let
|
||||
nodeDependencies = buildNodeDependencies args;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "node-shell-${name}-${version}";
|
||||
|
||||
buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
cat > $out/bin/shell <<EOF
|
||||
#! ${stdenv.shell} -e
|
||||
$shellHook
|
||||
exec ${stdenv.shell}
|
||||
EOF
|
||||
chmod +x $out/bin/shell
|
||||
'';
|
||||
|
||||
# Provide the dependencies in a development shell through the NODE_PATH environment variable
|
||||
inherit nodeDependencies;
|
||||
shellHook = lib.optionalString (dependencies != []) ''
|
||||
export NODE_PATH=${nodeDependencies}/lib/node_modules
|
||||
export PATH="${nodeDependencies}/bin:$PATH"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
|
||||
buildNodePackage = lib.makeOverridable buildNodePackage;
|
||||
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
|
||||
buildNodeShell = lib.makeOverridable buildNodeShell;
|
||||
}
|
||||
5755
pkgs/development/web/newman/node-packages.nix
generated
Normal file
5755
pkgs/development/web/newman/node-packages.nix
generated
Normal file
File diff suppressed because it is too large
Load diff
3
pkgs/development/web/newman/package.json
Normal file
3
pkgs/development/web/newman/package.json
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[
|
||||
"newman"
|
||||
]
|
||||
28
pkgs/development/web/nodejs/bypass-xcodebuild.diff
Normal file
28
pkgs/development/web/nodejs/bypass-xcodebuild.diff
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
diff -Naur node-v12.18.4/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py node-v12.18.4-new/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
|
||||
--- node-v12.18.4/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py 2020-09-15 09:08:46.000000000 +0200
|
||||
+++ node-v12.18.4-new/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py 2020-12-03 16:55:43.781860687 +0100
|
||||
@@ -436,7 +436,14 @@
|
||||
# Since the CLT has no SDK paths anyway, returning None is the
|
||||
# most sensible route and should still do the right thing.
|
||||
try:
|
||||
- return GetStdoutQuiet(['xcodebuild', '-version', '-sdk', sdk, infoitem])
|
||||
+ # Return fake data that xcodebuild would normally return
|
||||
+
|
||||
+ xcodedata = {
|
||||
+ "Path": "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk",
|
||||
+ "ProductBuildVersion": "19A547",
|
||||
+ "ProductVersion": "10.15"
|
||||
+ }
|
||||
+ return xcodedata[infoitem]
|
||||
except GypError:
|
||||
pass
|
||||
|
||||
@@ -1271,7 +1278,7 @@
|
||||
version = ""
|
||||
build = ""
|
||||
try:
|
||||
- version_list = GetStdoutQuiet(['xcodebuild', '-version']).splitlines()
|
||||
+ version_list = []
|
||||
# In some circumstances xcodebuild exits 0 but doesn't return
|
||||
# the right results; for example, a user on 10.7 or 10.8 with
|
||||
# a bogus path set via xcode-select
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
Disable v8 system instrumentation on Darwin
|
||||
|
||||
On Darwin, the v8 system instrumentation requires the header "os/signpost.h"
|
||||
which is available since apple_sdk 11+. See: https://github.com/nodejs/node/issues/39584
|
||||
|
||||
--- old/tools/v8_gypfiles/features.gypi
|
||||
+++ new/tools/v8_gypfiles/features.gypi
|
||||
@@ -62,7 +62,7 @@
|
||||
}, {
|
||||
'is_component_build': 0,
|
||||
}],
|
||||
- ['OS == "win" or OS == "mac"', {
|
||||
+ ['OS == "win"', {
|
||||
# Sets -DSYSTEM_INSTRUMENTATION. Enables OS-dependent event tracing
|
||||
'v8_enable_system_instrumentation': 1,
|
||||
}, {
|
||||
776
pkgs/development/web/nodejs/nodejs-release-keys.asc
Normal file
776
pkgs/development/web/nodejs/nodejs-release-keys.asc
Normal file
|
|
@ -0,0 +1,776 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=jVEm
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
202
pkgs/development/web/nodejs/nodejs.nix
Normal file
202
pkgs/development/web/nodejs/nodejs.nix
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
{ lib, stdenv, fetchurl, openssl, python, zlib, libuv, util-linux, http-parser
|
||||
, pkg-config, which, buildPackages
|
||||
# for `.pkgs` attribute
|
||||
, callPackage
|
||||
# Updater dependencies
|
||||
, writeScript, coreutils, gnugrep, jq, curl, common-updater-scripts, nix, runtimeShell
|
||||
, gnupg
|
||||
, darwin, xcbuild
|
||||
, procps, icu
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
{ enableNpm ? true, version, sha256, patches ? [] } @args:
|
||||
|
||||
let
|
||||
inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices;
|
||||
|
||||
majorVersion = versions.major version;
|
||||
minorVersion = versions.minor version;
|
||||
|
||||
pname = if enableNpm then "nodejs" else "nodejs-slim";
|
||||
|
||||
useSharedHttpParser = !stdenv.isDarwin && versionOlder "${majorVersion}.${minorVersion}" "11.4";
|
||||
|
||||
sharedLibDeps = { inherit openssl zlib libuv; } // (optionalAttrs useSharedHttpParser { inherit http-parser; });
|
||||
|
||||
sharedConfigureFlags = concatMap (name: [
|
||||
"--shared-${name}"
|
||||
"--shared-${name}-libpath=${getLib sharedLibDeps.${name}}/lib"
|
||||
/** Closure notes: we explicitly avoid specifying --shared-*-includes,
|
||||
* as that would put the paths into bin/nodejs.
|
||||
* Including pkg-config in build inputs would also have the same effect!
|
||||
*/
|
||||
]) (builtins.attrNames sharedLibDeps) ++ [
|
||||
"--with-intl=system-icu"
|
||||
];
|
||||
|
||||
copyLibHeaders =
|
||||
map
|
||||
(name: "${getDev sharedLibDeps.${name}}/include/*")
|
||||
(builtins.attrNames sharedLibDeps);
|
||||
|
||||
extraConfigFlags = optionals (!enableNpm) [ "--without-npm" ];
|
||||
self = stdenv.mkDerivation {
|
||||
inherit pname version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://nodejs.org/dist/v${version}/node-v${version}.tar.xz";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
CC_host = "cc";
|
||||
CXX_host = "c++";
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc openssl libuv zlib ];
|
||||
|
||||
buildInputs = optionals stdenv.isDarwin [ CoreServices ApplicationServices ]
|
||||
++ [ zlib libuv openssl http-parser icu ];
|
||||
|
||||
nativeBuildInputs = [ which pkg-config python ]
|
||||
++ optionals stdenv.isDarwin [ xcbuild ];
|
||||
|
||||
outputs = [ "out" "libv8" ];
|
||||
setOutputFlags = false;
|
||||
moveToDev = false;
|
||||
|
||||
configureFlags = let
|
||||
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
||||
inherit (stdenv.hostPlatform) gcc isAarch32;
|
||||
in sharedConfigureFlags ++ [
|
||||
"--without-dtrace"
|
||||
] ++ (optionals isCross [
|
||||
"--cross-compiling"
|
||||
"--without-intl"
|
||||
"--without-snapshot"
|
||||
"--dest-cpu=${let platform = stdenv.hostPlatform; in
|
||||
if platform.isAarch32 then "arm"
|
||||
else if platform.isAarch64 then "arm64"
|
||||
else if platform.isMips32 && platform.isLittleEndian then "mipsel"
|
||||
else if platform.isMips32 && !platform.isLittleEndian then "mips"
|
||||
else if platform.isMips64 && platform.isLittleEndian then "mips64el"
|
||||
else if platform.isPower && platform.is32bit then "ppc"
|
||||
else if platform.isPower && platform.is64bit then "ppc64"
|
||||
else if platform.isx86_64 then "x86_64"
|
||||
else if platform.isx86_32 then "x86"
|
||||
else if platform.isS390 && platform.is64bit then "s390x"
|
||||
else if platform.isRiscV && platform.is64bit then "riscv64"
|
||||
else throw "unsupported cpu ${stdenv.hostPlatform.uname.processor}"}"
|
||||
]) ++ (optionals (isCross && isAarch32 && hasAttr "fpu" gcc) [
|
||||
"--with-arm-fpu=${gcc.fpu}"
|
||||
]) ++ (optionals (isCross && isAarch32 && hasAttr "float-abi" gcc) [
|
||||
"--with-arm-float-abi=${gcc.float-abi}"
|
||||
]) ++ extraConfigFlags;
|
||||
|
||||
configurePlatforms = [];
|
||||
|
||||
dontDisableStatic = true;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
passthru.interpreterName = "nodejs";
|
||||
|
||||
passthru.pkgs = callPackage ../../node-packages/default.nix {
|
||||
nodejs = self;
|
||||
};
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
pos = builtins.unsafeGetAttrPos "version" args;
|
||||
|
||||
inherit patches;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs .
|
||||
|
||||
# fix tests
|
||||
for a in test/parallel/test-child-process-env.js \
|
||||
test/parallel/test-child-process-exec-env.js \
|
||||
test/parallel/test-child-process-default-options.js \
|
||||
test/fixtures/syntax/good_syntax_shebang.js \
|
||||
test/fixtures/syntax/bad_syntax_shebang.js ; do
|
||||
substituteInPlace $a \
|
||||
--replace "/usr/bin/env" "${coreutils}/bin/env"
|
||||
done
|
||||
'' + optionalString stdenv.isDarwin ''
|
||||
sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' tools/gyp/pylib/gyp/xcode_emulation.py
|
||||
sed -i -e "s|tr1/type_traits|type_traits|g" \
|
||||
-e "s|std::tr1|std|" src/util.h
|
||||
'';
|
||||
|
||||
checkInputs = [ procps ];
|
||||
doCheck = false; # fails 4 out of 1453 tests
|
||||
|
||||
postInstall = ''
|
||||
PATH=$out/bin:$PATH patchShebangs $out
|
||||
|
||||
${optionalString (enableNpm && stdenv.hostPlatform == stdenv.buildPlatform) ''
|
||||
mkdir -p $out/share/bash-completion/completions/
|
||||
HOME=$TMPDIR $out/bin/npm completion > $out/share/bash-completion/completions/npm
|
||||
for dir in "$out/lib/node_modules/npm/man/"*; do
|
||||
mkdir -p $out/share/man/$(basename "$dir")
|
||||
for page in "$dir"/*; do
|
||||
ln -rs $page $out/share/man/$(basename "$dir")
|
||||
done
|
||||
done
|
||||
''}
|
||||
|
||||
# install the missing headers for node-gyp
|
||||
cp -r ${concatStringsSep " " copyLibHeaders} $out/include/node
|
||||
|
||||
# assemble a static v8 library and put it in the 'libv8' output
|
||||
mkdir -p $libv8/lib
|
||||
pushd out/Release/obj.target
|
||||
find . -path "./torque_*/**/*.o" -or -path "./v8*/**/*.o" | sort -u >files
|
||||
${if stdenv.buildPlatform.isGnu then ''
|
||||
ar -cqs $libv8/lib/libv8.a @files
|
||||
'' else ''
|
||||
cat files | while read -r file; do
|
||||
ar -cqS $libv8/lib/libv8.a $file
|
||||
done
|
||||
''}
|
||||
popd
|
||||
|
||||
# copy v8 headers
|
||||
cp -r deps/v8/include $libv8/
|
||||
|
||||
# create a pkgconfig file for v8
|
||||
major=$(grep V8_MAJOR_VERSION deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||
minor=$(grep V8_MINOR_VERSION deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||
patch=$(grep V8_PATCH_LEVEL deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||
mkdir -p $libv8/lib/pkgconfig
|
||||
cat > $libv8/lib/pkgconfig/v8.pc << EOF
|
||||
Name: v8
|
||||
Description: V8 JavaScript Engine
|
||||
Version: $major.$minor.$patch
|
||||
Libs: -L$libv8/lib -lv8 -pthread -licui18n
|
||||
Cflags: -I$libv8/include
|
||||
EOF
|
||||
'' + optionalString (stdenv.isDarwin && enableNpm) ''
|
||||
sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' $out/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
|
||||
'';
|
||||
|
||||
passthru.updateScript = import ./update.nix {
|
||||
inherit writeScript coreutils gnugrep jq curl common-updater-scripts gnupg nix runtimeShell;
|
||||
inherit lib;
|
||||
inherit majorVersion;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Event-driven I/O framework for the V8 JavaScript engine";
|
||||
homepage = "https://nodejs.org";
|
||||
changelog = "https://github.com/nodejs/node/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ goibhniu gilligan cko marsam ];
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
mainProgram = "node";
|
||||
knownVulnerabilities = optional (versionOlder version "14") "This NodeJS release has reached its end of life. See https://nodejs.org/en/about/releases/.";
|
||||
};
|
||||
|
||||
passthru.python = python; # to ensure nodeEnv uses the same version
|
||||
};
|
||||
in self
|
||||
5
pkgs/development/web/nodejs/setup-hook.sh
Normal file
5
pkgs/development/web/nodejs/setup-hook.sh
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
addNodePath () {
|
||||
addToSearchPath NODE_PATH "$1/lib/node_modules"
|
||||
}
|
||||
|
||||
addEnvHooks "$hostOffset" addNodePath
|
||||
18
pkgs/development/web/nodejs/update-keyring
Executable file
18
pkgs/development/web/nodejs/update-keyring
Executable file
|
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell --pure -i bash -p coreutils findutils gnupg curl
|
||||
|
||||
# https://github.com/nodejs/node#release-team
|
||||
HOME=`mktemp -d`
|
||||
keyserver="pool.sks-keyservers.net"
|
||||
cat << EOF | xargs -P 4 -n 1 gpg --keyserver $keyserver --recv-keys
|
||||
94AE36675C464D64BAFA68DD7434390BDBE9B9C5
|
||||
FD3A5288F042B6850C66B31F09FE44734EB7990E
|
||||
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1
|
||||
DD8F2338BAE7501E3DD5AC78C273792F7D83545D
|
||||
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8
|
||||
B9AE9905FFD7803F25714661B63B535A4C206CA9
|
||||
56730D5401028683275BD23C23EFEFE93C4CFFFE
|
||||
77984A986EBC2AA786BC0F66B01FBB92821C587A
|
||||
EOF
|
||||
|
||||
gpg -a --export > nodejs-release-keys.asc
|
||||
29
pkgs/development/web/nodejs/update.nix
Normal file
29
pkgs/development/web/nodejs/update.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, writeScript
|
||||
, coreutils
|
||||
, curl
|
||||
, gnugrep
|
||||
, jq
|
||||
, gnupg
|
||||
, common-updater-scripts
|
||||
, majorVersion
|
||||
, nix
|
||||
, runtimeShell
|
||||
}:
|
||||
|
||||
writeScript "update-nodejs" ''
|
||||
#!${runtimeShell}
|
||||
PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep jq gnupg nix ]}
|
||||
|
||||
HOME=`mktemp -d`
|
||||
cat ${./nodejs-release-keys.asc} | gpg --import
|
||||
|
||||
tags=`curl --silent https://api.github.com/repos/nodejs/node/git/refs/tags`
|
||||
version=`echo $tags | jq -r '.[] | select(.ref | startswith("refs/tags/v${majorVersion}")) | .ref' | sort --version-sort | tail -1 | grep -oP "^refs/tags/v\K.*"`
|
||||
|
||||
curl --silent -o $HOME/SHASUMS256.txt.asc https://nodejs.org/dist/v''${version}/SHASUMS256.txt.asc
|
||||
hash_hex=`gpgv --keyring=$HOME/.gnupg/pubring.kbx --output - $HOME/SHASUMS256.txt.asc | grep -oP "^([0-9a-f]{64})(?=\s+node-v''${version}.tar.xz$)"`
|
||||
hash=`nix-hash --type sha256 --to-base32 ''${hash_hex}`
|
||||
|
||||
update-source-version nodejs-${majorVersion}_x "''${version}" "''${hash}"
|
||||
''
|
||||
14
pkgs/development/web/nodejs/v10.nix
Normal file
14
pkgs/development/web/nodejs/v10.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ callPackage, openssl, icu, python2, lib, stdenv, enableNpm ? true }:
|
||||
|
||||
let
|
||||
buildNodejs = callPackage ./nodejs.nix {
|
||||
inherit openssl icu;
|
||||
python = python2;
|
||||
};
|
||||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "10.24.1";
|
||||
sha256 = "032801kg24j04xmf09m0vxzlcz86sv21s24lv9l4cfv08k1c4byp";
|
||||
patches = lib.optional stdenv.isDarwin ./bypass-xcodebuild.diff;
|
||||
}
|
||||
14
pkgs/development/web/nodejs/v12.nix
Normal file
14
pkgs/development/web/nodejs/v12.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ callPackage, icu68, python2, lib, stdenv, enableNpm ? true }:
|
||||
|
||||
let
|
||||
buildNodejs = callPackage ./nodejs.nix {
|
||||
icu = icu68;
|
||||
python = python2;
|
||||
};
|
||||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "12.22.12";
|
||||
sha256 = "1whl0zi6fs9ay33bhcn2kh9xynran05iipahg1zzr6sv97wbfhmw";
|
||||
patches = lib.optional stdenv.isDarwin ./bypass-xcodebuild.diff;
|
||||
}
|
||||
13
pkgs/development/web/nodejs/v14.nix
Normal file
13
pkgs/development/web/nodejs/v14.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{ callPackage, python3, lib, stdenv, enableNpm ? true }:
|
||||
|
||||
let
|
||||
buildNodejs = callPackage ./nodejs.nix {
|
||||
python = python3;
|
||||
};
|
||||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "14.19.3";
|
||||
sha256 = "sha256-XPRbHxrKd1I6zzYkDB1TqZknkHCncR6r8jNG+IsMyZQ=";
|
||||
patches = lib.optional stdenv.isDarwin ./bypass-xcodebuild.diff;
|
||||
}
|
||||
16
pkgs/development/web/nodejs/v16.nix
Normal file
16
pkgs/development/web/nodejs/v16.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ callPackage, openssl, python3, enableNpm ? true }:
|
||||
|
||||
let
|
||||
buildNodejs = callPackage ./nodejs.nix {
|
||||
inherit openssl;
|
||||
python = python3;
|
||||
};
|
||||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "16.15.1";
|
||||
sha256 = "sha256-1OmdPB9pcREJpnUlVxBY5gCc3bwijn1yO4+0pFQWm30=";
|
||||
patches = [
|
||||
./disable-darwin-v8-system-instrumentation.patch
|
||||
];
|
||||
}
|
||||
15
pkgs/development/web/nodejs/v18.nix
Normal file
15
pkgs/development/web/nodejs/v18.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ callPackage, python3, enableNpm ? true }:
|
||||
|
||||
let
|
||||
buildNodejs = callPackage ./nodejs.nix {
|
||||
python = python3;
|
||||
};
|
||||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "18.3.0";
|
||||
sha256 = "sha256-P2lKgWJuUFfNpXiY53HSE8/FpkmFX0zxxvbNFQxTBiU=";
|
||||
patches = [
|
||||
./disable-darwin-v8-system-instrumentation.patch
|
||||
];
|
||||
}
|
||||
49
pkgs/development/web/postman/darwin.nix
Normal file
49
pkgs/development/web/postman/darwin.nix
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
{ stdenvNoCC
|
||||
, fetchurl
|
||||
, unzip
|
||||
, pname
|
||||
, version
|
||||
, meta
|
||||
}:
|
||||
|
||||
let
|
||||
appName = "Postman.app";
|
||||
dist = {
|
||||
aarch64-darwin = {
|
||||
arch = "arm64";
|
||||
sha256 = "sha256-EtTf17LS18zC3JMbSoyZGGHuIcwGN3Q15XOhVqeh7C4=";
|
||||
};
|
||||
|
||||
x86_64-darwin = {
|
||||
arch = "64";
|
||||
sha256 = "sha256-kTgbqGPgOn5dyjL/IMl3hg2+VUfB+jpPJsqXof8UL+c=";
|
||||
};
|
||||
}.${stdenvNoCC.hostPlatform.system} or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
|
||||
|
||||
in
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
inherit pname version meta;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl.pstmn.io/download/version/${version}/osx_${dist.arch}";
|
||||
inherit (dist) sha256;
|
||||
name = "${pname}-${version}.zip";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
sourceRoot = appName;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/{Applications/${appName},bin}
|
||||
cp -R . $out/Applications/${appName}
|
||||
cat > $out/bin/${pname} << EOF
|
||||
#!${stdenvNoCC.shell}
|
||||
open -na $out/Applications/${appName} --args "$@"
|
||||
EOF
|
||||
chmod +x $out/bin/${pname}
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
18
pkgs/development/web/postman/default.nix
Normal file
18
pkgs/development/web/postman/default.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ stdenvNoCC, callPackage, lib }:
|
||||
|
||||
let
|
||||
pname = "postman";
|
||||
version = "9.14.0";
|
||||
meta = with lib; {
|
||||
homepage = "https://www.getpostman.com";
|
||||
description = "API Development Environment";
|
||||
license = licenses.postman;
|
||||
platforms = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
||||
maintainers = with maintainers; [ johnrichardrinehart evanjs tricktron ];
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
if stdenvNoCC.isDarwin
|
||||
then callPackage ./darwin.nix { inherit pname version meta; }
|
||||
else callPackage ./linux.nix { inherit pname version meta; }
|
||||
133
pkgs/development/web/postman/linux.nix
Normal file
133
pkgs/development/web/postman/linux.nix
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, makeDesktopItem
|
||||
, wrapGAppsHook
|
||||
, atk
|
||||
, at-spi2-atk
|
||||
, at-spi2-core
|
||||
, alsa-lib
|
||||
, cairo
|
||||
, cups
|
||||
, dbus
|
||||
, expat
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
, gtk3
|
||||
, freetype
|
||||
, fontconfig
|
||||
, nss
|
||||
, nspr
|
||||
, pango
|
||||
, udev
|
||||
, libuuid
|
||||
, libX11
|
||||
, libxcb
|
||||
, libXi
|
||||
, libXcursor
|
||||
, libXdamage
|
||||
, libXrandr
|
||||
, libXcomposite
|
||||
, libXext
|
||||
, libXfixes
|
||||
, libXrender
|
||||
, libXtst
|
||||
, libXScrnSaver
|
||||
, libxkbcommon
|
||||
, libdrm
|
||||
, mesa
|
||||
, xorg
|
||||
, pname
|
||||
, version
|
||||
, meta
|
||||
, copyDesktopItems
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit pname version meta;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl.pstmn.io/download/version/${version}/linux64";
|
||||
sha256 = "sha256-pA3gT4xoIWhajY03JzVgHK5KyTx1uH6gyasuLTdt6cM=";
|
||||
name = "${pname}.tar.gz";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "postman";
|
||||
exec = "postman";
|
||||
icon = "postman";
|
||||
comment = "API Development Environment";
|
||||
desktopName = "Postman";
|
||||
genericName = "Postman";
|
||||
categories = [ "Development" ];
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
stdenv.cc.cc.lib
|
||||
atk
|
||||
at-spi2-atk
|
||||
at-spi2-core
|
||||
alsa-lib
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
expat
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk3
|
||||
freetype
|
||||
fontconfig
|
||||
mesa
|
||||
nss
|
||||
nspr
|
||||
pango
|
||||
udev
|
||||
libdrm
|
||||
libuuid
|
||||
libX11
|
||||
libxcb
|
||||
libXi
|
||||
libXcursor
|
||||
libXdamage
|
||||
libXrandr
|
||||
libXcomposite
|
||||
libXext
|
||||
libXfixes
|
||||
libXrender
|
||||
libXtst
|
||||
libXScrnSaver
|
||||
libxkbcommon
|
||||
xorg.libxshmfence
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ wrapGAppsHook copyDesktopItems ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/share/postman
|
||||
cp -R app/* $out/share/postman
|
||||
rm $out/share/postman/Postman
|
||||
|
||||
mkdir -p $out/bin
|
||||
ln -s $out/share/postman/postman $out/bin/postman
|
||||
|
||||
mkdir -p $out/share/icons/hicolor/128x128/apps
|
||||
ln -s $out/share/postman/resources/app/assets/icon.png $out/share/icons/postman.png
|
||||
ln -s $out/share/postman/resources/app/assets/icon.png $out/share/icons/hicolor/128x128/apps/postman.png
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
pushd $out/share/postman
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" postman
|
||||
for file in $(find . -type f \( -name \*.node -o -name postman -o -name \*.so\* \) ); do
|
||||
ORIGIN=$(patchelf --print-rpath $file); \
|
||||
patchelf --set-rpath "${lib.makeLibraryPath buildInputs}:$ORIGIN" $file
|
||||
done
|
||||
popd
|
||||
'';
|
||||
}
|
||||
76
pkgs/development/web/protege-distribution/default.nix
Normal file
76
pkgs/development/web/protege-distribution/default.nix
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
{ lib, stdenv, fetchurl, unzip, jre8
|
||||
, copyDesktopItems
|
||||
, makeDesktopItem
|
||||
, iconConvTools
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "protege-distribution";
|
||||
version = "5.5.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/protegeproject/protege-distribution/releases/download/v${version}/Protege-${version}-platform-independent.zip";
|
||||
sha256 = "092x22wyisdnhccx817mqq15sxqdfc7iz4whr4mbvzrd9di6ipjq";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip copyDesktopItems iconConvTools ];
|
||||
|
||||
patches = [
|
||||
# Replace logic for searching the install directory with a static cd into $out
|
||||
./static-path.patch
|
||||
# Disable console logging, maintaining only file-based logging
|
||||
./disable-console-log.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Resolve @out@ (introduced by "static-path.patch") to $out, and set the
|
||||
# correct Java executable (Protege is a JRE 8 application)
|
||||
substituteInPlace run.sh \
|
||||
--subst-var-by out $out \
|
||||
--replace "java -X" "exec ${jre8.outPath}/bin/java -X"
|
||||
'';
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir $out
|
||||
|
||||
# Delete non-Linux launch scripts
|
||||
rm run.{bat,command}
|
||||
|
||||
# Move launch script into /bin, giving it a recognizable name
|
||||
install -D run.sh $out/bin/run-protege
|
||||
|
||||
# Generate and copy icons to where they can be found
|
||||
icoFileToHiColorTheme app/Protege.ico protege $out
|
||||
|
||||
# Move everything else under protege/
|
||||
mkdir $out/protege
|
||||
mv {bin,bundles,conf,plugins} $out/protege
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "Protege";
|
||||
desktopName = "Protege Desktop";
|
||||
icon = "protege";
|
||||
comment = "OWL2 ontology editor";
|
||||
categories = [ "Development" ];
|
||||
exec = "run-protege";
|
||||
})
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "The OWL2 ontology editor from Stanford, with third-party plugins included";
|
||||
homepage = "https://protege.stanford.edu/";
|
||||
downloadPage = "https://protege.stanford.edu/products.php#desktop-protege";
|
||||
maintainers = with maintainers; [ nessdoor ];
|
||||
license = with licenses; [ asl20 bsd2 epl10 lgpl3 ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
--- a/conf/logback.xml 2021-06-25 00:49:10.446416341 +0900
|
||||
+++ b/conf/logback.xml 2021-06-25 00:50:32.889120465 +0900
|
||||
@@ -1,13 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
|
||||
- <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
|
||||
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
- <Pattern>%highlight(%msg) %n</Pattern>
|
||||
- </encoder>
|
||||
- </appender>
|
||||
-
|
||||
-
|
||||
<appender name="files" class="ch.qos.logback.core.FileAppender">
|
||||
<file>${user.home}/.Protege/logs/protege.log</file>
|
||||
<append>true</append>
|
||||
@@ -18,9 +11,8 @@
|
||||
|
||||
|
||||
<root level="info">
|
||||
- <appender-ref ref="stdout" />
|
||||
<appender-ref ref="files"/>
|
||||
</root>
|
||||
|
||||
|
||||
-</configuration>
|
||||
\ No newline at end of file
|
||||
+</configuration>
|
||||
16
pkgs/development/web/protege-distribution/static-path.patch
Normal file
16
pkgs/development/web/protege-distribution/static-path.patch
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
--- a/run.sh 2021-06-24 22:30:20.764897745 +0900
|
||||
+++ b/run.sh 2021-06-24 22:29:47.211210142 +0900
|
||||
@@ -1,12 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
-SOURCE="${BASH_SOURCE[0]}"
|
||||
-while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
- DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||
- SOURCE="$(readlink "$SOURCE")"
|
||||
- [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
-done
|
||||
-cd "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||
+cd @out@/protege
|
||||
|
||||
java -Xmx500M -Xms200M \
|
||||
-Xss16M \
|
||||
2
pkgs/development/web/shopify-cli/Gemfile
Normal file
2
pkgs/development/web/shopify-cli/Gemfile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
source 'https://rubygems.org'
|
||||
gem 'shopify-cli'
|
||||
39
pkgs/development/web/shopify-cli/Gemfile.lock
Normal file
39
pkgs/development/web/shopify-cli/Gemfile.lock
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
ast (2.4.2)
|
||||
bugsnag (6.24.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
concurrent-ruby (1.1.9)
|
||||
ffi (1.15.5)
|
||||
liquid (5.2.0)
|
||||
listen (3.7.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mini_portile2 (2.8.0)
|
||||
nokogiri (1.13.3)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
parser (3.1.1.0)
|
||||
ast (~> 2.4.1)
|
||||
racc (1.6.0)
|
||||
rb-fsevent (0.11.1)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
shopify-cli (2.14.0)
|
||||
bugsnag (~> 6.22)
|
||||
listen (~> 3.7.0)
|
||||
theme-check (~> 1.10.1)
|
||||
theme-check (1.10.2)
|
||||
liquid (>= 5.1.0)
|
||||
nokogiri (>= 1.12)
|
||||
parser (~> 3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
shopify-cli
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.33
|
||||
35
pkgs/development/web/shopify-cli/default.nix
Normal file
35
pkgs/development/web/shopify-cli/default.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, ruby }:
|
||||
|
||||
let
|
||||
rubyEnv = bundlerEnv {
|
||||
name = "shopify-cli";
|
||||
gemdir = ./.;
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "shopify-cli";
|
||||
version = (import ./gemset.nix).shopify-cli.version;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${rubyEnv}/bin/shopify $out/bin/shopify
|
||||
wrapProgram $out/bin/shopify \
|
||||
--prefix PATH : ${lib.makeBinPath [ ruby ]}
|
||||
'';
|
||||
|
||||
passthru.updateScript = bundlerUpdateScript "shopify-cli";
|
||||
|
||||
meta = with lib; {
|
||||
description = "CLI which helps you build against the Shopify platform faster";
|
||||
homepage = "https://github.com/Shopify/shopify-cli";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ onny ];
|
||||
mainProgram = "shopify";
|
||||
platforms = ruby.meta.platforms;
|
||||
};
|
||||
}
|
||||
|
||||
149
pkgs/development/web/shopify-cli/gemset.nix
Normal file
149
pkgs/development/web/shopify-cli/gemset.nix
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
{
|
||||
ast = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.2";
|
||||
};
|
||||
bugsnag = {
|
||||
dependencies = ["concurrent-ruby"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0vlsqawqy8jn6cy03zcqw944p323zmr2lgadbw00m5r4lqc3bll4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.24.2";
|
||||
};
|
||||
concurrent-ruby = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.9";
|
||||
};
|
||||
ffi = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.15.5";
|
||||
};
|
||||
liquid = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "16aqzbvhvm254hbl274l4883h38j8wlwkcarmg09c7wzgpi0jnl1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.2.0";
|
||||
};
|
||||
listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0agybr37wpjv3xy4ipcmsvsibgdgphzrwbvcj4vfiykpmakwm01v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.7.1";
|
||||
};
|
||||
mini_portile2 = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0rapl1sfmfi3bfr68da4ca16yhc0pp93vjwkj7y3rdqrzy3b41hy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.8.0";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = ["mini_portile2" "racc"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1p6b3q411h2mw4dsvhjrp1hh66hha5cm69fqg85vn2lizz71n6xz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.3";
|
||||
};
|
||||
parser = {
|
||||
dependencies = ["ast"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0zaghgvva2q4jqbachg8jvpwgbg3w1jqr0d00m8rqciqznjgsw3c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.1.0";
|
||||
};
|
||||
racc = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0la56m0z26j3mfn1a9lf2l03qx1xifanndf9p3vx1azf6sqy7v9d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.6.0";
|
||||
};
|
||||
rb-fsevent = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "06c50pvxib7wqnv6q0f3n7gzfcrp5chi3sa48hxpkfxc3hhy11fm";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.11.1";
|
||||
};
|
||||
rb-inotify = {
|
||||
dependencies = ["ffi"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.1";
|
||||
};
|
||||
shopify-cli = {
|
||||
dependencies = ["bugsnag" "listen" "theme-check"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0fjqahhvmvqvmpfwa337ran9hhn9wk0ylm502qvcy5i4xy5hvd2r";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.14.0";
|
||||
};
|
||||
theme-check = {
|
||||
dependencies = ["liquid" "nokogiri" "parser"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0314f49fg354wgqavvipfaf6a03090kqrgv48qvkb0ikhvqawpdr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.10.2";
|
||||
};
|
||||
}
|
||||
29
pkgs/development/web/shopify-themekit/default.nix
Normal file
29
pkgs/development/web/shopify-themekit/default.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{ lib, buildGoModule, fetchFromGitHub }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "shopify-themekit";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Shopify";
|
||||
repo = "themekit";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-7uUKyaLzeiioW0TsEu82lJU0DoM1suwVcmacY1X0SEM=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-8QpkYj0fQb4plzvk6yCrZho8rq9VBiLft/EO3cczciI=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
postInstall = ''
|
||||
# Keep `theme` only
|
||||
rm -f $out/bin/{cmd,tkrelease}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A command line tool for shopify themes";
|
||||
homepage = "https://shopify.github.io/themekit/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ _1000101 ];
|
||||
};
|
||||
}
|
||||
26
pkgs/development/web/twitter-bootstrap/default.nix
Normal file
26
pkgs/development/web/twitter-bootstrap/default.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{ lib, stdenv, fetchurl, unzip }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bootstrap";
|
||||
version = "5.1.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/twbs/bootstrap/releases/download/v${version}/${pname}-${version}-dist.zip";
|
||||
sha256 = "sha256-vewp21DsjR7My3AgIrgj3wozPhBYFMJksyG9UYuJxyE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r * $out/
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Front-end framework for faster and easier web development";
|
||||
homepage = "https://getbootstrap.com/";
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
|
||||
}
|
||||
25
pkgs/development/web/valum/default.nix
Normal file
25
pkgs/development/web/valum/default.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{ lib, stdenv, meson, ninja, pkg-config, fetchFromGitHub, glib, vala, ctpl
|
||||
, libgee, libsoup, fcgi }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "valum";
|
||||
version = "0.3.16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "valum-framework";
|
||||
repo = "valum";
|
||||
rev = "v${version}";
|
||||
sha256 = "15lnk91gykm60rv31x3r1swp2bhzl3gwp12mf39smzi4bmf7h38f";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson ninja pkg-config ];
|
||||
buildInputs = [ glib vala ctpl libgee libsoup fcgi ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/valum-framework/valum";
|
||||
description = "Web micro-framework written in Vala";
|
||||
license = licenses.lgpl3;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
68
pkgs/development/web/wml/default.nix
Normal file
68
pkgs/development/web/wml/default.nix
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{ lib, fetchurl, perlPackages, ncurses, lynx, makeWrapper }:
|
||||
|
||||
perlPackages.buildPerlPackage {
|
||||
pname = "wml";
|
||||
version = "2.0.11";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://thewml.org/distrib/wml-2.0.11.tar.gz";
|
||||
sha256 = "0jjxpq91x7y2mgixz7ghqp01m24qa37wl3zz515rrzv7x8cyy4cf";
|
||||
};
|
||||
|
||||
setOutputFlags = false;
|
||||
|
||||
# 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 = with perlPackages;
|
||||
[ perl TermReadKey GD BitVector ncurses lynx makeWrapper ImageSize ];
|
||||
|
||||
patches = [ ./redhat-with-thr.patch ./dynaloader.patch ./no_bitvector.patch ];
|
||||
|
||||
# Workaround build failure on -fno-common toolchains:
|
||||
# ld: iselect_browse.o:(.bss+0x2020): multiple definition of `Line'; iselect_main.o:(.bss+0x100000): first defined here
|
||||
NIX_CFLAGS_COMPILE = "-fcommon";
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace wml_frontend/wml.src \
|
||||
--replace "File::PathConvert::realpath" "Cwd::realpath" \
|
||||
--replace "File::PathConvert::abs2rel" "File::Spec->abs2rel" \
|
||||
--replace "File::PathConvert" "File::Spec"
|
||||
|
||||
for i in wml_include/des/imgbg.src wml_include/des/imgdot.src; do
|
||||
substituteInPlace $i \
|
||||
--replace "WML::GD" "GD"
|
||||
done
|
||||
|
||||
rm wml_test/t/11-wmk.t
|
||||
'';
|
||||
|
||||
preFixup = ''
|
||||
wrapProgram $out/bin/wml \
|
||||
--set PERL5LIB ${with perlPackages; makePerlPath [
|
||||
BitVector TermReadKey ImageSize
|
||||
]}
|
||||
'';
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
installTargets = [ "install" ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://www.shlomifish.org/open-source/projects/website-meta-language/";
|
||||
description = "Off-line HTML generation toolkit for Unix";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
11
pkgs/development/web/wml/dynaloader.patch
Normal file
11
pkgs/development/web/wml/dynaloader.patch
Normal file
|
|
@ -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
|
||||
10
pkgs/development/web/wml/no_bitvector.patch
Normal file
10
pkgs/development/web/wml/no_bitvector.patch
Normal file
|
|
@ -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 \
|
||||
19
pkgs/development/web/wml/redhat-with-thr.patch
Normal file
19
pkgs/development/web/wml/redhat-with-thr.patch
Normal file
|
|
@ -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.
|
||||
36
pkgs/development/web/woff2/brotli-static.patch
Normal file
36
pkgs/development/web/woff2/brotli-static.patch
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
diff a/cmake/FindBrotliDec.cmake b/cmake/FindBrotliDec.cmake
|
||||
--- a/cmake/FindBrotliDec.cmake
|
||||
+++ b/cmake/FindBrotliDec.cmake
|
||||
@@ -18,10 +18,10 @@ find_path(BROTLIDEC_INCLUDE_DIRS
|
||||
HINTS ${PC_BROTLIDEC_INCLUDEDIR}
|
||||
)
|
||||
|
||||
-find_library(BROTLIDEC_LIBRARIES
|
||||
- NAMES brotlidec
|
||||
- HINTS ${PC_BROTLIDEC_LIBDIR}
|
||||
-)
|
||||
+if(NOT BUILD_SHARED_LIBS)
|
||||
+ set(_S "STATIC_")
|
||||
+endif()
|
||||
+set(BROTLIDEC_LIBRARIES ${PC_BROTLIDEC_${_S}LIBRARIES})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(BrotliDec
|
||||
diff a/cmake/FindBrotliEnc.cmake b/cmake/FindBrotliEnc.cmake
|
||||
--- a/cmake/FindBrotliEnc.cmake
|
||||
+++ b/cmake/FindBrotliEnc.cmake
|
||||
@@ -18,10 +18,10 @@ find_path(BROTLIENC_INCLUDE_DIRS
|
||||
HINTS ${PC_BROTLIENC_INCLUDEDIR}
|
||||
)
|
||||
|
||||
-find_library(BROTLIENC_LIBRARIES
|
||||
- NAMES brotlienc
|
||||
- HINTS ${PC_BROTLIENC_LIBDIR}
|
||||
-)
|
||||
+if(NOT BUILD_SHARED_LIBS)
|
||||
+ set(_S "STATIC_")
|
||||
+endif()
|
||||
+set(BROTLIENC_LIBRARIES ${PC_BROTLIENC_${_S}LIBRARIES})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(BrotliEnc
|
||||
42
pkgs/development/web/woff2/default.nix
Normal file
42
pkgs/development/web/woff2/default.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
{ brotli, cmake, pkg-config, fetchFromGitHub, lib, stdenv
|
||||
, static ? stdenv.hostPlatform.isStatic
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "woff2";
|
||||
version = "1.0.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "google";
|
||||
repo = "woff2";
|
||||
rev = "v${version}";
|
||||
sha256 = "13l4g536h0pr84ww4wxs2za439s0xp1va55g6l478rfbb1spp44y";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" "lib" ];
|
||||
|
||||
# Need to explicitly link to brotlicommon
|
||||
patches = lib.optional static ./brotli-static.patch;
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCANONICAL_PREFIXES=ON"
|
||||
"-DBUILD_SHARED_LIBS=${if static then "OFF" else "ON"}"
|
||||
] ++ lib.optional static "-DCMAKE_SKIP_RPATH:BOOL=TRUE";
|
||||
|
||||
propagatedBuildInputs = [ brotli ];
|
||||
|
||||
postPatch = ''
|
||||
# without this binaries only get built if shared libs are disable
|
||||
sed 's@^if (NOT BUILD_SHARED_LIBS)$@if (TRUE)@g' -i CMakeLists.txt
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Webfont compression reference code";
|
||||
homepage = "https://github.com/google/woff2";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.hrdinka ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
25
pkgs/development/web/xmlindent/default.nix
Normal file
25
pkgs/development/web/xmlindent/default.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{ lib, stdenv, fetchurl, flex }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "xmlindent";
|
||||
version = "0.2.17";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/project/xmlindent/xmlindent/${version}/${pname}-${version}.tar.gz";
|
||||
sha256 = "0k15rxh51a5r4bvfm6c4syxls8al96cx60a9mn6pn24nns3nh3rs";
|
||||
};
|
||||
|
||||
buildInputs = [ flex ];
|
||||
|
||||
preConfigure = ''
|
||||
substituteInPlace Makefile --replace "PREFIX=/usr/local" "PREFIX=$out"
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "XML stream reformatter";
|
||||
homepage = "http://xmlindent.sourceforge.net/";
|
||||
license = lib.licenses.gpl3;
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue