Добрый вечер.
Возникла необходимость получить в своё распоряжение возможность работать с Clutter из Swi-Prolog (т.е., вызывать сишный код). До этого написанием биндингов никогда не занимался, поэтому возник ряд вопросов. Но прежде чем задавать их, в двух словах расскажу о том, что из себя представляет Swi'шный FFI, чтобы было понятнее, что мне нужно.
Swi-Prolog позволяет напрямую обращаться к функциям из специально заготовленных *.so, например:
#include <SWI-Prolog.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
foreign_t pl_lowercase(term_t u, term_t l)
{
	printf("%d\n", count);
	count++;
	
	char *copy;
	char *s, *q;
	int rval;
	
	if (!PL_get_atom_chars(u, &s))
		return PL_warning("lowercase/2: instantiation fault");
	copy = malloc(strlen(s) + 1);
	for (q = copy; *s; q++, s++)
		*q = (isupper(*s) ? tolower(*s) : *s); 
		
	*q = '\0';
	rval = PL_unify_atom_chars(l, copy);
	free(copy);
	return rval;
}
install_t install()
{
	PL_register_foreign("lowercase", 2, pl_lowercase, 0);
} 
Как видно, Swi-Prolog работает только с функциями, которые возвращают и принимают специальные типы.
Выражаясь по русски, для каждой «обычной функции» мне нужно написать небольшую обёртку, которая будет преобразовывать прологовские типы в сишные и обратно. Ничего сложного, но много ручной работы.
А теперь вопросы:
- Правильно ли я понимаю, что сегодня никто руками биндинги не пишет, и всё (или почти всё) генерируется автоматически?
 - Если да, то как это делается? На данный момент у меня идея такова - составить нечто вроде БД всех Clutter'овских функций, структур, итп., и уже по ней генерировать нужный мне *.so.
 - Если остальные используют схожий подход, значит ли это, что такие БД уже должны быть собраны до меня, и мне останется лишь их вежливо попросить у разработчиков Clutter или биндингов к нему?
 - «Обернуть» функции довольно тривиально (если не считать всяких variable argument lists, итп). Как быть с макросами?
 - Есть ли готовые работы, от которых можно было бы оттолкнуться?
 - Есть ли что либо почитать по этой теме?
 
Любые другие мудрые советы приветствуются.



