Skip to content

Commit 29c3c83

Browse files
committed
feat(sharedtypes): implement simpler update_graphql_shared_client_files
1 parent 35274d5 commit 29c3c83

File tree

6 files changed

+64
-14
lines changed

6 files changed

+64
-14
lines changed

cmake/cppgraphqlgen-functions.cmake

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
93103
endfunction()
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}

samples/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
cmake_minimum_required(VERSION 3.28)
55

6-
add_subdirectory(client)
7-
add_subdirectory(learn)
8-
add_subdirectory(validation)
9-
106
if(GRAPHQL_BUILD_MODULES)
117
add_subdirectory(today)
128
endif()
139

10+
add_subdirectory(client)
11+
add_subdirectory(learn)
12+
add_subdirectory(validation)
13+
1414
if(GRAPHQL_BUILD_HTTP_SAMPLE)
1515
find_package(boost_beast CONFIG QUIET)
1616
if(boost_beast_FOUND)

samples/client/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ if(GRAPHQL_BUILD_MODULES)
1414
add_subdirectory(benchmark)
1515
add_executable(client_benchmark benchmark.cpp)
1616
target_link_libraries(client_benchmark PRIVATE
17+
todaygraphql
1718
benchmark_client)
1819

1920
if(WIN32 AND BUILD_SHARED_LIBS)

samples/client/benchmark/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ cmake_minimum_required(VERSION 3.28)
77
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/cppgraphqlgen-functions.cmake)
88

99
if(GRAPHQL_UPDATE_SAMPLES AND GRAPHQL_BUILD_CLIENTGEN)
10-
update_graphql_client_files(benchmark ../../today/schema.today.graphql client.benchmark.today.graphql Today today --shared-types)
10+
update_graphql_shared_client_files(benchmark today client.benchmark.today.graphql)
1111
endif()
1212

1313
add_graphql_client_target(benchmark)
14-
target_link_libraries(benchmark_client PRIVATE todaygraphql)

samples/proxy/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
cmake_minimum_required(VERSION 3.28)
55

6-
add_subdirectory(query)
76
add_subdirectory(schema)
7+
add_subdirectory(query)
88

99
add_executable(client client.cpp)
1010
target_link_libraries(client PRIVATE

samples/proxy/query/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ cmake_minimum_required(VERSION 3.28)
77
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/cppgraphqlgen-functions.cmake)
88

99
if(GRAPHQL_UPDATE_SAMPLES AND GRAPHQL_BUILD_CLIENTGEN)
10-
update_graphql_client_files(proxy ../schema/schema.graphql query.graphql Proxy proxy --shared-types)
10+
update_graphql_shared_client_files(proxy proxy query.graphql)
1111
endif()
1212

1313
add_graphql_client_target(proxy)
14-
target_link_libraries(proxy_client PRIVATE proxy_schema)

0 commit comments

Comments
 (0)