From bde01c6671d2fd20c0d53f8d04f68b9255fd2fe3 Mon Sep 17 00:00:00 2001 From: Rhees Date: Tue, 8 Aug 2023 16:48:51 -0700 Subject: [PATCH 01/17] Initial smoke test of CMakeLists. Tried to match the object names and dependencies of Bazel as much as possible. --- .gitignore | 1 + CMakeLists.txt | 29 +++ pybind11_abseil/CMakeLists.txt | 173 ++++++++++++++++++ .../cpp_capsule_tools/CMakeLists.txt | 35 ++++ pybind11_abseil/tests/CMakeLists.txt | 65 +++++++ 5 files changed, 303 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 pybind11_abseil/CMakeLists.txt create mode 100644 pybind11_abseil/cpp_capsule_tools/CMakeLists.txt create mode 100644 pybind11_abseil/tests/CMakeLists.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..851d537 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.11) +project(pybind11_abseil LANGUAGES CXX) + +include(FetchContent) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CKK_STANDARD_REQUIRED 1) +set(ABSL_PROPAGATE_CXX_STD ON) +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) +set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE) + +find_package(PythonLibs REQUIRED) + +FetchContent_declare( + abseil-cpp + URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz + URL_HASH SHA256=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 +) + +FetchContent_declare( + pybind11 + URL https://github.com/pybind/pybind11/archive/refs/heads/master.tar.gz +) + +FetchContent_MakeAvailable(abseil-cpp pybind11) + +include_directories(. ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) + +add_subdirectory(pybind11_abseil) diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt new file mode 100644 index 0000000..d496508 --- /dev/null +++ b/pybind11_abseil/CMakeLists.txt @@ -0,0 +1,173 @@ +add_subdirectory(cpp_capsule_tools) + +# absl_casters ============================================================ +add_library(absl_casters INTERFACE) +target_link_libraries(absl_casters INTERFACE + absl::cleanup + absl::btree + absl::flat_hash_map + absl::flat_hash_set + absl::node_hash_map + absl::node_hash_set + absl::strings + absl::time + absl::optional + absl::span +) + +# ok_status_singleton_lib ====================================================== + +add_library(ok_status_singleton_lib STATIC + ok_status_singleton_lib.cc +) + +target_link_libraries(ok_status_singleton_lib PUBLIC + absl::status +) + +# ok_status_singleton_pyinit_google3 =========================================== + +add_library(ok_status_singleton_pyinit_google3 STATIC + ok_status_singleton_pyinit_google3.cc +) + +target_link_libraries(ok_status_singleton_pyinit_google3 PUBLIC + ok_status_singleton_lib +) + +# ok_status_singleton ======================================================= + +add_library(ok_status_singleton SHARED + ok_status_singleton_py_extension_stub.cc +) + +set_target_properties(ok_status_singleton PROPERTIES PREFIX "") + +target_link_libraries(ok_status_singleton PUBLIC + ok_status_singleton_pyinit_google3 +) + +# no_throw_status ============================================================== + +add_library(no_throw_status INTERFACE) + +# status_not_ok_exception ====================================================== + +add_library(status_not_ok_exception INTERFACE) + +target_link_libraries(status_not_ok_exception INTERFACE + absl::status +) + +# check_status_module_imported ================================================= + +add_library(check_status_module_imported INTERFACE) + +target_link_libraries(check_status_module_imported INTERFACE + absl::status +) + +# status_caster ================================================================ + +add_library(status_caster INTERFACE) + +target_link_libraries(status_caster INTERFACE + check_status_module_imported + no_throw_status + ok_status_singleton_lib + status_not_ok_exception + raw_ptr_from_capsule + absl::status + absl::statusor +) + +# statusor_caster ============================================================== + +add_library(statusor_caster INTERFACE) + +target_link_libraries(statusor_caster INTERFACE + check_status_module_imported + no_throw_status + status_caster + absl::status + absl::statusor +) + +# init_from_tag ================================================================ + +add_library(init_from_tag INTERFACE) + +# utils_pybind11_absl ========================================================== + +add_library(utils_pybind11_absl STATIC + utils_pybind11_absl.cc +) + +target_link_libraries(utils_pybind11_absl PUBLIC + absl::strings +) + +# register_status_bindings ===================================================== + +add_library(register_status_bindings STATIC + register_status_bindings.cc +) + +target_link_libraries(register_status_bindings PUBLIC + absl_casters + init_from_tag + no_throw_status + ok_status_singleton_lib + status_caster + status_not_ok_exception + utils_pybind11_absl + raw_ptr_from_capsule + absl::status + absl::statusor + absl::strings) + +# status_pyinit_google3 ======================================================== + +add_library(status_pyinit_google3 STATIC + status_pyinit_google3.cc +) + +target_link_libraries(status_pyinit_google3 PUBLIC + register_status_bindings +) + +# status ==================================================================== + +add_library(status SHARED + status_py_extension_stub.cc +) + +set_target_properties(status PROPERTIES PREFIX "") + +target_link_libraries(status PUBLIC + status_pyinit_google3 + absl::status +) + +# import_status_module ========================================================= + +add_library(import_status_module STATIC + import_status_module.cc +) + +target_link_libraries(import_status_module PUBLIC + status +) + + +# status_casters =============================================================== + +add_library(status_casters INTERFACE) + +target_link_libraries(status_casters INTERFACE + import_status_module + status_caster + statusor_caster +) + +add_subdirectory(tests) diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt new file mode 100644 index 0000000..1d3f3d3 --- /dev/null +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -0,0 +1,35 @@ +# void_ptr_from_capsule ======================================================== + +add_library(void_ptr_from_capsule STATIC + void_ptr_from_capsule.cc +) + +target_link_libraries(void_ptr_from_capsule PUBLIC + absl::status + absl::statusor + absl::strings +) + +# raw_ptr_from_capsule ========================================================= + +add_library(raw_ptr_from_capsule INTERFACE) + +target_link_libraries(raw_ptr_from_capsule INTERFACE + void_ptr_from_capsule + absl::statusor + # python_headers does not need to be linked +) + +# make_shared_ptr_capsule ====================================================== + +add_library(make_shared_ptr_capsule INTERFACE) + +# shared_ptr_from_capsule ====================================================== + +add_library(shared_ptr_from_capsule INTERFACE) + +target_link_libraries(shared_ptr_from_capsule INTERFACE + void_ptr_from_capsule + absl::statusor + # python_headers does not need to be linked +) diff --git a/pybind11_abseil/tests/CMakeLists.txt b/pybind11_abseil/tests/CMakeLists.txt new file mode 100644 index 0000000..9e2263c --- /dev/null +++ b/pybind11_abseil/tests/CMakeLists.txt @@ -0,0 +1,65 @@ +# cpp_capsule_tools_testing ==================================================== + +pybind11_add_module(cpp_capsule_tools_testing SHARED + cpp_capsule_tools_testing.cc +) + +target_link_libraries(cpp_capsule_tools_testing PUBLIC + make_shared_ptr_capsule + raw_ptr_from_capsule + shared_ptr_from_capsule + absl::statusor +) +# cpp_capsule_tools_testing_test =============================================== + +# absl_example ================================================================= + +pybind11_add_module(absl_example SHARED + absl_example.cc +) + +target_link_libraries(absl_example PRIVATE + absl_casters + absl::btree + absl::flat_hash_set + absl::strings + absl::time + absl::optional + absl::span +) + +# absl_test ==================================================================== + +# ok_status_singleton_test ===================================================== + +# missing_import =============================================================== + +pybind11_add_module(missing_import SHARED + missing_import.cc +) + +target_compile_options(missing_import PUBLIC -UNDEBUG) + +target_link_libraries(missing_import PRIVATE + status_casters + absl::status + absl::statusor +) + +# missing_import_test ========================================================== + +# status_test ================================================================== + +# status_example =============================================================== + +pybind11_add_module(status_example SHARED + status_example.cc +) + +target_link_libraries(status_example PRIVATE + status_casters + absl::status + absl::statusor +) +# status_example_test ========================================================== + From 9fb34f2774538526ea1d3fe0f553377ceb5bbda7 Mon Sep 17 00:00:00 2001 From: Rhees Date: Wed, 9 Aug 2023 09:43:20 -0700 Subject: [PATCH 02/17] Add external visibility alias to targets with Bazel public visibility --- pybind11_abseil/CMakeLists.txt | 11 +++++++++++ pybind11_abseil/cpp_capsule_tools/CMakeLists.txt | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt index d496508..6142614 100644 --- a/pybind11_abseil/CMakeLists.txt +++ b/pybind11_abseil/CMakeLists.txt @@ -2,6 +2,7 @@ add_subdirectory(cpp_capsule_tools) # absl_casters ============================================================ add_library(absl_casters INTERFACE) +add_library(pybind11_abseil::absl_casters ALIAS absl_casters) target_link_libraries(absl_casters INTERFACE absl::cleanup absl::btree @@ -20,6 +21,7 @@ target_link_libraries(absl_casters INTERFACE add_library(ok_status_singleton_lib STATIC ok_status_singleton_lib.cc ) +add_library(pybind11_abseil::ok_status_singleton_lib ALIAS ok_status_singleton_lib) target_link_libraries(ok_status_singleton_lib PUBLIC absl::status @@ -40,6 +42,7 @@ target_link_libraries(ok_status_singleton_pyinit_google3 PUBLIC add_library(ok_status_singleton SHARED ok_status_singleton_py_extension_stub.cc ) +add_library(pybind11_abseil::ok_status_singleton ALIAS ok_status_singleton) set_target_properties(ok_status_singleton PROPERTIES PREFIX "") @@ -50,10 +53,12 @@ target_link_libraries(ok_status_singleton PUBLIC # no_throw_status ============================================================== add_library(no_throw_status INTERFACE) +add_library(pybind11_abseil::no_throw_status ALIAS no_throw_status) # status_not_ok_exception ====================================================== add_library(status_not_ok_exception INTERFACE) +add_library(pybind11_abseil::status_not_ok_exception ALIAS status_not_ok_exception) target_link_libraries(status_not_ok_exception INTERFACE absl::status @@ -70,6 +75,7 @@ target_link_libraries(check_status_module_imported INTERFACE # status_caster ================================================================ add_library(status_caster INTERFACE) +add_library(pybind11_abseil::status_caster ALIAS status_caster) target_link_libraries(status_caster INTERFACE check_status_module_imported @@ -84,6 +90,7 @@ target_link_libraries(status_caster INTERFACE # statusor_caster ============================================================== add_library(statusor_caster INTERFACE) +add_library(pybind11_abseil::statusor_caster ALIAS statusor_caster) target_link_libraries(statusor_caster INTERFACE check_status_module_imported @@ -96,6 +103,7 @@ target_link_libraries(statusor_caster INTERFACE # init_from_tag ================================================================ add_library(init_from_tag INTERFACE) +add_library(pybind11_abseil::init_from_tag ALIAS init_from_tag) # utils_pybind11_absl ========================================================== @@ -141,6 +149,7 @@ target_link_libraries(status_pyinit_google3 PUBLIC add_library(status SHARED status_py_extension_stub.cc ) +add_library(pybind11_abseil::status ALIAS status) set_target_properties(status PROPERTIES PREFIX "") @@ -154,6 +163,7 @@ target_link_libraries(status PUBLIC add_library(import_status_module STATIC import_status_module.cc ) +add_library(pybind11_abseil::import_status_module ALIAS import_status_module) target_link_libraries(import_status_module PUBLIC status @@ -163,6 +173,7 @@ target_link_libraries(import_status_module PUBLIC # status_casters =============================================================== add_library(status_casters INTERFACE) +add_library(pybind11_abseil::status_casters ALIAS status_casters) target_link_libraries(status_casters INTERFACE import_status_module diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt index 1d3f3d3..63445b6 100644 --- a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -3,6 +3,8 @@ add_library(void_ptr_from_capsule STATIC void_ptr_from_capsule.cc ) +add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) + target_link_libraries(void_ptr_from_capsule PUBLIC absl::status @@ -13,6 +15,7 @@ target_link_libraries(void_ptr_from_capsule PUBLIC # raw_ptr_from_capsule ========================================================= add_library(raw_ptr_from_capsule INTERFACE) +add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) target_link_libraries(raw_ptr_from_capsule INTERFACE void_ptr_from_capsule @@ -23,10 +26,14 @@ target_link_libraries(raw_ptr_from_capsule INTERFACE # make_shared_ptr_capsule ====================================================== add_library(make_shared_ptr_capsule INTERFACE) +add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) + # shared_ptr_from_capsule ====================================================== add_library(shared_ptr_from_capsule INTERFACE) +add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) + target_link_libraries(shared_ptr_from_capsule INTERFACE void_ptr_from_capsule From cef78f6c3db66110c705deea6e943c1bd7b7a360 Mon Sep 17 00:00:00 2001 From: Rhees Date: Wed, 9 Aug 2023 13:01:35 -0700 Subject: [PATCH 03/17] Remove explicit aliases --- CMakeLists.txt | 4 ++-- pybind11_abseil/CMakeLists.txt | 18 ++++-------------- .../cpp_capsule_tools/CMakeLists.txt | 8 ++++---- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 851d537..ba61fd6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ find_package(PythonLibs REQUIRED) FetchContent_declare( abseil-cpp - URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz - URL_HASH SHA256=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 + URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20230802.0.tar.gz + URL_HASH SHA256=59d2976af9d6ecf001a81a35749a6e551a335b949d34918cfade07737b9d93c5 ) FetchContent_declare( diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt index 6142614..03b2735 100644 --- a/pybind11_abseil/CMakeLists.txt +++ b/pybind11_abseil/CMakeLists.txt @@ -2,7 +2,7 @@ add_subdirectory(cpp_capsule_tools) # absl_casters ============================================================ add_library(absl_casters INTERFACE) -add_library(pybind11_abseil::absl_casters ALIAS absl_casters) + target_link_libraries(absl_casters INTERFACE absl::cleanup absl::btree @@ -21,7 +21,6 @@ target_link_libraries(absl_casters INTERFACE add_library(ok_status_singleton_lib STATIC ok_status_singleton_lib.cc ) -add_library(pybind11_abseil::ok_status_singleton_lib ALIAS ok_status_singleton_lib) target_link_libraries(ok_status_singleton_lib PUBLIC absl::status @@ -42,7 +41,6 @@ target_link_libraries(ok_status_singleton_pyinit_google3 PUBLIC add_library(ok_status_singleton SHARED ok_status_singleton_py_extension_stub.cc ) -add_library(pybind11_abseil::ok_status_singleton ALIAS ok_status_singleton) set_target_properties(ok_status_singleton PROPERTIES PREFIX "") @@ -53,12 +51,10 @@ target_link_libraries(ok_status_singleton PUBLIC # no_throw_status ============================================================== add_library(no_throw_status INTERFACE) -add_library(pybind11_abseil::no_throw_status ALIAS no_throw_status) # status_not_ok_exception ====================================================== add_library(status_not_ok_exception INTERFACE) -add_library(pybind11_abseil::status_not_ok_exception ALIAS status_not_ok_exception) target_link_libraries(status_not_ok_exception INTERFACE absl::status @@ -75,14 +71,13 @@ target_link_libraries(check_status_module_imported INTERFACE # status_caster ================================================================ add_library(status_caster INTERFACE) -add_library(pybind11_abseil::status_caster ALIAS status_caster) target_link_libraries(status_caster INTERFACE check_status_module_imported no_throw_status ok_status_singleton_lib status_not_ok_exception - raw_ptr_from_capsule + cpp_capsule_tools::raw_ptr_from_capsule absl::status absl::statusor ) @@ -90,7 +85,6 @@ target_link_libraries(status_caster INTERFACE # statusor_caster ============================================================== add_library(statusor_caster INTERFACE) -add_library(pybind11_abseil::statusor_caster ALIAS statusor_caster) target_link_libraries(statusor_caster INTERFACE check_status_module_imported @@ -103,7 +97,6 @@ target_link_libraries(statusor_caster INTERFACE # init_from_tag ================================================================ add_library(init_from_tag INTERFACE) -add_library(pybind11_abseil::init_from_tag ALIAS init_from_tag) # utils_pybind11_absl ========================================================== @@ -129,7 +122,7 @@ target_link_libraries(register_status_bindings PUBLIC status_caster status_not_ok_exception utils_pybind11_absl - raw_ptr_from_capsule + cpp_capsule_tools::raw_ptr_from_capsule absl::status absl::statusor absl::strings) @@ -149,7 +142,6 @@ target_link_libraries(status_pyinit_google3 PUBLIC add_library(status SHARED status_py_extension_stub.cc ) -add_library(pybind11_abseil::status ALIAS status) set_target_properties(status PROPERTIES PREFIX "") @@ -163,7 +155,6 @@ target_link_libraries(status PUBLIC add_library(import_status_module STATIC import_status_module.cc ) -add_library(pybind11_abseil::import_status_module ALIAS import_status_module) target_link_libraries(import_status_module PUBLIC status @@ -173,7 +164,6 @@ target_link_libraries(import_status_module PUBLIC # status_casters =============================================================== add_library(status_casters INTERFACE) -add_library(pybind11_abseil::status_casters ALIAS status_casters) target_link_libraries(status_casters INTERFACE import_status_module @@ -181,4 +171,4 @@ target_link_libraries(status_casters INTERFACE statusor_caster ) -add_subdirectory(tests) +add_subdirectory(tests) \ No newline at end of file diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt index 63445b6..8ccfef5 100644 --- a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -3,7 +3,7 @@ add_library(void_ptr_from_capsule STATIC void_ptr_from_capsule.cc ) -add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) +add_library(cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) target_link_libraries(void_ptr_from_capsule PUBLIC @@ -15,7 +15,7 @@ target_link_libraries(void_ptr_from_capsule PUBLIC # raw_ptr_from_capsule ========================================================= add_library(raw_ptr_from_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) +add_library(cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) target_link_libraries(raw_ptr_from_capsule INTERFACE void_ptr_from_capsule @@ -26,13 +26,13 @@ target_link_libraries(raw_ptr_from_capsule INTERFACE # make_shared_ptr_capsule ====================================================== add_library(make_shared_ptr_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) +add_library(cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) # shared_ptr_from_capsule ====================================================== add_library(shared_ptr_from_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) +add_library(cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) target_link_libraries(shared_ptr_from_capsule INTERFACE From 71f6003078626a1d696339ef2a30afe27e3d197c Mon Sep 17 00:00:00 2001 From: Rhees Date: Wed, 9 Aug 2023 13:04:22 -0700 Subject: [PATCH 04/17] Revert "Remove explicit aliases" This reverts commit cef78f6c3db66110c705deea6e943c1bd7b7a360. --- CMakeLists.txt | 4 ++-- pybind11_abseil/CMakeLists.txt | 18 ++++++++++++++---- .../cpp_capsule_tools/CMakeLists.txt | 8 ++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba61fd6..851d537 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ find_package(PythonLibs REQUIRED) FetchContent_declare( abseil-cpp - URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20230802.0.tar.gz - URL_HASH SHA256=59d2976af9d6ecf001a81a35749a6e551a335b949d34918cfade07737b9d93c5 + URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz + URL_HASH SHA256=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 ) FetchContent_declare( diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt index 03b2735..6142614 100644 --- a/pybind11_abseil/CMakeLists.txt +++ b/pybind11_abseil/CMakeLists.txt @@ -2,7 +2,7 @@ add_subdirectory(cpp_capsule_tools) # absl_casters ============================================================ add_library(absl_casters INTERFACE) - +add_library(pybind11_abseil::absl_casters ALIAS absl_casters) target_link_libraries(absl_casters INTERFACE absl::cleanup absl::btree @@ -21,6 +21,7 @@ target_link_libraries(absl_casters INTERFACE add_library(ok_status_singleton_lib STATIC ok_status_singleton_lib.cc ) +add_library(pybind11_abseil::ok_status_singleton_lib ALIAS ok_status_singleton_lib) target_link_libraries(ok_status_singleton_lib PUBLIC absl::status @@ -41,6 +42,7 @@ target_link_libraries(ok_status_singleton_pyinit_google3 PUBLIC add_library(ok_status_singleton SHARED ok_status_singleton_py_extension_stub.cc ) +add_library(pybind11_abseil::ok_status_singleton ALIAS ok_status_singleton) set_target_properties(ok_status_singleton PROPERTIES PREFIX "") @@ -51,10 +53,12 @@ target_link_libraries(ok_status_singleton PUBLIC # no_throw_status ============================================================== add_library(no_throw_status INTERFACE) +add_library(pybind11_abseil::no_throw_status ALIAS no_throw_status) # status_not_ok_exception ====================================================== add_library(status_not_ok_exception INTERFACE) +add_library(pybind11_abseil::status_not_ok_exception ALIAS status_not_ok_exception) target_link_libraries(status_not_ok_exception INTERFACE absl::status @@ -71,13 +75,14 @@ target_link_libraries(check_status_module_imported INTERFACE # status_caster ================================================================ add_library(status_caster INTERFACE) +add_library(pybind11_abseil::status_caster ALIAS status_caster) target_link_libraries(status_caster INTERFACE check_status_module_imported no_throw_status ok_status_singleton_lib status_not_ok_exception - cpp_capsule_tools::raw_ptr_from_capsule + raw_ptr_from_capsule absl::status absl::statusor ) @@ -85,6 +90,7 @@ target_link_libraries(status_caster INTERFACE # statusor_caster ============================================================== add_library(statusor_caster INTERFACE) +add_library(pybind11_abseil::statusor_caster ALIAS statusor_caster) target_link_libraries(statusor_caster INTERFACE check_status_module_imported @@ -97,6 +103,7 @@ target_link_libraries(statusor_caster INTERFACE # init_from_tag ================================================================ add_library(init_from_tag INTERFACE) +add_library(pybind11_abseil::init_from_tag ALIAS init_from_tag) # utils_pybind11_absl ========================================================== @@ -122,7 +129,7 @@ target_link_libraries(register_status_bindings PUBLIC status_caster status_not_ok_exception utils_pybind11_absl - cpp_capsule_tools::raw_ptr_from_capsule + raw_ptr_from_capsule absl::status absl::statusor absl::strings) @@ -142,6 +149,7 @@ target_link_libraries(status_pyinit_google3 PUBLIC add_library(status SHARED status_py_extension_stub.cc ) +add_library(pybind11_abseil::status ALIAS status) set_target_properties(status PROPERTIES PREFIX "") @@ -155,6 +163,7 @@ target_link_libraries(status PUBLIC add_library(import_status_module STATIC import_status_module.cc ) +add_library(pybind11_abseil::import_status_module ALIAS import_status_module) target_link_libraries(import_status_module PUBLIC status @@ -164,6 +173,7 @@ target_link_libraries(import_status_module PUBLIC # status_casters =============================================================== add_library(status_casters INTERFACE) +add_library(pybind11_abseil::status_casters ALIAS status_casters) target_link_libraries(status_casters INTERFACE import_status_module @@ -171,4 +181,4 @@ target_link_libraries(status_casters INTERFACE statusor_caster ) -add_subdirectory(tests) \ No newline at end of file +add_subdirectory(tests) diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt index 8ccfef5..63445b6 100644 --- a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -3,7 +3,7 @@ add_library(void_ptr_from_capsule STATIC void_ptr_from_capsule.cc ) -add_library(cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) target_link_libraries(void_ptr_from_capsule PUBLIC @@ -15,7 +15,7 @@ target_link_libraries(void_ptr_from_capsule PUBLIC # raw_ptr_from_capsule ========================================================= add_library(raw_ptr_from_capsule INTERFACE) -add_library(cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) target_link_libraries(raw_ptr_from_capsule INTERFACE void_ptr_from_capsule @@ -26,13 +26,13 @@ target_link_libraries(raw_ptr_from_capsule INTERFACE # make_shared_ptr_capsule ====================================================== add_library(make_shared_ptr_capsule INTERFACE) -add_library(cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) # shared_ptr_from_capsule ====================================================== add_library(shared_ptr_from_capsule INTERFACE) -add_library(cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) target_link_libraries(shared_ptr_from_capsule INTERFACE From 99586b8c01cba5d3c6c75aff358956b00b84a018 Mon Sep 17 00:00:00 2001 From: Rhees Crouse <77986917+david-crouse@users.noreply.github.com> Date: Wed, 9 Aug 2023 13:57:09 -0700 Subject: [PATCH 05/17] Fix include file exports (#1) * Test include file exporting * Fix target_include_directories * Move to canonical include_dirs. Trying w/o install since no install command is present * Move include dir one level up * Add var to get include dir right * All exported targets now have include_dirs set --- CMakeLists.txt | 3 +- pybind11_abseil/CMakeLists.txt | 34 +++++++++++++++++++ .../cpp_capsule_tools/CMakeLists.txt | 9 +++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 851d537..c976c4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ FetchContent_declare( FetchContent_MakeAvailable(abseil-cpp pybind11) -include_directories(. ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) +set(TOP_LEVEL_DIR ${CMAKE_CURRENT_LIST_DIR}) +include_directories(${TOP_LEVEL_DIR} ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) add_subdirectory(pybind11_abseil) diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt index 6142614..631f393 100644 --- a/pybind11_abseil/CMakeLists.txt +++ b/pybind11_abseil/CMakeLists.txt @@ -3,6 +3,10 @@ add_subdirectory(cpp_capsule_tools) # absl_casters ============================================================ add_library(absl_casters INTERFACE) add_library(pybind11_abseil::absl_casters ALIAS absl_casters) + +target_include_directories(absl_casters INTERFACE +$) + target_link_libraries(absl_casters INTERFACE absl::cleanup absl::btree @@ -23,6 +27,9 @@ add_library(ok_status_singleton_lib STATIC ) add_library(pybind11_abseil::ok_status_singleton_lib ALIAS ok_status_singleton_lib) +target_include_directories(ok_status_singleton_lib INTERFACE +$) + target_link_libraries(ok_status_singleton_lib PUBLIC absl::status ) @@ -44,6 +51,9 @@ add_library(ok_status_singleton SHARED ) add_library(pybind11_abseil::ok_status_singleton ALIAS ok_status_singleton) +target_include_directories(ok_status_singleton INTERFACE +$) + set_target_properties(ok_status_singleton PROPERTIES PREFIX "") target_link_libraries(ok_status_singleton PUBLIC @@ -55,11 +65,17 @@ target_link_libraries(ok_status_singleton PUBLIC add_library(no_throw_status INTERFACE) add_library(pybind11_abseil::no_throw_status ALIAS no_throw_status) +target_include_directories(no_throw_status INTERFACE +$) + # status_not_ok_exception ====================================================== add_library(status_not_ok_exception INTERFACE) add_library(pybind11_abseil::status_not_ok_exception ALIAS status_not_ok_exception) +target_include_directories(status_not_ok_exception INTERFACE +$) + target_link_libraries(status_not_ok_exception INTERFACE absl::status ) @@ -77,6 +93,9 @@ target_link_libraries(check_status_module_imported INTERFACE add_library(status_caster INTERFACE) add_library(pybind11_abseil::status_caster ALIAS status_caster) +target_include_directories(status_caster INTERFACE +$) + target_link_libraries(status_caster INTERFACE check_status_module_imported no_throw_status @@ -92,6 +111,9 @@ target_link_libraries(status_caster INTERFACE add_library(statusor_caster INTERFACE) add_library(pybind11_abseil::statusor_caster ALIAS statusor_caster) +target_include_directories(statusor_caster INTERFACE +$) + target_link_libraries(statusor_caster INTERFACE check_status_module_imported no_throw_status @@ -105,6 +127,9 @@ target_link_libraries(statusor_caster INTERFACE add_library(init_from_tag INTERFACE) add_library(pybind11_abseil::init_from_tag ALIAS init_from_tag) +target_include_directories(init_from_tag INTERFACE +$) + # utils_pybind11_absl ========================================================== add_library(utils_pybind11_absl STATIC @@ -151,6 +176,9 @@ add_library(status SHARED ) add_library(pybind11_abseil::status ALIAS status) +target_include_directories(status INTERFACE +$) + set_target_properties(status PROPERTIES PREFIX "") target_link_libraries(status PUBLIC @@ -165,6 +193,9 @@ add_library(import_status_module STATIC ) add_library(pybind11_abseil::import_status_module ALIAS import_status_module) +target_include_directories(import_status_module INTERFACE +$) + target_link_libraries(import_status_module PUBLIC status ) @@ -175,6 +206,9 @@ target_link_libraries(import_status_module PUBLIC add_library(status_casters INTERFACE) add_library(pybind11_abseil::status_casters ALIAS status_casters) +target_include_directories(status_casters INTERFACE +$) + target_link_libraries(status_casters INTERFACE import_status_module status_caster diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt index 63445b6..5f2d1e5 100644 --- a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -5,6 +5,8 @@ add_library(void_ptr_from_capsule STATIC ) add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) +target_include_directories(void_ptr_from_capsule INTERFACE +$) target_link_libraries(void_ptr_from_capsule PUBLIC absl::status @@ -17,6 +19,9 @@ target_link_libraries(void_ptr_from_capsule PUBLIC add_library(raw_ptr_from_capsule INTERFACE) add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) +target_include_directories(raw_ptr_from_capsule INTERFACE +$) + target_link_libraries(raw_ptr_from_capsule INTERFACE void_ptr_from_capsule absl::statusor @@ -28,12 +33,16 @@ target_link_libraries(raw_ptr_from_capsule INTERFACE add_library(make_shared_ptr_capsule INTERFACE) add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) +target_include_directories(make_shared_ptr_capsule INTERFACE +$) # shared_ptr_from_capsule ====================================================== add_library(shared_ptr_from_capsule INTERFACE) add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) +target_include_directories(shared_ptr_from_capsule INTERFACE +$) target_link_libraries(shared_ptr_from_capsule INTERFACE void_ptr_from_capsule From 0d142fc0a9a4845e916c206e02d9404a39266911 Mon Sep 17 00:00:00 2001 From: Rhees Date: Thu, 10 Aug 2023 13:23:56 -0700 Subject: [PATCH 06/17] ctest now runs all tests! --- CMakeLists.txt | 5 +-- pybind11_abseil/tests/CMakeLists.txt | 32 +++++++++++++++++++ .../tests/ok_status_singleton_test.py | 7 +++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c976c4d..5fbbaa8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,11 @@ cmake_minimum_required(VERSION 3.11) project(pybind11_abseil LANGUAGES CXX) include(FetchContent) +include(CTest) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CKK_STANDARD_REQUIRED 1) set(ABSL_PROPAGATE_CXX_STD ON) +set(BUILD_TESTING OFF) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE) @@ -22,7 +23,7 @@ FetchContent_declare( URL https://github.com/pybind/pybind11/archive/refs/heads/master.tar.gz ) -FetchContent_MakeAvailable(abseil-cpp pybind11) +FetchContent_MakeAvailable( abseil-cpp pybind11) set(TOP_LEVEL_DIR ${CMAKE_CURRENT_LIST_DIR}) include_directories(${TOP_LEVEL_DIR} ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) diff --git a/pybind11_abseil/tests/CMakeLists.txt b/pybind11_abseil/tests/CMakeLists.txt index 9e2263c..6260f95 100644 --- a/pybind11_abseil/tests/CMakeLists.txt +++ b/pybind11_abseil/tests/CMakeLists.txt @@ -1,3 +1,4 @@ + # cpp_capsule_tools_testing ==================================================== pybind11_add_module(cpp_capsule_tools_testing SHARED @@ -12,6 +13,11 @@ target_link_libraries(cpp_capsule_tools_testing PUBLIC ) # cpp_capsule_tools_testing_test =============================================== +add_test(NAME cpp_capsule_tools_testing_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cpp_capsule_tools_testing_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + # absl_example ================================================================= pybind11_add_module(absl_example SHARED @@ -30,8 +36,19 @@ target_link_libraries(absl_example PRIVATE # absl_test ==================================================================== +add_test(NAME absl_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/absl_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + # ok_status_singleton_test ===================================================== +add_test(NAME ok_status_singleton_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ok_status_singleton_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + # missing_import =============================================================== pybind11_add_module(missing_import SHARED @@ -48,8 +65,19 @@ target_link_libraries(missing_import PRIVATE # missing_import_test ========================================================== +add_test(NAME missing_import_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/missing_import_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + # status_test ================================================================== +add_test(NAME status_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + # status_example =============================================================== pybind11_add_module(status_example SHARED @@ -63,3 +91,7 @@ target_link_libraries(status_example PRIVATE ) # status_example_test ========================================================== +add_test(NAME status_example_test + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/pybind11_abseil/tests/ok_status_singleton_test.py b/pybind11_abseil/tests/ok_status_singleton_test.py index a0fe0d0..5e45cc5 100644 --- a/pybind11_abseil/tests/ok_status_singleton_test.py +++ b/pybind11_abseil/tests/ok_status_singleton_test.py @@ -12,7 +12,12 @@ class OkStatusSingletonTest(absltest.TestCase): def test_singleton(self): cap = ok_status_singleton.OkStatusSingleton() - self.assertStartsWith(repr(cap), ' Date: Thu, 10 Aug 2023 15:10:03 -0700 Subject: [PATCH 07/17] Add build_and_run_tests_cmake.sh to shadow build_and_run_tests.sh --- .gitignore | 1 + scripts/build_and_run_tests_cmake.sh | 103 +++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100755 scripts/build_and_run_tests_cmake.sh diff --git a/.gitignore b/.gitignore index 378eac2..2a7b42e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build +tmp_build diff --git a/scripts/build_and_run_tests_cmake.sh b/scripts/build_and_run_tests_cmake.sh new file mode 100755 index 0000000..faccea7 --- /dev/null +++ b/scripts/build_and_run_tests_cmake.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +# The following scripts: +# - creates a virtualenv +# - installs the pip package dependencies +# - builds and runs tests + +set -e # exit when any command fails +# set -x # Prints all executed command + +MYDIR="$(dirname "$(realpath "$0")")" + +CMAKE=$(which cmake || true) +if [[ -z $CMAKE || ! -x $CMAKE ]] +then + echo -e -n '\e[1m\e[93m' + echo -n 'CMake not found (cmake is needed to ' + echo -n 'compile & test). ' + echo -e 'Exiting...\e[0m' + exit 1 +fi + +VIRTUAL_ENV_BINARY=$(which virtualenv || true) +if [[ -z $VIRTUAL_ENV_BINARY || ! -x $VIRTUAL_ENV_BINARY ]] +then + echo -e -n '\e[1m\e[93m' + echo -n 'virtualenv command not found ' + echo -n '(try `python3 -m pip install virtualenv`, possibly as root). ' + echo -e 'Exiting...\e[0m' + exit 1 +fi + +is_in_virtual_env="false" +# if we are in a virtual_env, we will not create a new one inside. +if [[ "$VIRTUAL_ENV" != "" ]] +then + echo -e "\e[1m\e[93mVirtualenv already detected. We do not create a new one.\e[0m" + is_in_virtual_env="true" +fi + +echo -e "\e[33mRunning ${0} from $PWD\e[0m" +PYBIN=$(which python3 || true) +if [[ -z $PYBIN || ! -x $PYBIN ]] +then + echo -e '\e[1m\e[93mpython3 not found! Skip build and test.\e[0m' + exit 1 +fi + +PYVERSION=$($PYBIN -c 'import sys; print(".".join(map(str, sys.version_info[:3])))') + +VENV_DIR="./venv" + +if [[ $is_in_virtual_env == "false" ]]; then + if ! [ -d "$VENV_DIR" ]; then + echo "Installing..." + echo -e "\e[33mInstalling a virtualenv to $VENV_DIR. The setup is long the first time, please wait.\e[0m" + virtualenv -p $PYBIN $VENV_DIR + else + echo -e "\e[33mReusing virtualenv from $VENV_DIR.\e[0m" + fi + source $VENV_DIR/bin/activate +fi + +# We only exit the virtualenv if we created one. +function cleanup { + if [[ $is_in_virtual_env == "true" ]]; then + echo "Exiting virtualenv" + deactivate + fi +} +trap cleanup EXIT + +echo -e "\e[33mInstalling the requirements (use --noinstall to skip).\e[0m" +pip3 install --upgrade -r ./requirements.txt + +echo "Building and testing in $PWD using 'python' (version $PYVERSION)." + +export PYTHON_BIN_PATH=`which python3` +export PYTHON_LIB_PATH=`python3 -c "import sysconfig; print(sysconfig.get_path('include'))"` +echo "Using PYTHON_BIN_PATH: $PYTHON_BIN_PATH" +echo "Using PYTHON_LIB_PATH: $PYTHON_LIB_PATH" + +if [ -e tmp_build ]; then + rm -r tmp_build +fi + +mkdir tmp_build +cd tmp_build + +# C++14 +cmake ../ -DCMAKE_CXX_STANDARD=14 +make +ctest --output-on-failure + +rm -r ./* + +# C++17 +cmake ../ -DCMAKE_CXX_STANDARD=17 +make +ctest --output-on-failure + +cd ../ +rm -r tmp_build From 52012443f39227e483d7e7caadde993fe59a99d2 Mon Sep 17 00:00:00 2001 From: Rhees Date: Fri, 11 Aug 2023 09:47:42 -0700 Subject: [PATCH 08/17] Default to C++17 instead of overriding. Use verbose makefile --- CMakeLists.txt | 4 +++- scripts/build_and_run_tests_cmake.sh | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fbbaa8..2ea1c8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,9 @@ project(pybind11_abseil LANGUAGES CXX) include(FetchContent) include(CTest) -set(CMAKE_CXX_STANDARD 17) +if (NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) +endif (NOT DEFINED CMAKE_CXX_STANDARD) set(ABSL_PROPAGATE_CXX_STD ON) set(BUILD_TESTING OFF) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) diff --git a/scripts/build_and_run_tests_cmake.sh b/scripts/build_and_run_tests_cmake.sh index faccea7..bb138fe 100755 --- a/scripts/build_and_run_tests_cmake.sh +++ b/scripts/build_and_run_tests_cmake.sh @@ -88,14 +88,14 @@ mkdir tmp_build cd tmp_build # C++14 -cmake ../ -DCMAKE_CXX_STANDARD=14 +cmake ../ -DCMAKE_CXX_STANDARD=14 -DCMAKE_VERBOSE_MAKEFILE=ON make ctest --output-on-failure rm -r ./* # C++17 -cmake ../ -DCMAKE_CXX_STANDARD=17 +cmake ../ -DCMAKE_CXX_STANDARD=17 -DCMAKE_VERBOSE_MAKEFILE=ON make ctest --output-on-failure From fd3145b0e6bcab6e0e083cf5e039755a392275b8 Mon Sep 17 00:00:00 2001 From: Rhees Date: Fri, 11 Aug 2023 09:52:04 -0700 Subject: [PATCH 09/17] Add arg passthru to cmake test script --- scripts/build_and_run_tests_cmake.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build_and_run_tests_cmake.sh b/scripts/build_and_run_tests_cmake.sh index bb138fe..8dfd4bc 100755 --- a/scripts/build_and_run_tests_cmake.sh +++ b/scripts/build_and_run_tests_cmake.sh @@ -89,14 +89,14 @@ cd tmp_build # C++14 cmake ../ -DCMAKE_CXX_STANDARD=14 -DCMAKE_VERBOSE_MAKEFILE=ON -make +make "$@" ctest --output-on-failure rm -r ./* # C++17 cmake ../ -DCMAKE_CXX_STANDARD=17 -DCMAKE_VERBOSE_MAKEFILE=ON -make +make "$@" ctest --output-on-failure cd ../ From 0af205efe662c2dae1a105e6f73dfb9c333771b7 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 13:27:19 -0700 Subject: [PATCH 10/17] Improved handling of OSS vs Google-internal expected result. --- pybind11_abseil/tests/ok_status_singleton_test.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pybind11_abseil/tests/ok_status_singleton_test.py b/pybind11_abseil/tests/ok_status_singleton_test.py index 5e45cc5..2c71b56 100644 --- a/pybind11_abseil/tests/ok_status_singleton_test.py +++ b/pybind11_abseil/tests/ok_status_singleton_test.py @@ -3,6 +3,8 @@ # All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. +import sys + from absl.testing import absltest from pybind11_abseil import ok_status_singleton @@ -12,12 +14,11 @@ class OkStatusSingletonTest(absltest.TestCase): def test_singleton(self): cap = ok_status_singleton.OkStatusSingleton() - cap_repr = repr(cap) - - # Modified to reflect the alternate behavior with CMake build - self.assertTrue(cap_repr.startswith( - ' Date: Fri, 11 Aug 2023 14:05:41 -0700 Subject: [PATCH 11/17] Update Readme --- CMakeLists.txt | 2 +- README.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ea1c8a..44f233a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ FetchContent_declare( URL https://github.com/pybind/pybind11/archive/refs/heads/master.tar.gz ) -FetchContent_MakeAvailable( abseil-cpp pybind11) +FetchContent_MakeAvailable(abseil-cpp pybind11) set(TOP_LEVEL_DIR ${CMAKE_CURRENT_LIST_DIR}) include_directories(${TOP_LEVEL_DIR} ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) diff --git a/README.md b/README.md index 230769e..5a7b7d1 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,13 @@ in the .cc file with your bindings: #include "pybind11_abseil/absl_casters.h" ``` + ## Installation +pybind11_abseil can be built with Bazel or CMake. Instructions for both are below. + +### Bazel + You will need to depend on `pybind11`, `pybind11_bazel`(see [doc](https://github.com/pybind/pybind11_bazel#installation), and on `pybind11_abseil`, e.g. @@ -54,6 +59,25 @@ Then, in your BUILD file: load("@pybind11_bazel//:build_defs.bzl", "pybind_extension") ``` +### CMake + +In your project, add a FetchContent for pybind11_abseil. This will also fetch the +appropriate versions of Abseil and pybind11 which your project can use +(eliminating the need for submoduling Abseil or using find_package). + +Add the following to your CMakeLists.txt: +``` +include(FetchContent) + +FetchContent_Declare { + pybind11_abseil + GIT_REPOSITORY https://github.com/pybind/pybind11_abseil.git + GIT_TAG master +} + +FetchContent_MakeAvailable(pybind11 abseil-cpp pybind11_abseil) +``` + ## absl::Duration `absl::Duration` objects are converted to/ from python datetime.timedelta objects. From cd7245741843f28df5285b6662eca8dbfc3c63ad Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 14:29:57 -0700 Subject: [PATCH 12/17] Run build_and_run_tests_cmake.sh from GHA --- .github/workflows/actions.yml | 25 ++++++++++++++++--- ..._tests.sh => build_and_run_tests_bazel.sh} | 4 +-- 2 files changed, 23 insertions(+), 6 deletions(-) rename scripts/{build_and_run_tests.sh => build_and_run_tests_bazel.sh} (94%) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 5ce2d07..0b41d5a 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -14,8 +14,13 @@ on: jobs: build: + strategy: + matrix: + runs-on: [ubuntu-latest] + build_tool: [bazel, cmake] - runs-on: ubuntu-latest + name: "${{matrix.runs-on}} ${{matrix.build_tool}}" + runs-on: ${{matrix.runs-on}} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -24,6 +29,7 @@ jobs: # Runs a single command using the runners shell - name: Install Bazel + if: matrix.build_tool == bazel # Install Bazel, see https://docs.bazel.build/versions/master/install-ubuntu.html#step-1-install-required-packages run: | sudo apt install curl gnupg @@ -32,11 +38,22 @@ jobs: echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list sudo apt update && sudo apt install bazel -y + - name: Show bazel version + if: matrix.build_tool == bazel + run: bazel --version + + - name: Update cmake + if: matrix.build_tool == cmake + uses: jwlawson/actions-setup-cmake@v1.14 + + - name: Show cmake version + if: matrix.build_tool == cmake + run: cmake --version + - name: Install virtualenv run: | sudo apt-get install python3-pip -y sudo pip3 install virtualenv - # Runs a set of commands using the runners shell - - name: Run tests - run: bash ./scripts/build_and_run_tests.sh + - name: Build and run tests + run: bash ./scripts/build_and_run_tests_${{matrix.build_tool}}.sh -j $(nproc) diff --git a/scripts/build_and_run_tests.sh b/scripts/build_and_run_tests_bazel.sh similarity index 94% rename from scripts/build_and_run_tests.sh rename to scripts/build_and_run_tests_bazel.sh index b6bf27f..e842911 100755 --- a/scripts/build_and_run_tests.sh +++ b/scripts/build_and_run_tests_bazel.sh @@ -80,5 +80,5 @@ export PYTHON_LIB_PATH=`python3 -c "import sysconfig; print(sysconfig.get_path(' echo "Using PYTHON_BIN_PATH: $PYTHON_BIN_PATH" echo "Using PYTHON_LIB_PATH: $PYTHON_LIB_PATH" -BAZEL_CXXOPTS="-std=c++14" bazel test ... --test_output=errors -BAZEL_CXXOPTS="-std=c++17" bazel test ... --test_output=errors +BAZEL_CXXOPTS="-std=c++14" bazel test ... --test_output=errors "$@" +BAZEL_CXXOPTS="-std=c++17" bazel test ... --test_output=errors "$@" From 500569f59d04412dc69f736f7da3fc2a345416e4 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 14:36:16 -0700 Subject: [PATCH 13/17] Fix trivial oversight in actions.yml changes --- .github/workflows/actions.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 0b41d5a..28ea81c 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -29,7 +29,7 @@ jobs: # Runs a single command using the runners shell - name: Install Bazel - if: matrix.build_tool == bazel + if: {{matrix.build_tool}} == bazel # Install Bazel, see https://docs.bazel.build/versions/master/install-ubuntu.html#step-1-install-required-packages run: | sudo apt install curl gnupg @@ -39,15 +39,15 @@ jobs: sudo apt update && sudo apt install bazel -y - name: Show bazel version - if: matrix.build_tool == bazel + if: {{matrix.build_tool}} == bazel run: bazel --version - name: Update cmake - if: matrix.build_tool == cmake + if: {{matrix.build_tool}} == cmake uses: jwlawson/actions-setup-cmake@v1.14 - name: Show cmake version - if: matrix.build_tool == cmake + if: {{matrix.build_tool}} == cmake run: cmake --version - name: Install virtualenv From d0df4e45f0e8ee5e95d5846378c5ffed47b02d9f Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 14:48:14 -0700 Subject: [PATCH 14/17] Fix yaml syntax errors --- .github/workflows/actions.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 28ea81c..69868df 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -29,7 +29,7 @@ jobs: # Runs a single command using the runners shell - name: Install Bazel - if: {{matrix.build_tool}} == bazel + if: matrix.build_tool == 'bazel' # Install Bazel, see https://docs.bazel.build/versions/master/install-ubuntu.html#step-1-install-required-packages run: | sudo apt install curl gnupg @@ -39,15 +39,15 @@ jobs: sudo apt update && sudo apt install bazel -y - name: Show bazel version - if: {{matrix.build_tool}} == bazel + if: matrix.build_tool == 'bazel' run: bazel --version - name: Update cmake - if: {{matrix.build_tool}} == cmake + if: matrix.build_tool == 'cmake' uses: jwlawson/actions-setup-cmake@v1.14 - name: Show cmake version - if: {{matrix.build_tool}} == cmake + if: matrix.build_tool == 'cmake' run: cmake --version - name: Install virtualenv From 21705880730ff89f01328b9eb35b7b06b14cc8a0 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 15:02:49 -0700 Subject: [PATCH 15/17] Misc minor enhancements. --- .github/workflows/actions.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 69868df..751365c 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -10,10 +10,13 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: +env: + PIP_BREAK_SYSTEM_PACKAGES: 1 + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - build: + unix: strategy: matrix: runs-on: [ubuntu-latest] @@ -24,11 +27,13 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: + - name: Show env + run: env + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - # Runs a single command using the runners shell - - name: Install Bazel + - name: Install bazel if: matrix.build_tool == 'bazel' # Install Bazel, see https://docs.bazel.build/versions/master/install-ubuntu.html#step-1-install-required-packages run: | @@ -50,6 +55,9 @@ jobs: if: matrix.build_tool == 'cmake' run: cmake --version + - name: Show platform info + run: python -m platform + - name: Install virtualenv run: | sudo apt-get install python3-pip -y From 1d1dc4f978286b11b86542c5fbe8f726e4f8d16d Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Fri, 11 Aug 2023 15:10:13 -0700 Subject: [PATCH 16/17] Show nproc --- .github/workflows/actions.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 751365c..12fe458 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -63,5 +63,8 @@ jobs: sudo apt-get install python3-pip -y sudo pip3 install virtualenv + - name: Show nproc + run: echo nproc=$(nproc) + - name: Build and run tests run: bash ./scripts/build_and_run_tests_${{matrix.build_tool}}.sh -j $(nproc) From 06b7159c6f9d404c222f4e2a891da8e7a0f80603 Mon Sep 17 00:00:00 2001 From: Rhees Date: Tue, 15 Aug 2023 12:40:46 -0700 Subject: [PATCH 17/17] Formatting --- CMakeLists.txt | 26 +-- pybind11_abseil/CMakeLists.txt | 208 +++++++----------- .../cpp_capsule_tools/CMakeLists.txt | 53 +++-- pybind11_abseil/tests/CMakeLists.txt | 104 ++++----- 4 files changed, 171 insertions(+), 220 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 44f233a..2866dd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,9 @@ project(pybind11_abseil LANGUAGES CXX) include(FetchContent) include(CTest) -if (NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif (NOT DEFINED CMAKE_CXX_STANDARD) +if(NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) +endif(NOT DEFINED CMAKE_CXX_STANDARD) set(ABSL_PROPAGATE_CXX_STD ON) set(BUILD_TESTING OFF) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) @@ -14,20 +14,20 @@ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE) find_package(PythonLibs REQUIRED) -FetchContent_declare( - abseil-cpp - URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz - URL_HASH SHA256=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 -) +FetchContent_Declare( + abseil-cpp + URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz + URL_HASH + SHA256=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4) -FetchContent_declare( - pybind11 - URL https://github.com/pybind/pybind11/archive/refs/heads/master.tar.gz -) +FetchContent_Declare( + pybind11 + URL https://github.com/pybind/pybind11/archive/refs/heads/master.tar.gz) FetchContent_MakeAvailable(abseil-cpp pybind11) set(TOP_LEVEL_DIR ${CMAKE_CURRENT_LIST_DIR}) -include_directories(${TOP_LEVEL_DIR} ${PYTHON_INCLUDE_DIR} ${pybind11_INCLUDE_DIRS}) +include_directories(${TOP_LEVEL_DIR} ${PYTHON_INCLUDE_DIR} + ${pybind11_INCLUDE_DIRS}) add_subdirectory(pybind11_abseil) diff --git a/pybind11_abseil/CMakeLists.txt b/pybind11_abseil/CMakeLists.txt index 631f393..7b6d85b 100644 --- a/pybind11_abseil/CMakeLists.txt +++ b/pybind11_abseil/CMakeLists.txt @@ -4,215 +4,177 @@ add_subdirectory(cpp_capsule_tools) add_library(absl_casters INTERFACE) add_library(pybind11_abseil::absl_casters ALIAS absl_casters) -target_include_directories(absl_casters INTERFACE -$) - -target_link_libraries(absl_casters INTERFACE - absl::cleanup - absl::btree - absl::flat_hash_map - absl::flat_hash_set - absl::node_hash_map - absl::node_hash_set - absl::strings - absl::time - absl::optional - absl::span -) +target_include_directories(absl_casters + INTERFACE $) + +target_link_libraries( + absl_casters + INTERFACE absl::cleanup + absl::btree + absl::flat_hash_map + absl::flat_hash_set + absl::node_hash_map + absl::node_hash_set + absl::strings + absl::time + absl::optional + absl::span) # ok_status_singleton_lib ====================================================== -add_library(ok_status_singleton_lib STATIC - ok_status_singleton_lib.cc -) -add_library(pybind11_abseil::ok_status_singleton_lib ALIAS ok_status_singleton_lib) +add_library(ok_status_singleton_lib STATIC ok_status_singleton_lib.cc) +add_library(pybind11_abseil::ok_status_singleton_lib ALIAS + ok_status_singleton_lib) -target_include_directories(ok_status_singleton_lib INTERFACE -$) +target_include_directories(ok_status_singleton_lib + INTERFACE $) -target_link_libraries(ok_status_singleton_lib PUBLIC - absl::status -) +target_link_libraries(ok_status_singleton_lib PUBLIC absl::status) # ok_status_singleton_pyinit_google3 =========================================== add_library(ok_status_singleton_pyinit_google3 STATIC - ok_status_singleton_pyinit_google3.cc -) + ok_status_singleton_pyinit_google3.cc) -target_link_libraries(ok_status_singleton_pyinit_google3 PUBLIC - ok_status_singleton_lib -) +target_link_libraries(ok_status_singleton_pyinit_google3 + PUBLIC ok_status_singleton_lib) # ok_status_singleton ======================================================= -add_library(ok_status_singleton SHARED - ok_status_singleton_py_extension_stub.cc -) +add_library(ok_status_singleton SHARED ok_status_singleton_py_extension_stub.cc) add_library(pybind11_abseil::ok_status_singleton ALIAS ok_status_singleton) -target_include_directories(ok_status_singleton INTERFACE -$) +target_include_directories(ok_status_singleton + INTERFACE $) set_target_properties(ok_status_singleton PROPERTIES PREFIX "") -target_link_libraries(ok_status_singleton PUBLIC - ok_status_singleton_pyinit_google3 -) +target_link_libraries(ok_status_singleton + PUBLIC ok_status_singleton_pyinit_google3) # no_throw_status ============================================================== add_library(no_throw_status INTERFACE) add_library(pybind11_abseil::no_throw_status ALIAS no_throw_status) -target_include_directories(no_throw_status INTERFACE -$) +target_include_directories(no_throw_status + INTERFACE $) # status_not_ok_exception ====================================================== add_library(status_not_ok_exception INTERFACE) -add_library(pybind11_abseil::status_not_ok_exception ALIAS status_not_ok_exception) +add_library(pybind11_abseil::status_not_ok_exception ALIAS + status_not_ok_exception) -target_include_directories(status_not_ok_exception INTERFACE -$) +target_include_directories(status_not_ok_exception + INTERFACE $) -target_link_libraries(status_not_ok_exception INTERFACE - absl::status -) +target_link_libraries(status_not_ok_exception INTERFACE absl::status) # check_status_module_imported ================================================= add_library(check_status_module_imported INTERFACE) -target_link_libraries(check_status_module_imported INTERFACE - absl::status -) +target_link_libraries(check_status_module_imported INTERFACE absl::status) # status_caster ================================================================ add_library(status_caster INTERFACE) add_library(pybind11_abseil::status_caster ALIAS status_caster) -target_include_directories(status_caster INTERFACE -$) +target_include_directories(status_caster + INTERFACE $) -target_link_libraries(status_caster INTERFACE - check_status_module_imported - no_throw_status - ok_status_singleton_lib - status_not_ok_exception - raw_ptr_from_capsule - absl::status - absl::statusor -) +target_link_libraries( + status_caster + INTERFACE check_status_module_imported + no_throw_status + ok_status_singleton_lib + status_not_ok_exception + raw_ptr_from_capsule + absl::status + absl::statusor) # statusor_caster ============================================================== add_library(statusor_caster INTERFACE) add_library(pybind11_abseil::statusor_caster ALIAS statusor_caster) -target_include_directories(statusor_caster INTERFACE -$) +target_include_directories(statusor_caster + INTERFACE $) -target_link_libraries(statusor_caster INTERFACE - check_status_module_imported - no_throw_status - status_caster - absl::status - absl::statusor -) +target_link_libraries( + statusor_caster INTERFACE check_status_module_imported no_throw_status + status_caster absl::status absl::statusor) # init_from_tag ================================================================ add_library(init_from_tag INTERFACE) add_library(pybind11_abseil::init_from_tag ALIAS init_from_tag) -target_include_directories(init_from_tag INTERFACE -$) +target_include_directories(init_from_tag + INTERFACE $) # utils_pybind11_absl ========================================================== -add_library(utils_pybind11_absl STATIC - utils_pybind11_absl.cc -) +add_library(utils_pybind11_absl STATIC utils_pybind11_absl.cc) -target_link_libraries(utils_pybind11_absl PUBLIC - absl::strings -) +target_link_libraries(utils_pybind11_absl PUBLIC absl::strings) # register_status_bindings ===================================================== -add_library(register_status_bindings STATIC - register_status_bindings.cc -) - -target_link_libraries(register_status_bindings PUBLIC - absl_casters - init_from_tag - no_throw_status - ok_status_singleton_lib - status_caster - status_not_ok_exception - utils_pybind11_absl - raw_ptr_from_capsule - absl::status - absl::statusor - absl::strings) +add_library(register_status_bindings STATIC register_status_bindings.cc) + +target_link_libraries( + register_status_bindings + PUBLIC absl_casters + init_from_tag + no_throw_status + ok_status_singleton_lib + status_caster + status_not_ok_exception + utils_pybind11_absl + raw_ptr_from_capsule + absl::status + absl::statusor + absl::strings) # status_pyinit_google3 ======================================================== -add_library(status_pyinit_google3 STATIC - status_pyinit_google3.cc -) +add_library(status_pyinit_google3 STATIC status_pyinit_google3.cc) -target_link_libraries(status_pyinit_google3 PUBLIC - register_status_bindings -) +target_link_libraries(status_pyinit_google3 PUBLIC register_status_bindings) # status ==================================================================== -add_library(status SHARED - status_py_extension_stub.cc -) +add_library(status SHARED status_py_extension_stub.cc) add_library(pybind11_abseil::status ALIAS status) -target_include_directories(status INTERFACE -$) +target_include_directories(status INTERFACE $) set_target_properties(status PROPERTIES PREFIX "") -target_link_libraries(status PUBLIC - status_pyinit_google3 - absl::status -) +target_link_libraries(status PUBLIC status_pyinit_google3 absl::status) # import_status_module ========================================================= -add_library(import_status_module STATIC - import_status_module.cc -) +add_library(import_status_module STATIC import_status_module.cc) add_library(pybind11_abseil::import_status_module ALIAS import_status_module) -target_include_directories(import_status_module INTERFACE -$) - -target_link_libraries(import_status_module PUBLIC - status -) +target_include_directories(import_status_module + INTERFACE $) +target_link_libraries(import_status_module PUBLIC status) # status_casters =============================================================== add_library(status_casters INTERFACE) add_library(pybind11_abseil::status_casters ALIAS status_casters) -target_include_directories(status_casters INTERFACE -$) +target_include_directories(status_casters + INTERFACE $) -target_link_libraries(status_casters INTERFACE - import_status_module - status_caster - statusor_caster -) +target_link_libraries(status_casters INTERFACE import_status_module + status_caster statusor_caster) add_subdirectory(tests) diff --git a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt index 5f2d1e5..6ad81b9 100644 --- a/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt +++ b/pybind11_abseil/cpp_capsule_tools/CMakeLists.txt @@ -1,51 +1,48 @@ # void_ptr_from_capsule ======================================================== -add_library(void_ptr_from_capsule STATIC - void_ptr_from_capsule.cc -) -add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS void_ptr_from_capsule) +add_library(void_ptr_from_capsule STATIC void_ptr_from_capsule.cc) +add_library(pybind11_abseil::cpp_capsule_tools::void_ptr_from_capsule ALIAS + void_ptr_from_capsule) -target_include_directories(void_ptr_from_capsule INTERFACE -$) +target_include_directories(void_ptr_from_capsule + INTERFACE $) -target_link_libraries(void_ptr_from_capsule PUBLIC - absl::status - absl::statusor - absl::strings -) +target_link_libraries(void_ptr_from_capsule PUBLIC absl::status absl::statusor + absl::strings) # raw_ptr_from_capsule ========================================================= add_library(raw_ptr_from_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS raw_ptr_from_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::raw_ptr_from_capsule ALIAS + raw_ptr_from_capsule) -target_include_directories(raw_ptr_from_capsule INTERFACE -$) +target_include_directories(raw_ptr_from_capsule + INTERFACE $) -target_link_libraries(raw_ptr_from_capsule INTERFACE - void_ptr_from_capsule - absl::statusor - # python_headers does not need to be linked +target_link_libraries( + raw_ptr_from_capsule INTERFACE void_ptr_from_capsule absl::statusor + # python_headers does not need to be linked ) # make_shared_ptr_capsule ====================================================== add_library(make_shared_ptr_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS make_shared_ptr_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::make_shared_ptr_capsule ALIAS + make_shared_ptr_capsule) -target_include_directories(make_shared_ptr_capsule INTERFACE -$) +target_include_directories(make_shared_ptr_capsule + INTERFACE $) # shared_ptr_from_capsule ====================================================== add_library(shared_ptr_from_capsule INTERFACE) -add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS shared_ptr_from_capsule) +add_library(pybind11_abseil::cpp_capsule_tools::shared_ptr_from_capsule ALIAS + shared_ptr_from_capsule) -target_include_directories(shared_ptr_from_capsule INTERFACE -$) +target_include_directories(shared_ptr_from_capsule + INTERFACE $) -target_link_libraries(shared_ptr_from_capsule INTERFACE - void_ptr_from_capsule - absl::statusor - # python_headers does not need to be linked +target_link_libraries( + shared_ptr_from_capsule INTERFACE void_ptr_from_capsule absl::statusor + # python_headers does not need to be linked ) diff --git a/pybind11_abseil/tests/CMakeLists.txt b/pybind11_abseil/tests/CMakeLists.txt index 6260f95..9ac8091 100644 --- a/pybind11_abseil/tests/CMakeLists.txt +++ b/pybind11_abseil/tests/CMakeLists.txt @@ -1,97 +1,89 @@ - # cpp_capsule_tools_testing ==================================================== pybind11_add_module(cpp_capsule_tools_testing SHARED - cpp_capsule_tools_testing.cc -) - -target_link_libraries(cpp_capsule_tools_testing PUBLIC - make_shared_ptr_capsule - raw_ptr_from_capsule - shared_ptr_from_capsule - absl::statusor -) + cpp_capsule_tools_testing.cc) + +target_link_libraries( + cpp_capsule_tools_testing PUBLIC make_shared_ptr_capsule raw_ptr_from_capsule + shared_ptr_from_capsule absl::statusor) # cpp_capsule_tools_testing_test =============================================== -add_test(NAME cpp_capsule_tools_testing_test - COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cpp_capsule_tools_testing_test.py +add_test( + NAME cpp_capsule_tools_testing_test + COMMAND + ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/cpp_capsule_tools_testing_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) # absl_example ================================================================= -pybind11_add_module(absl_example SHARED - absl_example.cc -) +pybind11_add_module(absl_example SHARED absl_example.cc) -target_link_libraries(absl_example PRIVATE - absl_casters - absl::btree - absl::flat_hash_set - absl::strings - absl::time - absl::optional - absl::span -) +target_link_libraries( + absl_example + PRIVATE absl_casters + absl::btree + absl::flat_hash_set + absl::strings + absl::time + absl::optional + absl::span) # absl_test ==================================================================== -add_test(NAME absl_test +add_test( + NAME absl_test COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/absl_test.py + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/absl_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - # ok_status_singleton_test ===================================================== -add_test(NAME ok_status_singleton_test - COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ok_status_singleton_test.py +add_test( + NAME ok_status_singleton_test + COMMAND + ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ok_status_singleton_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) # missing_import =============================================================== -pybind11_add_module(missing_import SHARED - missing_import.cc -) +pybind11_add_module(missing_import SHARED missing_import.cc) target_compile_options(missing_import PUBLIC -UNDEBUG) -target_link_libraries(missing_import PRIVATE - status_casters - absl::status - absl::statusor -) +target_link_libraries(missing_import PRIVATE status_casters absl::status + absl::statusor) # missing_import_test ========================================================== -add_test(NAME missing_import_test - COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/missing_import_test.py +add_test( + NAME missing_import_test + COMMAND + ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/missing_import_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) # status_test ================================================================== -add_test(NAME status_test +add_test( + NAME status_test COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_test.py + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - # status_example =============================================================== -pybind11_add_module(status_example SHARED - status_example.cc -) +pybind11_add_module(status_example SHARED status_example.cc) -target_link_libraries(status_example PRIVATE - status_casters - absl::status - absl::statusor -) +target_link_libraries(status_example PRIVATE status_casters absl::status + absl::statusor) # status_example_test ========================================================== -add_test(NAME status_example_test - COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py +add_test( + NAME status_example_test + COMMAND + ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})