diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/README.md b/README.md index f8ce716..6578a57 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # ocaml-dune -The ocaml-dune package \ No newline at end of file +[Dune](https://dune.build) is a build system designed for +[OCaml](https://ocaml.org/)/[Reason](https://reasonml.github.io/) projects +only. It focuses on providing the user with a consistent experience and takes +care of most of the low-level details of OCaml compilation. All you have to +do is provide a description of your project and Dune will do the rest. + +The scheme it implements is inspired from the one used inside +[Jane Street](https://opensource.janestreet.com/) and adapted to the open +source world. It has matured over a long time and is used daily by hundred of +developers, which means that it is highly tested and productive. diff --git a/gating.yaml b/gating.yaml new file mode 100755 index 0000000..2c7ed80 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,6 @@ +--- !Policy +product_versions: + - rhel-* +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} diff --git a/ocaml-dune-debuginfo.patch b/ocaml-dune-debuginfo.patch new file mode 100644 index 0000000..906cec4 --- /dev/null +++ b/ocaml-dune-debuginfo.patch @@ -0,0 +1,11 @@ +--- dune-3.20.0/src/dune_lang/dune_project.ml.orig 2025-08-19 00:28:44.000000000 -0600 ++++ dune-3.20.0/src/dune_lang/dune_project.ml 2025-08-21 20:42:51.793195598 -0600 +@@ -425,7 +425,7 @@ let interpret_lang_and_extensions ~(lang + let filename = "dune-project" + let opam_file_location_default ~lang:_ = `Relative_to_project + let wrapped_executables_default ~(lang : Lang.Instance.t) = lang.version >= (2, 0) +-let map_workspace_root_default ~(lang : Lang.Instance.t) = lang.version >= (3, 0) ++let map_workspace_root_default ~(lang : Lang.Instance.t) = false + + let executables_implicit_empty_intf_default ~(lang : Lang.Instance.t) = + lang.version >= (3, 0) diff --git a/ocaml-dune-no-lwt.patch b/ocaml-dune-no-lwt.patch new file mode 100644 index 0000000..51cabf2 --- /dev/null +++ b/ocaml-dune-no-lwt.patch @@ -0,0 +1,31 @@ +--- dune-3.15.0/dune-file.orig 2024-04-03 03:29:40.000000000 -0600 ++++ dune-3.15.0/dune-file 2024-04-05 08:48:56.083804773 -0600 +@@ -30,9 +30,6 @@ + (copy dune-private-libs.opam.template ordering.opam.template)) + + (rule +- (copy dune-private-libs.opam.template dune-rpc-lwt.opam.template)) +- +-(rule + (copy dune-private-libs.opam.template fiber.opam.template)) + + (rule +--- dune-3.15.0/dune-project.orig 2024-04-03 03:29:40.000000000 -0600 ++++ dune-3.15.0/dune-project 2024-04-05 08:49:50.546090649 -0600 +@@ -149,16 +149,6 @@ understood by dune language.")) + (description "Library to connect and control a running dune instance")) + + (package +- (name dune-rpc-lwt) +- (synopsis "Communicate with dune using rpc and Lwt") +- (depends +- (dune-rpc (= :version)) +- (csexp (>= 1.5.0)) +- (lwt (>= 5.6.0)) +- base-unix) +- (description "Specialization of dune-rpc to Lwt")) +- +-(package + (name dyn) + (synopsis "Dynamic type") + (depends diff --git a/ocaml-dune.rpmlintrc b/ocaml-dune.rpmlintrc deleted file mode 100644 index e72af52..0000000 --- a/ocaml-dune.rpmlintrc +++ /dev/null @@ -1,14 +0,0 @@ -# THIS FILE IS FOR WHITELISTING RPMLINT ERRORS AND WARNINGS IN TASKOTRON -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#Whitelisting_errors - -# The dictionary lacks some technical words -addFilter(r'W: spelling-error .* (composable|flymake)') - -# Caused by ocaml; this package cannot fix it -addFilter(r'ocaml-dune\.[^:]+: E: missing-call-to-chdir-with-chroot') - -# Documentation is in the main package -addFilter(r'ocaml-dune-.*\.[^:]+: W: no-documentation') - -# The configure script is not an autotools-generated script -addFilter(r'ocaml-dune\.spec:[^:]*: W: configure-without-libdir-spec') diff --git a/ocaml-dune.spec b/ocaml-dune.spec index 8b6906c..9409c70 100644 --- a/ocaml-dune.spec +++ b/ocaml-dune.spec @@ -1,54 +1,113 @@ -%global libname dune +# TESTING NOTE: The testsuite requires numerous packages, many of which are +# built with dune. Furthermore, the testsuite assumes it is running in a git +# checkout, and has access to the Internet. We cannot satisfy any of these +# conditions on a koji builder, so we do not run the test suite. -# Since menhir now requires dune to build, but dune needs menhir only for the -# tests, build in bootstrap mode to skip the tests and the need for menhir. -%bcond_without menhir +# One of the dune libraries now depends on lwt. We do not currently need that +# library in Fedora, so don't build it. +%bcond lwt 0 -Name: ocaml-%{libname} -Version: 2.8.2 -Release: 3%{?dist} -Summary: A composable build system for OCaml +# docs are not needed in RHEL, and add unwanted build dependencies +%bcond docs %{undefined rhel} + +%global giturl https://github.com/ocaml/dune + +Name: ocaml-dune +Version: 3.20.2 +Release: 2%{?dist} +Summary: Composable build system for OCaml and Reason # Dune itself is MIT. Some bundled libraries have a different license: +# BSD-2-Clause: +# - vendor/ocaml-blake3-mini # ISC: # - vendor/cmdliner -# LGPLv2: +# - vendor/notty +# - vendor/sha +# - vendor/uutf +# LGPL-2.1-only: # - vendor/incremental-cycles -# LGPLv2 with exceptions: +# LGPL-2.1-only WITH OCaml-LGPL-linking-exception +# - vendor/ocaml-inotify +# - vendor/opam # - vendor/opam-file-format # - vendor/re -License: MIT and LGPLv2 and LGPLv2 with exceptions and ISC - +# LGPL-2.1-or-later +# - src/dune_pkg/opam_solver.* +# - src/sat/hash_set.* +# - src/sat/sat.* +# MIT: +# - vendor/build_path_prefix_map +# - vendor/lwd +# - vendor/spawn +License: MIT AND BSD-2-Clause AND ISC AND LGPL-2.1-only AND LGPL-2.1-only WITH OCaml-LGPL-linking-exception AND LGPL-2.1-or-later URL: https://dune.build -Source0: https://github.com/ocaml/%{libname}/archive/%{version}/%{libname}-%{version}.tar.gz +VCS: git:%{giturl}.git +Source: %{giturl}/archive/%{version}/dune-%{version}.tar.gz +# When building without lwt, remove libraries that need it +Patch0: %{name}-no-lwt.patch +# Temporary workaround for broken debuginfo (rhbz#2168932) +# See https://github.com/ocaml/dune/issues/6929 +Patch1: %{name}-debuginfo.patch -BuildRequires: emacs +# OCaml packages not built on i686 since OCaml 5 / Fedora 39. +ExcludeArch: %{ix86} + +BuildRequires: emacs-nw BuildRequires: make BuildRequires: ocaml >= 4.08 -BuildRequires: ocaml-csexp-devel >= 1.3.0 -BuildRequires: ocaml-findlib -BuildRequires: %{py3_dist sphinx} -BuildRequires: %{py3_dist sphinx-rtd-theme} +BuildRequires: ocaml-compiler-libs +%if !0%{?rhel} +BuildRequires: ocaml-csexp-devel >= 1.5.0 +BuildRequires: ocaml-pp-devel >= 2.0.0 +%endif +BuildRequires: ocaml-rpm-macros -%if %{without menhir} -# Required by tests. -BuildRequires: ocaml-menhir +%if %{with docs} +BuildRequires: %{py3_dist furo} +BuildRequires: %{py3_dist myst-parser} +BuildRequires: %{py3_dist sphinx} +BuildRequires: %{py3_dist sphinx-copybutton} +BuildRequires: %{py3_dist sphinx-design} %endif -# Dune has vendored deps (ugh): -# I'm not clear on how to unbundle them. -# It seems to be unsupported upstream; the bootstrap process for dune -# doesn't seem to be able to detect libraries installed systemwide. -# https://github.com/ocaml/dune/issues/220 -Provides: bundled(ocaml-build-path-prefix-map) = 0.2 -Provides: bundled(ocaml-opam-file-format) = 2.0.0 -Provides: bundled(ocaml-cmdliner) = 1.0.4 -Provides: bundled(ocaml-re) = 1.9.0 +%if %{with lwt} +BuildRequires: ocaml-lwt-devel >= 5.6.0 +%endif -Provides: dune = %{version}-%{release} +# Dune has vendored deps to avoid dependency cycles. Upstream deliberately +# does not support unbundling these dependencies. +# See https://github.com/ocaml/dune/issues/220 +Provides: bundled(ocaml-build-path-prefix-map) = 0.3 +Provides: bundled(ocaml-cmdliner) = 1.2.0 +Provides: bundled(ocaml-incremental-cycles) = 1e2030a5d5183d84561cde142eecca40e03db2a3 +Provides: bundled(ocaml-inotify) = 2.3 +Provides: bundled(ocaml-lwd) = 0.3 +Provides: bundled(ocaml-notty) = 0.2.3 +Provides: bundled(ocaml-blake3-mini) = c6aa40e5f1973c2e6b736660ce2c8dcd3b3f9c9f +Provides: bundled(ocaml-opam) = 2.2.0 +Provides: bundled(ocaml-opam-file-format) = 2.1.6 +Provides: bundled(ocaml-re) = 1.11.0 +Provides: bundled(ocaml-sha) = 1.15.4 +Provides: bundled(ocaml-spawn) = 0.15.1 +Provides: bundled(ocaml-uutf) = 1.0.3 -Provides: jbuilder = %{version}-%{release} -Obsoletes: jbuilder < 1.0.1-3 +Provides: dune = %{version}-%{release} + +# This is needed for the dune-related RPM macros +Requires: ocaml-rpm-macros + +# The dune rules module requires Toploop +Requires: ocaml-compiler-libs%{?_isa} + +# This can be removed when F42 reaches EOL +Obsoletes: ocaml-fiber < 3.7.0 +Obsoletes: ocaml-fiber-devel < 3.7.0 +Provides: ocaml-fiber = %{version}-%{release} +Provides: ocaml-fiber-devel = %{version}-%{release} + +# Install documentation in the main package doc directory +%global _docdir_fmt %{name} %description Dune is a build system designed for OCaml/Reason projects only. It focuses @@ -61,28 +120,43 @@ adapted to the open source world. It has matured over a long time and is used daily by hundred of developers, which means that it is highly tested and productive. -%package devel -Summary: Development files for %{name} -Requires: %{name}%{?isa} = %{version}-%{release} -Requires: ocaml-csexp-devel%{?_isa} - -%description devel -The %{name}-devel package contains libraries and -signature files for developing applications that use %{name}. - +%if %{with docs} %package doc +# The content is MIT. Other licenses are due to files added by sphinx. +# BSD-2-Clause: +# - _static/basic.css +# - _static/doctools.js +# - _static/documentation_options.js +# - _static/file.png +# - _static/language_data.js +# - _static/minus.png +# - _static/plus.png +# - _static/searchtools.js +# - _static/sphinx_highlight.js +# MIT: +# - _static/check-solid.svg +# - _static/clipboard.min.js +# - _static/copy-button.svg +# - _static/copybutton.css +# - _static/copybutton.js +# - _static/copybutton_funcs.js +# - _static/design-style.*.min.css +# - _static/design-tabs.js +# - _static/css +# - _static/js +License: MIT AND BSD-2-Clause Summary: HTML documentation for %{name} -Requires: %{name} = %{version}-%{release} - BuildArch: noarch %description doc HTML documentation for dune, a composable build system for OCaml. +%endif %package emacs Summary: Emacs support for %{name} License: ISC Requires: %{name} = %{version}-%{release} +Requires: emacs-filesystem >= %{?_emacs_version}%{!?_emacs_version:0} BuildArch: noarch @@ -90,126 +164,674 @@ BuildArch: noarch The %{name}-devel package contains Emacs integration with the dune build system, a mode to edit dune files, and flymake support for dune files. +## Dune libraries + +%package action-plugin +Summary: API for writing dynamic dune actions +License: MIT +Requires: %{name}-glob%{?_isa} = %{version}-%{release} +Requires: %{name}-rpc%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune%{?_isa} = %{version}-%{release} + +%description action-plugin +This experimental library provides an API for writing dynamic Dune +actions. Dynamic dune actions do not need to declare their dependencies +upfront; they are instead discovered automatically during the execution +of the action. + +%package action-plugin-devel +Summary: Development files for %{name}-action-plugin +License: MIT +Requires: %{name}-action-plugin%{?_isa} = %{version}-%{release} +Requires: %{name}-glob-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-rpc-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-csexp-devel%{?_isa} +Requires: ocaml-pp-devel%{?_isa} +%endif + +%description action-plugin-devel +The ocaml-dune-action-plugin-devel package contains libraries and +signature files for developing applications that use +ocaml-dune-action-plugin. + +%package build-info +Summary: Embed build information in an executable +License: MIT + +%description build-info +The build-info library allows access to information about how an +executable was built, such as the version of the project at which it was +built or the list of statically linked libraries with their versions. +It supports reporting the version from a version control system during +development to get a precise reference of when the executable was built. + +%package build-info-devel +Summary: Development files for %{name}-build-info +License: MIT +Requires: %{name}-build-info%{?_isa} = %{version}-%{release} + +%description build-info-devel +The ocaml-dune-build-info-devel package contains libraries and signature +files for developing applications that use ocaml-dune-build-info. + +%package configurator +Summary: Helper library for gathering system configuration +License: MIT +Requires: ocaml-stdune%{?_isa} = %{version}-%{release} + +%description configurator +Dune-configurator is a small library that helps write OCaml scripts that +test features available on the system, in order to generate config.h +files for instance. Among other things, dune-configurator allows one +to: + +- test if a C program compiles +- query pkg-config +- import a #define from OCaml header files +- generate a config.h file + +%package configurator-devel +Summary: Development files for %{name}-configurator +License: MIT +Requires: %{name}-configurator%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-csexp-devel%{?_isa} +%endif + +%description configurator-devel +The ocaml-dune-configurator-devel package contains libraries and +signature files for developing applications that use +ocaml-dune-configurator. + +%package glob +Summary: Parser and interpreter for dune language globs +License: MIT +Requires: %{name}-private-libs%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune%{?_isa} = %{version}-%{release} + +%description glob +Dune-glob provides a parser and interpreter for globs as understood by +the dune language. + +%package glob-devel +Summary: Development files for %{name}-glob +License: MIT +Requires: %{name}-glob%{?_isa} = %{version}-%{release} +Requires: %{name}-private-libs-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-pp-devel%{?_isa} +%endif + +%description glob-devel +The ocaml-dune-glob-devel package contains libraries and signature files +for developing applications that use ocaml-dune-glob. + +%package private-libs +Summary: Private dune libraries +License: MIT + +%description private-libs +This package contains code that is shared between various dune-xxx +packages. However, it is not meant for public consumption and provides +no stability guarantee. + +%package private-libs-devel +Summary: Development files for %{name}-private-libs +License: MIT +Requires: %{name}-private-libs%{?_isa} = %{version}-%{release} + +%description private-libs-devel +The ocaml-dune-private-libs-devel package contains libraries and +signature files for other dune packages. Do not use. + +%package rpc +Summary: Communicate with dune using rpc +License: MIT +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune%{?_isa} = %{version}-%{release} +Requires: ocaml-xdg%{?_isa} = %{version}-%{release} + +%description rpc +This package contains a library used to communicate with dune over rpc. + +%package rpc-devel +Summary: Development files for %{name}-rpc +License: MIT +Requires: %{name}-rpc%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-stdune-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-xdg-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-csexp-devel%{?_isa} +Requires: ocaml-pp-devel%{?_isa} +%endif + +%description rpc-devel +The ocaml-dune-rpc-devel package contains libraries and signature files +for developing applications that use ocaml-rpc. + +%if %{with lwt} +%package rpc-lwt +Summary: Communicate with dune using rpc and Lwt +License: MIT +Requires: %{name}-rpc%{?_isa} = %{version}-%{release} + +%description rpc-lwt +This package contains a library used to communicate with dune over rpc +using Lwt. + +%package rpc-lwt-devel +Summary: Development files for %{name}-rpc-lwt +License: MIT +Requires: %{name}-rpc-lwt%{?_isa} = %{version}-%{release} +Requires: %{name}-rpc-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-csexp-devel%{?_isa} +%endif +Requires: ocaml-lwt-devel%{?_isa} + +%description rpc-lwt-devel +The ocaml-dune-rpc-lwt-devel package contains libraries and signature +files for developing applications that use ocaml-rpc-lwt. +%endif + +%package site +Summary: Embed location information inside executables and libraries +License: MIT +Requires: %{name}-private-libs%{?_isa} = %{version}-%{release} + +%description site +This library enables embedding location information inside executables +and libraries. + +%package site-devel +Summary: Development files for %{name}-site +License: MIT +Requires: %{name}-site%{?_isa} = %{version}-%{release} +Requires: %{name}-private-libs-devel%{?_isa} = %{version}-%{release} + +%description site-devel +The ocaml-dune-site-devel package contains libraries and signature files +for developing applications that use ocaml-dune-site. + +%package -n ocaml-chrome-trace +Summary: Chrome trace event generation library +License: MIT + +%description -n ocaml-chrome-trace +Library to output trace data to a file in Chrome's trace_event format. +This format is compatible with chrome trace viewer (chrome://tracing). +The trace viewer is part of the catapult project. + +%package -n ocaml-chrome-trace-devel +Summary: Development files for ocaml-chrome-trace +License: MIT +Requires: ocaml-chrome-trace%{?_isa} = %{version}-%{release} + +%description -n ocaml-chrome-trace-devel +The ocaml-dyn-devel package contains libraries and signature files for +developing applications that use ocaml-dyn. + +%package -n ocaml-dyn +Summary: Dynamic types +License: MIT +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} + +%description -n ocaml-dyn +This library supports dynamic types in OCaml. + +%package -n ocaml-dyn-devel +Summary: Development files for ocaml-dyn +License: MIT +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering-devel%{?_isa} = %{version}-%{release} + +%description -n ocaml-dyn-devel +The ocaml-dyn-devel package contains libraries and signature files for +developing applications that use ocaml-dyn. + +%package -n ocaml-ocamlc-loc +Summary: Parse OCaml compiler output into structured form +License: MIT +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} + +%description -n ocaml-ocamlc-loc +Parse OCaml compiler output into structured form. + +%package -n ocaml-ocamlc-loc-devel +Summary: Development files for ocaml-ocamlc-loc +License: MIT +Requires: ocaml-ocamlc-loc%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn-devel%{?_isa} = %{version}-%{release} + +%description -n ocaml-ocamlc-loc-devel +The ocaml-ordering-devel package contains libraries and signature files +for developing applications that use ocaml-ocamlc-loc. + +%package -n ocaml-ordering +Summary: Element ordering +License: MIT + +%description -n ocaml-ordering +Element ordering in OCaml. + +%package -n ocaml-ordering-devel +Summary: Development files for ocaml-ordering +License: MIT +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} + +%description -n ocaml-ordering-devel +The ocaml-ordering-devel package contains libraries and signature files +for developing applications that use ocaml-ordering. + +%package -n ocaml-stdune +Summary: Dune's unstable standard library +License: MIT +Requires: ocaml-dyn%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering%{?_isa} = %{version}-%{release} + +%description -n ocaml-stdune +This package contains Dune's unstable standard library. + +%package -n ocaml-stdune-devel +Summary: Development files for ocaml-stdune +License: MIT +Requires: ocaml-stdune%{?_isa} = %{version}-%{release} +Requires: ocaml-dyn-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-ordering-devel%{?_isa} = %{version}-%{release} +%if !0%{?rhel} +Requires: ocaml-csexp-devel%{?_isa} +Requires: ocaml-pp-devel%{?_isa} +%endif + +%description -n ocaml-stdune-devel +The ocaml-stdune-devel package contains libraries and signature files +for developing applications that use ocaml-stdune. + +%package -n ocaml-xdg +Summary: XDG Base Directory Specification +License: MIT + +%description -n ocaml-xdg +This package contains the XDG Base Directory Specification. + +%package -n ocaml-xdg-devel +Summary: Development files for ocaml-xdg +License: MIT +Requires: ocaml-xdg%{?_isa} = %{version}-%{release} + +%description -n ocaml-xdg-devel +The ocaml-xdg-devel package contains libraries and signature files for +developing applications that use ocaml-xdg. + %prep -%autosetup -n %{libname}-%{version} -p1 +%autosetup -N -n dune-%{version} +%if %{without lwt} +%autopatch 0 -p1 +rm -fr otherlibs/dune-rpc-lwt dune-rpc-lwt.opam +%endif +%autopatch -m1 -p1 %build -./configure --libdir %{_libdir}/ocaml --mandir %{_mandir} +./configure \ + --prefix %{_prefix} \ + --bindir %{_bindir} \ + --datadir %{_datadir} \ + --docdir %{_prefix}/doc \ + --etcdir %{_sysconfdir} \ + --libdir %{ocamldir} \ + --libexecdir %{ocamldir} \ + --mandir %{_mandir} \ + --sbindir %{_sbindir} -# This command fails, because ppx_bench, ppx_expect, and core_bench are missing. -# However, it is only tests that fail, not the actual build, so ignore the -# failures and continue. -%make_build release || : -./dune.exe build @install +%make_build release +%if %{with docs} %make_build doc +%endif -# Relink the stublibs. See https://github.com/ocaml/dune/issues/2977. -cd _build/default/src/stdune -ocamlmklib -g -ldopt "%{build_ldflags}" -o stdune_stubs fcntl_stubs.o -cd - -cd _build/default/src/dune_filesystem_stubs -ocamlmklib -g -ldopt "%{build_ldflags}" -o dune_filesystem_stubs_stubs \ - $(ar t libdune_filesystem_stubs_stubs.a) -cd - +# We also want the libraries +%if !0%{?rhel} +# Do not use the bundled csexp and pp when building them +rm -fr vendor/{csexp,pp} +%endif +./dune.exe build %{?_smp_mflags} --verbose --release @install %install -# "make install" only installs the binary. We want the libraries, too. -./dune.exe install --destdir %{buildroot} +%make_install -%ifarch %{ocaml_native_compiler} -# Add missing executable bits -find %{buildroot}%{_libdir}/ocaml -name \*.cmxs -exec chmod 0755 {} \+ -%endif +# Install the libraries +./dune.exe install --destdir=%{buildroot} + +# We use %%doc below +rm -fr %{buildroot}%{_prefix}/doc # Byte compile the Emacs files cd %{buildroot}%{_emacs_sitelispdir} -%_emacs_bytecompile dune.el dune-flymake.el +%_emacs_bytecompile *.el cd - -# Install documentation by way of pkgdocdir. -rm -fr %{buildroot}%{_prefix}/doc -mkdir -p %{buildroot}%{_pkgdocdir}/ -cp -ar README.md CHANGES.md MIGRATION.md doc/_build/* %{buildroot}%{_pkgdocdir}/ - -%if %{without menhir} -%check -# These are the only tests we can run. The others require components that -# either depend on dune themselves or are not available in Fedora at all. -%{buildroot}%{_bindir}/dune runtest test/unit-tests -%endif +# Generate %%files lists +%ocaml_files -s %files %license LICENSE.md -%doc %{_pkgdocdir}/README.md -%doc %{_pkgdocdir}/CHANGES.md -%doc %{_pkgdocdir}/MIGRATION.md +%doc CHANGES.md README.md %{_bindir}/dune %{_mandir}/man*/dune* -%dir %{_pkgdocdir}/ -%dir %{_libdir}/ocaml/dune/ -%dir %{_libdir}/ocaml/dune-action-plugin/ -%dir %{_libdir}/ocaml/dune-build-info/ -%dir %{_libdir}/ocaml/dune-configurator/ -%dir %{_libdir}/ocaml/dune-glob/ -%dir %{_libdir}/ocaml/dune-private-libs/ -%dir %{_libdir}/ocaml/dune-private-libs/dune-lang/ -%dir %{_libdir}/ocaml/dune-private-libs/dune_re/ -%dir %{_libdir}/ocaml/dune-private-libs/ocaml-config/ -%dir %{_libdir}/ocaml/dune-private-libs/stdune/ -%dir %{_libdir}/ocaml/dune-site/ -%dir %{_libdir}/ocaml/dune-site/plugins/ -%{_libdir}/ocaml/dune*/META -%{_libdir}/ocaml/dune*/*.cma -%{_libdir}/ocaml/dune*/*.cmi -%{_libdir}/ocaml/dune-configurator/.private/ -%{_libdir}/ocaml/dune-private-libs/*/*.cma -%{_libdir}/ocaml/dune-private-libs/*/*.cmi -%{_libdir}/ocaml/dune-site/*/*.cma -%{_libdir}/ocaml/dune-site/*/*.cmi -%ifarch %{ocaml_native_compiler} -%{_libdir}/ocaml/dune*/*.cmxs -%{_libdir}/ocaml/dune-private-libs/*/*.cmxs -%{_libdir}/ocaml/dune-site/*/*.cmxs -%{_libdir}/ocaml/stublibs/dllstdune_stubs.so -%{_libdir}/ocaml/stublibs/dlldune_filesystem_stubs_stubs.so -%endif - -%files devel -%{_libdir}/ocaml/dune*/dune-package -%{_libdir}/ocaml/dune*/opam -%{_libdir}/ocaml/dune*/*.cmt -%{_libdir}/ocaml/dune*/*.cmti -%{_libdir}/ocaml/dune*/*.ml -%{_libdir}/ocaml/dune*/*.mli -%{_libdir}/ocaml/dune-private-libs/*/*.cmt -%{_libdir}/ocaml/dune-private-libs/*/*.cmti -%{_libdir}/ocaml/dune-private-libs/*/*.ml -%{_libdir}/ocaml/dune-private-libs/*/*.mli -%{_libdir}/ocaml/dune-site/*/*.cmt -%{_libdir}/ocaml/dune-site/*/*.cmti -%{_libdir}/ocaml/dune-site/*/*.ml -%{_libdir}/ocaml/dune-site/*/*.mli -%ifarch %{ocaml_native_compiler} -%{_libdir}/ocaml/dune*/*.a -%{_libdir}/ocaml/dune*/*.cmx -%{_libdir}/ocaml/dune*/*.cmxa -%{_libdir}/ocaml/dune-private-libs/*/*.a -%{_libdir}/ocaml/dune-private-libs/*/*.cmx -%{_libdir}/ocaml/dune-private-libs/*/*.cmxa -%{_libdir}/ocaml/dune-site/*/*.a -%{_libdir}/ocaml/dune-site/*/*.cmx -%{_libdir}/ocaml/dune-site/*/*.cmxa -%endif +%if %{with docs} %files doc -%exclude %{_pkgdocdir}/README.md -%exclude %{_pkgdocdir}/CHANGES.md -%doc %{_pkgdocdir}/* +%doc doc/_build/* +%endif %files emacs %{_emacs_sitelispdir}/dune* +%files action-plugin -f .ofiles-dune-action-plugin + +%files action-plugin-devel -f .ofiles-dune-action-plugin-devel + +%files build-info -f .ofiles-dune-build-info + +%files build-info-devel -f .ofiles-dune-build-info-devel + +%files configurator -f .ofiles-dune-configurator +%dir %{ocamldir}/dune/ +%{ocamldir}/dune/META + +%files configurator-devel -f .ofiles-dune-configurator-devel +%{ocamldir}/dune/dune-package +%{ocamldir}/dune/opam + +%files glob -f .ofiles-dune-glob + +%files glob-devel -f .ofiles-dune-glob-devel + +%files private-libs -f .ofiles-dune-private-libs + +%files private-libs-devel -f .ofiles-dune-private-libs-devel + +%files rpc -f .ofiles-dune-rpc + +%files rpc-devel -f .ofiles-dune-rpc-devel + +%if %{with lwt} +%files rpc-lwt -f .ofiles-dune-rpc-lwt + +%files rpc-lwt-devel -f .ofiles-dune-rpc-lwt-devel +%endif + +%files site -f .ofiles-dune-site + +%files site-devel -f .ofiles-dune-site-devel + +%files -n ocaml-chrome-trace -f .ofiles-chrome-trace + +%files -n ocaml-chrome-trace-devel -f .ofiles-chrome-trace-devel + +%files -n ocaml-dyn -f .ofiles-dyn + +%files -n ocaml-dyn-devel -f .ofiles-dyn-devel + +%files -n ocaml-ocamlc-loc -f .ofiles-ocamlc-loc + +%files -n ocaml-ocamlc-loc-devel -f .ofiles-ocamlc-loc-devel + +%files -n ocaml-ordering -f .ofiles-ordering + +%files -n ocaml-ordering-devel -f .ofiles-ordering-devel + +%files -n ocaml-stdune -f .ofiles-stdune + +%files -n ocaml-stdune-devel -f .ofiles-stdune-devel + +%files -n ocaml-xdg -f .ofiles-xdg + +%files -n ocaml-xdg-devel -f .ofiles-xdg-devel + %changelog +* Mon Oct 13 2025 Richard W.M. Jones - 3.20.2-2 +- OCaml 5.4.0 rebuild + +* Tue Sep 16 2025 Jerry James - 3.20.2-1 +- Version 3.20.2 + +* Mon Aug 25 2025 Jerry James - 3.20.1-1 +- Version 3.20.1 + +* Fri Aug 22 2025 Jerry James - 3.20.0-1 +- Version 3.20.0 + +* Wed Jul 23 2025 Jerry James - 3.19.1-2 +- Migrate tests from STI to TMT (rhbz#2382985) + +* Wed Jun 11 2025 Jerry James - 3.19.1-1 +- Version 3.19.1 + +* Fri May 23 2025 Jerry James - 3.19.0-1 +- Version 3.19.0 + +* Fri May 02 2025 Jerry James - 3.18.2-1 +- Version 3.18.2 + +* Fri Apr 18 2025 Jerry James - 3.18.1-1 +- Version 3.18.1 + +* Thu Apr 3 2025 Jerry James - 3.18.0-1 +- Version 3.18.0 + +* Thu Jan 23 2025 Jerry James - 3.17.2-1 +- Version 3.17.2 + +* Fri Jan 17 2025 Fedora Release Engineering - 3.17.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Dec 26 2024 Jerry James - 3.17.1-1 +- Version 3.17.1 +- Update License field for changes in vendored dependencies +- Drop upstreamed furo theme patch + +* Thu Oct 31 2024 Jerry James - 3.16.1-1 +- Version 3.16.1 + +* Thu Oct 10 2024 Charalampos Stratakis - 3.16.0-5 +- Use the furo theme for docs build + +* Tue Oct 08 2024 Richard W.M. Jones - 3.16.0-4 +- Rebuild for ocaml-lwt 5.8.0 + +* Thu Jul 18 2024 Fedora Release Engineering - 3.16.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Jun 19 2024 Richard W.M. Jones - 3.16.0-2 +- OCaml 5.2.0 ppc64le fix + +* Mon Jun 17 2024 Jerry James - 3.16.0-1 +- Version 3.16.0 + +* Wed May 29 2024 Richard W.M. Jones - 3.15.3-2 +- OCaml 5.2.0 for Fedora 41 + +* Mon May 27 2024 Jerry James - 3.15.3-1 +- Version 3.15.3 + +* Wed May 15 2024 Richard W.M. Jones - 3.15.2-2 +- Use bundled ocaml-csexp and ocaml-pp (RHEL only) + +* Wed Apr 24 2024 Jerry James - 3.15.2-1 +- Version 3.15.2 + +* Thu Apr 18 2024 Jerry James - 3.15.1-1 +- Version 3.15.1 + +* Mon Apr 08 2024 Yaakov Selkowitz - 3.15.0-2 +- Disable docs in RHEL builds + +* Fri Apr 5 2024 Jerry James - 3.15.0-1 +- Version 3.15.0 + +* Thu Mar 14 2024 Jerry James - 3.14.2-1 +- Version 3.14.2 + +* Wed Feb 14 2024 Jerry James - 3.14.0-1 +- Version 3.14.0 + +* Tue Feb 6 2024 Jerry James - 3.13.1-1 +- Version 3.13.1 + +* Fri Feb 2 2024 Jerry James - 3.13.0-3 +- Rebuild for changed ocamlx(Dynlink) hash + +* Thu Jan 25 2024 Fedora Release Engineering - 3.13.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Jerry James - 3.13.0-1 +- Version 3.13.0 + +* Tue Jan 9 2024 Jerry James - 3.12.2-1 +- Version 3.12.2 + +* Mon Dec 18 2023 Richard W.M. Jones - 3.12.1-3 +- OCaml 5.1.1 + s390x code gen fix for Fedora 40 + +* Tue Dec 12 2023 Richard W.M. Jones - 3.12.1-2 +- OCaml 5.1.1 rebuild for Fedora 40 + +* Thu Nov 30 2023 Jerry James - 3.12.1-1 +- Version 3.12.1 + +* Mon Oct 9 2023 Jerry James - 3.11.1-1 +- Version 3.11.1 + +* Thu Oct 05 2023 Richard W.M. Jones - 3.11.0-3 +- Bump release and rebuild + +* Thu Oct 05 2023 Richard W.M. Jones - 3.11.0-2 +- OCaml 5.1 rebuild for Fedora 40 + +* Wed Oct 4 2023 Jerry James - 3.11.0-1 +- Version 3.11.0 + +* Tue Aug 1 2023 Jerry James - 3.10.0-1 +- Version 3.10.0 + +* Wed Jul 26 2023 Jerry James - 3.9.2-1 +- Version 3.9.2 + +* Thu Jul 20 2023 Fedora Release Engineering - 3.9.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 11 2023 Richard W.M. Jones - 3.9.1-3 +- OCaml 5.0 rebuild for Fedora 39 +- ExcludeArch i686 + +* Mon Jul 10 2023 Jerry James - 3.9.1-1 +- Version 3.9.1 + +* Fri Jun 9 2023 Jerry James - 3.8.1-1 +- Version 3.8.1 +- Add LGPL-2.1-or-later to License tag due to bundled 0install-solver + +* Tue Apr 4 2023 Jerry James - 3.7.1-1 +- Version 3.7.1 + +* Fri Mar 24 2023 Jerry James - 3.7.0-2 +- Rebuild for ocaml-csexp 1.5.2 + +* Tue Mar 21 2023 Jerry James - 3.7.0-1 +- Version 3.7.0 +- The fiber subpackage has been removed +- Add debuginfo patch to produce good debuginfo again + +* Tue Jan 24 2023 Richard W.M. Jones - 3.6.1-3 +- Rebuild OCaml packages for F38 + +* Thu Jan 19 2023 Fedora Release Engineering - 3.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Nov 25 2022 Jerry James - 3.6.1-1 +- Version 3.6.1 + +* Thu Nov 17 2022 Jerry James - 3.6.0-1 +- Version 3.6.0 +- Convert License tag to SPDX + +* Thu Oct 20 2022 Jerry James - 3.5.0-1 +- Version 3.5.0 + +* Fri Jul 22 2022 Fedora Release Engineering - 3.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jul 20 2022 Jerry James - 3.4.0-1 +- Version 3.4.0 + +* Tue Jul 5 2022 Jerry James - 3.3.1-1 +- Version 3.3.1 +- Expose the libraries individually +- Explain why we do not run the test suite +- Use new OCaml macros +- Various spec file cleanups + +* Sat Jun 18 2022 Richard W.M. Jones - 2.9.3-3 +- OCaml 4.14.0 rebuild + +* Fri Feb 04 2022 Richard W.M. Jones - 2.9.3-2 +- OCaml 4.13.1 rebuild to remove package notes + +* Thu Feb 3 2022 Jerry James - 2.9.3-1 +- Version 2.9.3 +- Note the bundling of ocaml-incremental-cycles + +* Wed Jan 26 2022 Richard W.M. Jones - 2.9.1-5 +- Rebuild to pick up new ocaml dependency + +* Thu Jan 20 2022 Fedora Release Engineering - 2.9.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Oct 04 2021 Richard W.M. Jones - 2.9.1-3 +- OCaml 4.13.1 build + +* Wed Sep 8 2021 Jerry James - 2.9.1-1 +- Version 2.9.1 + +* Tue Jul 27 2021 Richard W.M. Jones - 2.9.0-3 +- Rebuild for changed ocamlx(Dynlink) + +* Thu Jul 22 2021 Fedora Release Engineering - 2.9.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Sat Jul 17 2021 Jerry James - 2.9.0-1 +- Version 2.9.0 + +* Tue Mar 30 2021 Richard W.M. Jones - 2.8.5-2 +- Bump and rebuild for ELN. + +* Mon Mar 29 2021 Jerry James - 2.8.5-1 +- Version 2.8.5 + +* Mon Mar 8 2021 Jerry James - 2.8.4-1 +- Version 2.8.4 + +* Mon Mar 8 2021 Jerry James - 2.8.3-1 +- Version 2.8.3 + +* Mon Mar 1 10:09:48 GMT 2021 Richard W.M. Jones - 2.8.2-4 +- OCaml 4.12.0 build + * Mon Feb 1 2021 Richard W.M. Jones - 2.8.2-3 - Bump and rebuild for updated ocaml Dynlink dependency. diff --git a/plans.fmf b/plans.fmf new file mode 100644 index 0000000..9337313 --- /dev/null +++ b/plans.fmf @@ -0,0 +1,10 @@ +summary: Run all tests +discover: + how: fmf +execute: + how: tmt +prepare: + how: install + package: + - ocaml + - ocaml-dune diff --git a/sources b/sources index 04af384..828aee6 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (dune-2.8.2.tar.gz) = fcbe45ea59492517e0868bf1f801c2bd2f3b1b30234e36d789c33e7ee48bd724726beb211697f3820609bbc27923c8c37d7be89dcbd059558014743360f2d0b7 +SHA512 (dune-3.20.2.tar.gz) = efb4376e03a3e760ee230c22ba8ac788623382437d9e3551fdd6bacdca1c6aa2db90246feb011d3d0e7ba3afa47161ebd06c80cfb24e357a82f7764bf003e355 diff --git a/tests/basic-test.sh b/tests/basic-test.sh new file mode 100755 index 0000000..a15afdf --- /dev/null +++ b/tests/basic-test.sh @@ -0,0 +1,6 @@ +#!/bin/bash - +set -e +set -x + +# Just check that dune works. +dune --version diff --git a/tests/main.fmf b/tests/main.fmf new file mode 100644 index 0000000..a5f5b31 --- /dev/null +++ b/tests/main.fmf @@ -0,0 +1,2 @@ +summary: Basic test +test: ./basic-test.sh