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

Attachment: node-bcrypt.tar.gz
Description: application/tar-gz

Attachment: node-fibers.tar.gz
Description: application/tar-gz

Attachment: node-generic-pool.tar.gz
Description: application/tar-gz

Attachment: node-pg.tar.gz
Description: application/tar-gz

Reply via email to