
Jason Pepas wrote:
Jason Pepas wrote:
/lusr/bin/ghc -#include cutils.h -DSTAGE=1 -package-name ghc-6.10.1
Um, scratch that. I've apparently become confused as to which release I was actually building.
-jason
So I've run into a (legitimate) issue with building 6.8.3. Initiall I was getting things like this: build error: ../compiler/ghc-inplace -optc-O -optc-Wall -optc-W -optc-Wstrict-prototypes -optc-Wmissing-prototypes -optc-Wmissing-declarations -optc-Winline -optc-Waggregate-return -optc-I../includes -optc-I. -optc-Iparallel -optc-Ism -optc-DCOMPILING_RTS -optc-g -optc-O0 -optc-I../gmp/gmpbuild -optc-fno-strict-aliasing -H16m -O -package-name rts -static -I../gmp/gmpbuild -I. -#include HCIncludes.h -dcmm-lint -hisuf debug_hi -hcsuf debug_hc -osuf debug_o -optc-DDEBUG -c ProfHeap.c -o ProfHeap.debug_o Printer.c:962:17: error: bfd.h: No such file or directory this was being caused by not being able to find binutils-related headers. similar errors occured after not being able to find readline headers. (these were in a non-standard location). I got around this by exporting some env vars: export CPPFLAGS="-I/lusr/gnu/include -I/lusr/include" export LDFLAGS="-L/lusr/lib -L/lusr/gnu/lib" however, that still didn't solve the problem, and eventually I resorted to "grafting" (copying via symlinks) the include files into the build-dir/includes directory. that worked until I ran into this: checking for readline in -lreadline... yes checking for rl_readline_version... yes checking for rl_begin_undo_group... yes checking for rl_erase_empty_line... yes checking for rl_free_undo_list... yes checking for rl_completion_word_break_hook in -lreadline... yes configure: creating ./config.status config.status: creating readline.buildinfo config.status: creating include/HsReadlineConfig.h if ifBuildable/ifBuildable readline; then \ cd readline && \ cmp -s ../Makefile.local Makefile.local || cp ../Makefile.local .; \ mv GNUmakefile GNUmakefile.tmp; \ setup/Setup makefile -f GNUmakefile; \ cmp -s GNUmakefile GNUmakefile.tmp && mv GNUmakefile.tmp GNUmakefile; \ make -wr --jobserver-fds=3,4 -j && \ setup/Setup register --inplace; \ fi mv: cannot stat `GNUmakefile': No such file or directory Preprocessing library readline-1.0.1.0... /lusr/gnu/bin/ld: cannot find -lreadline collect2: ld returned 1 exit status linking dist/build/System/Console/Readline_hsc_make.o failed command was: gcc -lreadline -lncurses dist/build/System/Console/Readline_hsc_make.o -o dist/build/System/Console/Readline_hsc_make make[2]: Entering directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries/readline' make[2]: *** No targets specified and no makefile found. Stop. make[2]: Leaving directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries/readline' make[1]: *** [make.library.readline] Error 2 make[1]: Leaving directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries' make: *** [stage1] Error 2 specifically, what is failing is the "setup/Setup makefile -f GNUmakefile" command. bash-3.2$ setup/Setup makefile -f GNUmakefile Preprocessing library readline-1.0.1.0... /lusr/gnu/bin/ld: cannot find -lreadline collect2: ld returned 1 exit status linking dist/build/System/Console/Readline_hsc_make.o failed command was: gcc -lreadline -lncurses dist/build/System/Console/Readline_hsc_make.o -o dist/build/System/Console/Readline_hsc_make however, if you cd into build-dir/libraries/readline and run this manually: ./configure --with-readline-includes=/lusr/gnu/include --with-readline-libraries=/lusr/gnu/lib you can then run the "setup/Setup makefile -f GNUmakefile" and it works. so I thought I'd try simply modifying the libraries/Makefile: bash-3.2$ diff -urN libraries/Makefile.orig libraries/Makefile --- libraries/Makefile.orig 2009-04-06 14:36:44.000000000 -0500 +++ libraries/Makefile 2009-04-06 15:29:14.000000000 -0500 @@ -277,9 +277,11 @@ if ifBuildable/ifBuildable $*; then \ cd $* && \ cmp -s ../Makefile.local Makefile.local || cp ../Makefile.local .; \ - mv GNUmakefile GNUmakefile.tmp; \ + if [ -e GNUmakefile ] ; then mv GNUmakefile GNUmakefile.tmp ; fi ;\ + if [ "$*" = "readline" ] ; then ./configure --with-readline-includes=/lusr/gnu/include --with-readline-libraries=/lusr/gnu/lib ; fi ; \ setup/Setup makefile -f GNUmakefile; \ cmp -s GNUmakefile GNUmakefile.tmp && mv GNUmakefile.tmp GNUmakefile; \ + echo $(MAKE) $(MFLAGS) && \ $(MAKE) $(MFLAGS) && \ setup/Setup register --inplace; \ fi but that doesn't work: Preprocessing library readline-1.0.1.0... Generating Makefile readline-1.0.1.0... make -wr make[2]: Entering directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries/readline' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries/readline' Registering readline-1.0.1.0... Reading package info from "dist/inplace-pkg-config" ... done. Unable to rename "/lusr/opt/ghc-6.8.3/lib/ghc-6.8.3/package.conf" to "/lusr/opt/ghc-6.8.3/lib/ghc-6.8.3/package.conf.old" Saving old package config file... ghc-pkg.bin: /lusr/opt/ghc-6.8.3/lib/ghc-6.8.3/package.conf: renameFile: permission denied (Permission denied) make[1]: *** [make.library.readline] Error 1 make[1]: Leaving directory `/v/filer4b/cvsbuild/CVSBUILD/ghc-6.8.3-linux-i686/ghc/libraries' make: *** [stage1] Error 2 At this point I think this has gotten a little too hack-ish, so I thought I'd ask the mailing list what for proper way of telling ghc where your readline installation lives? thanks, jason