lyx_mirror/development/autotests/check_load.cmake
Scott Kostyshak 7affdd5764 New ctests to check for parsing and other errors
These tests load the .lyx files to see if there are
any parsing errors or other LyX errors/warnings. The
tests fail if LyX writes a line to STDERR that does not
match any of the regexes stored in filterCheckWarnings.

Thanks to Kornel for the CMake expertise and corrections.
This patch was written jointly with him.
2013-08-22 19:01:23 -04:00

57 lines
1.6 KiB
CMake

# This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING.
#
# Copyright (c) 2013 Kornel Benko kornel@lyx.org
# Copyright (c) 2013 Scott Kostyshak skotysh@lyx.org
#
#
# LYXFILE = xxx
# lyx =
#
# Script should be called like:
# cmake -DWORKDIR=${BUILD_DIR}/autotests/out-home \
# -DLYXFILE=xxx \
# -DLYX_USERDIR_VER=${LYX_USERDIR_VER} \
# -DPARAMS_DIR="${TOP_SRC_DIR}/development/autotests" \
# -P "${TOP_SRC_DIR}/development/autotests/check_load.cmake"
#
message(STATUS "Executing ${lyx} -batch ${LYXFILE}")
set(ENV{${LYX_USERDIR_VER}} "${WORKDIR}/.lyx")
set(ENV{LANG} "en") # to get all error-messages in english
execute_process(
COMMAND ${lyx} -batch -userdir ${WORKDIR}/.lyx ${LYXFILE}
RESULT_VARIABLE _err
ERROR_VARIABLE lyxerr)
message(STATUS "Error code of lyx = ${_err}")
string(COMPARE NOTEQUAL ${_err} 0 _erg)
if(lyxerr)
file(STRINGS "${PARAMS_DIR}/filterCheckWarnings" ignoreRegexp)
# Split lyxerr into lines
string(REGEX REPLACE "[\n]+" ";" foundErrors ${lyxerr})
foreach(_l ${foundErrors})
message(STATUS "Checking line: \"${_l}\"")
set(found 0)
foreach(_r ${ignoreRegexp})
string(REGEX MATCHALL "${_r}" _match ${_l})
if(_match)
set(found 1)
break()
endif()
endforeach()
if(NOT found)
# It is error, because the error-line does not match
# any ignoring expression
set(_erg 1)
endif()
endforeach()
endif()
if(_erg)
# We print here the whole error output, even the ignored part
message(FATAL_ERROR "lyx gave warnings/errors:\n${lyxerr}")
endif()