The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.

Please select the desired protocol below to get the URL.

This URL has Read-Only access.

Statistics
| Branch: | Revision:

main_repo / configure @ 52e47b24

History | View | Annotate | Download (20 KB)

1
#!/usr/bin/env python
2
import optparse
3
import os
4
import pprint
5
import re
6
import shlex
7
import subprocess
8
import sys
9

    
10
CC = os.environ.get('CC', 'cc')
11

    
12
root_dir = os.path.dirname(__file__)
13
sys.path.insert(0, os.path.join(root_dir, 'tools', 'gyp', 'pylib'))
14
from gyp.common import GetFlavor
15

    
16
# parse our options
17
parser = optparse.OptionParser()
18

    
19
# Options should be in alphabetical order but keep --prefix at the top,
20
# that's arguably the one people will be looking for most.
21
parser.add_option('--prefix',
22
    action='store',
23
    dest='prefix',
24
    help='select the install prefix (defaults to /usr/local)')
25

    
26
parser.add_option('--debug',
27
    action='store_true',
28
    dest='debug',
29
    help='also build debug build')
30

    
31
parser.add_option('--dest-cpu',
32
    action='store',
33
    dest='dest_cpu',
34
    help='CPU architecture to build for. Valid values are: arm, ia32, x64')
35

    
36
parser.add_option('--dest-os',
37
    action='store',
38
    dest='dest_os',
39
    help='operating system to build for. Valid values are: '
40
         'win, mac, solaris, freebsd, openbsd, linux, android')
41

    
42
parser.add_option('--gdb',
43
    action='store_true',
44
    dest='gdb',
45
    help='add gdb support')
46

    
47
parser.add_option('--ninja',
48
    action='store_true',
49
    dest='use_ninja',
50
    help='generate files for the ninja build system')
51

    
52
parser.add_option('--no-ifaddrs',
53
    action='store_true',
54
    dest='no_ifaddrs',
55
    help='use on deprecated SunOS systems that do not support ifaddrs.h')
56

    
57
parser.add_option('--no-ssl2',
58
    action='store_true',
59
    dest='no_ssl2',
60
    help='disable OpenSSL v2')
61

    
62
# deprecated
63
parser.add_option('--openssl-includes',
64
    action='store',
65
    dest='shared_openssl_includes',
66
    help=optparse.SUPPRESS_HELP)
67

    
68
# deprecated
69
parser.add_option('--openssl-libpath',
70
    action='store',
71
    dest='shared_openssl_libpath',
72
    help=optparse.SUPPRESS_HELP)
73

    
74
# deprecated
75
parser.add_option('--openssl-use-sys',
76
    action='store_true',
77
    dest='shared_openssl',
78
    help=optparse.SUPPRESS_HELP)
79

    
80
parser.add_option('--shared-cares',
81
    action='store_true',
82
    dest='shared_cares',
83
    help='link to a shared cares DLL instead of static linking')
84

    
85
parser.add_option('--shared-cares-includes',
86
    action='store',
87
    dest='shared_cares_includes',
88
    help='directory containing cares header files')
89

    
90
parser.add_option('--shared-cares-libname',
91
    action='store',
92
    dest='shared_cares_libname',
93
    help='alternative lib name to link to (default: \'cares\')')
94

    
95
parser.add_option('--shared-cares-libpath',
96
    action='store',
97
    dest='shared_cares_libpath',
98
    help='a directory to search for the shared cares DLL')
99

    
100
parser.add_option('--shared-http-parser',
101
    action='store_true',
102
    dest='shared_http_parser',
103
    help='link to a shared http_parser DLL instead of static linking')
104

    
105
parser.add_option('--shared-http-parser-includes',
106
    action='store',
107
    dest='shared_http_parser_includes',
108
    help='directory containing http_parser header files')
109

    
110
parser.add_option('--shared-http-parser-libname',
111
    action='store',
112
    dest='shared_http_parser_libname',
113
    help='alternative lib name to link to (default: \'http_parser\')')
114

    
115
parser.add_option('--shared-http-parser-libpath',
116
    action='store',
117
    dest='shared_http_parser_libpath',
118
    help='a directory to search for the shared http_parser DLL')
119

    
120
parser.add_option('--shared-libuv',
121
    action='store_true',
122
    dest='shared_libuv',
123
    help='link to a shared libuv DLL instead of static linking')
124

    
125
parser.add_option('--shared-libuv-includes',
126
    action='store',
127
    dest='shared_libuv_includes',
128
    help='directory containing libuv header files')
129

    
130
parser.add_option('--shared-libuv-libname',
131
    action='store',
132
    dest='shared_libuv_libname',
133
    help='alternative lib name to link to (default: \'uv\')')
134

    
135
parser.add_option('--shared-libuv-libpath',
136
    action='store',
137
    dest='shared_libuv_libpath',
138
    help='a directory to search for the shared libuv DLL')
139

    
140
parser.add_option('--shared-openssl',
141
    action='store_true',
142
    dest='shared_openssl',
143
    help='link to a shared OpenSSl DLL instead of static linking')
144

    
145
parser.add_option('--shared-openssl-includes',
146
    action='store',
147
    dest='shared_openssl_includes',
148
    help='directory containing OpenSSL header files')
149

    
150
parser.add_option('--shared-openssl-libname',
151
    action='store',
152
    dest='shared_openssl_libname',
153
    help='alternative lib name to link to (default: \'crypto,ssl\')')
154

    
155
parser.add_option('--shared-openssl-libpath',
156
    action='store',
157
    dest='shared_openssl_libpath',
158
    help='a directory to search for the shared OpenSSL DLLs')
159

    
160
parser.add_option('--shared-v8',
161
    action='store_true',
162
    dest='shared_v8',
163
    help='link to a shared V8 DLL instead of static linking')
164

    
165
parser.add_option('--shared-v8-includes',
166
    action='store',
167
    dest='shared_v8_includes',
168
    help='directory containing V8 header files')
169

    
170
parser.add_option('--shared-v8-libname',
171
    action='store',
172
    dest='shared_v8_libname',
173
    help='alternative lib name to link to (default: \'v8\')')
174

    
175
parser.add_option('--shared-v8-libpath',
176
    action='store',
177
    dest='shared_v8_libpath',
178
    help='a directory to search for the shared V8 DLL')
179

    
180
parser.add_option('--shared-zlib',
181
    action='store_true',
182
    dest='shared_zlib',
183
    help='link to a shared zlib DLL instead of static linking')
184

    
185
parser.add_option('--shared-zlib-includes',
186
    action='store',
187
    dest='shared_zlib_includes',
188
    help='directory containing zlib header files')
189

    
190
parser.add_option('--shared-zlib-libname',
191
    action='store',
192
    dest='shared_zlib_libname',
193
    help='alternative lib name to link to (default: \'z\')')
194

    
195
parser.add_option('--shared-zlib-libpath',
196
    action='store',
197
    dest='shared_zlib_libpath',
198
    help='a directory to search for the shared zlib DLL')
199

    
200
# TODO document when we've decided on what the tracing API and its options will
201
# look like
202
parser.add_option('--systemtap-includes',
203
    action='store',
204
    dest='systemtap_includes',
205
    help=optparse.SUPPRESS_HELP)
206

    
207
parser.add_option('--tag',
208
    action='store',
209
    dest='tag',
210
    help='custom build tag')
211

    
212
parser.add_option('--with-arm-float-abi',
213
    action='store',
214
    dest='arm_float_abi',
215
    help='specifies which floating-point ABI to use. Valid values are: '
216
         'soft, softfp, hard')
217

    
218
parser.add_option('--with-dtrace',
219
    action='store_true',
220
    dest='with_dtrace',
221
    help='build with DTrace (default is true on sunos)')
222

    
223
parser.add_option('--with-etw',
224
    action='store_true',
225
    dest='with_etw',
226
    help='build with ETW (default is true on Windows)')
227

    
228
parser.add_option('--with-perfctr',
229
    action='store_true',
230
    dest='with_perfctr',
231
    help='build with performance counters (default is true on Windows)')
232

    
233
parser.add_option('--without-dtrace',
234
    action='store_true',
235
    dest='without_dtrace',
236
    help='build without DTrace')
237

    
238
parser.add_option('--without-etw',
239
    action='store_true',
240
    dest='without_etw',
241
    help='build without ETW')
242

    
243
parser.add_option('--without-npm',
244
    action='store_true',
245
    dest='without_npm',
246
    help='don\'t install the bundled npm package manager')
247

    
248
parser.add_option('--without-perfctr',
249
    action='store_true',
250
    dest='without_perfctr',
251
    help='build without performance counters')
252

    
253
parser.add_option('--without-snapshot',
254
    action='store_true',
255
    dest='without_snapshot',
256
    help='build without snapshotting V8 libraries. You might want to set'
257
         ' this for cross-compiling. [Default: False]')
258

    
259
parser.add_option('--without-ssl',
260
    action='store_true',
261
    dest='without_ssl',
262
    help='build without SSL')
263

    
264
parser.add_option('--xcode',
265
    action='store_true',
266
    dest='use_xcode',
267
    help='generate build files for use with xcode')
268

    
269
(options, args) = parser.parse_args()
270

    
271

    
272
def b(value):
273
  """Returns the string 'true' if value is truthy, 'false' otherwise."""
274
  if value:
275
    return 'true'
276
  else:
277
    return 'false'
278

    
279

    
280
def pkg_config(pkg):
281
  cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
282
  libs = cmd.readline().strip()
283
  ret = cmd.close()
284
  if (ret): return None
285

    
286
  cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
287
  cflags = cmd.readline().strip()
288
  ret = cmd.close()
289
  if (ret): return None
290

    
291
  return (libs, cflags)
292

    
293

    
294
def cc_macros():
295
  """Checks predefined macros using the CC command."""
296

    
297
  try:
298
    p = subprocess.Popen(shlex.split(CC) + ['-dM', '-E', '-'],
299
                         stdin=subprocess.PIPE,
300
                         stdout=subprocess.PIPE,
301
                         stderr=subprocess.PIPE)
302
  except OSError:
303
    print '''Node.js configure error: No acceptable C compiler found!
304

    
305
        Please make sure you have a C compiler installed on your system and/or
306
        consider adjusting the CC environment variable if you installed
307
        it in a non-standard prefix.
308
        '''
309
    sys.exit()
310

    
311
  p.stdin.write('\n')
312
  out = p.communicate()[0]
313

    
314
  out = str(out).split('\n')
315

    
316
  k = {}
317
  for line in out:
318
    lst = shlex.split(line)
319
    if len(lst) > 2:
320
      key = lst[1]
321
      val = lst[2]
322
      k[key] = val
323
  return k
324

    
325

    
326
def is_arch_armv7():
327
  """Check for ARMv7 instructions"""
328
  cc_macros_cache = cc_macros()
329
  return ('__ARM_ARCH_7__' in cc_macros_cache or
330
          '__ARM_ARCH_7A__' in cc_macros_cache or
331
          '__ARM_ARCH_7R__' in cc_macros_cache or
332
          '__ARM_ARCH_7M__' in cc_macros_cache)
333

    
334

    
335
def is_arm_neon():
336
  """Check for ARM NEON support"""
337
  return '__ARM_NEON__' in cc_macros()
338

    
339

    
340
def is_arm_hard_float_abi():
341
  """Check for hardfloat or softfloat eabi on ARM"""
342
  # GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
343
  # the Floating Point ABI used (PCS stands for Procedure Call Standard).
344
  # We use these as well as a couple of other defines to statically determine
345
  # what FP ABI used.
346
  # GCC versions 4.4 and below don't support hard-fp.
347
  # GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
348
  # __ARM_PCS_VFP.
349

    
350
  if compiler_version() >= (4, 6, 0):
351
    return '__ARM_PCS_VFP' in cc_macros()
352
  elif compiler_version() < (4, 5, 0):
353
    return False
354
  elif '__ARM_PCS_VFP' in cc_macros():
355
    return True
356
  elif ('__ARM_PCS' in cc_macros() or
357
        '__SOFTFP' in cc_macros() or
358
        not '__VFP_FP__' in cc_macros()):
359
    return False
360
  else:
361
    print '''Node.js configure error: Your version of GCC does not report
362
      the Floating-Point ABI to compile for your hardware
363

    
364
      Please manually specify which floating-point ABI to use with the
365
      --with-arm-float-abi option.
366
      '''
367
    sys.exit()
368

    
369

    
370
def host_arch_cc():
371
  """Host architecture check using the CC command."""
372

    
373
  k = cc_macros()
374

    
375
  matchup = {
376
    '__x86_64__'  : 'x64',
377
    '__i386__'    : 'ia32',
378
    '__arm__'     : 'arm',
379
    '__mips__'    : 'mips',
380
  }
381

    
382
  rtn = 'ia32' # default
383

    
384
  for i in matchup:
385
    if i in k and k[i] != '0':
386
      rtn = matchup[i]
387
      break
388

    
389
  return rtn
390

    
391

    
392
def host_arch_win():
393
  """Host architecture check using environ vars (better way to do this?)"""
394

    
395
  arch = os.environ.get('PROCESSOR_ARCHITECTURE', 'x86')
396

    
397
  matchup = {
398
    'AMD64'  : 'x64',
399
    'x86'    : 'ia32',
400
    'arm'    : 'arm',
401
    'mips'   : 'mips',
402
  }
403

    
404
  return matchup.get(arch, 'ia32')
405

    
406

    
407
def compiler_version():
408
  try:
409
    proc = subprocess.Popen(shlex.split(CC) + ['--version'], stdout=subprocess.PIPE)
410
  except WindowsError:
411
    return (0, False)
412

    
413
  is_clang = 'clang' in proc.communicate()[0].split('\n')[0]
414

    
415
  proc = subprocess.Popen(shlex.split(CC) + ['-dumpversion'], stdout=subprocess.PIPE)
416
  version = tuple(map(int, proc.communicate()[0].split('.')))
417

    
418
  return (version, is_clang)
419

    
420

    
421
def configure_arm(o):
422
  if options.arm_float_abi:
423
    arm_float_abi = options.arm_float_abi
424
  else:
425
    arm_float_abi = 'hard' if is_arm_hard_float_abi() else 'default'
426
  o['variables']['armv7'] = int(is_arch_armv7())
427
  o['variables']['arm_fpu'] = 'vfpv3'  # V8 3.18 no longer supports VFP2.
428
  o['variables']['arm_neon'] = int(is_arm_neon())
429
  o['variables']['arm_thumb'] = 0      # -marm
430
  o['variables']['arm_float_abi'] = arm_float_abi
431

    
432

    
433
def configure_node(o):
434
  if options.dest_os == 'android':
435
    o['variables']['OS'] = "android"
436
  o['variables']['v8_enable_gdbjit'] = 1 if options.gdb else 0
437
  o['variables']['v8_no_strict_aliasing'] = 1 # work around compiler bugs
438
  o['variables']['node_prefix'] = os.path.expanduser(options.prefix or '')
439
  o['variables']['node_install_npm'] = b(not options.without_npm)
440
  o['default_configuration'] = 'Debug' if options.debug else 'Release'
441

    
442
  host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc()
443
  target_arch = options.dest_cpu or host_arch
444
  o['variables']['host_arch'] = host_arch
445
  o['variables']['target_arch'] = target_arch
446

    
447
  if target_arch == 'arm':
448
    configure_arm(o)
449

    
450
  cc_version, is_clang = compiler_version()
451
  o['variables']['clang'] = 1 if is_clang else 0
452

    
453
  if not is_clang and cc_version != 0:
454
    o['variables']['gcc_version'] = 10 * cc_version[0] + cc_version[1]
455

    
456
  # clang has always supported -fvisibility=hidden, right?
457
  if not is_clang and cc_version < (4,0,0):
458
    o['variables']['visibility'] = ''
459

    
460
  # By default, enable DTrace on SunOS systems. Don't allow it on other
461
  # systems, since it won't work.  (The MacOS build process is different than
462
  # SunOS, and we haven't implemented it.)
463
  if flavor in ('solaris', 'mac'):
464
    o['variables']['node_use_dtrace'] = b(not options.without_dtrace)
465
    o['variables']['uv_use_dtrace'] = o['variables']['node_use_dtrace']
466
    o['variables']['uv_parent_path'] = '/deps/uv/'
467
  elif flavor == 'linux':
468
    o['variables']['node_use_dtrace'] = 'false'
469
    o['variables']['node_use_systemtap'] = b(options.with_dtrace)
470
    if options.systemtap_includes:
471
      o['include_dirs'] += [options.systemtap_includes]
472
  elif options.with_dtrace:
473
    raise Exception(
474
       'DTrace is currently only supported on SunOS, MacOS or Linux systems.')
475
  else:
476
    o['variables']['node_use_dtrace'] = 'false'
477
    o['variables']['node_use_systemtap'] = 'false'
478

    
479
  # if we're on illumos based systems wrap the helper library into the
480
  # executable
481
  if flavor == 'solaris':
482
    o['variables']['node_use_mdb'] = 'true'
483
  else:
484
    o['variables']['node_use_mdb'] = 'false'
485

    
486
  if options.no_ifaddrs:
487
    o['defines'] += ['SUNOS_NO_IFADDRS']
488

    
489
  # By default, enable ETW on Windows.
490
  if flavor == 'win':
491
    o['variables']['node_use_etw'] = b(not options.without_etw);
492
  elif options.with_etw:
493
    raise Exception('ETW is only supported on Windows.')
494
  else:
495
    o['variables']['node_use_etw'] = 'false'
496

    
497
  # By default, enable Performance counters on Windows.
498
  if flavor == 'win':
499
    o['variables']['node_use_perfctr'] = b(not options.without_perfctr);
500
  elif options.with_perfctr:
501
    raise Exception('Performance counter is only supported on Windows.')
502
  else:
503
    o['variables']['node_use_perfctr'] = 'false'
504

    
505
  if options.tag:
506
    o['variables']['node_tag'] = '-' + options.tag
507
  else:
508
    o['variables']['node_tag'] = ''
509

    
510

    
511
def configure_libz(o):
512
  o['variables']['node_shared_zlib'] = b(options.shared_zlib)
513

    
514
  # assume shared_zlib if one of these is set?
515
  if options.shared_zlib_libpath:
516
    o['libraries'] += ['-L%s' % options.shared_zlib_libpath]
517
  if options.shared_zlib_libname:
518
    o['libraries'] += ['-l%s' % options.shared_zlib_libname]
519
  elif options.shared_zlib:
520
    o['libraries'] += ['-lz']
521
  if options.shared_zlib_includes:
522
    o['include_dirs'] += [options.shared_zlib_includes]
523

    
524

    
525
def configure_http_parser(o):
526
    o['variables']['node_shared_http_parser'] = b(options.shared_http_parser)
527

    
528
    # assume shared http_parser if one of these is set?
529
    if options.shared_http_parser_libpath:
530
        o['libraries'] += ['-L%s' % options.shared_http_parser_libpath]
531
    if options.shared_http_parser_libname:
532
        o['libraries'] += ['-l%s' % options.shared_http_parser_libname]
533
    elif options.shared_http_parser:
534
        o['libraries'] += ['-lhttp_parser']
535
    if options.shared_http_parser_includes:
536
        o['include_dirs'] += [options.shared_http_parser_includes]
537

    
538

    
539
def configure_cares(o):
540
    o['variables']['node_shared_cares'] = b(options.shared_cares)
541

    
542
    # assume shared cares if one of these is set?
543
    if options.shared_cares_libpath:
544
        o['libraries'] += ['-L%s' % options.shared_cares_libpath]
545
    if options.shared_cares_libname:
546
        o['libraries'] += ['-l%s' % options.shared_cares_libname]
547
    elif options.shared_cares:
548
        o['libraries'] += ['-lcares']
549
    if options.shared_cares_includes:
550
        o['include_dirs'] += [options.shared_cares_includes]
551

    
552

    
553
def configure_libuv(o):
554
  o['variables']['node_shared_libuv'] = b(options.shared_libuv)
555

    
556
  # assume shared libuv if one of these is set?
557
  if options.shared_libuv_libpath:
558
    o['libraries'] += ['-L%s' % options.shared_libuv_libpath]
559
  if options.shared_libuv_libname:
560
    o['libraries'] += ['-l%s' % options.shared_libuv_libname]
561
  elif options.shared_libuv:
562
    o['libraries'] += ['-luv']
563
  if options.shared_libuv_includes:
564
    o['include_dirs'] += [options.shared_libuv_includes]
565

    
566

    
567
def configure_v8(o):
568
  o['variables']['v8_use_snapshot'] = b(not options.without_snapshot)
569
  o['variables']['node_shared_v8'] = b(options.shared_v8)
570

    
571
  # assume shared_v8 if one of these is set?
572
  if options.shared_v8_libpath:
573
    o['libraries'] += ['-L%s' % options.shared_v8_libpath]
574
  if options.shared_v8_libname:
575
    o['libraries'] += ['-l%s' % options.shared_v8_libname]
576
  elif options.shared_v8:
577
    o['libraries'] += ['-lv8']
578
  if options.shared_v8_includes:
579
    o['include_dirs'] += [options.shared_v8_includes]
580

    
581

    
582
def configure_openssl(o):
583
  o['variables']['node_use_openssl'] = b(not options.without_ssl)
584
  o['variables']['node_shared_openssl'] = b(options.shared_openssl)
585

    
586
  if options.without_ssl:
587
    return
588

    
589
  if options.no_ssl2:
590
    o['defines'] += ['OPENSSL_NO_SSL2=1']
591

    
592
  if options.shared_openssl:
593
    (libs, cflags) = pkg_config('openssl') or ('-lssl -lcrypto', '')
594

    
595
    if options.shared_openssl_libpath:
596
      o['libraries'] += ['-L%s' % options.shared_openssl_libpath]
597

    
598
    if options.shared_openssl_libname:
599
      libnames = options.shared_openssl_libname.split(',')
600
      o['libraries'] += ['-l%s' % s for s in libnames]
601
    else:
602
      o['libraries'] += libs.split()
603

    
604
    if options.shared_openssl_includes:
605
      o['include_dirs'] += [options.shared_openssl_includes]
606
    else:
607
      o['cflags'] += cflags.split()
608

    
609

    
610
def configure_winsdk(o):
611
  if flavor != 'win':
612
    return
613

    
614
  winsdk_dir = os.environ.get("WindowsSdkDir")
615

    
616
  if winsdk_dir and os.path.isfile(winsdk_dir + '\\bin\\ctrpp.exe'):
617
    print "Found ctrpp in WinSDK--will build generated files into tools/msvs/genfiles."
618
    o['variables']['node_has_winsdk'] = 'true'
619
    return
620

    
621
  print "ctrpp not found in WinSDK path--using pre-gen files from tools/msvs/genfiles."
622

    
623

    
624
# determine the "flavor" (operating system) we're building for,
625
# leveraging gyp's GetFlavor function
626
flavor_params = {};
627
if (options.dest_os):
628
  flavor_params['flavor'] = options.dest_os;
629
flavor = GetFlavor(flavor_params);
630

    
631
output = {
632
  'variables': { 'python': sys.executable },
633
  'include_dirs': [],
634
  'libraries': [],
635
  'defines': [],
636
  'cflags': [],
637
}
638

    
639
configure_node(output)
640
configure_libz(output)
641
configure_http_parser(output)
642
configure_cares(output)
643
configure_libuv(output)
644
configure_v8(output)
645
configure_openssl(output)
646
configure_winsdk(output)
647

    
648

    
649
# variables should be a root level element,
650
# move everything else to target_defaults
651
variables = output['variables']
652
del output['variables']
653
output = {
654
  'variables': variables,
655
  'target_defaults': output
656
}
657
pprint.pprint(output, indent=2)
658

    
659
def write(filename, data):
660
  filename = os.path.join(root_dir, filename)
661
  print "creating ", filename
662
  f = open(filename, 'w+')
663
  f.write(data)
664

    
665
write('config.gypi', "# Do not edit. Generated by the configure script.\n" +
666
  pprint.pformat(output, indent=2) + "\n")
667

    
668
config = {
669
  'BUILDTYPE': 'Debug' if options.debug else 'Release',
670
  'USE_NINJA': str(int(options.use_ninja or 0)),
671
  'USE_XCODE': str(int(options.use_xcode or 0)),
672
  'PYTHON': sys.executable,
673
}
674

    
675
if options.prefix:
676
  config['PREFIX'] = options.prefix
677

    
678
config = '\n'.join(map('='.join, config.iteritems())) + '\n'
679

    
680
write('config.mk',
681
      '# Do not edit. Generated by the configure script.\n' + config)
682

    
683
if options.use_ninja:
684
  gyp_args = ['-f', 'ninja-' + flavor]
685
elif options.use_xcode:
686
  gyp_args = ['-f', 'xcode']
687
elif flavor == 'win':
688
  gyp_args = ['-f', 'msvs', '-G', 'msvs_version=auto']
689
else:
690
  gyp_args = ['-f', 'make-' + flavor]
691

    
692
subprocess.call([sys.executable, 'tools/gyp_node'] + gyp_args)