# create zip_err_str.c from zip.h and zipint.h file(READ ${PROJECT_SOURCE_DIR}/lib/zip.h zip_h) string(REGEX MATCHALL "#define ZIP_ER_([A-Z0-9_]+) ([0-9]+)[ \t]+/([-*0-9a-zA-Z, ']*)/" zip_h_err ${zip_h}) file(READ ${PROJECT_SOURCE_DIR}/lib/zipint.h zipint_h) string(REGEX MATCHALL "#define ZIP_ER_DETAIL_([A-Z0-9_]+) ([0-9]+)[ \t]+/([-*0-9a-zA-Z, ']*)/" zipint_h_err ${zipint_h}) set(zip_err_str [=[ /* This file was generated automatically by CMake from zip.h and zipint.h\; make changes there. */ #include "zipint.h" #define L ZIP_ET_LIBZIP #define N ZIP_ET_NONE #define S ZIP_ET_SYS #define Z ZIP_ET_ZLIB #define E ZIP_DETAIL_ET_ENTRY #define G ZIP_DETAIL_ET_GLOBAL const struct _zip_err_info _zip_err_str[] = { ]=]) set(zip_err_type) foreach(errln ${zip_h_err}) string(REGEX MATCH "#define ZIP_ER_([A-Z0-9_]+) ([0-9]+)[ \t]+/([-*0-9a-zA-Z, ']*)/" err_t_tt ${errln}) string(REGEX MATCH "([L|N|S|Z]+) ([-0-9a-zA-Z,, ']*)" err_t_tt "${CMAKE_MATCH_3}") string(STRIP "${CMAKE_MATCH_2}" err_t_tt) string(APPEND zip_err_str " { ${CMAKE_MATCH_1}, \"${err_t_tt}\" },\n") endforeach() string(APPEND zip_err_str [=[}\; const int _zip_err_str_count = sizeof(_zip_err_str)/sizeof(_zip_err_str[0])\; const struct _zip_err_info _zip_err_details[] = { ]=]) foreach(errln ${zipint_h_err}) string(REGEX MATCH "#define ZIP_ER_DETAIL_([A-Z0-9_]+) ([0-9]+)[ \t]+/([-*0-9a-zA-Z, ']*)/" err_t_tt ${errln}) string(REGEX MATCH "([E|G]+) ([-0-9a-zA-Z, ']*)" err_t_tt "${CMAKE_MATCH_3}") string(STRIP "${CMAKE_MATCH_2}" err_t_tt) string(APPEND zip_err_str " { ${CMAKE_MATCH_1}, \"${err_t_tt}\" },\n") endforeach() string(APPEND zip_err_str [=[}\; const int _zip_err_details_count = sizeof(_zip_err_details)/sizeof(_zip_err_details[0])\; ]=]) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zip_err_str.c ${zip_err_str})