blob: 70cc596727e0509586454adc67505c1b87ed25ca (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
cmake_minimum_required(VERSION 3.30)
project(github_mirror C)
set(CMAKE_C_STANDARD 17)
include(FetchContent)
include(CheckCCompilerFlag)
# Custom compiler flags
set(custom_compiler_flags)
set(SANITIZERS "address,undefined")
list(APPEND custom_compiler_flags
-Wall
-Wextra
-Wpedantic
-Werror
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND custom_compiler_flags
-fno-omit-frame-pointer
-fstack-protector-strong
-fsanitize=${SANITIZERS}
)
endif ()
# CURL
find_package(CURL REQUIRED)
# CJSON
FetchContent_Declare(
cjson
GIT_REPOSITORY https://github.com/DaveGamble/cJSON
GIT_TAG v1.7.18
EXCLUDE_FROM_ALL
)
set(ENABLE_CJSON_TEST OFF CACHE BOOL "Enable cJSON tests" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE)
FetchContent_MakeAvailable(cjson)
# CMocka
find_package(cmocka REQUIRED)
# Python
find_package(Python3 REQUIRED COMPONENTS Interpreter)
# GraphQL Queries
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
file(GLOB GRAPHQL_FILES "${CMAKE_CURRENT_SOURCE_DIR}/queries/*.graphql")
set(GENERATED_HEADERS "")
foreach (GQL_FILE ${GRAPHQL_FILES})
get_filename_component(FILENAME ${GQL_FILE} NAME)
if (NOT FILENAME STREQUAL "schema.graphql")
get_filename_component(BASENAME ${GQL_FILE} NAME_WE)
set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/include/queries/${BASENAME}.h")
add_custom_command(
OUTPUT ${HEADER_FILE}
COMMAND ${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/hack/graphql_to_header.py
${GQL_FILE}
${HEADER_FILE}
${BASENAME}
DEPENDS ${GQL_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/hack/graphql_to_header.py
COMMENT "Generating header ${HEADER_FILE} from ${GQL_FILE}"
)
list(APPEND GENERATED_HEADERS ${HEADER_FILE})
endif ()
endforeach ()
add_custom_target(generate_graphql_headers ALL DEPENDS ${GENERATED_HEADERS})
# Executable
add_executable(github_mirror
src/main.c
src/github.c
src/github.h
src/buffer.c
src/buffer.h
${GENERATED_HEADERS}
src/github_types.h
src/github_types.c
src/config.c
src/config.h
src/git.c
src/git.h
src/precheck.c
src/precheck.h
)
target_link_libraries(github_mirror PRIVATE cjson CURL::libcurl)
target_include_directories(github_mirror PRIVATE ${cjson_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include)
add_dependencies(github_mirror generate_graphql_headers)
install(TARGETS github_mirror DESTINATION bin)
# Compile Options
foreach (compiler_flag ${custom_compiler_flags})
CHECK_C_COMPILER_FLAG(${compiler_flag} "FLAG_SUPPORTED_${current_variable}")
if (FLAG_SUPPORTED_${current_variable})
message(STATUS "Compiler flag ${compiler_flag} is supported")
target_compile_options(github_mirror PRIVATE ${compiler_flag})
else ()
message(WARNING "Compiler flag ${compiler_flag} is not supported")
endif ()
endforeach ()
# Debug and Sanitizers is not empty
if (CMAKE_BUILD_TYPE STREQUAL "Debug" AND SANITIZERS)
target_link_options(github_mirror PRIVATE "-fsanitize=${SANITIZERS}")
endif ()
# Testing
enable_testing()
add_executable(test_buffer tests/test_buffer.c src/buffer.c)
target_link_libraries(test_buffer PRIVATE cmocka::cmocka)
target_compile_definitions(test_buffer PRIVATE TEST_ALLOC)
add_executable(test_config tests/test_config.c src/config.c)
target_link_libraries(test_config PRIVATE cmocka::cmocka)
target_compile_definitions(test_config PRIVATE TEST_ALLOC)
add_test(NAME test_buffer COMMAND test_buffer)
add_test(NAME test_config COMMAND test_config)
# Packaging
include(InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_NAME "github_mirror")
set(CPACK_PACKAGE_VERSION "0.1.1")
set(CPACK_PACKAGE_CONTACT "ansg191@anshulg.com")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Anshul Gupta")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.28), libcurl4 (>= 7.64)")
set(CPACK_GENERATOR "DEB")
include(CPack)
|