On Fri, Mar 28, 2008 at 07:33:29AM +0300, Alexey Tourbin wrote: > 2) Связь между окамлевскими файлами (внутренние зависимости) > осуществляются на уровне md5-сумм *.cmi интерфейсов. > > Я подсмотрел, как собирают окмль в федоре. В окамле есть утилита > objinfo (ocamlobjinfo), которая по умолчанию не устанавливается, > но это легко исправить. Это утилита показывает внутренние зависимости > на *.cmi интерфейсы и их md5 суммы. > > $ ocamlobjinfo /usr/lib/ocaml/weak.cmi > File /usr/lib/ocaml/weak.cmi > Module name: Weak > Interfaces imported: > 6d509339939dea165d9dfd44d8a6a035 Weak > 8ba3d1faa24d659525c9025f41fd0c57 Pervasives > 083f2c94b44ff4e0b3220aaea6a783b4 Hashtbl > $ Это всё фактически касается файлов для линковки (байткода или native executables), то есть это будут зависимости как бы devel-пакетов. Теперь вопрос такой: что делать с #!/usr/bin/ocamlrun байткодом. У этого байткода могут быть зависимости на DLL, котрые разрешаются самим интерпретатором ocamlrun в рантайме. Предварительный прогресс такой: байткод тоже поддается анализу, но совсем по-другому, нежели чем файлы с Caml1999* magic. В байткод можно заглянуть с помощью Bytesections.seek_section, примерно как это сделано в tools/dumpobj.ml. Небольшая модификация этого файла: let dump_exe ic = Bytesections.read_toc ic; let dlls_size = Bytesections.seek_section ic "DLLS" in let dlls = read_primitive_table ic dlls_size in Array.iter (fun dll -> print_string "DLL\t"; print_string dll; print_newline()) dlls позволяет распечатать список подгружаемых DLLs. $ ./tools/dumpobj ~tmp/lablgtktop DLL dllunix DLL dllthreads DLL dlllablgl DLL dlllablgtk2 DLL dlllablgtkgl2 DLL dlllablglade2 DLL dlllablrsvg DLL dlllablgtkspell $ Значит, можно ввести новое пространство виртуальных зависимостей, типа ocaml-dll(unix), чтобы обеспечить работоспособность ocamlrun байткода по зависимостям.