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
11 # extension = 16.lyx|20.lyx|21.lyx|22.lyx|xhtml
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}")
51 if(format MATCHES "dvi|pdf")
52 message(STATUS "LYX_TESTS_USERDIR = ${LYX_TESTS_USERDIR}")
53 message(STATUS "Converting with perl ${Perl_Script}")
54 set(LYX_SOURCE "${TempDir}/${file}_${format}_${_ft}${_enc}.lyx")
55 message(STATUS "Using source \"${LYX_ROOT}/${file}.lyx\"")
56 message(STATUS "Using dest \"${LYX_SOURCE}\"")
57 if(NOT "${ENCODING}" STREQUAL "default")
58 # message(STATUS "ENCODING = ${ENCODING}")
60 message(STATUS "Executing ${PERL_EXECUTABLE} \"${Perl_Script}\" \"${LYX_ROOT}/${file}.lyx\" \"${LYX_SOURCE}\" ${format} ${_ft} ${ENCODING} ${LanguageFile}")
61 execute_process(COMMAND ${PERL_EXECUTABLE} "${Perl_Script}" "${LYX_ROOT}/${file}.lyx" "${LYX_SOURCE}" ${format} ${_ft} ${ENCODING} ${LanguageFile}
63 string(COMPARE EQUAL ${_err} 0 _erg)
65 message(FATAL_ERROR "Export failed while converting")
67 set(result_file_name ${file}_${_ft}.${extension})
69 message(STATUS "Converting with perl ${Perl_Script}")
70 set(LYX_SOURCE "${TempDir}/${file}.lyx")
71 message(STATUS "Using source \"${LYX_ROOT}/${file}.lyx\"")
72 message(STATUS "Using dest \"${LYX_SOURCE}\"")
73 execute_process(COMMAND ${PERL_EXECUTABLE} "${Perl_Script}" "${LYX_ROOT}/${file}.lyx" "${LYX_SOURCE}" ${format} "dontChange" "default" ${LanguageFile}
75 string(COMPARE EQUAL ${_err} 0 _erg)
77 message(FATAL_ERROR "Export failed while converting")
79 if(extension MATCHES "\\.lyx$")
80 # Font-type not relevant for lyx16/lyx2[0123] exports
81 set(result_file_base "${TempDir}/${file}")
83 set(result_file_name ${file}.${extension})
87 function(get_md5sum msource mresult mreserr)
89 COMMAND ${CMAKE_COMMAND} -E md5sum ${${msource}}
90 OUTPUT_VARIABLE msource_md5sum_x
91 RESULT_VARIABLE mres_err)
93 string(REGEX REPLACE " .*" "" msource_md5sum ${msource_md5sum_x})
94 set(${mresult} ${msource_md5sum} PARENT_SCOPE)
95 message(STATUS "MD5SUM of \"${${msource}}\" is ${msource_md5sum}")
97 set(${mresult} "xx" PARENT_SCOPE)
98 message(STATUS "Error getting MD5SUM of \"${${msource}}\"")
100 set(${mreserr} ${mres_err} PARENT_SCOPE)
103 macro(Summary _err _msg)
105 list(APPEND _TestResultMessage "Error: ${_msg}")
107 list(APPEND _TestResultMessage "OK: ${_msg}")
111 set(ENV{${LYX_USERDIR_VER}} "${LYX_TESTS_USERDIR}")
112 set(ENV{LANG} "en_US.UTF-8") # to get all error-messages in english
113 set(ENV{LANGUAGE} "US:en")
114 #set(ENV{LC_ALL} "C")
115 if (extension MATCHES "\\.lyx$")
116 include(${TOP_SRC_DIR}/development/autotests/CheckLoadErrors.cmake)
117 get_md5sum(LYX_SOURCE source_md5sum _err)
118 foreach(_lv RANGE 1 20)
119 set(used_tex_file "${result_file_base}.tex")
120 set(result_file_base "${result_file_base}.${LYX_FORMAT_NUM}")
121 set(result_file_name "${result_file_base}.lyx")
122 file(REMOVE "${result_file_name}" "${result_file_name}.emergency" )
123 message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
124 message(STATUS "This implicitly checks load of ${LYX_SOURCE}")
126 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
128 ERROR_VARIABLE lyxerr)
129 Summary(_err "Converting \"${LYX_SOURCE}\" to format ${format}")
133 if(NOT EXISTS "${result_file_name}")
135 Summary(_err "Expected result file \"${result_file_name}\" does not exist")
138 message(STATUS "Expected result file \"${result_file_name}\" exists")
140 COMMAND ${PERL_EXECUTABLE} ${Structure_Script} "${result_file_name}"
141 RESULT_VARIABLE _err)
142 Summary(_err "Structure of the intermediate file \"${result_file_name}\"")
146 checkLoadErrors(lyxerr "${TOP_SRC_DIR}/development/autotests" _err)
147 Summary(_err "Examination of error/warning messages of the conversion of \"${LYX_SOURCE}\" to format ${format}")
151 message(STATUS "Create the corresponding .tex file \"${used_tex_file}\"")
153 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E pdflatex ${used_tex_file} "${LYX_SOURCE}"
154 RESULT_VARIABLE _errx)
157 get_md5sum(result_file_name result_md5sum _err)
158 Summary(_err "Getting md5sum of \"${result_file_name}\"")
160 # Somehow the created file is not readable?
163 # Check if result file identical to source file
164 if(result_md5sum STREQUAL ${source_md5sum})
165 if (format MATCHES "lyx(1[0-9]|2[01])x")
166 # Do not compile, missing \origin statement prevents inclusion of
167 # files with relative path
168 message(STATUS "Not exporting due to missing \\origin statement")
170 elseif(format MATCHES "lyx22x" AND file MATCHES "Minted")
171 message(STATUS "Not exporting due to missing minted support")
174 message(STATUS "Source(${LYX_SOURCE}) and dest(${result_file_name}) are equal")
175 message(STATUS "Now try to export the lyx2lyx created file")
176 message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E default \"${result_file_name}.default\" \"${result_file_name}\"")
178 COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E default "${result_file_name}.default" "${result_file_name}"
180 ERROR_VARIABLE lyxerr)
181 Summary(_err "Test-compilation of \"${result_file_name}\" to format default")
184 list(APPEND _TestResultMessage "Warning: \"${LYX_SOURCE}\" and \"${result_file_name}\" differ")
185 message(STATUS "Source(${LYX_SOURCE}) and dest(${result_file_name}) are still different")
188 message(STATUS "Possible endless loop encountered")
189 Summary(_err "Test-Loop exceeded the count of 10, Possible endless loop")
193 set(source_md5sum ${result_md5sum})
194 set(LYX_SOURCE ${result_file_name})
197 if ($ENV{LYX_DEBUG_LATEX})
198 set(LyXExtraParams -dbg latex)
202 if(IgnoreErrorMessage)
203 foreach (_em ${IgnoreErrorMessage})
204 list(APPEND LyXExtraParams --ignore-error-message ${_em})
207 string(REGEX REPLACE ";" " " _LyXExtraParams "${LyXExtraParams}")
208 message(STATUS "Executing ${lyx} ${_LyXExtraParams} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
209 file(REMOVE ${result_file_name})
211 COMMAND ${lyx} ${LyXExtraParams} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
212 RESULT_VARIABLE _err)
213 Summary(_err "Exporting \"${LYX_SOURCE}\" to format ${format}")
215 #check if result file created
216 if (NOT EXISTS "${result_file_name}")
217 message(STATUS "Expected result file \"${result_file_name}\" does not exist")
219 Summary(_err "Expected result file \"${result_file_name}\" does not exists")
221 message(STATUS "Expected result file \"${result_file_name}\" exists")
222 if (format MATCHES "xhtml")
223 if (XMLLINT_EXECUTABLE)
224 message(STATUS "Calling: ${XMLLINT_EXECUTABLE} --sax --html --valid")
225 # check the created xhtml file
227 COMMAND ${XMLLINT_EXECUTABLE} --sax --html --valid "${result_file_name}"
228 OUTPUT_VARIABLE xmlout
229 ERROR_VARIABLE xmlerr
230 RESULT_VARIABLE _err)
231 file(WRITE "${result_file_name}.sax_out" ${xmlout})
232 Summary(_err "Checking \"${result_file_name}\" with ${XMLLINT_EXECUTABLE}")
234 # check if sax-parser output contains error messages
235 message(STATUS "Check the output: ${PERL_EXECUTABLE} ${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl")
237 COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl" "${result_file_name}.sax_out"
238 OUTPUT_VARIABLE xmlout
239 RESULT_VARIABLE _err)
240 Summary(_err "Parse messages of ${XMLLINT_EXECUTABLE} for errors")
243 if (NOT "${xmlout}" STREQUAL "")
244 message(STATUS "${xmlout}")
246 Summary(_err "Non empty output of \"${XMLLINT_EXECUTABLE}\"")
256 string(COMPARE EQUAL ${_err} 0 _erg)
258 string(COMPARE NOTEQUAL ${_err} 0 _erg)
260 execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}")
261 if(_TestResultMessage)
262 message(STATUS "Msg Summary:")
263 foreach(_l ${_TestResultMessage})
264 message(STATUS "\t${_l}")
268 message(STATUS "Exporting ${file}.lyx to ${format}")
269 message(FATAL_ERROR "Export failed")