this repo has no description
at develop 6.2 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(MZAParser 26 ${PROJECT_SOURCE_DIR}/lib/support/assembly/parser.yxx 27 ${PROJECT_BINARY_DIR}/mza_parser.tab.cpp 28 DEFINES_FILE ${PROJECT_BINARY_DIR}/include/minizinc/support/mza_parser.tab.hh 29 COMPILE_FLAGS "-p mza_yy -l" 30 ) 31 32 BISON_TARGET(RegExParser 33 ${PROJECT_SOURCE_DIR}/lib/support/regex/parser.yxx 34 ${PROJECT_BINARY_DIR}/regex_parser.tab.cpp 35 DEFINES_FILE ${PROJECT_BINARY_DIR}/include/minizinc/support/regex_parser.tab.hh 36 COMPILE_FLAGS "-p regex_yy -l" 37 ) 38else() 39 MD5(${PROJECT_SOURCE_DIR}/lib/parser.yxx parser_yxx_md5) 40 if(NOT "${parser_yxx_md5}" STREQUAL "${parser_yxx_md5_cached}") 41 message(FATAL_ERROR 42 "The file parser.yxx has been modified but bison cannot be run.\n" 43 "If you are sure parser.tab.cpp and minizinc/parser.tab.hh in ${PROJECT_SOURCE_DIR}/lib/cached/ are correct " 44 "then copy parser.yxx's md5 ${parser_yxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 45 ) 46 endif() 47 48 MD5(${PROJECT_SOURCE_DIR}/lib/support/regex/parser.yxx regex_parser_yxx_md5) 49 if(NOT "${regex_parser_yxx_md5}" STREQUAL "${regex_parser_yxx_md5_cached}") 50 message(FATAL_ERROR 51 "The file regex/parser.yxx has been modified but bison cannot be run.\n" 52 "If you are sure regex_parser.tab.cpp and minizinc/support/regex_parser.tab.hh in " 53 "${PROJECT_SOURCE_DIR}/lib/cached/ are correct then copy regex_parser.yxx's md5 ${regex_parser_yxx_md5} into " 54 "${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 55 ) 56 endif() 57 58 MD5(${PROJECT_SOURCE_DIR}/lib/support/assembly/parser.yxx mza_parser_yxx_md5) 59 if(NOT "${mza_parser_yxx_md5}" STREQUAL "${mza_parser_yxx_md5_cached}") 60 message(FATAL_ERROR 61 "The file assembly/parser.yxx has been modified but bison cannot be run.\n" 62 "If you are sure mza_parser.tab.cpp and minizinc/support/mza_parser.tab.hh in " 63 "${PROJECT_SOURCE_DIR}/lib/cached/ are correct then copy mza_parser.yxx's md5 ${mza_parser_yxx_md5} into " 64 "${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 65 ) 66 endif() 67 68 include_directories(${PROJECT_SOURCE_DIR}/lib/cached) 69 set(BISON_MZNParser_OUTPUTS 70 ${PROJECT_SOURCE_DIR}/lib/cached/parser.tab.cpp 71 ${PROJECT_SOURCE_DIR}/lib/cached/minizinc/parser.tab.hh 72 ) 73 set(BISON_RegExParser_OUTPUTS 74 ${PROJECT_SOURCE_DIR}/lib/cached/regex_parser.tab.cpp 75 ${PROJECT_SOURCE_DIR}/lib/cached/minizinc/support/regex_parser.tab.hh 76 ) 77 set(BISON_MZAParser_OUTPUTS 78 ${PROJECT_SOURCE_DIR}/lib/cached/mza_parser.tab.cpp 79 ${PROJECT_SOURCE_DIR}/lib/cached/minizinc/support/mza_parser.tab.hh 80 ) 81endif() 82 83find_package(FLEX) 84if(FLEX_FOUND) 85 FLEX_TARGET(MZNLexer 86 ${PROJECT_SOURCE_DIR}/lib/lexer.lxx 87 ${PROJECT_BINARY_DIR}/lexer.yy.cpp 88 COMPILE_FLAGS "-P mzn_yy -L" 89 ) 90 ADD_FLEX_BISON_DEPENDENCY(MZNLexer MZNParser) 91 92 FLEX_TARGET(MZALexer 93 ${PROJECT_SOURCE_DIR}/lib/support/assembly/lexer.lxx 94 ${PROJECT_BINARY_DIR}/mza_lexer.yy.cpp 95 COMPILE_FLAGS "-P mza_yy -L" 96 ) 97 ADD_FLEX_BISON_DEPENDENCY(MZALexer MZAParser) 98 99 FLEX_TARGET(RegExLexer 100 ${PROJECT_SOURCE_DIR}/lib/support/regex/lexer.lxx 101 ${PROJECT_BINARY_DIR}/regex_lexer.yy.cpp 102 COMPILE_FLAGS "-P regex_yy -L" 103 ) 104 ADD_FLEX_BISON_DEPENDENCY(RegExLexer RegExParser) 105else() 106 MD5(${PROJECT_SOURCE_DIR}/lib/lexer.lxx lexer_lxx_md5) 107 if(NOT "${lexer_lxx_md5}" STREQUAL "${lexer_lxx_md5_cached}") 108 message(FATAL_ERROR 109 "The file lexer.lxx has been modified but flex cannot be run.\n" 110 "If you are sure ${PROJECT_SOURCE_DIR}/lib/cached/lexer.yy.cpp is correct then " 111 "copy lexer.lxx's md5 ${lexer_lxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 112 ) 113 endif() 114 115 MD5(${PROJECT_SOURCE_DIR}/lib/support/regex/lexer.lxx regex_lexer_lxx_md5) 116 if(NOT "${regex_lexer_lxx_md5}" STREQUAL "${regex_lexer_lxx_md5_cached}") 117 message(FATAL_ERROR 118 "The file regex/lexer.lxx has been modified but flex cannot be run.\n" 119 "If you are sure ${PROJECT_SOURCE_DIR}/lib/cached/regex_lexer.yy.cpp is correct then " 120 "copy regex/lexer.lxx's md5 ${regex_lexer_lxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 121 ) 122 endif() 123 124 MD5(${PROJECT_SOURCE_DIR}/lib/support/assembly/lexer.lxx mza_lexer_lxx_md5) 125 if(NOT "${mza_lexer_lxx_md5}" STREQUAL "${mza_lexer_lxx_md5_cached}") 126 message(FATAL_ERROR 127 "The file assembly/lexer.lxx has been modified but flex cannot be run.\n" 128 "If you are sure ${PROJECT_SOURCE_DIR}/lib/cached/mza_lexer.yy.cpp is correct then " 129 "copy mza/lexer.lxx's md5 ${mza_lexer_lxx_md5} into ${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" 130 ) 131 endif() 132 133 set(FLEX_MZNLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/lib/cached/lexer.yy.cpp) 134 set(FLEX_RegExLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/lib/cached/regex_lexer.yy.cpp) 135 set(FLEX_MZALexer_OUTPUTS ${PROJECT_SOURCE_DIR}/lib/cached/mza_lexer.yy.cpp) 136endif() 137 138if(NOT (GECODE_FOUND AND USE_GECODE)) 139 set(FLEX_RegExLexer_OUTPUTS "") 140 set(BISON_RegExParser_OUTPUTS "") 141endif() 142 143add_library(minizinc_parser OBJECT 144 ${BISON_MZNParser_OUTPUTS} 145 ${FLEX_MZNLexer_OUTPUTS} 146 ${BISON_MZAParser_OUTPUTS} 147 ${FLEX_MZALexer_OUTPUTS} 148 ${BISON_RegExParser_OUTPUTS} 149 ${FLEX_RegExLexer_OUTPUTS} 150) 151 152if(GECODE_FOUND AND USE_GECODE) 153 target_include_directories(minizinc_parser PRIVATE "${GECODE_INCLUDE_DIRS}") 154 target_compile_definitions(minizinc_parser PRIVATE HAS_GECODE) 155endif()