1 %define __strip %{_mingw32_strip}
2 %define __objdump %{_mingw32_objdump}
3 %define _use_internal_dependency_generator 0
4 %define __find_requires %{_mingw32_findrequires}
5 %define __find_provides %{_mingw32_findprovides}
7 %define debug_package %{nil}
9 %define otherlibraries win32unix str num dynlink bigarray systhreads win32graph
14 Summary: Objective Caml MinGW cross-compiler and programming environment
16 License: QPL and (LGPLv2+ with exceptions)
17 Group: Development/Libraries
19 URL: http://caml.inria.fr/
20 Source0: http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-%{version}.tar.bz2
22 # This is installed as config/Makefile when we cross-compile.
23 Source1000: Makefile-fedora-mingw.in
25 # XXX We should apply any Fedora native patches here.
27 # For patch description, see the top of each patch file.
28 # Start numbering at 1000 since these are MinGW-specific patches.
29 Patch1000: mingw32-ocaml-3.11.0+beta1-combined-Makefile.patch
30 Patch1001: mingw32-ocaml-3.11.0+beta1-disable-cmxs.patch
31 Patch1002: mingw32-ocaml-3.11.0+beta1-filename-win32-dirsep.patch
32 Patch1003: mingw32-ocaml-3.11.0+beta1-i386-profiling.patch
33 Patch1004: mingw32-ocaml-3.11.0+beta1-no-stdlib-dir.patch
34 Patch1005: mingw32-ocaml-3.11.0+beta1-win32-fixes.patch
35 Patch1006: mingw32-ocaml-3.11.0+beta1-win32unix-path.patch
37 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
41 BuildRequires: mingw32-filesystem >= 30
42 BuildRequires: mingw32-gcc
43 BuildRequires: mingw32-binutils
44 BuildRequires: mingw32-flexdll
46 # While we still ship bytecode, this requires a /usr/bin/ocamlrun from
47 # the _identical_ native package. We don't have that at the moment,
48 # which is why this is commented out.
49 #Requires: ocaml-runtime = %{version}
51 # The built program will try to run the cross-compiler and flexdll, so
52 # these must be runtime requires.
54 Requires: mingw32-binutils
55 Requires: mingw32-flexdll
57 # i686-pc-mingw32-ocamlmklib tries to run ocamlopt which is probably a
58 # bug, but requires this (XXX).
63 Objective Caml is a high-level, strongly-typed, functional and
64 object-oriented programming language from the ML family of languages.
66 This package is an OCaml cross-compiler which runs natively on Fedora
67 and produces Windows native executables.
71 %setup -q -n ocaml-%{version}
83 # Don't run out of memory.
86 # Build native ocamlrun and ocamlc which contain the filename-win32-dirsep
91 -libdir %{_libdir}/ocaml \
92 -mandir %{_mandir}/man1
95 # Now move the working ocamlrun, ocamlc into the boot/ directory,
96 # overwriting the binary versions which ship with the compiler with
97 # ones that contain the above filename-win32-dirsep patch.
100 # Now replace the compiler configuration (config/{s.h,m.h,Makefile})
101 # with ones as they would be on a 32 bit Windows system.
104 # config/m.h can just be copied from config/m-nt.h which ships.
108 # config/s.h can just be copied from config/s-nt.h which ships.
112 # config/Makefile is a custom one which we supply.
115 -e 's,@prefix@,%{_prefix},g' \
116 -e 's,@bindir@,%{_bindir},g' \
117 -e 's,@libdir@,%{_libdir},g' \
118 -e 's,@target@,%{_mingw32_target},g' \
119 -e 's,@otherlibraries@,%{otherlibraries},g' \
120 < %{SOURCE1000} > Makefile
124 # We're going to build in otherlibs/win32unix and otherlibs/win32graph
125 # directories, but since they would normally only be built under
126 # Windows, they only have the Makefile.nt files. Just symlink
127 # Makefile -> Makefile.nt for these cases.
128 for d in otherlibs/win32unix otherlibs/win32graph; do
129 ln -s Makefile.nt $d/Makefile
132 # Now clean the temporary files from the previous build. This
133 # will also cause asmcomp/arch.ml (etc) to be linked to the 32 bit
134 # i386 versions, essentially causing ocamlopt to use the Win/i386 code
138 # Just rebuild some small bits that we need for the following
139 # 'make opt' to work. Note that 'make all' fails here.
140 make -C byterun libcamlrun.a
143 make -C tools ocamlmklib
150 rm -rf $RPM_BUILD_ROOT
152 mkdir -p $RPM_BUILD_ROOT%{_bindir}
153 mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml
154 mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml/threads
155 mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml/stublibs
157 # This is the equivalent of 'make install installopt', but
158 # we only want to install the parts which are really necessary
159 # for the cross-compiler. eg. We don't need any of the native
160 # tools like ocamllex or ocamldoc.
161 %define makevars BINDIR=$RPM_BUILD_ROOT%{_bindir} LIBDIR=$RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml
162 make %{makevars} -C byterun install
163 make %{makevars} -C stdlib install
164 for i in %{otherlibraries}; do
165 make %{makevars} -C otherlibs/$i install
167 make %{makevars} -C tools install
168 make %{makevars} installopt
171 $RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml/Makefile.config
173 # For bytecode binaries, change the bang-path to point to the locally
174 # installed ocamlrun.
175 pushd $RPM_BUILD_ROOT%{_bindir}
176 for f in ocamlcp ocamldep ocamlmklib ocamlopt ocamlprof; do
178 echo '#!%{_bindir}/%{_mingw32_target}-ocamlrun' > $f
179 tail -n +2 $f.old >> $f
185 # Rename all the binaries to target-binary.
186 pushd $RPM_BUILD_ROOT%{_bindir}
187 for f in ocamlcp ocamldep ocamlmklib ocamlmktop ocamlopt ocamlprof ocamlrun; do
188 mv $f %{_mingw32_target}-$f
194 rm -rf $RPM_BUILD_ROOT
198 %defattr(-,root,root)
199 %{_bindir}/%{_mingw32_target}-ocamlcp
200 %{_bindir}/%{_mingw32_target}-ocamldep
201 %{_bindir}/%{_mingw32_target}-ocamlmklib
202 %{_bindir}/%{_mingw32_target}-ocamlmktop
203 %{_bindir}/%{_mingw32_target}-ocamlprof
204 %{_bindir}/%{_mingw32_target}-ocamlopt
205 %{_bindir}/%{_mingw32_target}-ocamlrun
206 %{_libdir}/%{_mingw32_target}-ocaml/
210 * Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-7
211 - Further requirements.
213 * Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-6
214 - Install tools, particularly ocamlmklib.
216 * Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-5
217 - +Requires mingw32-flexdll and the cross-compiler.
219 * Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-4
220 - Initial RPM release.