add_compile_options(
  -Wall
  -Wmissing-prototypes
  -Wstrict-prototypes
  -O2
  -fomit-frame-pointer
  -Wno-format-security
  -DKBUILD_NO_NLS
)

# TODO: fix these warnings
add_compile_options(
  -Wno-pointer-to-int-cast
  -Wno-int-to-pointer-cast
)

add_definitions(
  -DKERNEL_VERSION=0
  -DCURSES_LOC=<curses.h>
  -DNCURSES_WIDECHAR=1
  -DLOCALE
  -DKBUILD_NO_NL
)

if(MINGW)
  get_filename_component(MINGW_BIN_DIR ${CMAKE_C_COMPILER} DIRECTORY)
  set(CMAKE_INCLUDE_PATH ${MINGW_BIN_DIR}/../include)
  set(CMAKE_LIBRARY_PATH ${MINGW_BIN_DIR}/../lib)
endif()

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

find_package(Curses REQUIRED)
find_package(Regex REQUIRED)

include_directories(
  ${CURSES_INCLUDE_DIRS}
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}
)
if(CURSES_HAVE_NCURSES_CURSES_H)
  include_directories(${CURSES_INCLUDE_DIRS}/ncurses)
endif()


configure_file(zconf.tab.c_shipped zconf.tab.c @ONLY)
configure_file(zconf.lex.c_shipped zconf.lex.c @ONLY)
configure_file(zconf.hash.c_shipped zconf.hash.c @ONLY)

add_executable(conf
  conf.c
  zconf.tab.c
)
target_link_libraries(conf ${Regex_LIBRARIES})

add_executable(mconf
  mconf.c
  zconf.tab.c
  lxdialog/checklist.c
  lxdialog/inputbox.c
  lxdialog/menubox.c
  lxdialog/textbox.c
  lxdialog/util.c
  lxdialog/yesno.c
)
target_link_libraries(mconf ${CURSES_LIBRARIES} ${Regex_LIBRARIES})

# Build a GTK-based frontend to Kconfig if the necessary dependencies
# are already installed.
find_package (PkgConfig)
if(PkgConfig_FOUND)
  pkg_check_modules (GTK2 gtk+-2.0 libglade-2.0)
  if(GTK2_FOUND)
    message(STATUS "Found GTK+-2.0 and libglade-2.0, will build gconf")
    add_executable(gconf
      gconf.c
      zconf.tab.c
      )
    target_include_directories( gconf PRIVATE ${GTK2_INCLUDE_DIRS})
    target_link_libraries(      gconf PRIVATE ${GTK2_LIBRARY_DIRS})
    target_compile_options(     gconf PRIVATE ${GTK2_CFLAGS_OTHER})
    target_link_libraries(      gconf PRIVATE ${GTK2_LIBRARIES})
    target_link_libraries(      gconf PRIVATE -Wl,--export-dynamic)
    file(COPY gconf.glade DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  endif()
endif()
if(NOT GTK2_FOUND)
    message(STATUS "Skipped building gconf since GTK dependencies were not met.")
endif()

# Build a QT-based frontend to Kconfig if the necessary dependencies
# are already installed.
# FIXME: Support other QT versions
find_package(Qt4 COMPONENTS QtGui QtNetwork QtSql QtCore Qt3Support)
if(Qt4_FOUND)
  set(CMAKE_INCLUDE_CURRENT_DIR ON)
  set(CMAKE_AUTOMOC ON)

  add_executable(qconf
    qconf.cc
    zconf.tab.c
    )
  target_compile_options(qconf PRIVATE -Wfatal-errors)

  target_link_libraries(qconf
    Qt4::QtGui
    Qt4::QtNetwork
    Qt4::QtSql
    Qt4::QtCore
    Qt4::Qt3Support
    )
else()
  message(STATUS "Skipped building qconf since QT dependencies were not found.")
endif()
