|
| 1 | +# Copyright (c) Microsoft Corporation. All rights reserved. |
| 2 | +# Licensed under the MIT License. |
| 3 | + |
| 4 | +get_filename_component(GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT |
| 5 | + "${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-update-schema-files.cmake" |
| 6 | + ABSOLUTE) |
| 7 | + |
| 8 | +get_filename_component(GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT |
| 9 | + "${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-update-client-files.cmake" |
| 10 | + ABSOLUTE) |
| 11 | + |
| 12 | +function(update_graphql_schema_files SCHEMA_TARGET SCHEMA_GRAPHQL SCHEMA_PREFIX SCHEMA_NAMESPACE) |
| 13 | + set_property(DIRECTORY APPEND |
| 14 | + PROPERTY CMAKE_CONFIGURE_DEPENDS ${SCHEMA_TARGET}_schema_files) |
| 15 | + |
| 16 | + # Collect optional arguments |
| 17 | + set(ADDITIONAL_SCHEMAGEN_ARGS "") |
| 18 | + if(ARGC GREATER 4) |
| 19 | + math(EXPR LAST_ARG "${ARGC} - 1") |
| 20 | + foreach(ARGN RANGE 4 ${LAST_ARG}) |
| 21 | + set(NEXT_ARG "${ARGV${ARGN}}") |
| 22 | + list(APPEND ADDITIONAL_SCHEMAGEN_ARGS "${NEXT_ARG}") |
| 23 | + endforeach() |
| 24 | + endif() |
| 25 | + |
| 26 | + add_custom_command( |
| 27 | + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_TARGET}_schema_files |
| 28 | + COMMAND |
| 29 | + ${CMAKE_COMMAND} "-DSCHEMA_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" |
| 30 | + "-DSCHEMA_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" |
| 31 | + "-DSCHEMAGEN_PROGRAM=$<TARGET_FILE:cppgraphqlgen::schemagen>" |
| 32 | + "-DSCHEMA_TARGET=${SCHEMA_TARGET}" "-DSCHEMA_GRAPHQL=${SCHEMA_GRAPHQL}" |
| 33 | + "-DSCHEMA_PREFIX=${SCHEMA_PREFIX}" "-DSCHEMA_NAMESPACE=${SCHEMA_NAMESPACE}" |
| 34 | + "-DADDITIONAL_SCHEMAGEN_ARGS=${ADDITIONAL_SCHEMAGEN_ARGS}" |
| 35 | + -P ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT} |
| 36 | + DEPENDS ${SCHEMA_GRAPHQL} ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT} cppgraphqlgen::schemagen |
| 37 | + COMMENT "Generating ${SCHEMA_TARGET} GraphQL schema" |
| 38 | + VERBATIM) |
| 39 | +endfunction() |
| 40 | + |
| 41 | +function(add_graphql_schema_target SCHEMA_TARGET) |
| 42 | + add_custom_target(${SCHEMA_TARGET}_update_schema ALL |
| 43 | + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_TARGET}_schema_files) |
| 44 | + |
| 45 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_TARGET}_schema_files) |
| 46 | + file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_TARGET}_schema_files SCHEMA_FILES) |
| 47 | + add_library(${SCHEMA_TARGET}_schema STATIC ${SCHEMA_FILES}) |
| 48 | + add_dependencies(${SCHEMA_TARGET}_schema ${SCHEMA_TARGET}_update_schema) |
| 49 | + target_include_directories(${SCHEMA_TARGET}_schema PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) |
| 50 | + target_link_libraries(${SCHEMA_TARGET}_schema PUBLIC cppgraphqlgen::graphqlintrospection) |
| 51 | + endif() |
| 52 | +endfunction() |
| 53 | + |
| 54 | +function(add_graphql_schema_no_introspection_target SCHEMA_NO_INTROSPECTION_TARGET) |
| 55 | + add_custom_target(${SCHEMA_NO_INTROSPECTION_TARGET}_update_schema ALL |
| 56 | + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NO_INTROSPECTION_TARGET}_schema_files) |
| 57 | + |
| 58 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NO_INTROSPECTION_TARGET}_schema_files) |
| 59 | + file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NO_INTROSPECTION_TARGET}_schema_files SCHEMA_FILES) |
| 60 | + add_library(${SCHEMA_NO_INTROSPECTION_TARGET}_schema STATIC ${SCHEMA_FILES}) |
| 61 | + add_dependencies(${SCHEMA_NO_INTROSPECTION_TARGET}_schema ${SCHEMA_NO_INTROSPECTION_TARGET}_update_schema) |
| 62 | + target_include_directories(${SCHEMA_NO_INTROSPECTION_TARGET}_schema PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) |
| 63 | + target_link_libraries(${SCHEMA_NO_INTROSPECTION_TARGET}_schema PUBLIC cppgraphqlgen::graphqlservice) |
| 64 | + endif() |
| 65 | +endfunction() |
| 66 | + |
| 67 | +function(update_graphql_client_files CLIENT_TARGET SCHEMA_GRAPHQL REQUEST_GRAPHQL CLIENT_PREFIX CLIENT_NAMESPACE) |
| 68 | + set_property(DIRECTORY APPEND |
| 69 | + PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLIENT_TARGET}_client_files) |
| 70 | + |
| 71 | + # Collect optional arguments |
| 72 | + set(ADDITIONAL_CLIENTGEN_ARGS "") |
| 73 | + if(ARGC GREATER 5) |
| 74 | + math(EXPR LAST_ARG "${ARGC} - 1") |
| 75 | + foreach(ARGN RANGE 5 ${LAST_ARG}) |
| 76 | + set(NEXT_ARG "${ARGV${ARGN}}") |
| 77 | + list(APPEND ADDITIONAL_CLIENTGEN_ARGS "${NEXT_ARG}") |
| 78 | + endforeach() |
| 79 | + endif() |
| 80 | + |
| 81 | + add_custom_command( |
| 82 | + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files |
| 83 | + COMMAND |
| 84 | + ${CMAKE_COMMAND} "-DCLIENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" |
| 85 | + "-DCLIENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" |
| 86 | + "-DCLIENTGEN_PROGRAM=$<TARGET_FILE:cppgraphqlgen::clientgen>" "-DCLIENT_TARGET=${CLIENT_TARGET}" |
| 87 | + "-DSCHEMA_GRAPHQL=${SCHEMA_GRAPHQL}" "-DREQUEST_GRAPHQL=${REQUEST_GRAPHQL}" |
| 88 | + "-DCLIENT_PREFIX=${CLIENT_PREFIX}" "-DCLIENT_NAMESPACE=${CLIENT_NAMESPACE}" |
| 89 | + "-DADDITIONAL_CLIENTGEN_ARGS=${ADDITIONAL_CLIENTGEN_ARGS}" |
| 90 | + -P ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} |
| 91 | + DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} cppgraphqlgen::clientgen |
| 92 | + COMMENT "Generating ${CLIENT_TARGET} client" |
| 93 | + VERBATIM) |
| 94 | +endfunction() |
| 95 | + |
| 96 | +function(add_graphql_client_target CLIENT_TARGET) |
| 97 | + add_custom_target(${CLIENT_TARGET}_update_client ALL |
| 98 | + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files) |
| 99 | + |
| 100 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files) |
| 101 | + file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${CLIENT_TARGET}_client_files CLIENT_FILES) |
| 102 | + add_library(${CLIENT_TARGET}_client STATIC ${CLIENT_FILES}) |
| 103 | + add_dependencies(${CLIENT_TARGET}_client ${CLIENT_TARGET}_update_client) |
| 104 | + target_include_directories(${CLIENT_TARGET}_client PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) |
| 105 | + target_link_libraries(${CLIENT_TARGET}_client PUBLIC cppgraphqlgen::graphqlclient) |
| 106 | + endif() |
| 107 | +endfunction() |
0 commit comments