# FindBISON

Find `bison` executable and provide a macro to generate custom build rules.

The module defines the following variables:

`BISON_EXECUTABLE`

  path to the `bison` program

`BISON_VERSION`

  version of `bison`

`BISON_FOUND`

  “True” if the program was found

The minimum required version of `bison` can be specified using the standard CMake syntax, e.g. `find_package(BISON 2.1.3)`.

If `bison` is found, the module defines the macro:

    BISON_TARGET(<Name> <YaccInput> <CodeOutput>
                 [COMPILE_FLAGS <flags>]
                 [DEFINES_FILE <file>]
                 [VERBOSE [<file>]]
                 [REPORT_FILE <file>]
                 )

which will create a custom rule to generate a parser. `<YaccInput>` is the path to a yacc file. `<CodeOutput>` is the name of the source file generated by bison. A header file is also be generated, and contains the token list.

The options are:

`COMPILE_FLAGS <flags>`

  Specify flags to be added to the `bison` command line.

`DEFINES_FILE <file>`

  Specify a non-default header `<file>` to be generated by `bison`.

`VERBOSE [<file>]`

  Tell `bison` to write a report file of the grammar and parser. If `<file>` is given, it specifies path the report file is copied to. `[<file>]` is left for backward compatibility of this module. Use `VERBOSE REPORT_FILE <file>`.

`REPORT_FILE <file>`

  Specify a non-default report `<file>`, if generated.

The macro defines the following variables:

`BISON_<Name>_DEFINED`

  `True` is the macro ran successfully

`BISON_<Name>_INPUT`

  The input source file, an alias for <YaccInput>

`BISON_<Name>_OUTPUT_SOURCE`

  The source file generated by bison

`BISON_<Name>_OUTPUT_HEADER`

  The header file generated by bison

`BISON_<Name>_OUTPUTS`

  All files generated by bison including the source, the header and the report

`BISON_<Name>_COMPILE_FLAGS`

  Options used in the `bison` command line

Example usage:

    find_package(BISON)
    BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
                 DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
    add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})