libweave: Build libweave as shared library Added own gyp files of libweave. Added exports of necessary symbols. Added own test runner. CQ-DEPEND=CL:290403 BUG=brillo:1258 TEST='FEATURES=test emerge-gizmo libweave buffet' Change-Id: I2c6c5f3e345b8baeabd9f56be44e91eaeb28bc8b Reviewed-on: https://chromium-review.googlesource.com/290405 Reviewed-by: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp index 400bf44..800737a 100644 --- a/buffet/buffet.gyp +++ b/buffet/buffet.gyp
@@ -2,9 +2,6 @@ 'target_defaults': { 'variables': { 'deps': [ - 'dbus-1', - 'expat', - 'openssl', 'libchrome-<(libbase_ver)', 'libchromeos-<(libbase_ver)', 'system_api', @@ -12,8 +9,6 @@ }, 'include_dirs': [ '.', - # TODO(vitalybuka): Remove both. - '../libweave/include', ], }, 'targets': [ @@ -23,6 +18,18 @@ 'variables': { 'dbus_adaptors_out_dir': 'include/buffet', 'dbus_service_config': 'dbus_bindings/dbus-service-config.json', + 'exported_deps': [ + 'libwebserv-<(libbase_ver)', + 'libweave-<(libbase_ver)', + ], + 'deps': ['<@(exported_deps)'], + }, + 'all_dependent_settings': { + 'variables': { + 'deps': [ + '<@(exported_deps)', + ], + }, }, 'sources': [ 'ap_manager_client.cc', @@ -36,47 +43,6 @@ 'peerd_client.cc', 'shill_client.cc', 'webserv_client.cc', - '../libweave/src/base_api_handler.cc', - '../libweave/src/buffet_config.cc', - '../libweave/src/commands/cloud_command_proxy.cc', - '../libweave/src/commands/command_definition.cc', - '../libweave/src/commands/command_dictionary.cc', - '../libweave/src/commands/command_instance.cc', - '../libweave/src/commands/command_manager.cc', - '../libweave/src/commands/command_queue.cc', - '../libweave/src/commands/object_schema.cc', - '../libweave/src/commands/prop_constraints.cc', - '../libweave/src/commands/prop_types.cc', - '../libweave/src/commands/prop_values.cc', - '../libweave/src/commands/schema_constants.cc', - '../libweave/src/commands/schema_utils.cc', - '../libweave/src/commands/user_role.cc', - '../libweave/src/device_manager.cc', - '../libweave/src/device_registration_info.cc', - '../libweave/src/notification/notification_parser.cc', - '../libweave/src/notification/pull_channel.cc', - '../libweave/src/notification/xml_node.cc', - '../libweave/src/notification/xmpp_channel.cc', - '../libweave/src/notification/xmpp_iq_stanza_handler.cc', - '../libweave/src/notification/xmpp_stream_parser.cc', - '../libweave/src/privet/cloud_delegate.cc', - '../libweave/src/privet/constants.cc', - '../libweave/src/privet/device_delegate.cc', - '../libweave/src/privet/openssl_utils.cc', - '../libweave/src/privet/privet_handler.cc', - '../libweave/src/privet/privet_manager.cc', - '../libweave/src/privet/privet_types.cc', - '../libweave/src/privet/publisher.cc', - '../libweave/src/privet/security_manager.cc', - '../libweave/src/privet/wifi_bootstrap_manager.cc', - '../libweave/src/privet/wifi_ssid_generator.cc', - '../libweave/src/registration_status.cc', - '../libweave/src/states/error_codes.cc', - '../libweave/src/states/state_change_queue.cc', - '../libweave/src/states/state_manager.cc', - '../libweave/src/states/state_package.cc', - '../libweave/src/storage_impls.cc', - '../libweave/src/utils.cc', ], 'includes': ['../common-mk/generate-dbus-adaptors.gypi'], 'actions': [ @@ -143,12 +109,6 @@ 'dependencies': [ 'buffet_common', ], - 'variables': { - 'exported_deps': [ - 'libwebserv-<(libbase_ver)', - ], - 'deps': ['<@(exported_deps)'], - }, 'sources': [ 'main.cc', ], @@ -181,37 +141,14 @@ 'deps': [ 'libchrome-test-<(libbase_ver)', 'libchromeos-test-<(libbase_ver)', + 'libweave-test-<(libbase_ver)', ], }, 'includes': ['../common-mk/common_test.gypi'], 'sources': [ + 'buffet_testrunner.cc', 'dbus_command_proxy_unittest.cc', 'dbus_conversion_unittest.cc', - '../libweave/src/base_api_handler_unittest.cc', - '../libweave/src/buffet_config_unittest.cc', - '../libweave/src/buffet_testrunner.cc', - '../libweave/src/commands/cloud_command_proxy_unittest.cc', - '../libweave/src/commands/command_definition_unittest.cc', - '../libweave/src/commands/command_dictionary_unittest.cc', - '../libweave/src/commands/command_instance_unittest.cc', - '../libweave/src/commands/command_manager_unittest.cc', - '../libweave/src/commands/command_queue_unittest.cc', - '../libweave/src/commands/mock_command.cc', - '../libweave/src/commands/object_schema_unittest.cc', - '../libweave/src/commands/schema_utils_unittest.cc', - '../libweave/src/commands/unittest_utils.cc', - '../libweave/src/device_registration_info_unittest.cc', - '../libweave/src/notification/notification_parser_unittest.cc', - '../libweave/src/notification/xml_node_unittest.cc', - '../libweave/src/notification/xmpp_channel_unittest.cc', - '../libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc', - '../libweave/src/notification/xmpp_stream_parser_unittest.cc', - '../libweave/src/privet/privet_handler_unittest.cc', - '../libweave/src/privet/security_manager_unittest.cc', - '../libweave/src/privet/wifi_ssid_generator_unittest.cc', - '../libweave/src/states/state_change_queue_unittest.cc', - '../libweave/src/states/state_manager_unittest.cc', - '../libweave/src/states/state_package_unittest.cc', ], }, ],
diff --git a/libweave/src/buffet_testrunner.cc b/buffet/buffet_testrunner.cc similarity index 100% rename from libweave/src/buffet_testrunner.cc rename to buffet/buffet_testrunner.cc
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h index 539e429..660fad8 100644 --- a/libweave/include/weave/device.h +++ b/libweave/include/weave/device.h
@@ -13,6 +13,7 @@ #include <weave/cloud.h> #include <weave/commands.h> #include <weave/config.h> +#include <weave/export.h> #include <weave/http_server.h> #include <weave/mdns.h> #include <weave/network.h> @@ -48,7 +49,7 @@ virtual Cloud* GetCloud() = 0; virtual Privet* GetPrivet() = 0; - static std::unique_ptr<Device> Create(); + LIBWEAVE_EXPORT static std::unique_ptr<Device> Create(); }; } // namespace weave
diff --git a/libweave/include/weave/enum_to_string.h b/libweave/include/weave/enum_to_string.h index 647f990..9d2aa59 100644 --- a/libweave/include/weave/enum_to_string.h +++ b/libweave/include/weave/enum_to_string.h
@@ -9,6 +9,8 @@ #include <string> +#include <weave/export.h> + namespace weave { // Helps to map enumeration to stings and back. @@ -30,7 +32,7 @@ const char* const name; }; - EnumToStringMap(); + LIBWEAVE_EXPORT EnumToStringMap(); const Map* begin() const { return begin_; } const Map* end() const { return end_; }
diff --git a/libweave/include/weave/export.h b/libweave/include/weave/export.h new file mode 100644 index 0000000..72220a7 --- /dev/null +++ b/libweave/include/weave/export.h
@@ -0,0 +1,11 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_INCLUDE_WEAVE_EXPORT_H_ +#define LIBWEAVE_INCLUDE_WEAVE_EXPORT_H_ + +#define LIBWEAVE_EXPORT __attribute__((__visibility__("default"))) +#define LIBWEAVE_PRIVATE __attribute__((__visibility__("hidden"))) + +#endif // LIBWEAVE_INCLUDE_WEAVE_EXPORT_H_
diff --git a/libweave/libweave-test.pc.in b/libweave/libweave-test.pc.in new file mode 100644 index 0000000..9f9cdda --- /dev/null +++ b/libweave/libweave-test.pc.in
@@ -0,0 +1,7 @@ +bslot=@BSLOT@ + +Name: libweave-test +Description: Weave test library +Version: ${bslot} +Requires: @PRIVATE_PC@ +Libs: -lweave-test-${bslot}
diff --git a/libweave/libweave.gyp b/libweave/libweave.gyp new file mode 100644 index 0000000..cdc7077 --- /dev/null +++ b/libweave/libweave.gyp
@@ -0,0 +1,133 @@ +{ + 'target_defaults': { + 'variables': { + 'deps': [ + 'expat', + 'libchrome-<(libbase_ver)', + 'libchromeos-<(libbase_ver)', + ], + }, + 'include_dirs': [ + '.', + '../libweave/include', + ], + }, + 'targets': [ + { + 'target_name': 'libweave_common', + 'type': 'static_library', + 'sources': [ + 'src/base_api_handler.cc', + 'src/buffet_config.cc', + 'src/commands/cloud_command_proxy.cc', + 'src/commands/command_definition.cc', + 'src/commands/command_dictionary.cc', + 'src/commands/command_instance.cc', + 'src/commands/command_manager.cc', + 'src/commands/command_queue.cc', + 'src/commands/object_schema.cc', + 'src/commands/prop_constraints.cc', + 'src/commands/prop_types.cc', + 'src/commands/prop_values.cc', + 'src/commands/schema_constants.cc', + 'src/commands/schema_utils.cc', + 'src/commands/user_role.cc', + 'src/device_manager.cc', + 'src/device_registration_info.cc', + 'src/notification/notification_parser.cc', + 'src/notification/pull_channel.cc', + 'src/notification/xml_node.cc', + 'src/notification/xmpp_channel.cc', + 'src/notification/xmpp_iq_stanza_handler.cc', + 'src/notification/xmpp_stream_parser.cc', + 'src/privet/cloud_delegate.cc', + 'src/privet/constants.cc', + 'src/privet/device_delegate.cc', + 'src/privet/openssl_utils.cc', + 'src/privet/privet_handler.cc', + 'src/privet/privet_manager.cc', + 'src/privet/privet_types.cc', + 'src/privet/publisher.cc', + 'src/privet/security_manager.cc', + 'src/privet/wifi_bootstrap_manager.cc', + 'src/privet/wifi_ssid_generator.cc', + 'src/registration_status.cc', + 'src/states/error_codes.cc', + 'src/states/state_change_queue.cc', + 'src/states/state_manager.cc', + 'src/states/state_package.cc', + 'src/storage_impls.cc', + 'src/utils.cc', + ], + }, + { + 'target_name': 'libweave-<(libbase_ver)', + 'type': 'shared_library', + 'includes': [ + '../common-mk/deps.gypi', + ], + 'dependencies': [ + 'libweave_common', + ], + 'sources': [ + 'src/empty.cc', + ], + }, + { + 'target_name': 'libweave-test-<(libbase_ver)', + 'type': 'static_library', + 'standalone_static_library': 1, + 'sources': [ + 'src/commands/mock_command.cc', + 'src/commands/unittest_utils.cc', + ], + 'includes': ['../common-mk/deps.gypi'], + }, + ], + 'conditions': [ + ['USE_test == 1', { + 'targets': [ + { + 'target_name': 'libweave_testrunner', + 'type': 'executable', + 'variables': { + 'deps': [ + 'libchrome-test-<(libbase_ver)', + 'libchromeos-test-<(libbase_ver)', + ], + }, + 'dependencies': [ + 'libweave_common', + 'libweave-test-<(libbase_ver)', + ], + 'includes': ['../common-mk/common_test.gypi'], + 'sources': [ + 'src/base_api_handler_unittest.cc', + 'src/buffet_config_unittest.cc', + 'src/commands/cloud_command_proxy_unittest.cc', + 'src/commands/command_definition_unittest.cc', + 'src/commands/command_dictionary_unittest.cc', + 'src/commands/command_instance_unittest.cc', + 'src/commands/command_manager_unittest.cc', + 'src/commands/command_queue_unittest.cc', + 'src/commands/object_schema_unittest.cc', + 'src/commands/schema_utils_unittest.cc', + 'src/device_registration_info_unittest.cc', + 'src/notification/notification_parser_unittest.cc', + 'src/notification/xml_node_unittest.cc', + 'src/notification/xmpp_channel_unittest.cc', + 'src/notification/xmpp_iq_stanza_handler_unittest.cc', + 'src/notification/xmpp_stream_parser_unittest.cc', + 'src/privet/privet_handler_unittest.cc', + 'src/privet/security_manager_unittest.cc', + 'src/privet/wifi_ssid_generator_unittest.cc', + 'src/states/state_change_queue_unittest.cc', + 'src/states/state_manager_unittest.cc', + 'src/states/state_package_unittest.cc', + 'src/weave_testrunner.cc', + ], + }, + ], + }], + ], +}
diff --git a/libweave/libweave.pc.in b/libweave/libweave.pc.in new file mode 100644 index 0000000..2257380 --- /dev/null +++ b/libweave/libweave.pc.in
@@ -0,0 +1,7 @@ +bslot=@BSLOT@ + +Name: libweave +Description: Weave device library +Version: ${bslot} +Requires.private: @PRIVATE_PC@ +Libs: -lweave-${bslot}
diff --git a/libweave/platform2_preinstall.sh b/libweave/platform2_preinstall.sh new file mode 100755 index 0000000..dfd19c9 --- /dev/null +++ b/libweave/platform2_preinstall.sh
@@ -0,0 +1,22 @@ +#!/bin/bash +# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +set -e + +OUT=$1 +v=$2 + +deps=$(<"${OUT}"/gen/libweave-${v}-deps.txt) +sed \ + -e "s/@BSLOT@/${v}/g" \ + -e "s/@PRIVATE_PC@/${deps}/g" \ + "libweave.pc.in" > "${OUT}/lib/libweave-${v}.pc" + + +deps_test=$(<"${OUT}"/gen/libweave-test-${v}-deps.txt) +sed \ + -e "s/@BSLOT@/${v}/g" \ + -e "s/@PRIVATE_PC@/${deps_test}/g" \ + "libweave-test.pc.in" > "${OUT}/lib/libweave-test-${v}.pc"
diff --git a/libweave/src/empty.cc b/libweave/src/empty.cc new file mode 100644 index 0000000..1ad31f8 --- /dev/null +++ b/libweave/src/empty.cc
@@ -0,0 +1,7 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is left empty deliberately to work around some dependency +// generation in GYP. In GYP for custom actions to run properly, the 'sources' +// section must contain at least one recognizable source file.
diff --git a/libweave/src/weave_testrunner.cc b/libweave/src/weave_testrunner.cc new file mode 100644 index 0000000..f050805 --- /dev/null +++ b/libweave/src/weave_testrunner.cc
@@ -0,0 +1,12 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <base/at_exit.h> +#include <gtest/gtest.h> + +int main(int argc, char** argv) { + base::AtExitManager exit_manager; + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}