Определить версию OCaml при компиляции C - PullRequest
4 голосов
/ 16 мая 2011

Я работаю над кодом, который смешивает OCaml и C, функции caml_release_runtime_system() и caml_acquire_runtime_system() были введены в OCaml 3.12 (в более ранних версиях они назывались как-то иначе), но я хотел бы быть совместимым с 3.10, если возможно, есть ли #ifdef, который я могу использовать для этого? Я просмотрел заголовки (в /usr/lib/ocaml/caml в моей системе Debian) и не могу найти ничего похожего на это. Спасибо!

ОБНОВЛЕНИЕ : это то, что я сделал

Вот что я сделал:

#if OCAML_VERSION_MINOR >= 12
#include <caml/threads.h>
#else
#include <caml/signals.h>
#endif 

#ifndef caml_acquire_runtime_system
#define caml_acquire_runtime_system caml_leave_blocking_section
#define caml_release_runtime_system caml_enter_blocking_section
#endif

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

КАМЛ / threads.h:

#define caml_acquire_runtime_system caml_leave_blocking_section
#define caml_release_runtime_system caml_enter_blocking_section

Так что просто добавьте те же строки в код C (защищенный #ifndef caml_acquire_runtime_system) и избавьте свою систему сборки (и пользователей) от зависимости от внешних утилит и номеров версий.

3 голосов
/ 16 мая 2011

Двоичные файлы ocamlopt и ocamlc поддерживают переключатели -vnum и -version для получения номера версии:

-vnum или -version Напечатайте номер версии компилятора в краткой форме (например, 3.11.0), затем выйдите.

Этот переключатель поддерживается в 3.12.0, и пример текста в документации предполагает, что 3.11.0 также поддерживает это.У меня нет 3.10.0 под рукой, но nlucaroni (чей OCaml Fu выглядит сильнее моего) указывает в комментариях, что 3.10.0 имеет ocamplopt -version.

Так что вы можете добавитьчто-то вроде этого в ваш Makefile:

OCAML_VERSION_MAJOR = `ocamlopt -version | cut -f1 -d.`
OCAML_VERSION_MINOR = `ocamlopt -version | cut -f2 -d.`
OCAML_VERSION_POINT = `ocamlopt -version | cut -f3 -d.`

и затем передайте их вашему компилятору, используя -DOCAML_VERSION_MAJOR=$(OCAML_VERSION_MAJOR), -DOCAML_VERSION_MINOR=$(OCAML_VERSION_MINOR), ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...