project(fuzztesting)

function(trimtail VAR RESULT)
    STRING(REGEX MATCH "[^/]+$" trimtail_result ${${VAR}})
    set(${RESULT} ${trimtail_result} PARENT_SCOPE)
    STRING(REGEX REPLACE "^(.*)/[^/]+$" "\\1" trimtail_remainder ${${VAR}})
    set(${VAR} ${trimtail_remainder} PARENT_SCOPE)
endfunction(trimtail)

add_custom_target(fuzztest)
file(GLOB_RECURSE tfiles RELATIVE ${PROJECT_SOURCE_DIR} *.fuzz)
set(lastfontname "")
if (NOT GRAPHITE2_ASAN)
    set(noasan -t 10 --memory=200 --valgrind)
endif (NOT GRAPHITE2_ASAN)
foreach (tfile IN LISTS tfiles)
    set(tpath ${tfile})
    trimtail(tpath tname)
    trimtail(tpath textname)
    trimtail(tpath fname)
    if (NOT lastfontname EQUAL fname)
        add_custom_command(TARGET fuzztest PRE_BUILD COMMAND echo ${fname})
        set(lastfontname ${fname})
    endif(NOT lastfontname EQUAL fname)
    add_custom_command(TARGET fuzztest PRE_BUILD COMMAND ${PROJECT_SOURCE_DIR}/../fuzztest ARGS -l fuzzregress-${fname}-${textname}-${tname}.log -f ${PROJECT_SOURCE_DIR}/../fonts/${fname}.ttf -q ${noasan} --include=required,graphite --exclude==fontdir,opentype,volt,advtypo,post --input=${PROJECT_SOURCE_DIR}/${fname}/${textname}/${tname} -- ../comparerenderer/comparerenderer -q -s 12 -n -f {} -t ${PROJECT_SOURCE_DIR}/texts/${textname}.txt)
    add_custom_command(TARGET fuzztest POST_BUILD COMMAND perl ARGS -e 'print"$$ARGV[0] Failed\\n" if(-s $$ARGV[0])' fuzzregress-${fname}-${textname}-${tname}.log)
    add_custom_command(TARGET fuzztest PRE_BUILD COMMAND ${PROJECT_SOURCE_DIR}/../fuzztest ARGS -l fuzzregress-demand-${fname}-${textname}-${tname}.log -f ${PROJECT_SOURCE_DIR}/../fonts/${fname}.ttf -q ${noasan} --include=required,graphite --exclude==fontdir,opentype,volt,advtypo,post --input=${PROJECT_SOURCE_DIR}/${fname}/${textname}/${tname} -- ../comparerenderer/comparerenderer --demand -q -s 12 -n -f {} -t ${PROJECT_SOURCE_DIR}/texts/${textname}.txt)
    add_custom_command(TARGET fuzztest POST_BUILD COMMAND perl ARGS -e 'print"$$ARGV[0] Failed\\n" if(-s $$ARGV[0])' fuzzregress-demand-${fname}-${textname}-${tname}-demand.log)
endforeach(tfile)

