Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nanopb/nanopb.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2023-10-26 12:26:15 +0300
committerPetteri Aimonen <jpa@github.mail.kapsi.fi>2023-10-27 13:37:50 +0300
commit6bbb70af1a7dc47e737957e1ad469581dcbf99f6 (patch)
tree2dd2b40297ea4c0b0f736669215226b03e9c4933 /CMakeLists.txt
parentf5593b78ba0984c8a4d8382f93b17ee7dd490ba8 (diff)
CMake: Installation improvements.
- Allow installed nanopb_generator.py wrapper script find the module by relative path. - Install include files under `nanopb` subdirectory.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt83
1 files changed, 45 insertions, 38 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5a2c3d0..473a77c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,52 +44,59 @@ 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(sysconfig.get_path('purelib'))"
- OUTPUT_VARIABLE PYTHON_INSTDIR
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
+ file(TO_CMAKE_PATH "${Python_SITELIB}" PYTHON_INSTDIR)
else()
set(PYTHON_INSTDIR ${nanopb_PYTHON_INSTDIR_OVERRIDE})
endif()
message(STATUS "Python install dir: ${PYTHON_INSTDIR}")
-# Install nanopb generator as Python module 'nanopb'
+# Package nanopb generator as Python module 'nanopb'
if(nanopb_BUILD_GENERATOR)
- set(generator_protos nanopb)
-
- foreach(generator_proto IN LISTS generator_protos)
- string(REGEX REPLACE "([^;]+)" "${PROJECT_SOURCE_DIR}/generator/proto/\\1.proto" generator_proto_file "${generator_proto}")
- string(REGEX REPLACE "([^;]+)" "\\1_pb2.py" generator_proto_py_file "${generator_proto}")
- add_custom_command(
- OUTPUT ${generator_proto_py_file}
- COMMAND ${nanopb_PROTOC_PATH} --python_out=${PROJECT_BINARY_DIR} -I${PROJECT_SOURCE_DIR}/generator/proto ${generator_proto_file}
- DEPENDS ${generator_proto_file}
- )
- add_custom_target("generate_${generator_proto_py_file}" ALL DEPENDS ${generator_proto_py_file})
- install(
- FILES ${PROJECT_BINARY_DIR}/${generator_proto_py_file}
- ${generator_proto_file}
- DESTINATION ${PYTHON_INSTDIR}/nanopb/generator/proto/
- )
- endforeach()
+ # Copy Python code files related to the generator
+ add_custom_target(nanopb_generator ALL
+ COMMAND ${CMAKE_COMMAND} -E make_directory
+ ${PROJECT_BINARY_DIR}/nanopb/generator/proto
+
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${PROJECT_SOURCE_DIR}/generator/proto/_utils.py
+ ${PROJECT_SOURCE_DIR}/generator/proto/__init__.py
+ ${PROJECT_SOURCE_DIR}/generator/proto/nanopb.proto
+ ${PROJECT_BINARY_DIR}/nanopb/generator/proto
+
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${PROJECT_SOURCE_DIR}/generator/nanopb_generator.py
+ ${PROJECT_SOURCE_DIR}/generator/__init__.py
+ ${PROJECT_BINARY_DIR}/nanopb/generator
+
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${PROJECT_SOURCE_DIR}/generator/__init__.py
+ ${PROJECT_BINARY_DIR}/nanopb
+
+ COMMAND ${nanopb_PROTOC_PATH}
+ --python_out=${PROJECT_BINARY_DIR}/nanopb/generator/proto
+ -I${PROJECT_SOURCE_DIR}/generator/proto
+ ${PROJECT_SOURCE_DIR}/generator/proto/nanopb.proto
+ )
- install( FILES generator/proto/_utils.py
- generator/proto/__init__.py
- 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/ )
+ # Install Python module files
+ install(
+ DIRECTORY ${PROJECT_BINARY_DIR}/nanopb
+ DESTINATION ${PYTHON_INSTDIR}
+ FILES_MATCHING
+ PATTERN *.py
+ PATTERN *.proto
+ PATTERN __pycache__ EXCLUDE
+ )
- # Install a script that calls nanopb.generator Python module when invoked
+ # Generate a wrapper script that calls nanopb.generator Python module when invoked
+ configure_file(
+ extra/script_wrappers/nanopb_generator.py.in
+ ${PROJECT_BINARY_DIR}/nanopb_generator.py
+ )
install(
- PROGRAMS
- extra/script_wrappers/nanopb_generator.py
+ PROGRAMS ${PROJECT_BINARY_DIR}/nanopb_generator.py
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
@@ -139,7 +146,7 @@ if(nanopb_BUILD_RUNTIME)
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
target_include_directories(protobuf-nanopb INTERFACE
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
endif()
@@ -158,7 +165,7 @@ if(nanopb_BUILD_RUNTIME)
install(TARGETS protobuf-nanopb-static EXPORT nanopb-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_include_directories(protobuf-nanopb-static INTERFACE
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
endif()
@@ -175,5 +182,5 @@ if(nanopb_BUILD_RUNTIME)
DESTINATION ${CMAKE_INSTALL_CMAKEDIR})
install(FILES pb.h pb_common.h pb_encode.h pb_decode.h
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nanopb)
endif()