.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "DH_OCAML 1" .TH DH_OCAML 1 "2023-08-24" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" dh_ocaml \- calculates OCaml packages dependencies and provides .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBdh_ocaml\fR [\fIdebhelper\ options\fR] [\fB\-\-runtime\-map\fR=\fIdev:runtime,...\fR] [\fB\-\-nodefined\-map\fR=\fIdev:ignore1,ignore2\fR] [\fB\-\-checksum\fR=\fIstr\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" dh_ocaml is a debhelper program that is responsible for filling the ${ocaml:Provides} and ${ocaml:Depends} substitutions and adding them to substvars files. .PP dh_ocaml acts on three kinds of binary packages: those shipping development part of OCaml libraries (usually named libXXX-ocaml-dev or libXXXX\-camlp4\-dev), those shipping runtime for OCaml libraries (e.g. plugin and shared library, usually named libXXX-ocaml or libXXXX\-camlp4) and those shipping OCaml bytecode non-custom executables (i.e. executables interpreted by /usr/bin/ocamlrun). .PP On specific packages the convention is \s-1XXX\s0 for development and XXX-base for runtime (e.g. ocaml and ocaml-base). .PP On OCaml library packages dh_ocaml will firstly look at OCaml objects shipped by the package. Then, dh_ocaml uses appropriate program on them for collecting information about OCaml modules defined and used by them. Information about defined units will be used to automatically create the OCaml md5sums registry entry for development and runtime package, e.g. /var/lib/ocaml/md5sums/libXXX\-ocaml\-dev.md5sums. Information about imported units will instead be used as keys in the OCaml md5sums registry for retrieving dependency information for the package. Those information will then be used to fill the ${ocaml:Depends} substvars. They will also be used to fill the ${ocaml:Provides} substvar which will be replaced by a name of the form libXXX-ocaml-dev-NNNN, where \s-1NNNN\s0 is an checksum computed from the interfaces of the modules provided by the library. .PP Object files (*.cm[ioax], *.cmx[as]) and executables are processed by \&\fBocamlobjinfo\fR\|(1), if possible. .PP Dependencies extracted from the system md5sum registry, dh_ocaml will add in ${ocaml:Depends}: .IP "1." 4 dependency from libXXX-ocaml-dev to libXXX-ocaml (runtime part of the library), if there is a libXXX-ocaml package in debian/control; .IP "2." 4 dependency from libXXX-ocaml-dev to the appropriate libYYYY-ocaml-dev-NNNN packages; .IP "3." 4 dependency from libXXX-ocaml to the appropriate libYYYY-ocaml-NNNN packages. .IP "4." 4 dependency from \s-1XXXX\s0 to the appropriate libYYYY-ocaml-NNNN packages. .PP For runtime package ${ocaml:Provides} will be set libXXXX-ocaml-NNNN and for development package to libXXX-ocaml-dev-NNNN. .PP The same kind of relations are established between libXXXX\-camlp4 and libXXXX\-camlp4\-dev packages. .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-checksum\fR str" 4 .IX Item "--checksum str" Checksum are automatically computed from exported interface by the dev/runtime package. This checksum can only show a partial information about the interface. In this case the checksum computation can be replaced by another string which gives more information about dependencies. .Sp Typically, ocaml/ocaml\-base package doesn't use a computed checksum but the version of OCaml. .IP "\fB\-\-nodefined\-map\fR \fIdev1:unit1,unit2,...\fR" 4 .IX Item "--nodefined-map dev1:unit1,unit2,..." Ignore some exported unit of package/runtime dev1. This option should be used with care. It is a very special case, when one library ship a drop-in replacement for another library. Most of the time if one library ship the same unit it should be considered as an error. .Sp This option can be repeated as much as needed to define ignore for all development packages. .IP "\fB\-\-runtime\-map\fR \fIdev1:runtime1:checksum1,dev2:runtime2:checksum2,...\fR" 4 .IX Item "--runtime-map dev1:runtime1:checksum1,dev2:runtime2:checksum2,..." The association between development part of libraries and their runtimes is guessed by dh_ocaml according to the OCaml packaging policy. Thus, libXXX-ocaml-dev is the name of the package shipping the development part of \s-1XXX\s0 library while libXXX-ocaml, if any, is the name of the package shipping the corresponding runtime. libXXXX\-camlp4\-dev and libXXXX\-camlp4 packages are handled the same way. .Sp Using \-\-runtime\-map you could override the pairs development package name, runtime package name. The value passed to \-\-runtime\-map admits no spaces and must be a comma separated list of items. Each item can be a single package name (stating that that name corresponds to the development part of a library), two package names separated by a colon (stating that the first corresponds to the development part of a library, while the second to its accompanying runtime part) or two package names separated by a colon, followed by a colon and a checksum (which will be used as checksum for the package pair). .Sp Every package that doesn't follow libXXX\-ocaml\-dev/libXXX\-ocaml, libXXXX\-camlp4\-dev/libXXXX\-camlp4 or which is not defined in the runtime map are considered to be binary package and will be searched only for bytecode. .SH "FILES" .IX Header "FILES" .IP "\fIdebian/libXXX\-ocaml\-dev.olist\fR \fIdebian/libXXX\-camlp4\-dev.olist\fR" 4 .IX Item "debian/libXXX-ocaml-dev.olist debian/libXXX-camlp4-dev.olist" By default, the list of OCaml objects or bytecode binaries shipped by your package which should be analyzed for retrieving dependency information is guessed by dh_ocaml. .Sp This file permits one to specify a file which lists, one per line, that OCaml objects or bytecode binaries. Objects should be in one of the format understandable by \fBocamlobjinfo\fR\|(1). Files are considered relative to the package build directory. .SH "CONFORMS TO" .IX Header "CONFORMS TO" Debian policy, version 3.7.2 .PP OCaml packaging policy, version 1.0.0 .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBocamlobjinfo\fR\|(1), \fBdebhelper\fR\|(7), \fBocaml\-md5sums\fR\|(1) .PP This program is a part of debhelper. .SH "AUTHORS" .IX Header "AUTHORS" Stefano Zacchiroli , Samuel Mimram , Mehdi Dogguy , Sylvain Le Gall , Ste\*'phane Glondu