])# FP_EVAL_STDERR
+# FP_ARG_WITH_PATH_GNU_PROG
+# --------------------
+# XXX
+#
+# $1 = the command to look for
+# $2 = the variable to set
+#
+AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
+[
+AC_ARG_WITH($2,
+[AC_HELP_STRING([--with-$2=ARG],
+ [Use ARG as the path to $2 [default=autodetect]])],
+[
+ if test "$HostOS" = "mingw32"
+ then
+ AC_MSG_WARN([Request to use $withval will be ignored])
+ else
+ $1=$withval
+ fi
+],
+[
+ if test "$HostOS" != "mingw32"
+ then
+ AC_PATH_PROG([$1], [$2])
+ if test -z "$$1"
+ then
+ AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
+ fi
+ fi
+]
+)
+]) # FP_ARG_WITH_PATH_GNU_PROG
+
+
# FP_PROG_CONTEXT_DIFF
# --------------------
# Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
])
-
-# FP_PROG_LD
-# ----------
-# Sets the output variable LdCmd to the (non-Cygwin version of the) full path
-# of ld. Exits if no ld can be found
-AC_DEFUN([FP_PROG_LD],
-[
-if test -z "$1"
-then
- AC_PATH_PROG([fp_prog_ld_raw], [ld])
- if test -z "$fp_prog_ld_raw"; then
- AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link])
- fi
- LdCmd=$fp_prog_ld_raw
- case $HostPlatform in
- *mingw32) if test x${OSTYPE} != xmsys; then
- LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
- AC_MSG_NOTICE([normalized ld command to $LdCmd])
- fi
- # Insist on >= ld-2.15.x, since earlier versions doesn't handle
- # the generation of relocatable object files with large amounts
- # of relocations correctly. (cf. HSbase.o splittage-hack)
- fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3`
- FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214],
- [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl
- ;;
- esac
-else
- LdCmd="$1"
-fi
-AC_SUBST([LdCmd])
-])# FP_PROG_LD
-
-
# FP_PROG_LD_X
# ------------
# Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
# variable's value is empty.
AC_DEFUN([FP_PROG_LD_X],
-[AC_REQUIRE([FP_PROG_LD])
+[
AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
[echo 'foo() {}' > conftest.c
${CC-cc} -c conftest.c
# Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
# GNU ld or not.
AC_DEFUN([FP_PROG_LD_IS_GNU],
-[AC_REQUIRE([FP_PROG_LD])
+[
AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
[if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
fp_cv_gnu_ld=yes
| isWindowsHost = installed_mingw_bin "gcc"
| otherwise = cGCC
perl_path
- | isWindowsHost = installed cGHC_PERL
+ | isWindowsHost = installed_mingw_bin cGHC_PERL
| otherwise = cGHC_PERL
-- 'touch' is a GHC util for Windows
touch_path
AC_PATH_PROGS(NHC,nhc nhc98)
AC_PATH_PROG(HBC,hbc)
+# This uses GHC, so put it after the "GHC is required" check above:
+FP_FIND_ROOT
+
+if test "$HostOS" = "mingw32"
+then
+ CC="$hardtop/inplace/mingw/bin/gcc.exe"
+ LD="$hardtop/inplace/mingw/bin/ld.exe"
+ NM="$hardtop/inplace/mingw/bin/nm.exe"
+ if ! test -d inplace/mingw ||
+ test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.gz ||
+ test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.gz ||
+ test inplace/mingw -ot ghc-tarballs/mingw/libcrypt*.tar.bz2 ||
+ test inplace/mingw -ot ghc-tarballs/mingw/mingw-runtime*.tar.gz ||
+ test inplace/mingw -ot ghc-tarballs/mingw/perl*.tar.bz2 ||
+ test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.gz
+ then
+ AC_MSG_NOTICE([Making in-tree mingw tree])
+ rm -rf inplace/mingw
+ mkdir inplace
+ mkdir inplace/mingw
+ cd inplace/mingw
+ tar -zxf ../../ghc-tarballs/mingw/binutils*.tar.gz
+ tar -zxf ../../ghc-tarballs/mingw/gcc-core*.tar.gz
+ tar -jxf ../../ghc-tarballs/mingw/libcrypt*.tar.bz2
+ tar -zxf ../../ghc-tarballs/mingw/mingw-runtime*.tar.gz
+ tar -jxf ../../ghc-tarballs/mingw/perl*.tar.bz2
+ tar -zxf ../../ghc-tarballs/mingw/w32api*.tar.gz
+ cd ../..
+ AC_MSG_NOTICE([In-tree mingw tree created])
+ fi
+fi
+
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
-AC_ARG_WITH(gcc,
-[AC_HELP_STRING([--with-gcc=ARG],
- [Use ARG as the path to GCC [default=autodetect]])],
-[WhatGccIsCalled="$withval"
- if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
- test "${OSTYPE}" != "msys" && \
- test "${withval}" != ""
- then
- # Canonicalise to <drive>:/path/to/gcc
- withval=`cygpath -m ${withval}`
- fi;
- CC="$withval"
- export CC
- ],
-[WhatGccIsCalled="gcc"]
-)
+FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
+export CC
+WhatGccIsCalled="$CC"
AC_SUBST(WhatGccIsCalled)
dnl ** Which ld to use?
dnl --------------------------------------------------------------
-AC_ARG_WITH(ld,
-[AC_HELP_STRING([--with-ld=ARG],
- [Use ARG as the path to LD [default=autodetect]])],
-[if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
- test "${OSTYPE}" != "msys" && \
- test "${withval}" != ""
- then
- # Canonicalise to <drive>:/path/to/ld
- withval=`cygpath -m ${withval}`
- fi;
- LD=$withval
- FP_PROG_LD([$LD])
- ],
- [FP_PROG_LD()]
-)
-
-# This uses GHC, so put it after the "GHC is required" check above:
-FP_FIND_ROOT
+FP_ARG_WITH_PATH_GNU_PROG([LD], [ld])
+LdCmd="$LD"
+AC_SUBST([LdCmd])
+dnl ** Which nm to use?
+dnl --------------------------------------------------------------
+FP_ARG_WITH_PATH_GNU_PROG([NM], [nm])
+NmCmd="$NM"
+AC_SUBST([NmCmd])
dnl ** Mac OS X: explicit deployment target
dnl --------------------------------------------------------------
}
}
-sub download {
- my ($from, $to) = @_;
-
- my @cmd = ("wget", $from, "-O", $to);
- message "== running @cmd";
- system @cmd;
- if ($? == -1) {
- die "Failed to execute wget: $!\n";
- }
- elsif ($? != 0) {
- die "wget failed: $?\n";
- }
-}
-
sub darcs {
message "== running darcs @_";
system ("darcs", @_) == 0
die "Bad line: $_";
}
}
-
- if ($_[0] eq "pull" || $_[0] eq "pul") {
- &sync_tarballs();
- }
}
sub darcsget {
die "Bad line: $_";
}
}
-
- &sync_tarballs();
-}
-
-sub sync_tarballs {
- my $localpath;
- my $localdirectory;
- my $localfilename;
- my $actualpath;
- my $actualfilename;
- my $remotepath;
- my $path;
- my @tarballs;
- my %localtarballs;
- my ($repo_base, $checked_out_tree) = getrepo();
-
- message "== Syncing tarballs";
-
- open IN, "< tarballs" or die "Can't open packages file";
- @tarballs = <IN>;
- close IN;
-
- foreach (@tarballs) {
- chomp;
- if (m@^([^# ]+)/([^#/ ]+) +([^ ]+)$@) {
- $localdirectory = $1;
- $localfilename = $2;
- $remotepath = $3;
- $localpath = "$localdirectory/$localfilename";
-
- $localtarballs{$localdirectory}{$localfilename} = 1;
-
- if (! -e $localpath) {
- if ($checked_out_tree) {
- $path = "$repo_base/$localpath";
- }
- else {
- $path = "$repo_base/$remotepath";
- }
- &download($path, $localpath);
- }
- }
- elsif (! /^(#.*)?$/) {
- die "Bad line: $_";
- }
- }
-
- foreach $localdirectory (keys %localtarballs) {
- FILE: foreach $actualpath (glob "$localdirectory/*.tar.gz $localdirectory/*.tar.bz2") {
- $actualfilename = $actualpath;
- $actualfilename =~ s#.*/##;
- if (! defined($localtarballs{$localdirectory}{$actualfilename})) {
- message "== Deleting $actualpath";
- unlink $actualpath;
- }
- }
- }
}
sub main {
ifeq "$(Windows)" "YES"
-# directories don't work well as dependencies, hence a stamp file
-$(INPLACE)/stamp-mingw : $(MKDIRHIER)
- $(MKDIRHIER) $(INPLACE_MINGW)/bin
- GCC=`type -p $(WhatGccIsCalled)`; \
- GccDir=`dirname $$GCC`; \
- "$(CP)" -p $$GccDir/{gcc.exe,ar.exe,as.exe,dlltool.exe,dllwrap.exe,windres.exe} $(INPLACE_MINGW)/bin; \
- "$(CP)" -Rp $$GccDir/../include $(INPLACE_MINGW); \
- "$(CP)" -Rp $$GccDir/../lib $(INPLACE_MINGW); \
- "$(CP)" -Rp $$GccDir/../libexec $(INPLACE_MINGW); \
- "$(CP)" -Rp $$GccDir/../mingw32 $(INPLACE_MINGW)
- touch $(INPLACE)/stamp-mingw
-
install : install_mingw
.PHONY: install_mingw
install_mingw : $(INPLACE_MINGW)
$(GHC_STAGE3) : $(INPLACE_LIB)/extra-gcc-opts
ifeq "$(Windows)" "YES"
-$(GHC_STAGE1) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
-$(GHC_STAGE2) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
-$(GHC_STAGE3) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
+$(GHC_STAGE1) : $(TOUCHY)
+$(GHC_STAGE2) : $(TOUCHY)
+$(GHC_STAGE3) : $(TOUCHY)
endif
ifeq "$(BootingFromHc)" "YES"
ifneq "$(BINDIST)" "YES"
$(libffi_STAMP_CONFIGURE):
"$(RM)" $(RM_OPTS) -r $(LIBFFI_DIR) libffi/build
- cd libffi && $(TAR) -zxf tarball/libffi*.tar.gz
+ cd libffi && $(TAR) -zxf ../ghc-tarballs/libffi/libffi*.tar.gz
mv libffi/libffi-* libffi/build
chmod +x libffi/ln
cd libffi/build && "$(PATCH)" -p1 < ../libffi.dllize-3.0.8.patch
SED = @SedCmd@
SHELL = /bin/sh
-LD = @LdCmd@
+LD = @LdCmd@
+NM = @NmCmd@
# Some ld's support the -x flag and some don't, so the configure
# script detects which we have and sets LdXFlag to "-x" or ""
#
# Lines that start with a '#' are comments.
. ghc git
+ghc-tarballs ghc-tarballs darcs
utils/hsc2hs hsc2hs darcs
utils/haddock haddock2 darcs
libraries/array packages/array darcs