this repo has no description
at develop 3.4 kB view raw
1# Script to update the cached lexer and parser 2# Run after modifying lexer.lxx and/or parser.yxx 3# 4# 1. generate lexer and parser by building libminizinc 5# 2. run cmake -DPROJECT_SOURCE_DIR=. -DPROJECT_BINARY_DIR=build -P cmake/scripts/md5_gen.cmake 6# replacing . and build with the source and binary directory 7# add -DFORCE=ON to force the renewing of generated files when md5's still match. 8 9option(FORCE "Force the renewing of generated files" OFF) 10 11macro(MD5 filename md5sum) 12 file(READ "${filename}" RAW_MD5_FILE) 13 string(REGEX REPLACE "\r" "" STRIPPED_MD5_FILE "${RAW_MD5_FILE}") 14 string(MD5 ${md5sum} "${STRIPPED_MD5_FILE}") 15endmacro(MD5) 16 17# When updating the cached files, update MD5 sums defined in this file 18include(${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake) 19 20MD5("${PROJECT_SOURCE_DIR}/lib/lexer.lxx" lexer_lxx_md5) 21MD5("${PROJECT_SOURCE_DIR}/lib/parser.yxx" parser_yxx_md5) 22MD5("${PROJECT_SOURCE_DIR}/lib/support/regex/lexer.lxx" regex_lexer_lxx_md5) 23MD5("${PROJECT_SOURCE_DIR}/lib/support/regex/parser.yxx" regex_parser_yxx_md5) 24MD5("${PROJECT_SOURCE_DIR}/lib/support/assembly/lexer.lxx" mza_lexer_lxx_md5) 25MD5("${PROJECT_SOURCE_DIR}/lib/support/assembly/parser.yxx" mza_parser_yxx_md5) 26 27 28if(FORCE OR (NOT "${lexer_lxx_md5}" STREQUAL "${lexer_lxx_md5_cached}")) 29 file(COPY "${PROJECT_BINARY_DIR}/lexer.yy.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 30endif() 31if(FORCE OR (NOT "${parser_yxx_md5}" STREQUAL "${parser_yxx_md5_cached}")) 32 file(COPY "${PROJECT_BINARY_DIR}/parser.tab.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 33 file(COPY "${PROJECT_BINARY_DIR}/include/minizinc/parser.tab.hh" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached/minizinc") 34endif() 35if(FORCE OR (NOT "${regex_lexer_lxx_md5}" STREQUAL "${regex_lexer_lxx_md5_cached}")) 36 file(COPY "${PROJECT_BINARY_DIR}/regex_lexer.yy.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 37endif() 38if(FORCE OR (NOT "${regex_parser_yxx_md5}" STREQUAL "${regex_parser_yxx_md5_cached}")) 39 file(COPY "${PROJECT_BINARY_DIR}/regex_parser.tab.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 40 file(COPY "${PROJECT_BINARY_DIR}/include/minizinc/support/regex_parser.tab.hh" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached/minizinc/support") 41endif() 42if(FORCE OR (NOT "${mza_lexer_lxx_md5}" STREQUAL "${mza_lexer_lxx_md5_cached}")) 43 file(COPY "${PROJECT_BINARY_DIR}/mza_lexer.yy.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 44endif() 45if(FORCE OR (NOT "${mza_parser_yxx_md5}" STREQUAL "${mza_parser_yxx_md5_cached}")) 46 file(COPY "${PROJECT_BINARY_DIR}/mza_parser.tab.cpp" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached") 47 file(COPY "${PROJECT_BINARY_DIR}/include/minizinc/support/mza_parser.tab.hh" DESTINATION "${PROJECT_SOURCE_DIR}/lib/cached/minizinc/support") 48endif() 49 50set(MD5_TEMPLATE "set(lexer_lxx_md5_cached \"${lexer_lxx_md5}\")") 51set(MD5_TEMPLATE "${MD5_TEMPLATE}\nset(parser_yxx_md5_cached \"${parser_yxx_md5}\")") 52set(MD5_TEMPLATE "${MD5_TEMPLATE}\nset(regex_lexer_lxx_md5_cached \"${regex_lexer_lxx_md5}\")") 53set(MD5_TEMPLATE "${MD5_TEMPLATE}\nset(regex_parser_yxx_md5_cached \"${regex_parser_yxx_md5}\")") 54set(MD5_TEMPLATE "${MD5_TEMPLATE}\nset(mza_lexer_lxx_md5_cached \"${mza_lexer_lxx_md5}\")") 55set(MD5_TEMPLATE "${MD5_TEMPLATE}\nset(mza_parser_yxx_md5_cached \"${mza_parser_yxx_md5}\")") 56file(WRITE "${PROJECT_SOURCE_DIR}/lib/cached/md5_cached.cmake" ${MD5_TEMPLATE})