ocaml-srpm-macros/macros.ocaml-srpm
Jerry James bd6360a4c9 Add odoc and dune macros
- Add ocaml_files.py to support %files automation
- Use %rpmmacrodir instead of a custom macro
2022-02-16 15:06:51 -07:00

93 lines
3.2 KiB
Plaintext

# Note that OCaml is compiled on all architectures. However
# on some (rare) architectures, only bytecode compilation is
# available. Use these macros to find out if native code
# compilation is available on a particular architecture.
# Architectures that support the OCaml native code compiler.
%ocaml_native_compiler aarch64 %{arm} %{ix86} ppc ppc64 ppc64le riscv64 s390x sparc sparcv9 x86_64
# Architectures that support native dynamic linking of OCaml code.
%ocaml_natdynlink aarch64 %{arm} %{ix86} ppc ppc64 ppc64le riscv64 s390x sparc sparcv9 x86_64
# Architectures that support profiling of native code (ocamlopt -p).
# This was removed in OCaml 4.09.
# https://github.com/ocaml/ocaml/pull/2314
%ocaml_native_profiling %{nil}
# Toplevel OCaml directory
%ocamldir %{_libdir}/ocaml
# This macro generates %package and %files definitions for a doc subpackage,
# containing content generated by odoc.
# Use on the top-level only, preferably just before %prep.
#
# Use the -L option to specify the license file name. Example:
# %odoc_package -L LICENSE
%odoc_package(L:) \
%package doc \
BuildArch: noarch \
BuildRequires: ocaml-odoc \
Summary: Documentation for %{name} \
%description doc \
Developer documentation for %{name}. \
%files doc \
%doc _build/default/_doc/_html/* \
%{?-L:%%license %{-L*} %*}
# Add smp_mflags to arguments if no -j release option is given.
# Add --release to arguments if no -p or --release option is given.
# Add --verbose to arguments if it is not given.
%dune_add_flags(-) %{lua:
has_j = false
has_p = false
has_v = false
for _, flag in pairs(arg) do
if flag:find("^-j") then
has_j = true
elseif flag:find("^-p") or flag:find("^--release)") then
has_p = true
elseif flag:find("^--verbose") then
has_v = true
end
end
if not has_j then
table.insert(arg, 1, rpm.expand("%{?_smp_mflags}"))
end
if not has_p then
table.insert(arg, 1, "--release")
end
if not has_v then
table.insert(arg, 1, "--verbose")
end
print(table.concat(arg, " "))
}
# Build with dune
%dune_build(-) dune build %{dune_add_flags %*}
# Run tests with dune
%dune_check(-) dune runtest %{dune_add_flags %*}
# Make %files lists from an installed tree of files.
# The -s option enables separate packaging; every subdirectory of
# %{_libdir}/ocaml, except stublibs, is placed in its own package. This option
# requires the existence of opam *.install files in the build tree.
# The -n option suppresses creation of a devel subpackage.
# This macro requires that python3 be installed in the chroot.
%ocaml_files(sn) /usr/bin/python3 /usr/lib/rpm/redhat/ocaml_files.py %{-s} %{-n} %{buildroot} %{ocamldir}
# Install with dune
# The -s option enables separate packaging; every subdirectory of
# %{_libdir}/ocaml, except stublibs, is placed in its own package.
# The -n option suppresses creation of a devel subpackage.
# This macro requires that python3 be installed in the chroot.
%dune_install(sn) \
dune install --destdir=%{buildroot} %{dune_add_flags %*}; \
if [ -d _build/default/_doc/_html ]; then \
find _build/default/_doc/_html -name .dune-keep -delete; \
fi; \
rm -rf %{buildroot}%{_prefix}/doc; \
mlis=$(find %{buildroot}%{_libdir}/ocaml -name '*.mli'); \
rm -f ${mlis//.mli/.ml}; \
%ocaml_files %{-s} %{-n}