]> git.lyx.org Git - features.git/blob - development/autotests/export.cmake
Cmake lyx2lyx tests: Use a loop to execute roundtrips
[features.git] / development / autotests / export.cmake
1 # This file is part of LyX, the document processor.
2 # Licence details can be found in the file COPYING.
3 #
4 # Copyright (c) 2012 Kornel Benko kornel@lyx.org
5 #
6 #
7 # LYX_ROOT  = ${TOP_SRC_DIR}/lib/{doc,examples,templates}
8 # LYX_USERDIR_VER = Name of environment variable for the user directory
9 # lyx       =
10 # format    = lyx16x|lyx21x|xhtml
11 # extension = 16.lyx|21.lyx|xhtml
12 # file      = xxx
13 #
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} \
19 #       -Dlyx=xxx \
20 #       -Dformat=xxx \
21 #       -Dfonttype=xxx \
22 #       -Dextension=xxx \
23 #       -DLYX_FORMAT_NUM=${_lyx_format_num} \
24 #       -Dfile=xxx \
25 #       -Dinverted=[01] \
26 #       -DTOP_SRC_DIR=${TOP_SRC_DIR}
27 #       -DPERL_EXECUTABLE=${PERL_EXECUTABLE}
28 #       -P "${TOP_SRC_DIR}/development/autotests/export.cmake"
29 #
30
31 set(Perl_Script "${TOP_SRC_DIR}/development/autotests/useSystemFonts.pl")
32 set(Structure_Script "${TOP_SRC_DIR}/development/autotests/beginEndStructureCheck.pl")
33 set(LanguageFile "${TOP_SRC_DIR}/lib/languages")
34 set(GetTempDir "${TOP_SRC_DIR}/development/autotests/getTempDir.pl")
35 set(_ft ${fonttype})
36 execute_process(COMMAND ${PERL_EXECUTABLE} "${GetTempDir}" "${WORKDIR}" OUTPUT_VARIABLE TempDir)
37 message(STATUS "using fonttype = ${_ft}")
38 if(format MATCHES "dvi|pdf")
39   message(STATUS "LYX_TESTS_USERDIR = ${LYX_TESTS_USERDIR}")
40   message(STATUS "Converting with perl ${Perl_Script}")
41   set(LYX_SOURCE "${TempDir}/${file}_${format}_${_ft}.lyx")
42   message(STATUS "Using source \"${LYX_ROOT}/${file}.lyx\"")
43   message(STATUS "Using dest \"${LYX_SOURCE}\"")
44   execute_process(COMMAND ${PERL_EXECUTABLE} "${Perl_Script}" "${LYX_ROOT}/${file}.lyx" "${LYX_SOURCE}" ${format} ${_ft} ${LanguageFile}
45     RESULT_VARIABLE _err)
46   string(COMPARE EQUAL  ${_err} 0 _erg)
47   if(NOT _erg)
48     message(FATAL_ERROR "Export failed while converting")
49   endif()
50   set(result_file_name ${file}_${_ft}.${extension})
51 else()
52   message(STATUS "Not converting")
53   set(LYX_SOURCE "${LYX_ROOT}/${file}.lyx")
54   # Font-type not relevant for lyx16/lyx21 exports
55   set(result_file_base ${file})
56 endif()
57
58 set(ENV{${LYX_USERDIR_VER}} "${LYX_TESTS_USERDIR}")
59 if (extension MATCHES "\\.lyx$")
60   set(ENV{${LYX_USERDIR_VER}} "${LYX_TESTS_USERDIR}")
61   set(ENV{LANG} "en") # to get all error-messages in english
62
63   include(${TOP_SRC_DIR}/development/autotests/CheckLoadErrors.cmake)
64   execute_process(
65     COMMAND ${CMAKE_COMMAND} -E md5sum "${LYX_SOURCE}"
66     OUTPUT_VARIABLE source_md5sum_x
67     RESULT_VARIABLE _err
68     ERROR_VARIABLE lyxerr)
69   string(REGEX REPLACE " .*" "" source_md5sum ${source_md5sum_x})
70   message(STATUS "MD5SUM of \"${LYX_SOURCE}\" is ${source_md5sum}")
71   foreach(_lv RANGE 1 5)
72     set(result_file_base "${result_file_base}.${LYX_FORMAT_NUM}")
73     set(result_file_name "${result_file_base}.lyx")
74     file(REMOVE "${result_file_name}" "${result_file_name}.emergency" )
75     message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
76     execute_process(
77       COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
78       RESULT_VARIABLE _err
79       ERROR_VARIABLE lyxerr)
80     if(_err)
81       break()
82     else()
83       if (NOT EXISTS "${result_file_name}")
84         message(STATUS "Expected result file \"${result_file_name}\" does not exist")
85         set(_err -1)
86         break()
87       else()
88         message(STATUS "Expected result file \"${result_file_name}\" exists")
89         checkLoadErrors(lyxerr "${TOP_SRC_DIR}/development/autotests" _err)
90         if(_err)
91           break()
92         endif()
93       endif()
94     endif()
95     execute_process(
96       COMMAND ${CMAKE_COMMAND} -E md5sum ${result_file_name}
97       OUTPUT_VARIABLE result_md5sum_x
98       RESULT_VARIABLE _err
99       ERROR_VARIABLE lyxerr)
100     string(REGEX REPLACE " .*" "" result_md5sum ${result_md5sum_x})
101     message(STATUS "MD5SUM of \"${result_file_name}\" is ${result_md5sum}")
102     if(_err)
103       break()
104     endif()
105     message(STATUS "check structures of ${result_file_name}")
106     execute_process(
107       COMMAND ${PERL_EXECUTABLE} ${Structure_Script} "${WORKDIR}/${result_file_name}"
108       RESULT_VARIABLE _err
109       ERROR_VARIABLE lyxerr)
110     if(_err)
111       break()
112     endif()
113     message(STATUS "check load of ${result_file_name}")
114     execute_process(
115       COMMAND ${lyx} -batch -userdir "${LYX_TESTS_USERDIR}" ${result_file_name}
116       RESULT_VARIABLE _err
117       ERROR_VARIABLE lyxerr)
118     if(_err)
119       break()
120     endif()
121     checkLoadErrors(lyxerr "${TOP_SRC_DIR}/development/autotests" _err)
122     if(_err)
123       break()
124     endif()
125     # Check if result file identical to source file
126     if(result_md5sum STREQUAL ${source_md5sum})
127       message(STATUS "Source(${LYX_SOURCE}) and dest(${result_file_name}) are equal")
128       break()
129     endif()
130     set(source_md5sum ${result_md5sum})
131     set(LYX_SOURCE ${result_file_name})
132   endforeach()
133 else()
134   message(STATUS "Executing ${lyx} -userdir \"${LYX_TESTS_USERDIR}\" -E ${format} ${result_file_name} \"${LYX_SOURCE}\"")
135   file(REMOVE ${result_file_name})
136   execute_process(
137     COMMAND ${lyx} -userdir "${LYX_TESTS_USERDIR}" -E ${format} ${result_file_name} "${LYX_SOURCE}"
138     RESULT_VARIABLE _err)
139
140   #check if result file created
141   if (NOT _err)
142     if (NOT EXISTS "${result_file_name}")
143       message(STATUS "Expected result file \"${result_file_name}\" does not exist")
144       set(_err -1)
145     else()
146       message(STATUS "Expected result file \"${result_file_name}\" exists")
147     endif()
148   endif()
149 endif()
150
151 if(inverted)
152   string(COMPARE EQUAL  ${_err} 0 _erg)
153 else()
154   string(COMPARE NOTEQUAL  ${_err} 0 _erg)
155 endif()
156 execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${TempDir}")
157 if(_erg)
158   message(STATUS "Exporting ${file}.lyx to ${format}")
159   message(FATAL_ERROR "Export failed")
160 endif()