From 42cd9aedca5834577d122a6f2eba3dcd0730c7d6 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 18 Oct 2023 16:06:09 -0400 Subject: [PATCH 01/12] initial implementation --- CMakeLists.txt | 43 +++++++++++++++++++++++++++++++ EXAMPLES | 9 +++++++ cmake/xo_pywebutilConfig.cmake.in | 4 +++ include/README.md | 1 + src/pywebutil/CMakeLists.txt | 7 +++++ src/pywebutil/pywebutil.cpp | 34 ++++++++++++++++++++++++ src/pywebutil/pywebutil.hpp.in | 25 ++++++++++++++++++ 7 files changed, 123 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 EXAMPLES create mode 100644 cmake/xo_pywebutilConfig.cmake.in create mode 100644 include/README.md create mode 100644 src/pywebutil/CMakeLists.txt create mode 100644 src/pywebutil/pywebutil.cpp create mode 100644 src/pywebutil/pywebutil.hpp.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..ed35dc91 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,43 @@ +# xo-pywebutil/CMakeLists.txt + +cmake_minimum_required(VERSION 3.10) + +project(xo_pywebutil VERSION 0.1) +enable_language(CXX) + +# common XO cmake macros (see github.com:Rconybea/xo-cmake) +include(xo_macros/xo_cxx) +include(xo_macros/code-coverage) + +# ---------------------------------------------------------------- +# unit test setup + +enable_testing() +# activate code coverage for all executables + libraries (when configured with -DCODE_COVERAGE=ON) +add_code_coverage() +# 1. assuming that /nix/store/ prefixes .hpp files belonging to gcc, catch2 etc. +# we're not interested in code coverage for these sources. +# 2. exclude the utest/ subdir, we don't need coverage on the unit tests themselves; +# rather, want coverage on the code that the unit tests exercise. +# +# NOTE: this seems to work only with the 'ccov-all' target. In particular, doesn't seem to do anything with the 'ccov' target +# +add_code_coverage_all_targets(EXCLUDE /nix/store/* ${PROJECT_SOURCE_DIR}/utest/* ${PROJECT_BINARY_DIR}/local/* ${PROJECT_SOURCE_DIR}/repo/*) + +# ---------------------------------------------------------------- +# c++ settings (usually temporary) + +set(PROJECT_CXX_FLAGS "") +add_definitions(${PROJECT_CXX_FLAGS}) + +xo_toplevel_compile_options() + +# ---------------------------------------------------------------- +# sources + +add_subdirectory(src/pywebutil) + +# ---------------------------------------------------------------- +# provide find_package() support + +xo_export_cmake_config(${PROJECT_NAME} ${PROJECT_VERSION} ${PROJECT_NAME}Targets) diff --git a/EXAMPLES b/EXAMPLES new file mode 100644 index 00000000..a495d316 --- /dev/null +++ b/EXAMPLES @@ -0,0 +1,9 @@ +Creating this pybind11 library to hold low-dependency wrappers +used for interaction between {websock/, pywebsock/} and other subsystems. + +1. This library needs to be a (runtime) dependency of pyxxx libraries that + use reactor::EventStore, for example pyprocess/, to supply wrappers + for EndpointDescr and Alist. + +2. If we chose to put this code in pywebsock/, then pywebsock + libwebsocket + would become runtime dependencies of libraries like pyprocess/. diff --git a/cmake/xo_pywebutilConfig.cmake.in b/cmake/xo_pywebutilConfig.cmake.in new file mode 100644 index 00000000..9c15f36a --- /dev/null +++ b/cmake/xo_pywebutilConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/include/README.md b/include/README.md new file mode 100644 index 00000000..3df846f2 --- /dev/null +++ b/include/README.md @@ -0,0 +1 @@ +placeholder for future pywebutil #include files diff --git a/src/pywebutil/CMakeLists.txt b/src/pywebutil/CMakeLists.txt new file mode 100644 index 00000000..0a8dc225 --- /dev/null +++ b/src/pywebutil/CMakeLists.txt @@ -0,0 +1,7 @@ +# xo-pywebutil/src/pywebutil/CMakeLists.txt + +set(SELF_LIB pywebutil) +set(SELF_SRCS pywebutil.cpp) + +xo_pybind11_library(${SELF_LIB} ${PROJECT_NAME}Targets ${SELF_SRCS}) +xo_pybind11_dependency(${SELF_LIB} webutil) diff --git a/src/pywebutil/pywebutil.cpp b/src/pywebutil/pywebutil.cpp new file mode 100644 index 00000000..dbaa8ef6 --- /dev/null +++ b/src/pywebutil/pywebutil.cpp @@ -0,0 +1,34 @@ +/* @file pywebutil.cpp */ + +#include "pywebutil.hpp" +#include "xo/webutil/HttpEndpointDescr.hpp" +#include "xo/webutil/StreamEndpointDescr.hpp" +#include "xo/pyutil/pyutil.hpp" +#include + +namespace xo { + //using xo::web::Alist; + using xo::web::HttpEndpointDescr; + using xo::ref::rp; + //using xo::time::utc_nanos; + namespace py = pybind11; + + namespace web { + PYBIND11_MODULE(PYWEBUTIL_MODULE_NAME(), m) { + //PYxxx_IMPORT_MODULE(); + + /* module docstring */ + m.doc() = "pybind11 plugin for xo.web_util"; + + py::class_(m, "EndpointDescr") + .def_property_readonly("uri_pattern", &HttpEndpointDescr::uri_pattern) + .def("__repr__", &HttpEndpointDescr::display_string); + + py::class_(m, "StreamEndpointDescr") + .def_property_readonly("uri_pattern", &StreamEndpointDescr::uri_pattern) + .def("__repr__", &StreamEndpointDescr::display_string); + } /*web*/ + } /*namespace web*/ +} /*namespace xo*/ + +/* end pywebutil.cpp */ diff --git a/src/pywebutil/pywebutil.hpp.in b/src/pywebutil/pywebutil.hpp.in new file mode 100644 index 00000000..086701c1 --- /dev/null +++ b/src/pywebutil/pywebutil.hpp.in @@ -0,0 +1,25 @@ +/* @file pywebutil.hpp + * + * automatically generated from src/pywebutil/pywebutil.hpp.in + * see src/pywebutil/CMakeLists.txt + */ + +/* python requires module name = library name + * example: + * PYBIND11_MODULE(PYWEBUTIL_MODULE_NAME(), m) { ... } + */ +#define PYWEBUTIL_MODULE_NAME() @SELF_LIB@ + +/* example: + * py::module_::import(PYWEBUTIL_MODULE_NAME_STR) + */ +#define PYWEBUTIL_MODULE_NAME_STR "@SELF_LIB@" + +/* example: + * PYWEBUTIL_IMPORT_MODULE() + * replaces + * py::module_::import("pywebutil") + */ +#define PYWEBUTIL_IMPORT_MODULE() py::module_::import("@SELF_LIB@") + +/* end pywebutil.hpp */ From 368b65465585dfbdbfac9a3f63fbc205eb7b4ccf Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 18 Oct 2023 16:06:41 -0400 Subject: [PATCH 02/12] + .gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f52f1311 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# lsp keeps state here +.cache +# typical build directory +build +# lsp: symlink to file in build directory (established manually) +compile_commands.json From c3bc9f1b2e6c5cc46987c976fadfc08e6d964f20 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 18 Oct 2023 16:12:48 -0400 Subject: [PATCH 03/12] github: + workflow --- .github/workflows/main.yml | 177 +++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..0b2676ed --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,177 @@ +name: build xo-pywebutil + dependencies + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + + steps: + - name: checkout source + uses: actions/checkout@v3 + + - name: Install catch2 + # install catch2. see [[https://stackoverflow.com/questions/57982945/how-to-apt-get-install-in-a-github-actions-workflow]] + run: sudo apt-get install -y catch2 + + - name: Install pybind11-dev + run: sudo apt-get install -y pybind11-dev + + # ---------------------------------------------------------------- + + - name: Clone xo-cmake + uses: actions/checkout@v3 + with: + repository: Rconybea/xo-cmake + path: repo/xo-cmake + + - name: Configure xo-cmake + run: cmake -B ${{github.workspace}}/build_xo-cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/xo-cmake + + - name: Build xo-cmake (trivial) + run: cmake --build ${{github.workspace}}/build_xo-cmake --config ${{env.BUILD_TYPE}} + + - name: Install xo-cmake + run: cmake --install ${{github.workspace}}/build_xo-cmake + + # ---------------------------------------------------------------- + + - name: Clone indentlog + uses: actions/checkout@v3 + with: + repository: Rconybea/indentlog + path: repo/indentlog + + - name: Configure indentlog + # configure cmake for indentlog in dedicated build directory. + run: cmake -B ${{github.workspace}}/build_indentlog -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/indentlog + + - name: Build indentlog + run: cmake --build ${{github.workspace}}/build_indentlog --config ${{env.BUILD_TYPE}} + + - name: Install indentlog + # install into ${{github.workspace}}/local + run: cmake --install ${{github.workspace}}/build_indentlog + +# # ---------------------------------------------------------------- +# +# - name: Clone subsys +# uses: actions/checkout@v3 +# with: +# repository: Rconybea/subsys +# path: repo/subsys +# +# - name: Configure subsys +# # configure cmake for subsys in dedicated build directory. +# run: cmake -B ${{github.workspace}}/build_subsys -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/subsys +# +# - name: Build subsys +# run: cmake --build ${{github.workspace}}/build_subsys --config ${{env.BUILD_TYPE}} +# +# - name: Install subsys +# # install into ${{github.workspace}}/local +# run: cmake --install ${{github.workspace}}/build_subsys + + # ---------------------------------------------------------------- + + - name: Clone refcnt + uses: actions/checkout@v3 + with: + repository: Rconybea/refcnt + path: repo/refcnt + + - name: Configure refcnt + # configure cmake for refcnt in dedicated build directory. + run: cmake -B ${{github.workspace}}/build_refcnt -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/refcnt + + - name: Build refcnt + run: cmake --build ${{github.workspace}}/build_refcnt --config ${{env.BUILD_TYPE}} + + - name: Install refcnt + # install into ${{github.workspace}}/local + run: cmake --install ${{github.workspace}}/build_refcnt + + # ---------------------------------------------------------------- + + - name: Clone callback + uses: actions/checkout@v3 + with: + repository: Rconybea/xo-callback + path: repo/callback + + - name: Configure callback + # configure cmake for callback in dedicated build directory. + run: cmake -B ${{github.workspace}}/build_callback -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/callback + + - name: Build callback + run: cmake --build ${{github.workspace}}/build_callback --config ${{env.BUILD_TYPE}} + + - name: Install callback + # install into ${{github.workspace}}/local + run: cmake --install ${{github.workspace}}/build_callback + + # ---------------------------------------------------------------- + + - name: Clone webutil + uses: actions/checkout@v3 + with: + repository: Rconybea/xo-webutil + path: repo/webutil + + - name: Configure webutil + # configure cmake for webutil in dedicated build directory. + run: cmake -B ${{github.workspace}}/build_webutil -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/webutil + + - name: Build webutil + run: cmake --build ${{github.workspace}}/build_webutil --config ${{env.BUILD_TYPE}} + + - name: Install webutil + # install into ${{github.workspace}}/local + run: cmake --install ${{github.workspace}}/build_webutil + + # ---------------------------------------------------------------- + + - name: Clone pyutil + uses: actions/checkout@v3 + with: + repository: Rconybea/xo-pyutil + path: repo/pyutil + + - name: Configure pyutil + # configure cmake for pyutil in dedicated build directory. + run: cmake -B ${{github.workspace}}/build_pyutil -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/pyutil + + - name: Build pyutil + run: cmake --build ${{github.workspace}}/build_pyutil --config ${{env.BUILD_TYPE}} + + - name: Install pyutil + # install into ${{github.workspace}}/local + run: cmake --install ${{github.workspace}}/build_pyutil + + # ---------------------------------------------------------------- + + - name: Configure self (pywebutil) + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build_pywebutil -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build self (pywebutil) + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build_pywebutil --config ${{env.BUILD_TYPE}} + + - name: Test self (pywebutil) + working-directory: ${{github.workspace}}/build_pywebutil + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -C ${{env.BUILD_TYPE}} From 0b5fffc1208327a2162a71ba6f6325b7df60c545 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 18 Oct 2023 16:13:56 -0400 Subject: [PATCH 04/12] doc: + README.md --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..293fa8a4 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# python bindings for c++ webutil library (xo-webutil) + +## Getting Started + +### build + install dependencies + +- [github/Rconybea/xo-pyutil](https://github.com/Rconybea/xo-pyutil) +- [github/Rconybea/xo-webutil](https://github.com/Rconybea/xo-webutil) + +### build + install + +``` +$ cd xo-pywebutil +$ mkdir build +$ cd build +$ INSTALL_PREFIX=/usr/local # or wherever you prefer, e.g. ~/local +$ cmake \ + -DCMAKE_MODULE_PATH=${INSTALL_PREFIX}/share/cmake \ + -DCMAKE_PREFIX_PATH=${INSTALL_PREFIX} \ + -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} .. +$ make +$ make install +``` +(also see .github/workflows/main.yml) + +## Development + +### build for unit test coverage +``` +$ cd xo-pywebutil +$ mkdir build-ccov +$ cd build-ccov +$ cmake \ + -DCMAKE_MODULE_PATH=${INSTALL_PREFIX}/share/cmake \ + -DCMAKE_PREFIX_PATH=${INSTALL_PREFIX} \ + -DCODE_COVERAGE=ON \ + -DCMAKE_BUILD_TYPE=Debug .. +``` + +### LSP (language server) support + +LSP looks for compile commands in the root of the source tree; +while Cmake creates them in the root of its build directory. + +``` +$ cd xo-pywebutil +$ ln -s build/compile_commands.json # supply compile commands to LSP +``` + +### display cmake variables + +- `-L` list variables +- `-A` include 'advanced' variables +- `-H` include help text + +``` +$ cd xo-pywebutil/build +$ cmake -LAH +``` From 8036f787e16541a03b7bc48a70b9524ecba04527 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 22 Oct 2023 14:57:48 -0400 Subject: [PATCH 05/12] build: + pyutil dep --- src/pywebutil/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pywebutil/CMakeLists.txt b/src/pywebutil/CMakeLists.txt index 0a8dc225..95f8df26 100644 --- a/src/pywebutil/CMakeLists.txt +++ b/src/pywebutil/CMakeLists.txt @@ -5,3 +5,4 @@ set(SELF_SRCS pywebutil.cpp) xo_pybind11_library(${SELF_LIB} ${PROJECT_NAME}Targets ${SELF_SRCS}) xo_pybind11_dependency(${SELF_LIB} webutil) +xo_pybind11_dependency(${SELF_LIB} xo_pyutil) From 3645ffaf734b4548fabd226a047db2f507e1a0d3 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 24 Oct 2023 16:34:44 -0400 Subject: [PATCH 06/12] build: supply xo_pyutil dep with find_package() support --- cmake/xo_pywebutilConfig.cmake.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/xo_pywebutilConfig.cmake.in b/cmake/xo_pywebutilConfig.cmake.in index 9c15f36a..18eaf04d 100644 --- a/cmake/xo_pywebutilConfig.cmake.in +++ b/cmake/xo_pywebutilConfig.cmake.in @@ -1,4 +1,6 @@ @PACKAGE_INIT@ +include(CMakeFindDependencyMacro) +find_dependency(xo_pyutil) include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") check_required_components("@PROJECT_NAME@") From abd1fb2040d69f8d958c4e1789c827dfa801c706 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 24 Oct 2023 17:09:10 -0400 Subject: [PATCH 07/12] build: pywebutil -> xo_pywebutil --- src/pywebutil/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pywebutil/CMakeLists.txt b/src/pywebutil/CMakeLists.txt index 95f8df26..cc68d6e1 100644 --- a/src/pywebutil/CMakeLists.txt +++ b/src/pywebutil/CMakeLists.txt @@ -1,6 +1,6 @@ # xo-pywebutil/src/pywebutil/CMakeLists.txt -set(SELF_LIB pywebutil) +set(SELF_LIB xo_pywebutil) set(SELF_SRCS pywebutil.cpp) xo_pybind11_library(${SELF_LIB} ${PROJECT_NAME}Targets ${SELF_SRCS}) From e72c0d27af5ab35a346dc471b001d13c05d7c320 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 24 Oct 2023 22:10:11 -0400 Subject: [PATCH 08/12] build: bugfix: pywebutil -> xo_pywebutil --- src/pywebutil/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pywebutil/CMakeLists.txt b/src/pywebutil/CMakeLists.txt index 95f8df26..cc68d6e1 100644 --- a/src/pywebutil/CMakeLists.txt +++ b/src/pywebutil/CMakeLists.txt @@ -1,6 +1,6 @@ # xo-pywebutil/src/pywebutil/CMakeLists.txt -set(SELF_LIB pywebutil) +set(SELF_LIB xo_pywebutil) set(SELF_SRCS pywebutil.cpp) xo_pybind11_library(${SELF_LIB} ${PROJECT_NAME}Targets ${SELF_SRCS}) From 9893b7148388be2a2bfc5bd3ada6bbd31df7e12f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 15 Mar 2024 19:35:34 -0400 Subject: [PATCH 09/12] build: streamline CMAKE_MODULE_PATH interaction --- .gitignore | 2 +- CMakeLists.txt | 3 +-- README.md | 11 +++++++++++ cmake/xo-bootstrap-macros.cmake | 12 ++++++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 cmake/xo-bootstrap-macros.cmake diff --git a/.gitignore b/.gitignore index f52f1311..53a9c92f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # lsp keeps state here .cache # typical build directory -build +.build* # lsp: symlink to file in build directory (established manually) compile_commands.json diff --git a/CMakeLists.txt b/CMakeLists.txt index ed35dc91..22a91f72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,8 +6,7 @@ project(xo_pywebutil VERSION 0.1) enable_language(CXX) # common XO cmake macros (see github.com:Rconybea/xo-cmake) -include(xo_macros/xo_cxx) -include(xo_macros/code-coverage) +include(cmake/xo-bootstrap-macros.cmake) # ---------------------------------------------------------------- # unit test setup diff --git a/README.md b/README.md index 293fa8a4..52d702da 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,17 @@ $ make install ``` (also see .github/workflows/main.yml) +## Examples + +Assumes `xo-pywebutil` installed to `~/local2/lib` +``` +$ PYTHONPATH=~/local2/lib:$PYTHONPATH python +>>> import xo_pywebutil +>>> dir(xo_pywebutil) +['EndpointDescr', 'StreamEndpointDescr', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__'] +>>> from xo_pywebutil import * +``` + ## Development ### build for unit test coverage diff --git a/cmake/xo-bootstrap-macros.cmake b/cmake/xo-bootstrap-macros.cmake new file mode 100644 index 00000000..16644435 --- /dev/null +++ b/cmake/xo-bootstrap-macros.cmake @@ -0,0 +1,12 @@ +if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL "prefix")) + # default to typical install location for xo-project-macros + set(CMAKE_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/share/cmake) +endif() + +message("-- CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") +message("-- CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") + +# needs to have been installed somewhere on CMAKE_MODULE_PATH, +# (e.g. from xo-cmake with the same value for CMAKE_INSTALL_PREFIX) +# +include(xo_macros/xo-project-macros) From 1051e0e60f13639bd9e5aafcadd05c6f966bef85 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 29 Mar 2024 14:33:41 -0400 Subject: [PATCH 10/12] build: suppress bootstrap message in submodule build --- cmake/xo-bootstrap-macros.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/xo-bootstrap-macros.cmake b/cmake/xo-bootstrap-macros.cmake index 16644435..96592216 100644 --- a/cmake/xo-bootstrap-macros.cmake +++ b/cmake/xo-bootstrap-macros.cmake @@ -3,8 +3,10 @@ if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL "pr set(CMAKE_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/share/cmake) endif() -message("-- CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") -message("-- CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") +if (NOT XO_SUBMODULE_BUILD) + message("-- CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") + message("-- CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") +endif() # needs to have been installed somewhere on CMAKE_MODULE_PATH, # (e.g. from xo-cmake with the same value for CMAKE_INSTALL_PREFIX) From 9caa56f5e9fc4906967340a4d83d38ea361c08cd Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 14 Sep 2024 13:34:11 -0500 Subject: [PATCH 11/12] xo-pywebutil: build: update to latest xo-cmake macros --- CMakeLists.txt | 20 ++------------------ cmake/xo-bootstrap-macros.cmake | 33 +++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 22a91f72..9851b8cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,25 +3,11 @@ cmake_minimum_required(VERSION 3.10) project(xo_pywebutil VERSION 0.1) -enable_language(CXX) -# common XO cmake macros (see github.com:Rconybea/xo-cmake) +include(GNUInstallDirs) include(cmake/xo-bootstrap-macros.cmake) -# ---------------------------------------------------------------- -# unit test setup - -enable_testing() -# activate code coverage for all executables + libraries (when configured with -DCODE_COVERAGE=ON) -add_code_coverage() -# 1. assuming that /nix/store/ prefixes .hpp files belonging to gcc, catch2 etc. -# we're not interested in code coverage for these sources. -# 2. exclude the utest/ subdir, we don't need coverage on the unit tests themselves; -# rather, want coverage on the code that the unit tests exercise. -# -# NOTE: this seems to work only with the 'ccov-all' target. In particular, doesn't seem to do anything with the 'ccov' target -# -add_code_coverage_all_targets(EXCLUDE /nix/store/* ${PROJECT_SOURCE_DIR}/utest/* ${PROJECT_BINARY_DIR}/local/* ${PROJECT_SOURCE_DIR}/repo/*) +xo_cxx_toplevel_options3() # ---------------------------------------------------------------- # c++ settings (usually temporary) @@ -29,8 +15,6 @@ add_code_coverage_all_targets(EXCLUDE /nix/store/* ${PROJECT_SOURCE_DIR}/utest/* set(PROJECT_CXX_FLAGS "") add_definitions(${PROJECT_CXX_FLAGS}) -xo_toplevel_compile_options() - # ---------------------------------------------------------------- # sources diff --git a/cmake/xo-bootstrap-macros.cmake b/cmake/xo-bootstrap-macros.cmake index 96592216..aba31169 100644 --- a/cmake/xo-bootstrap-macros.cmake +++ b/cmake/xo-bootstrap-macros.cmake @@ -1,14 +1,35 @@ -if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL "prefix")) - # default to typical install location for xo-project-macros - set(CMAKE_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/share/cmake) +# ---------------------------------------------------------------- +# for example: +# $ PREFIX=/usr/local # for example +# $ cmake -DCMAKE_MODULE_PATH=prefix -DCMAKE_INSTALL_PREFIX=$PREFIX -B .build +# +# will get +# CMAKE_MODULE_PATH +# from xo-cmake-config --cmake-module-path +# +# and expect .cmake macros in +# CMAKE_MODULE_PATH/xo_macros/xo_cxx.cmake +# ---------------------------------------------------------------- + +find_program(XO_CMAKE_CONFIG_EXECUTABLE NAMES xo-cmake-config REQUIRED) + +if ("${XO_CMAKE_CONFIG_EXECUTABLE}" STREQUAL "XO_CMAKE_CONFIG_EXECUTABLE-NOT_FOUND") + message(FATAL "could not find xo-cmake-config executable") endif() +message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}") + if (NOT XO_SUBMODULE_BUILD) - message("-- CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") - message("-- CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") + if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL prefix)) + # default to typical install location for xo-project-macros + execute_process(COMMAND ${XO_CMAKE_CONFIG_EXECUTABLE} --cmake-module-path OUTPUT_VARIABLE CMAKE_MODULE_PATH) + message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") + endif() endif() # needs to have been installed somewhere on CMAKE_MODULE_PATH, # (e.g. from xo-cmake with the same value for CMAKE_INSTALL_PREFIX) # -include(xo_macros/xo-project-macros) +include(xo_macros/xo_cxx) + +xo_cxx_bootstrap_message() From 578b3d724a3534de031d10cde092859547aaac32 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 14 Sep 2024 13:34:23 -0500 Subject: [PATCH 12/12] xo-pywebutil: bugfix: track ns change xo::ref::rp -> xo::rp --- src/pywebutil/pywebutil.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pywebutil/pywebutil.cpp b/src/pywebutil/pywebutil.cpp index dbaa8ef6..8618eba9 100644 --- a/src/pywebutil/pywebutil.cpp +++ b/src/pywebutil/pywebutil.cpp @@ -9,7 +9,6 @@ namespace xo { //using xo::web::Alist; using xo::web::HttpEndpointDescr; - using xo::ref::rp; //using xo::time::utc_nanos; namespace py = pybind11;