@@ -28,6 +28,7 @@ function configure (gyp, argv, callback) {
2828 , buildDir = path . resolve ( 'build' )
2929 , configNames = [ 'config.gypi' , 'common.gypi' ]
3030 , configs = [ ]
31+ , post_configs = [ ]
3132 , nodeDir
3233 , release = processRelease ( argv , gyp , process . version , process . release )
3334
@@ -97,27 +98,42 @@ function configure (gyp, argv, callback) {
9798
9899 var configFilename = 'config.gypi'
99100 var configPath = path . resolve ( buildDir , configFilename )
101+ var postConfigFilename = 'post_config.gypi'
102+ var postConfigPath = path . resolve ( buildDir , postConfigFilename )
100103
101104 log . verbose ( 'build/' + configFilename , 'creating config file' )
102105
103106 var config = process . config || { }
104107 , defaults = config . target_defaults
105108 , variables = config . variables
109+ , fallback_target_defaults = { }
110+ , post_variables = [ 'cflags' , 'defines' , 'include_dirs' , 'libraries' ]
106111
107112 // default "config.variables"
108113 if ( ! variables ) variables = config . variables = { }
109114
110115 // default "config.defaults"
111116 if ( ! defaults ) defaults = config . target_defaults = { }
112117
113- // don't inherit the "defaults" from node's `process.config` object.
118+ if ( variables . node_shared_cares ||
119+ variables . node_shared_http_parser ||
120+ variables . node_shared_libuv ||
121+ variables . node_shared_openssl ||
122+ variables . node_shared_zlib ) {
123+ Object . keys ( defaults ) . forEach ( function ( entry ) {
124+ if ( post_variables . indexOf ( entry ) > 0 ) {
125+ fallback_target_defaults [ entry ] = defaults [ entry ]
126+ }
127+ } )
128+ }
129+ // if node engine does not have to rely on shared libraries in the system
130+ // do not inherit the "defaults" from node's `process.config` object.
114131 // doing so could cause problems in cases where the `node` executable was
115132 // compiled on a different machine (with different lib/include paths) than
116133 // the machine where the addon is being built to
117- defaults . cflags = [ ]
118- defaults . defines = [ ]
119- defaults . include_dirs = [ ]
120- defaults . libraries = [ ]
134+ post_variables . forEach ( function ( post_var ) {
135+ defaults [ post_var ] = [ ]
136+ } )
121137
122138 // set the default_configuration prop
123139 if ( 'debug' in gyp . opts ) {
@@ -182,7 +198,17 @@ function configure (gyp, argv, callback) {
182198 , json = JSON . stringify ( config , boolsToString , 2 )
183199 log . verbose ( 'build/' + configFilename , 'writing out config file: %s' , configPath )
184200 configs . push ( configPath )
185- fs . writeFile ( configPath , [ prefix , json , '' ] . join ( '\n' ) , findConfigs )
201+ fs . writeFile ( configPath , [ prefix , json , '' ] . join ( '\n' ) , function ( ) {
202+
203+ var config = {
204+ "target_defaults" : fallback_target_defaults
205+ }
206+ , prefix = '# Do not edit. File was generated by node-gyp\'s "configure" step'
207+ , json = JSON . stringify ( config , boolsToString , 2 )
208+ log . verbose ( 'build/' + postConfigFilename , 'writing out config file: %s' , postConfigPath )
209+ post_configs . push ( postConfigPath )
210+ fs . writeFile ( postConfigPath , [ prefix , json , '' ] . join ( '\n' ) , findConfigs )
211+ } )
186212 }
187213
188214 function findConfigs ( err ) {
@@ -280,6 +306,9 @@ function configure (gyp, argv, callback) {
280306
281307 argv . push ( '-I' , addon_gypi )
282308 argv . push ( '-I' , common_gypi )
309+ post_configs . forEach ( function ( config ) {
310+ argv . push ( '-I' , config )
311+ } )
283312 argv . push ( '-Dlibrary=shared_library' )
284313 argv . push ( '-Dvisibility=default' )
285314 argv . push ( '-Dnode_root_dir=' + nodeDir )
0 commit comments