this repo has no description
at develop 4.5 kB view raw
1# ------------------------------------------------------------------------------------------------------------------- 2## Parser Generation Targets 3 4# When updating the cached files, update MD5 sums defined in this file 5include(${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake) 6 7macro(MD5 filename md5sum) 8 file(READ "${filename}" RAW_MD5_FILE) 9 string(REGEX REPLACE "\r" "" STRIPPED_MD5_FILE "${RAW_MD5_FILE}") 10 string(MD5 ${md5sum} "${STRIPPED_MD5_FILE}") 11endmacro(MD5) 12 13find_package(BISON 3.4) 14find_package(FLEX 2.5) 15 16if(BISON_FOUND AND FLEX_FOUND) 17 BISON_TARGET(MZNParser 18 ${PROJECT_SOURCE_DIR}/lib/parser.yxx 19 ${PROJECT_BINARY_DIR}/parser.tab.cpp 20 DEFINES_FILE ${PROJECT_BINARY_DIR}/include/minizinc/parser.tab.hh 21 COMPILE_FLAGS "-p mzn_yy -l" 22 ) 23 24 file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/minizinc/support/) 25 BISON_TARGET(RegExParser 26 ${PROJECT_SOURCE_DIR}/lib/support/regex/parser.yxx 27 ${PROJECT_BINARY_DIR}/regex_parser.tab.cpp 28 DEFINES_FILE ${PROJECT_BINARY_DIR}/include/minizinc/support/regex_parser.tab.hh 29 COMPILE_FLAGS "-p regex_yy -l" 30 ) 31 32 FLEX_TARGET(MZNLexer 33 ${PROJECT_SOURCE_DIR}/lib/lexer.lxx 34 ${PROJECT_BINARY_DIR}/lexer.yy.cpp 35 COMPILE_FLAGS "-P mzn_yy -L" 36 ) 37 ADD_FLEX_BISON_DEPENDENCY(MZNLexer MZNParser) 38 39 FLEX_TARGET(RegExLexer 40 ${PROJECT_SOURCE_DIR}/lib/support/regex/lexer.lxx 41 ${PROJECT_BINARY_DIR}/regex_lexer.yy.cpp 42 COMPILE_FLAGS "-P regex_yy -L" 43 ) 44 ADD_FLEX_BISON_DEPENDENCY(RegExLexer RegExParser) 45else() 46 MD5(${PROJECT_SOURCE_DIR}/lib/parser.yxx parser_yxx_md5) 47 if(NOT "${parser_yxx_md5}" STREQUAL "${parser_yxx_md5_cached}") 48 message(FATAL_ERROR 49 "The file parser.yxx has been modified but bison cannot be run.\n" 50 "If you are sure parser.tab.cpp and minizinc/parser.tab.hh in ${PROJECT_SOURCE_DIR}/lib/cached/ are correct " 51 "then copy parser.yxx's md5 ${parser_yxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 52 ) 53 endif() 54 55 MD5(${PROJECT_SOURCE_DIR}/lib/support/regex/parser.yxx regex_parser_yxx_md5) 56 if(NOT "${regex_parser_yxx_md5}" STREQUAL "${regex_parser_yxx_md5_cached}") 57 message(FATAL_ERROR 58 "The file regex/parser.yxx has been modified but bison cannot be run.\n" 59 "If you are sure regex_parser.tab.cpp and minizinc/support/regex_parser.tab.hh in " 60 "${PROJECT_SOURCE_DIR}/lib/cached/ are correct then copy regex_parser.yxx's md5 ${regex_parser_yxx_md5} into " 61 "${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 62 ) 63 endif() 64 65 MD5(${PROJECT_SOURCE_DIR}/lib/lexer.lxx lexer_lxx_md5) 66 if(NOT "${lexer_lxx_md5}" STREQUAL "${lexer_lxx_md5_cached}") 67 message(FATAL_ERROR 68 "The file lexer.lxx has been modified but flex cannot be run.\n" 69 "If you are sure ${PROJECT_SOURCE_DIR}/lib/cached/lexer.yy.cpp is correct then " 70 "copy lexer.lxx's md5 ${lexer_lxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 71 ) 72 endif() 73 74 MD5(${PROJECT_SOURCE_DIR}/lib/support/regex/lexer.lxx regex_lexer_lxx_md5) 75 if(NOT "${regex_lexer_lxx_md5}" STREQUAL "${regex_lexer_lxx_md5_cached}") 76 message(FATAL_ERROR 77 "The file regex/lexer.lxx has been modified but flex cannot be run.\n" 78 "If you are sure ${PROJECT_SOURCE_DIR}/lib/cached/regex_lexer.yy.cpp is correct then " 79 "copy regex/lexer.lxx's md5 ${regex_lexer_lxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 80 ) 81 endif() 82 83 include_directories(${PROJECT_SOURCE_DIR}/lib/cached) 84 set(BISON_MZNParser_OUTPUTS 85 ${PROJECT_SOURCE_DIR}/lib/cached/parser.tab.cpp 86 ${PROJECT_SOURCE_DIR}/lib/cached/minizinc/parser.tab.hh 87 ) 88 set(BISON_RegExParser_OUTPUTS 89 ${PROJECT_SOURCE_DIR}/lib/cached/regex_parser.tab.cpp 90 ${PROJECT_SOURCE_DIR}/lib/cached/minizinc/support/regex_parser.tab.hh 91 ) 92 set(FLEX_MZNLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/lib/cached/lexer.yy.cpp) 93 set(FLEX_RegExLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/lib/cached/regex_lexer.yy.cpp) 94endif() 95 96if(NOT GECODE_FOUND) 97 set(FLEX_RegExLexer_OUTPUTS "") 98 set(BISON_RegExParser_OUTPUTS "") 99endif() 100 101add_library(minizinc_parser OBJECT 102 ${BISON_MZNParser_OUTPUTS} 103 ${FLEX_MZNLexer_OUTPUTS} 104 ${BISON_RegExParser_OUTPUTS} 105 ${FLEX_RegExLexer_OUTPUTS} 106) 107set_target_properties(minizinc_parser PROPERTIES 108 CXX_CLANG_TIDY "" 109) 110 111if(GECODE_FOUND) 112 target_include_directories(minizinc_parser PRIVATE "${GECODE_INCLUDE_DIRS}") 113 target_compile_definitions(minizinc_parser PRIVATE HAS_GECODE) 114endif()