include (Python)

setiif (PYTHON_SITEDIR lib)

if (NOT PYTHONINTERP_FOUND)
    message (FATAL_ERROR "PYTHONINTERP is required for python binding")
endif ()

if (NOT PYTHONLIBS_FOUND)
    message (FATAL_ERROR "PYTHONLIBS is required for python binding")
endif ()

if (NOT PYGOBJECT_FOUND)
    message (FATAL_ERROR "PYGOBJECT is required for python binding")
endif ()

if (NOT PYGTK_FOUND)
    message (FATAL_ERROR "PYGTK is required for python binding")
endif ()

add_definitions (
    ${COMMON_CFLAGS} ${COMMON_CFLAGS_OTHER}
    ${PYGOBJECT_CFLAGS} ${PYGOBJECT_CFLAGS_OTHER})
link_libraries (
    ${COMMON_LIBRARIES}
    ${PYGOBJECT_LIBRARIES})
link_directories (
    ${COMMON_LIBRARY_DIRS}
    ${PYGOBJECT_LIBRARY_DIRS})

add_python_binding (
    COMPONENT
        env)

add_python_binding (
    COMPONENT
        ds
    REQUIRES_COMPONENTS
        env
    DEFINITIONS
        ${DBUS_CFLAGS} ${DBUS_CFLAGS_OTHER}
    DEFS_PATCHES
        sed -i "'/^(define-function jobject_create$/a(caller-owns-return #t)'" ds.defs &&
        sed -i "'/^(define-function jobject_find$/a(caller-owns-return #t)'" ds.defs)

add_python_binding (
    COMPONENT
        gui
    REQUIRES_COMPONENTS
        env
    DEFINITIONS
        ${GTK_CFLAGS} ${GTK_CFLAGS_OTHER}
        ${PYGTK_CFLAGS} ${PYGTK_CFLAGS_OTHER}
    LIBRARIES
        ${PYGTK_LIBRARIES}
        ${PYGTK_LIBRARY_DIRS}
    DEFS_PATCHES
        sed -i "'s/\"tag\"/\"tag\" (null-ok) (default \"NULL\")/'" gui.defs &&
        sed -i "'s/\"pos\"/\"pos\" (default \"-1\")/'" gui.defs &&
        sed -i "'s/\"group_id\"/\"group_id\" (default \"default\")/'" gui.defs &&
        sed -i "'/^(define-function palette_groups_get$/a(caller-owns-return #t)'" gui.defs &&
        sed -i "'/^(define-function icon_get_pixbuf$/a(caller-owns-return #t)'" gui.defs
    CODEGEN_ARGS
        --load-types ${CMAKE_CURRENT_SOURCE_DIR}/gui_types.py
        --register ${PYTHON_DEFSDIR}/pango.defs
        --register ${PYTHON_DEFSDIR}/gdk-types.defs
        --register ${PYTHON_DEFSDIR}/gtk-types.defs)

add_python_binding (
    COMPONENT
        collab
    REQUIRES_COMPONENTS
        env
    DEFINITIONS
        ${DBUS_CFLAGS} ${DBUS_CFLAGS_OTHER}
    DEFS_PATCHES
        sed -i "s/D_BUS/DBUS/g" collab.defs &&
        sed -i "s/SUGAR_TYPE_DBUS_TUBE_BUDDY/SUGAR_DBUS_TUBE_TYPE_BUDDY/g" collab.defs)

add_python_binding (
    COMPONENT
        shell
    REQUIRES_COMPONENTS
        env
    DEFINITIONS
        ${DBUS_CFLAGS} ${DBUS_CFLAGS_OTHER}
    DEFS_PATCHES
        sed -i "'s/^(define-function shell_/(define-function /'" shell.defs)

add_python_binding (
    COMPONENT
        toolkit
    REQUIRES_COMPONENTS
        env
        ds
        collab
        gui
        shell
    DEFINITIONS
        ${GTK_CFLAGS} ${GTK_CFLAGS_OTHER}
        ${PYGTK_CFLAGS} ${PYGTK_CFLAGS_OTHER}
        ${DBUS_CFLAGS} ${DBUS_CFLAGS_OTHER}
    DEFS_PATCHES
        sed -i "'s/^(define-object Alert$/(define-interface Alert/'" toolkit.defs &&
        sed -i "'s/\"icon_name\"/\"icon_name\" (null-ok) (default \"NULL\")/'" toolkit.defs &&
        sed -i "'/^(define-method bin_push$/,/^)$/d'" toolkit.defs &&
        sed -i "'/^(define-method bin_pop$/,/^)$/d'" toolkit.defs)

install (
    FILES
        __init__.py
        json.py
    DESTINATION
        ${PYTHON_SITEDIR}/polyol)
