+# Built-in strip corrupts binaries, so use the mingw32 strip instead:
%define __strip %{_mingw32_strip}
%define __objdump %{_mingw32_objdump}
-%define _use_internal_dependency_generator 0
-%define __find_requires %{_mingw32_findrequires}
-%define __find_provides %{_mingw32_findprovides}
%define debug_package %{nil}
Name: mingw32-ocaml
Version: 3.11.0+beta1
-Release: 6%{?dist}
+Release: 14%{?dist}
Summary: Objective Caml MinGW cross-compiler and programming environment
License: QPL and (LGPLv2+ with exceptions)
# This is installed as config/Makefile when we cross-compile.
Source1000: Makefile-fedora-mingw.in
+Source1001: README.Fedora
# XXX We should apply any Fedora native patches here.
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Is it noarch? (XXX)
+# Answer: yes and no. In theory it should be, but because we install
+# Windows binaries in %{_libdir}, the path is different if built on
+# 32 and 64 bit platforms. We should probably install the binaries
+# in /usr/share.
BuildArch: noarch
BuildRequires: mingw32-filesystem >= 30
BuildRequires: mingw32-binutils
BuildRequires: mingw32-flexdll
+# These are required so we can use gcc -m32 and link to 32 bit X11:
+BuildRequires: /lib/libgcc_s.so.1
+BuildRequires: /usr/lib/crt1.o
+BuildRequires: /usr/lib/libX11.so
+
# While we still ship bytecode, this requires a /usr/bin/ocamlrun from
# the _identical_ native package. We don't have that at the moment,
# which is why this is commented out.
Requires: mingw32-binutils
Requires: mingw32-flexdll
+# i686-pc-mingw32-ocamlmklib tries to run ocamlopt which is probably a
+# bug, but requires this (XXX).
+Requires: ocaml
+
%description
Objective Caml is a high-level, strongly-typed, functional and
%build
-# Build native ocamlrun and ocamlc which contain the filename-win32-dirsep
-# patch.
+# Don't run out of memory.
+ulimit -s unlimited
+
+# Build native ocamlrun and ocamlc which contain the
+# filename-win32-dirsep patch.
+#
+# Note that we must build a 32 bit compiler, even on 64 bit build
+# architectures, because this compiler will try to do strength
+# reduction optimizations using its internal int type, and that must
+# match Windows' int type. (That's what -cc and -host are for).
./configure \
-no-tk \
-bindir %{_bindir} \
-libdir %{_libdir}/ocaml \
- -mandir %{_mandir}/man1
+ -mandir %{_mandir}/man1 \
+ -cc "gcc -m32" -host i386-pc-linux -x11lib /usr/lib -verbose
make world
# Now move the working ocamlrun, ocamlc into the boot/ directory,
# Build ocamlopt
make opt
+cp %{SOURCE1001} .
+
%install
rm -rf $RPM_BUILD_ROOT
make %{makevars} -C tools install
make %{makevars} installopt
+install -m 0755 ocamlc $RPM_BUILD_ROOT%{_bindir}
+
cp config/Makefile \
$RPM_BUILD_ROOT%{_libdir}/%{_mingw32_target}-ocaml/Makefile.config
# For bytecode binaries, change the bang-path to point to the locally
# installed ocamlrun.
pushd $RPM_BUILD_ROOT%{_bindir}
-for f in ocamlcp ocamldep ocamlmklib ocamlopt ocamlprof; do
+for f in ocamlc ocamlcp ocamldep ocamlmklib ocamlopt ocamlprof; do
mv $f $f.old
echo '#!%{_bindir}/%{_mingw32_target}-ocamlrun' > $f
tail -n +2 $f.old >> $f
# Rename all the binaries to target-binary.
pushd $RPM_BUILD_ROOT%{_bindir}
-for f in ocamlcp ocamldep ocamlmklib ocamlmktop ocamlopt ocamlprof ocamlrun; do
+for f in ocamlc ocamlcp ocamldep ocamlmklib ocamlmktop ocamlopt ocamlprof ocamlrun; do
mv $f %{_mingw32_target}-$f
done
popd
%files
%defattr(-,root,root)
+%doc README.Fedora
+%{_bindir}/%{_mingw32_target}-ocamlc
%{_bindir}/%{_mingw32_target}-ocamlcp
%{_bindir}/%{_mingw32_target}-ocamldep
%{_bindir}/%{_mingw32_target}-ocamlmklib
%changelog
+* Mon Nov 17 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-14
+- Added README.Fedora.
+
+* Sun Nov 16 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-13
+- Build the native compiler as 32 bits even on a 64 bit build
+ architecture (because the target, Windows, is 32 bit). The
+ compiler does strength reduction and other optimizations
+ internally so we must ensure it uses the same int type.
+- Requires libX11-devel.i386 and libgcc.i386.
+- Allow the normal dependency generators to run because this
+ is a native package.
+- Use mingw32 strip to avoid corrupting binaries.
+
+* Sun Nov 16 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-8
+- Install ocamlc.
+
+* Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-7
+- Further requirements.
+
* Sat Nov 15 2008 Richard W.M. Jones <rjones@redhat.com> - 3.11.0+beta1-6
- Install tools, particularly ocamlmklib.