%define majorminor %(echo %version | cut -d. -f 1-2)

Name:          ocaml
Version:       4.09.0
Release:       4mamba
Summary:       The OCaml compiler and programming environment
Group:         Applications/Development
Vendor:        openmamba
Distribution:  openmamba
Packager:      Davide Madrisan <davide.madrisan@gmail.com>
URL:           http://www.ocaml.org
Source0:       http://caml.inria.fr/pub/distrib/ocaml-%{majorminor}/ocaml-%{version}.tar.xz
Source1:       http://caml.inria.fr/pub/distrib/ocaml-%{majorminor}/ocaml-%{majorminor}-refman.pdf
Source2:       http://caml.inria.fr/pub/distrib/ocaml-%{majorminor}/ocaml-%{majorminor}-refman-html.tar.gz
Source3:       http://caml.inria.fr/pub/distrib/ocaml-%{majorminor}/ocaml-%{majorminor}-refman.info.tar.gz
License:       LGPL
## AUTOBUILDREQ-BEGIN
BuildRequires: glibc-devel
BuildRequires: libX11-devel
BuildRequires: libbinutils-devel
## AUTOBUILDREQ-END
BuildRequires: emacs-nox
BuildRequires: ocaml-runtime >= %{?epoch:%epoch:}%{version}
BuildRequires: libgdbm-devel
Requires:      %{name}-runtime = %{?epoch:%epoch:}%{version}-%{release}
Requires:      gcc
BuildRoot:     %{_tmppath}/%{name}-%{version}-root

# FIXME:
#
# BFD library not found, 'objinfo' will be unable to display info on .cmxs files
#  ./hasgot -i bfd.h && \
#  ./hasgot -lbfd -ldl -liberty -lz bfd_openr; then

%description
OCaml is a general-purpose programming language, designed with program safety and reliability in mind.
It is very expressive, yet easy to learn and use.
OCaml supports functional, imperative, and object-oriented programming styles.

It has been developed and distributed by INRIA, France's national research institute for computer science, since 1985.

This package provides in particular the following tools:
 * ocamlc: the OCaml batch compiler,
 * ocamlopt: the OCaml high-performance native-code compiler, 
 * ocamldep: the dependency generator (in a format suitable for the make utility),
 * ocaml: the interactive (command-line) toplevel system,
 * ocamlmktop: builds OCaml toplevels that contain user code preloaded at start-up,
 * ocamllex: the OCaml lexical analyser, very close to lex,
 * ocamlyacc: the OCaml parser generator, in the style yacc.
 * ocamldebug: the OCaml source-level replay debugger,
 * ocamlprof: the OCaml profiling tool,
     for programs compiled in profiling mode by using either
     ocamlcp: the front-end to the ocamlc compiler
      or
     ocamloptp: the front-end to the ocamlopt compiler,
 * ocamlbuild:
     automates the compilation of most OCaml projects with minimal user intervention,
 * ocamlmklib: a tool for building mixed C/OCaml libraries
 * ocamlobjinfo: a tool for displaying informations on files

%package runtime
Group:         Applications/Development
Summary:       OCaml runtime environment
Provides:      ocaml(runtime) = %{?epoch:%epoch:}%{version}-%{release}

%description runtime
This package contains the runtime environment needed to run OCaml bytecode.
In particular the OCaml bytecode interpreter: ocamlrun.

%package camlp4
Summary:       Pre-Processor-Pretty-Printer for OCaml
Requires:      %{name}-runtime = %{?epoch:%epoch:}%{version}-%{release}

%description camlp4
Camlp4 is a Pre-Processor-Pretty-Printer for OCaml, parsing a source file and printing some result on standard output.
This package contains the runtime files.

%package camlp4-devel
Summary:       Pre-Processor-Pretty-Printer for OCaml
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}
Requires:      %{name}-camlp4 = %{?epoch:%epoch:}%{version}-%{release}

%description camlp4-devel
Camlp4 is a Pre-Processor-Pretty-Printer for OCaml, parsing a source file and printing some result on standard output.
RPM_OPT_FLAGS=`$RPM_OPT_FLAGS | sed "s|-fomit-frame-pointer||"
export RPM_OPT_FLAGS

This package contains the development files.

%package x11
Summary:       X11 support for OCaml
Requires:      %{name}-runtime = %{?epoch:%epoch:}%{version}-%{release}
Requires:      libX11-devel

%description x11
X11 support for OCaml.

%package labltk
Group:         Applications/Development
Summary:       Tk bindings for OCaml
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}

%description labltk
Labltk is a library for interfacing OCaml with the scripting language Tcl/Tk.

This package contains the runtime files.

%package labltk-devel
Group:         Development/Libraries
Summary:       Development files for labltk
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}
Requires:      %{name}-labltk = %{?epoch:%epoch:}%{version}-%{release}
Requires:      libX11-devel
Requires:      libtcl-devel
Requires:      libtk-devel

%description labltk-devel
Labltk is a library for interfacing OCaml with the scripting language Tcl/Tk.
This package contains the development files.

%package emacs
Group:         Applications/Development
Summary:       Emacs mode for OCaml
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}
Requires:      emacs-nox

%description emacs
Emacs mode for OCaml.

%package ocamldoc
Group:         Applications/Development
Summary:       Documentation generator for OCaml
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}

%description ocamldoc
Documentation generator for OCaml.

%package docs
Group:         Documentation
Summary:       Documentation for OCaml
Requires:      %{name} = %{?epoch:%epoch:}%{version}-%{release}
Requires(post): %{__install_info}
Requires(preun): %{__install_info}
Provides:      %{name}-manual = %{?epoch:%epoch:}%{version}-%{release}
Obsoletes:     %{name}-manual

%description docs
OCaml is a general-purpose programming language, designed with program safety and reliability in mind.
This package contains documentation in PDF and HTML format as well as man pages and info files.

%debug_package

%prep
%setup -q -a2 -a3
cp %{S:1} refman.pdf

%build
%configure \
   --libdir=%{_libdir}/ocaml \
   --with-pic

#./configure \
#   -host %{_host} \
#%ifnarch arm
#   -cc "gcc ${RPM_OPT_FLAGS}" \
#%endif
#   -bindir %{_bindir} \
#   -libdir %{_libdir}/ocaml \
#   -mandir %{_mandir}/man1

%make -j1 world.opt
#% make -j1 -C emacs ocamltags
%make -j1 -C ocamldoc all

%install
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"

%makeinstall \
   LIBDIR=%{_libdir}/ocaml \

#cd emacs
#%makeinstall \
#   BINDIR=%{buildroot}%{_bindir} \
#   EMACSDIR=%{buildroot}%{_datadir}/emacs/site-lisp
#make install-ocamltags BINDIR=%{buildroot}%{_bindir}
#cd ..

mkdir -p %{buildroot}%{_infodir}
cd infoman
cp ocaml*.gz %{buildroot}%{_infodir}

%clean
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"

%post docs
%install_info %{name}.info
exit 0

%preun docs
if [ $1 -eq 0 ]; then
   %uninstall_info %{name}.info
fi
exit 0

%files
%defattr(-,root,root)
%{_bindir}/ocaml
#%{_bindir}/ocamlbuild
#%{_bindir}/ocamlbuild.byte
#%{_bindir}/ocamlbuild.native
%{_bindir}/ocamlc
%{_bindir}/ocamlc.byte
%{_bindir}/ocamlc.opt
%{_bindir}/ocamlcmt
%{_bindir}/ocamlcp.byte
%{_bindir}/ocamlcp.opt
%{_bindir}/ocamldep.byte
%{_bindir}/ocamllex.byte
%{_bindir}/ocamlmklib.byte
%{_bindir}/ocamlmklib.opt
%{_bindir}/ocamlmktop.byte
%{_bindir}/ocamlmktop.opt
%{_bindir}/ocamlobjinfo.byte
%{_bindir}/ocamlobjinfo.opt
%{_bindir}/ocamlopt.byte
%{_bindir}/ocamlprof.byte
%{_bindir}/ocamlprof.opt
%{_bindir}/ocamlrund
%{_bindir}/ocamlruni
%{_bindir}/ocamlcp
%{_bindir}/ocamldebug
%{_bindir}/ocamldep
%{_bindir}/ocamldep.opt
%{_bindir}/ocamllex
%{_bindir}/ocamllex.opt
%{_bindir}/ocamlmklib
%{_bindir}/ocamlmktop
%{_bindir}/ocamlobjinfo
%{_bindir}/ocamlopt
%{_bindir}/ocamlopt.opt
#%{_bindir}/ocamloptp
#%{_bindir}/ocamloptp.byte
#%{_bindir}/ocamloptp.opt
%{_bindir}/ocamlprof
%{_bindir}/ocamlyacc
%{_bindir}/ocaml-instr-graph
%{_bindir}/ocaml-instr-report
#
%{_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
%{_libdir}/ocaml/*.cmxs
%{_libdir}/ocaml/*.cmxa
%{_libdir}/ocaml/*.cmx
%{_libdir}/ocaml/*.o
%{_libdir}/ocaml/*.ml
%{_libdir}/ocaml/*.mli
%{_libdir}/ocaml/libcamlrun_shared.so
%{_libdir}/ocaml/libasmrun_shared.so
%{_libdir}/ocaml/objinfo_helper
%{_libdir}/ocaml/compiler-libs/
%ifarch x86_64
%{_libdir}/ocaml/stublibs/dllraw_spacetime_lib.so
%endif
#%{_libdir}/ocaml/vmthreads/*.a
#%{_libdir}/ocaml/vmthreads/*.mli
%{_libdir}/ocaml/threads/*.a
%{_libdir}/ocaml/threads/*.cmx
%{_libdir}/ocaml/threads/*.cmxa
%{_libdir}/ocaml/caml
%{_libdir}/ocaml/camlheaderd
%{_libdir}/ocaml/camlheaderi
%{_mandir}/man1/ocaml.*
%{_mandir}/man1/ocamlc.*
%{_mandir}/man1/ocamlcp.*
%{_mandir}/man1/ocamldebug.*
%{_mandir}/man1/ocamldep.*
%{_mandir}/man1/ocamllex.*
%{_mandir}/man1/ocamlmktop.*
%{_mandir}/man1/ocamlopt.*
%{_mandir}/man1/ocamloptp.*
%{_mandir}/man1/ocamlprof.*
%{_mandir}/man1/ocamlyacc.*
%doc LICENSE

%files runtime
%defattr(-,root,root)
%{_bindir}/ocamlrun
%{_libdir}/ocaml/VERSION
%{_libdir}/ocaml/*.cmo
%{_libdir}/ocaml/*.cmi
%{_libdir}/ocaml/*.cma
%{_libdir}/ocaml/*.cmt
%{_libdir}/ocaml/*.cmti
%dir %{_libdir}/ocaml/stublibs
#%{_libdir}/ocaml/stublibs/dllbigarray.so
%{_libdir}/ocaml/stublibs/dllcamlstr.so
#%{_libdir}/ocaml/stublibs/dllgraphics.so
##%{_libdir}/ocaml/stublibs/dllnums.so
%{_libdir}/ocaml/stublibs/dllthreads.so
%{_libdir}/ocaml/stublibs/dllunix.so
#%{_libdir}/ocaml/stublibs/dllvmthreads.so
%dir %{_libdir}/ocaml/threads
%{_libdir}/ocaml/threads/*.cmi
%{_libdir}/ocaml/threads/*.cmti
%{_libdir}/ocaml/threads/*.cma
%{_libdir}/ocaml/threads/*.mli
%{_mandir}/man1/ocamlrun.*

#%files x11
#%defattr(-,root,root)
#%{_libdir}/ocaml/graphicsX11.cmi
#%{_libdir}/ocaml/graphicsX11.mli

#%files emacs
#%defattr(-,root,root)
#%{_datadir}/emacs/site-lisp/*
#%{_bindir}/ocamltags
##%doc emacs/README

%files ocamldoc
%defattr(-,root,root)
%{_bindir}/ocamldoc*
%{_libdir}/ocaml/ocamldoc
%{_mandir}/man1/ocamldoc.*

%files docs
%defattr(-,root,root)
%{_infodir}/*
%{_mandir}/man3/*
#%doc Changes
#%doc refman.pdf htmlman

%changelog
* Mon Dec 30 2019 Silvan Calarco <silvan.calarco@mambasoft.it> 4.09.0-4mamba
- rebuilt with recent gcc and --with-pic

* Fri Nov 22 2019 Silvan Calarco <silvan.calarco@mambasoft.it> 4.09.0-3mamba
- ocaml-runtime: add provide ocaml(runtime)

* Fri Nov 22 2019 Silvan Calarco <silvan.calarco@mambasoft.it> 4.09.0-2mamba
- rebuilt with ocaml-runtime 4.09.0 to fix requirement on previous version

* Fri Nov 15 2019 Automatic Build System <autodist@mambasoft.it> 4.09.0-1mamba
- automatic version update by autodist

* Thu Apr 25 2019 Automatic Build System <autodist@mambasoft.it> 4.07.1-1mamba
- automatic version update by autodist

* Sun Apr 21 2019 Silvan Calarco <silvan.calarco@mambasoft.it> 4.07.0-1mamba
- update to 4.07.0

* Tue Jan 21 2014 Silvan Calarco <silvan.calarco@mambasoft.it> 4.01.0-2mamba
- labtk-devel: require libtcl-devel and libtk-devel instead of libtcl85-devel and libtk85-devel

* Sun Nov 24 2013 Automatic Build System <autodist@mambasoft.it> 4.01.0-1mamba
- automatic version update by autodist

* Tue Jul 09 2013 Davide Madrisan <davide.madrisan@gmail.com> 4.00.1-4mamba
- new subpackage runtime, camlp4, camlp4-devel, x11, and ocamldoc
- build requires libtcl85-devel and libtk85-devel

* Mon Jul 01 2013 Automatic Build System <autodist@mambasoft.it> 4.00.1-3mamba
- pass -host option to configure to build for arm generic and fix rpi target

* Mon Jun 24 2013 Silvan Calarco <silvan.calarco@mambasoft.it> 4.00.1-2mamba
- added labltk and emacs subpackages

* Mon Jun 17 2013 Davide Madrisan <davide.madrisan@gmail.com> 4.00.1-1mamba
- update to 4.00.1

* Wed Oct 24 2012 Silvan Calarco <silvan.calarco@mambasoft.it> 3.12.1-4mamba
- rebuilt with binutils 2.23

* Wed Nov 30 2011 Automatic Build System <autodist@mambasoft.it> 3.12.1-3mamba
- automatic update by autodist

* Mon Nov 28 2011 Automatic Build System <autodist@mambasoft.it> 3.12.1-2mamba
- automatic update by autodist

* Tue Jul 19 2011 Automatic Build System <autodist@mambasoft.it> 3.12.1-1mamba
- automatic update by autodist

* Sun Dec 26 2010 Automatic Build System <autodist@mambasoft.it> 3.12.0-2mamba
- automatic update by autodist

* Fri Dec 17 2010 Silvan Calarco <silvan.calarco@mambasoft.it> 3.12.0-1mamba
- update to 3.12.0

* Tue Feb 09 2010 Automatic Build System <autodist@mambasoft.it> 3.11.2-1mamba
- automatic update by autodist

* Fri Nov 13 2009 Davide Madrisan <davide.madrisan@gmail.com> 3.11.1-2mamba
- fix compilation issues
- build ocamlopt

* Fri Jun 26 2009 Automatic Build System <autodist@mambasoft.it> 3.11.1-1mamba
- automatic update by autodist

* Mon Dec 08 2008 Silvan Calarco <silvan.calarco@mambasoft.it> 3.11.0-1mamba
- update to 3.11.0

* Mon Dec 08 2008 Silvan Calarco <silvan.calarco@mambasoft.it> 3.10.2-1mamba
- automatic update by autodist

* Mon Nov 05 2007 Aleph0 <aleph0@openmamba.org> 3.10.0-3mamba
- rebuild

* Sat Sep 29 2007 Aleph0 <aleph0@openmamba.org> 3.10.0-2mamba
- add official reference manual

* Fri Sep 28 2007 Aleph0 <aleph0@openmamba.org> 3.10.0-1mamba
- update to 3.10.0

* Fri Mar 02 2007 Aleph0 <aleph0@openmamba.org> 3.09.3-1qilnx
- package created by autospec
