Add command line arguments for accessing build flags.
authorRyan <ry@tinyclouds.org>
Thu, 27 Aug 2009 00:15:11 +0000 (02:15 +0200)
committerRyan <ry@tinyclouds.org>
Thu, 27 Aug 2009 14:08:47 +0000 (16:08 +0200)
node --cflags
node --libs

At the expense of some WAF nastiness.

src/node.cc
src/node.h
src/node_version.h.in [new file with mode: 0644]
wscript

index c96dbaa..e399f3d 100644 (file)
@@ -300,11 +300,18 @@ PrintHelp ( )
 static void
 ParseArgs (int *argc, char **argv)
 {
+  bool cflags = false, libs = false;
   for (int i = 1; i < *argc; i++) {
     const char *arg = argv[i];
     if (strcmp(arg, "--version") == 0 || strcmp(arg, "-v") == 0) {
       printf("%s\n", NODE_VERSION);
       exit(0);
+    } else if (strcmp(arg, "--cflags") == 0) {
+      cflags = true;
+      continue;
+    } else if (strcmp(arg, "--libs") == 0) {
+      libs = true;
+      continue;
     } else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
       PrintHelp();
       exit(0);
@@ -312,6 +319,21 @@ ParseArgs (int *argc, char **argv)
       argv[i] = (char*)"--help";
     }
   }
+
+  /* XXX Wow this is terrible code. */
+  bool should_exit = false;
+  if (cflags) {
+    should_exit = true;
+    printf("%s ", NODE_CFLAGS);
+  }
+  if (libs) {
+    should_exit = true;
+    printf("%s ", NODE_LIBFLAGS);
+  }
+  if (should_exit) {
+    printf("\n");
+    exit(0);
+  }
 }
 
 int
index 1dc473d..6701fa6 100644 (file)
@@ -7,11 +7,10 @@
 #include <evcom.h>
 
 #include "object_wrap.h"
+#include "node_version.h"
 
 namespace node {
 
-#define NODE_VERSION "0.1.7"
-
 #define NODE_DEFINE_CONSTANT(target, constant)                            \
   (target)->Set(v8::String::NewSymbol(#constant),                         \
                 v8::Integer::New(constant))
diff --git a/src/node_version.h.in b/src/node_version.h.in
new file mode 100644 (file)
index 0000000..48753d2
--- /dev/null
@@ -0,0 +1,3 @@
+#define NODE_VERSION "@VERSION@"
+#define NODE_CFLAGS "@CCFLAGS@ @CPPFLAGS@ -I@PREFIX@/include"
+#define NODE_LIBFLAGS "@LIBFLAGS@ -L@PREFIX@/lib -lnode@DEBUG_EXT@"
diff --git a/wscript b/wscript
index 3ec2450..c7e2704 100644 (file)
--- a/wscript
+++ b/wscript
@@ -4,7 +4,7 @@ import sys, os, shutil
 from os.path import join, dirname, abspath
 from logging import fatal
 
-VERSION="0.1.6"
+VERSION="0.1.7"
 APPNAME="node.js"
 
 import js2c
@@ -260,7 +260,7 @@ def build(bld):
   libnode.uselib_local = "evcom ev eio http_parser coupling"
   libnode.uselib = "UDNS V8 EXECINFO PROFILER EFENCE DL"
   libnode.install_path = '${PREFIX}/lib'
-  bld.install_files('${PREFIX}/include/node/', 'config.h src/node.h src/object_wrap.h');
+  bld.install_files('${PREFIX}/include/node/', 'config.h src/node.h src/node_version.h src/object_wrap.h');
 
   ### node
   node = bld.new_task_gen("cxx", "program")
@@ -274,14 +274,13 @@ def build(bld):
 
   def subflags(program):
     debug_ext = ""
-    if bld.env["USE_DEBUG"]:
-      debug_ext = "_g"
-    x = { 'CCFLAGS': " ".join(program.env["CCFLAGS"])
-        , 'CPPFLAGS': " ".join(program.env["CPPFLAGS"])
-        , 'LIBFLAGS': " ".join(program.env["LIBFLAGS"])
-        , 'VERSION': VERSION
-        , 'PREFIX': program.env["PREFIX"]
-        , 'DEBUG_EXT': debug_ext
+    if program.target == "node_g": debug_ext = "_g"
+    x = { 'CCFLAGS'   : " ".join(program.env["CCFLAGS"])
+        , 'CPPFLAGS'  : " ".join(program.env["CPPFLAGS"])
+        , 'LIBFLAGS'  : " ".join(program.env["LIBFLAGS"])
+        , 'VERSION'   : VERSION
+        , 'PREFIX'    : program.env["PREFIX"]
+        , 'DEBUG_EXT' : debug_ext
         }
     return x;
 
@@ -293,6 +292,11 @@ def build(bld):
   pkgconfig.install_path = '${PREFIX}/lib/pkgconfig'
   pkgconfig.dict = subflags(node)
 
+  # process file.pc.in -> file.pc
+  node_version = bld.new_task_gen('subst', before="cxx")
+  node_version.source = 'src/node_version.h.in'
+  node_version.target = 'src/node_version.h'
+  node_version.dict = subflags(node)
 
   if bld.env["USE_DEBUG"]:
     node_g = node.clone("debug")
@@ -305,4 +309,6 @@ def build(bld):
     pkgconfig_g.dict = subflags(node_g)
     pkgconfig_g.target = 'node_g.pc'
     
+    node_version_g = node_version.clone("debug")
+    node_version_g.dict = subflags(node_g)