PROJECT(vcd2qucsdat CXX C)
CMAKE_MINIMUM_REQUIRED(VERSION 3.18)
cmake_policy(VERSION 3.18)

CONFIGURE_FILE (
    "${PROJECT_SOURCE_DIR}/../config.h.cmake"
    "${PROJECT_BINARY_DIR}/config.h"
)

add_compile_definitions(HAVE_CONFIG_H)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#
# Need Flex
#
FIND_PACKAGE(FLEX 2.5.9  REQUIRED)
IF(FLEX_FOUND)
  #MESSAGE(STATUS "Found flex: ${FLEX_EXECUTABLE} / Version: ${FLEX_VERSION}" )
ENDIF()

#
# Need Bison
#
# This is a HACK to get arround a PATH issue with Qt Creator on OSX.
# It seams impossible to pass a custom PATH to Qt Creator on OSX, ie, cannot prepend `/usr/local/bin/` for intance.
# The FIND_PACKAGE fails. For now we provide a fallback with a custom FIND_PROGRAM. The variable BISON_DIR is also available.
FIND_PACKAGE(BISON 2.4 REQUIRED)
IF(BISON_FOUND)
  #MESSAGE(STATUS "Found bison: ${BISON_EXECUTABLE} / Version: ${BISON_VERSION}" )
ENDIF()


INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}
                     ${CMAKE_CURRENT_SOURCE_DIR}
                     ${CMAKE_SOURCE_DIR}/src/math
                     ${CMAKE_CURRENT_BINARY_DIR} ) # qucdefs.h


SET(QUCSCONV_SRC
  #check_spice.cpp
  check_vcd.cpp
  #matlab_producer.cpp
  #csv_producer.cpp
  qucs_producer.cpp
  qucsconv.cpp
  #touchstone_producer.cpp
  #check_citi.cpp
  #check_mdl.cpp
  dataset.cpp
  #matrix.cpp
  property.cpp
  real.cpp
  vector.cpp
  #check_csv.cpp
  #check_zvr.cpp
  #  hash.cpp  
  #matvec.cpp
  strlist.cpp
  check_dataset.cpp
  logging.c
  #check_touchstone.cpp
  #object.cpp
  #sweep.cpp
  complex.cpp
  #variable.cpp
  #substrate.cpp
  #equation.cpp
  #analysis.cpp
  #evaluate.cpp
  #differentiate.cpp
  #range.cpp
)

SET(ParserTypes
  #mdl
  #spice
  dataset
  vcd
)

# generated files are named like:
#   - parse_spice.cpp scan_spice.cpp tokens_spice.h

# clear list of generated files
SET(conv_generated)
FOREACH( type ${ParserTypes} )

  # Create custom Bison
  SET(BO_${type}
    ${CMAKE_CURRENT_BINARY_DIR}/parse_${type}.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/tokens_${type}.h )
  ADD_CUSTOM_COMMAND(
    OUTPUT ${BO_${type}}
    COMMAND ${BISON_EXECUTABLE}
              --defines=${CMAKE_CURRENT_BINARY_DIR}/parse_${type}.hpp
              --output=${CMAKE_CURRENT_BINARY_DIR/}parse_${type}.cpp
              ${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.ypp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.ypp
    )

  # Create custom Flex
  SET(FI_${type} ${CMAKE_CURRENT_SOURCE_DIR}/scan_${type}.lpp )
  SET(FO_${type} ${CMAKE_CURRENT_BINARY_DIR}/scan_${type}.cpp )
  ADD_CUSTOM_COMMAND(
    OUTPUT ${FO_${type}}
    COMMAND ${FLEX_EXECUTABLE}
            --outfile=${FO_${type}}
            ${FI_${type}}
    DEPENDS ${BO_${type}} ${FI_${type}}
    )
  SET(conv_generated ${conv_generated} ${FO_${type}})
  SET(conv_generated ${conv_generated} ${BO_${type}})
ENDFOREACH()
FOREACH( gfile ${conv_generated} )
  SET_SOURCE_FILES_PROPERTIES(${gfile} PROPERTIES GENERATED TRUE)
ENDFOREACH()

ADD_EXECUTABLE(${PROJECT_NAME} ${QUCSCONV_SRC} ${conv_generated} )

#
# Handle installation
#
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)