@@ -36,16 +36,23 @@ function(update_graphql_schema_files SCHEMA_TARGET SCHEMA_GRAPHQL SCHEMA_PREFIX
36
36
DEPENDS ${SCHEMA_GRAPHQL} ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT} cppgraphqlgen::schemagen
37
37
COMMENT "Generating ${SCHEMA_TARGET} GraphQL schema"
38
38
VERBATIM )
39
- endfunction ()
40
39
41
- function (add_graphql_schema_target SCHEMA_TARGET )
42
40
add_custom_target (${SCHEMA_TARGET} _update_schema ALL
43
41
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /${SCHEMA_TARGET}_schema_files )
42
+ file (REAL_PATH ${SCHEMA_GRAPHQL} SCHEMA_GRAPHQL BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
43
+ set_target_properties (${SCHEMA_TARGET} _update_schema PROPERTIES
44
+ SCHEMA_GRAPHQL ${SCHEMA_GRAPHQL}
45
+ SCHEMA_PREFIX ${SCHEMA_PREFIX}
46
+ SCHEMA_NAMESPACE ${SCHEMA_NAMESPACE} )
47
+ endfunction ()
44
48
49
+ function (add_graphql_schema_target SCHEMA_TARGET )
45
50
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /${SCHEMA_TARGET}_schema_files )
46
51
file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR} /${SCHEMA_TARGET}_schema_files SCHEMA_FILES )
47
52
add_library (${SCHEMA_TARGET} _schema STATIC ${SCHEMA_FILES} )
48
- add_dependencies (${SCHEMA_TARGET} _schema ${SCHEMA_TARGET} _update_schema )
53
+ if (TARGET ${SCHEMA_TARGET} _update_schema )
54
+ add_dependencies (${SCHEMA_TARGET} _schema ${SCHEMA_TARGET} _update_schema )
55
+ endif ()
49
56
target_compile_features (${SCHEMA_TARGET} _schema PUBLIC cxx_std_20 )
50
57
target_include_directories (${SCHEMA_TARGET} _schema PUBLIC $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} > )
51
58
target_link_libraries (${SCHEMA_TARGET} _schema PUBLIC cppgraphqlgen::graphqlservice )
@@ -90,19 +97,63 @@ function(update_graphql_client_files CLIENT_TARGET SCHEMA_GRAPHQL REQUEST_GRAPHQ
90
97
DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} cppgraphqlgen::clientgen
91
98
COMMENT "Generating ${CLIENT_TARGET} client"
92
99
VERBATIM )
100
+
101
+ add_custom_target (${CLIENT_TARGET} _update_client ALL
102
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET}_client_files )
93
103
endfunction ()
94
104
95
- function (add_graphql_client_target CLIENT_TARGET )
105
+ function (update_graphql_shared_client_files CLIENT_TARGET SCHEMA_TARGET REQUEST_GRAPHQL )
106
+ set_property (DIRECTORY APPEND
107
+ PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLIENT_TARGET} _client_files )
108
+ get_target_property (SCHEMA_GRAPHQL ${SCHEMA_TARGET} _update_schema SCHEMA_GRAPHQL )
109
+ file (RELATIVE_PATH SCHEMA_GRAPHQL ${CMAKE_CURRENT_SOURCE_DIR} ${SCHEMA_GRAPHQL} )
110
+ get_target_property (SCHEMA_PREFIX ${SCHEMA_TARGET} _update_schema SCHEMA_PREFIX )
111
+ get_target_property (SCHEMA_NAMESPACE ${SCHEMA_TARGET} _update_schema SCHEMA_NAMESPACE )
112
+
113
+ # Collect optional arguments
114
+ set (ADDITIONAL_CLIENTGEN_ARGS "--shared-types" )
115
+ if (ARGC GREATER 4 )
116
+ math (EXPR LAST_ARG "${ARGC} - 1" )
117
+ foreach (ARGN RANGE 4 ${LAST_ARG} )
118
+ set (NEXT_ARG "${ARGV${ARGN} }" )
119
+ list (APPEND ADDITIONAL_CLIENTGEN_ARGS "${NEXT_ARG} " )
120
+ endforeach ()
121
+ endif ()
122
+
123
+ add_custom_command (
124
+ OUTPUT ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET}_client_files
125
+ COMMAND
126
+ ${CMAKE_COMMAND} "-DCLIENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} "
127
+ "-DCLIENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} "
128
+ "-DCLIENTGEN_PROGRAM=$<TARGET_FILE:cppgraphqlgen::clientgen>" "-DCLIENT_TARGET=${CLIENT_TARGET} "
129
+ "-DSCHEMA_GRAPHQL=${SCHEMA_GRAPHQL} " "-DREQUEST_GRAPHQL=${REQUEST_GRAPHQL} "
130
+ "-DCLIENT_PREFIX=${SCHEMA_PREFIX} " "-DCLIENT_NAMESPACE=${SCHEMA_NAMESPACE} "
131
+ "-DADDITIONAL_CLIENTGEN_ARGS=${ADDITIONAL_CLIENTGEN_ARGS} "
132
+ -P ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT}
133
+ DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} cppgraphqlgen::clientgen
134
+ COMMENT "Generating ${CLIENT_TARGET} client"
135
+ VERBATIM )
136
+
96
137
add_custom_target (${CLIENT_TARGET} _update_client ALL
97
138
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET}_client_files )
139
+ set_target_properties (${CLIENT_TARGET} _update_client PROPERTIES
140
+ SCHEMA_TARGET ${SCHEMA_TARGET} )
141
+ endfunction ()
98
142
143
+ function (add_graphql_client_target CLIENT_TARGET )
99
144
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET}_client_files )
100
145
file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET}_client_files CLIENT_FILES )
101
146
add_library (${CLIENT_TARGET} _client STATIC ${CLIENT_FILES} )
102
- add_dependencies (${CLIENT_TARGET} _client ${CLIENT_TARGET} _update_client )
147
+ if (TARGET ${CLIENT_TARGET} _update_client )
148
+ add_dependencies (${CLIENT_TARGET} _client ${CLIENT_TARGET} _update_client )
149
+ endif ()
103
150
target_compile_features (${CLIENT_TARGET} _client PUBLIC cxx_std_20 )
104
151
target_include_directories (${CLIENT_TARGET} _client PUBLIC $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} > )
105
152
target_link_libraries (${CLIENT_TARGET} _client PUBLIC cppgraphqlgen::graphqlclient )
153
+ get_target_property (SCHEMA_TARGET ${CLIENT_TARGET} _update_client SCHEMA_TARGET )
154
+ if (SCHEMA_TARGET )
155
+ target_link_libraries (${CLIENT_TARGET} _client PUBLIC ${SCHEMA_TARGET} _schema )
156
+ endif ()
106
157
file (GLOB CLIENT_HEADERS ${CMAKE_CURRENT_SOURCE_DIR} /*.h )
107
158
target_sources (${CLIENT_TARGET} _client PUBLIC FILE_SET HEADERS
108
159
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
0 commit comments