Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
gyp: specialize node.d for freebsd
Browse files Browse the repository at this point in the history
`node.d` should use `psinfo.d` instead of `procfs.d` and have statically
defined architecture on FreeBSD.
  • Loading branch information
indutny committed Feb 20, 2014
1 parent 085db9d commit b940e0f
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 3 deletions.
34 changes: 32 additions & 2 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,12 @@
}],
[ '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
Expand Down Expand Up @@ -482,10 +486,36 @@
]
} ],
]
}
},
]
} ],
]
},
{
'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
}
2 changes: 1 addition & 1 deletion tools/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def files(action):
# 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/')
Expand Down
32 changes: 32 additions & 0 deletions tools/specialize_node_d.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/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);

0 comments on commit b940e0f

Please sign in to comment.