diff --git a/CMakeLists.txt b/CMakeLists.txt index 88f3c2a..187a12b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,6 +87,7 @@ set(GOOGLEAPIS_CPP_PROTO_FILES "google/cloud/bigquery/v2/model.proto" "google/cloud/bigquery/v2/model_reference.proto" "google/cloud/bigquery/v2/standard_sql.proto" + "google/pubsub/v1/pubsub.proto" "google/spanner/admin/database/v1/spanner_database_admin.proto" "google/spanner/admin/instance/v1/spanner_instance_admin.proto" "google/spanner/v1/keys.proto" @@ -281,6 +282,18 @@ target_link_libraries(googleapis_cpp_bigtable_protos googleapis-c++::iam_v1_iam_policy_protos PRIVATE googleapis_cpp_common_flags) +google_cloud_cpp_grpcpp_library( + googleapis_cpp_pubsub_protos + "${GOOGLEAPIS_CPP_SOURCE}/google/pubsub/v1/pubsub.proto" + PROTO_PATH_DIRECTORIES + "${GOOGLEAPIS_CPP_SOURCE}" + "${PROTO_INCLUDE_DIR}") +googleapis_cpp_set_version_and_alias(pubsub_protos) +target_link_libraries(googleapis_cpp_pubsub_protos + PUBLIC googleapis-c++::api_annotations_protos + googleapis-c++::api_client_protos + PRIVATE googleapis_cpp_common_flags) + google_cloud_cpp_grpcpp_library( googleapis_cpp_spanner_protos "${GOOGLEAPIS_CPP_SOURCE}/google/spanner/admin/database/v1/spanner_database_admin.proto" @@ -310,6 +323,7 @@ include(GNUInstallDirs) set(googleapis_cpp_installed_libraries_list googleapis_cpp_bigtable_protos googleapis_cpp_cloud_bigquery_protos + googleapis_cpp_pubsub_protos googleapis_cpp_spanner_protos googleapis_cpp_longrunning_operations_protos googleapis_cpp_api_http_protos diff --git a/ci/kokoro/install/Dockerfile.fedora-30-shared b/ci/kokoro/install/Dockerfile.fedora-30-shared index 3a0accf..572018f 100644 --- a/ci/kokoro/install/Dockerfile.fedora-30-shared +++ b/ci/kokoro/install/Dockerfile.fedora-30-shared @@ -50,6 +50,10 @@ RUN cmake -H. -Bcmake-out -DBUILD_SHARED_LIBS=yes RUN cmake --build cmake-out -- -j $(nproc) WORKDIR /home/build/cpp-cmakefiles/cmake-out RUN cmake --build . --target install +# The share libraries will install in `/usr/local/lib64` we need that directory +# in the ld.so cache: +RUN echo "/usr/local/lib64" | tee /etc/ld.so.conf.d/local.conf +RUN ldconfig # ``` ## [END INSTALL.md] diff --git a/ci/test-install/compile-test-projects.sh b/ci/test-install/compile-test-projects.sh index d5398f1..25eea82 100755 --- a/ci/test-install/compile-test-projects.sh +++ b/ci/test-install/compile-test-projects.sh @@ -21,32 +21,27 @@ set -eu # Verify the installed CMake config and pkgconfig files are actually usable. -# For Bigtable protos -cp -R /home/build/cpp-cmakefiles/ci/test-install/bigtable \ - /home/build/test-install-bigtable -cd /home/build/test-install-bigtable -cmake -H. -Bcmake-out -cmake --build cmake-out -- -j "$(nproc)" -cmake-out/utilize-googleapis -env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig \ - make - -# For BigQuery protos -cp -R /home/build/cpp-cmakefiles/ci/test-install/bigquery \ - /home/build/test-install-bigquery -cd /home/build/test-install-bigquery -cmake -H. -Bcmake-out -cmake --build cmake-out -- -j "$(nproc)" -cmake-out/utilize-googleapis -env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig \ - make - -# For spanner protos -cp -R /home/build/cpp-cmakefiles/ci/test-install/spanner \ - /home/build/test-install-spanner -cd /home/build/test-install-spanner -cmake -H. -Bcmake-out -cmake --build cmake-out -- -j "$(nproc)" -cmake-out/utilize-googleapis -env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig \ - make +for subdir in bigquery bigtable pubsub spanner; do + # Compile a test program using CMake. + echo "================================================================" + echo "Testing ${subdir} $(date) with CMake" + echo "================================================================" + src_dir="/home/build/cpp-cmakefiles/ci/test-install/${subdir}" + cmake_dir="/home/build/test-cmake-${subdir}" + make_dir="/home/build/test-make-${subdir}" + cmake -H"${src_dir}" -B"${cmake_dir}" + cmake --build "${cmake_dir}" -- -j "$(nproc)" + # Verify the generated program is runnable + "${cmake_dir}/utilize-googleapis" + echo "================================================================" + echo "Testing ${subdir} $(date) with Make" + echo "================================================================" + cp -R "${src_dir}" "${make_dir}" + cd "${make_dir}" + # With Make we may need to set PKG_CONFIG_PATH because the code is installed + # in /usr/local and that is not a default search location in some distros. + env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig \ + make + # Verify the generated program is runnable + "${make_dir}/main" +done diff --git a/ci/test-install/pubsub/CMakeLists.txt b/ci/test-install/pubsub/CMakeLists.txt new file mode 100644 index 0000000..cc8d59e --- /dev/null +++ b/ci/test-install/pubsub/CMakeLists.txt @@ -0,0 +1,28 @@ +# ~~~ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ~~~ + +cmake_minimum_required(VERSION 3.5) + +project(utilize-googleapis CXX C) + +# Configure the compiler options, we will be using C++11 features. +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(googleapis REQUIRED) + +add_executable(utilize-googleapis main.cc) +target_link_libraries(utilize-googleapis googleapis-c++::pubsub_protos) diff --git a/ci/test-install/pubsub/Makefile b/ci/test-install/pubsub/Makefile new file mode 100644 index 0000000..a5cbdcf --- /dev/null +++ b/ci/test-install/pubsub/Makefile @@ -0,0 +1,36 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A simple Makefile to test the `install` target. +# +# This is not intended to be a demonstration of how to write good Makefiles, +# nor is it a general solution on how to build Makefiles for google-cloud-cpp. +# It is simply a minimal file to test the installed pkg-config support files. + +# The CXX, CXXFLAGS and CXXLD variables are hard-coded. These values work for +# our tests, but applications would typically make them configurable parameters. +CXX=g++ -std=c++11 +CXXLD=$(CXX) + +all: main + +# Configuration variables to compile and link against the library. +PROTOS := googleapis_cpp_pubsub_protos +CXXFLAGS := $(shell pkg-config $(PROTOS) --cflags) +CXXLDFLAGS := $(shell pkg-config $(PROTOS) --libs-only-L) +LIBS := $(shell pkg-config $(PROTOS) --libs-only-l) + +# A target using the Google Cloud Storage C++ client library. +main: main.cc + $(CXXLD) $(CXXFLAGS) $(CXXFLAGS) $(CXXLDFLAGS) -o $@ $^ $(LIBS) diff --git a/ci/test-install/pubsub/main.cc b/ci/test-install/pubsub/main.cc new file mode 100644 index 0000000..0554916 --- /dev/null +++ b/ci/test-install/pubsub/main.cc @@ -0,0 +1,22 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +int main() { + auto creds = grpc::InsecureChannelCredentials(); + auto channel = grpc::CreateChannel("localhost:12345", creds); + auto stub = google::pubsub::v1::Publisher::NewStub(channel); +} diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in index 90c3d46..e7b77c3 100644 --- a/cmake/config.cmake.in +++ b/cmake/config.cmake.in @@ -34,6 +34,7 @@ foreach (_target iam_v1_options iam_v1_policy longrunning_operations + pubsub rpc_error_details rpc_status spanner