trouble compiling 6.8.3 using 6.8.3

Simon Marlow marlowsd at gmail.com
Mon Apr 20 09:38:13 EDT 2009


Jason Pepas wrote:
> 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?

I think the problem you're describing never got fixed: see

   http://hackage.haskell.org/trac/ghc/ticket/2970

and then we decided to replace readline with editline (bad mistake) and 
later decided to adopt haskeline instead.  I believe some OSs (e.g. 
FreeBSD) that put readline outside the standard locations have their own 
hacks to get around this.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list