## CMakeLists.txt						-*- CMake -*-
##
## Copyright (C) 2008-2010 Christian Schenk
## 
## This file is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; either version 2, or (at your
## option) any later version.
## 
## This file is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this file; if not, write to the Free Software
## Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA.

default_char_type_is_unsigned()

set(C4P_FLAGS
  --auto-exit=10
  --chars-are-unsigned
  --declare-c-type=realpoint
  --declare-c-type=realrect
  --declare-c-type=transform
  --declare-c-type=unicodefile
  --declare-c-type=voidpointer
)

include_directories(BEFORE
  ${CMAKE_BINARY_DIR}/${rel_xpdf_dir}
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_SOURCE_DIR}/${rel_icu_dir}/include
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}
  ${CMAKE_SOURCE_DIR}/${rel_xpdf_dir}
  ${CMAKE_SOURCE_DIR}/${rel_xpdf_goo_dir}
  ${CMAKE_SOURCE_DIR}/${rel_xpdf_xpdf_dir}
)

add_definitions(
  -DHAVE_C4P_PRE_H
  -DLE_USE_CMEMORY
  -DMIKTEX_XETEX
  -D__SyncTeX__
  -DXETEXAPP=g_XETEXApp
  -DXETEXCLASS=XETEX
  -DXETEX_GRAPHITE
  -DXETEX_OTHER
  -DXeTeX
)

set(synctex_xetex_ch_srcs_mem_only
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-mem.ch0
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-e-mem.ch0
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-e-mem.ch1
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-xe-mem.ch2
)

set(synctex_xetex_ch_srcs_on
  ${synctex_xetex_ch_srcs_mem_only}
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-rec.ch0
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-e-rec.ch0
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-xe-rec.ch2
)

set(xetex_post_ch_srcs_with_synctex
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-xe-rec.ch3
)

set(miktex_tex_change_files
  ${mltex_miktex_ch}
  ${enctex_miktex_ch}
  ${tex_miktex_ch}
  ${tex_miktex_hash_ch}
  ${tex_miktex_hyph_ch}
  ${tex_miktex_quiet_ch}
  ${tex_miktex_src_ch}
  ${tex_miktex_synctex_ch}
  ${tex_miktex_stat_ch}
  ${tex_miktex_write18_ch}
  ${tex_miktex_web2c_ch}
)

set(pre_xetex_change_files
  ${etex_ch}
  ${synctex_xetex_ch_srcs_on}
  ${etex_miktex_pre_ch}
  ${etex_miktex_ch}
  ${miktex_tex_change_files}
)

set(pre_xetex1_web_file ${CMAKE_CURRENT_BINARY_DIR}/pre-xetex1.web)

add_custom_command(
  OUTPUT
	${pre_xetex1_web_file}
  COMMAND
	${tie_exe} -m ${pre_xetex1_web_file}
		${tex_web}
		${pre_xetex_change_files}
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${tie_exe}
	${tex_web}
	${pre_xetex_change_files}
)

set(pre_xetex2_web_file ${CMAKE_CURRENT_BINARY_DIR}/pre-xetex2.web)

add_custom_command(
  OUTPUT
	${pre_xetex2_web_file}
  COMMAND
	${tie_exe} -m ${pre_xetex2_web_file}
		${pre_xetex1_web_file}
		${CMAKE_CURRENT_SOURCE_DIR}/miktex-adapter-2.ch
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${tie_exe}
	${pre_xetex1_web_file}
	${CMAKE_CURRENT_SOURCE_DIR}/miktex-adapter-2.ch
)

set(xetex_change_files
  ${CMAKE_CURRENT_SOURCE_DIR}/xetex.ch
  ${CMAKE_CURRENT_SOURCE_DIR}/xetex-latex3.ch
  ${CMAKE_CURRENT_SOURCE_DIR}/xetex-hz.ch
)

set(xetex_web_file ${CMAKE_CURRENT_BINARY_DIR}/xetex.web)
set(xetex_change_file ${CMAKE_CURRENT_SOURCE_DIR}/xetex-miktex.ch)

set(xetex_header_file ${CMAKE_CURRENT_BINARY_DIR}/xetexd.h)

add_custom_command(
  OUTPUT
	${xetex_web_file}
  COMMAND
	${tie_exe} -m ${xetex_web_file}
		${pre_xetex2_web_file}
		${xetex_change_files}
		${xetex_post_ch_srcs_with_synctex}
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${tie_exe}
	${pre_xetex2_web_file}
	${xetex_change_files}
)

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/xetex_pool.cpp
  COMMAND
	perl ${CMAKE_CURRENT_SOURCE_DIR}/pool2c.pl
		${CMAKE_CURRENT_BINARY_DIR}/xetex.pool
		${CMAKE_CURRENT_BINARY_DIR}/xetex_pool.cpp
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
	${CMAKE_CURRENT_BINARY_DIR}/xetex.pool
)

file(READ ${tex_dyn_sed} tex_dyn_sed_contents)
file(READ ${etex_dyn_sed} etex_dyn_sed_contents)

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dyn.sed "${tex_dyn_sed_contents}")
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/dyn.sed "${etex_dyn_sed_contents}")

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/synctex-xe.cpp
  COMMAND ${SED_EXE}
		s/TEX-OR-MF-OR-MP/xetex/
		${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex.c
		> ${CMAKE_CURRENT_BINARY_DIR}/synctex-xe.cpp
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
	${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex.c
  VERBATIM
)

set_source_files_properties(
  ${CMAKE_CURRENT_BINARY_DIR}/synctex-xe.cpp
  PROPERTIES GENERATED TRUE
)

configure_file(
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex.h
  ${CMAKE_CURRENT_BINARY_DIR}/synctex-xe.h
)

configure_file(
  ${CMAKE_SOURCE_DIR}/${rel_synctex_dir}/synctex-xetex.h
  ${CMAKE_CURRENT_BINARY_DIR}/synctex-xetex.h
)

set_source_files_properties(
  XeTeX_ext.c
  XeTeX_pic.c
  bmpimage.c
  jpegimage.c
  mfileio.c
  numbers.c
  pngimage.c
  trans.c
  PROPERTIES LANGUAGE CXX
)

set(${xetex_dll_name}_sources
  ${CMAKE_CURRENT_BINARY_DIR}/synctex-xe.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/xetex_pool.cpp
  FontTableCache.cpp
  XeTeXFontInst.cpp
  XeTeXFontInst_FT2.cpp
  XeTeXFontMgr.cpp
  XeTeXFontMgr_FC.cpp
  XeTeXGrLayout.cpp
  XeTeXLayoutInterface.cpp
  XeTeXOTLayoutEngine.cpp
  XeTeXOTMath.cpp
  XeTeX_ext.c
  XeTeX_pic.c
  bmpimage.c
  cmaps.cpp
  hz.cpp
  jpegimage.c
  mfileio.c
  numbers.c
  pdfimage.cpp
  pngimage.c
  trans.c
)

set_source_files_properties(
  ${${xetex_dll_name}_sources}
  PROPERTIES COMPILE_FLAGS "-DC4PEXTERN=extern"
)

set(TANGLE_FLAGS -omega)

create_web_app(XeTeX)

set_source_files_properties(
  ${CMAKE_CURRENT_BINARY_DIR}/xetex.cc
  PROPERTIES COMPILE_FLAGS "-DCOMPILING_XETEX_CC"
)

set_source_files_properties(
  ${CMAKE_CURRENT_BINARY_DIR}/xetex.cc
  PROPERTIES COMPILE_FLAGS "-DCOMPILING_XETEX_CC"
)

target_link_libraries(${xetex_dll_name}
  ${fofi_lib_name}
  ${fontconfig_dll_name}
  ${freetype2_dll_name}
  ${goo_lib_name}
  ${graphite_engine_lib_name}
  ${icudt_dll_name}
  ${icule_dll_name}
  ${icuuc_dll_name}
  ${kpsemu_dll_name}
  ${png_dll_name}
  ${teckit_dll_name}
  ${xpdf_lib_name}
)

delay_load(${xetex_dll_name}
  ${fontconfig_dll_name}
  ${freetype2_dll_name}
#  icudt36
#  icule36
#  icuuc36
  ${png_dll_name}
  ${teckit_dll_name}
)

## dev targets

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/etex-miktex.web
	${CMAKE_CURRENT_BINARY_DIR}/etex-miktex-n.web
  COMMAND ${tie_exe} -m ${CMAKE_CURRENT_BINARY_DIR}/etex-miktex.web
		${tex_web}
		${etex_ch}
		${etex_miktex_pre_ch}
		${etex_miktex_ch}
		${miktex_tex_change_files}
  COMMAND ${webn_exe}
	< ${CMAKE_CURRENT_BINARY_DIR}/etex-miktex.web
	> ${CMAKE_CURRENT_BINARY_DIR}/etex-miktex-n.web
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${tie_exe}
    ${webn_exe}
	${tex_web}
	${etex_ch}
	${etex_miktex_pre_ch}
	${etex_miktex_ch}
	${miktex_tex_change_files}
  VERBATIM
)

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/pre-xetex1-n.web
  COMMAND ${webn_exe}
	< ${pre_xetex1_web_file}
	> ${CMAKE_CURRENT_BINARY_DIR}/pre-xetex1-n.web
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${webn_exe}
	${pre_xetex1_web_file}
  VERBATIM
)

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/pre-xetex2-n.web
  COMMAND ${webn_exe}
	< ${pre_xetex2_web_file}
	> ${CMAKE_CURRENT_BINARY_DIR}/pre-xetex2-n.web
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${webn_exe}
	${pre_xetex2_web_file}
  VERBATIM
)

add_custom_command(
  OUTPUT
	${CMAKE_CURRENT_BINARY_DIR}/xetex-n.web
  COMMAND ${webn_exe}
	< ${xetex_web_file}
	> ${CMAKE_CURRENT_BINARY_DIR}/xetex-n.web
  WORKING_DIRECTORY
	${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS
    ${webn_exe}
	${xetex_web_file}
  VERBATIM
)

add_custom_target(xetex-dev ALL
    DEPENDS
	${CMAKE_CURRENT_BINARY_DIR}/etex-miktex-n.web
	${CMAKE_CURRENT_BINARY_DIR}/pre-xetex1-n.web
	${CMAKE_CURRENT_BINARY_DIR}/pre-xetex2-n.web
	${CMAKE_CURRENT_BINARY_DIR}/xetex-n.web
)
