From 5896c28cd23ba76c9cd02253a59240a3dcbb42e0 Mon Sep 17 00:00:00 2001 From: Petteri Aimonen Date: Thu, 19 Oct 2023 13:02:30 +0300 Subject: Make CMakeLists install as Python module 'nanopb', not 'proto' (#845) Makes the installation consistent with "pip install nanopb" results, and avoids naming conflicts with other libraries. --- CMakeLists.txt | 23 ++++++++++++++++++----- extra/script_wrappers/nanopb_generator.py | 6 ++++++ generator/__init__.py | 0 generator/nanopb_generator | 7 +++++++ generator/nanopb_generator.bat | 5 +++++ 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100755 extra/script_wrappers/nanopb_generator.py create mode 100644 generator/__init__.py create mode 100755 generator/nanopb_generator create mode 100644 generator/nanopb_generator.bat diff --git a/CMakeLists.txt b/CMakeLists.txt index 6395bf3..0a6a7b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,11 +41,12 @@ if(NOT DEFINED CMAKE_INSTALL_CMAKEDIR) set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb") endif() +# Determine Python module installation path if (NOT nanopb_PYTHON_INSTDIR_OVERRIDE) find_package(Python REQUIRED COMPONENTS Interpreter) execute_process( COMMAND ${Python_EXECUTABLE} -c - "import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))" + "import os.path, sys, sysconfig; print(sysconfig.get_path('purelib'))" OUTPUT_VARIABLE PYTHON_INSTDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -54,6 +55,7 @@ else() endif() message(STATUS "Python install dir: ${PYTHON_INSTDIR}") +# Install nanopb generator as Python module 'nanopb' if(nanopb_BUILD_GENERATOR) set(generator_protos nanopb) @@ -69,27 +71,38 @@ if(nanopb_BUILD_GENERATOR) install( FILES ${PROJECT_BINARY_DIR}/${generator_proto_py_file} ${generator_proto_file} - DESTINATION ${PYTHON_INSTDIR}/proto/ + DESTINATION ${PYTHON_INSTDIR}/nanopb/generator/proto/ ) endforeach() install( FILES generator/proto/_utils.py generator/proto/__init__.py - DESTINATION ${PYTHON_INSTDIR}/proto/ ) + DESTINATION ${PYTHON_INSTDIR}/nanopb/generator/proto/ ) + + install( FILES generator/nanopb_generator.py + generator/__init__.py + DESTINATION ${PYTHON_INSTDIR}/nanopb/generator/ ) + + install( FILES generator/__init__.py + DESTINATION ${PYTHON_INSTDIR}/nanopb/ ) + endif() +# Install small script wrappers to invoke the generator from the installed module if(WIN32) install( PROGRAMS - generator/nanopb_generator.py + extra/script_wrappers/nanopb_generator.py generator/protoc-gen-nanopb.bat + generator/nanopb_generator.bat DESTINATION ${CMAKE_INSTALL_BINDIR} ) else() install( PROGRAMS - generator/nanopb_generator.py + extra/script_wrappers/nanopb_generator.py generator/protoc-gen-nanopb + generator/nanopb_generator DESTINATION ${CMAKE_INSTALL_BINDIR} ) endif() diff --git a/extra/script_wrappers/nanopb_generator.py b/extra/script_wrappers/nanopb_generator.py new file mode 100755 index 0000000..493a91f --- /dev/null +++ b/extra/script_wrappers/nanopb_generator.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +# This script is a wrapper to invoke nanopb_generator from an installed Python module. +import sys +from nanopb.generator.nanopb_generator import main_cli, main_plugin +if __name__ == '__main__': + sys.exit(main_cli()) diff --git a/generator/__init__.py b/generator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/generator/nanopb_generator b/generator/nanopb_generator new file mode 100755 index 0000000..429aa13 --- /dev/null +++ b/generator/nanopb_generator @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +# Allow calling nanopb_generator.py as simply nanopb_generator. +# This provides consistency with packages installed through CMake or pip. + +from nanopb_generator import * +if __name__ == '__main__': + main_cli() diff --git a/generator/nanopb_generator.bat b/generator/nanopb_generator.bat new file mode 100644 index 0000000..d208316 --- /dev/null +++ b/generator/nanopb_generator.bat @@ -0,0 +1,5 @@ +@echo off +:: Allow calling nanopb_generator.py as simply nanopb_generator. +:: This provides consistency with packages installed through CMake or pip. +set mydir=%~dp0 +python "%mydir%\nanopb_generator.py" %* -- cgit v1.2.3