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)

function(hasr VAR RESULT)
    STRING(REGEX MATCH "-r(\\.|$)" hasr_result ${${VAR}})
    if (hasr_result)
        set(${RESULT} "-r" PARENT_SCOPE)
    else (hasr_result)
        set(${RESULT} "" PARENT_SCOPE)
    endif (hasr_result)
endfunction(hasr)

add_custom_target(fuzztest)
file(GLOB_RECURSE tfiles RELATIVE ${PROJECT_SOURCE_DIR} *.fuzz)
set(lastfontname "")
if (NOT GRAPHITE2_ASAN)
    set(noasan -t 20 --memory=8000 --valgrind)
endif (NOT GRAPHITE2_ASAN)
foreach (tfile IN LISTS tfiles)
    set(tpath ${tfile})
    trimtail(tpath tname)
    trimtail(tpath textname)
    trimtail(tpath fname)
    hasr(tname dirargs)
    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 -V -k --input=${PROJECT_SOURCE_DIR}/${fname}/${textname}/${tname} -- ../comparerenderer/comparerenderer -q ${dirargs} -s 12 -n -f {} -t ${PROJECT_SOURCE_DIR}/../texts/${textname}.txt)
    add_custom_command(TARGET fuzztest POST_BUILD COMMAND test -s fuzzregress-${fname}-${textname}-${tname}.log && echo test: ${fname} ${textname} ${tname} failed. || true)
    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 -V -k --input=${PROJECT_SOURCE_DIR}/${fname}/${textname}/${tname} -- ../comparerenderer/comparerenderer --demand -q ${dirargs} -s 12 -n -f {} -t ${PROJECT_SOURCE_DIR}/../texts/${textname}.txt)
    add_custom_command(TARGET fuzztest POST_BUILD COMMAND test -s fuzzregress-demand-${fname}-${textname}-${tname}.log && echo demand test: ${fname} ${textname} ${tname} failed. || true)
endforeach(tfile)

