Fix tests on 64-bit systems with the -test-lib64 patch.

- Add -emacs-iedit patch to adapt to recent iedit changes.
- Build with auto-complete, company-mode, and caml-mode support.
- Add subpackages: dot-merlin-reader, emacs-merlin, and vim-merlin.
- Generate autoloads for the Emacs interface.
This commit is contained in:
Jerry James 2021-03-26 16:21:22 -06:00
parent a44280fd07
commit 88df21fcb3
3 changed files with 183 additions and 60 deletions

38
ocaml-merlin-iedit.patch Normal file
View File

@ -0,0 +1,38 @@
--- a/emacs/merlin-company.el 2021-02-16 03:29:29.000000000 -0700
+++ b/emacs/merlin-company.el 2021-03-09 16:53:30.948523612 -0700
@@ -29,6 +29,7 @@
(defcustom merlin-company-everywhere t
"Non-nil to offer completions in comments and strings."
+ :group 'merlin
:type 'boolean)
;; Internal functions
--- a/emacs/merlin-iedit.el 2021-02-16 03:29:29.000000000 -0700
+++ b/emacs/merlin-iedit.el 2021-03-10 09:03:03.533151403 -0700
@@ -32,8 +32,8 @@
iedit-read-only-occurrences-overlays)
(push (iedit-make-occurrence-overlay beginning ending)
iedit-occurrences-overlays))))
- (when (and occurrences iedit-unmatched-lines-invisible)
- (iedit-hide-unmatched-lines iedit-occurrence-context-lines))))
+ (when (and occurrences iedit-hiding)
+ (iedit-hide-context-lines iedit-occurrence-context-lines))))
(length occurrences))
(defun merlin-iedit-occurrences ()
@@ -44,10 +44,10 @@
"-identifier-at" (merlin/unmake-point (point)))))
(when r
(if (listp r)
- (flet ((iedit-printable (a)
- (merlin-iedit--printable))
- (iedit-make-occurrences-overlays (a b c)
- (merlin-iedit--make-occurrences-overlays a)))
+ (cl-flet ((iedit-printable (a)
+ (merlin-iedit--printable))
+ (iedit-make-occurrences-overlays (a b c)
+ (merlin-iedit--make-occurrences-overlays a)))
(iedit-start r (point-min) (point-max)))
(message r))))))

View File

@ -0,0 +1,10 @@
--- a/tests/merlin-wrapper 2021-02-16 02:59:33.000000000 -0700
+++ b/tests/merlin-wrapper 2021-02-23 15:54:14.988017568 -0700
@@ -4,6 +4,6 @@ export PATH=$(dirname dot-merlin-reader)
touch .merlin && ocamlmerlin "$@" \
| jq 'del(.timing)' \
- | sed -e 's:"[^"]*lib/ocaml:"lib/ocaml:g' \
+ | sed -re 's:"[^"]*lib(64)?/ocaml:"lib/ocaml:g' \
| sed -e 's:\\n:\
:g'

View File

@ -1,89 +1,164 @@
Name: ocaml-merlin
%ifnarch %{ocaml_native_compiler}
%global debug_package %{nil}
%endif
%global srcname merlin
Name: ocaml-%{srcname}
Version: 4.1
Release: 1%{?dist}
Summary: Context sensitive completion for OCaml in Vim and Emacs
Release: 2%{?dist}
Summary: Context sensitive completion for OCaml
%global libname %(echo %{name} | sed -e 's/^ocaml-//')
# The entire source is MIT except src/ocaml are QPL
# The entire source is MIT except:
# - QPL: src/ocaml/driver/pparse.ml{,i}
# - QPL: src/ocaml/preprocess/lexer_ident.mll
# - QPL: src/ocaml/preprocess/lexer_raw.ml{i,l}
# - LGPLv2 with exceptions: src/ocaml/preprocess/parser_raw.mly
# - LGPLv2 with exceptions: upstream/ocaml_411/parsing/parser.mly
# - LGPLv2 with exceptions: upstream/ocaml_412/parsing/parser.mly
#
# The final license is due to the linking exception on the LGPLv2 files.
License: MIT and QPL
URL: https://github.com/ocaml/%{libname}
Source0: https://github.com/ocaml/%{libname}/archive/v%{version}.tar.gz#/%{libname}-%{version}.tar.gz
URL: https://ocaml.github.io/%{srcname}/
Source0: https://github.com/ocaml/%{srcname}/archive/v%{version}/%{srcname}-%{version}.tar.gz
# Fix the tests to work with /usr/lib64 as well as /usr/lib
Patch0: %{name}-test-lib64.patch
# Update the Emacs interface for recent changes to emacs-iedit
Patch1: %{name}-iedit.patch
BuildRequires: ocaml
BuildRequires: ocaml-dune >= 1.8
BuildRequires: ocaml-findlib-devel
BuildRequires: ocaml-yojson-devel
BuildRequires: ocaml-biniou-devel
BuildRequires: ocaml-easy-format-devel
BuildRequires: ocaml-csexp-devel
BuildRequires: ocaml-result-devel
# For merlin-lsp
#BuildRequires: ocaml-yojson-devel >= 1.6.0
#BuildRequires: ocaml-menhir-devel
#BuildRequires: ocaml-ppx-deriving-devel
#BuildRequires: ocaml-ppx-deriving-yojson-devel
#BuildRequires: ocaml-ppx-tools-devel
#BuildRequires: ocaml-ppx-derivers-devel
#BuildRequires: ocaml-migrate-parsetree-devel
#BuildRequires: ocaml-result-devel
# Required for tests, not available in Fedora
#BuildRequires: craml
BuildRequires: emacs
# For byte-compile elisp
#BuildRequires: emacs-auto-complete
#BuildRequires: emacs-tuareg
# The following two are not yet available in Fedora.
# So byte compilation is disabled
#BuildRequires: emacs-company
#BuildRequires: emacs-iedit
BuildRequires: emacs-auto-complete
BuildRequires: emacs-company-mode
BuildRequires: emacs-iedit
BuildRequires: emacs-tuareg
BuildRequires: jq
BuildRequires: ocaml >= 4.11.1
BuildRequires: ocaml-biniou-devel
BuildRequires: ocaml-caml-mode
BuildRequires: ocaml-csexp-devel >= 1.2.3
BuildRequires: ocaml-dune >= 2.7.0
BuildRequires: ocaml-easy-format-devel
BuildRequires: ocaml-findlib-devel >= 1.6.0
BuildRequires: ocaml-menhir-devel
BuildRequires: ocaml-odoc
BuildRequires: ocaml-result-devel >= 1.5
BuildRequires: ocaml-source
BuildRequires: ocaml-yojson-devel >= 1.6.0
BuildRequires: vim-enhanced
Requires: emacs-filesystem >= %{_emacs_version}
Requires: dot-merlin-reader%{?_isa} = %{version}-%{release}
%global _desc %{expand:
Merlin is an assistant for editing OCaml code. It aims to provide the
features available in modern IDEs: error reporting, auto completion,
source browsing and much more.}
%description %_desc
You should also install a package that integrates with your editor of
choice, such as emacs-merlin or vim-merlin.
%package -n dot-merlin-reader
Summary: Merlin configuration file reader
%description -n dot-merlin-reader
This package contains a helper process that reads .merlin files and gives
the normalized content to merlin.
%package -n emacs-merlin
Summary: Context sensitive completion for OCaml in Emacs
BuildArch: noarch
Requires: ocaml-merlin = %{version}-%{release}
Requires: emacs(bin) >= %{?_emacs_version}%{!?_emacs_version:0}
Requires: emacs-caml-mode
Recommends: emacs-auto-complete
Recommends: emacs-company-mode
Recommends: emacs-iedit
Recommends: emacs-tuareg
%description -n emacs-merlin %_desc
This package contains the Emacs interface to merlin.
%package -n vim-merlin
Summary: Context sensitive completion for OCaml in Vim
BuildArch: noarch
Requires: ocaml-merlin = %{version}-%{release}
Requires: vim-filesystem
%description
Merlin is an assistant for editing OCaml code. It aims to provide the features
available in modern IDEs: error reporting, auto completion, source browsing and
much more.
%description -n vim-merlin %_desc
This package contains the Vim interface to merlin.
%prep
%setup -q -n %{libname}-%{version}
%autosetup -n %{srcname}-%{version} -p1
%build
dune build %{_smp_mflags} --build-dir _build_%{libname} -p %{libname}
#dune build --build-dir _build_%{libname}_lsp -p %{libname}-lsp
dune build %{_smp_mflags}
dune build %{_smp_mflags} @doc
%install
dune install --build-dir _build_%{libname} --prefix=%{buildroot}%{_prefix} --libdir=%{buildroot}%{_libdir}/ocaml %{libname}
#dune install --build-dir _build_%{libname}_lsp --prefix=%{buildroot}%{_prefix} --libdir=%{buildroot}%{_libdir}/ocaml %{libname}-lsp
dune install --destdir=%{buildroot}
# We do not want the dune markers
find _build/default/_doc/_html -name .dune-keep -delete
# We do not want the ml files
find %{buildroot}%{_libdir}/ocaml -name \*.ml -delete
# We install the documentation with the doc macro
rm -fr %{buildroot}%{_prefix}/doc
%ifarch %{ocaml_native_compiler}
# Add missing executable bits
find %{buildroot}%{_libdir}/ocaml -name \*.cmxs -exec chmod a+x {} \+
%endif
# Reinstall vim files to Fedora default location
mkdir -p %{buildroot}%{vimfiles_root}
mv %{buildroot}%{_datadir}/%{libname}/vim/* %{buildroot}%{vimfiles_root}
rmdir %{buildroot}%{_datadir}/%{libname}/vim
rmdir %{buildroot}%{_datadir}/%{libname}
# Reinstall documents using %%doc later
rm -fr %{buildroot}%{_prefix}/doc
mv %{buildroot}%{_datadir}/%{srcname}/vim/* %{buildroot}%{vimfiles_root}
rm -fr %{buildroot}%{_datadir}/%{srcname}
# Generate the autoload file for the Emacs interface and byte compile
cd %{buildroot}%{_emacs_sitelispdir}
emacs -batch --no-init-file --no-site-file \
--eval "(progn (setq generated-autoload-file \"$PWD/merlin-autoloads.el\" backup-inhibited t) (update-directory-autoloads \".\"))"
mkdir -p %{buildroot}%{_emacs_sitestartdir}
mv merlin-autoloads.el %{buildroot}%{_emacs_sitestartdir}
%_emacs_bytecompile *.el
cd -
%check
# Test requirement is not satisfied in Fedora
dune runtest
%files
%doc doc/* featuremap.* README.md CHANGES.md
%doc featuremap.* CHANGES.md README.md
%license LICENSE
%{_bindir}/*
%{_libdir}/ocaml/%{libname}
#%{_libdir}/ocaml/%{libname}-lsp
%{_emacs_sitelispdir}/*
%{_bindir}/ocamlmerlin
%{_bindir}/ocamlmerlin-server
%{_libdir}/ocaml/%{srcname}/
%files -n dot-merlin-reader
%license LICENSE
%{_bindir}/dot-merlin-reader
%{_libdir}/ocaml/dot-merlin-reader/
%files -n emacs-merlin
%{_emacs_sitelispdir}/merlin*
%{_emacs_sitestartdir}/merlin-autoloads.el
%files -n vim-merlin
%{vimfiles_root}/*/*
%changelog
* Fri Mar 26 2021 Jerry James <loganjerry@gmail.com> - 4.1-2
- Fix tests on 64-bit systems with the -test-lib64 patch
- Add -emacs-iedit patch to adapt to recent iedit changes
- Build with auto-complete, company-mode, and caml-mode support
- Add subpackages: dot-merlin-reader, emacs-merlin, and vim-merlin
- Generate autoloads for the Emacs interface
* Mon Mar 1 2021 Richard W.M. Jones <rjones@redhat.com> - 4.1-1
- New upstream version 4.1.
- OCaml 4.12.0 build