# The files generated by Lex& Yacc are available on KWData sources directory : -KWCYac.cpp - KWCLex.inc - JsonLex.inc
#
# It is possible to regenerate them (when the *.lex or *.yac files are modified) with the option BUILD_LEX_YACC the
# generated files are located on the build tree and the legacy ones are not used(and not modified).
if(BUILD_LEX_YACC)
  bison_target(KWCParser KWCYac.yac ${CMAKE_CURRENT_SOURCE_DIR}/KWCYac.cpp)
  if(MSVC)
    flex_target(KWCScanner KWCLex.lex KWCLex.inc COMPILE_FLAGS "--nounistd")
    flex_target(JsonScanner JsonLex.lex JsonLex.inc COMPILE_FLAGS "--nounistd")
  else()
    flex_target(KWCScanner KWCLex.lex KWCLex.inc)
    flex_target(JsonScanner JsonLex.lex JsonLex.inc)
  endif(MSVC)
  add_flex_bison_dependency(KWCScanner KWCParser)
else()
  # We defined the Bison / Flex generated files with the files already present
  set(BISON_KWCParser_OUTPUTS ${CMAKE_CURRENT_SOURCE_DIR}/KWCYac.cpp)
  set(FLEX_KWCScanner_OUTPUTS ${CMAKE_CURRENT_SOURCE_DIR}/KWCLex.inc)
  set(FLEX_JsonScanner_OUTPUTS ${CMAKE_CURRENT_SOURCE_DIR}/JsonLex.inc)
endif()

# WARNING we can use the GLOB way to add cpp files because KWCYac.cpp, KWCLex.inc and JsonLex.inc are bison and flex
# targets(then bison and flex are launched if lex& yac files are modified)
add_library(
  KWData STATIC
  JSONFile.cpp
  JSONTokenizer.cpp
  KWAttribute.cpp
  KWAttributeBlock.cpp
  KWAttributeName.cpp
  KWAttributePairName.cpp
  KWCDUniqueString.cpp
  KWCharFrequencyVector.cpp
  KWClass.cpp
  KWClassDomain.cpp
  KWContinuous.cpp
  KWDatabase.cpp
  KWDatabaseFormatDetector.cpp
  KWDatabaseMemoryGuard.cpp
  KWDataItem.cpp
  KWDataTableDriver.cpp
  KWDataTableDriverTextFile.cpp
  KWDate.cpp
  KWDerivationRule.cpp
  KWDerivationRuleOperand.cpp
  KWDRRandom.cpp
  KWDRReference.cpp
  KWDRStandard.cpp
  KWIndexedKeyBlock.cpp
  KWLoadIndex.cpp
  KWMetaData.cpp
  KWMTDatabase.cpp
  KWMTDatabaseMapping.cpp
  KWMTDatabaseTextFile.cpp
  KWObject.cpp
  KWObjectKey.cpp
  KWSortableIndex.cpp
  KWSTDatabase.cpp
  KWSTDatabaseTextFile.cpp
  KWStructureRule.cpp
  KWSymbol.cpp
  KWTextService.cpp
  KWTextTokenizer.cpp
  KWDateTime.cpp
  KWTime.cpp
  KWTimestamp.cpp
  KWTimestampTZ.cpp
  KWTokenFrequency.cpp
  KWType.cpp
  KWTypeAutomaticRecognition.cpp
  KWValueBlock.cpp
  KWValueDictionary.cpp
  KWValueSparseVector.cpp
  Profiler.cpp
  ${BISON_KWCParser_OUTPUTS}
  ${FLEX_KWCScanner_OUTPUTS}
  ${FLEX_JsonScanner_OUTPUTS})

set_khiops_options(KWData)
target_include_directories(KWData PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(KWData PUBLIC KWUtils PLParallelTask)
