diff --git a/0001-Don-t-add-rpaths-to-libraries.patch b/0001-Don-t-add-rpaths-to-libraries.patch index 6bf857a..eb6794d 100644 --- a/0001-Don-t-add-rpaths-to-libraries.patch +++ b/0001-Don-t-add-rpaths-to-libraries.patch @@ -1,25 +1,27 @@ -From 04e523e937625bf30d775681c11e00f6dc6fc00a Mon Sep 17 00:00:00 2001 +From 23f2e84d360208759c7d82b7ff795770ce6cf0b2 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 24 Jun 2014 10:00:15 +0100 -Subject: [PATCH 1/2] Don't add rpaths to libraries. +Subject: [PATCH 1/4] Don't add rpaths to libraries. --- - configure.ac | 2 -- - 1 file changed, 2 deletions(-) + utils/config.mlp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) -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']) +diff --git a/utils/config.mlp b/utils/config.mlp +index bbb3c5694..57d509cd0 100644 +--- a/utils/config.mlp ++++ b/utils/config.mlp +@@ -55,8 +55,8 @@ let native_c_compiler = + let native_c_libraries = "%%NATIVECCLIBS%%" + let native_pack_linker = "%%PACKLD%%" + let ranlib = "%%RANLIBCMD%%" +-let default_rpath = "%%RPATH%%" +-let mksharedlibrpath = "%%MKSHAREDLIBRPATH%%" ++let default_rpath = "" ++let mksharedlibrpath = "" + let ar = "%%ARCMD%%" + let supports_shared_libraries = %%SUPPORTS_SHARED_LIBRARIES%% + let mkdll, mkexe, mkmaindll = -- -2.52.0 +2.32.0 diff --git a/0002-configure-Allow-user-defined-C-compiler-flags.patch b/0002-configure-Allow-user-defined-C-compiler-flags.patch index 74de99b..389f09b 100644 --- a/0002-configure-Allow-user-defined-C-compiler-flags.patch +++ b/0002-configure-Allow-user-defined-C-compiler-flags.patch @@ -1,25 +1,27 @@ -From ef549c9a97838331877b139f407269db2a0fc691 Mon Sep 17 00:00:00 2001 +From 9966786a7389dc6621f2bc2dce7c690c5a38b67d Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 29 May 2012 20:44:18 +0100 -Subject: [PATCH 2/2] configure: Allow user defined C compiler flags. +Subject: [PATCH 2/4] configure: Allow user defined C compiler flags. --- - configure.ac | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) diff --git a/configure.ac b/configure.ac -index fb60c7c14c..f6a493ccf5 100644 +index 3698c7cbf..e2a3cbea0 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"]) +@@ -669,6 +669,10 @@ AS_CASE([$host], + internal_cflags="$cc_warnings"], + [common_cflags="-O"])]) + ++# Allow CFLAGS and LDFLAGS to be added. ++common_cflags="$common_cflags $CFLAGS" ++cclibs="$cclibs $LDFLAGS" ++ + internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags" + + # Enable SSE2 on x86 mingw to avoid using 80-bit registers. -- -2.52.0 +2.32.0 diff --git a/0003-configure-Remove-incorrect-assumption-about-cross-co.patch b/0003-configure-Remove-incorrect-assumption-about-cross-co.patch new file mode 100644 index 0000000..e101809 --- /dev/null +++ b/0003-configure-Remove-incorrect-assumption-about-cross-co.patch @@ -0,0 +1,67 @@ +From 5eff09224929f8fa1a2e19f9a15befd3a4a395ea Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 26 Apr 2019 16:16:29 +0100 +Subject: [PATCH 3/4] configure: Remove incorrect assumption about + cross-compiling. + +See https://github.com/ocaml/ocaml/issues/8647#issuecomment-487094390 + +The error seen without this patch is: + +sh: line 1: x86_64-pc-linux-gnu-as: command not found +--- + configure.ac | 31 ++++++++++++++++--------------- + 1 file changed, 16 insertions(+), 15 deletions(-) + +diff --git a/configure.ac b/configure.ac +index e2a3cbea0..07c005f09 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -560,10 +560,11 @@ AS_IF( + + # Are we building a cross-compiler + +-AS_IF( +- [test x"$host" = x"$target"], +- [cross_compiler=false], +- [cross_compiler=true]) ++#AS_IF( ++# [test x"$host" = x"$target"], ++# [cross_compiler=false], ++# [cross_compiler=true]) ++cross_compiler=false + + # Checks for programs + +@@ -1186,17 +1187,17 @@ AS_CASE([$arch], + + # Assembler + +-AS_IF([test -n "$target_alias"], +- [toolpref="${target_alias}-" +- as_target="$target" +- as_cpu="$target_cpu"], +- [AS_IF([test -n "$host_alias"], +- [toolpref="${host_alias}-" +- as_target="$host" +- as_cpu="$host_cpu"], +- [toolpref="" +- as_target="$build" +- as_cpu="$build_cpu"])]) ++dnl AS_IF([test -n "$target_alias"], ++dnl [toolpref="${target_alias}-" ++dnl as_target="$target" ++dnl as_cpu="$target_cpu"], ++dnl [AS_IF([test -n "$host_alias"], ++dnl [toolpref="${host_alias}-" ++dnl as_target="$host" ++dnl as_cpu="$host_cpu"], ++dnl [toolpref="" ++dnl as_target="$build" ++dnl as_cpu="$build_cpu"])]) + + # Finding the assembler + # The OCaml build system distinguishes two different assemblers: +-- +2.32.0 + diff --git a/0004-configure-Only-use-OC_-for-building-executables.patch b/0004-configure-Only-use-OC_-for-building-executables.patch new file mode 100644 index 0000000..1f21b0f --- /dev/null +++ b/0004-configure-Only-use-OC_-for-building-executables.patch @@ -0,0 +1,31 @@ +From acb5dbaa8f8ece825a48814024404a1a6c5ba7b2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 26 Jan 2022 15:47:02 +0000 +Subject: [PATCH 4/4] configure: Only use OC_* for building executables + +Fedora >= 36 fills LD_FLAGS with lots of cruft, particularly stuff for +"package notes" which contains build paths. + +In any case it seems pointless having both the OC_* variables and also +including the regular CFLAGS/LDFLAGS. Give me full control over what +ocamlopt uses. +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 07c005f09..19fe3fd1b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -43,7 +43,7 @@ libraries_man_section=3 + # at the moment they are not taken into account on Windows, because + # flexlink, which is used to build executables on this platform, can + # not handle them. +-mkexe="\$(CC) \$(OC_CFLAGS) \$(CFLAGS) \$(OC_LDFLAGS) \$(LDFLAGS)" ++mkexe="\$(CC) \$(OC_CFLAGS) \$(OC_LDFLAGS)" + + # Flags for building executable files with debugging symbols + mkexedebugflag="-g" +-- +2.32.0 + diff --git a/gating.yaml b/gating.yaml deleted file mode 100755 index 2c7ed80..0000000 --- a/gating.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- !Policy -product_versions: - - rhel-* -decision_context: osci_compose_gate -rules: - - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} diff --git a/macros.ocaml-rpm b/macros.ocaml-rpm deleted file mode 100644 index ac94c48..0000000 --- a/macros.ocaml-rpm +++ /dev/null @@ -1,69 +0,0 @@ -# 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}} diff --git a/ocaml.spec b/ocaml.spec index 3b39d37..59efada 100644 --- a/ocaml.spec +++ b/ocaml.spec @@ -18,14 +18,9 @@ %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 %{arm64} %{power64} %{riscv64} s390x %{x86_64} +%global test_arches aarch64 %{power64} riscv64 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 @@ -38,19 +33,16 @@ ExcludeArch: %{ix86} %global rcver %{nil} Name: ocaml -Version: 5.5.0 -Release: 2%{?dist} +Version: 4.13.1 +Release: 4%{?dist} Summary: OCaml compiler and programming environment -License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception +License: QPL and (LGPLv2+ with exceptions) -URL: https://www.ocaml.org -VCS: git:%{giturl}.git +URL: http://www.ocaml.org -Source0: %{giturl}/archive/%{version}%{rcver}/%{name}-%{version}%{rcver}.tar.gz -Source1: macros.ocaml-rpm -Source2: ocaml_files.py +Source0: https://github.com/ocaml/ocaml/archive/%%{version}.tar.gz # IMPORTANT NOTE: # @@ -61,55 +53,49 @@ Source2: ocaml_files.py # # https://pagure.io/fedora-ocaml # -# Current branch: fedora-45-5.4.1 +# Current branch: fedora-36-4.13.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 patches -Patch: 0001-Don-t-add-rpaths-to-libraries.patch -Patch: 0002-configure-Allow-user-defined-C-compiler-flags.patch +Patch0001: 0001-Don-t-add-rpaths-to-libraries.patch +Patch0002: 0002-configure-Allow-user-defined-C-compiler-flags.patch +Patch0003: 0003-configure-Remove-incorrect-assumption-about-cross-co.patch +Patch0004: 0004-configure-Only-use-OC_-for-building-executables.patch BuildRequires: make -BuildRequires: git-core +BuildRequires: git BuildRequires: gcc BuildRequires: autoconf +BuildRequires: binutils-devel +BuildRequires: ncurses-devel +BuildRequires: gdbm-devel BuildRequires: gawk BuildRequires: perl-interpreter -BuildRequires: annobin-annocheck -BuildRequires: pkgconfig(libzstd) - -# Documentation requirements -BuildRequires: asciidoc +BuildRequires: util-linux +BuildRequires: /usr/bin/annocheck +BuildRequires: chrpath # 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%{?_isa} = %{version}-%{release} +Requires: ocaml-runtime = %{version}-%{release} -# 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 +# Bundles an MD5 implementation in byterun/md5.{c,h} +Provides: bundled(md5-plumb) Provides: ocaml(compiler) = %{version} -%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_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' %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. @@ -121,16 +107,10 @@ 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. @@ -141,19 +121,16 @@ bytecode. %package source Summary: Source code for OCaml libraries -Requires: ocaml%{?_isa} = %{version}-%{release} +Requires: ocaml = %{version}-%{release} %description source Source code for OCaml libraries. %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%{?_isa} = %{version}-%{release} -Provides: ocamldoc = %{version} +Requires: ocaml = %{version}-%{release} +Provides: ocamldoc %description ocamldoc Documentation generator for OCaml. @@ -161,7 +138,6 @@ Documentation generator for OCaml. %package docs Summary: Documentation for OCaml -BuildArch: noarch Requires: ocaml = %{version}-%{release} @@ -174,7 +150,7 @@ This package contains man pages. %package compiler-libs Summary: Compiler libraries for OCaml -Requires: ocaml%{?_isa} = %{version}-%{release} +Requires: ocaml = %{version}-%{release} %description compiler-libs @@ -187,20 +163,6 @@ 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 %autosetup -S git -n %{name}-%{version}%{rcver} # Patches touch configure.ac, so rebuild it: @@ -215,65 +177,28 @@ unset MAKEFLAGS make=make %endif -# 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. # +# Force --host because of: +# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/2O4HBOK6PTQZAFAVIRDVMZGG2PYB2QHM/ +# (see also https://github.com/ocaml/ocaml/issues/8647) +# # 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 \ - --prefix=%{_prefix} \ - --sysconfdir=%{_sysconfdir} \ - --mandir=%{_mandir} \ +%configure \ + OC_CFLAGS="$CFLAGS" \ + OC_LDFLAGS="$LDFLAGS" \ --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} + --host=`./build-aux/config.guess` $make world %if %{native_compiler} $make opt $make opt.opt %endif -# 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 %{ocaml_native_compiler} @@ -286,154 +211,141 @@ annocheck -v hello ||: %endif %ifarch %{test_arches} +cd testsuite + %ifarch %{test_arches_required} -make -j1 tests +make -j1 all %else -make -j1 tests ||: +make -j1 all ||: %endif %endif %install %make_install - -# 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 +perl -pi -e "s|^$RPM_BUILD_ROOT||" $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf echo %{version} > $RPM_BUILD_ROOT%{_libdir}/ocaml/fedora-ocaml-release -# Remove the installed documentation. We will install it using %%doc -rm -rf $RPM_BUILD_ROOT%{_docdir}/ocaml +# Remove rpaths from stublibs .so files. +chrpath --delete $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs/*.so -mkdir -p $RPM_BUILD_ROOT%{rpmmacrodir} -install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{rpmmacrodir}/macros.ocaml-rpm +find $RPM_BUILD_ROOT -name .ignore -delete -mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat -install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat +# Remove this file. It's only created in certain situations and it's +# unclear why it is created at all. +rm -f $RPM_BUILD_ROOT%{_libdir}/ocaml/eventlog_metadata %files -%license LICENSE +%doc LICENSE %{_bindir}/ocaml %{_bindir}/ocamlcmt -%{_bindir}/ocamlcp %{_bindir}/ocamldebug -%{_bindir}/ocamlmklib -%{_bindir}/ocamlmktop -%{_bindir}/ocamlprof +#{_bindir}/ocaml-instr-graph +#{_bindir}/ocaml-instr-report %{_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/sys.ml.in - -%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.mli +%{_libdir}/ocaml/libcamlrun_shared.so +#%%{_libdir}/ocaml/objinfo_helper +%{_libdir}/ocaml/threads/*.mli %if %{native_compiler} -%{_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 +%{_libdir}/ocaml/threads/*.a +%{_libdir}/ocaml/threads/*.cmxa +%{_libdir}/ocaml/threads/*.cmx %endif -%if %{natdynlink} -%{_libdir}/ocaml/{runtime_events,str,unix}/*.cmxs -%endif - -# headers %{_libdir}/ocaml/caml %files runtime -%doc README.html Changes -%license LICENSE +%doc README.adoc LICENSE Changes %{_bindir}/ocamlrun -%{_bindir}/*ocamlrun-a100 %{_bindir}/ocamlrund -%{_bindir}/*ocamlrund-a100 %{_bindir}/ocamlruni -%{_bindir}/*ocamlruni-a100 %dir %{_libdir}/ocaml -%{_libdir}/ocaml/libasmrun*.so -%{_libdir}/ocaml/libcamlrun*.so +#%%{_libdir}/ocaml/VERSION %{_libdir}/ocaml/*.cmo %{_libdir}/ocaml/*.cmi %{_libdir}/ocaml/*.cma -%{_libdir}/ocaml/ld.conf +%{_libdir}/ocaml/camlheaderd +%{_libdir}/ocaml/camlheaderi %{_libdir}/ocaml/stublibs -%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 %files source -%license LICENSE +%doc LICENSE %{_libdir}/ocaml/*.ml %{_libdir}/ocaml/*.cmt* %{_libdir}/ocaml/*/*.cmt* %files ocamldoc -%license LICENSE +%doc LICENSE %doc ocamldoc/Changes.txt %{_bindir}/ocamldoc* %{_libdir}/ocaml/ocamldoc @@ -445,129 +357,21 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat %files compiler-libs -%license LICENSE -%{_libdir}/ocaml/compiler-libs - - -%files rpm-macros -%{rpmmacrodir}/macros.ocaml-rpm -%{_rpmconfigdir}/redhat/ocaml_files.py +%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 %changelog -* Thu Jul 16 2026 Fedora Release Engineering - 5.5.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild - -* Tue Jun 23 2026 Jerry James - 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 - 5.4.1-4 -- Backport fix for arm64 frame pointers - -* Fri Feb 20 2026 Richard W.M. Jones - 5.4.1-1 -- New upstream version 5.4.1 (RHBZ#2440356) - -* Fri Jan 16 2026 Fedora Release Engineering - 5.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild - -* Mon Oct 13 2025 Richard W.M. Jones - 5.4.0-1 -- New upstream version 5.4.0 (RHBZ#2368289) - -* Thu Jul 24 2025 Fedora Release Engineering - 5.3.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Sun Jun 22 2025 Yaakov Selkowitz - 5.3.0-3 -- Fix RPM macros for Python 3.14 - -* Fri Jan 17 2025 Fedora Release Engineering - 5.3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Thu Jan 9 2025 Jerry James - 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 - 5.2.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jun 19 2024 Richard W.M. Jones - 5.2.0-2 -- Add fix for ppc64le code generation issue found after 5.2.0 was released - -* Thu May 23 2024 Jerry James - 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 - 5.1.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sun Jan 21 2024 Fedora Release Engineering - 5.1.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Dec 18 2023 Richard W.M. Jones - 5.1.1-2 -- Add s390x code generation fix - https://github.com/ocaml/ocaml/issues/12829 - -* Mon Dec 11 2023 Richard W.M. Jones - 5.1.1-1 -- New upstream version 5.1.1 (RHBZ#2239227) - -* Tue Nov 14 2023 Yaakov Selkowitz - 5.1.0-5 -- Drop unused BR parallel - -* Fri Oct 06 2023 Richard W.M. Jones - 5.1.0-4 -- Use BR ocaml-srpm-macros to force latest to be built against - -* Thu Oct 05 2023 Richard W.M. Jones - 5.1.0-3 -- Rebuild against updated ocaml-srpm-macros - -* Thu Oct 5 2023 Richard W.M. Jones - 5.1.0-2 -- Add upstream patch added after 5.1.0 - -* Wed Oct 4 2023 Jerry James - 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 - 5.0.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Wed Jul 12 2023 Richard W.M. Jones - 5.0.0-3 -- Force ocaml-srpm-macros to be the latest version. - -* Wed Jun 14 2023 Jerry James - 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 - 4.14.0-5 -- Rebuild OCaml packages for F38 - -* Thu Jan 19 2023 Fedora Release Engineering - 4.14.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Mon Sep 5 2022 Richard W.M. Jones - 4.14.0-3 -- Include more upstream patches from 4.14 branch - -* Fri Jul 22 2022 Fedora Release Engineering - 4.14.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sat Jun 18 2022 Richard W.M. Jones - 4.14.0-1 -- New upstream version 4.14.0 - -* Thu Jun 9 2022 Jerry James - 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 - 4.13.1-4 - Rebuild 4.13.1 to remove package notes diff --git a/ocaml_files.py b/ocaml_files.py deleted file mode 100644 index 0e4658e..0000000 --- a/ocaml_files.py +++ /dev/null @@ -1,451 +0,0 @@ -# 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) diff --git a/sources b/sources index 7c0afd0..e1aeb8a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ocaml-5.5.0.tar.gz) = bf13c18cd1fc7b2e5e9623024ea8623710f646ff2fbc0f59dab70e4d4318ed8623bdcc3ec59ce37af07af2b767f520dea23fb474c26297b3e858b6c8e080b4e6 +SHA512 (4.13.1.tar.gz) = da3434177438c852da53c0fda7bc2519adcda6384d97d45e44137ed0fd384ffb3da61958a7b51296edb3f88f5a5310ca71b6862f6d756aaa4012d1f54e5955f6 diff --git a/tests/basic-test.sh b/tests/basic-test.sh deleted file mode 100755 index 514bea0..0000000 --- a/tests/basic-test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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 diff --git a/tests/tests.yml b/tests/tests.yml deleted file mode 100755 index b9ec89a..0000000 --- a/tests/tests.yml +++ /dev/null @@ -1,11 +0,0 @@ -- hosts: localhost - roles: - - role: standard-test-basic - tags: - - classic - required_packages: - - ocaml - tests: - - simple: - dir: . - run: ./basic-test.sh