mirror of
https://github.com/openappsec/openappsec.git
synced 2025-06-28 16:41:02 +03:00
152 lines
4.9 KiB
CMake
152 lines
4.9 KiB
CMake
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
|
PROJECT(libgraphqlparser C CXX)
|
|
|
|
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
|
|
|
|
INCLUDE(version)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
|
|
|
FIND_PACKAGE(PythonInterp 3 REQUIRED)
|
|
IF (NOT PYTHON_VERSION_MAJOR EQUAL 3)
|
|
MESSAGE(FATAL_ERROR "Python 3 is required.")
|
|
ENDIF()
|
|
|
|
FIND_PROGRAM(CTYPESGEN_FOUND ctypesgen.py)
|
|
|
|
FIND_PACKAGE(BISON 3)
|
|
FIND_PACKAGE(FLEX)
|
|
IF (BISON_FOUND)
|
|
BISON_TARGET(graphqlparser_bison parser.ypp ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.cpp)
|
|
SET(BISON_LOCATION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/location.hh)
|
|
ELSE()
|
|
SET(BISON_graphqlparser_bison_OUTPUT_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.cpp)
|
|
SET(BISON_graphqlparser_bison_OUTPUT_HEADER ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.hpp)
|
|
SET(BISON_graphqlparser_bison_OUTPUTS
|
|
${BISON_graphqlparser_bison_OUTPUT_SOURCE}
|
|
${BISON_graphqlparser_bison_OUTPUT_HEADER}
|
|
${CMAKE_CURRENT_BINARY_DIR}/location.hh
|
|
${CMAKE_CURRENT_BINARY_DIR}/position.hh
|
|
${CMAKE_CURRENT_BINARY_DIR}/stack.hh)
|
|
SET(BISON_LOCATION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/location.hh)
|
|
FILE(COPY
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/parser.tab.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/parser.tab.hpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/location.hh
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/position.hh
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/stack.hh
|
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
ENDIF()
|
|
|
|
IF(FLEX_FOUND)
|
|
FLEX_TARGET(GraphQLScanner lexer.lpp ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp COMPILE_FLAGS "--header-file=${CMAKE_CURRENT_BINARY_DIR}/lexer.h")
|
|
IF (BISON_FOUND)
|
|
ADD_FLEX_BISON_DEPENDENCY(GraphQLScanner graphqlparser_bison)
|
|
ENDIF()
|
|
ELSE()
|
|
SET(FLEX_GraphQLScanner_OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
|
|
FILE(COPY
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/lexer.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/lexer.h
|
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
ENDIF()
|
|
|
|
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/c)
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
ADD_LIBRARY(graphqlparser
|
|
JsonVisitor.cpp
|
|
${CMAKE_CURRENT_BINARY_DIR}/Ast.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/Ast.cpp
|
|
${CMAKE_CURRENT_BINARY_DIR}/AstVisitor.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAst.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAst.cpp
|
|
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAstForEachConcreteType.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/JsonVisitor.h.inc
|
|
${CMAKE_CURRENT_BINARY_DIR}/JsonVisitor.cpp.inc
|
|
${BISON_graphqlparser_bison_OUTPUTS}
|
|
${FLEX_GraphQLScanner_OUTPUTS}
|
|
c/GraphQLAstNode.cpp
|
|
c/GraphQLAstToJSON.cpp
|
|
c/GraphQLAstVisitor.h
|
|
c/GraphQLAstVisitor.cpp
|
|
c/GraphQLParser.cpp
|
|
GraphQLParser.cpp)
|
|
|
|
# Enable this and remove CMAKE_CXX_FLAGS fiddle above when we are able
|
|
# to upgrade to CMake 2.8.12. Blocker seems to be Travis CI being on
|
|
# Ubuntu Precise; Trusty has 2.8.12.
|
|
# TARGET_COMPILE_OPTIONS(graphqlparser PUBLIC -std=gnu++11)
|
|
|
|
ADD_EXECUTABLE(dump_json_ast dump_json_ast.cpp)
|
|
TARGET_LINK_LIBRARIES(dump_json_ast graphqlparser)
|
|
|
|
FUNCTION(GENERATE_AST_FILE FILE_TYPE FILE_RELATIVE_PATH)
|
|
ADD_CUSTOM_COMMAND(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE_RELATIVE_PATH}
|
|
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.py ${FILE_TYPE} ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.ast > ${CMAKE_CURRENT_BINARY_DIR}/${FILE_RELATIVE_PATH}
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.ast ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.py ${CMAKE_CURRENT_SOURCE_DIR}/ast/${FILE_TYPE}.py)
|
|
ENDFUNCTION(GENERATE_AST_FILE)
|
|
|
|
GENERATE_AST_FILE(cxx Ast.h)
|
|
|
|
GENERATE_AST_FILE(cxx_visitor AstVisitor.h)
|
|
|
|
GENERATE_AST_FILE(cxx_impl Ast.cpp)
|
|
|
|
GENERATE_AST_FILE(c c/GraphQLAst.h)
|
|
|
|
GENERATE_AST_FILE(c_impl c/GraphQLAst.cpp)
|
|
|
|
GENERATE_AST_FILE(c_visitor_impl c/GraphQLAstForEachConcreteType.h)
|
|
|
|
GENERATE_AST_FILE(cxx_json_visitor_header JsonVisitor.h.inc)
|
|
|
|
GENERATE_AST_FILE(cxx_json_visitor_impl JsonVisitor.cpp.inc)
|
|
|
|
ADD_SUBDIRECTORY(python)
|
|
|
|
OPTION(test "Build tests." OFF)
|
|
|
|
INSTALL(DIRECTORY c ${CMAKE_CURRENT_BINARY_DIR}/c DESTINATION include/graphqlparser
|
|
FILES_MATCHING PATTERN "*.h"
|
|
PATTERN "build" EXCLUDE)
|
|
|
|
INSTALL(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/Ast.h
|
|
AstNode.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/AstVisitor.h
|
|
GraphQLParser.h
|
|
JsonVisitor.h
|
|
${BISON_LOCATION_HEADER}
|
|
DESTINATION include/graphqlparser)
|
|
|
|
if (0)
|
|
INSTALL(TARGETS graphqlparser
|
|
LIBRARY DESTINATION lib)
|
|
endif()
|
|
|
|
if (UNIX)
|
|
# generate pkgconfig file
|
|
include(FindPkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
# generate .pc and install
|
|
configure_file("libgraphqlparser.pc.in" "libgraphqlparser.pc" @ONLY)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libgraphqlparser.pc"
|
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
|
|
endif()
|
|
endif()
|
|
|
|
IF (test)
|
|
ADD_SUBDIRECTORY(test)
|
|
|
|
if(UNIX)
|
|
# setup valgrind
|
|
ADD_CUSTOM_TARGET(memcheck
|
|
valgrind --leak-check=full --suppressions=./test/valgrind.supp --dsymutil=yes --error-exitcode=1 ./test/runTests >/dev/null
|
|
)
|
|
endif()
|
|
|
|
ENDIF()
|