webserver: Prepare libsebserv/webservd for adding unit tests.

Set up static libraries for source files of libwebserv and webservd
so we can add unit tests to them and make sure we have
the test runner executables ready to run the tests.

BUG=brillo:22
TEST=`FEATURES=test emerge-link webserver privetd`

Change-Id: I303352bd81f0322a820fb34e6fe805cd90b38489
Reviewed-on: https://chromium-review.googlesource.com/248833
Trybot-Ready: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/webserver.gyp b/webserver.gyp
index f101abc..17af7f5 100644
--- a/webserver.gyp
+++ b/webserver.gyp
@@ -10,8 +10,8 @@
   },
   'targets': [
     {
-      'target_name': 'libwebserv-<(libbase_ver)',
-      'type': 'shared_library',
+      'target_name': 'libwebserv_common',
+      'type': 'static_library',
       'variables': {
         # Not using dbus_service_config here deliberately in order not to
         # get tied to some constant service name, since it will be
@@ -19,8 +19,15 @@
         'dbus_service_config': '',
         'dbus_adaptors_out_dir': 'include/libwebserv',
       },
+      # This static library is used in libwebserv shared library, which means
+      # we must generate position-independent code for the files comprising
+      # this library. Since this option is disabled by default for targets
+      # other than 'shared_library', turn it on explicitly for this lib.
+      # Turn off the default -fPIE flag (which is set for static_library
+      # in ../common-mk/common.gypi) and replace it with -fPIC.
+      'cflags!': ['-fPIE'],
+      'cflags': ['-fPIC'],
       'includes': [
-        '../common-mk/deps.gypi',
         '../common-mk/generate-dbus-adaptors.gypi'
       ],
       'sources': [
@@ -49,8 +56,8 @@
       ],
     },
     {
-      'target_name': 'webservd',
-      'type': 'executable',
+      'target_name': 'webservd_common',
+      'type': 'static_library',
       'variables': {
         'exported_deps': [
           'libmicrohttpd',
@@ -60,17 +67,18 @@
         'dbus_adaptors_out_dir': 'include/webservd',
         'dbus_service_config': 'webservd/dbus_bindings/dbus-service-config.json',
       },
-      'link_settings': {
-        'libraries': [
-          '-lminijail',
-        ],
+      'all_dependent_settings': {
+        'variables': {
+          'deps': [
+            '<@(exported_deps)',
+          ],
+        },
       },
       'sources': [
         'webservd/dbus_bindings/org.chromium.WebServer.ProtocolHandler.xml',
         'webservd/dbus_bindings/org.chromium.WebServer.Server.xml',
         'webservd/dbus_protocol_handler.cc',
         'webservd/dbus_request_handler.cc',
-        'webservd/main.cc',
         'webservd/protocol_handler.cc',
         'webservd/request.cc',
         'webservd/server.cc',
@@ -95,6 +103,34 @@
         },
       ],
     },
+    {
+      'target_name': 'libwebserv-<(libbase_ver)',
+      'type': 'shared_library',
+      'includes': [
+        '../common-mk/deps.gypi',
+      ],
+      'dependencies': [
+        'libwebserv_common',
+      ],
+      'sources': [
+        'libwebserv/_empty.cc',
+      ],
+    },
+    {
+      'target_name': 'webservd',
+      'type': 'executable',
+      'dependencies': [
+        'webservd_common',
+      ],
+      'link_settings': {
+        'libraries': [
+          '-lminijail',
+        ],
+      },
+      'sources': [
+        'webservd/main.cc',
+      ],
+    },
   ],
   'conditions': [
     ['USE_test == 1', {
@@ -103,13 +139,24 @@
           'target_name': 'libwebserv_testrunner',
           'type': 'executable',
           'dependencies': [
-            'libwebserv-<(libbase_ver)',
+            'libwebserv_common',
           ],
           'includes': ['../common-mk/common_test.gypi'],
           'sources': [
             'libwebserv/libwebserv_testrunner.cc',
           ],
         },
+        {
+          'target_name': 'webservd_testrunner',
+          'type': 'executable',
+          'dependencies': [
+            'webservd_common',
+          ],
+          'includes': ['../common-mk/common_test.gypi'],
+          'sources': [
+            'webservd/webservd_testrunner.cc',
+          ],
+        },
       ],
     }],
   ],