Convertit les définitions simples de C # en constantes de rouille

J’ai une bibliothèque propriétaire avec une longue histoire et un en-tête 30KLoC. Je voudrais générer des liaisons pour Rust à elle. Et j’ai utilisé bindgen caisse presque avec succès. Sauf que bindgen ne peut pas transformer les constantes de macro en constantes normales. Parce que ces constantes sont définies de manière floue, comme

 #define CONSTANT ((const_type)SOME_OTHER_CONSTANT) 

Alors, y a-t-il un moyen de traduire de telles demi-constantes en constantes normales de Rust:

 const Type name = value; 

METTRE À JOUR

Apparemment, bindgen utilise clang comme base. Et clang est capable de traiter les définitions de macros et autres éléments similaires, si le drapeau correct est fourni à l’parsingur. Alors, est-ce que quelqu’un peut conseiller un bon tutoriel sur le traitement des définitions de macros à l’aide de l’API libclang ?

L’exécution des en-têtes via gcc -E (c’est-à-dire le préprocesseur) supprimera le #define s. Il peut supprimer plus que vous voulez cependant.

Si vous souhaitez effectuer un prétraitement sélectif, il existait un utilitaire appelé scpp qui le faisait. Je ne peux pas y trouver immédiatement une référence autre que certains fichiers tar à télécharger, mais vous aurez peut-être plus de chance.