BISON_TARGET(Grammar grammar.y ${CMAKE_CURRENT_BINARY_DIR}/grammar.c)
FLEX_TARGET(Scan scan.l  ${CMAKE_CURRENT_BINARY_DIR}/scan.c)
ADD_FLEX_BISON_DEPENDENCY(Scan Grammar)

# Modify files generated by Bison and Flex, to match the Autotools build.
# - Replace "yy" with "aag" in all three files
# - Replace "unsigned long int" with "uint64_t" in grammar.h and grammar.c
# - Replace "unsigned long" with "uint64_t" in grammar.h and grammar.c
# - Remove declaration of the "isatty()" function from scan.c
configure_file(
    "${TOP_SOURCE_DIR}/cmake/modify_cgraph_grammar.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/modify_cgraph_grammar.cmake"
    @ONLY
)
configure_file(
    "${TOP_SOURCE_DIR}/cmake/modify_cgraph_scan.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/modify_cgraph_scan.cmake"
    @ONLY
)
add_custom_command(
    OUTPUT ${BISON_Grammar_OUTPUTS}
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_cgraph_grammar.cmake
    APPEND
)
add_custom_command(
    OUTPUT ${FLEX_Scan_OUTPUTS}
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_cgraph_scan.cmake
    APPEND
)


add_definitions(-DEXPORT_CGRAPH -DEXPORT_AGXBUF -DEXPORT_CGHDR -DYY_NO_UNISTD_H)

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${GRAPHVIZ_LIB_DIR}/cdt
)

add_library(cgraph SHARED
    # Header files
    agxbuf.h
    cghdr.h
    cgraph.h

    # Source files
    agerror.c
    agxbuf.c
    apply.c
    attr.c
    edge.c
    flatten.c
    graph.c
    id.c
    imap.c
    io.c
    mem.c
    node.c
    obj.c
    pend.c
    rec.c
    refstr.c
    subg.c
    utils.c
    write.c

    # Generated files
    ${BISON_Grammar_OUTPUTS}
    ${FLEX_Scan_OUTPUTS}
)

target_link_libraries(cgraph cdt)

# Installation location of library files
install(
    TARGETS cgraph
    RUNTIME DESTINATION ${BINARY_INSTALL_DIR}
    LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
    ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR}
)

# Specify headers to be installed
install(
    FILES cgraph.h
    DESTINATION ${HEADER_INSTALL_DIR}
)

# Specify man pages to be installed
install(
    FILES cgraph.3
    DESTINATION ${MAN_INSTALL_DIR}
)

# Specify library version and soversion
set_target_properties(cgraph PROPERTIES
    VERSION 6.0.0
    SOVERSION 6
)
