IF(GSETTINGS_SUPPORT)
    SET(PROJECT_GSCHEMA_XML ${PROJECT_SCHEMA_ID}.gschema.xml
	CACHE INTERNAL "PROJECT_GSCHEMA_XML")
    SET(GSETTINGS_SCHEMAS_DIR "${DATA_DIR}/glib-2.0/schemas")
ENDIF()

SET(IBUS_CHEWING_DEPENDENCIES "")

IF(GCONF2_SUPPORT)
    # Schemas
    INCLUDE(ManageGConf)
    SET(PROJECT_SCHEMAS ${PROJECT_NAME}.schemas
	CACHE INTERNAL "PROJECT_SCHEMAS")
    SET(IBUS_CHEWING_DEPENDENCIES "GCONF2")
    MANAGE_GCONF_SCHEMAS()
ELSE()
    SET(IBUS_CHEWING_DEPENDENCIES "")
ENDIF()

SET(IBUS_ENGINE_CHEWING ibus-engine-chewing)
SET(IBUS_SETUP_CHEWING ibus-setup-chewing)

# Location of library include files
INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    )
LIST(APPEND IBUS_CHEWING_DEPENDENCIES CHEWING GLIB2 GTK2 IBUS X11 XTST)
SET(IBUS_CHEWING_DEPENDENCIES "${IBUS_CHEWING_DEPENDENCIES}"
    CACHE INTERAL "IBUS_CHEWING_DEPENDENCIES"
    )
FOREACH(_d ${IBUS_CHEWING_DEPENDENCIES})
    INCLUDE_DIRECTORIES(${${_d}_INCLUDE_DIRS})
#    STRING_APPEND(CMAKE_C_FLAGS "${${_d}_CFLAGS}" " ")
ENDFOREACH(_d ${IBUS_CHEWING_DEPENDENCIES})


#==================================================================
# Sources
#
SET(GOB2_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
MACRO(GOB_GENERATE name gobFile)
    SET(GOB_GENERATED_C_${name} 
	${GOB2_OUTPUT_DIR}/${name}.c)
    SET(GOB_GENERATED_${name} 
	${GOB_GENERATED_C_${name}}
	"${GOB2_OUTPUT_DIR}/${name}.h"
	"${GOB2_OUTPUT_DIR}/${name}-private.h"
	CACHE INTERNAL "GOB_GENERATED_${name}"
	)

    ADD_CUSTOM_COMMAND(OUTPUT ${GOB_GENERATED_${name}}
	COMMAND ${GOB2_EXECUTABLE} "${gobFile}" 
	-o "${GOB2_OUTPUT_DIR}/"
	DEPENDS ${gobFile} ${ARGN}
	)
ENDMACRO(GOB_GENERATE name gobFile)

SET(IBUS_CHEWING_ENGINE_SOURCE_INCLUDED_C_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingEngine-signal.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingEngine-input-events.c
)
GOB_GENERATE(ibus-chewing-engine 
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingEngine.gob
    ${IBUS_CHEWING_ENGINE_SOURCE_INCLUDED_C_FILES}
    )
GOB_GENERATE(maker-dialog 
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialog.gob 
    )

SET_SOURCE_FILES_PROPERTIES(${GOB_GENERATED_ibus-chewing-engine} 
    ${GOB_GENERATED_maker-dialog} PROPERTIES GENERATED true
    )

SET(COMMON_SOURCE_C_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingApplier.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingLookupTable.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingProperties.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusConfigBackend.c
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogBackend.c
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogProperty.c
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogUtil.c
    )

IF(GSETTINGS_SUPPORT)
    LIST(APPEND COMMON_SOURCE_C_FILES
	${CMAKE_CURRENT_SOURCE_DIR}/GSettingsBackend.c
	)
ENDIF()

IF(GCONF2_SUPPORT)
    LIST(APPEND COMMON_SOURCE_C_FILES
       	${CMAKE_CURRENT_SOURCE_DIR}/GConf2Backend.c
	)
ENDIF()

SET(COMMON_SOURCE_FILES
    ${COMMON_SOURCE_C_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingLookupTable.h
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingProperties.h
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusConfigBackend.h
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogBackend.h
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogProperty.h
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogPropertySpec.h
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogUtil.h
    ${GOB2_OUTPUT_DIR}/ibus-chewing-engine.h
    CACHE INTERNAL "COMMON_SOURCE_FILES"
    )

IF(GSETTINGS_SUPPORT)
    LIST(APPEND COMMON_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/GSettingsBackend.h)
ENDIF()

IF(GCONF2_SUPPORT)
    LIST(APPEND COMMON_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/GConf2Backend.h)
ENDIF()

SET(MAKER_DIALOG_SOURCE_C_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogWidget.c
    )

SET(MAKER_DIALOG_SOURCE_FILES
    ${MAKER_DIALOG_SOURCE_C_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialogWidget.h
    )

SET(IBUS_SETUP_CHEWING_SOURCE_C_FILES
    ${COMMON_SOURCE_C_FILES}
    ${MAKER_DIALOG_SOURCE_C_FILES}
    )

SET(IBUS_SETUP_CHEWING_SOURCE_FILES
    ${COMMON_SOURCE_FILES}
    ${MAKER_DIALOG_SOURCE_FILES}
    )

SET(IBUS_ENGINE_CHEWING_SOURCE_C_FILES
    ${IBUS_SETUP_CHEWING_SOURCE_C_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingPreEdit.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingUtil.c
    )

SET(IBUS_ENGINE_CHEWING_SOURCE_FILES
    ${IBUS_SETUP_CHEWING_SOURCE_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingPreEdit.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingPreEdit.h
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingUtil.c
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingUtil.h
    CACHE INTERNAL "IBUS_ENGINE_CHEWING_SOURCE_FILES"
    )

SET(IBUS_CHEWING_SOURCE_TO_TRANSLATE
    ${IBUS_ENGINE_CHEWING_SOURCE_C_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/MakerDialog.gob 
    ${CMAKE_CURRENT_SOURCE_DIR}/IBusChewingEngine.gob 
    ${IBUS_CHEWING_ENGINE_SOURCE_INCLUDED_C_FILES}
    ${CMAKE_CURRENT_SOURCE_DIR}/ibus-setup-chewing.c
    ${CMAKE_CURRENT_SOURCE_DIR}/generate-gconf-schemas.c
    ${CMAKE_CURRENT_SOURCE_DIR}/main.c
    )

IF(GSETTINGS_SUPPORT)
    LIST(APPEND IBUS_CHEWING_SOURCE_TO_TRANSLATE
       	${CMAKE_CURRENT_SOURCE_DIR}/generate-gsettings-schemas.c)
ENDIF()

IF(GCONF2_SUPPORT)
    LIST(APPEND IBUS_CHEWING_SOURCE_TO_TRANSLATE
	${CMAKE_CURRENT_SOURCE_DIR}/generate-gconf-schemas.c)
ENDIF()

SET(IBUS_CHEWING_SOURCE_TO_TRANSLATE
    "${IBUS_CHEWING_SOURCE_TO_TRANSLATE}"
    CACHE INTERNAL "IBUS_CHEWING_SOURCE_TO_TRANSLATE"
    )

ADD_CUSTOM_TARGET(gob2
    DEPENDS ${GOB_GENERATED_ibus-chewing-engine} 
    ${GOB_GENERATED_maker-dialog}
    COMMENT "Preprocess with gob2."
    )

#==================================================================
# Building executables
#

IF("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    ADD_DEFINITIONS("-DVERBOSE_LEVEL=DEBUG")
ELSE()
    ADD_DEFINITIONS("-DVERBOSE_LEVEL=MSG")
ENDIF()

SET(GENERATE_SCHEMAS_LIBARARIES
    ${CHEWING_LIBRARIES}
    ${IBUS_LIBRARIES}
    ${GLIB2_LIBRARIES}
    )

IF(GSETTINGS_SUPPORT)
    ADD_EXECUTABLE(generate-gsettings-schemas
	${CMAKE_CURRENT_SOURCE_DIR}/generate-gsettings-schemas.c
	${COMMON_SOURCE_FILES}
	)

    TARGET_LINK_LIBRARIES(generate-gsettings-schemas 
	${GENERATE_SCHEMAS_LIBARARIES}
	)

    INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_GSCHEMA_XML} 
	DESTINATION "${GSETTINGS_SCHEMAS_DIR}"
	)

    ADD_CUSTOM_TARGET(schemas_gsettings ALL
	COMMAND G_MESSAGES_DEBUG=all "${CMAKE_CURRENT_BINARY_DIR}/generate-gsettings-schemas" -v 5 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_GSCHEMA_XML}"
	COMMAND G_MESSAGES_DEBUG=all glib-compile-schemas "${CMAKE_CURRENT_BINARY_DIR}"
	COMMENT "Generating gsettings schemas ${PROJECT_GSCHEMA_XML}"
	VERBATIM
	)

    ADD_DEPENDENCIES(schemas_gsettings
	generate-gsettings-schemas
	)

    ADD_CUSTOM_TARGET(install_schemas_gsettings
	COMMAND install "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_GSCHEMA_XML}"  "${GSETTINGS_SCHEMAS_DIR}/${PROJECT_GSCHEMA_XML}"
	COMMAND glib-compile-schemas "${GSETTINGS_SCHEMAS_DIR}"
	COMMENT "install_schemas_gsettings"
	)

    ADD_CUSTOM_TARGET(uninstall_schemas_gsettings
	COMMAND rm -f "${GSETTINGS_SCHEMAS_DIR}/${PROJECT_GSCHEMA_XML}"
	COMMAND glib-compile-schemas "${GSETTINGS_SCHEMAS_DIR}"
	COMMENT "install_schemas_gsettings"
	)
ENDIF()

IF(GCONF2_SUPPORT)
    ADD_EXECUTABLE(generate-gconf-schemas
	${CMAKE_CURRENT_SOURCE_DIR}/generate-gconf-schemas.c
	${COMMON_SOURCE_FILES}
	)

    LIST(APPEND GENERATE_SCHEMAS_LIBARARIES ${GCONF2_LIBRARIES})

    TARGET_LINK_LIBRARIES(generate-gconf-schemas 
	${GENERATE_SCHEMAS_LIBARARIES}
	)

    ADD_CUSTOM_COMMAND(TARGET generate-gconf-schemas POST_BUILD
	COMMAND G_MESSAGES_DEBUG=all ${CMAKE_CURRENT_BINARY_DIR}/generate-gconf-schemas -v 5 -l
	"C;${TRANSLATED}" "${CMAKE_CURRENT_BIN_DIR}/${PROJECT_SCHEMAS}"
	COMMENT "Generating gconf-schemas"
	VERBATIM
	)
ENDIF()

ADD_EXECUTABLE(${IBUS_SETUP_CHEWING}
    ${CMAKE_CURRENT_SOURCE_DIR}/ibus-setup-chewing.c
    ${IBUS_SETUP_CHEWING_SOURCE_FILES}
    ${GOB_GENERATED_maker-dialog}
    )

TARGET_LINK_LIBRARIES(${IBUS_SETUP_CHEWING}
    ${GENERATE_SCHEMAS_LIBARARIES}
    ${GTK2_LIBRARIES}
    )

SET(IBUS_ENGINE_CHEWING_LIBRARIES ${GENERATE_SCHEMAS_LIBARARIES} 
    ${GTK2_LIBRARIES}
    ${X11_LIBRARIES}
    ${XTST_LIBRARIES} 
    CACHE INTERNAL "IBUS_ENGINE_CHEWING_LIBRARIES"
    )

ADD_EXECUTABLE(${IBUS_ENGINE_CHEWING}
    ${CMAKE_CURRENT_SOURCE_DIR}/main.c
    ${IBUS_ENGINE_CHEWING_SOURCE_FILES}
    ${GOB_GENERATED_ibus-chewing-engine}
    ${GOB_GENERATED_maker-dialog}
    )

TARGET_LINK_LIBRARIES(${IBUS_ENGINE_CHEWING}
    ${IBUS_ENGINE_CHEWING_LIBRARIES}
    )

IF(NOT DEFINED LIB_INSTALL_DIR)
    SET(LIB_INSTALL_DIR "lib${IS_64}")
ENDIF()
SET_COMPILE_ENV(LIB_INSTALL_DIR  "${LIB_INSTALL_DIR}"
    DISPLAY STRING "Chewing library directory")

FILE(GLOB poFiles RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/../po" "../po/*.po")
STRING(REPLACE ".po" ""  TRANSLATED "${poFiles}")
M_MSG(${M_INFO2} "TRANSLATED=${TRANSLATED}")

MANAGE_FILE_INSTALL(TARGETS ${IBUS_ENGINE_CHEWING} ARGS
    LIBEXEC DESTINATION ${LIBEXEC_DIR}
    LIBRARY DESTINATION ${LIB_INSTALL_DIR}
    )

MANAGE_FILE_INSTALL(TARGETS ${IBUS_SETUP_CHEWING} ARGS
    LIBEXEC DESTINATION ${LIBEXEC_DIR}
    LIBRARY DESTINATION ${LIB_INSTALL_DIR}
    )

