Tested on amd64 and i386 as well - looks good.
On Thu, Feb 16, 2012 at 02:12:03PM -0800, Jeremy Evans wrote:
> This is a module for nodejs ports that would otherwise use npm install
> to install. In addition to the module file itself, this also includes:
>
> * patch to network.conf.template to add master site for npm registry
> * switch lang/coffeescript over to use node module
> * patch to port-modules.5
>
> Attached are also 4 new node ports:
>
> * bcrypt: bcrypt hashing
> * fibers: coroutine support to avoid nested callback hell
> * pg: postgresql database driver
> * generic-pool: required by pg
>
> Tested on amd64 and i386. OKs?
>
> Jeremy
>
> This patch applies in ports:
>
> Index: www/node/node.port.mk
> ===================================================================
> RCS file: www/node/node.port.mk
> diff -N www/node/node.port.mk
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ www/node/node.port.mk 10 Feb 2012 17:29:06 -0000
> @@ -0,0 +1,82 @@
> +# $OpenBSD: ruby.port.mk,v 1.50 2011/12/09 21:41:43 jeremy Exp $
> +
> +# node module
> +
> +CATEGORIES += www/node
> +
> +BUILD_DEPENDS += www/node
> +RUN_DEPENDS += www/node
> +
> +.if ${CONFIGURE_STYLE:L:Mnpm}
> +. if ${CONFIGURE_STYLE:L:Mext}
> +# Node C++ extensions are specific to an arch and are loaded as
> +# shared libraries, so set SHARED_ONLY and make sure PKG_ARCH=* is
> +# not set.
> +. if defined(PKG_ARCH) && ${PKG_ARCH} == *
> +ERRORS += "Fatal: Should not have PKG_ARCH=* when compiling extensions"
> +. endif
> +SHARED_ONLY = Yes
> +# All node extensions appear to link against these two libraries
> +WANTLIB += m stdc++
> +. else
> +# Node libraries that don't contain C++ extensions should run on
> +# any arch.
> +PKG_ARCH ?= *
> +. endif
> +
> +# The npm package repository separates packages in different directories,
> +# so to eliminate duplication, you need to set the NPM_NAME and VERSION
> +# variables so it can use the correct DISTNAME and MASTER_SITES. The
> +# NPM_NAME is required anyway during the install tasks, so it may as
> +# well be used here.
> +DISTNAME ?= ${NPM_NAME}-${VERSION}
> +MASTER_SITES ?= ${MASTER_SITE_NPM}${NPM_NAME}/-/
> +EXTRACT_SUFX ?= .tgz
> +PKGNAME ?= node-${DISTNAME}
> +
> +MODNODE_BIN_NPM = ${LOCALBASE}/bin/npm
> +NPM_INSTALL_FILE = ${WRKDIR}/${DISTNAME}.tgz
> +NPM_TAR_DIR = package
> +WRKDIST = ${WRKDIR}/${NPM_TAR_DIR}
> +
> +# List of npm package names to depend on. Only necessary
> +# if the current port depends on other node ports.
> +MODNODE_DEPENDS ?=
> +
> +# Link all dependencies first so that npm will install without complaining.
> +# Then rebuild the distfile, since it make contain local patches.
> +# Then use npm install to install the package to a local node_modules dir.
> +MODNODE_BUILD_TARGET = \
> + cd ${WRKDIST} && find . -type f -name '*.orig' -print0 | \
> + xargs -r0 rm; \
> + for dep in ${MODNODE_DEPENDS}; do \
> + cd ${WRKDIR} && ${MODNODE_BIN_NPM} link $$dep; \
> + done; \
> + cd ${WRKDIR} && tar -zcf ${NPM_INSTALL_FILE} ${NPM_TAR_DIR}; \
> + cd ${WRKDIR} && HOME=${WRKDIR} ${MODNODE_BIN_NPM} install \
> + ${NPM_INSTALL_FILE}
> +
> +# Move just this package from the local node_modules dir to the global
> +# node_modules dir. If there are any binaries in the package, create
> +# symlinks in the default PATH that point to them.
> +MODNODE_INSTALL_TARGET = \
> + mkdir ${PREFIX}/lib/node_modules; \
> + mv ${WRKDIR}/node_modules/${NPM_NAME} ${PREFIX}/lib/node_modules; \
> + chown -R ${SHAREOWN}:${SHAREGRP} ${PREFIX}/lib/node_modules; \
> + if [ -d ${PREFIX}/lib/node_modules/${NPM_NAME}/bin ]; then \
> + cd ${PREFIX}/lib/node_modules/${NPM_NAME}/bin && \
> + for bin in *; do \
> + ln -s
> ${TRUEPREFIX}/lib/node_modules/${NPM_NAME}/bin/$$bin \
> + ${PREFIX}/bin/$$bin; \
> + done; \
> + fi;
> +
> +. if !target(do-build)
> +do-build:
> + ${MODNODE_BUILD_TARGET}
> +. endif
> +. if !target(do-install)
> +do-install:
> + ${MODNODE_INSTALL_TARGET}
> +. endif
> +.endif
> Index: infrastructure/templates/network.conf.template
> ===================================================================
> RCS file: /cvs/ports/infrastructure/templates/network.conf.template,v
> retrieving revision 1.170
> diff -u -p -r1.170 network.conf.template
> --- infrastructure/templates/network.conf.template 11 Nov 2011 16:58:09
> -0000 1.170
> +++ infrastructure/templates/network.conf.template 1 Feb 2012 18:58:24
> -0000
> @@ -272,8 +272,11 @@ MASTER_SITE_MYSQL+= \
> MASTER_SITE_PYPI += \
> http://pypi.python.org/packages/source/
>
> -MASTER_SITE_RUBYGEMS+= \
> +MASTER_SITE_RUBYGEMS += \
> http://rubygems.org/downloads/
> +
> +MASTER_SITE_NPM += \
> + https://registry.npmjs.org/
>
> MASTER_SITE_ISC += \
> http://ftp.isc.org/isc/ \
> Index: lang/coffeescript/Makefile
> ===================================================================
> RCS file: /cvs/ports/lang/coffeescript/Makefile,v
> retrieving revision 1.1.1.1
> diff -u -p -r1.1.1.1 Makefile
> --- lang/coffeescript/Makefile 19 Dec 2011 22:21:47 -0000 1.1.1.1
> +++ lang/coffeescript/Makefile 10 Feb 2012 16:48:32 -0000
> @@ -2,8 +2,11 @@
>
> COMMENT = little language that compiles to javascript
>
> -DISTNAME = coffeescript-1.2.0
> +VERSION = 1.2.0
> +NPM_NAME = coffee-script
> +PKGNAME = coffeescript-${VERSION}
> CATEGORIES = lang
> +REVISION = 0
>
> HOMEPAGE = http://coffeescript.org
>
> @@ -13,24 +16,8 @@ PERMIT_PACKAGE_FTP = Yes
> PERMIT_DISTFILES_CDROM = Yes
> PERMIT_DISTFILES_FTP = Yes
>
> -MASTER_SITES = http://distfiles.nl/
> +MODULES = www/node
>
> -BUILD_DEPENDS = ${RUN_DEPENDS}
> -RUN_DEPENDS = www/node
> -
> -GIT_SHA1 = 9abe614
> -WRKDIST = ${WRKDIR}/jashkenas-coffee-script-${GIT_SHA1}
> -
> -NO_BUILD = Yes
> -
> -pre-configure:
> - ${SUBST_CMD} ${WRKSRC}/Cakefile
> -
> -do-install:
> - cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} HOME=${WRKSRC} \
> - ${SUDO} bin/cake --prefix ${PREFIX} install
> -
> -do-regress:
> - cd ${WRKSRC} && bin/cake test
> +CONFIGURE_STYLE = npm
>
> .include <bsd.port.mk>
> Index: lang/coffeescript/distinfo
> ===================================================================
> RCS file: /cvs/ports/lang/coffeescript/distinfo,v
> retrieving revision 1.1.1.1
> diff -u -p -r1.1.1.1 distinfo
> --- lang/coffeescript/distinfo 19 Dec 2011 22:21:47 -0000 1.1.1.1
> +++ lang/coffeescript/distinfo 10 Feb 2012 16:48:38 -0000
> @@ -1,5 +1,5 @@
> -MD5 (coffeescript-1.2.0.tar.gz) = Xfw+4hIU8bfobAU19ThqNQ==
> -RMD160 (coffeescript-1.2.0.tar.gz) = YnbH/znZSUxB+DIL/BrLveJs51k=
> -SHA1 (coffeescript-1.2.0.tar.gz) = iKUwy6jLaTzQZ/k3aFIJOFM31vQ=
> -SHA256 (coffeescript-1.2.0.tar.gz) =
> 9QJxODduCW+//O8G93chO4o72FKvshD/LH0e6P/bCeA=
> -SIZE (coffeescript-1.2.0.tar.gz) = 452704
> +MD5 (coffee-script-1.2.0.tgz) = wo3P9YiEGZsFnZ3k+oLARA==
> +RMD160 (coffee-script-1.2.0.tgz) = 69HVJuIn31Wg6cJChJzHeK6mcMM=
> +SHA1 (coffee-script-1.2.0.tgz) = teYeVfHKjEqeuH1TqgZX6kMSW5E=
> +SHA256 (coffee-script-1.2.0.tgz) =
> PxvKYTAgMwLpE7Tg19lVzfXdo0Sb6GQ+ge16W5N9e8Q=
> +SIZE (coffee-script-1.2.0.tgz) = 71680
> Index: lang/coffeescript/patches/patch-Cakefile
> ===================================================================
> RCS file: lang/coffeescript/patches/patch-Cakefile
> diff -N lang/coffeescript/patches/patch-Cakefile
> --- lang/coffeescript/patches/patch-Cakefile 19 Dec 2011 22:21:47 -0000
> 1.1.1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,23 +0,0 @@
> -$OpenBSD: patch-Cakefile,v 1.1.1.1 2011/12/19 22:21:47 jeremy Exp $
> ---- Cakefile.orig Tue Nov 8 15:01:45 2011
> -+++ Cakefile Tue Dec 13 14:52:16 2011
> -@@ -50,17 +50,12 @@ task 'install', 'install CoffeeScript into /usr/local
> - base = options.prefix or '/usr/local'
> - lib = "#{base}/lib/coffee-script"
> - bin = "#{base}/bin"
> -- node = "~/.node_libraries/coffee-script"
> - console.log "Installing CoffeeScript to #{lib}"
> -- console.log "Linking to #{node}"
> -- console.log "Linking 'coffee' to #{bin}/coffee"
> - exec([
> - "mkdir -p #{lib} #{bin}"
> - "cp -rf bin lib LICENSE README package.json src #{lib}"
> -- "ln -sfn #{lib}/bin/coffee #{bin}/coffee"
> -- "ln -sfn #{lib}/bin/cake #{bin}/cake"
> -- "mkdir -p ~/.node_libraries"
> -- "ln -sfn #{lib}/lib/coffee-script #{node}"
> -+ "ln -sfn ${TRUEPREFIX}/lib/coffee-script/bin/coffee #{bin}/coffee"
> -+ "ln -sfn ${TRUEPREFIX}/lib/coffee-script/bin/cake #{bin}/cake"
> - ].join(' && '), (err, stdout, stderr) ->
> - if err then console.log stderr.trim() else log 'done', green
> - )
> Index: lang/coffeescript/pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/lang/coffeescript/pkg/PLIST,v
> retrieving revision 1.1.1.1
> diff -u -p -r1.1.1.1 PLIST
> --- lang/coffeescript/pkg/PLIST 19 Dec 2011 22:21:47 -0000 1.1.1.1
> +++ lang/coffeescript/pkg/PLIST 10 Feb 2012 16:56:39 -0000
> @@ -1,40 +1,30 @@
> @comment $OpenBSD: PLIST,v 1.1.1.1 2011/12/19 22:21:47 jeremy Exp $
> bin/cake
> bin/coffee
> -lib/coffee-script/
> -lib/coffee-script/LICENSE
> -lib/coffee-script/README
> -lib/coffee-script/bin/
> -lib/coffee-script/bin/cake
> -lib/coffee-script/bin/coffee
> -lib/coffee-script/lib/
> -lib/coffee-script/lib/coffee-script/
> -lib/coffee-script/lib/coffee-script/browser.js
> -lib/coffee-script/lib/coffee-script/cake.js
> -lib/coffee-script/lib/coffee-script/coffee-script.js
> -lib/coffee-script/lib/coffee-script/command.js
> -lib/coffee-script/lib/coffee-script/grammar.js
> -lib/coffee-script/lib/coffee-script/helpers.js
> -lib/coffee-script/lib/coffee-script/index.js
> -lib/coffee-script/lib/coffee-script/lexer.js
> -lib/coffee-script/lib/coffee-script/nodes.js
> -lib/coffee-script/lib/coffee-script/optparse.js
> -lib/coffee-script/lib/coffee-script/parser.js
> -lib/coffee-script/lib/coffee-script/repl.js
> -lib/coffee-script/lib/coffee-script/rewriter.js
> -lib/coffee-script/lib/coffee-script/scope.js
> -lib/coffee-script/package.json
> -lib/coffee-script/src/
> -lib/coffee-script/src/browser.coffee
> -lib/coffee-script/src/cake.coffee
> -lib/coffee-script/src/coffee-script.coffee
> -lib/coffee-script/src/command.coffee
> -lib/coffee-script/src/grammar.coffee
> -lib/coffee-script/src/helpers.coffee
> -lib/coffee-script/src/index.coffee
> -lib/coffee-script/src/lexer.coffee
> -lib/coffee-script/src/nodes.coffee
> -lib/coffee-script/src/optparse.coffee
> -lib/coffee-script/src/repl.coffee
> -lib/coffee-script/src/rewriter.coffee
> -lib/coffee-script/src/scope.coffee
> +lib/node_modules/coffee-script/
> +lib/node_modules/coffee-script/.npmignore
> +lib/node_modules/coffee-script/LICENSE
> +lib/node_modules/coffee-script/README
> +lib/node_modules/coffee-script/Rakefile
> +lib/node_modules/coffee-script/bin/
> +lib/node_modules/coffee-script/bin/cake
> +lib/node_modules/coffee-script/bin/coffee
> +lib/node_modules/coffee-script/extras/
> +lib/node_modules/coffee-script/extras/jsl.conf
> +lib/node_modules/coffee-script/lib/
> +lib/node_modules/coffee-script/lib/coffee-script/
> +lib/node_modules/coffee-script/lib/coffee-script/browser.js
> +lib/node_modules/coffee-script/lib/coffee-script/cake.js
> +lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js
> +lib/node_modules/coffee-script/lib/coffee-script/command.js
> +lib/node_modules/coffee-script/lib/coffee-script/grammar.js
> +lib/node_modules/coffee-script/lib/coffee-script/helpers.js
> +lib/node_modules/coffee-script/lib/coffee-script/index.js
> +lib/node_modules/coffee-script/lib/coffee-script/lexer.js
> +lib/node_modules/coffee-script/lib/coffee-script/nodes.js
> +lib/node_modules/coffee-script/lib/coffee-script/optparse.js
> +lib/node_modules/coffee-script/lib/coffee-script/parser.js
> +lib/node_modules/coffee-script/lib/coffee-script/repl.js
> +lib/node_modules/coffee-script/lib/coffee-script/rewriter.js
> +lib/node_modules/coffee-script/lib/coffee-script/scope.js
> +lib/node_modules/coffee-script/package.json
>
> This patch applies in src/share/man/man5:
>
> Index: port-modules.5
> ===================================================================
> RCS file: /cvs/src/share/man/man5/port-modules.5,v
> retrieving revision 1.119
> diff -u -p -r1.119 port-modules.5
> --- port-modules.5 14 Dec 2011 18:32:46 -0000 1.119
> +++ port-modules.5 10 Feb 2012 17:52:24 -0000
> @@ -850,6 +850,42 @@ contains the list of dirs where
> .Ev AUTOCONF
> will be run during
> .Ar pre-configure .
> +.It www/node
> +Adds common dependencies to
> +.Ev RUN_DEPENDS
> +and
> +.Ev BUILD_DEPENDS .
> +Recognizes two additional types of
> +.Ev CONFIGURE_STYLE Ns s ,
> +"npm" and "npm ext". "npm ext" should be used for npm packages that
> +contain C++ extensions which need to be compiled. "npm" should be used
> +for other npm packages. One of these these two
> +.Ev CONFIGURE_STYLE Ns s
> +should be used or the module doesn't affect anything except
> +.Ev RUN_DEPENDS
> +and
> +.Ev BUILD_DEPENDS .
> +Requires
> +.Ev NPM_NAME
> +to be set to the name of the npm package.
> +Uses
> +.Ev NPM_NAME
> +and
> +.Ev VERSION
> +to set
> +.Ev DISTNAME ,
> +and
> +.Ev PKGNAME ,
> +and
> +.Ev MASTER_SITES .
> +If the npm package depends on other npm packages, the npm package names it
> +depends on should be listed in
> +.Ev MODNODE_DEPENDS .
> +Adds default do_build and do_install tasks, and you can reference the default
> +implementations via
> +.Ev MODNODE_BUILD_TARGET
> +and
> +.Ev MODNODE_INSTALL_TARGET .
> .It www/pear
> Used for PHP PEAR ports.
> Sets default