1 # This file is part of LyX, the document processor.
2 # Licence details can be found in the file COPYING.
4 # Copyright (c) 2012 Kornel Benko kornel@lyx.org
7 # LYX_ROOT = ${TOP_SRC_DIR}/lib/{doc,examples,templates,tabletemplates}
8 # LYX_USERDIR_VER = Name of environment variable for the user directory
10 # format = lyx16x|lyx20x|lyx21x|lyx22x|xhtml|docbook5
11 # extension = 16.lyx|20.lyx|21.lyx|22.lyx|xhtml|xml
14 # Script should be called like:
15 # cmake -DLYX_ROOT=xxx \
16 # -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} \
17 # -DWORKDIR=${BUILD_DIR}/autotests/out-home \
18 # -DLYX_USERDIR_VER=${LYX_USERDIR_VER} \
23 # -DLYX_FORMAT_NUM=${_lyx_format_num} \
26 # -DTOP_SRC_DIR=${TOP_SRC_DIR} \
27 # -DIgnoreErrorMessage=(ON/OFF) \
28 # -DPERL_EXECUTABLE=${PERL_EXECUTABLE} \
29 # -DXMLLINT_EXECUTABLE=${XMLLINT_EXECUTABLE} \
31 # -P "${TOP_SRC_DIR}/development/autotests/export.cmake"
34 set(_TestResultMessage "")
35 message(STATUS "IgnoreErrorMessage = \"${IgnoreErrorMessage}\"")
36 set(Perl_Script "${TOP_SRC_DIR}/development/autotests/useSystemFonts.pl")
37 set(Structure_Script "${TOP_SRC_DIR}/development/autotests/beginEndStructureCheck.pl")
38 set(LanguageFile "${TOP_SRC_DIR}/lib/languages")
39 set(GetTempDir "${TOP_SRC_DIR}/development/autotests/getTempDir.pl")
41 execute_process(COMMAND ${PERL_EXECUTABLE} "${GetTempDir}" "${WORKDIR}" OUTPUT_VARIABLE TempDir)
42 message(STATUS "using fonttype = ${_ft}")
44 set(ENCODING "default")
46 if(ENCODING STREQUAL "default")
49 set(_enc "_${ENCODING}")
52 # move the the last directory part of LYX_ROOT to filename
53 # to make the destination unique for otherwise identical
55 get_filename_component(updir_ "${LYX_ROOT}" DIRECTORY)
56 get_filename_component(updir2_ "${LYX_ROOT}" NAME)
57 set(file "${updir2_}/${file}")
58 set(LYX_ROOT "${updir_}")
60 if(format MATCHES "dvi|pdf")
61 message(STATUS "LYX_TESTS_USERDIR = ${LYX_TESTS_USERDIR}")
62 message(STATUS "Converting with perl ${Perl_Script}")
63 set(LYX_SOURCE "${TempDir}/${file}_${format}_${_ft}${_enc}.lyx")
64 message(STATUS "Using source \"${LYX_ROOT}/${file}.lyx\"")
65 message(STATUS "Using dest \"${LYX_SOURCE}\"")
66 if(NOT "${ENCODING}" STREQUAL "default")
67 # message(STATUS "ENCODING = ${ENCODING}")
69 message(STATUS "Executing ${PERL_EXECUTABLE} \"${Perl_Script}\" \"${LYX_ROOT}/${file}.lyx\" \"${LYX_SOURCE}\" ${format} ${_ft} ${ENCODING} ${LanguageFile}")
70 execute_process(COMMAND ${PERL_EXECUTABLE} "${Perl_Script}" "${LYX_ROOT}/${file}.lyx" "${LYX_SOURCE}" ${format} ${_ft} ${ENCODING} ${LanguageFile}
72 string(COMPARE EQUAL ${_err} 0 _erg)
74 message(FATAL_ERROR "Export failed while converting")
76 set(result_file_name ${file}_${_ft}.${extension})
78 message(STATUS "Converting with perl ${Perl_Script}")
79 set(LYX_SOURCE "${TempDir}/${file}.lyx")
80 message(STATUS "Using source \"${LYX_ROOT}/${file}.lyx\"")
81 message(STATUS "Using dest \"${LYX_SOURCE}\"")
82 execute_process(COMMAND ${PERL_EXECUTABLE} "${Perl_Script}" "${LYX_ROOT}/${file}.lyx" "${LYX_SOURCE}" ${format} "dontChange" "default" ${LanguageFile}
84 string(COMPARE EQUAL ${_err} 0 _erg)
86 message(FATAL_ERROR "Export failed while converting")
88 if(extension MATCHES "\\.lyx$")
89 # Font-type not relevant for lyx16/lyx2[0123] exports
90 set(result_file_base "${TempDir}/${file}")
92 set(result_file_name ${file}.${extension})
96 function(get_md5sum msource mresult mreserr)
98 COMMAND ${CMAKE_COMMAND} -E md5sum ${${msource}}
99 OUTPUT_VARIABLE msource_md5sum_x
100 RESULT_VARIABLE mres_err)
102 string(REGEX REPLACE " .*" "" msource_md5sum ${msource_md5sum_x})
103 set(${mresult} ${msource_md5sum} PARENT_SCOPE)
104 message(STATUS "MD5SUM of \"${${msource}}\" is ${msource_md5sum}")
106 set(${mresult} "xx" PARENT_SCOPE)
107 message(STATUS "Error getting MD5SUM of \"${${msource}}\"")
109 set(${mreserr} ${mres_err} PARENT_SCOPE)
112 macro(Summary _err _msg)
114 list(APPEND _TestResultMessage "Error: ${_msg}")
116 list(APPEND _TestResultMessage "OK: ${_msg}")
120 set(ENV{${LYX_USERDIR_VER}} "${LYX_TESTS_USERDIR}")
121 set(ENV{LANG} "en_US.UTF-8") # to get all error-messages in english
122 set(ENV{LANGUAGE} "US:en")
123 #set(ENV{LC_ALL} "C")
124 if (extension MATCHES "\\.lyx$")
125 include(${TOP_SRC_DIR}/development/autotests/CheckLoadErrors.cmake)
126 get_md5sum(LYX_SOURCE source_md5sum _err)
127 foreach(_lv RANGE 1 20)
128 set(used_tex_file "${result_file_base}.tex")
129 set(result_file_base "${result_file_base}.${LYX_FORMAT_NUM}")
130 set(result_file_name "${result_file_base}.lyx")
131 file(REMOVE "${result_file_name}" "${result_file_name}.emergency" )
132 message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
133 message(STATUS "This implicitly checks load of ${LYX_SOURCE}")
135 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
137 ERROR_VARIABLE lyxerr)
138 Summary(_err "Converting \"${LYX_SOURCE}\" to format ${format}")
142 if(NOT EXISTS "${result_file_name}")
144 Summary(_err "Expected result file \"${result_file_name}\" does not exist")
147 message(STATUS "Expected result file \"${result_file_name}\" exists")
149 COMMAND ${PERL_EXECUTABLE} ${Structure_Script} "${result_file_name}"
150 RESULT_VARIABLE _err)
151 Summary(_err "Structure of the intermediate file \"${result_file_name}\"")
155 checkLoadErrors(lyxerr "${TOP_SRC_DIR}/development/autotests" _err)
156 Summary(_err "Examination of error/warning messages of the conversion of \"${LYX_SOURCE}\" to format ${format}")
160 message(STATUS "Create the corresponding .tex file \"${used_tex_file}\"")
162 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E pdflatex ${used_tex_file} "${LYX_SOURCE}"
163 RESULT_VARIABLE _errx)
166 get_md5sum(result_file_name result_md5sum _err)
167 Summary(_err "Getting md5sum of \"${result_file_name}\"")
169 # Somehow the created file is not readable?
172 # Check if result file identical to source file
173 if(result_md5sum STREQUAL ${source_md5sum})
174 if (format MATCHES "lyx(1[0-9]|2[01])x")
175 # Do not compile, missing \origin statement prevents inclusion of
176 # files with relative path
177 message(STATUS "Not exporting due to missing \\origin statement")
179 elseif(format MATCHES "lyx22x" AND file MATCHES "Minted")
180 message(STATUS "Not exporting due to missing minted support")
183 message(STATUS "Source(${LYX_SOURCE}) and dest(${result_file_name}) are equal")
184 message(STATUS "Now try to export the lyx2lyx created file")
185 message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E default \"${result_file_name}.default\" \"${result_file_name}\"")
187 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E default "${result_file_name}.default" "${result_file_name}"
189 ERROR_VARIABLE lyxerr)
190 Summary(_err "Test-compilation of \"${result_file_name}\" to format default")
193 list(APPEND _TestResultMessage "Warning: \"${LYX_SOURCE}\" and \"${result_file_name}\" differ")
194 message(STATUS "Source(${LYX_SOURCE}) and dest(${result_file_name}) are still different")
197 message(STATUS "Possible endless loop encountered")
198 Summary(_err "Test-Loop exceeded the count of 10, Possible endless loop")
202 set(source_md5sum ${result_md5sum})
203 set(LYX_SOURCE ${result_file_name})
206 if ($ENV{LYX_DEBUG_LATEX})
207 set(LyXExtraParams -dbg latex)
209 set(LyXExtraParams -dbg info)
211 if(IgnoreErrorMessage)
212 foreach (_em ${IgnoreErrorMessage})
213 list(APPEND LyXExtraParams --ignore-error-message ${_em})
216 string(REGEX REPLACE ";" " " _LyXExtraParams "${LyXExtraParams}")
217 message(STATUS "Executing ${lyx} ${_LyXExtraParams} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
218 file(REMOVE ${result_file_name})
220 COMMAND ${lyx} ${LyXExtraParams} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
221 RESULT_VARIABLE _err)
222 Summary(_err "Exporting \"${LYX_SOURCE}\" to format ${format}")
224 #check if result file created
225 if (NOT EXISTS "${result_file_name}")
226 message(STATUS "Expected result file \"${result_file_name}\" does not exist")
228 Summary(_err "Expected result file \"${result_file_name}\" does not exists")
230 message(STATUS "Expected result file \"${result_file_name}\" exists")
231 if (extension MATCHES "^x(ht)?ml$")
232 if (format MATCHES "xhtml")
233 set(xmllint_params --loaddtd --noout)
234 set(executable_ ${XMLLINT_EXECUTABLE})
237 set(executable_ ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/filterXml4Sax.pl")
238 # Check with perl xml-parser
239 # needs XML::Parser module
240 message(STATUS "Calling ${PERL_EXECUTABLE} \"${TOP_SRC_DIR}/development/autotests/xmlParser.pl\" \"${result_file_name}\"")
242 COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/xmlParser.pl" "${result_file_name}"
243 OUTPUT_VARIABLE parserout
244 ERROR_VARIABLE parsererr
248 message(STATUS "${parsererr}")
250 Summary(_err "Checking \"${result_file_name}\" with xmlParser.pl")
252 if (XMLLINT_EXECUTABLE)
253 string(REPLACE ";" " " xmllint_params2 " ${xmllint_params}")
254 message(STATUS "Calling: " ${executable_} ${xmllint_params2} " ${WORKDIR}/${result_file_name}")
255 # check the created xhtml file
257 COMMAND ${executable_} ${xmllint_params} "${result_file_name}"
258 OUTPUT_VARIABLE xmlout
259 ERROR_VARIABLE xmlerr
260 RESULT_VARIABLE _err)
261 file(WRITE "${result_file_name}.sax_out" ${xmlout})
262 Summary(_err "Checking \"${result_file_name}\" with ${XMLLINT_EXECUTABLE}")
264 # check if parser output contains error messages
265 message(STATUS "Check the output: ${PERL_EXECUTABLE} ${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl")
267 COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl" "${result_file_name}.sax_out"
268 OUTPUT_VARIABLE xmlout
269 RESULT_VARIABLE _err)
270 Summary(_err "Parse messages of ${XMLLINT_EXECUTABLE} for errors")
272 message(STATUS "Errors from xmllint: ${xmlerr}")
275 if (NOT "${xmlout}" STREQUAL "")
276 message(STATUS "${xmlout}")
278 Summary(_err "Non empty output of \"${XMLLINT_EXECUTABLE}\"")
288 string(COMPARE EQUAL ${_err} 0 _erg)
290 string(COMPARE NOTEQUAL ${_err} 0 _erg)
292 execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}")
293 if(_TestResultMessage)
294 message(STATUS "Msg Summary:")
295 foreach(_l ${_TestResultMessage})
296 message(STATUS "\t${_l}")
300 message(STATUS "Exporting ${file}.lyx to ${format}")
301 message(FATAL_ERROR "Export failed")