LINUX.ORG.RU
ФорумTalks

SWIG обновился до версии 4.0.0 и больше не поддерживает язык Modula3

 , ,


0

1

Сабж. Changelog: https://sourceforge.net/p/swig/news/2019/04/swig-400-released/
Скачать: http://prdownloads.sourceforge.net/swig/swig-4.0.0.tar.gz
.src.rpm пакет для Магейи: https://yadi.sk/d/xcWKaRGH7NExzQ

Напоминаю что такое SWIG:

SWIG (англ. simplified wrapper and interface generator) — свободный инструмент для связывания программ и библиотек, написанных на языках C и C++, с интерпретируемыми (Tcl, Perl, Python, Ruby, PHP) или компилируемыми (Java, C#, Scheme, OCaml) языками. Основная цель: обеспечение возможности вызова функций, написанных на одних языках, из кода на других языках. Программист создаёт файл .i с описанием экспортируемых функций; SWIG генерирует исходный код для склеивания C/C++ и нужного языка, создаёт исполняемый файл.

https://ru.wikipedia.org/wiki/SWIG

Краткий обзор изменений:

  • улучшены обёртки STL для C#, Java и Ruby;
  • добавлены C++11 STL контейнеры для Java, Python и Ruby;
  • улучшенная поддержка парсинга кода на C++11 и C++14;
  • удалена поддержка языков CFFI, Allegrocl, Chicken, CLISP, S-EXP, UFFI, Pike, Modula3;
  • добавлена поддержка Octave 4.4-5.1 и Javascript NodeJS версий 2-10;
  • поддержка PHP5 удалена, вместо неё добавлена поддержка PHP7;
  • минимальная версия Python'а теперь 2.7, 3.2-3.7;
  • значительно улучшена поддержка языка OCaml, минимальная версия которого теперь должна быть 3.12.0;
★★★★★
Ответ на: комментарий от Crocodoom

А не подскажите, можно-ли SWIG просто натравить на пачку хедеров целевой библиотеки написанной на C, что-бы он как-то сам сгенерировал хоть какие дефолтные обертки для нужного мне языка.

Поясню что я имею ввиду: у меня есть проект на C#\Mono, в который я пытаюсь интегрировать внешнюю нативную библиотеку через интероп. Внешняя библиотека, во-первых, не моя разработка, во-вторых имеет достаточно нестабильный и часто меняющийся API, и в-третьих, общее количество экспортируемых функций очень значительное.

Сейчас, я решаю эту задачу с помощью несколько кастомизированного проекта ClangSharp - его я могу просто натравить на пачку хедеров, и он мне сам сгенерирует маппинги для всех функций и структур описанных в них. Что очень хорошо автоматизируется и не требует большой ручной работы при обновлениях API нативной библиотеки. Хотя сам ClangSharp весьма глючная поделка, от которой я в перспективе хотел-бы избавиться.

Для работы этого самого SWIG'а - мне потребуется каждый раз писать ".i" файл с описанием экспортируемых из библиотеки функций\структур (а их там дохрена) ? Или как-то можно опустить или автоматизировать этот этап ?

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 2)
Ответ на: комментарий от DawnCaster

Для работы этого самого SWIG'а - мне потребуется каждый раз писать ".i" файл с описанием экспортируемых из библиотеки функций\структур (а их там дохрена) ? Или как-то можно опустить или автоматизировать этот этап

%module mymodule

%include "header.h"
#include "header.h"

Не удивлюсь, если всё сразу заработает, раз у тебя обычная сишка

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

И так для каждого хедера, просто копипастом.

Первый инклюд для самого свига, второй для линкера.

%инклюдь только то, врапперы к чему тебе нужны. #инклюдь всё что нужно, чтобы линкер не упал

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

раз у тебя обычная сишка

Если-бы обычная. Автор там по полной программе развлекается с фичами из C11, приходится перед компиляцией библиотеки вручную убирать из публичного API всякий адокъ вроде битовых полей в структурах...

Но спасибо за наводку. Походу, получается что со SWIG'ом можно без особых сложностей всё провернуть. Вечером попробую.

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 2)

Фактически весь CL вырубили. Документации нет, тесты не проходят.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.