Можливо, ви знайшли щось, з чим ви задоволені зараз, але я склав бінарний унісон, який працює на андроїд - можливо, використовуючи інструкції про розмахування руками, про які ви говорите, - я використав їх для перехресного компіляції джерела Linux в ubuntu 12.10 за допомогою Android NDK та з кількома змінами коду, який він працює зараз. Дотримуйтесь інструкцій на веб-сторінці https://sites.google.com/site/keigoattic/ocaml-on-android, і тоді вам потрібно буде виконати кілька дій. У джерелі unison є файл під назвою pty.c - знайдіть такий розділ:
// openpty
#if defined(__linux)
#include <pty.h>
/*#define HAS_OPENPTY 1*/
#endif
і коментувати, define HAS_OPENPTY 1
як показано. Вам також потрібно відкрити ubase / util.ml і відредагувати:
let homeDir () =
System.fspathFromString "/Your path here"
Прокоментувати звідси:
(if (osType = `Unix) || isCygwin then
safeGetenv "HOME"
else if osType = `Win32 then
(*We don't want the behavior of Unison to depends on whether it is run
from a Cygwin shell (where HOME is set) or in any other way (where
HOME is usually not set)
try System.getenv "HOME" (* Windows 9x with Cygwin HOME set *)
with Not_found ->
*)
try System.getenv "USERPROFILE" (* Windows NT/2K standard *)
with Not_found ->
try System.getenv "UNISON" (* Use UNISON dir if it is set *)
with Not_found ->
"c:/" (* Default *)
else
assert false (* osType can't be anything else *))
... Туди!
Тоді вам також доведеться редагувати Makefile.Ocaml
CWD=$(shell pwd)
EXEC_EXT=
WINOBJS=
SYSTEM=generic
# openpty is in the libutil library
ifneq ($(OSARCH),solaris)
ifneq ($(OSARCH),osx)
# CLIBS+=-cclib -lutil
endif
endif
buildexecutable::
@echo Building for Unix
endif
endif
І коментуйте, # CLIBS+=-cclib -lutil
як показано.
І наскільки я пам’ятаю, що все працювало. Інший крок, щойно складений, - це змонтувати свій системний розділ Android як записуваний та скопіювати унісон у папку / system, де є всі інші команди оболонки.
Сподіваюся, що комусь це корисно ... Я втратив багато сну під час складання.