summaryrefslogtreecommitdiff
path: root/deps/npm/scripts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2011-11-21 09:48:45 -0800
committerRyan Dahl <ry@tinyclouds.org>2011-11-21 10:50:52 -0800
commitb488be127a8cf1e59eb257db3f8eaf6efdb0f275 (patch)
tree83436f4f84b9651ea66c3a0d304050252916c149 /deps/npm/scripts
parent05de01d707cd9a80f34da23445f507f5f2e2c277 (diff)
downloadnode-new-b488be127a8cf1e59eb257db3f8eaf6efdb0f275.tar.gz
Include NPM, update .pkg to install it.
.msi update coming soon.
Diffstat (limited to 'deps/npm/scripts')
-rw-r--r--deps/npm/scripts/clean-old.sh165
-rwxr-xr-xdeps/npm/scripts/doc-build.sh71
-rw-r--r--deps/npm/scripts/index-build.js62
-rw-r--r--deps/npm/scripts/install.sh282
4 files changed, 580 insertions, 0 deletions
diff --git a/deps/npm/scripts/clean-old.sh b/deps/npm/scripts/clean-old.sh
new file mode 100644
index 0000000000..cda80f2f48
--- /dev/null
+++ b/deps/npm/scripts/clean-old.sh
@@ -0,0 +1,165 @@
+#!/bin/bash
+
+# look for old 0.x cruft, and get rid of it.
+# Should already be sitting in the npm folder.
+
+# This doesn't have to be quite as cross-platform as install.sh.
+# There are some bash-isms, because maintaining *two*
+# fully-portable posix/bourne sh scripts is too much for
+# one project with a sane maintainer.
+
+# If readlink isn't available, then this is just too tricky.
+# However, greadlink is fine, so Solaris can join the party, too.
+readlink="readlink"
+which $readlink >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+ readlink="greadlink"
+ which $readlink >/dev/null 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo "Can't find the readlink or greadlink command. Aborting."
+ exit 1
+ fi
+fi
+
+if [ "x$npm_config_prefix" != "x" ]; then
+ PREFIXES=$npm_config_prefix
+else
+ node="$NODE"
+ if [ "x$node" = "x" ]; then
+ node=`which node`
+ fi
+ if [ "x$node" = "x" ]; then
+ echo "Can't find node to determine prefix. Aborting."
+ exit 1
+ fi
+
+
+ PREFIX=`dirname $node`
+ PREFIX=`dirname $PREFIX`
+ echo "cleanup prefix=$PREFIX"
+ PREFIXES=$PREFIX
+
+ altprefix=`"$node" -e process.installPrefix`
+ if [ "x$altprefix" != "x" ] && [ "x$altprefix" != "x$PREFIX" ]; then
+ echo "altprefix=$altprefix"
+ PREFIXES="$PREFIX $altprefix"
+ fi
+fi
+
+# now prefix is where npm would be rooted by default
+# go hunting.
+
+packages=
+for prefix in $PREFIXES; do
+ packages="$packages
+ "`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache`
+done
+
+packages=`echo $packages`
+
+filelist=()
+fid=0
+
+for prefix in $PREFIXES; do
+ # remove any links into the .npm dir, or links to
+ # version-named shims/symlinks.
+ for folder in share/man bin lib/node; do
+ find $prefix/$folder -type l | while read file; do
+ target=`$readlink $file | grep '/\.npm/'`
+ if [ "x$target" != "x" ]; then
+ # found one!
+ filelist[$fid]="$file"
+ let 'fid++'
+ # also remove any symlinks to this file.
+ base=`basename "$file"`
+ base=`echo "$base" | awk -F@ '{print $1}'`
+ if [ "x$base" != "x" ]; then
+ find "`dirname $file`" -type l -name "$base"'*' \
+ | while read l; do
+ target=`$readlink "$l" | grep "$base"`
+ if [ "x$target" != "x" ]; then
+ filelist[$fid]="$1"
+ let 'fid++'
+ fi
+ done
+ fi
+ fi
+ done
+
+ # Scour for shim files. These are relics of 0.2 npm installs.
+ # note: grep -r is not portable.
+ find $prefix/$folder -type f \
+ | xargs grep -sl '// generated by npm' \
+ | while read file; do
+ filelist[$fid]="$file"
+ let 'fid++'
+ done
+ done
+
+ # now remove the package modules, and the .npm folder itself.
+ if [ "x$packages" != "x" ]; then
+ for pkg in $packages; do
+ filelist[$fid]="$prefix/lib/node/$pkg"
+ let 'fid++'
+ for i in $prefix/lib/node/$pkg\@*; do
+ filelist[$fid]="$i"
+ let 'fid++'
+ done
+ done
+ fi
+
+ for folder in lib/node/.npm lib/npm share/npm; do
+ if [ -d $prefix/$folder ]; then
+ filelist[$fid]="$prefix/$folder"
+ let 'fid++'
+ fi
+ done
+done
+
+# now actually clean, but only if there's anything TO clean
+if [ "${#filelist[@]}" -gt 0 ]; then
+ echo ""
+ echo "This script will find and eliminate any shims, symbolic"
+ echo "links, and other cruft that was installed by npm 0.x."
+ echo ""
+
+ if [ "x$packages" != "x" ]; then
+ echo "The following packages appear to have been installed with"
+ echo "an old version of npm, and will be removed forcibly:"
+ for pkg in $packages; do
+ echo " $pkg"
+ done
+ echo "Make a note of these. You may want to install them"
+ echo "with npm 1.0 when this process is completed."
+ echo ""
+ fi
+
+ OK=
+ if [ "x$1" = "x-y" ]; then
+ OK="yes"
+ fi
+
+ while [ "$OK" != "y" ] && [ "$OK" != "yes" ] && [ "$OK" != "no" ]; do
+ echo "Is this OK?"
+ echo " enter 'yes' or 'no'"
+ echo " or 'show' to see a list of files "
+ read OK
+ if [ "x$OK" = "xshow" ] || [ "x$OK" = "xs" ]; then
+ for i in "${filelist[@]}"; do
+ echo "$i"
+ done
+ fi
+ done
+ if [ "$OK" = "no" ]; then
+ echo "Aborting"
+ exit 1
+ fi
+ for i in "${filelist[@]}"; do
+ rm -rf "$i"
+ done
+fi
+
+echo ""
+echo 'All clean!'
+
+exit 0
diff --git a/deps/npm/scripts/doc-build.sh b/deps/npm/scripts/doc-build.sh
new file mode 100755
index 0000000000..6c32ea1838
--- /dev/null
+++ b/deps/npm/scripts/doc-build.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+if [[ $DEBUG != "" ]]; then
+ set -x
+fi
+set -o errexit
+set -o pipefail
+
+if ! [ -x node_modules/.bin/ronn ]; then
+ if [ -f .building_ronn ]; then
+ while [ -f .building_ronn ]; do
+ sleep 1
+ done
+ else
+ # a race to see which make process will be the one to install ronn
+ echo $$ > .building_ronn
+ sleep 1
+ if [ $(cat .building_ronn) == $$ ]; then
+ make node_modules/ronn
+ rm .building_ronn
+ else
+ while [ -f .building_ronn ]; do
+ sleep 1
+ done
+ fi
+ fi
+fi
+
+src=$1
+dest=$2
+name=$(basename ${src%.*})
+date=$(date -u +'%Y-%M-%d %H:%m:%S')
+version=$(node cli.js -v)
+
+mkdir -p $(dirname $dest)
+
+case $dest in
+ *.[13])
+ ./node_modules/.bin/ronn --roff $src \
+ | sed "s|@VERSION@|$version|g" \
+ | perl -pi -e 's/npm\\-([^\(]*)\(1\)/npm help \1/g' \
+ | perl -pi -e 's/npm\\-([^\(]*)\(3\)/npm apihelp \1/g' \
+ | perl -pi -e 's/npm\(1\)/npm help npm/g' \
+ | perl -pi -e 's/npm\(3\)/npm apihelp npm/g' \
+ > $dest
+ exit $?
+ ;;
+ *.html)
+ (cat html/dochead.html && \
+ ./node_modules/.bin/ronn -f $src && \
+ cat html/docfoot.html )\
+ | sed "s|@NAME@|$name|g" \
+ | sed "s|@DATE@|$date|g" \
+ | sed "s|@VERSION@|$version|g" \
+ | perl -pi -e 's/<h1>npm(-?[^\(]*\([0-9]\)) -- (.*?)<\/h1>/<h1>npm\1<\/h1> <p>\2<\/p>/g' \
+ | perl -pi -e 's/npm-npm/npm/g' \
+ | perl -pi -e 's/([^"-])(npm-)?README(\(1\))?/\1<a href="..\/doc\/README.html">README<\/a>/g' \
+ | perl -pi -e 's/<title><a href="..\/doc\/README.html">README<\/a><\/title>/<title>README<\/title>/g' \
+ | perl -pi -e 's/([^"-])npm-([^\(]+)(\(1\))/\1<a href="..\/doc\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/([^"-])npm-([^\(]+)(\(3\))/\1<a href="..\/api\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/([^"-])npm\(1\)/\1<a href="..\/doc\/npm.html">npm(1)<\/a>/g' \
+ | perl -pi -e 's/([^"-])npm\(3\)/\1<a href="..\/api\/npm.html">npm(3)<\/a>/g' \
+ | perl -pi -e 's/\([13]\)<\/a><\/h1>/<\/a><\/h1>/g' \
+ > $dest
+ exit $?
+ ;;
+ *)
+ echo "Invalid destination type: $dest" >&2
+ exit 1
+ ;;
+esac
diff --git a/deps/npm/scripts/index-build.js b/deps/npm/scripts/index-build.js
new file mode 100644
index 0000000000..b3c19a03a1
--- /dev/null
+++ b/deps/npm/scripts/index-build.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+var fs = require("fs")
+ , path = require("path")
+ , cli = path.resolve(__dirname, "..", "doc", "cli")
+ , clidocs = null
+ , api = path.resolve(__dirname, "..", "doc", "api")
+ , apidocs = null
+ , readme = path.resolve(__dirname, "..", "README.md")
+
+fs.readdir(cli, done("cli"))
+fs.readdir(api, done("api"))
+
+function done (which) { return function (er, docs) {
+ if (er) throw er
+ if (which === "api") apidocs = docs
+ else clidocs = docs
+
+ if (apidocs && clidocs) next()
+}}
+
+function filter (d) {
+ return d !== "index.md"
+ && d.charAt(0) !== "."
+ && d.match(/\.md$/)
+}
+
+function next () {
+ console.log(
+ "npm-index(1) -- Index of all npm documentation\n" +
+ "==============================================\n")
+
+ apidocs = apidocs.filter(filter).map(function (d) {
+ return [3, path.resolve(api, d)]
+ })
+
+ clidocs = clidocs.filter(filter).map(function (d) {
+ return [1, path.resolve(cli, d)]
+ })
+
+ writeLine([1, readme])
+
+ console.log("# Command Line Documentation")
+
+ clidocs.forEach(writeLine)
+
+ console.log("# API Documentation")
+ apidocs.forEach(writeLine)
+}
+
+function writeLine (sd) {
+ var sxn = sd[0]
+ , doc = sd[1]
+ , d = path.basename(doc, ".md")
+ , s = fs.lstatSync(doc)
+
+ if (s.isSymbolicLink()) return
+
+ var content = fs.readFileSync(doc, "utf8").split("\n")[0].split("--")[1]
+
+ console.log("## npm-%s(%d)\n", d, sxn)
+ console.log(content + "\n")
+}
diff --git a/deps/npm/scripts/install.sh b/deps/npm/scripts/install.sh
new file mode 100644
index 0000000000..16fbfe618b
--- /dev/null
+++ b/deps/npm/scripts/install.sh
@@ -0,0 +1,282 @@
+#!/bin/sh
+
+# A word about this shell script:
+#
+# It must work everywhere, including on systems that lack
+# a /bin/bash, map 'sh' to ksh, ksh97, bash, ash, or zsh,
+# and potentially have either a posix shell or bourne
+# shell living at /bin/sh.
+#
+# See this helpful document on writing portable shell scripts:
+# http://www.gnu.org/s/hello/manual/autoconf/Portable-Shell.html
+#
+# The only shell it won't ever work on is cmd.exe.
+
+if [ "x$0" = "xsh" ]; then
+ # run as curl | sh
+ # on some systems, you can just do cat>npm-install.sh
+ # which is a bit cuter. But on others, &1 is already closed,
+ # so catting to another script file won't do anything.
+ curl -s http://npmjs.org/install.sh > npm-install-$$.sh
+ sh npm-install-$$.sh
+ ret=$?
+ rm npm-install-$$.sh
+ exit $ret
+fi
+
+# See what "npm_config_*" things there are in the env,
+# and make them permanent.
+# If this fails, it's not such a big deal.
+configures="`env | grep 'npm_config_' | sed -e 's|^npm_config_||g'`"
+
+npm_config_loglevel="error"
+if [ "x$npm_debug" = "x" ]; then
+ (exit 0)
+else
+ echo "Running in debug mode."
+ echo "Note that this requires bash or zsh."
+ set -o xtrace
+ set -o pipefail
+ npm_config_loglevel="verbose"
+fi
+export npm_config_loglevel
+
+# make sure that node exists
+node=`which node 2>&1`
+ret=$?
+if [ $ret -eq 0 ] && [ -x "$node" ]; then
+ (exit 0)
+else
+ echo "npm cannot be installed without nodejs." >&2
+ echo "Install node first, and then try again." >&2
+ echo "" >&2
+ echo "Maybe node is installed, but not in the PATH?" >&2
+ echo "Note that running as sudo can change envs." >&2
+ echo ""
+ echo "PATH=$PATH" >&2
+ exit $ret
+fi
+
+# set the temp dir
+TMP="${TMPDIR}"
+if [ "x$TMP" = "x" ]; then
+ TMP="/tmp"
+fi
+TMP="${TMP}/npm.$$"
+rm -rf "$TMP" || true
+mkdir "$TMP"
+if [ $? -ne 0 ]; then
+ echo "failed to mkdir $TMP" >&2
+ exit 1
+fi
+
+BACK="$PWD"
+
+ret=0
+tar="${TAR}"
+if [ -z "$tar" ]; then
+ tar="${npm_config_tar}"
+fi
+if [ -z "$tar" ]; then
+ tar=`which tar 2>&1`
+ ret=$?
+fi
+
+if [ $ret -eq 0 ] && [ -x "$tar" ]; then
+ echo "tar=$tar"
+ echo "version:"
+ $tar --version
+ ret=$?
+fi
+
+if [ $ret -eq 0 ]; then
+ (exit 0)
+else
+ echo "No suitable tar program found."
+ exit 1
+fi
+
+
+
+# Try to find a suitable make
+# If the MAKE environment var is set, use that.
+# otherwise, try to find gmake, and then make.
+# If no make is found, then just execute the necessary commands.
+
+# XXX For some reason, make is building all the docs every time. This
+# is an annoying source of bugs. Figure out why this happens.
+MAKE=NOMAKE
+
+if [ "x$MAKE" = "x" ]; then
+ make=`which gmake 2>&1`
+ if [ $? -eq 0 ] && [ -x $make ]; then
+ (exit 0)
+ else
+ make=`which make 2>&1`
+ if [ $? -eq 0 ] && [ -x $make ]; then
+ (exit 0)
+ else
+ make=NOMAKE
+ fi
+ fi
+else
+ make="$MAKE"
+fi
+
+if [ -x "$make" ]; then
+ (exit 0)
+else
+ # echo "Installing without make. This may fail." >&2
+ make=NOMAKE
+fi
+
+# If there's no bash, then don't even try to clean
+if [ -x "/bin/bash" ]; then
+ (exit 0)
+else
+ clean="no"
+fi
+
+t="${npm_install}"
+if [ -z "$t" ]; then
+ t="latest"
+fi
+
+# the npmca cert
+cacert='
+-----BEGIN CERTIFICATE-----
+MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
+VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x
+IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w
+bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y
+MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV
+BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj
+YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA
+aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE
+OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz
+Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl
+y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC
+l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv
+yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl
+ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op
+-----END CERTIFICATE-----
+'
+
+echo "$cacert" > "$TMP/cafile.crt"
+cacert="$TMP/cafile.crt"
+
+# need to echo "" after, because Posix sed doesn't treat EOF
+# as an implied end of line.
+url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
+ | sed -e 's/^.*tarball":"//' \
+ | sed -e 's/".*$//'`
+
+ret=$?
+if [ "x$url" = "x" ]; then
+ ret=125
+ # try without the -e arg to sed.
+ url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
+ | sed 's/^.*tarball":"//' \
+ | sed 's/".*$//'`
+ ret=$?
+ if [ "x$url" = "x" ]; then
+ ret=125
+ fi
+fi
+if [ $ret -ne 0 ]; then
+ echo "Failed to get tarball url for npm/$t" >&2
+ exit $ret
+fi
+
+
+echo "fetching: $url" >&2
+
+cd "$TMP" \
+ && curl -SsL --cacert "$cacert" "$url" \
+ | $tar -xzf - \
+ && rm "$cacert" \
+ && cd "$TMP"/* \
+ && (node_version=`"$node" --version 2>&1`
+ ret=$?
+ if [ $ret -eq 0 ]; then
+ req=`"$node" bin/read-package-json.js package.json engines.node`
+ if [ -d node_modules ]; then
+ "$node" node_modules/semver/bin/semver -v "$node_version" -r "$req"
+ ret=$?
+ else
+ "$node" bin/semver.js -v "$node_version" -r "$req"
+ ret=$?
+ fi
+ fi
+ if [ $ret -ne 0 ]; then
+ echo "You need node $req to run this program." >&2
+ echo "node --version reports: $node_version" >&2
+ echo "Please upgrade node before continuing."
+ exit $ret
+ fi) \
+ && (ver=`"$node" bin/read-package-json.js package.json version`
+ isnpm10=0
+ if [ $ret -eq 0 ]; then
+ req=`"$node" bin/read-package-json.js package.json engines.node`
+ if [ -d node_modules ]; then
+ if "$node" node_modules/semver/bin/semver -v "$ver" -r "1"
+ then
+ isnpm10=1
+ fi
+ else
+ if "$node" bin/semver -v "$ver" -r ">=1.0"; then
+ isnpm10=1
+ fi
+ fi
+ fi
+
+ ret=0
+ if [ $isnpm10 -eq 1 ] && [ -f "scripts/clean-old.sh" ]; then
+ if [ "x$skipclean" = "x" ]; then
+ (exit 0)
+ else
+ clean=no
+ fi
+ if [ "x$clean" = "xno" ] \
+ || [ "x$clean" = "xn" ]; then
+ echo "Skipping 0.x cruft clean" >&2
+ ret=0
+ elif [ "x$clean" = "xy" ] || [ "x$clean" = "xyes" ]; then
+ NODE="$node" /bin/bash "scripts/clean-old.sh" "-y"
+ ret=$?
+ else
+ NODE="$node" /bin/bash "scripts/clean-old.sh" </dev/tty
+ ret=$?
+ fi
+ fi
+
+ if [ $ret -ne 0 ]; then
+ echo "Aborted 0.x cleanup. Exiting." >&2
+ exit $ret
+ fi) \
+ && (if [ "x$configures" = "x" ]; then
+ (exit 0)
+ else
+ echo "./configure "$configures
+ echo "$configures" > npmrc
+ fi) \
+ && (if [ "$make" = "NOMAKE" ]; then
+ (exit 0)
+ elif "$make" uninstall install; then
+ (exit 0)
+ else
+ make="NOMAKE"
+ fi
+ if [ "$make" = "NOMAKE" ]; then
+ "$node" cli.js rm npm -gf
+ "$node" cli.js install -gf
+ fi) \
+ && cd "$BACK" \
+ && rm -rf "$TMP" \
+ && echo "It worked"
+
+ret=$?
+if [ $ret -ne 0 ]; then
+ echo "It failed" >&2
+fi
+exit $ret