diff --git a/_multibuild b/_multibuild
new file mode 100644
index 0000000..964176c
--- /dev/null
+++ b/_multibuild
@@ -0,0 +1,3 @@
+
+ testsuite
+
diff --git a/_service b/_service
index b8d7e61..a1daa64 100644
--- a/_service
+++ b/_service
@@ -1,11 +1,10 @@
- https://github.com/anuragsoni/calendar.git
- git
- 2.04
-
- pervasives-deprecated-408
ocaml-calendar
+ 7f7ba9196f6018c8365ac5c6ef4a60891c4da761
+ git
+ https://github.com/ocaml-community/calendar.git
+ 2.04
*.tar
diff --git a/ocaml-calendar-2.04.tar.xz b/ocaml-calendar-2.04.tar.xz
index b37d7ca..63ed62c 100644
--- a/ocaml-calendar-2.04.tar.xz
+++ b/ocaml-calendar-2.04.tar.xz
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:48db0ea40ae83fca502435f71eb2276e9c21e945e18bb697e5b84578ef31cae6
-size 76496
+oid sha256:b246712e6d024a5a1e1103c9d74ff498cf28d57b284292526e5dfabddec94905
+size 78452
diff --git a/ocaml-calendar.changes b/ocaml-calendar.changes
index 953bd1d..3e94dab 100644
--- a/ocaml-calendar.changes
+++ b/ocaml-calendar.changes
@@ -1,3 +1,8 @@
+-------------------------------------------------------------------
+Thu Jan 21 21:21:21 UTC 2021 - ohering@suse.de
+
+- use release revision and ocaml-calendar.patch
+
-------------------------------------------------------------------
Thu Feb 20 20:20:20 UTC 2020 - ohering@suse.de
diff --git a/ocaml-calendar.patch b/ocaml-calendar.patch
new file mode 100644
index 0000000..6b1c7b7
--- /dev/null
+++ b/ocaml-calendar.patch
@@ -0,0 +1,232 @@
+--- /dev/null
++++ b/calendar.opam
+@@ -0,0 +1,25 @@
++opam-version: "2.0"
++version: "dev"
++author: "Julien Signoles"
++maintainer: "ocaml-community"
++license: "LGPL-2.1 with OCaml linking exception"
++synopsis: "Library for handling dates and times in your program"
++build: [
++ ["dune" "build" "-p" name]
++ ["dune" "build" "@doc" "-p" name] {with-doc}
++ ["dune" "runtest" "-p" name] {with-test}
++]
++depends: [
++ "re"
++ "dune" {build}
++ "odoc" {with-doc}
++ "alcotest" {with-test}
++]
++tags: [ "calendar" "date" "time" "datetime" ]
++homepage: "https://github.com/ocaml-community/calendar"
++doc: "https://ocaml-community.github.io/calendar/"
++bug-reports: "https://github.com/ocaml-community/calendar/issues"
++dev-repo: "git+https://github.com/ocaml-community/calendar"
++description:"""
++Calendar is a library for handling dates and times in your program.
++"""
+--- /dev/null
++++ b/dune-project
+@@ -0,0 +1 @@
++(lang dune 1.0)
+--- a/src/date.ml
++++ b/src/date.ml
+@@ -70,7 +70,7 @@ let hash = Utils.Int.hash
+ (* Constructors. *)
+
+ let lt (d1 : int * int * int) (d2 : int * int * int) =
+- Pervasives.compare d1 d2 < 0
++ Stdlib.compare d1 d2 < 0
+
+ (* [date_ok] returns [true] is the date belongs to the Julian period;
+ [false] otherwise. *)
+@@ -249,10 +249,10 @@ module Period = struct
+ let sub x y = { m = x.m - y.m; d = x.d - y.d }
+ let opp x = { m = - x.m; d = - x.d }
+
+- (* exactly equivalent to [Pervasives.compare] but more flexible typing *)
++ (* exactly equivalent to [Stdlib.compare] but more flexible typing *)
+ let compare x y =
+- let n = Pervasives.compare x.m y.m in
+- if n = 0 then Pervasives.compare x.d y.d else n
++ let n = Stdlib.compare x.m y.m in
++ if n = 0 then Stdlib.compare x.d y.d else n
+ let equal x y = compare x y = 0
+ let hash = Hashtbl.hash
+
+@@ -337,7 +337,7 @@ let weeks_in_year y =
+ | _ -> 52
+
+ let week_first_last w y =
+- let d = make y 1 1 in
++ let d = make y 1 4 in (* January 4th must be in the first week (ISO 8601) *)
+ let d = d - d mod 7 in
+ let b = d + 7 * (w - 1) in
+ b, 6 + b
+--- /dev/null
++++ b/src/dune
+@@ -0,0 +1,16 @@
++(library
++ (name calendarLib)
++ (public_name calendar)
++ (libraries re unix)
++ (modules_without_implementation calendar_sig date_sig period time_sig)
++ (flags :standard -warn-error -32 -safe-string))
++
++(rule
++ (targets version.ml)
++ (action
++ (with-stdout-to %{targets}
++ (progn
++ (echo "let version = String.trim \"" %{version:calendar} "\"\n")
++ (echo "let date = String.trim \"")
++ (echo "\"\n")))))
++
+--- a/src/printer.ml
++++ b/src/printer.ml
+@@ -121,7 +121,7 @@ let gen_day_of_name f fmt name =
+ let day_of_name = gen_day_of_name name_of_day "%a"
+ let day_of_short_name = gen_day_of_name short_name_of_day "%A"
+
+-let word_regexp = ref (Str.regexp "[a-zA-Z]+")
++let word_regexp = ref (Re.Str.regexp "[a-zA-Z]+")
+
+ let set_word_regexp r = word_regexp := r
+
+@@ -181,7 +181,7 @@ struct
+ let print_int pad k n = print_number fmt pad k (Lazy.force n) in
+ let print_string pad s =
+ let pad s = match pad with
+- | Uppercase -> String.uppercase s
++ | Uppercase -> String.uppercase_ascii s
+ | Empty | Zero | Blank -> s
+ in
+ Format.pp_print_string fmt (pad (Lazy.force s))
+@@ -236,7 +236,7 @@ struct
+ | 'n' -> print_char '\n'
+ | 'p' -> print_string pad apm
+ | 'P' ->
+- Format.pp_print_string fmt (String.lowercase (Lazy.force apm))
++ Format.pp_print_string fmt (String.lowercase_ascii (Lazy.force apm))
+ | 'r' ->
+ print_time pad shour;
+ print_char ' ';
+@@ -259,10 +259,10 @@ struct
+ print_number fmt Zero 10 0
+ | ':' ->
+ let idx =
+- try Str.search_forward (Str.regexp "z\\|:z\\|::z") f (i+1)
++ try Re.Str.search_forward (Re.Str.regexp "z\\|:z\\|::z") f (i+1)
+ with Not_found -> bad_format f
+ in
+- let next = Str.matched_string f in
++ let next = Re.Str.matched_string f in
+ if idx <> i+1 then bad_format f;
+ if Lazy.force tz >= 0 then print_char '+';
+ print_int pad 10 tz;
+@@ -352,15 +352,15 @@ struct
+ in
+ let read_word ?(regexp=(!word_regexp)) () =
+ let jn =
+- try Str.search_forward regexp s !j with Not_found -> not_match f s
++ try Re.Str.search_forward regexp s !j with Not_found -> not_match f s
+ in
+ if jn <> !j then not_match f s;
+- let w = Str.matched_string s in
++ let w = Re.Str.matched_string s in
+ j := jn + String.length w;
+ w
+ in
+ let read_float =
+- let regexp = Str.regexp "[0-9][0-9]\\(\\.[0-9]*\\)?" in
++ let regexp = Re.Str.regexp "[0-9][0-9]\\(\\.[0-9]*\\)?" in
+ fun () ->
+ try float_of_string (read_word ~regexp ())
+ with Failure _ -> not_match f s
+@@ -390,7 +390,7 @@ struct
+ let parse_y () = year := read_number 2 + 1900 in
+ let parse_Y () = year := read_number 4 in
+ let parse_tz () =
+- let sign = match read_word ~regexp:(Str.regexp "[\\+-]") () with
++ let sign = match read_word ~regexp:(Re.Str.regexp "[\\+-]") () with
+ | "+" -> -1
+ | "-" -> 1
+ | _ -> assert false
+--- a/src/printer.mli
++++ b/src/printer.mli
+@@ -125,7 +125,7 @@ val short_name_of_month : Date.month ->
+ [name_of_month d].
+ Used by the specifier [%b]. *)
+
+-val set_word_regexp: Str.regexp -> unit
++val set_word_regexp: Re.Str.regexp -> unit
+ (** Set the regular expression used to recognize words in
+ [from_fstring]. Default is [[a-zA-Z]*].
+ @since 1.10 *)
+--- a/src/time_Zone.ml
++++ b/src/time_Zone.ml
+@@ -44,7 +44,6 @@ let gap_gmt_local =
+ let current () = !tz
+
+ let change = function
+- | UTC_Plus x when out_of_bounds x -> invalid_arg "Not a valid time zone"
+ | _ as t -> tz := t
+
+ let gap t1 t2 =
+--- a/src/utils.ml
++++ b/src/utils.ml
+@@ -29,8 +29,8 @@ end
+
+ module Int = struct
+ type t = int
+- let equal = Pervasives.(=)
+- let compare = Pervasives.compare
++ let equal = Stdlib.(=)
++ let compare = Stdlib.compare
+ let hash = Hashtbl.hash
+ end
+
+@@ -38,7 +38,7 @@ module Float = struct
+
+ type t = float
+
+- let precision = ref 1e-3
++ let precision = ref 1e-8
+
+ let set_precision f = precision := f
+
+--- a/src/utils.mli
++++ b/src/utils.mli
+@@ -58,8 +58,8 @@ module Float: sig
+ val set_precision: float -> unit
+ (** Set the precision of [equal] and [compare] for float.
+ If the precision is [p], then the floats [x] and [y] are equal iff
+- [abs(x-y) < p]. By default, the precision is [1e-3] (that is one
+- millisecond if floats represents seconds). *)
++ [abs(x-y) < p]. By default, the precision is [1e-8] (that is 0.864
++ milliseconds if floats represent days). *)
+
+ val round: t -> int
+ (** Round a float to the nearest integer. *)
+--- /dev/null
++++ b/tests/dune
+@@ -0,0 +1,8 @@
++(executable
++ (name test)
++ (libraries calendar))
++
++(alias
++ (name runtest)
++ (deps test.exe)
++ (action (run ./test.exe -e)))
+--- a/tests/test_timezone.ml
++++ b/tests/test_timezone.ml
+@@ -29,6 +29,7 @@ open Time_Zone;;
+ include Gen_test;;
+ reset ();;
+
++change UTC;;
+ test (current () = UTC) "current () = UTC";;
+ change Local;;
+ test (current () = Local) "current () = Local";;
diff --git a/ocaml-calendar.spec b/ocaml-calendar.spec
index 6bdd533..0093015 100644
--- a/ocaml-calendar.spec
+++ b/ocaml-calendar.spec
@@ -1,7 +1,7 @@
#
# spec file for package ocaml-calendar
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,23 +16,34 @@
#
-%bcond_with ocaml_alcotest
-Name: ocaml-calendar
+%define build_flavor @BUILD_FLAVOR@%{nil}
+%if "%{build_flavor}" == "testsuite"
+%define nsuffix -testsuite
+%else
+%define nsuffix %{nil}
+%endif
+
+%define pkg ocaml-calendar
+Name: %{pkg}%{nsuffix}
Version: 2.04
Release: 0
%{?ocaml_preserve_bytecode}
Summary: Objective Caml library for managing dates and times
-License: LGPL-2.0
+License: LGPL-2.0-only
Group: Development/Languages/OCaml
-Url: https://github.com/ocaml-community/calendar
-Source0: %{name}-%{version}.tar.xz
+URL: https://opam.ocaml.org/packages/calendar
+Source0: %{pkg}-%{version}.tar.xz
+Patch0: ocaml-calendar.patch
BuildRequires: ocaml
BuildRequires: ocaml-dune
-BuildRequires: ocaml-rpm-macros >= 20200220
+BuildRequires: ocaml-rpm-macros >= 20210121
+%if 1
BuildRequires: ocamlfind(re)
BuildRequires: ocamlfind(unix)
-%if %{with ocaml_alcotest}
-BuildRequires: ocamlfind(alcotest)
+%endif
+
+%if "%{build_flavor}" == "testsuite"
+BuildRequires: ocamlfind(calendar)
%endif
%description
@@ -48,25 +59,33 @@ The %{name}-devel package contains libraries and signature files for
developing applications that use %{name}.
%prep
-%autosetup -p1
+%autosetup -p1 -n %{pkg}-%{version}
%build
-sed -i~ '/system date/d' src/dune
-diff -u "$_"~ "$_" && exit 1
dune_release_pkgs='calendar'
%ocaml_dune_setup
+%if "%{build_flavor}" == ""
%ocaml_dune_build
+%ocaml_dune_test
+%endif
%install
+%if "%{build_flavor}" == ""
%ocaml_dune_install
%ocaml_create_file_list
+%endif
+%if "%{build_flavor}" == "testsuite"
%check
dune_test_tolerate_fail='dune_test_tolerate_fail'
%ocaml_dune_test
+%endif
+%if "%{build_flavor}" == ""
%files -f %{name}.files
%files devel -f %{name}.files.devel
+%endif
+
%changelog