Git commit 31daba692c020943453150a626ed3cf19562676b by Pino Toscano. Committed on 10/07/2016 at 05:08. Pushed by pino into branch 'master'. Always update the Predicate parser from y/l sources Turn Flex and Bison into required build dependencies, and use them to always regenerate at build time the Predicate parser. This ensures that the parser does not rot, and there is no more need to rely on autogenerated sources added statically among the others. REVIEW: 127972 M +16 -0 CMakeLists.txt M +0 -35 src/solid/CMakeLists.txt M +14 -3 src/solid/devices/CMakeLists.txt http://commits.kde.org/solid/31daba692c020943453150a626ed3cf19562676b diff --git a/CMakeLists.txt b/CMakeLists.txt index a61e39f..ffb0384 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,22 @@ include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMMarkNonGuiExecutable) = +find_package(FLEX REQUIRED) +set_package_properties(FLEX PROPERTIES + URL "http://flex.sourceforge.net" + DESCRIPTION "Fast Lexical Analyzer" + TYPE REQUIRED + PURPOSE "Required for the Predicate parser" +) + +find_package(BISON REQUIRED) +set_package_properties(BISON PROPERTIES + URL "http://www.gnu.org/software/bison" + DESCRIPTION "general-purpose parser generator" + TYPE REQUIRED + PURPOSE "Required for the Predicate parser" +) + if (CMAKE_SYSTEM_NAME MATCHES Linux) find_package( UDev ) = diff --git a/src/solid/CMakeLists.txt b/src/solid/CMakeLists.txt index f2b43b2..83bfba5 100644 --- a/src/solid/CMakeLists.txt +++ b/src/solid/CMakeLists.txt @@ -101,41 +101,6 @@ install(FILES DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/Solid/solid COMPONENT Devel ) = -########### parser build ############### - -set(lexer_FILE predicate_lexer) -set(parser_FILE predicate_parser) - -find_package(FLEX) -set_package_properties(FLEX PROPERTIES DESCRIPTION "Allows the Solid predi= cate parser to be updated" - URL "http://flex.sourceforge.net" - TYPE OPTIONAL - PURPOSE "Required by the UpdateSolidPredicateParser= target (mainly useful for developers)" - ) - -find_package(BISON) -set_package_properties(BISON PROPERTIES - URL "http://www.gnu.org/software/bison" - DESCRIPTION "Allows the Solid predicate parser to be updated" - TYPE OPTIONAL - PURPOSE "Required by the UpdateSolidPredicateParser target (mainly use= ful for developers)" - ) - -if (FLEX_FOUND AND BISON_FOUND) - - add_custom_target(UpdateSolidPredicateParser - COMMAND ${FLEX_EXECUTABLE} -P Solid -o${lexer_FILE}.c= ${lexer_FILE}.l - COMMAND ${BISON_EXECUTABLE} -p Solid -d -b ${parser_F= ILE} ${parser_FILE}.y - COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.c= ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.c - COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.h= ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.h - COMMAND ${CMAKE_COMMAND} -E remove ${parser_FILE}.tab= .c ${parser_FILE}.tab.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - -else () - add_custom_target(UpdateSolidPredicateParser - COMMAND echo "flex and/or bison not found, so target = UpdateSolidPredicateParser inactive") -endif () - include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME Solid LIB_NAME KF5Solid DEPS "core" FILENA= ME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/Solid) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/solid/devices/CMakeLists.txt b/src/solid/devices/CMakeList= s.txt index 9271ae1..e1f3f6e 100644 --- a/src/solid/devices/CMakeLists.txt +++ b/src/solid/devices/CMakeLists.txt @@ -40,8 +40,6 @@ set(solid_LIB_SRCS devices/managerbase.cpp devices/solidnamespace.cpp devices/predicateparse.cpp - devices/predicate_lexer.c - devices/predicate_parser.c = devices/frontend/device.cpp devices/frontend/devicemanager.cpp @@ -80,6 +78,19 @@ set(solid_LIB_SRCS devices/backends/shared/cpufeatures.cpp ) = +bison_target(SolidParser + devices/predicate_parser.y + ${CMAKE_CURRENT_BINARY_DIR}/predicate_parser.c + COMPILE_FLAGS "-p Solid -d -b predicate_parser" +) +flex_target(SolidLexer + devices/predicate_lexer.l + ${CMAKE_CURRENT_BINARY_DIR}/predicate_lexer.c + COMPILE_FLAGS "-P Solid" +) +add_flex_bison_dependency(SolidLexer SolidParser) +list(APPEND solid_LIB_SRCS ${BISON_SolidParser_OUTPUTS} ${FLEX_SolidLexer_= OUTPUTS}) + include(devices/backends/fakehw/CMakeLists.txt) = if(NOT WIN32 AND NOT APPLE) @@ -158,4 +169,4 @@ endif() = if ( UDEV_FOUND ) set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${UDEV_LIBS}) -endif () \ No newline at end of file +endif ()