Compare commits
107 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cba5f7abbe | ||
|
|
b015f12145 | ||
|
|
5a8dd543c6 | ||
|
|
2e0cb1fe44 | ||
|
|
e3af15bd11 | ||
|
|
360b98ce78 | ||
|
|
ee9df08052 | ||
|
|
c129230259 | ||
|
|
aa50731ee3 | ||
|
|
ebbc5125da | ||
|
|
bc284a4d37 | ||
|
|
b9c837a453 | ||
|
|
5b0d3a3f5d | ||
|
|
9d17af02a5 | ||
|
|
5018fa7019 | ||
|
|
a7c6be2f53 | ||
|
|
0e1aab5f28 | ||
|
|
561453cd2d | ||
|
|
13ff7d0244 | ||
|
|
7f5edb92c0 | ||
|
|
f299c84c6d | ||
|
|
a3771460e1 | ||
|
|
2883f28bbd | ||
|
|
4f34985ad8 | ||
|
|
b40114b0c9 | ||
|
|
48b6d0088d | ||
|
|
ebbf4c122f | ||
|
|
2ec55e949b | ||
|
|
a8e366538a | ||
|
|
c37874e266 | ||
|
|
a433439c10 | ||
|
|
4a09b96d7b | ||
|
|
64f662b9c5 | ||
|
|
5ebc943f98 | ||
|
|
772b17b666 | ||
|
|
be2dfe04db | ||
|
|
cec11e3cd8 | ||
|
|
68671b2fe6 | ||
|
|
c5a44d336b | ||
|
|
c4c11c263c | ||
|
|
6fbb4db452 | ||
|
|
38e7f9a43c | ||
|
|
73c8e3d782 | ||
|
|
4bb2864cc2 | ||
|
|
3eca5f5ac7 | ||
|
|
37422916a0 | ||
|
|
b249a82b37 | ||
|
|
999a7e734e | ||
|
|
edfb35d875 | ||
|
|
95d7ecd59b | ||
|
|
129153b851 | ||
|
|
b8653f50ff | ||
|
|
2dec79cc2e | ||
|
|
06d6e508a6 | ||
|
|
709f14be77 | ||
|
|
1018e3aa3a | ||
|
|
cf41d3d77d | ||
|
|
493a29c315 | ||
|
|
713b423230 | ||
|
|
ae20e03421 | ||
|
|
9efe171b21 | ||
|
|
80474fcdea | ||
|
|
a2dcfff43b | ||
|
|
7eb82f0e55 | ||
|
|
a5fe6c6a38 | ||
|
|
9ed29bd6b2 | ||
|
|
db6ffb193e | ||
|
|
7c612a100b | ||
|
|
790c0c334b | ||
|
|
fc7aa1636a | ||
|
|
dc143d5bb6 | ||
|
|
39e6786df8 | ||
|
|
f986cb165c | ||
|
|
71ffd8d204 | ||
|
|
d999c1ca02 | ||
|
|
be199402b5 | ||
|
|
785927384b | ||
|
|
b59110214e | ||
|
|
45edde154b | ||
|
|
5028b94a94 | ||
|
|
3779563b6a | ||
|
|
c6050323b4 | ||
|
|
47619598e9 | ||
|
|
d9e51264fc | ||
|
|
54390d6011 | ||
|
|
ab47d2524d | ||
|
|
6dcdd9e9c2 | ||
|
|
2f37856e84 | ||
|
|
14856c2d7f | ||
|
|
643d094358 | ||
|
|
fe05d6a138 | ||
|
|
77bcef6197 | ||
|
|
a406cf88bb | ||
|
|
0cadb87d84 | ||
|
|
1da04a1857 | ||
|
|
1be91fb723 | ||
|
|
4a96e5f705 | ||
|
a95e2b445e |
|||
|
|
8f288a07f3 | ||
|
|
d3dd586fa4 | ||
|
|
148a5c2576 | ||
|
|
4729dd2ae1 | ||
|
|
0c1300311f | ||
|
|
05d5087a40 | ||
|
|
9bc0b70a71 | ||
|
|
42201e8fdf | ||
|
|
23c0207aac |
13 changed files with 1074 additions and 2244 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -4,3 +4,5 @@
|
|||
/ocaml-*.tar.gz
|
||||
/ocaml-*.tar.xz
|
||||
/ocaml-*-refman.pdf
|
||||
/4.11.0.tar.gz
|
||||
/4.13.1.tar.gz
|
||||
|
|
|
|||
|
|
@ -1,27 +1,25 @@
|
|||
From 358855aa61775b72a8cba0d107286df960b1380c Mon Sep 17 00:00:00 2001
|
||||
From 04e523e937625bf30d775681c11e00f6dc6fc00a Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 24 Jun 2014 10:00:15 +0100
|
||||
Subject: [PATCH 1/4] Don't add rpaths to libraries.
|
||||
Subject: [PATCH 1/2] Don't add rpaths to libraries.
|
||||
|
||||
---
|
||||
tools/Makefile | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
configure.ac | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/tools/Makefile b/tools/Makefile
|
||||
index 92d9e99e7..d0b635b06 100644
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -156,8 +156,8 @@ $(call byte_and_opt,ocamlmklib,ocamlmklibconfig.cmo config.cmo misc.cmo \
|
||||
ocamlmklibconfig.ml: ../config/Makefile Makefile
|
||||
(echo 'let bindir = "$(BINDIR)"'; \
|
||||
echo 'let supports_shared_libraries = $(SUPPORTS_SHARED_LIBRARIES)';\
|
||||
- echo 'let default_rpath = "$(RPATH)"'; \
|
||||
- echo 'let mksharedlibrpath = "$(MKSHAREDLIBRPATH)"'; \
|
||||
+ echo 'let default_rpath = ""'; \
|
||||
+ echo 'let mksharedlibrpath = ""'; \
|
||||
echo 'let toolpref = "$(TOOLPREF)"'; \
|
||||
sed -n -e 's/^#ml //p' ../config/Makefile) \
|
||||
> ocamlmklibconfig.ml
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3754ad8a39..fb60c7c14c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1422,8 +1422,6 @@ AS_IF([test x"$enable_shared" != "xno"],
|
||||
[[*-*-openbsd7.[3-9]|*-*-openbsd[89].*]],
|
||||
[mkdll_flags="${mkdll_flags} -Wl,--no-execute-only"])
|
||||
oc_ldflags="$oc_ldflags -Wl,-E"
|
||||
- rpath="-Wl,-rpath,"
|
||||
- mksharedlibrpath="-Wl,-rpath,"
|
||||
natdynlinkopts="-Wl,-E"
|
||||
supports_shared_libraries=true],
|
||||
[mkdll='shared-libs-not-available'])
|
||||
--
|
||||
2.13.2
|
||||
2.52.0
|
||||
|
||||
|
|
|
|||
25
0002-configure-Allow-user-defined-C-compiler-flags.patch
Normal file
25
0002-configure-Allow-user-defined-C-compiler-flags.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
From ef549c9a97838331877b139f407269db2a0fc691 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 29 May 2012 20:44:18 +0100
|
||||
Subject: [PATCH 2/2] configure: Allow user defined C compiler flags.
|
||||
|
||||
---
|
||||
configure.ac | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index fb60c7c14c..f6a493ccf5 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3243,7 +3243,7 @@ AC_CONFIG_COMMANDS_PRE([
|
||||
[mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}"])
|
||||
mkdll_ldflags=""
|
||||
AS_IF([test -n "${LDFLAGS}"],
|
||||
- [for flag in ${LDFLAGS}; do
|
||||
+ [for flag in "${LDFLAGS}"; do
|
||||
mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}"
|
||||
done
|
||||
mkdll_ldflags_exp="$mkdll_ldflags"])
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
|
@ -1,240 +0,0 @@
|
|||
From 930dbd7512305bb4b80d91e621c4e714531b5513 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 29 May 2012 20:40:36 +0100
|
||||
Subject: [PATCH 2/4] ocamlbyteinfo, ocamlplugininfo: Useful utilities from
|
||||
Debian, sent upstream.
|
||||
|
||||
See:
|
||||
http://git.debian.org/?p=pkg-ocaml-maint/packages/ocaml.git;a=tree;f=debian/ocamlbyteinfo;hb=HEAD
|
||||
---
|
||||
ocamlbyteinfo.ml | 101 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
ocamlplugininfo.ml | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 210 insertions(+)
|
||||
create mode 100644 ocamlbyteinfo.ml
|
||||
create mode 100644 ocamlplugininfo.ml
|
||||
|
||||
diff --git a/ocamlbyteinfo.ml b/ocamlbyteinfo.ml
|
||||
new file mode 100644
|
||||
index 000000000..0a537e4d5
|
||||
--- /dev/null
|
||||
+++ b/ocamlbyteinfo.ml
|
||||
@@ -0,0 +1,101 @@
|
||||
+(***********************************************************************)
|
||||
+(* *)
|
||||
+(* Objective Caml *)
|
||||
+(* *)
|
||||
+(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *)
|
||||
+(* *)
|
||||
+(* Copyright 2009 Institut National de Recherche en Informatique et *)
|
||||
+(* en Automatique. All rights reserved. This file is distributed *)
|
||||
+(* under the terms of the GNU Library General Public License, with *)
|
||||
+(* the special exception on linking described in file ../../LICENSE. *)
|
||||
+(* *)
|
||||
+(***********************************************************************)
|
||||
+
|
||||
+(* $Id$ *)
|
||||
+
|
||||
+(* Dumps a bytecode binary file *)
|
||||
+
|
||||
+open Sys
|
||||
+open Dynlinkaux
|
||||
+
|
||||
+let input_stringlist ic len =
|
||||
+ let get_string_list sect len =
|
||||
+ let rec fold s e acc =
|
||||
+ if e != len then
|
||||
+ if sect.[e] = '\000' then
|
||||
+ fold (e+1) (e+1) (String.sub sect s (e-s) :: acc)
|
||||
+ else fold s (e+1) acc
|
||||
+ else acc
|
||||
+ in fold 0 0 []
|
||||
+ in
|
||||
+ let sect = Bytes.create len in
|
||||
+ let _ = really_input ic sect 0 len in
|
||||
+ get_string_list (Bytes.to_string sect) len
|
||||
+
|
||||
+let print = Printf.printf
|
||||
+let perr s =
|
||||
+ Printf.eprintf "%s\n" s;
|
||||
+ exit(1)
|
||||
+let p_title title = print "%s:\n" title
|
||||
+
|
||||
+let p_section title format pdata = function
|
||||
+ | [] -> ()
|
||||
+ | l ->
|
||||
+ p_title title;
|
||||
+ List.iter
|
||||
+ (fun (name, data) -> print format (pdata data) name)
|
||||
+ l
|
||||
+
|
||||
+let p_list title format = function
|
||||
+ | [] -> ()
|
||||
+ | l ->
|
||||
+ p_title title;
|
||||
+ List.iter
|
||||
+ (fun name -> print format name)
|
||||
+ l
|
||||
+
|
||||
+let _ =
|
||||
+ try
|
||||
+ let input_name = Sys.argv.(1) in
|
||||
+ let ic = open_in_bin input_name in
|
||||
+ Bytesections.read_toc ic;
|
||||
+ List.iter
|
||||
+ (fun section ->
|
||||
+ try
|
||||
+ let len = Bytesections.seek_section ic section in
|
||||
+ if len > 0 then match section with
|
||||
+ | "CRCS" ->
|
||||
+ p_section
|
||||
+ "Imported Units"
|
||||
+ "\t%s\t%s\n"
|
||||
+ Digest.to_hex
|
||||
+ (input_value ic : (string * Digest.t) list)
|
||||
+ | "DLLS" ->
|
||||
+ p_list
|
||||
+ "Used Dlls" "\t%s\n"
|
||||
+ (input_stringlist ic len)
|
||||
+ | "DLPT" ->
|
||||
+ p_list
|
||||
+ "Additional Dll paths"
|
||||
+ "\t%s\n"
|
||||
+ (input_stringlist ic len)
|
||||
+ | "PRIM" ->
|
||||
+ let prims = (input_stringlist ic len) in
|
||||
+ print "Uses unsafe features: ";
|
||||
+ begin match prims with
|
||||
+ [] -> print "no\n"
|
||||
+ | l -> print "YES\n";
|
||||
+ p_list "Primitives declared in this module"
|
||||
+ "\t%s\n"
|
||||
+ l
|
||||
+ end
|
||||
+ | _ -> ()
|
||||
+ with Not_found | Failure _ | Invalid_argument _ -> ()
|
||||
+ )
|
||||
+ ["CRCS"; "DLLS"; "DLPT"; "PRIM"];
|
||||
+ close_in ic
|
||||
+ with
|
||||
+ | Sys_error msg ->
|
||||
+ perr msg
|
||||
+ | Invalid_argument("index out of bounds") ->
|
||||
+ perr (Printf.sprintf "Usage: %s filename" Sys.argv.(0))
|
||||
diff --git a/ocamlplugininfo.ml b/ocamlplugininfo.ml
|
||||
new file mode 100644
|
||||
index 000000000..e28800f31
|
||||
--- /dev/null
|
||||
+++ b/ocamlplugininfo.ml
|
||||
@@ -0,0 +1,109 @@
|
||||
+(***********************************************************************)
|
||||
+(* *)
|
||||
+(* Objective Caml *)
|
||||
+(* *)
|
||||
+(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *)
|
||||
+(* *)
|
||||
+(* Copyright 2009 Institut National de Recherche en Informatique et *)
|
||||
+(* en Automatique. All rights reserved. This file is distributed *)
|
||||
+(* under the terms of the GNU Library General Public License, with *)
|
||||
+(* the special exception on linking described in file ../../LICENSE. *)
|
||||
+(* *)
|
||||
+(***********************************************************************)
|
||||
+
|
||||
+(* $Id$ *)
|
||||
+
|
||||
+(* Dumps a .cmxs file *)
|
||||
+
|
||||
+open Natdynlink
|
||||
+open Format
|
||||
+
|
||||
+let file =
|
||||
+ try
|
||||
+ Sys.argv.(1)
|
||||
+ with _ -> begin
|
||||
+ Printf.eprintf "Usage: %s file.cmxs\n" Sys.argv.(0);
|
||||
+ exit(1)
|
||||
+ end
|
||||
+
|
||||
+exception Abnormal_exit
|
||||
+
|
||||
+let error s e =
|
||||
+ let eprint = Printf.eprintf in
|
||||
+ let print_exc s = function
|
||||
+ | End_of_file ->
|
||||
+ eprint "%s: %s\n" s file
|
||||
+ | Abnormal_exit ->
|
||||
+ eprint "%s\n" s
|
||||
+ | e -> eprint "%s\n" (Printexc.to_string e)
|
||||
+ in
|
||||
+ print_exc s e;
|
||||
+ exit(1)
|
||||
+
|
||||
+let read_in command =
|
||||
+ let cmd = Printf.sprintf command file in
|
||||
+ let ic = Unix.open_process_in cmd in
|
||||
+ try
|
||||
+ let line = input_line ic in
|
||||
+ begin match (Unix.close_process_in ic) with
|
||||
+ | Unix.WEXITED 0 -> Str.split (Str.regexp "[ ]+") line
|
||||
+ | Unix.WEXITED _ | Unix.WSIGNALED _ | Unix.WSTOPPED _ ->
|
||||
+ error
|
||||
+ (Printf.sprintf
|
||||
+ "Command \"%s\" exited abnormally"
|
||||
+ cmd
|
||||
+ )
|
||||
+ Abnormal_exit
|
||||
+ end
|
||||
+ with e -> error "File is empty" e
|
||||
+
|
||||
+let get_offset adr_off adr_sec =
|
||||
+ try
|
||||
+ let adr = List.nth adr_off 4 in
|
||||
+ let off = List.nth adr_off 5 in
|
||||
+ let sec = List.hd adr_sec in
|
||||
+
|
||||
+ let (!) x = Int64.of_string ("0x" ^ x) in
|
||||
+ let (+) = Int64.add in
|
||||
+ let (-) = Int64.sub in
|
||||
+
|
||||
+ Int64.to_int (!off + !sec - !adr)
|
||||
+
|
||||
+ with Failure _ | Invalid_argument _ ->
|
||||
+ error
|
||||
+ "Command output doesn't have the expected format"
|
||||
+ Abnormal_exit
|
||||
+
|
||||
+let print_infos name crc defines cmi cmx =
|
||||
+ let print_name_crc (name, crc) =
|
||||
+ printf "@ %s (%s)" name (Digest.to_hex crc)
|
||||
+ in
|
||||
+ let pr_imports ppf imps = List.iter print_name_crc imps in
|
||||
+ printf "Name: %s@." name;
|
||||
+ printf "CRC of implementation: %s@." (Digest.to_hex crc);
|
||||
+ printf "@[<hov 2>Globals defined:";
|
||||
+ List.iter (fun s -> printf "@ %s" s) defines;
|
||||
+ printf "@]@.";
|
||||
+ printf "@[<v 2>Interfaces imported:%a@]@." pr_imports cmi;
|
||||
+ printf "@[<v 2>Implementations imported:%a@]@." pr_imports cmx
|
||||
+
|
||||
+let _ =
|
||||
+ let adr_off = read_in "objdump -h %s | grep ' .data '" in
|
||||
+ let adr_sec = read_in "objdump -T %s | grep ' caml_plugin_header$'" in
|
||||
+
|
||||
+ let ic = open_in file in
|
||||
+ let _ = seek_in ic (get_offset adr_off adr_sec) in
|
||||
+ let header = (input_value ic : Natdynlink.dynheader) in
|
||||
+ if header.magic <> Natdynlink.dyn_magic_number then
|
||||
+ raise(Error(Natdynlink.Not_a_bytecode_file file))
|
||||
+ else begin
|
||||
+ List.iter
|
||||
+ (fun ui ->
|
||||
+ print_infos
|
||||
+ ui.name
|
||||
+ ui.crc
|
||||
+ ui.defines
|
||||
+ ui.imports_cmi
|
||||
+ ui.imports_cmx)
|
||||
+ header.units
|
||||
+ end
|
||||
--
|
||||
2.13.2
|
||||
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 66e774a2d3f8ebe6b6a4a3775112fc63619add8c Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 29 May 2012 20:44:18 +0100
|
||||
Subject: [PATCH 3/4] configure: Allow user defined C compiler flags.
|
||||
|
||||
---
|
||||
configure | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 203396554..9311589cf 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -2046,6 +2046,10 @@ if $flat_float_array; then
|
||||
echo "#define FLAT_FLOAT_ARRAY" >> m.h
|
||||
fi
|
||||
|
||||
+# Allow user defined C Compiler flags
|
||||
+bytecccompopts="$bytecccompopts $CFLAGS"
|
||||
+nativecccompopts="$nativecccompopts $CFLAGS"
|
||||
+
|
||||
# Finish generated files
|
||||
|
||||
cclibs="$cclibs $mathlib"
|
||||
--
|
||||
2.13.2
|
||||
|
||||
File diff suppressed because it is too large
Load diff
6
gating.yaml
Executable file
6
gating.yaml
Executable file
|
|
@ -0,0 +1,6 @@
|
|||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-*
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
||||
69
macros.ocaml-rpm
Normal file
69
macros.ocaml-rpm
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Make %files lists from an installed tree of files.
|
||||
# Options:
|
||||
# -s: separate packaging; every subdirectory of %%{ocamldir}, except stublibs,
|
||||
# is placed in its own package. This option requires the existence of opam
|
||||
# *.install files in the build tree.
|
||||
# -n: suppress creation of a devel subpackage.
|
||||
%ocaml_files(sn) %{python3} /usr/lib/rpm/redhat/ocaml_files.py %{-s} %{-n} %{buildroot} %{ocamldir}
|
||||
|
||||
# Internal macro holding the common parts of ocaml_install and dune_install
|
||||
%ocaml_install_common(sn) %{expand:
|
||||
rm -rf %{buildroot}%{_prefix}/doc
|
||||
mlis=$(find %{buildroot}%{_libdir}/ocaml -name '*.mli')
|
||||
rm -f ${mlis//.mli/.ml}
|
||||
%ocaml_files %{-s} %{-n}}
|
||||
|
||||
# Install files listed in opam *.install files.
|
||||
# Options:
|
||||
# -s: separate packaging; every subdirectory of %%{ocamldir}, except stublibs,
|
||||
# is placed in its own package.
|
||||
# -n: suppress creation of a devel subpackage.
|
||||
%ocaml_install(sn) %{expand:
|
||||
%{python3} /usr/lib/rpm/redhat/ocaml_files.py -i %{-s} %{-n} %{buildroot} %{ocamldir}
|
||||
%ocaml_install_common %{-s} %{-n}}
|
||||
|
||||
# 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 %*}
|
||||
|
||||
# Install with dune
|
||||
# Options:
|
||||
# -s: separate packaging; every subdirectory of %%{ocamldir}, except stublibs,
|
||||
# is placed in its own package.
|
||||
# -n: suppress creation of a devel subpackage.
|
||||
%dune_install(sn) %{expand:
|
||||
dune install --destdir=%{buildroot} %{dune_add_flags %*}
|
||||
if [ -d _build/default/_doc/_html ]; then
|
||||
find _build/default/_doc/_html -name .dune-keep -delete
|
||||
fi
|
||||
%ocaml_install_common %{-s} %{-n}}
|
||||
669
ocaml.spec
669
ocaml.spec
|
|
@ -1,3 +1,6 @@
|
|||
# Don't add -Wl,-dT,<build dir>
|
||||
%undefine _package_note_flags
|
||||
|
||||
# OCaml has a bytecode backend that works on anything with a C
|
||||
# compiler, and a native code backend available on a subset of
|
||||
# architectures. A further subset of architectures support native
|
||||
|
|
@ -15,27 +18,39 @@
|
|||
%global natdynlink 0
|
||||
%endif
|
||||
|
||||
%global giturl https://github.com/ocaml/ocaml
|
||||
|
||||
# i686 support was dropped in OCaml 5 / Fedora 39.
|
||||
ExcludeArch: %{ix86}
|
||||
|
||||
# These are all the architectures that the tests run on. The tests
|
||||
# take a long time to run, so don't run them on slow machines.
|
||||
%global test_arches aarch64 %{power64} x86_64
|
||||
%global test_arches %{arm64} %{power64} %{riscv64} s390x %{x86_64}
|
||||
# These are the architectures for which the tests must pass otherwise
|
||||
# the build will fail.
|
||||
%global test_arches_required aarch64 ppc64le x86_64
|
||||
#global test_arches_required aarch64 ppc64le x86_64
|
||||
%global test_arches_required NONE
|
||||
|
||||
# Architectures where parallel builds fail.
|
||||
#%global no_parallel_build_arches aarch64
|
||||
#global no_parallel_build_arches aarch64
|
||||
|
||||
#global rcver +git
|
||||
%global rcver %{nil}
|
||||
|
||||
Name: ocaml
|
||||
Version: 4.06.0
|
||||
Release: 3%{?dist}
|
||||
Version: 5.5.0
|
||||
Release: 2%{?dist}
|
||||
|
||||
Summary: OCaml compiler and programming environment
|
||||
|
||||
License: QPL and (LGPLv2+ with exceptions)
|
||||
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception
|
||||
|
||||
URL: http://www.ocaml.org
|
||||
URL: https://www.ocaml.org
|
||||
VCS: git:%{giturl}.git
|
||||
|
||||
Source0: http://caml.inria.fr/pub/distrib/ocaml-4.06/ocaml-%{version}.tar.xz
|
||||
Source0: %{giturl}/archive/%{version}%{rcver}/%{name}-%{version}%{rcver}.tar.gz
|
||||
Source1: macros.ocaml-rpm
|
||||
Source2: ocaml_files.py
|
||||
|
||||
# IMPORTANT NOTE:
|
||||
#
|
||||
|
|
@ -46,61 +61,55 @@ Source0: http://caml.inria.fr/pub/distrib/ocaml-4.06/ocaml-%{version}.tar
|
|||
#
|
||||
# https://pagure.io/fedora-ocaml
|
||||
#
|
||||
# Current branch: fedora-28-4.06.0
|
||||
# Current branch: fedora-45-5.4.1
|
||||
#
|
||||
# ALTERNATIVELY add a patch to the end of the list (leaving the
|
||||
# existing patches unchanged) adding a comment to note that it should
|
||||
# be incorporated into the git repo at a later time.
|
||||
#
|
||||
|
||||
# Fedora-specific downstream patches.
|
||||
Patch0001: 0001-Don-t-add-rpaths-to-libraries.patch
|
||||
Patch0002: 0002-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch
|
||||
Patch0003: 0003-configure-Allow-user-defined-C-compiler-flags.patch
|
||||
|
||||
# Out of tree patch for RISC-V support.
|
||||
# https://github.com/nojb/riscv-ocaml
|
||||
Patch0004: 0004-Add-RISC-V-backend.patch
|
||||
# Fedora-specific patches
|
||||
Patch: 0001-Don-t-add-rpaths-to-libraries.patch
|
||||
Patch: 0002-configure-Allow-user-defined-C-compiler-flags.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: git-core
|
||||
BuildRequires: gcc
|
||||
BuildRequires: binutils-devel
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: gdbm-devel
|
||||
%ifnarch riscv64
|
||||
BuildRequires: emacs
|
||||
%endif
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: gawk
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: util-linux
|
||||
BuildRequires: libICE-devel
|
||||
BuildRequires: libSM-devel
|
||||
BuildRequires: libX11-devel
|
||||
BuildRequires: libXaw-devel
|
||||
BuildRequires: libXext-devel
|
||||
BuildRequires: libXft-devel
|
||||
BuildRequires: libXmu-devel
|
||||
BuildRequires: libXrender-devel
|
||||
BuildRequires: libXt-devel
|
||||
BuildRequires: mesa-libGL-devel
|
||||
BuildRequires: mesa-libGLU-devel
|
||||
BuildRequires: chrpath
|
||||
BuildRequires: annobin-annocheck
|
||||
BuildRequires: pkgconfig(libzstd)
|
||||
|
||||
# Documentation requirements
|
||||
BuildRequires: asciidoc
|
||||
|
||||
# ocamlopt runs gcc to link binaries. Because Fedora includes
|
||||
# hardening flags automatically, redhat-rpm-config is also required.
|
||||
# Compressed marshaling requires libzstd-devel.
|
||||
Requires: gcc
|
||||
Requires: redhat-rpm-config
|
||||
Requires: libzstd-devel%{?_isa}
|
||||
|
||||
# Because we pass -c flag to ocaml-find-requires (to avoid circular
|
||||
# dependencies) we also have to explicitly depend on the right version
|
||||
# of ocaml-runtime.
|
||||
Requires: ocaml-runtime = %{version}-%{release}
|
||||
Requires: ocaml-runtime%{?_isa} = %{version}-%{release}
|
||||
|
||||
# Bundles an MD5 implementation in byterun/md5.{c,h}
|
||||
Provides: bundled(md5-plumb)
|
||||
# Force ocaml-srpm-macros to be at the latest version, both for builds
|
||||
# and installs, since OCaml 5.2 has a different set of native code
|
||||
# generators than previous versions.
|
||||
BuildRequires: ocaml-srpm-macros >= 10
|
||||
Requires: ocaml-srpm-macros >= 10
|
||||
|
||||
Provides: ocaml(compiler) = %{version}
|
||||
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
|
||||
%if %{native_compiler}
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Dynlink_cmo_format -i Dynlink_cmxs_format
|
||||
%else
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Backend_intf -i Inlining_decision_intf -i Simplify_boxed_integer_ops_intf
|
||||
%endif
|
||||
%global __ocaml_provides_opts -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
|
||||
|
||||
|
||||
%description
|
||||
OCaml is a high-level, strongly-typed, functional and object-oriented
|
||||
programming language from the ML family of languages.
|
||||
|
|
@ -112,10 +121,16 @@ and a comprehensive library.
|
|||
|
||||
|
||||
%package runtime
|
||||
# LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception: the project as a whole
|
||||
# LicenseRef-Fedora-Public-Domain: the MD5 implementation in runtime/caml/md5.h
|
||||
# and runtime/md5.c
|
||||
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception AND LicenseRef-Fedora-Public-Domain
|
||||
Summary: OCaml runtime environment
|
||||
Requires: util-linux
|
||||
Provides: ocaml(runtime) = %{version}
|
||||
|
||||
# Bundles an MD5 implementation in runtime/caml/md5.h and runtime/md5.c
|
||||
Provides: bundled(md5-plumb)
|
||||
|
||||
%description runtime
|
||||
OCaml is a high-level, strongly-typed, functional and object-oriented
|
||||
programming language from the ML family of languages.
|
||||
|
|
@ -126,46 +141,28 @@ bytecode.
|
|||
|
||||
%package source
|
||||
Summary: Source code for OCaml libraries
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Requires: ocaml%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description source
|
||||
Source code for OCaml libraries.
|
||||
|
||||
|
||||
%package x11
|
||||
Summary: X11 support for OCaml
|
||||
Requires: ocaml-runtime = %{version}-%{release}
|
||||
Requires: libX11-devel
|
||||
|
||||
%description x11
|
||||
X11 support for OCaml.
|
||||
|
||||
|
||||
%package ocamldoc
|
||||
# LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception: the project as a whole
|
||||
# LicenseRef-Fedora-Public-Domain: ocamldoc/ocamldoc.sty
|
||||
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception AND LicenseRef-Fedora-Public-Domain
|
||||
Summary: Documentation generator for OCaml
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Provides: ocamldoc
|
||||
Requires: ocaml%{?_isa} = %{version}-%{release}
|
||||
Provides: ocamldoc = %{version}
|
||||
|
||||
%description ocamldoc
|
||||
Documentation generator for OCaml.
|
||||
|
||||
|
||||
%ifnarch riscv64
|
||||
%package emacs
|
||||
Summary: Emacs mode for OCaml
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Requires: emacs(bin)
|
||||
|
||||
%description emacs
|
||||
Emacs mode for OCaml.
|
||||
%endif
|
||||
|
||||
|
||||
%package docs
|
||||
Summary: Documentation for OCaml
|
||||
BuildArch: noarch
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Requires(post): /sbin/install-info
|
||||
Requires(preun): /sbin/install-info
|
||||
|
||||
|
||||
%description docs
|
||||
|
|
@ -177,7 +174,7 @@ This package contains man pages.
|
|||
|
||||
%package compiler-libs
|
||||
Summary: Compiler libraries for OCaml
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Requires: ocaml%{?_isa} = %{version}-%{release}
|
||||
|
||||
|
||||
%description compiler-libs
|
||||
|
|
@ -190,206 +187,253 @@ Note that this exposes internal details of the OCaml compiler which
|
|||
may not be portable between versions.
|
||||
|
||||
|
||||
%package rpm-macros
|
||||
# LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception: the project as a whole
|
||||
# BSD-3-Clause: ocaml_files.py
|
||||
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception AND BSD-3-Clause
|
||||
Summary: RPM macros for building OCaml packages
|
||||
BuildArch: noarch
|
||||
Requires: ocaml = %{version}-%{release}
|
||||
Requires: python3
|
||||
|
||||
|
||||
%description rpm-macros
|
||||
This package contains macros that are useful for building OCaml RPMs.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -T -b 0 -n %{name}-%{version}
|
||||
%autopatch -p1
|
||||
%autosetup -S git -n %{name}-%{version}%{rcver}
|
||||
# Patches touch configure.ac, so rebuild it:
|
||||
autoconf --force
|
||||
|
||||
|
||||
%build
|
||||
%ifnarch %{no_parallel_build_arches}
|
||||
make="make %{?_smp_mflags}"
|
||||
make="%make_build"
|
||||
%else
|
||||
unset MAKEFLAGS
|
||||
make=make
|
||||
%endif
|
||||
|
||||
CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
|
||||
# Set ocamlmklib default flags to include Fedora linker flags
|
||||
sed -i '/ld_opts/s|\[\]|["%{build_ldflags}"]|' tools/ocamlmklib.ml
|
||||
|
||||
# Expose a dependency on the math library
|
||||
sed -i '/^EXTRACAMLFLAGS=/aLINKOPTS=-cclib -lm' otherlibs/unix/Makefile
|
||||
|
||||
# Don't use %%configure macro because it sets --build, --host which
|
||||
# breaks some incorrect assumptions made by OCaml's configure.ac
|
||||
#
|
||||
# See also:
|
||||
# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/2O4HBOK6PTQZAFAVIRDVMZGG2PYB2QHM/
|
||||
# https://github.com/ocaml/ocaml/issues/8647
|
||||
#
|
||||
# We set --libdir to the unusual directory because we want OCaml to
|
||||
# install its libraries and other files into a subdirectory.
|
||||
#
|
||||
# OC_CFLAGS/OC_LDFLAGS control what flags OCaml passes to the linker
|
||||
# when doing final linking of OCaml binaries. Setting these is
|
||||
# necessary to ensure that generated binaries have Fedora hardening
|
||||
# features.
|
||||
./configure \
|
||||
-bindir %{_bindir} \
|
||||
-libdir %{_libdir}/ocaml \
|
||||
-x11lib %{_libdir} \
|
||||
-x11include %{_includedir} \
|
||||
-mandir %{_mandir}/man1 \
|
||||
-no-curses
|
||||
--prefix=%{_prefix} \
|
||||
--sysconfdir=%{_sysconfdir} \
|
||||
--mandir=%{_mandir} \
|
||||
--libdir=%{_libdir}/ocaml \
|
||||
--enable-flambda \
|
||||
%if %{native_compiler}
|
||||
--enable-native-compiler \
|
||||
--enable-native-toplevel \
|
||||
%else
|
||||
--disable-native-compiler \
|
||||
--disable-native-toplevel \
|
||||
%endif
|
||||
%ifarch %{x86_64} %{arm64}
|
||||
%if 0%{?_include_frame_pointers}
|
||||
--enable-frame-pointers \
|
||||
%endif
|
||||
%endif
|
||||
%ifarch %{test_arches}
|
||||
--enable-ocamltest \
|
||||
%else
|
||||
--disable-ocamltest \
|
||||
%endif
|
||||
OC_CFLAGS='%{build_cflags}' \
|
||||
OC_LDFLAGS='%{build_ldflags}' \
|
||||
%{nil}
|
||||
$make world
|
||||
%if %{native_compiler}
|
||||
$make opt
|
||||
$make opt.opt
|
||||
%endif
|
||||
%ifnarch riscv64
|
||||
make -C emacs ocamltags
|
||||
%endif
|
||||
|
||||
# Currently these tools are supplied by Debian, but are expected
|
||||
# to go upstream at some point.
|
||||
includes="-nostdlib -I stdlib -I utils -I parsing -I typing -I bytecomp -I asmcomp -I driver -I otherlibs/unix -I otherlibs/str -I otherlibs/dynlink"
|
||||
boot/ocamlrun ./ocamlc $includes dynlinkaux.cmo ocamlbyteinfo.ml -o ocamlbyteinfo
|
||||
# ocamlplugininfo doesn't compile because it needs 'dynheader' (type
|
||||
# decl) and I have no idea where that comes from
|
||||
#cp otherlibs/dynlink/natdynlink.ml .
|
||||
#boot/ocamlrun ./ocamlopt $includes unix.cmxa str.cmxa natdynlink.ml ocamlplugininfo.ml -o ocamlplugininfo
|
||||
# Build the README and fix up references to other doc files
|
||||
asciidoc -d book README.adoc
|
||||
for fil in CONTRIBUTING.md HACKING.adoc INSTALL.adoc README.win32.adoc; do
|
||||
sed -e "s,\"$fil\",\"https://github.com/ocaml/ocaml/blob/trunk/$fil\"," \
|
||||
-i README.html
|
||||
done
|
||||
|
||||
|
||||
%check
|
||||
%ifarch %{test_arches}
|
||||
cd testsuite
|
||||
%ifarch %{ocaml_native_compiler}
|
||||
# For information only, compile a binary and dump the annocheck data
|
||||
# from it. Useful so we know if hardening is being enabled, but don't
|
||||
# fail because not every hardening feature can be enabled here.
|
||||
echo 'print_endline "hello, world"' > hello.ml
|
||||
./ocamlopt.opt -verbose -I stdlib hello.ml -o hello ||:
|
||||
annocheck -v hello ||:
|
||||
%endif
|
||||
|
||||
%ifarch %{test_arches}
|
||||
%ifarch %{test_arches_required}
|
||||
make -j1 all
|
||||
make -j1 tests
|
||||
%else
|
||||
make -j1 all ||:
|
||||
make -j1 tests ||:
|
||||
%endif
|
||||
%endif
|
||||
|
||||
|
||||
%install
|
||||
make install \
|
||||
BINDIR=$RPM_BUILD_ROOT%{_bindir} \
|
||||
LIBDIR=$RPM_BUILD_ROOT%{_libdir}/ocaml \
|
||||
MANDIR=$RPM_BUILD_ROOT%{_mandir}
|
||||
perl -pi -e "s|^$RPM_BUILD_ROOT||" $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
|
||||
%make_install
|
||||
|
||||
%ifnarch riscv64
|
||||
(
|
||||
# install emacs files
|
||||
cd emacs;
|
||||
make install \
|
||||
BINDIR=$RPM_BUILD_ROOT%{_bindir} \
|
||||
EMACSDIR=$RPM_BUILD_ROOT%{_datadir}/emacs/site-lisp
|
||||
make install-ocamltags BINDIR=$RPM_BUILD_ROOT%{_bindir}
|
||||
)
|
||||
%endif
|
||||
# OCaml 5.5.0 uses relative paths in ld.conf by default to support relocatable
|
||||
# OCaml, which we don't need. Overwrite ld.conf with the absolute path.
|
||||
echo %{_libdir}/ocaml/stublibs > $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
|
||||
|
||||
echo %{version} > $RPM_BUILD_ROOT%{_libdir}/ocaml/fedora-ocaml-release
|
||||
|
||||
# Remove rpaths from stublibs .so files.
|
||||
chrpath --delete $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs/*.so
|
||||
# Remove the installed documentation. We will install it using %%doc
|
||||
rm -rf $RPM_BUILD_ROOT%{_docdir}/ocaml
|
||||
|
||||
install -m 0755 ocamlbyteinfo $RPM_BUILD_ROOT%{_bindir}
|
||||
#install -m 0755 ocamlplugininfo $RPM_BUILD_ROOT%{_bindir}
|
||||
mkdir -p $RPM_BUILD_ROOT%{rpmmacrodir}
|
||||
install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{rpmmacrodir}/macros.ocaml-rpm
|
||||
|
||||
find $RPM_BUILD_ROOT -name .ignore -delete
|
||||
|
||||
# Remove .cmt and .cmti files, for now. We could package them later.
|
||||
# See also: http://www.ocamlpro.com/blog/2012/08/20/ocamlpro-and-4.00.0.html
|
||||
find $RPM_BUILD_ROOT \( -name '*.cmt' -o -name '*.cmti' \) -a -delete
|
||||
mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
||||
install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
||||
|
||||
|
||||
%files
|
||||
%doc LICENSE
|
||||
%license LICENSE
|
||||
%{_bindir}/ocaml
|
||||
|
||||
%{_bindir}/ocamlbyteinfo
|
||||
%{_bindir}/ocamlcmt
|
||||
%{_bindir}/ocamlcp
|
||||
%{_bindir}/ocamldebug
|
||||
#%{_bindir}/ocamlplugininfo
|
||||
%{_bindir}/ocamlmklib
|
||||
%{_bindir}/ocamlmktop
|
||||
%{_bindir}/ocamlprof
|
||||
%{_bindir}/ocamlyacc
|
||||
|
||||
# symlink to either .byte or .opt version
|
||||
%{_bindir}/ocamlc
|
||||
%{_bindir}/ocamlcp
|
||||
%{_bindir}/ocamldep
|
||||
%{_bindir}/ocamllex
|
||||
%{_bindir}/ocamlmklib
|
||||
%{_bindir}/ocamlmktop
|
||||
%{_bindir}/ocamlobjinfo
|
||||
%{_bindir}/ocamloptp
|
||||
%{_bindir}/ocamlprof
|
||||
|
||||
# bytecode versions
|
||||
%{_bindir}/ocamlc.byte
|
||||
%{_bindir}/ocamlcp.byte
|
||||
%{_bindir}/ocamldep.byte
|
||||
%{_bindir}/ocamllex.byte
|
||||
%{_bindir}/ocamlmklib.byte
|
||||
%{_bindir}/ocamlmktop.byte
|
||||
%{_bindir}/ocamlobjinfo.byte
|
||||
%{_bindir}/ocamloptp.byte
|
||||
%{_bindir}/ocamlprof.byte
|
||||
|
||||
%if %{native_compiler}
|
||||
# native code versions
|
||||
%{_bindir}/ocamlc.opt
|
||||
%{_bindir}/ocamlcp.opt
|
||||
%{_bindir}/ocamldep.opt
|
||||
%{_bindir}/ocamllex.opt
|
||||
%{_bindir}/ocamlmklib.opt
|
||||
%{_bindir}/ocamlmktop.opt
|
||||
%{_bindir}/ocamlobjinfo.opt
|
||||
%{_bindir}/ocamloptp.opt
|
||||
%{_bindir}/ocamlprof.opt
|
||||
%endif
|
||||
|
||||
%if %{native_compiler}
|
||||
%{_bindir}/ocamlnat
|
||||
%{_bindir}/ocamlopt
|
||||
%{_bindir}/ocamlopt.byte
|
||||
%{_bindir}/ocamlopt.opt
|
||||
%{_bindir}/ocamloptp
|
||||
%endif
|
||||
|
||||
#%{_libdir}/ocaml/addlabels
|
||||
#%{_libdir}/ocaml/scrapelabels
|
||||
%{_libdir}/ocaml/camlheader
|
||||
%{_libdir}/ocaml/camlheader_ur
|
||||
%{_libdir}/ocaml/expunge
|
||||
%{_libdir}/ocaml/extract_crc
|
||||
%{_libdir}/ocaml/ld.conf
|
||||
%{_libdir}/ocaml/Makefile.config
|
||||
|
||||
%{_libdir}/ocaml/*.a
|
||||
%if %{natdynlink}
|
||||
%{_libdir}/ocaml/*.cmxs
|
||||
%endif
|
||||
%if %{native_compiler}
|
||||
%{_libdir}/ocaml/*.cmxa
|
||||
%{_libdir}/ocaml/*.cmx
|
||||
%{_libdir}/ocaml/*.o
|
||||
%{_libdir}/ocaml/libasmrun_shared.so
|
||||
%endif
|
||||
%{_libdir}/ocaml/*.mli
|
||||
%{_libdir}/ocaml/libcamlrun_shared.so
|
||||
%{_libdir}/ocaml/objinfo_helper
|
||||
%{_libdir}/ocaml/vmthreads/*.mli
|
||||
%{_libdir}/ocaml/vmthreads/*.a
|
||||
%{_libdir}/ocaml/sys.ml.in
|
||||
|
||||
%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.mli
|
||||
%if %{native_compiler}
|
||||
%{_libdir}/ocaml/threads/*.a
|
||||
%{_libdir}/ocaml/threads/*.cmxa
|
||||
%{_libdir}/ocaml/threads/*.cmx
|
||||
%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.a
|
||||
%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.cmxa
|
||||
%{_libdir}/ocaml/{dynlink,profiling,runtime_events,str,threads,unix}/*.cmx
|
||||
%{_libdir}/ocaml/profiling/*.o
|
||||
%endif
|
||||
%if %{natdynlink}
|
||||
%{_libdir}/ocaml/{runtime_events,str,unix}/*.cmxs
|
||||
%endif
|
||||
|
||||
# headers
|
||||
%{_libdir}/ocaml/caml
|
||||
%exclude %{_libdir}/ocaml/graphicsX11.mli
|
||||
|
||||
|
||||
%files runtime
|
||||
%doc README.adoc LICENSE Changes
|
||||
%doc README.html Changes
|
||||
%license LICENSE
|
||||
%{_bindir}/ocamlrun
|
||||
%{_bindir}/*ocamlrun-a100
|
||||
%{_bindir}/ocamlrund
|
||||
%{_bindir}/*ocamlrund-a100
|
||||
%{_bindir}/ocamlruni
|
||||
%{_bindir}/*ocamlruni-a100
|
||||
%dir %{_libdir}/ocaml
|
||||
%{_libdir}/ocaml/VERSION
|
||||
%{_libdir}/ocaml/libasmrun*.so
|
||||
%{_libdir}/ocaml/libcamlrun*.so
|
||||
%{_libdir}/ocaml/*.cmo
|
||||
%{_libdir}/ocaml/*.cmi
|
||||
%{_libdir}/ocaml/*.cma
|
||||
%{_libdir}/ocaml/ld.conf
|
||||
%{_libdir}/ocaml/stublibs
|
||||
%dir %{_libdir}/ocaml/vmthreads
|
||||
%{_libdir}/ocaml/vmthreads/*.cmi
|
||||
%{_libdir}/ocaml/vmthreads/*.cma
|
||||
%dir %{_libdir}/ocaml/dynlink
|
||||
%{_libdir}/ocaml/dynlink/META
|
||||
%{_libdir}/ocaml/dynlink/*.cmi
|
||||
%{_libdir}/ocaml/dynlink/*.cma
|
||||
%dir %{_libdir}/ocaml/profiling
|
||||
%{_libdir}/ocaml/profiling/*.cmo
|
||||
%{_libdir}/ocaml/profiling/*.cmi
|
||||
%dir %{_libdir}/ocaml/runtime_events
|
||||
%{_libdir}/ocaml/runtime_events/META
|
||||
%{_libdir}/ocaml/runtime_events/*.cmi
|
||||
%{_libdir}/ocaml/runtime_events/*.cma
|
||||
%{_libdir}/ocaml/runtime-launch-info
|
||||
%{_libdir}/ocaml/stdlib
|
||||
%dir %{_libdir}/ocaml/str
|
||||
%{_libdir}/ocaml/str/META
|
||||
%{_libdir}/ocaml/str/*.cmi
|
||||
%{_libdir}/ocaml/str/*.cma
|
||||
%dir %{_libdir}/ocaml/threads
|
||||
%{_libdir}/ocaml/threads/META
|
||||
%{_libdir}/ocaml/threads/*.cmi
|
||||
%{_libdir}/ocaml/threads/*.cma
|
||||
%dir %{_libdir}/ocaml/unix
|
||||
%{_libdir}/ocaml/unix/META
|
||||
%{_libdir}/ocaml/unix/*.cmi
|
||||
%{_libdir}/ocaml/unix/*.cma
|
||||
%{_libdir}/ocaml/fedora-ocaml-release
|
||||
%exclude %{_libdir}/ocaml/graphicsX11.cmi
|
||||
|
||||
|
||||
%files source
|
||||
%doc LICENSE
|
||||
%license LICENSE
|
||||
%{_libdir}/ocaml/*.ml
|
||||
|
||||
|
||||
%files x11
|
||||
%doc LICENSE
|
||||
%{_libdir}/ocaml/graphicsX11.cmi
|
||||
%{_libdir}/ocaml/graphicsX11.mli
|
||||
%{_libdir}/ocaml/*.cmt*
|
||||
%{_libdir}/ocaml/*/*.cmt*
|
||||
|
||||
|
||||
%files ocamldoc
|
||||
%doc LICENSE
|
||||
%license LICENSE
|
||||
%doc ocamldoc/Changes.txt
|
||||
%{_bindir}/ocamldoc*
|
||||
%{_libdir}/ocaml/ocamldoc
|
||||
|
|
@ -400,30 +444,279 @@ find $RPM_BUILD_ROOT \( -name '*.cmt' -o -name '*.cmti' \) -a -delete
|
|||
%{_mandir}/man3/*
|
||||
|
||||
|
||||
%ifnarch riscv64
|
||||
%files emacs
|
||||
%doc emacs/README
|
||||
%{_datadir}/emacs/site-lisp/*
|
||||
%{_bindir}/ocamltags
|
||||
%endif
|
||||
|
||||
|
||||
%files compiler-libs
|
||||
%doc LICENSE
|
||||
%dir %{_libdir}/ocaml/compiler-libs
|
||||
%{_libdir}/ocaml/compiler-libs/*.mli
|
||||
%{_libdir}/ocaml/compiler-libs/*.cmi
|
||||
%{_libdir}/ocaml/compiler-libs/*.cmo
|
||||
%{_libdir}/ocaml/compiler-libs/*.cma
|
||||
%if %{native_compiler}
|
||||
%{_libdir}/ocaml/compiler-libs/*.a
|
||||
%{_libdir}/ocaml/compiler-libs/*.cmxa
|
||||
%{_libdir}/ocaml/compiler-libs/*.cmx
|
||||
%{_libdir}/ocaml/compiler-libs/*.o
|
||||
%endif
|
||||
%license LICENSE
|
||||
%{_libdir}/ocaml/compiler-libs
|
||||
|
||||
|
||||
%files rpm-macros
|
||||
%{rpmmacrodir}/macros.ocaml-rpm
|
||||
%{_rpmconfigdir}/redhat/ocaml_files.py
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Jul 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.5.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
|
||||
|
||||
* Tue Jun 23 2026 Jerry James <loganjerry@gmail.com> - 5.5.0-1
|
||||
- New upstream version 5.5.0 (RHBZ#2442622)
|
||||
- Drop upstreamed fix for arm64 frame pointers
|
||||
- Reenable LTO
|
||||
- Move ld.conf, libasmrun, and libcamlrun to ocaml-runtime
|
||||
- Drop hardlink dependency; rpm now does this by default
|
||||
- Drop unused utilx-linux dependency
|
||||
|
||||
* Thu Feb 26 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-4
|
||||
- Backport fix for arm64 frame pointers
|
||||
|
||||
* Fri Feb 20 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-1
|
||||
- New upstream version 5.4.1 (RHBZ#2440356)
|
||||
|
||||
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
|
||||
* Mon Oct 13 2025 Richard W.M. Jones <rjones@redhat.com> - 5.4.0-1
|
||||
- New upstream version 5.4.0 (RHBZ#2368289)
|
||||
|
||||
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Sun Jun 22 2025 Yaakov Selkowitz <yselkowi@redhat.com> - 5.3.0-3
|
||||
- Fix RPM macros for Python 3.14
|
||||
|
||||
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Thu Jan 9 2025 Jerry James <loganjerry@gmail.com> - 5.3.0-1
|
||||
- New upstream version 5.3.0
|
||||
- Drop upstreamed patches
|
||||
- BR git-core instead of git
|
||||
|
||||
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.0-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Wed Jun 19 2024 Richard W.M. Jones <rjones@redhat.com> - 5.2.0-2
|
||||
- Add fix for ppc64le code generation issue found after 5.2.0 was released
|
||||
|
||||
* Thu May 23 2024 Jerry James <loganjerry@gmail.com> - 5.2.0-1
|
||||
- New upstream version 5.2.0 (RHBZ#2269805)
|
||||
- Drop upstreamed frame pointer and s390x patches
|
||||
|
||||
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.1-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.1-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Mon Dec 18 2023 Richard W.M. Jones <rjones@redhat.com> - 5.1.1-2
|
||||
- Add s390x code generation fix
|
||||
https://github.com/ocaml/ocaml/issues/12829
|
||||
|
||||
* Mon Dec 11 2023 Richard W.M. Jones <rjones@redhat.com> - 5.1.1-1
|
||||
- New upstream version 5.1.1 (RHBZ#2239227)
|
||||
|
||||
* Tue Nov 14 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 5.1.0-5
|
||||
- Drop unused BR parallel
|
||||
|
||||
* Fri Oct 06 2023 Richard W.M. Jones <rjones@redhat.com> - 5.1.0-4
|
||||
- Use BR ocaml-srpm-macros to force latest to be built against
|
||||
|
||||
* Thu Oct 05 2023 Richard W.M. Jones <rjones@redhat.com> - 5.1.0-3
|
||||
- Rebuild against updated ocaml-srpm-macros
|
||||
|
||||
* Thu Oct 5 2023 Richard W.M. Jones <rjones@redhat.com> - 5.1.0-2
|
||||
- Add upstream patch added after 5.1.0
|
||||
|
||||
* Wed Oct 4 2023 Jerry James <loganjerry@gmail.com> - 5.1.0-1
|
||||
- Version 5.1.0
|
||||
- Add LicenseRef-Fedora-Public-Domain to the runtime License field
|
||||
- New ocaml-rpm-macros subpackage
|
||||
- Depend on libzstd-devel for compressed marshaling
|
||||
- Disable LTO
|
||||
|
||||
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Wed Jul 12 2023 Richard W.M. Jones <rjones@redhat.com> - 5.0.0-3
|
||||
- Force ocaml-srpm-macros to be the latest version.
|
||||
|
||||
* Wed Jun 14 2023 Jerry James <loganjerry@gmail.com> - 5.0.0-2
|
||||
- Version 5.0.0
|
||||
- Convert License tag to SPDX
|
||||
- Ship HTML documentation instead of asciidoc source
|
||||
- Set ocamlmklib default flags to the Fedora linker flags
|
||||
- Enable frame pointers on x86_64
|
||||
|
||||
* Mon Jan 23 2023 Richard W.M. Jones <rjones@redhat.com> - 4.14.0-5
|
||||
- Rebuild OCaml packages for F38
|
||||
|
||||
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.14.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Mon Sep 5 2022 Richard W.M. Jones <rjones@redhat.com> - 4.14.0-3
|
||||
- Include more upstream patches from 4.14 branch
|
||||
|
||||
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 4.14.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Sat Jun 18 2022 Richard W.M. Jones <rjones@redhat.com> - 4.14.0-1
|
||||
- New upstream version 4.14.0
|
||||
|
||||
* Thu Jun 9 2022 Jerry James <loganjerry@gmail.com> - 4.13.1-4
|
||||
- Fix the Source0 URL
|
||||
- chrpath is no longer needed
|
||||
- Use the %%license macro
|
||||
- Build the test binaries so the tests will run
|
||||
|
||||
* Fri Feb 04 2022 Richard W.M. Jones <rjones@redhat.com> - 4.13.1-4
|
||||
- Rebuild 4.13.1 to remove package notes
|
||||
|
||||
* Wed Jan 26 2022 Richard W.M. Jones <rjones@redhat.com> - 4.13.1-3
|
||||
- Disable package note misfeature
|
||||
- Remove duplicate flags from mkexe
|
||||
|
||||
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 4.13.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Mon Oct 04 2021 Richard W.M. Jones <rjones@redhat.com> - 4.13.1-1
|
||||
- New upstream version 4.13.1
|
||||
|
||||
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.12.0-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Wed Jun 23 2021 Richard W.M. Jones <rjones@redhat.com> - 4.12.0-2
|
||||
- Move to final version of upstream patch for non-constant SIGSTKSZ
|
||||
|
||||
* Sun Feb 28 2021 Richard W.M. Jones <rjones@redhat.com> - 4.12.0-1
|
||||
- OCaml 4.12.0 release (RHBZ#1893381).
|
||||
- Workaround for glibc non-constant SIGSTKSZ
|
||||
(https://github.com/ocaml/ocaml/issues/10250)
|
||||
- Package *.cmt and *.cmti files.
|
||||
- Remove objinfo_helper since it is no longer built.
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.11.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Sep 01 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.1-1
|
||||
- OCaml 4.11.1 release (RHBZ#1870368#c26).
|
||||
|
||||
* Fri Aug 21 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.0-1
|
||||
- OCaml 4.11.0 release (RHBZ#1870368).
|
||||
|
||||
* Tue Aug 04 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.0-0.9.dev2
|
||||
- Bump and rebuild to fix DWARF versioning issues.
|
||||
- Enable LTO again.
|
||||
|
||||
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.11.0-0.7.dev2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Tue Jul 14 2020 Tom Stellard <tstellar@redhat.com> - 4.11.0-0.6.dev2
|
||||
- Use make macros
|
||||
- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
|
||||
|
||||
* Wed Jul 01 2020 Jeff Law <law@redhat.com> - 4.11.0-0.5.dev2.fc33
|
||||
- Disable LTO
|
||||
|
||||
* Mon May 04 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.0-0.4.dev2.fc33
|
||||
- Move to OCaml 4.11.0+dev2-2020-04-22.
|
||||
- Backport upstream RISC-V backend from 4.12 + fixes.
|
||||
- Enable tests on riscv64.
|
||||
- Disable ocaml-instr-* tools on riscv64.
|
||||
|
||||
* Tue Apr 21 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.0-0.3.pre.fc33
|
||||
- Add fixes for various issues found in the previous build.
|
||||
|
||||
* Fri Apr 17 2020 Richard W.M. Jones <rjones@redhat.com> - 4.11.0-0.2.pre.fc33
|
||||
- Move to OCaml 4.11.0 pre-release with support for RISC-V.
|
||||
|
||||
* Sat Apr 11 2020 Richard W.M. Jones <rjones@redhat.com> - 4.10.0-4.fc33
|
||||
- Fix RISC-V backend.
|
||||
|
||||
* Thu Apr 02 2020 Richard W.M. Jones <rjones@redhat.com> - 4.10.0-3.fc33
|
||||
- Update all OCaml dependencies for RPM 4.16.
|
||||
|
||||
* Thu Feb 27 2020 Richard W.M. Jones <rjones@redhat.com> - 4.10.0-2.fc33
|
||||
- Add dist tag.
|
||||
|
||||
* Tue Feb 25 2020 Richard W.M. Jones <rjones@redhat.com> - 4.10.0-1
|
||||
- OCaml 4.10.0 final.
|
||||
|
||||
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.10.0-0.beta1.0.1
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Sat Jan 18 2020 Richard W.M. Jones <rjones@redhat.com> - 4.10.0-0.beta1
|
||||
- OCaml 4.10.0+beta1.
|
||||
|
||||
* Tue Jan 07 2020 Richard W.M. Jones <rjones@redhat.com> - 4.09.0-13
|
||||
- Bump release and rebuild.
|
||||
|
||||
* Tue Jan 07 2020 Richard W.M. Jones <rjones@redhat.com> - 4.09.0-4
|
||||
- OCaml 4.09.0 for riscv64
|
||||
|
||||
* Tue Dec 10 2019 Richard W.M. Jones <rjones@redhat.com> - 4.09.0-3
|
||||
- Require redhat-rpm-config to get hardening flags when linking.
|
||||
|
||||
* Thu Dec 05 2019 Richard W.M. Jones <rjones@redhat.com> - 4.09.0-2
|
||||
- OCaml 4.09.0 final.
|
||||
- Use autosetup, remove old setup line.
|
||||
- Remove ocamloptp binaries.
|
||||
- Rename target_camlheader[di] -> camlheader[di] files.
|
||||
- Remove vmthreads - old threading library which is no longer built.
|
||||
- Remove x11 subpackage which is obsolete.
|
||||
- Further fixes to CFLAGS and annobin.
|
||||
|
||||
* Fri Aug 16 2019 Richard W.M. Jones <rjones@redhat.com> - 4.08.1-1
|
||||
- OCaml 4.08.1 final.
|
||||
|
||||
* Tue Jul 30 2019 Richard W.M. Jones <rjones@redhat.com> - 4.08.1-0.rc2.1
|
||||
- OCaml 4.08.1+rc2.
|
||||
- Include fix for miscompilation of off_t on 32 bit architectures.
|
||||
|
||||
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.08.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Thu Jun 27 2019 Richard W.M. Jones <rjones@redhat.com> - 4.08.0-1
|
||||
- OCaml 4.08.0 (RHBZ#1673688).
|
||||
|
||||
* Fri Apr 26 2019 Richard W.M. Jones <rjones@redhat.com> - 4.08.0-0.beta3.1
|
||||
- OCaml 4.08.0 beta 3 (RHBZ#1673688).
|
||||
- emacs subpackage has been dropped (from upstream):
|
||||
https://github.com/ocaml/ocaml/pull/2078#issuecomment-443322613
|
||||
https://github.com/Chris00/caml-mode
|
||||
- Remove ocamlbyteinfo and ocamlpluginfo, neither can be compiled.
|
||||
- Disable tests on all architectures, temporarily hopefully.
|
||||
- Package threads/*.mli files.
|
||||
|
||||
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.07.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Aug 17 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-3
|
||||
- Bootstrap from previously build Fedora compiler by default.
|
||||
|
||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.07.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Wed Jul 11 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-1
|
||||
- OCaml 4.07.0 (RHBZ#1536734).
|
||||
|
||||
* Tue Jun 26 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-0.rc1.3
|
||||
- Enable emacs again on riscv64.
|
||||
|
||||
* Tue Jun 19 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-0.rc1.2
|
||||
- OCaml 4.07.0-rc1 (RHBZ#1536734).
|
||||
|
||||
* Tue Jun 5 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-0.beta2.1
|
||||
- Add RISC-V patch to add debuginfo (DWARF) generation.
|
||||
|
||||
* Thu Apr 26 2018 Richard W.M. Jones <rjones@redhat.com> - 4.07.0-0.beta2.0
|
||||
- OCaml 4.07.0-beta2 (RHBZ#1536734).
|
||||
|
||||
* Sun Feb 25 2018 Richard W.M. Jones <rjones@redhat.com> - 4.06.0-5
|
||||
- Add another couple of RISC-V patches from nojb branch.
|
||||
|
||||
* Sat Feb 24 2018 Richard W.M. Jones <rjones@redhat.com> - 4.06.0-4
|
||||
- Remove mesa* dependencies which are not needed.
|
||||
|
||||
* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.06.0-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
451
ocaml_files.py
Normal file
451
ocaml_files.py
Normal file
|
|
@ -0,0 +1,451 @@
|
|||
# Copyright 2022-3, Jerry James
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name of Red Hat nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import shutil
|
||||
import string
|
||||
import sys
|
||||
from collections.abc import Iterable, Iterator
|
||||
from enum import Enum, auto
|
||||
from typing import Callable, final
|
||||
|
||||
# Version of this script
|
||||
version=2
|
||||
|
||||
#
|
||||
# BUILDROOT CATEGORIZATION
|
||||
#
|
||||
|
||||
# Directories to ignore when generating %dir entries
|
||||
root_dirs: set[str] = {
|
||||
'/',
|
||||
'/etc',
|
||||
'/usr',
|
||||
'/usr/bin',
|
||||
'/usr/lib',
|
||||
'/usr/lib/ocaml',
|
||||
'/usr/lib/ocaml/caml',
|
||||
'/usr/lib/ocaml/stublibs',
|
||||
'/usr/lib/ocaml/threads',
|
||||
'/usr/lib64',
|
||||
'/usr/lib64/ocaml',
|
||||
'/usr/lib64/ocaml/caml',
|
||||
'/usr/lib64/ocaml/stublibs',
|
||||
'/usr/lib64/ocaml/threads',
|
||||
'/usr/libexec',
|
||||
'/usr/sbin',
|
||||
'/usr/share',
|
||||
'/usr/share/doc'
|
||||
}
|
||||
|
||||
def find_buildroot_toplevel(buildroot: str) -> list[str]:
|
||||
"""Find toplevel files and directories in the buildroot.
|
||||
|
||||
:param str buildroot: path to the buildroot
|
||||
:return: a list of toplevel files and directories in the buildroot
|
||||
"""
|
||||
bfiles: list[str] = []
|
||||
for path, dirs, files in os.walk(buildroot):
|
||||
for i in range(len(dirs) - 1, -1, -1):
|
||||
d = os.path.join(path, dirs[i])[len(buildroot):]
|
||||
if d not in root_dirs and not d.startswith('/usr/share/man'):
|
||||
bfiles.append(d)
|
||||
del dirs[i]
|
||||
for f in files:
|
||||
realfile = os.path.join(path, f)[len(buildroot):]
|
||||
if realfile.startswith('/usr/share/man'):
|
||||
bfiles.append(realfile + '*')
|
||||
else:
|
||||
bfiles.append(realfile)
|
||||
return bfiles
|
||||
|
||||
# File suffixes that go into a devel subpackage
|
||||
dev_suffixes: set[str] = {
|
||||
'a', 'cmo', 'cmt', 'cmti', 'cmx', 'cmxa', 'h', 'idl', 'ml', 'mli', 'o'
|
||||
}
|
||||
|
||||
def is_devel_file(filname: str) -> bool:
|
||||
"""Determine whether a file belongs to a devel subpackage.
|
||||
|
||||
:param str filname: the filename to check
|
||||
:return: True if the file belongs to a devel subpackage, else False
|
||||
"""
|
||||
return (filname == 'dune-package' or filname == 'opam' or
|
||||
(os.path.splitext(filname)[1][1:] in dev_suffixes
|
||||
and not filname.endswith('_top_init.ml')))
|
||||
|
||||
def find_buildroot_all(buildroot: str, devel: bool, add_star: bool) -> list[set[str]]:
|
||||
"""Find all files and directories in the buildroot and optionally
|
||||
categorize them as 'main' or 'devel'.
|
||||
|
||||
:param Namespace args: parsed command line arguments
|
||||
:param bool devel: True to split into 'main' and 'devel', False otherwise
|
||||
:param bool add_star: True to add a star to man page filenames
|
||||
:return: a list of files and directories, in this order: main files,
|
||||
main directories, devel files, and devel directories
|
||||
"""
|
||||
bfiles: list[set[str]] = [set(), set(), set()]
|
||||
bdirs: set[str] = set()
|
||||
for path, dirs, files in os.walk(buildroot):
|
||||
for d in dirs:
|
||||
realdir = os.path.join(path, d)[len(buildroot):]
|
||||
if realdir not in root_dirs and not realdir.startswith('/usr/share/man'):
|
||||
bdirs.add(realdir)
|
||||
for f in files:
|
||||
realfile = os.path.join(path, f)[len(buildroot):]
|
||||
if devel and is_devel_file(os.path.basename(realfile)):
|
||||
bfiles[2].add(realfile)
|
||||
else:
|
||||
if add_star and realfile.startswith('/usr/share/man'):
|
||||
bfiles[0].add(realfile + '*')
|
||||
else:
|
||||
bfiles[0].add(realfile)
|
||||
parentdir = os.path.dirname(realfile)
|
||||
if parentdir in bdirs:
|
||||
bfiles[1].add(parentdir)
|
||||
bdirs.remove(parentdir)
|
||||
# Catch intermediate directories, as in ocaml-mtime
|
||||
parentdir = os.path.dirname(parentdir)
|
||||
if parentdir in bdirs:
|
||||
bfiles[1].add(parentdir)
|
||||
bdirs.remove(parentdir)
|
||||
bfiles.append(bdirs)
|
||||
return bfiles
|
||||
|
||||
#
|
||||
# INSTALL FILE LEXER AND PARSER
|
||||
#
|
||||
|
||||
class TokenType(Enum):
|
||||
"""The types of tokens that can appear in an opam *.install file."""
|
||||
ERROR = auto()
|
||||
COLON = auto()
|
||||
LBRACE = auto()
|
||||
RBRACE = auto()
|
||||
LBRACK = auto()
|
||||
RBRACK = auto()
|
||||
STRING = auto()
|
||||
FIELD = auto()
|
||||
|
||||
@final
|
||||
class InstallFileLexer(Iterator[tuple[TokenType, str]]):
|
||||
"""Convert an opam *.install file into a sequence of tokens."""
|
||||
__slots__ = ['index', 'text']
|
||||
|
||||
def __init__(self, filname: str) -> None:
|
||||
"""Create an opam *.install file lexer.
|
||||
|
||||
:param str filname: the name of the file to read from
|
||||
"""
|
||||
self.index = 0
|
||||
with open(filname, 'r') as f:
|
||||
# Limit reads to 4 MB in case this file is bogus.
|
||||
# Most install files are under 4K.
|
||||
self.text = f.read(4194304)
|
||||
|
||||
def skip_whitespace(self) -> None:
|
||||
"""Skip over whitespace in the input."""
|
||||
while self.index < len(self.text) and \
|
||||
(self.text[self.index] == '#' or
|
||||
self.text[self.index] in string.whitespace):
|
||||
if self.text[self.index] == '#':
|
||||
while (self.index < len(self.text) and
|
||||
self.text[self.index] != '\n' and
|
||||
self.text[self.index] != '\r'):
|
||||
self.index += 1
|
||||
else:
|
||||
self.index += 1
|
||||
|
||||
def __next__(self) -> tuple[TokenType, str]:
|
||||
"""Get the next token from the opam *.install file.
|
||||
|
||||
:return: a pair containing the type and text of the next token
|
||||
"""
|
||||
self.skip_whitespace()
|
||||
if self.index < len(self.text):
|
||||
ch = self.text[self.index]
|
||||
if ch == ':':
|
||||
self.index += 1
|
||||
return (TokenType.COLON, ch)
|
||||
if ch == '{':
|
||||
self.index += 1
|
||||
return (TokenType.LBRACE, ch)
|
||||
if ch == '}':
|
||||
self.index += 1
|
||||
return (TokenType.RBRACE, ch)
|
||||
if ch == '[':
|
||||
self.index += 1
|
||||
return (TokenType.LBRACK, ch)
|
||||
if ch == ']':
|
||||
self.index += 1
|
||||
return (TokenType.RBRACK, ch)
|
||||
if ch == '"':
|
||||
start = self.index + 1
|
||||
end = start
|
||||
while end < len(self.text) and self.text[end] != '"':
|
||||
end += 2 if self.text[end] == '\\' else 1
|
||||
self.index = end + 1
|
||||
return (TokenType.STRING, self.text[start:end])
|
||||
if ch in string.ascii_letters:
|
||||
start = self.index
|
||||
end = start + 1
|
||||
while (end < len(self.text) and
|
||||
(self.text[end] == '_' or
|
||||
self.text[end] in string.ascii_letters)):
|
||||
end += 1
|
||||
self.index = end
|
||||
return (TokenType.FIELD, self.text[start:end])
|
||||
return (TokenType.ERROR, ch)
|
||||
else:
|
||||
raise StopIteration
|
||||
|
||||
@final
|
||||
class InstallFileParser(Iterable[tuple[str, bool, str, str]]):
|
||||
"""Parse opam *.install files."""
|
||||
|
||||
__slots__ = ['pkgname', 'lexer', 'libdir']
|
||||
|
||||
def __init__(self, filname: str, libdir: str) -> None:
|
||||
"""Initialize an OCaml .install file parser.
|
||||
|
||||
:param str filname: name of the .install file to parse
|
||||
:param str libdir: the OCaml library directory
|
||||
"""
|
||||
self.pkgname = os.path.splitext(os.path.basename(filname))[0]
|
||||
self.lexer = InstallFileLexer(filname)
|
||||
self.libdir = libdir
|
||||
|
||||
def __iter__(self) -> Iterator[tuple[str, bool, str, str]]:
|
||||
"""Parse a .install file.
|
||||
If there are any parse errors, we assume this file is not really an
|
||||
opam .install file and abandon the parse.
|
||||
"""
|
||||
# Map opam installer names to directories
|
||||
opammap: dict[str, str] = {
|
||||
'lib': os.path.join(self.libdir, self.pkgname),
|
||||
'lib_root': self.libdir,
|
||||
'libexec': os.path.join(self.libdir, self.pkgname),
|
||||
'libexec_root': self.libdir,
|
||||
'bin': '/usr/bin',
|
||||
'sbin': '/usr/sbin',
|
||||
'toplevel': os.path.join(self.libdir, 'toplevel'),
|
||||
'share': os.path.join('/usr/share', self.pkgname),
|
||||
'share_root': '/usr/share',
|
||||
'etc': os.path.join('/etc', self.pkgname),
|
||||
'doc': os.path.join('/usr/doc', self.pkgname),
|
||||
'stublibs': os.path.join(self.libdir, 'stublibs'),
|
||||
'man': '/usr/share/man'
|
||||
}
|
||||
|
||||
# Parse the file
|
||||
try:
|
||||
toktyp, token = next(self.lexer)
|
||||
while toktyp == TokenType.FIELD:
|
||||
libname = token
|
||||
toktyp, token = next(self.lexer)
|
||||
if toktyp != TokenType.COLON:
|
||||
return
|
||||
|
||||
toktyp, token = next(self.lexer)
|
||||
if toktyp != TokenType.LBRACK:
|
||||
return
|
||||
|
||||
directory = opammap.get(libname)
|
||||
if not directory:
|
||||
return
|
||||
|
||||
toktyp, token = next(self.lexer)
|
||||
while toktyp == TokenType.STRING:
|
||||
source = token
|
||||
optional = source[0] == '?'
|
||||
if optional:
|
||||
source = source[1:]
|
||||
nexttp, nexttk = next(self.lexer)
|
||||
if nexttp == TokenType.LBRACE:
|
||||
nexttp, nexttk = next(self.lexer)
|
||||
if nexttp == TokenType.STRING:
|
||||
filname = os.path.join(directory, nexttk)
|
||||
bracetp, bractk = next(self.lexer)
|
||||
if bracetp != TokenType.RBRACE:
|
||||
return
|
||||
nexttp, nexttk = next(self.lexer)
|
||||
else:
|
||||
return
|
||||
elif libname == 'man':
|
||||
index = token.rfind('.')
|
||||
if index < 0:
|
||||
return
|
||||
mandir = os.path.join(directory, 'man' + token[index+1:])
|
||||
filname = os.path.join(mandir, os.path.basename(token))
|
||||
else:
|
||||
filname = os.path.join(directory, os.path.basename(token))
|
||||
toktyp, token = nexttp, nexttk
|
||||
yield (self.pkgname, optional, source, filname)
|
||||
|
||||
if toktyp != TokenType.RBRACK:
|
||||
return
|
||||
toktyp, token = next(self.lexer)
|
||||
except StopIteration:
|
||||
return
|
||||
|
||||
def install_files(buildroot: str, libdir: str) -> None:
|
||||
"""Install the files listed in opam .install files in the buildroot.
|
||||
|
||||
For some projects, there are install files in both the project root
|
||||
directory and somewhere under "_build", so be careful not to parse the same
|
||||
install file twice.
|
||||
|
||||
:param str buildroot: path to the buildroot
|
||||
:param str libdir: the OCaml library directory
|
||||
"""
|
||||
install_files = set()
|
||||
for path, dirs, files in os.walk('.'):
|
||||
for f in files:
|
||||
if f.endswith('.install') and f not in install_files:
|
||||
install_files.add(f)
|
||||
parser = InstallFileParser(os.path.join(path, f), libdir)
|
||||
for _, optional, source, filname in parser:
|
||||
if not optional or os.path.exists(source):
|
||||
installpath = os.path.join(buildroot, filname[1:])
|
||||
os.makedirs(os.path.dirname(installpath), exist_ok=True)
|
||||
shutil.copy2(source, installpath)
|
||||
|
||||
def get_package_map(buildroot: str, libdir: str, devel: bool) -> dict[str, set[str]]:
|
||||
"""Create a map from package names to installed files from the opam .install
|
||||
files in the buildroot.
|
||||
|
||||
For some projects, there are install files in both the project root
|
||||
directory and somewhere under "_build", so be careful not to parse the same
|
||||
install file twice."""
|
||||
|
||||
pmap: dict[str, set[str]] = dict()
|
||||
install_files = set()
|
||||
|
||||
def add_pkg(pkgname: str, filname: str) -> None:
|
||||
"""Add a mapping from a package name to a filename.
|
||||
|
||||
:param str pkgname: the package that acts as the map key
|
||||
:param str filname: the filename to add to the package set
|
||||
"""
|
||||
if pkgname not in pmap:
|
||||
pmap[pkgname] = set()
|
||||
pmap[pkgname].add(filname)
|
||||
|
||||
installed = find_buildroot_all(buildroot, devel, False)
|
||||
for path, dirs, files in os.walk('.'):
|
||||
for f in files:
|
||||
if f.endswith('.install') and f not in install_files:
|
||||
install_files.add(f)
|
||||
parser = InstallFileParser(os.path.join(path, f), libdir)
|
||||
for pkgname, _, _, filname in parser:
|
||||
if filname in installed[0]:
|
||||
if filname.startswith('/usr/share/man'):
|
||||
add_pkg(pkgname, filname + '*')
|
||||
else:
|
||||
add_pkg(pkgname, filname)
|
||||
dirname = os.path.dirname(filname)
|
||||
if dirname in installed[1]:
|
||||
add_pkg(pkgname, '%dir ' + dirname)
|
||||
installed[1].remove(dirname)
|
||||
elif filname in installed[2]:
|
||||
if filname.startswith('/usr/share/man'):
|
||||
add_pkg(pkgname + '-devel', filname + '*')
|
||||
else:
|
||||
add_pkg(pkgname + '-devel', filname)
|
||||
dirname = os.path.dirname(filname)
|
||||
if dirname in installed[3]:
|
||||
add_pkg(pkgname + '-devel', '%dir ' + dirname)
|
||||
installed[3].remove(dirname)
|
||||
return pmap
|
||||
|
||||
#
|
||||
# MAIN INTERFACE
|
||||
#
|
||||
|
||||
def ocaml_files(no_devel: bool, separate: bool, install: bool, buildroot: str,
|
||||
libdir: str) -> None:
|
||||
"""Generate %files lists from an installed buildroot.
|
||||
|
||||
:param bool no_devel: False to split files into a main package and a devel
|
||||
package
|
||||
:param bool separate: True to place each OCaml module in an RPM package
|
||||
:param bool install: True to install files, False to generate %files
|
||||
:param str buildroot: the installed buildroot
|
||||
:param str libdir: the OCaml library directory
|
||||
"""
|
||||
if install:
|
||||
install_files(buildroot, libdir)
|
||||
elif separate:
|
||||
pkgmap = get_package_map(buildroot, libdir, not no_devel)
|
||||
for pkg in pkgmap:
|
||||
with open('.ofiles-' + pkg, 'w') as f:
|
||||
for entry in pkgmap[pkg]:
|
||||
f.write(entry + '\n')
|
||||
elif no_devel:
|
||||
with open('.ofiles', 'w') as f:
|
||||
for entry in find_buildroot_toplevel(buildroot):
|
||||
f.write(entry + '\n')
|
||||
else:
|
||||
files = find_buildroot_all(buildroot, True, True)
|
||||
with open('.ofiles', 'w') as f:
|
||||
for entry in files[0]:
|
||||
f.write(entry + '\n')
|
||||
for entry in files[1]:
|
||||
f.write('%dir ' + entry + '\n')
|
||||
with open('.ofiles-devel', 'w') as f:
|
||||
for entry in files[2]:
|
||||
f.write(entry + '\n')
|
||||
for entry in files[3]:
|
||||
f.write('%dir ' + entry + '\n')
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Support for building OCaml RPM packages')
|
||||
parser.add_argument('-i', '--install',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='install files instead of generating %%files')
|
||||
parser.add_argument('-n', '--no-devel',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='suppress creation of a devel subpackage')
|
||||
parser.add_argument('-s', '--separate',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='separate packaging. Each OCaml module is in a distinct RPM package. All modules are in a single RPM package by default.')
|
||||
parser.add_argument('-v', '--version',
|
||||
action='version',
|
||||
version=f'%(prog)s {str(version)}')
|
||||
parser.add_argument('buildroot', help='RPM build root')
|
||||
parser.add_argument('libdir', help='OCaml library directory')
|
||||
args = parser.parse_args()
|
||||
ocaml_files(args.no_devel,
|
||||
args.separate,
|
||||
args.install,
|
||||
args.buildroot,
|
||||
args.libdir)
|
||||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (ocaml-4.06.0.tar.xz) = c1cdba3fa52ef03ca534b7a4932cfe29bbbc79b587d35ed7f6906eb09a5e5af97540def03b1e01c63dd2311dc4e5a6d02378d541d14688191e4f9302aff79c23
|
||||
SHA512 (ocaml-5.5.0.tar.gz) = bf13c18cd1fc7b2e5e9623024ea8623710f646ff2fbc0f59dab70e4d4318ed8623bdcc3ec59ce37af07af2b767f520dea23fb474c26297b3e858b6c8e080b4e6
|
||||
|
|
|
|||
10
tests/basic-test.sh
Executable file
10
tests/basic-test.sh
Executable file
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash -
|
||||
set -e
|
||||
set -x
|
||||
|
||||
# Compile a trivial program and run it.
|
||||
echo 'print_endline "hello, world"' > hello.ml
|
||||
ocamlc.opt hello.ml -o hello
|
||||
./hello
|
||||
ocamlopt.opt hello.ml -o hello
|
||||
./hello
|
||||
11
tests/tests.yml
Executable file
11
tests/tests.yml
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
required_packages:
|
||||
- ocaml
|
||||
tests:
|
||||
- simple:
|
||||
dir: .
|
||||
run: ./basic-test.sh
|
||||
Loading…
Add table
Add a link
Reference in a new issue