@@ -14,7 +14,18 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
14
14
#-----------------------------------------------------------------------
15
15
# Options
16
16
option (OPENASSETIO_MEDIACREATION_ENABLE_TEST "Run test on mediacreation traits" OFF )
17
+ option (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON "Aditionally generate python library" OFF )
18
+ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON)
19
+ # By default we'll compute the correct site-packages directory
20
+ # structure, but allow overriding.
21
+ set (OPENASSETIO_MEDIACREATION_PYTHON_SITEDIR
22
+ ""
23
+ CACHE STRING
24
+ "Override default Python module install directory, relative to CMAKE_INSTALL_PREFIX" )
25
+ endif ()
26
+
17
27
message (STATUS "Test enabled = ${OPENASSETIO_MEDIACREATION_ENABLE_TEST} " )
28
+ message (STATUS "Generate python library = ${OPENASSETIO_MEDIACREATION_GENERATE_PYTHON} " )
18
29
19
30
# ABI wrangling only needed for test
20
31
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
@@ -61,21 +72,40 @@ message("Generating Traits with openassetio-traitgen")
61
72
# This means if the source traits file is changed, configure will rerun.
62
73
configure_file (${CMAKE_CURRENT_LIST_DIR} /traits.yml ${PROJECT_BINARY_DIR} /traits.yml)
63
74
execute_process (COMMAND openassetio-traitgen ${PROJECT_BINARY_DIR} /traits.yml
64
- -o ${PROJECT_BINARY_DIR} -g cpp
65
- COMMAND_ERROR_IS_FATAL ANY
66
- COMMAND_ECHO STDERR)
75
+ -o ${PROJECT_BINARY_DIR} /cpp -g cpp
76
+ COMMAND_ERROR_IS_FATAL ANY
77
+ COMMAND_ECHO STDERR)
78
+
79
+ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON)
80
+ # Generate the python package by running traitgen.
81
+ # By running traitgen during the cmake step, using the traitgen that
82
+ # is available to the environment, just as the C++ generation does,
83
+ # we guarentee that the versions of traitgen used between c++ and
84
+ # python packages are identical. This isn't a guarentee when using
85
+ # the `pip install .` method of creating a python package, due to
86
+ # pip having a seperate dependency resolution method.
87
+ #
88
+ # At the time of writing, this produces the same artifact as doing
89
+ # `pip install .` (and invoking setup.py), but that's not a
90
+ # guarentee going forward, as additional elements of the python
91
+ # package may be added to mediacreation.
92
+ execute_process (COMMAND openassetio-traitgen ${PROJECT_BINARY_DIR} /traits.yml
93
+ -o ${PROJECT_BINARY_DIR} /python -g python
94
+ COMMAND_ERROR_IS_FATAL ANY
95
+ COMMAND_ECHO STDERR)
96
+ endif ()
67
97
68
98
add_library (openassetio-mediacreation INTERFACE )
69
99
# add alias so the project can be used with add_subdirectory
70
100
add_library (OpenAssetIO-MediaCreation::openassetio-mediacreation ALIAS openassetio-mediacreation)
71
101
72
102
include (GNUInstallDirs)
73
103
74
- # traitgen generates to _public_header_source_root location by default.
75
- set (_public_header_source_root "${PROJECT_BINARY_DIR} /openassetio_mediacreation/include" )
104
+ # traitgen generates to _public_header_source_root/cpp location by default.
105
+ set (_public_header_source_root "${PROJECT_BINARY_DIR} /cpp/ openassetio_mediacreation/include" )
76
106
set (_config_install_dir "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} " )
77
- set (_project_config_file "${PROJECT_BINARY_DIR} /${PROJECT_NAME} Config.cmake" )
78
- set (_version_config_file "${PROJECT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake" )
107
+ set (_project_config_file "${PROJECT_BINARY_DIR} /cpp/ ${PROJECT_NAME} Config.cmake" )
108
+ set (_version_config_file "${PROJECT_BINARY_DIR} /cpp/ ${PROJECT_NAME} ConfigVersion.cmake" )
79
109
set (_traitgen_data_dir "${CMAKE_INSTALL_DATADIR} /openassetio-traitgen" )
80
110
81
111
#-----------------------------------------------------------------------
@@ -112,6 +142,18 @@ install(
112
142
FILE ${PROJECT_NAME} Targets.cmake
113
143
)
114
144
145
+ #-----------------------------------------------------------------------
146
+ # Optionally install python library
147
+ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON)
148
+ include (ThirdParty)
149
+
150
+ install (
151
+ DIRECTORY ${PROJECT_BINARY_DIR} /python/openassetio_mediacreation
152
+ DESTINATION "${OPENASSETIO_MEDIACREATION_PYTHON_SITEDIR} "
153
+ FILES_MATCHING PATTERN "*.py"
154
+ )
155
+ endif ()
156
+
115
157
#-----------------------------------------------------------------------
116
158
# Copy CMake Files
117
159
install (
0 commit comments