}],
[ 'node_use_dtrace=="true"', {
'defines': [ 'HAVE_DTRACE=1' ],
- 'dependencies': [ 'node_dtrace_header' ],
+ 'dependencies': [
+ 'node_dtrace_header',
+ 'specialize_node_d',
+ ],
'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)' ],
+
#
# DTrace is supported on solaris, mac, and bsd. There are three
# object files associated with DTrace support, but they're not all
]
} ],
]
- }
+ },
]
} ],
]
+ },
+ {
+ 'target_name': 'specialize_node_d',
+ 'type': 'none',
+ 'conditions': [
+ [ 'node_use_dtrace=="true"', {
+ 'actions': [
+ {
+ 'action_name': 'specialize_node_d',
+ 'inputs': [
+ 'src/node.d'
+ ],
+ 'outputs': [
+ '<(PRODUCT_DIR)/node.d',
+ ],
+ 'action': [
+ 'tools/specialize_node_d.py',
+ '<@(_outputs)',
+ '<@(_inputs)',
+ '<@(OS)',
+ '<@(target_arch)',
+ ],
+ },
+ ],
+ } ],
+ ]
}
] # end targets
}
# install unconditionally, checking if the platform supports dtrace doesn't
# work when cross-compiling and besides, there's at least one linux flavor
# with dtrace support now (oracle's "unbreakable" linux)
- action(['src/node.d'], 'lib/dtrace/')
+ action(['out/Release/node.d'], 'lib/dtrace/node.d')
if 'freebsd' in sys.platform or 'openbsd' in sys.platform:
action(['doc/node.1'], 'man/man1/')
--- /dev/null
+#!/usr/bin/env python
+
+#
+# specialize_node_d.py output_file src/node.d flavor arch
+#
+# Specialize node.d for given flavor (`freebsd`) and arch (`x64` or `ia32`)
+#
+
+import re
+import subprocess
+import sys
+import errno
+
+if len(sys.argv) != 5:
+ print "usage: specialize_node_d.py outfile src/node.d flavor arch"
+ sys.exit(2);
+
+outfile = file(sys.argv[1], 'w');
+infile = file(sys.argv[2], 'r');
+flavor = sys.argv[3];
+arch = sys.argv[4];
+
+model = r'curpsinfo->pr_dmodel == PR_MODEL_ILP32'
+
+for line in infile:
+ if flavor == 'freebsd':
+ line = re.sub('procfs.d', 'psinfo.d', line);
+ if arch == 'x64':
+ line = re.sub(model, '0', line);
+ else:
+ line = re.sub(model, '1', line);
+ outfile.write(line);