Skip to content

Commit dc68395

Browse files
authored
Merge pull request #188 from microsoft/next
Bring v4.0.0 to the main branch
2 parents 615f800 + def6081 commit dc68395

File tree

363 files changed

+25869
-15727
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

363 files changed

+25869
-15727
lines changed

.github/workflows/linux.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Linux
33
on: [push, pull_request]
44

55
jobs:
6-
gcc7:
6+
gcc10:
77
strategy:
88
fail-fast: false
99
matrix:
@@ -19,7 +19,7 @@ jobs:
1919
- name: Install Dependencies
2020
run: |
2121
sudo apt-get update
22-
sudo apt-get install -yq libgtest-dev libboost-program-options-dev rapidjson-dev ninja-build
22+
sudo apt-get install -yq libgtest-dev libboost-program-options-dev rapidjson-dev ninja-build gcc-10 g++-10
2323
2424
- name: Build GTest
2525
run: |
@@ -34,6 +34,9 @@ jobs:
3434

3535
- name: Configure CMake
3636
shell: pwsh
37+
env:
38+
CC: gcc-10
39+
CXX: g++-10
3740
working-directory: build/
3841
run: |
3942
$cmakeBuildType = '${{ matrix.config }}'

.github/workflows/macos.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
matrix:
1010
config: [Debug, Release]
1111

12-
runs-on: macos-latest
12+
runs-on: macos-11
1313

1414
steps:
1515
- uses: actions/checkout@v2

CMakeLists.txt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

6-
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15")
7-
# Enable CMAKE_MSVC_RUNTIME_LIBRARY on Windows.
8-
set(MSVC_MATCH_VCPKG_TRIPLET ON)
9-
cmake_policy(SET CMP0091 NEW)
10-
endif()
6+
# Enable CMAKE_MSVC_RUNTIME_LIBRARY on Windows: https://cmake.org/cmake/help/latest/policy/CMP0091.html
7+
cmake_policy(SET CMP0091 NEW)
118

129
# Default to the last updated version from version.txt.
1310
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.txt" VERSION_FILE)
@@ -33,8 +30,6 @@ endif()
3330

3431
project(cppgraphqlgen VERSION ${LATEST_VERSION})
3532

36-
set(CMAKE_CXX_STANDARD 17)
37-
3833
set(GRAPHQL_INSTALL_INCLUDE_DIR include CACHE PATH "Header file install directory")
3934
set(GRAPHQL_INSTALL_TOOLS_DIR bin CACHE PATH "schemagen install directory")
4035
set(GRAPHQL_INSTALL_CMAKE_DIR lib/cmake CACHE PATH "CMake config files install directory")
@@ -45,7 +40,7 @@ option(BUILD_SHARED_LIBS "Build shared libraries instead of static libs" OFF)
4540
if(VCPKG_TARGET_TRIPLET)
4641
message(STATUS "Using ${VCPKG_TARGET_TRIPLET} triplet with vcpkg")
4742

48-
if(MSVC AND MSVC_MATCH_VCPKG_TRIPLET)
43+
if(MSVC)
4944
# Match the MSVC runtime if we're using VCPKG with static libraries.
5045
if(VCPKG_TARGET_TRIPLET MATCHES [[^.+-static$]])
5146
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

PEGTL

Submodule PEGTL updated 98 files

README.md

Lines changed: 103 additions & 45 deletions
Large diffs are not rendered by default.

cmake/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

66
# Enable version checks in find_package
77
include(CMakePackageConfigHelpers)
@@ -11,3 +11,10 @@ install(FILES
1111
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-config.cmake
1212
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
1313
DESTINATION ${GRAPHQL_INSTALL_CMAKE_DIR}/${PROJECT_NAME})
14+
15+
install(FILES
16+
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-functions.cmake
17+
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-update-schema-files.cmake
18+
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-update-client-files.cmake
19+
CONFIGURATIONS ${GRAPHQL_INSTALL_CONFIGURATIONS}
20+
DESTINATION ${GRAPHQL_INSTALL_CMAKE_DIR}/${PROJECT_NAME})

cmake/cppgraphqlgen-config.cmake

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cppgraphqlgen
66
-------------
77
8-
The following import targets are created
8+
The following import targets are created:
99
1010
::
1111
@@ -15,8 +15,20 @@ The following import targets are created
1515
cppgraphqlgen::graphqlintrospection
1616
cppgraphqlgen::graphqljson
1717
cppgraphqlgen::schemagen
18+
cppgraphqlgen::clientgen
19+
20+
The following functions are defined to help with code generation and build targets:
21+
22+
::
23+
24+
update_graphql_schema_files
25+
add_graphql_schema_target
26+
add_graphql_schema_no_introspection_target
27+
update_graphql_client_files
28+
add_graphql_client_target
1829
#]=======================================================================]
1930

2031
include(CMakeFindDependencyMacro)
2132
find_package(Threads REQUIRED)
2233
include("${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-targets.cmake")
34+
include("${CMAKE_CURRENT_LIST_DIR}/cppgraphqlgen-functions.cmake")

cmake/cppgraphqlgen-functions.cmake

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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()
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
# Normalize the filesystem paths
5+
get_filename_component(CLIENT_SOURCE_DIR ${CLIENT_SOURCE_DIR} ABSOLUTE)
6+
get_filename_component(CLIENT_BINARY_DIR ${CLIENT_BINARY_DIR} ABSOLUTE)
7+
get_filename_component(CLIENTGEN_PROGRAM ${CLIENTGEN_PROGRAM} ABSOLUTE)
8+
get_filename_component(SCHEMA_GRAPHQL "${CLIENT_SOURCE_DIR}/${SCHEMA_GRAPHQL}" ABSOLUTE)
9+
get_filename_component(REQUEST_GRAPHQL "${CLIENT_SOURCE_DIR}/${REQUEST_GRAPHQL}" ABSOLUTE)
10+
11+
file(MAKE_DIRECTORY ${CLIENT_BINARY_DIR})
12+
13+
# Cleanup all of the stale files in the binary directory
14+
file(GLOB PREVIOUS_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp
15+
${CLIENT_BINARY_DIR}/${CLIENT_TARGET}_client_files)
16+
foreach(PREVIOUS_FILE ${PREVIOUS_FILES})
17+
file(REMOVE ${PREVIOUS_FILE})
18+
endforeach()
19+
20+
set(CLIENTGEN_ARGS "--schema=${SCHEMA_GRAPHQL}" "--request=${REQUEST_GRAPHQL}" "--prefix=${CLIENT_PREFIX}" "--namespace=${CLIENT_NAMESPACE}")
21+
foreach(CLIENTGEN_ARG ${ADDITIONAL_CLIENTGEN_ARGS})
22+
list(APPEND CLIENTGEN_ARGS ${CLIENTGEN_ARG})
23+
endforeach()
24+
25+
# Regenerate the sources in the binary directory
26+
execute_process(
27+
COMMAND ${CLIENTGEN_PROGRAM} ${CLIENTGEN_ARGS}
28+
OUTPUT_FILE ${CLIENT_TARGET}_client_files
29+
WORKING_DIRECTORY ${CLIENT_BINARY_DIR})
30+
31+
# Get the up-to-date list of files in the binary directory
32+
set(FILE_NAMES "")
33+
file(GLOB NEW_FILES ${CLIENT_BINARY_DIR}/*.h ${CLIENT_BINARY_DIR}/*.cpp)
34+
foreach(NEW_FILE ${NEW_FILES})
35+
get_filename_component(NEW_FILE ${NEW_FILE} NAME)
36+
list(APPEND FILE_NAMES "${NEW_FILE}")
37+
endforeach()
38+
39+
# Don't update the files in the source directory if no files were generated in the binary directory.
40+
if(NOT FILE_NAMES)
41+
message(FATAL_ERROR "Schema generation failed!")
42+
endif()
43+
44+
# Support if() IN_LIST operator: https://cmake.org/cmake/help/latest/policy/CMP0057.html
45+
cmake_policy(SET CMP0057 NEW)
46+
47+
# Remove stale files in the source directory
48+
file(GLOB OLD_FILES ${CLIENT_SOURCE_DIR}/*.h ${CLIENT_SOURCE_DIR}/*.cpp)
49+
foreach(OLD_FILE ${OLD_FILES})
50+
get_filename_component(OLD_FILE ${OLD_FILE} NAME)
51+
if(NOT OLD_FILE IN_LIST FILE_NAMES)
52+
file(REMOVE "${CLIENT_SOURCE_DIR}/${OLD_FILE}")
53+
endif()
54+
endforeach()
55+
56+
# Copy new and modified files from the binary directory to the source directory
57+
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
58+
${CLIENT_BINARY_DIR}/${CLIENT_TARGET}_client_files
59+
${NEW_FILES}
60+
${CLIENT_SOURCE_DIR})
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
# Normalize the filesystem paths
5+
get_filename_component(SCHEMA_SOURCE_DIR ${SCHEMA_SOURCE_DIR} ABSOLUTE)
6+
get_filename_component(SCHEMA_BINARY_DIR ${SCHEMA_BINARY_DIR} ABSOLUTE)
7+
get_filename_component(SCHEMAGEN_PROGRAM ${SCHEMAGEN_PROGRAM} ABSOLUTE)
8+
get_filename_component(SCHEMA_GRAPHQL "${SCHEMA_SOURCE_DIR}/${SCHEMA_GRAPHQL}" ABSOLUTE)
9+
10+
file(MAKE_DIRECTORY ${SCHEMA_BINARY_DIR})
11+
12+
# Cleanup all of the stale files in the binary directory
13+
file(GLOB PREVIOUS_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.cpp
14+
${SCHEMA_BINARY_DIR}/${SCHEMA_TARGET}_schema_files)
15+
foreach(PREVIOUS_FILE ${PREVIOUS_FILES})
16+
file(REMOVE ${PREVIOUS_FILE})
17+
endforeach()
18+
19+
set(SCHEMAGEN_ARGS "--schema=${SCHEMA_GRAPHQL}" "--prefix=${SCHEMA_PREFIX}" "--namespace=${SCHEMA_NAMESPACE}")
20+
foreach(SCHEMAGEN_ARG ${ADDITIONAL_SCHEMAGEN_ARGS})
21+
list(APPEND SCHEMAGEN_ARGS ${SCHEMAGEN_ARG})
22+
endforeach()
23+
24+
# Regenerate the sources in the binary directory
25+
execute_process(
26+
COMMAND ${SCHEMAGEN_PROGRAM} ${SCHEMAGEN_ARGS}
27+
OUTPUT_FILE ${SCHEMA_TARGET}_schema_files
28+
WORKING_DIRECTORY ${SCHEMA_BINARY_DIR})
29+
30+
# Get the up-to-date list of files in the binary directory
31+
set(FILE_NAMES "")
32+
file(GLOB NEW_FILES ${SCHEMA_BINARY_DIR}/*.h ${SCHEMA_BINARY_DIR}/*.cpp)
33+
foreach(NEW_FILE ${NEW_FILES})
34+
get_filename_component(NEW_FILE ${NEW_FILE} NAME)
35+
list(APPEND FILE_NAMES "${NEW_FILE}")
36+
endforeach()
37+
38+
# Don't update the files in the source directory if no files were generated in the binary directory.
39+
if(NOT FILE_NAMES)
40+
message(FATAL_ERROR "Schema generation failed!")
41+
endif()
42+
43+
# Support if() IN_LIST operator: https://cmake.org/cmake/help/latest/policy/CMP0057.html
44+
cmake_policy(SET CMP0057 NEW)
45+
46+
# Remove stale files in the source directory
47+
file(GLOB OLD_FILES ${SCHEMA_SOURCE_DIR}/*.h ${SCHEMA_SOURCE_DIR}/*.cpp)
48+
foreach(OLD_FILE ${OLD_FILES})
49+
get_filename_component(OLD_FILE ${OLD_FILE} NAME)
50+
if(NOT OLD_FILE IN_LIST FILE_NAMES)
51+
file(REMOVE "${SCHEMA_SOURCE_DIR}/${OLD_FILE}")
52+
endif()
53+
endforeach()
54+
55+
# Copy new and modified files from the binary directory to the source directory
56+
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
57+
${SCHEMA_BINARY_DIR}/${SCHEMA_TARGET}_schema_files
58+
${NEW_FILES}
59+
${SCHEMA_SOURCE_DIR})

0 commit comments

Comments
 (0)