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}")
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 (extension MATCHES "^x(ht)?ml$")
223 if (format MATCHES "xhtml")
224 set(xmllint_params --sax --html --valid)
225 set(executable_ ${XMLLINT_EXECUTABLE})
228 set(executable_ ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/filterXml4Sax.pl")
230 if (XMLLINT_EXECUTABLE)
231 message(STATUS "Calling: ${XMLLINT_EXECUTABLE} " ${xmllint_params})
232 # check the created xhtml file
234 COMMAND ${executable_} ${xmllint_params} "${result_file_name}"
235 OUTPUT_VARIABLE xmlout
236 ERROR_VARIABLE xmlerr
237 RESULT_VARIABLE _err)
238 file(WRITE "${result_file_name}.sax_out" ${xmlout})
239 Summary(_err "Checking \"${result_file_name}\" with ${XMLLINT_EXECUTABLE}")
241 # check if sax-parser output contains error messages
242 message(STATUS "Check the output: ${PERL_EXECUTABLE} ${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl")
244 COMMAND ${PERL_EXECUTABLE} "${TOP_SRC_DIR}/development/autotests/examineXmllintOutput.pl" "${result_file_name}.sax_out"
245 OUTPUT_VARIABLE xmlout
246 RESULT_VARIABLE _err)
247 Summary(_err "Parse messages of ${XMLLINT_EXECUTABLE} for errors")
250 if (NOT "${xmlout}" STREQUAL "")
251 message(STATUS "${xmlout}")
253 Summary(_err "Non empty output of \"${XMLLINT_EXECUTABLE}\"")
263 string(COMPARE EQUAL ${_err} 0 _erg)
265 string(COMPARE NOTEQUAL ${_err} 0 _erg)
267 execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}")
268 if(_TestResultMessage)
269 message(STATUS "Msg Summary:")
270 foreach(_l ${_TestResultMessage})
271 message(STATUS "\t${_l}")
275 message(STATUS "Exporting ${file}.lyx to ${format}")
276 message(FATAL_ERROR "Export failed")