|
1 | | -cmake_minimum_required (VERSION 3.17.0) |
| 1 | +cmake_minimum_required(VERSION 3.17.0) |
2 | 2 |
|
3 | 3 | # Copy py source to build package source dir |
4 | | -file( GLOB SrcFiles ${CMAKE_CURRENT_SOURCE_DIR}/*.py ) |
| 4 | +file(GLOB SrcFiles ${CMAKE_CURRENT_SOURCE_DIR}/*.py) |
5 | 5 | foreach(file ${SrcFiles}) |
6 | | - configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY ) |
| 6 | + configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) |
7 | 7 | endforeach() |
8 | 8 |
|
9 | | -# Collect top-level proto files as dependencies |
10 | | -file( GLOB ProtoFiles ${DataFed_SOURCE_DIR}/common/proto/common/*.proto ) |
| 9 | +# Collect proto files from the new 1-1-1 directory structure |
| 10 | +file(GLOB_RECURSE ProtoFiles ${DataFed_SOURCE_DIR}/common/proto3/common/*.proto) |
11 | 11 |
|
12 | 12 | # OBJECT - is needed because we don't want to compile to a binary |
13 | 13 | # because we are dealing with python |
14 | 14 | add_library(protobuf-target-py OBJECT ${ProtoFiles}) |
| 15 | + |
15 | 16 | protobuf_generate( |
16 | 17 | LANGUAGE python |
17 | 18 | TARGET protobuf-target-py |
18 | | - IMPORT_DIRS "${DataFed_SOURCE_DIR}/common/proto/common" |
| 19 | + IMPORT_DIRS "${DataFed_SOURCE_DIR}/common/proto3/common" |
19 | 20 | OUT_VAR protobuf-generated-files-py |
20 | 21 | PROTOC_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}" |
21 | | - ) |
22 | | - |
23 | | -add_custom_target( pydatafed_src DEPENDS protobuf-target-py ) |
24 | | - |
25 | | -# By default this will output the proto py files in the CMAKE BINARY DIR |
26 | | -add_custom_command( TARGET pydatafed_src POST_BUILD |
27 | | - COMMAND sed -i -r 's:^import.*_pb2:from . \\0:' ${protobuf-generated-files-py} |
28 | | - COMMAND ${DataFed_SOURCE_DIR}/python/pyproto_add_msg_idx.py ${DataFed_SOURCE_DIR}/common/proto/common/SDMS_Anon.proto ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Anon_pb2.py |
29 | | - COMMAND ${DataFed_SOURCE_DIR}/python/pyproto_add_msg_idx.py ${DataFed_SOURCE_DIR}/common/proto/common/SDMS_Auth.proto ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Auth_pb2.py |
30 | | -) |
31 | | - |
32 | | -# Crea#te copies of the files so they show up in the source folder as well |
33 | | -# for the purpose of testing |
34 | | -add_custom_target( pydatafed_proto_src DEPENDS pydatafed_src ) |
35 | | -add_custom_command( TARGET pydatafed_proto_src POST_BUILD pydatafed_src |
36 | | - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Auth_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/ |
37 | | - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/ |
38 | | - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/Version_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/ |
39 | | - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Anon_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/ |
40 | 22 | ) |
41 | 23 |
|
| 24 | +add_custom_target(pydatafed_src DEPENDS protobuf-target-py) |
| 25 | + |
| 26 | +# Proto subdirectories that protoc generates imports for |
| 27 | +set(PROTO_SUBDIRS anon auth enums messages) |
| 28 | + |
| 29 | +# Fix imports in generated pb2 files to use relative imports within the package. |
| 30 | +# protoc generates absolute imports like: |
| 31 | +# from anon import ack_reply_pb2 as ... |
| 32 | +# from enums import error_code_pb2 as ... |
| 33 | +# import envelope_pb2 as ... |
| 34 | +# These must become relative imports: |
| 35 | +# from .anon import ack_reply_pb2 as ... |
| 36 | +# from .enums import error_code_pb2 as ... |
| 37 | +# from . import envelope_pb2 as ... |
42 | 38 |
|
| 39 | +# Create the import fixup script |
| 40 | +add_custom_command(TARGET pydatafed_src POST_BUILD |
| 41 | + COMMAND sh ${DataFed_SOURCE_DIR}/python/datafed_pkg/scripts/fix_proto_imports.sh ${CMAKE_CURRENT_BINARY_DIR} |
| 42 | + COMMENT "Rewriting protobuf imports to relative" |
| 43 | +) |
| 44 | + |
| 45 | +# Copy generated files back to source tree for testing |
| 46 | +add_custom_target(pydatafed_proto_src DEPENDS pydatafed_src) |
| 47 | +add_custom_command(TARGET pydatafed_proto_src POST_BUILD |
| 48 | + COMMAND ${CMAKE_COMMAND} -E copy |
| 49 | + ${CMAKE_CURRENT_BINARY_DIR}/envelope_pb2.py |
| 50 | + ${CMAKE_CURRENT_SOURCE_DIR}/ |
| 51 | + # Copy subdirectories back to source for testing |
| 52 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 53 | + ${CMAKE_CURRENT_BINARY_DIR}/anon ${CMAKE_CURRENT_SOURCE_DIR}/anon |
| 54 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 55 | + ${CMAKE_CURRENT_BINARY_DIR}/auth ${CMAKE_CURRENT_SOURCE_DIR}/auth |
| 56 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 57 | + ${CMAKE_CURRENT_BINARY_DIR}/enums ${CMAKE_CURRENT_SOURCE_DIR}/enums |
| 58 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 59 | + ${CMAKE_CURRENT_BINARY_DIR}/messages ${CMAKE_CURRENT_SOURCE_DIR}/messages |
| 60 | +) |
0 commit comments