Skip to content
This repository has been archived by the owner on Dec 22, 2021. It is now read-only.

Commit

Permalink
feat: add Cloud Pub/Sub protos (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
coryan authored Jan 16, 2020
1 parent 20009f5 commit 52758be
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 29 deletions.
14 changes: 14 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions ci/kokoro/install/Dockerfile.fedora-30-shared
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
53 changes: 24 additions & 29 deletions ci/test-install/compile-test-projects.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
28 changes: 28 additions & 0 deletions ci/test-install/pubsub/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
36 changes: 36 additions & 0 deletions ci/test-install/pubsub/Makefile
Original file line number Diff line number Diff line change
@@ -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)
22 changes: 22 additions & 0 deletions ci/test-install/pubsub/main.cc
Original file line number Diff line number Diff line change
@@ -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 <google/pubsub/v1/pubsub.grpc.pb.h>
#include <grpcpp/grpcpp.h>

int main() {
auto creds = grpc::InsecureChannelCredentials();
auto channel = grpc::CreateChannel("localhost:12345", creds);
auto stub = google::pubsub::v1::Publisher::NewStub(channel);
}
1 change: 1 addition & 0 deletions cmake/config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ foreach (_target
iam_v1_options
iam_v1_policy
longrunning_operations
pubsub
rpc_error_details
rpc_status
spanner
Expand Down

0 comments on commit 52758be

Please sign in to comment.