diff --git a/CMakeLists.txt b/CMakeLists.txt index c4c8b3e..3373d82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,9 +3,26 @@ PROJECT(libgraphqlparser C CXX) SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") -INCLUDE(version) +IF(UNIX) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") + SET(FLEX_COMPILE_FLAGS "--header-file=lexer.h") +ELSEIF(WIN32) + # If we're building this with vcpkg on Windows, let portfile.cmake tell us where it + # stored these tools. Otherwise these variables should be empty and we'll fall back + # to the normal CMake FIND_PACKAGE logic for each of these programs. + SET(CMAKE_PROGRAM_PATH + "${VCPKG_DOWNLOADS_PYTHON2_DIR}" + "${VCPKG_DOWNLOADS_FLEX_DIR}" + "${VCPKG_DOWNLOADS_BISON_DIR}" + "${CMAKE_PROGRAM_PATH}") + + SET(FLEX_COMPILE_FLAGS "--header-file=lexer.h --wincompat") + + # Let CMake figure out the exports for the SHARED library (DLL) on Windows. + SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +ENDIF() -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") +INCLUDE(version) FIND_PACKAGE(PythonInterp 2 REQUIRED) IF (NOT PYTHON_VERSION_MAJOR EQUAL 2) @@ -21,7 +38,7 @@ IF (BISON_FOUND) ENDIF() IF(FLEX_FOUND) - FLEX_TARGET(GraphQLScanner lexer.lpp ${CMAKE_CURRENT_SOURCE_DIR}/lexer.cpp COMPILE_FLAGS "--header-file=lexer.h") + FLEX_TARGET(GraphQLScanner lexer.lpp ${CMAKE_CURRENT_SOURCE_DIR}/lexer.cpp COMPILE_FLAGS ${FLEX_COMPILE_FLAGS}) IF (BISON_FOUND) ADD_FLEX_BISON_DEPENDENCY(GraphQLScanner graphqlparser) ENDIF() @@ -31,7 +48,7 @@ FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/c) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -ADD_LIBRARY(graphqlparser SHARED +ADD_LIBRARY(graphqlparser JsonVisitor.cpp ${CMAKE_CURRENT_BINARY_DIR}/Ast.h ${CMAKE_CURRENT_BINARY_DIR}/Ast.cpp @@ -87,7 +104,9 @@ ADD_SUBDIRECTORY(python) OPTION(test "Build tests." OFF) -INSTALL(DIRECTORY c ${CMAKE_CURRENT_BINARY_DIR}/c DESTINATION include/graphqlparser +INSTALL(DIRECTORY c ${CMAKE_CURRENT_BINARY_DIR}/c + DESTINATION include/graphqlparser + CONFIGURATIONS Release FILES_MATCHING PATTERN "*.h" PATTERN "build" EXCLUDE) @@ -103,9 +122,13 @@ INSTALL(FILES position.hh stack.hh syntaxdefs.h - DESTINATION include/graphqlparser) + DESTINATION include/graphqlparser + CONFIGURATIONS Release) + INSTALL(TARGETS graphqlparser - LIBRARY DESTINATION lib) + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) if (UNIX) # generate pkgconfig file @@ -116,6 +139,11 @@ if (UNIX) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libgraphqlparser.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") endif() +elseif(WIN32) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/graphqlparser.lib + DESTINATION lib) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/graphqlparser.pdb + DESTINATION bin) endif() IF (test) @@ -126,6 +154,8 @@ IF (test) ADD_CUSTOM_TARGET(memcheck valgrind --leak-check=full --suppressions=./test/valgrind.supp --dsymutil=yes --error-exitcode=1 ./test/runTests >/dev/null ) + else() + ADD_CUSTOM_TARGET(runTests + ./test/runTests >/dev/null) endif() - ENDIF()