build: Add option to compile for coverage reports

Add --coverage option to configure to support
compiling for generation of C based coverage reports

PR-URL: https://github.com/nodejs/node/pull/9463
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
diff --git a/configure b/configure
index 02e6296..af46f13 100755
--- a/configure
+++ b/configure
@@ -59,6 +59,11 @@
     default='/usr/local',
     help='select the install prefix [default: %default]')
 
+parser.add_option('--coverage',
+    action='store_true',
+    dest='coverage',
+    help='Build node with code coverage enabled')
+
 parser.add_option('--debug',
     action='store_true',
     dest='debug',
@@ -857,6 +862,11 @@
   if options.use_xcode and options.use_ninja:
     raise Exception('--xcode and --ninja cannot be used together.')
 
+  if options.coverage:
+    o['variables']['coverage'] = 'true'
+  else:
+    o['variables']['coverage'] = 'false'
+
 def configure_library(lib, output):
   shared_lib = 'shared_' + lib
   output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib))
diff --git a/node.gyp b/node.gyp
index bfdbf92..2254a6e 100644
--- a/node.gyp
+++ b/node.gyp
@@ -549,11 +549,22 @@
             'NODE_PLATFORM="sunos"',
           ],
         }],
-        [ '(OS=="freebsd" or OS=="linux") and node_shared=="false"', {
+        [ '(OS=="freebsd" or OS=="linux") and node_shared=="false" and coverage=="false"', {
           'ldflags': [ '-Wl,-z,noexecstack',
                        '-Wl,--whole-archive <(V8_BASE)',
                        '-Wl,--no-whole-archive' ]
         }],
+        [ '(OS=="freebsd" or OS=="linux") and node_shared=="false" and coverage=="true"', {
+          'ldflags': [ '-Wl,-z,noexecstack',
+                       '-Wl,--whole-archive <(V8_BASE)',
+                       '-Wl,--no-whole-archive',
+                       '--coverage',
+                       '-g',
+                       '-O0' ],
+           'cflags': [ '--coverage',
+                       '-g',
+                       '-O0' ]
+        }],
         [ 'OS=="sunos"', {
           'ldflags': [ '-Wl,-M,/usr/lib/ld/map.noexstk' ],
         }],