Преобразование простых C # define в константы Rust

У меня есть собственная библиотека с длинной историей и заголовком 30KLoC. Я хотел бы создать привязки для Rust. И я использовал ящик bindgen почти успешно. Кроме того, bindgen не может преобразовать макро константы в нормальные константы. Поскольку эти константы определены нечетким образом, например

 #define CONSTANT ((const_type)SOME_OTHER_CONSTANT) 

Итак, есть ли способ перевести такие полупостоянства в обычные Rust:

 const Type name = value; 

ОБНОВИТЬ

Видимо, ящик bindgen использует clang качестве своего backend. И clang может иметь дело с макроопределениями и другими подобными вещами, если для парсера предоставляется правильный флаг. Итак, может ли кто-нибудь посоветовать хороший учебник по работе с определениями макросов с использованием API libclang ?

Запуск заголовков через gcc -E (т.е. препроцессор) приведет к удалению #define s. Он может удалить больше, чем вы хотите.

Если вы хотите выборочно препроцессить, раньше это была утилита scpp . Я не могу сразу найти ссылку на него, кроме некоторых tar-файлов для загрузки, но у вас может быть больше удачи.