# Minimum required version of CMake
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
IF(COMMAND CMAKE_POLICY)
  CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)

# set CMake project name
PROJECT(TKHTML)

SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/CMake")

IF(NOT TCL_LIBRARY OR NOT TCL_STUB_LIBRARY OR NOT TK_LIBRARY OR NOT
    TK_STUB_LIBRARY OR NOT TCL_INCLUDE_DIRS OR NOT TK_INCLUDE_PATH OR NOT
    TCL_TCLSH OR NOT TCL_WISH_EXECUTABLE)
  find_package(TCL)
ENDIF(NOT TCL_LIBRARY OR NOT TCL_STUB_LIBRARY OR NOT TK_LIBRARY OR NOT
  TK_STUB_LIBRARY OR NOT TCL_INCLUDE_DIRS OR NOT TK_INCLUDE_PATH OR NOT
  TCL_TCLSH OR NOT TCL_WISH_EXECUTABLE)

IF(TK_SYSTEM_GRAPHICS MATCHES "x11")
  find_package(X11)
ENDIF(TK_SYSTEM_GRAPHICS MATCHES "x11")

include_directories(
  ${CMAKE_CURRENT_SOURCE_DIR}/src
  ${CMAKE_CURRENT_BINARY_DIR}
  ${TCL_INCLUDE_DIRS}
  ${TK_INCLUDE_PATH}
  ${X11_INCLUDE_DIR}
  )

SET(TKHTML_PKGNAME Tkhtml)
SET(TKHTML_PKGVERSION "3.0")

# Windows specific flags
IF(WIN32)
  SET(TKHTML_CFLAGS "${TKHTML_CFLAGS} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEP -Ot -Oi -fp:strict -Gs -GS -GL -DUSE_TCL_STUBS -DUSE_TK_STUBS -D__WIN32__")
  SET(TKHTML_CFLAGS "${TKHTML_CFLAGS} -Dinline=__inline -DBUILD_tkhtml")
ENDIF(WIN32)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TKHTML_CFLAGS}")

ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/htmldefaultstyle.c
  COMMAND ${TCL_TCLSH} ${CMAKE_CURRENT_SOURCE_DIR}/src/mkdefaultstyle.tcl > ${CMAKE_CURRENT_BINARY_DIR}/htmldefaultstyle.c
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/mkdefaultstyle.tcl ${TCL_TCLSH}
  )

ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/htmltokens.c ${CMAKE_CURRENT_BINARY_DIR}/htmltokens.h
  COMMAND ${TCL_TCLSH} ${CMAKE_CURRENT_SOURCE_DIR}/src/tokenlist.txt
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/tokenlist.txt ${TCL_TCLSH}
  )

ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cssprop.c ${CMAKE_CURRENT_BINARY_DIR}/cssprop.h
  COMMAND ${TCL_TCLSH} ${CMAKE_CURRENT_SOURCE_DIR}/src/cssprop.tcl
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/htmltokens.c ${CMAKE_CURRENT_SOURCE_DIR}/src/cssprop.tcl ${TCL_TCLSH}
  )

SET(TKHTML_SRCS
  ${CMAKE_CURRENT_BINARY_DIR}/htmldefaultstyle.c
  ${CMAKE_CURRENT_BINARY_DIR}/cssprop.c
  src/css.c
  src/cssdynamic.c
  src/cssparser.c
  src/csssearch.c
  src/htmldecode.c
  src/htmldraw.c
  src/htmlfloat.c
  src/htmlhash.c
  src/htmlimage.c
  src/htmlinline.c
  src/htmllayout.c
  src/htmlparse.c
  src/htmlprop.c
  src/htmlstyle.c
  src/htmltable.c
  src/htmltagdb.c
  src/htmltcl.c
  src/htmltext.c
  src/htmltree.c
  src/htmlutil.c
  src/restrack.c
  src/swproc.c
  )

IF(NOT LIB_DIR)
  IF(NOT WIN32)
    SET(LIB_DIR lib)
  ELSE(NOT WIN32)
    SET(LIB_DIR bin)
  ENDIF(NOT WIN32)
ENDIF(NOT LIB_DIR)

add_library(Tkhtml SHARED ${TKHTML_SRCS})
IF(TK_SYSTEM_GRAPHICS MATCHES "aqua")
  # Need the X emulation functions from Tk when using aqua - the stubs
  # library doesn't seem to supply them
  target_link_libraries(Tkhtml ${TCL_STUB_LIBRARY} ${TK_STUB_LIBRARY} ${TK_LIBRARY} ${X11_LIBRARIES})
ELSE(TK_SYSTEM_GRAPHICS MATCHES "aqua")
  target_link_libraries(Tkhtml ${TCL_STUB_LIBRARY} ${TK_STUB_LIBRARY} ${X11_LIBRARIES})
ENDIF(TK_SYSTEM_GRAPHICS MATCHES "aqua")
SET_TARGET_PROPERTIES(Tkhtml PROPERTIES VERSION ${TKHTML_PKGVERSION})
SET_PROPERTY(TARGET Tkhtml APPEND PROPERTY COMPILE_DEFINITIONS USE_TCL_STUBS)
SET_PROPERTY(TARGET Tkhtml APPEND PROPERTY COMPILE_DEFINITIONS USE_TK_STUBS)
install(TARGETS Tkhtml 
	RUNTIME DESTINATION ${BIN_DIR}
	LIBRARY DESTINATION ${LIB_DIR}
	ARCHIVE DESTINATION ${LIB_DIR})

TCL_PKGINDEX(Tkhtml ${TKHTML_PKGNAME} ${TKHTML_PKGVERSION})

ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tkhtml.n
  COMMAND ${TCL_TCLSH} ${CMAKE_CURRENT_SOURCE_DIR}/doc/macros.tcl -nroff ${CMAKE_CURRENT_SOURCE_DIR}/doc/html.man > ${CMAKE_CURRENT_BINARY_DIR}/tkhtml.n
  )
ADD_CUSTOM_TARGET(tkhtml_n_gen ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tkhtml.n)
if(NOT MAN_DIR)
  SET(MAN_DIR man)
endif(NOT MAN_DIR)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tkhtml.n DESTINATION ${MAN_DIR}/mann)
