X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FCMakeLists.txt;h=43e1a634df2b7f50861a6a028a56ccd60f9fde5d;hb=0a4bb51a26ede588d5b29da8f71ba72bb74ae76c;hp=d611307e3a82ad79db1b9b4eeddd79203f35addf;hpb=40b0f3dfaeb6d381493cc6b5b880bcec712ca92b;p=lyx.git diff --git a/development/autotests/CMakeLists.txt b/development/autotests/CMakeLists.txt index d611307e3a..43e1a634df 100644 --- a/development/autotests/CMakeLists.txt +++ b/development/autotests/CMakeLists.txt @@ -4,69 +4,239 @@ # Copyright (c) 2012 Kornel Benko kornel@lyx.org # +set(LYX_HOME "out-home") +set(LOCALE_DIR "${CMAKE_CURRENT_BINARY_DIR}/locale") +file(MAKE_DIRECTORY "${LOCALE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}") + if(Q_WS_X11) + set(Missing) + set(XVFBDLIBS) # Make sure, the needed programs are in PATH find_program(PCREGREP_EXE "pcregrep") + if (NOT PCREGREP_EXE) + list(APPEND Missing "pcregrep") + endif() find_program(WMCTRL_EXE "wmctrl") + if(NOT WMCTRL_EXE) + list(APPEND Missing "wmctrl") + endif() # This is needed to build xvkbd # Programs pcregrep wmctrl and xvkbd are used in subsequent scripts # while testing + + # Check for needed libraries for xvkbd + # do not add autotests, if any of them is lacking + find_package(X11) - if(X11_FOUND AND PCREGREP_EXE AND WMCTRL_EXE) - #message(STATUS "PCREGREP_EXE and WMCTRL_EXE found") - project(autotests) + if(NOT X11_FOUND) + list(APPEND Missing "X11") + endif() + find_package(PkgConfig) + if(PKG_CONFIG_FOUND) + foreach(_lb "xaw7" "xmu" "xtst") + pkg_check_modules(${_lb}LIB ${_lb}) + if(${_lb}LIB_LIBRARIES) + list(APPEND XVFBDLIBS ${${_lb}LIB_LIBRARIES}) + else() + list(APPEND Missing ${_lb}) + endif() + endforeach() + else() + foreach(_lb "Xaw7" "Xmu") + find_library(${_lb}LIB ${_lb}) + if(${_lb}LIB) + list(APPEND XVFBDLIBS ${${_lb}LIB}) + else() + list(APPEND Missing ${_lb}) + endif() + endforeach() + foreach(_lb Xt XTest X11) + if(X11_${_lb}_LIB) + list(APPEND XVFBDLIBS ${X11_${_lb}_LIB}) + else() + list(APPEND Missing ${_lb}) + endif() + endforeach() + endif() + if (XVFBDLIBS) + list(REMOVE_DUPLICATES XVFBDLIBS) + endif() + + if(Missing) + message(STATUS "Missing Libraries or programs to create xvkbd: ${Missing}") + message(STATUS "cmake build is therefore omitting keytests") + endif() + + if(NOT Missing) + project(keytest) add_subdirectory(xvkbd) set(KEYTEST "${CMAKE_CURRENT_SOURCE_DIR}/keytest.py") - set(LYX_HOME "out-home") - set(LYX_USERDIR "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}/.lyx") - set(LOCALE_DIR "${CMAKE_CURRENT_BINARY_DIR}/locale") file(GLOB TESTST RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*-in.txt") file(GLOB TESTSS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*-in.sh") list(REMOVE_ITEM TESTST hello-world-in.txt first-time-in.txt) list(SORT TESTST) - file(MAKE_DIRECTORY "${LYX_USERDIR}" "${LOCALE_DIR}") foreach(_tf first-time-in.txt hello-world-in.txt ${TESTST}) string(REGEX REPLACE "-in\\.(txt|sh)" "" _t ${_tf}) - add_test(NAME autotests/${_t} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" - COMMAND ${CMAKE_COMMAND} + add_test(NAME keytest/${_t} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} -DAUTOTEST_ROOT=${TOP_SRC_DIR}/development/autotests -DPO_BUILD_DIR=${TOP_BINARY_DIR}/po -DKEYTEST_INFILE=${_tf} -DBINDIR=$ - -DLYX=${_lyx} - -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -DLYX=${_lyx} + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -DLYX_USERDIR_VER=${LYX_USERDIR_VER} -DKEYTEST_OUTFILE=${_t}-out.txt -DPACKAGE=${PACKAGE} -DLOCALE_DIR=${LOCALE_DIR} -P ${TOP_SRC_DIR}/development/autotests/single-test.cmake) + settestlabel(keytest/${_t} "key") + set_tests_properties(keytest/${_t} PROPERTIES RUN_SERIAL ON) endforeach() endif() endif() -file(GLOB lyx_files RELATIVE "${TOP_SRC_DIR}/lib/doc" "${TOP_SRC_DIR}/lib/doc/*.lyx") -foreach(f ${lyx_files}) - # Strip extension - string(REGEX REPLACE "\\.lyx$" "" f ${f}) - add_test(NAME autotests/export/${f}_lyx16 - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" - COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${TOP_SRC_DIR}/lib/doc +find_package(Perl) + +macro(getoutputformats filepath varname) + file(STRINGS "${filepath}" lines) + set(out_formats "xhtml" "dvi" "dvi3" "pdf" "pdf2" "pdf3" "pdf4" "pdf5") + if(NOT PERL_FOUND) + list(REMOVE_ITEM out_formats "dvi3" "pdf4" "pdf5") + endif() + set(${varname} ${out_formats}) + foreach(_l ${lines}) + if(_l MATCHES "^\\\\default_output_format +\([^ ]+\)") + if(CMAKE_MATCH_1 STREQUAL "default") + set(found ${out_formats}) + elseif(CMAKE_MATCH_1 STREQUAL "xhtml") + set(found "xhtml") + else() + set(found "xhtml" ${CMAKE_MATCH_1}) + endif() + set(${varname} ${found}) + break() + endif() + endforeach() +endmacro() + +macro(maketestname testname reverted listreverted listignored) + list(FIND ${listignored} ${${testname}} _idx) + if (${_idx} LESS 0) + list(FIND ${listreverted} ${${testname}} _idx) + if (${_idx} LESS 0) + set(${reverted} 0) + else() + set(${reverted} 1) + set(${testname} "INVERTED_SEE-README.ctest_${${testname}}") + endif() + else() + set(${testname} "") + endif() +endmacro() + +macro(loadTestList filename resList) + # Create list of strings from a file without comments + file(STRINGS ${filename} tempList) + set(${resList}) + foreach(_l ${tempList}) + string(REGEX REPLACE "[ \t]*#.*" "" _newl "${_l}") + if(_newl) + list(APPEND ${resList} "${_newl}") + endif() + endforeach() +endmacro() + +loadTestList(revertedTests revertedTests) +loadTestList(ignoredTests ignoredTests) + +foreach(libsubfolder doc examples templates) + set(LIBSUB_SRC_DIR "${TOP_SRC_DIR}/lib/${libsubfolder}") + file(GLOB_RECURSE lyx_files RELATIVE "${LIBSUB_SRC_DIR}" "${LIBSUB_SRC_DIR}/*.lyx") + list(SORT lyx_files) + # Now create 2 lists. One for files in a language dir, one without + set(lang_lyx_files) + set(nolang_lyx_files) + foreach(f ${lyx_files}) + string(REGEX MATCHALL "^[a-z][a-z](_[A-Z][A-Z])?\\/" _v ${f}) + if(_v) + list(APPEND lang_lyx_files ${f}) + else() + list(APPEND nolang_lyx_files ${f}) + endif() + endforeach() + foreach(f ${nolang_lyx_files} ${lang_lyx_files}) + # Strip extension + string(REGEX REPLACE "\\.lyx$" "" f ${f}) + set(TestName "export/${libsubfolder}/${f}_lyx16") + maketestname(TestName reverted revertedTests ignoredTests) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} -Dlyx=$ - -Dformat=lyx16x - -Dextension=16.lyx - -Dfile=${f} - -P "${TOP_SRC_DIR}/development/autotests/export.cmake") - add_test(NAME autotests/export/${f}_xhtml - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" - COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${TOP_SRC_DIR}/lib/doc + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -DLYX_USERDIR_VER=${LYX_USERDIR_VER} + -Dformat=lyx16x + -Dextension=16.lyx + -Dfile=${f} + -Dreverted=${reverted} + -DTOP_SRC_DIR=${TOP_SRC_DIR} + -DPERL_EXECUTABLE=${PERL_EXECUTABLE} + -P "${TOP_SRC_DIR}/development/autotests/export.cmake") + setmarkedtestlabel(${TestName} ${reverted} "export") + endif() + set(TestName "lyx2lyx/${libsubfolder}/${f}") + maketestname(TestName reverted revertedTests ignoredTests) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYX2LYX=${TOP_SRC_DIR}/lib/lyx2lyx/lyx2lyx + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} + -DLYXFILE=${LIBSUB_SRC_DIR}/${f}.lyx + -P "${TOP_SRC_DIR}/development/autotests/lyx2lyxtest.cmake") + setmarkedtestlabel(${TestName} ${reverted} "export") + endif() + set(TestName "check_load/${libsubfolder}/${f}") + maketestname(TestName reverted revertedTests ignoredTests) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYXFILE=${LIBSUB_SRC_DIR}/${f}.lyx + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} + -Dlyx=$ + -DPARAMS_DIR=${TOP_SRC_DIR}/development/autotests + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -P "${TOP_SRC_DIR}/development/autotests/check_load.cmake") + setmarkedtestlabel(${TestName} ${reverted} "load") + endif() + getoutputformats("${LIBSUB_SRC_DIR}/${f}.lyx" formatlist) + foreach(format ${formatlist}) + set(TestName "export/${libsubfolder}/${f}_${format}") + maketestname(TestName reverted revertedTests ignoredTests) + if(TestName) + add_test(NAME ${TestName} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME}" + COMMAND ${CMAKE_COMMAND} -DLYX_ROOT=${LIBSUB_SRC_DIR} + -DLYX_TESTS_USERDIR=${LYX_TESTS_USERDIR} -Dlyx=$ - -Dformat=xhtml - -Dextension=xhtml - -Dfile=${f} - -P "${TOP_SRC_DIR}/development/autotests/export.cmake") + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/${LYX_HOME} + -Dformat=${format} + -Dextension=${format} + -Dfile=${f} + -Dreverted=${reverted} + -DTOP_SRC_DIR=${TOP_SRC_DIR} + -DPERL_EXECUTABLE=${PERL_EXECUTABLE} + -P "${TOP_SRC_DIR}/development/autotests/export.cmake") + setmarkedtestlabel(${TestName} ${reverted} "export") + endif() + endforeach() + endforeach() endforeach() -