From cb5a9c3f31b0233a5dc72d13f9f4cfa7db5fe00c Mon Sep 17 00:00:00 2001 From: albert-github Date: Wed, 10 Jun 2020 21:44:36 +0200 Subject: issue #7778 Build fails with javacc 5.0 (#7779) * issue #7778 Build fails with javacc 5.0 At the moment doxygen works with javaCC version 7.0.5 but no test is done for the version. The minimum requirement has been set to 7.0.5 javacc does not have an option to retrieve the version though when giving `--version` a bit more information is given, this information is filtered. (an issue has been submitted to javacc to obtain the version information: https://github.com/javacc/javacc/issues/172). * issue #7778 Build fails with javacc 5.0 Version detection did not work for `5.0` (only x.y.z was handled, not x.y) * issue #7778 Build fails with javacc 5.0 Based on a review - `--version` is not a valid option, but present already for future use but - removed double ` if(JAVACC_EXECUTABLE)` - Needed `"${JAVACC_TEMP_VERSION}"` as otherwise when `javacc` is found but cannot be executed a message like: ``` CMake Error at cmake/FindJavacc.cmake:11 (string): string sub-command REGEX, mode MATCH needs at least 5 arguments total to command. Call Stack (most recent call first): vhdlparser/CMakeLists.txt:1 (find_package) ``` would appear - reformulated some status strings * issue #7778 Build fails with javacc 5.0 the `.` was not correctly escaped. * issue #7778 Build fails with javacc 5.0 Another one 7.0........ match, going for the suggested match in the cmake CheckCXXCompilerFlag * issue #7778 Build fails with javacc 5.0 Accidently left debug statement. * issue #7778 Build fails with javacc 5.0 Problem has been fixed upstream for version 7.0.7 and up, not using `--version` but `-version` as all command line arguments are starting with a single '-'. Also it is just the bare version, so small extra test so it will work with all versions. --- cmake/FindJavacc.cmake | 17 ++++++++++++++++- vhdlparser/CMakeLists.txt | 6 ++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/cmake/FindJavacc.cmake b/cmake/FindJavacc.cmake index c7de776..a134020 100755 --- a/cmake/FindJavacc.cmake +++ b/cmake/FindJavacc.cmake @@ -1,9 +1,24 @@ - find_program(JAVACC_EXECUTABLE NAMES javacc javaCC Javacc JavaCC javacc.bat DOC "path to the javacc executable") mark_as_advanced(JAVACC_EXECUTABLE) if(JAVACC_EXECUTABLE) set(JAVACC_FOUND 1) message(STATUS "The javacc executable: ${JAVACC_EXECUTABLE}") + execute_process( + COMMAND "${JAVACC_EXECUTABLE}" -version + OUTPUT_VARIABLE JAVACC_TEMP_VERSION + ) + string(REGEX MATCH ".* ([0-9]+(\\.[0-9]+)+) .*" JAVACC_TEMP_VERSION2_UNUSED "${JAVACC_TEMP_VERSION}") + if(CMAKE_MATCH_1) + set(JAVACC_VERSION ${CMAKE_MATCH_1}) + else() + string(REGEX MATCH "([0-9]+(\\.[0-9]+)+)" JAVACC_TEMP_VERSION3_UNUSED "${JAVACC_TEMP_VERSION}") + if(CMAKE_MATCH_1) + set(JAVACC_VERSION ${CMAKE_MATCH_1}) + else() + message(STATUS "Unable to determine JavaCC version, using existing files") + set(JAVACC_FOUND 0) + endif() + endif() else() set(JAVACC_FOUND 0) message(STATUS "The javacc executable not found, using existing files") diff --git a/vhdlparser/CMakeLists.txt b/vhdlparser/CMakeLists.txt index 3e52817..343f126 100644 --- a/vhdlparser/CMakeLists.txt +++ b/vhdlparser/CMakeLists.txt @@ -1,11 +1,17 @@ find_package(Javacc) if (JAVACC_FOUND) + if (JAVACC_VERSION VERSION_LESS 7.0.5) + message(STATUS " Doxygen requires at least JavaCC version 7.0.5 (installed: ${JAVACC_VERSION})") + message(STATUS " Fall back to JavaCC not installed, using existing files.") + else() + add_custom_command( COMMAND ${JAVACC_EXECUTABLE} ${JAVACC_FLAGS} -OUTPUT_DIRECTORY=${CMAKE_SOURCE_DIR}/vhdlparser ${CMAKE_SOURCE_DIR}/vhdlparser/vhdlparser.jj DEPENDS ${CMAKE_SOURCE_DIR}/vhdlparser/vhdlparser.jj OUTPUT ${CMAKE_SOURCE_DIR}/vhdlparser/CharStream.cc ${CMAKE_SOURCE_DIR}/vhdlparser/CharStream.h ${CMAKE_SOURCE_DIR}/vhdlparser/ErrorHandler.h ${CMAKE_SOURCE_DIR}/vhdlparser/ParseException.cc ${CMAKE_SOURCE_DIR}/vhdlparser/ParseException.h ${CMAKE_SOURCE_DIR}/vhdlparser/Token.cc ${CMAKE_SOURCE_DIR}/vhdlparser/Token.h ${CMAKE_SOURCE_DIR}/vhdlparser/TokenManager.h ${CMAKE_SOURCE_DIR}/vhdlparser/TokenMgrError.cc ${CMAKE_SOURCE_DIR}/vhdlparser/TokenMgrError.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParser.cc ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParser.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserConstants.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserTokenManager.cc ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserTokenManager.h ) + endif() endif() include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/qtools ${GENERATED_SRC}) -- cgit v0.12