Warning, /kdevelop/kdevelop-pg-qt/KDevelop-PG-QtConfig.cmake.in is written in an unsupported language. File is not indexed.
0001 #
0002 # Find the KDevelop Parser Generator and set various variables accordingly
0003 #
0004 # KDEVPGQT_DIR and can be set to adjust the directory where the kdevelop-pg-qt
0005 # headers and executable are searched. This should point to the installation
0006 # directory of kdevelop-pg-qt
0007 #
0008 # KDEVPGQT_FOUND - set to TRUE if KDevelop-PG was found FALSE otherwise
0009 #
0010 # KDEVPGQT_INCLUDE_DIR - include dir of kdevelop-pg, for example /usr/include/kdevelop-pg
0011 # can be set by the user to select different include dirs
0012 # KDEVPGQT_EXECUTABLE - the absolute path to the kdevelop-pg executable
0013 #
0014 # KDEVPGQT_GENERATE(SRC_FILE_VAR OUTPUT language
0015 # [NAMESPACE ns] [DEBUG_VISITOR] [TOKEN_TEXT] [DUMP_INFO]
0016 # GRAMMARFILE ADDITIONALDEPS)
0017 # macro to add a custom target for the generation of the parser
0018 # OUTPUT will be given to kdev-pg as the --output parameter and thus sets the filename prefix
0019 # NAMESPACE can be given to choose a namespace different from the OUTPUT value
0020 # DEBUG_VISITOR will run kdevelop-pg with the --debug-visitor argument to generate a simple
0021 # visitor that will print debug messages
0022 # TOKEN_TEXT will run kdevelop-pg with the --token-text argument to generate a simple
0023 # function that returns a readable name of a token
0024 # DUMP_INFO will tell kdevelop-pg to dump extra information about symbols, terminals and rules
0025 # into files in the binary dir
0026 # ENFORCE_COMPATIBLE_ERROR_AWARE_CODE will ensure that --compatible-error-aware-code is also
0027 # passed in case of GCC. By default it only is set for non-GNU compilers.
0028 # Note: The macro only exists when KDEVPG was found
0029 #
0030 # Copyright (c) 2007 Andreas Pakulat <apaku@gmx.de>
0031 # Redistribution and use is allowed according to the terms of the BSD license.
0032 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
0033
0034 @PACKAGE_INIT@
0035
0036 if( KDEVPGQT_INCLUDE_DIR AND KDEVPGQT_EXECUTABLE )
0037 set(KDevelop-PG-Qt_FIND_QUIETLY TRUE)
0038 endif()
0039
0040 if(WIN32)
0041 file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _progFiles)
0042 set(_KDEVPGQT_DIR ${_progFiles}/kdevelop-pg-qt)
0043 endif()
0044
0045 if( NOT KDEVPGQT_DIR )
0046 find_path( _kdevpgqtIncDir kdevelop-pg-qt/kdev-pg-token-stream.h
0047 PATHS
0048 ${CMAKE_INSTALL_PREFIX}/include
0049 ${_KDEVPGQT_DIR}/include
0050 )
0051 if( _kdevpgqtIncDir )
0052 set(KDEVPGQT_INCLUDE_DIR ${_kdevpgqtIncDir}/kdevelop-pg-qt)
0053 endif()
0054 find_program( KDEVPGQT_EXECUTABLE NAMES kdev-pg-qt
0055 PATHS
0056 ${CMAKE_INSTALL_PREFIX}/bin
0057 ${_KDEVPGQT_DIR}/bin
0058 )
0059
0060 set(KDEVPGQT_INCLUDE_DIR ${KDEVPGQT_INCLUDE_DIR} CACHE PATH "kdevelop-pg-qt include directory containing the headers")
0061 set( KDEVPGQT_EXECUTABLE ${KDEVPGQT_EXECUTABLE} CACHE PATH "executable for kdevelop-pg-qt" )
0062 else()
0063 find_path( _kdevpgqtIncDir kdevelop-pg-qt/kdev-pg-token-stream.h
0064 PATHS
0065 ${CMAKE_INSTALL_PREFIX}/include
0066 ${_KDEVPGQT_DIR}/include
0067 ${KDEVPGQT_DIR}/include
0068 )
0069 set(KDEVPGQT_INCLUDE_DIR ${_kdevpgIncDir}/kdevelop-pg-qt)
0070 find_program( KDEVPGQT_EXECUTABLE NAMES kdev-pg-qt
0071 PATHS
0072 ${CMAKE_INSTALL_PREFIX}/bin
0073 ${_KDEVPGQT_DIR}/bin
0074 ${KDEVPGQT_DIR}/bin
0075 )
0076 set(KDEVPGQT_INCLUDE_DIR ${KDEVPGQT_INCLUDE_DIR} CACHE PATH "kdevelop-pg-qt include directory containing the headers")
0077 set( KDEVPGQT_EXECUTABLE ${KDEVPGQT_EXECUTABLE} CACHE PATH "executable for kdevelop-pg-qt" )
0078 endif()
0079 if( KDEVPGQT_INCLUDE_DIR
0080 AND KDEVPGQT_EXECUTABLE)
0081
0082 if( NOT KDevelop-PG-Qt_FIND_QUIETLY )
0083 message(STATUS "Found KDevelop-PG-Qt")
0084 message(STATUS " Using kdevelop-pg-qt include dir: ${KDEVPGQT_INCLUDE_DIR}")
0085 message(STATUS " Using kdevelop-pg-qt executable: ${KDEVPGQT_EXECUTABLE}")
0086 endif()
0087
0088 # if all modules found
0089 set(KDEVPGQT_FOUND TRUE)
0090
0091 macro(KDEVPGQT_GENERATE _srcVar _language )
0092 set(_outputList
0093 "${CMAKE_CURRENT_BINARY_DIR}/${_language}tokentype.h")
0094 set(_depList ${ARGN})
0095 set(_astList
0096 "${CMAKE_CURRENT_BINARY_DIR}/${_language}ast.h")
0097 set(_parserList
0098 "${CMAKE_CURRENT_BINARY_DIR}/${_language}parser.h"
0099 "${CMAKE_CURRENT_BINARY_DIR}/${_language}parser.cpp"
0100 "${CMAKE_CURRENT_BINARY_DIR}/${_language}visitor.h"
0101 "${CMAKE_CURRENT_BINARY_DIR}/${_language}visitor.cpp"
0102 "${CMAKE_CURRENT_BINARY_DIR}/${_language}defaultvisitor.h"
0103 "${CMAKE_CURRENT_BINARY_DIR}/${_language}defaultvisitor.cpp")
0104 set(_lexerList)
0105 set(_dbgVisit)
0106 set(_namespace)
0107 set(_tokenText)
0108 set(_dumpInfo)
0109 if(CMAKE_COMPILER_IS_GNUCC)
0110 set(_beautifulCode)
0111 else()
0112 set(_beautifulCode --compatible-error-aware-code)
0113 endif()
0114 set(_conflicts)
0115 while(1)
0116 list(GET _depList 0 _arg)
0117 if( ${_arg} STREQUAL "NAMESPACE" )
0118 list(GET _depList 1 _namespace)
0119 list(REMOVE_AT _depList 0 1)
0120 set(_namespace --namespace=${_namespace})
0121 elseif( ${_arg} STREQUAL "DEBUG_VISITOR" )
0122 list(REMOVE_AT _depList 0)
0123 set(_dbgVisit "--debug-visitor")
0124 set(_outputList ${_outputList}
0125 "${CMAKE_CURRENT_BINARY_DIR}/${_language}debugvisitor.h"
0126 )
0127 elseif( ${_arg} STREQUAL "TOKEN_TEXT" )
0128 list(REMOVE_AT _depList 0)
0129 set(_tokenText "--token-text")
0130 set(_outputList ${_outputList}
0131 "${CMAKE_CURRENT_BINARY_DIR}/${_language}tokentext.h"
0132 )
0133 elseif( ${_arg} STREQUAL "DUMP_INFO" )
0134 list(REMOVE_AT _depList 0)
0135 set(_dumpInfo --terminals --symbols --rules)
0136 set(_outputList ${_outputList}
0137 "${CMAKE_CURRENT_BINARY_DIR}/kdev-pg-terminals"
0138 "${CMAKE_CURRENT_BINARY_DIR}/kdev-pg-symbols"
0139 "${CMAKE_CURRENT_BINARY_DIR}/kdev-pg-rules"
0140 )
0141 elseif( ${_arg} STREQUAL "BEAUTIFUL_CODE" )
0142 list(REMOVE_AT _depList 0)
0143 set(_beautifulCode --beautiful-code)
0144 elseif( ${_arg} STREQUAL "ENFORCE_COMPATIBLE_ERROR_AWARE_CODE" )
0145 list(REMOVE_AT _depList 0)
0146 set(_beautifulCode --compatible-error-aware-code)
0147 elseif( ${_arg} STREQUAL "STRICT_CONFLICTS" )
0148 list(REMOVE_AT _depList 0)
0149 set(_conflicts --strict-conflicts)
0150 elseif( ${_arg} STREQUAL "IGNORE_CONFLICTS" )
0151 list(REMOVE_AT _depList 0)
0152 set(_conflicts --ignore-conflicts)
0153 elseif( ${_arg} STREQUAL "GENERATE_LEXER" )
0154 list(REMOVE_AT _depList 0)
0155 set(_lexerList
0156 "${CMAKE_CURRENT_BINARY_DIR}/${_language}lexer.h"
0157 "${CMAKE_CURRENT_BINARY_DIR}/${_language}lexer.cpp")
0158 else()
0159 break()
0160 endif()
0161 endwhile(1)
0162
0163 set(_outputList ${_outputList} ${_lexerList} ${_astList} ${_parserList})
0164
0165 list(GET _depList 0 _grammarFile)
0166 list(REMOVE_AT _depList 0)
0167 if(NOT _grammarFile)
0168 message(ERROR "No grammar file given to KDEVPGQT_GENERATE macro")
0169 endif()
0170 add_custom_command(
0171 OUTPUT
0172 ${_outputList}
0173 MAIN_DEPENDENCY "${_grammarFile}"
0174 DEPENDS ${_depList} ${KDEVPGQT_EXECUTABLE}
0175 COMMAND ${KDEVPGQT_EXECUTABLE}
0176 ARGS --output=${_language} ${_namespace}
0177 ${_dbgVisit} ${_dumpInfo} ${_beautifulCode} ${_conflicts} "${_grammarFile}"
0178 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
0179 )
0180 set_source_files_properties(${_outputList} PROPERTIES
0181 GENERATED TRUE
0182 SKIP_AUTOMOC ON
0183 )
0184 set( ${_srcVar}
0185 "${_outputList}"
0186 )
0187 endmacro(KDEVPGQT_GENERATE)
0188
0189
0190 else( KDEVPGQT_INCLUDE_DIR
0191 AND KDEVPGQT_EXECUTABLE)
0192
0193 if( KDevelop-PG-Qt_FIND_REQUIRED)
0194 message(FATAL_ERROR "Couldn't find KDevelop-PG-Qt.")
0195 else()
0196 message(STATUS "Couldn't find KDevelop-PG-Qt.")
0197 endif()
0198 message(STATUS "You can set KDEVPGQT_DIR to help cmake find KDevelop-PG-Qt")
0199 set(KDEVPGQT_FOUND FALSE)
0200
0201 endif( KDEVPGQT_INCLUDE_DIR
0202 AND KDEVPGQT_EXECUTABLE)