@@ -36,16 +36,23 @@ function(update_graphql_schema_files SCHEMA_TARGET SCHEMA_GRAPHQL SCHEMA_PREFIX
3636 DEPENDS ${SCHEMA_GRAPHQL} ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT} cppgraphqlgen::schemagen
3737 COMMENT "Generating ${SCHEMA_TARGET} GraphQL schema"
3838 VERBATIM )
39- endfunction ()
4039
41- function (add_graphql_schema_target SCHEMA_TARGET)
4240 add_custom_target (${SCHEMA_TARGET} _update_schema ALL
4341 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 ()
4448
49+ function (add_graphql_schema_target SCHEMA_TARGET)
4550 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /${SCHEMA_TARGET} _schema_files)
4651 file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR} /${SCHEMA_TARGET} _schema_files SCHEMA_FILES)
4752 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 ()
4956 target_compile_features (${SCHEMA_TARGET} _schema PUBLIC cxx_std_20)
5057 target_include_directories (${SCHEMA_TARGET} _schema PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >)
5158 target_link_libraries (${SCHEMA_TARGET} _schema PUBLIC cppgraphqlgen::graphqlservice)
@@ -90,19 +97,63 @@ function(update_graphql_client_files CLIENT_TARGET SCHEMA_GRAPHQL REQUEST_GRAPHQ
9097 DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} cppgraphqlgen::clientgen
9198 COMMENT "Generating ${CLIENT_TARGET} client"
9299 VERBATIM )
100+
101+ add_custom_target (${CLIENT_TARGET} _update_client ALL
102+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET} _client_files)
93103endfunction ()
94104
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+
96137 add_custom_target (${CLIENT_TARGET} _update_client ALL
97138 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 ()
98142
143+ function (add_graphql_client_target CLIENT_TARGET)
99144 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET} _client_files)
100145 file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR} /${CLIENT_TARGET} _client_files CLIENT_FILES)
101146 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 ()
103150 target_compile_features (${CLIENT_TARGET} _client PUBLIC cxx_std_20)
104151 target_include_directories (${CLIENT_TARGET} _client PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >)
105152 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 ()
106157 file (GLOB CLIENT_HEADERS ${CMAKE_CURRENT_SOURCE_DIR} /*.h)
107158 target_sources (${CLIENT_TARGET} _client PUBLIC FILE_SET HEADERS
108159 BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
0 commit comments