diff --git a/.gitignore b/.gitignore index 9bcf330..8fe92f1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ ocaml-gettext-0.3.3.tar.gz /ocaml-gettext-0.3.8-3aecf8e5350f.tar.gz /v0.4.1.tar.gz /v0.4.2.tar.gz +/v0.5.0.tar.gz diff --git a/0001-xgettext-Fix-type-for-OCaml-5.4.patch b/0001-xgettext-Fix-type-for-OCaml-5.4.patch new file mode 100644 index 0000000..dd3f5ee --- /dev/null +++ b/0001-xgettext-Fix-type-for-OCaml-5.4.patch @@ -0,0 +1,27 @@ +From 5d521981e39dcaeada6bbe7b15c5432d6de5d33c Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 15 Oct 2025 09:24:18 +0100 +Subject: [PATCH] xgettext: Fix type for OCaml 5.4 + +Fixes: https://github.com/gildor478/ocaml-gettext/issues/40 +Signed-off-by: Richard W.M. Jones +--- + src/bin/ocaml-xgettext/xgettext.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bin/ocaml-xgettext/xgettext.ml b/src/bin/ocaml-xgettext/xgettext.ml +index 8f54efc..aa12aed 100644 +--- a/src/bin/ocaml-xgettext/xgettext.ml ++++ b/src/bin/ocaml-xgettext/xgettext.ml +@@ -112,7 +112,7 @@ let rec is_like lid = function + | [] -> false + | func :: functions -> ( + match lid with +- | (Lident f | Ldot (_, f)) when f = func -> true ++ | (Lident f | Ldot (_, {txt = f; _})) when f = func -> true + | _ -> is_like lid functions ) + + let visit_expr (iterator : Ast_iterator.iterator) expr = +-- +2.50.1 + diff --git a/37.patch b/37.patch new file mode 100644 index 0000000..2616f40 --- /dev/null +++ b/37.patch @@ -0,0 +1,160 @@ +From 5462396bee53cb13d8d6fde4c6d430412a17b64d Mon Sep 17 00:00:00 2001 +From: Stephane Glondu +Date: Thu, 3 Apr 2025 09:52:20 +0200 +Subject: [PATCH] Do not use dune sites + +Using dune-site forces use of dune in all reverse-dependencies: + + https://github.com/gildor478/ocaml-gettext/issues/36 + +The use here is to add an ocaml-gettext-specific directory to the +default MO search path. Remove this directory altogether. (This may +break reverse dependencies.) +--- + dune-project | 2 -- + gettext-camomile.opam | 2 -- + gettext-stub.opam | 2 -- + gettext.opam | 3 --- + src/lib/gettext/base/.keep-directory | 1 - + src/lib/gettext/base/dune | 13 +------------ + src/lib/gettext/base/gettextConfig.ml | 9 +-------- + 7 files changed, 2 insertions(+), 30 deletions(-) + delete mode 100644 src/lib/gettext/base/.keep-directory + +diff --git a/dune-project b/dune-project +index 2ee85d7..ef2b58e 100644 +--- a/dune-project ++++ b/dune-project +@@ -2,7 +2,6 @@ + (name gettext) + + (explicit_js_mode) +-(using dune_site 0.1) + (generate_opam_files) + + (source (github gildor478/ocaml-gettext)) +@@ -25,7 +24,6 @@ + "\| + ) + (depends +- dune-site + (ocaml (>= "4.14.0")) + (cppo (and (>= 1.8.0) :build)) + (seq (and (>= "base") :with-test)) +diff --git a/gettext-camomile.opam b/gettext-camomile.opam +index 1fde721..05c96d1 100644 +--- a/gettext-camomile.opam ++++ b/gettext-camomile.opam +@@ -25,11 +25,9 @@ build: [ + name + "-j" + jobs +- "--promote-install-files=false" + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +- ["dune" "install" "-p" name "--create-install-files" name] + ] + dev-repo: "git+https://github.com/gildor478/ocaml-gettext.git" +diff --git a/gettext-stub.opam b/gettext-stub.opam +index 2463a70..980a584 100644 +--- a/gettext-stub.opam ++++ b/gettext-stub.opam +@@ -24,12 +24,10 @@ build: [ + name + "-j" + jobs +- "--promote-install-files=false" + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +- ["dune" "install" "-p" name "--create-install-files" name] + ] + dev-repo: "git+https://github.com/gildor478/ocaml-gettext.git" + depexts: [ +diff --git a/gettext.opam b/gettext.opam +index 50a0933..d2f6490 100644 +--- a/gettext.opam ++++ b/gettext.opam +@@ -19,7 +19,6 @@ doc: "https://gildor478.github.io/ocaml-gettext/" + bug-reports: "https://github.com/gildor478/ocaml-gettext/issues" + depends: [ + "dune" {>= "3.17"} +- "dune-site" + "ocaml" {>= "4.14.0"} + "cppo" {>= "1.8.0" & build} + "seq" {>= "base" & with-test} +@@ -36,11 +35,9 @@ build: [ + name + "-j" + jobs +- "--promote-install-files=false" + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +- ["dune" "install" "-p" name "--create-install-files" name] + ] + dev-repo: "git+https://github.com/gildor478/ocaml-gettext.git" +diff --git a/src/lib/gettext/base/.keep-directory b/src/lib/gettext/base/.keep-directory +deleted file mode 100644 +index f1eab5f..0000000 +--- a/src/lib/gettext/base/.keep-directory ++++ /dev/null +@@ -1 +0,0 @@ +-# This directory contains MO files. +diff --git a/src/lib/gettext/base/dune b/src/lib/gettext/base/dune +index 2eae0c5..7b98bb7 100644 +--- a/src/lib/gettext/base/dune ++++ b/src/lib/gettext/base/dune +@@ -4,17 +4,6 @@ + (ocamlyacc + (modules gettextFormat_parser gettextMo_parser)) + +-(generate_sites_module +- (module gettextConfigDune) +- (sites gettext)) +- +-(install +- (package gettext) +- (section +- (site +- (gettext locale))) +- (files .keep-directory)) +- + (rule + (target gettextConfigGen.ml) + (action +@@ -33,4 +22,4 @@ + GettextMo_int32 + GettextMo_lexer + GettextMo_parser) +- (libraries dune-site fileutils)) ++ (libraries fileutils)) +diff --git a/src/lib/gettext/base/gettextConfig.ml b/src/lib/gettext/base/gettextConfig.ml +index 9d5d986..fe8963b 100644 +--- a/src/lib/gettext/base/gettextConfig.ml ++++ b/src/lib/gettext/base/gettextConfig.ml +@@ -23,19 +23,12 @@ + let default_dir = GettextConfigGen.default_localedir + + let default_path () = +- let dunepath = +- match GettextConfigDune.Sites.locale with +- | [ path ] -> [ path ] +- | [] -> [] +- | _ -> assert false +- in + let envpath = + match Sys.getenv "OCAML_LOCALEPATH" with + | s -> String.split_on_char ':' s + | exception Not_found -> [] + in +- envpath @ dunepath +- @ [ GettextConfigGen.localedir; GettextConfigGen.default_localedir ] ++ envpath @ [ GettextConfigGen.localedir; GettextConfigGen.default_localedir ] + + let default_codeset = "" + 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-gettext.spec b/ocaml-gettext.spec index 595810d..5a2eca2 100644 --- a/ocaml-gettext.spec +++ b/ocaml-gettext.spec @@ -1,53 +1,61 @@ -%undefine _package_note_flags -%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) +# OCaml packages not built on i686 since OCaml 5 / Fedora 39. +ExcludeArch: %{ix86} # Optionally disable camomile dep on RHEL. %if !0%{?rhel} %bcond_without camomile +%bcond_without tests %else %bcond_with camomile +%bcond_with tests %endif Name: ocaml-gettext -Version: 0.4.2 -Release: 11%{?dist} +Version: 0.5.0 +Release: 7%{?dist} Summary: OCaml library for i18n -License: LGPLv2+ with exceptions +License: LGPL-2.1-or-later with OCaml-LGPL-linking-exception URL: https://github.com/gildor478/ocaml-gettext +VCS: git:%{url}.git -Source0: https://github.com/gildor478/%{name}/archive/v%{version}.tar.gz +Source0: %{url}/archive/v%{version}.tar.gz -BuildRequires: make -BuildRequires: ocaml >= 4.00.1 -BuildRequires: ocaml-findlib-devel >= 1.3.3-3 -BuildRequires: ocaml-compiler-libs -BuildRequires: ocaml-ocamldoc -BuildRequires: ocaml-fileutils-devel >= 0.4.4-4 -BuildRequires: ocaml-dune-devel +# Fix to stop using dune-site +# https://github.com/gildor478/ocaml-gettext/issues/36 +# https://github.com/gildor478/ocaml-gettext/pull/37 +Patch: https://github.com/gildor478/ocaml-gettext/pull/37.patch + +# Fix for OCaml >= 5.4 +# https://github.com/gildor478/ocaml-gettext/issues/40 +# https://github.com/gildor478/ocaml-gettext/pull/41 +Patch: 0001-xgettext-Fix-type-for-OCaml-5.4.patch + +BuildRequires: ocaml >= 4.03.0 +BuildRequires: ocaml-fileutils-devel >= 0.6.6-1 +BuildRequires: ocaml-dune >= 1.11.0 +BuildRequires: ocaml-dune-configurator-devel BuildRequires: ocaml-cppo +# This was orphaned and dropped from Fedora back in 2023, but may be +# needed to run the tests. +# https://github.com/gildor478/ocaml-gettext/issues/35 +#BuildRequires: ocaml-seq-devel BuildRequires: docbook-style-xsl BuildRequires: libxslt BuildRequires: libxml2 -BuildRequires: chrpath -BuildRequires: autoconf -%if !0%{?rhel} +%if %{with tests} BuildRequires: ocaml-ounit-devel %endif %if %{with camomile} BuildRequires: ocaml-camomile-devel >= 0.8.6-3 BuildRequires: ocaml-camomile-data %endif -BuildRequires: autoconf, automake %if %{with camomile} # ocaml-gettext program needs camomile data files Requires: ocaml-camomile-data %endif -%global __ocaml_requires_opts -i Asttypes -i Parsetree -%global __ocaml_provides_opts -i Pr_gettext - %description Ocaml-gettext provides support for internationalization of Ocaml @@ -63,10 +71,8 @@ Constraints : %package devel Summary: Development files for %{name} -Requires: %{name} = %{version}-%{release} - -# BZ 446919. -Requires: ocaml-fileutils-devel >= 0.4.0 +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: ocaml-fileutils-devel%{?_isa} >= 0.6.6 %description devel @@ -77,7 +83,7 @@ developing applications that use %{name}. %if %{with camomile} %package camomile Summary: Parts of %{name} which depend on Camomile -Requires: %{name} = %{version}-%{release} +Requires: %{name}%{?_isa} = %{version}-%{release} %description camomile @@ -87,8 +93,9 @@ depend on Camomile. %package camomile-devel Summary: Development files for %{name}-camomile -Requires: %{name}-devel = %{version}-%{release} -Requires: %{name}-camomile = %{version}-%{release} +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-camomile%{?_isa} = %{version}-%{release} +Requires: ocaml-camomile-devel%{?_isa} %description camomile-devel @@ -99,79 +106,45 @@ signature files for developing applications that use %prep -%setup -q -n %{name}-%{version} -%autopatch -p1 +%autosetup -p1 -# Remove dependency on batteries. -sed -i -e 's/batteries//' test/dune -sed -i -e 's/batteries//' test/test-stub/dune +# Remove ocaml-seq dependency. See note above. +sed -i 's/ seq / /' test/dune %if %{without camomile} # Remove dependency on camomile. +rm -f gettext-camomile.opam rm -r src/lib/gettext-camomile rm -r test/test-camomile sed -i -e 's/camomile//' `find -name dune` +awk -i inplace -v RS='^\\(package' -v ORS= \ + '{while(sub(/\(package\n *\(name gettext-camomile\).*\)\)\)\)/,""));} {print}' dune-project %endif %build -make build - - -#check -# Tests require batteries, so they are disabled at present. -# Under discussion with upstream. +%dune_build %install -mkdir -p $RPM_BUILD_ROOT%{_libdir}/ocaml -mkdir -p $RPM_BUILD_ROOT%{_bindir} -dune install --destdir=$RPM_BUILD_ROOT +%dune_install -s +sed -i '\@%{_bindir}@d;\@%{_mandir}@d' .ofiles-gettext +cat .ofiles-gettext-stub >> .ofiles-gettext +cat .ofiles-gettext-stub-devel >> .ofiles-gettext-devel -# Remove this, we will use our own rules for documentation. -rm -rf $RPM_BUILD_ROOT/usr/doc -%if %{without camomile} -# If you use --without camomile but happen to have the camomile -# packages installed then it will still build them. -rm -rf $RPM_BUILD_ROOT/%{_libdir}/ocaml/gettext-camomile +%if %{with tests} +%check +%dune_check %endif -%files -%doc LICENSE.txt -%{_libdir}/ocaml/gettext -%{_libdir}/ocaml/gettext-stub -%if %opt -%exclude %{_libdir}/ocaml/gettext/*.cmxa -%exclude %{_libdir}/ocaml/gettext/*/*.a -%exclude %{_libdir}/ocaml/gettext/*/*.cmxa -%exclude %{_libdir}/ocaml/gettext/*/*.cmx -%exclude %{_libdir}/ocaml/gettext-stub/*.a -%exclude %{_libdir}/ocaml/gettext-stub/*.cmxa -%exclude %{_libdir}/ocaml/gettext-stub/*.cmx -%endif -%exclude %{_libdir}/ocaml/gettext/*/*.ml -%exclude %{_libdir}/ocaml/gettext/*/*.mli -%exclude %{_libdir}/ocaml/gettext-stub/*.ml -%{_libdir}/ocaml/stublibs/*.so +%files -f .ofiles-gettext +%license LICENSE.txt -%files devel +%files devel -f .ofiles-gettext-devel %doc README.md CHANGES.md THANKS TODO.md -# %doc build/share/doc/html/* -%if %opt -%{_libdir}/ocaml/gettext/*.cmxa -%{_libdir}/ocaml/gettext/*/*.a -%{_libdir}/ocaml/gettext/*/*.cmxa -%{_libdir}/ocaml/gettext/*/*.cmx -%{_libdir}/ocaml/gettext-stub/*.a -%{_libdir}/ocaml/gettext-stub/*.cmxa -%{_libdir}/ocaml/gettext-stub/*.cmx -%endif -%{_libdir}/ocaml/gettext/*/*.ml -%{_libdir}/ocaml/gettext/*/*.mli -%{_libdir}/ocaml/gettext-stub/*.ml %{_bindir}/ocaml-gettext %{_bindir}/ocaml-xgettext %{_mandir}/man1/ocaml-gettext.1* @@ -180,29 +153,85 @@ rm -rf $RPM_BUILD_ROOT/%{_libdir}/ocaml/gettext-camomile %if %{with camomile} -%files camomile -%doc LICENSE.txt -%{_libdir}/ocaml/gettext-camomile -%if %opt -%exclude %{_libdir}/ocaml/gettext-camomile/*.a -%exclude %{_libdir}/ocaml/gettext-camomile/*.cmxa -%exclude %{_libdir}/ocaml/gettext-camomile/*.cmx -%endif -%exclude %{_libdir}/ocaml/gettext-camomile/*.mli +%files camomile -f .ofiles-gettext-camomile +%license LICENSE.txt -%files camomile-devel +%files camomile-devel -f .ofiles-gettext-camomile-devel %doc README.md -%if %opt -%{_libdir}/ocaml/gettext-camomile/*.a -%{_libdir}/ocaml/gettext-camomile/*.cmxa -%{_libdir}/ocaml/gettext-camomile/*.cmx -%endif -%{_libdir}/ocaml/gettext-camomile/*.mli %endif %changelog +* Tue Oct 14 2025 Richard W.M. Jones - 0.5.0-7 +- OCaml 5.4.0 rebuild + +* Fri Aug 22 2025 Jerry James - 0.5.0-6 +- Rebuild for ocaml-dune 3.20.0 + +* Thu Jul 24 2025 Fedora Release Engineering - 0.5.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sat Jul 12 2025 Jerry James - 0.5.0-4 +- Rebuild to fix OCaml dependencies + +* Thu Apr 03 2025 Richard W.M. Jones - 0.5.0-3 +- Remove use of dune-site + +* Thu Feb 27 2025 Richard W.M. Jones - 0.5.0-2 +- Add dependency from devel to ocaml-dune-site-devel. + https://src.fedoraproject.org/rpms/ocaml-gettext/pull-request/3#comment-249424 + +* Wed Feb 26 2025 Richard W.M. Jones - 0.5.0-1 +- New version 0.5.0 +- New dependency ocaml-dune-site-devel (copied from opam). +- Remove upstream patches. + +* Fri Jan 17 2025 Fedora Release Engineering - 0.4.2-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Fri Jan 10 2025 Jerry James - 0.4.2-23 +- OCaml 5.3.0 rebuild for Fedora 42 + +* Thu Jul 18 2024 Fedora Release Engineering - 0.4.2-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Jun 19 2024 Richard W.M. Jones - 0.4.2-21 +- OCaml 5.2.0 ppc64le fix + +* Wed May 29 2024 Richard W.M. Jones - 0.4.2-20 +- OCaml 5.2.0 for Fedora 41 + +* Wed May 8 2024 Jerry James - 0.4.2-19 +- Add patch to fix tests with OCaml 5.2.0 + +* Thu Jan 25 2024 Fedora Release Engineering - 0.4.2-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 0.4.2-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Dec 18 2023 Richard W.M. Jones - 0.4.2-17 +- OCaml 5.1.1 + s390x code gen fix for Fedora 40 + +* Tue Dec 12 2023 Richard W.M. Jones - 0.4.2-16 +- OCaml 5.1.1 rebuild for Fedora 40 + +* Thu Oct 05 2023 Richard W.M. Jones - 0.4.2-15 +- OCaml 5.1 rebuild for Fedora 40 + +* Thu Jul 20 2023 Fedora Release Engineering - 0.4.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 11 2023 Richard W.M. Jones - 0.4.2-13 +- OCaml 5.0 rebuild for Fedora 39 + +* Mon Jul 10 2023 Jerry James - 0.4.2-12 +- OCaml 5.0.0 rebuild +- Convert License tag to SPDX +- Enable tests +- Use new dune macros + * Tue Jan 24 2023 Richard W.M. Jones - 0.4.2-11 - Rebuild OCaml packages for F38 diff --git a/sources b/sources index 7317e8d..85cd65b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (v0.4.2.tar.gz) = fb89be8d8d9e0ed9327b81a0c81c884ff3f1a97e46b475ef8084abded5c84a256de05d5aa0f42be94f43ab438276a4506af726b6950e4161359a9616fb5832ec +SHA512 (v0.5.0.tar.gz) = f55505bbe0da2a06053d94ee895a3e610a8d4ab5a2283ccff6a5a0c6a8ec011f5f286ab93e117cc340f55f056c7cdcb5752cc798e9d8e18fb5ab17f27f4a64c2 diff --git a/tests/basic-test.sh b/tests/basic-test.sh new file mode 100755 index 0000000..8fdac2a --- /dev/null +++ b/tests/basic-test.sh @@ -0,0 +1,19 @@ +#!/bin/bash - +set -e +set -x + +# Compile trivial gettext program. +cat < gettexttest.ml +module Gettext = Gettext.Program ( + struct + let textdomain = "test" + let codeset = None + let dir = None + let dependencies = [] + end +) (GettextStub.Native) ;; +open Gettext ;; +print_endline (s_ "Hello world") +EOF +ocamlfind ocamlopt -package gettext,gettext-stub gettexttest.ml -linkpkg -o gettexttest +./gettexttest diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100755 index 0000000..eea186d --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,13 @@ +- hosts: localhost + roles: + - role: standard-test-basic + tags: + - classic + required_packages: + - ocaml + - ocaml-findlib + - ocaml-gettext-devel + tests: + - simple: + dir: . + run: ./basic-test.sh