[GHC] #11137: configure is broken for the unix package
GHC
ghc-devs at haskell.org
Thu Nov 26 23:53:06 UTC 2015
#11137: configure is broken for the unix package
-------------------------------------+-------------------------------------
Reporter: pgj | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: | Version: 7.11
libraries/unix |
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Building GHC
Unknown/Multiple | failed
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
A few weeks ago (around November 1, 2015), the FreeBSD builders started to
fail building GHC-HEAD with an error message something like that:
{{{
[...]
/usr/home/ghc-builder/work/builder/tempbuild/build/libraries/unix/dist-
install/build/libHSunix-2.7.1.0-ghc7.11.20151126.so: undefined reference
to `fdatasync'
collect2: error: ld returned 1 exit status
`gcc48' failed in phase `Linker'. (Exit code: 1)
ghc/ghc.mk:121: recipe for target 'ghc/stage2/build/tmp/ghc-stage2' failed
gmake[1]: *** [ghc/stage2/build/tmp/ghc-stage2] Error 1
Makefile:121: recipe for target 'all' failed
gmake: *** [all] Error 2
}}}
That is because {{{fdatasync(2)}}} is not implemented on FreeBSD.
Apparently, it is handled in the respective file
({{{System/Posix/Unistd.hsc}}}), though it relies on the variable
({{{HAVE_FDATASYNC}}}) generated at the {{{configure}}} phase. But for
some reason, the {{{configure}}} script of the {{{unix}}} package fails to
detect this as it says the following:
{{{
"inplace/bin/ghc-cabal" configure libraries/unix dist-install "" --with-
ghc="/usr/home/ghc-builder/work/builder/tempbuild/build/inplace/bin/ghc-
stage1" --with-ghc-pkg="/usr/home/ghc-
builder/work/builder/tempbuild/build/inplace/bin/ghc-pkg" --disable-
library-for-ghci --enable-library-vanilla --enable-library-profiling
--enable-shared --with-hscolour="/usr/local/bin/HsColour" --configure-
option=CFLAGS="-Wall -fno-stack-protector -Werror=unused-but-set-
variable -Wno-error=inline" --configure-option=LDFLAGS=" " --configure-
option=CPPFLAGS=" " --gcc-options="-Wall -fno-stack-protector -Werror
=unused-but-set-variable -Wno-error=inline " --configure-option=--with-
iconv-includes="/usr/local/include" --configure-option=--with-iconv-
libraries="/usr/local/lib" --configure-option=--with-gmp-
includes="/usr/local/include" --configure-option=--with-gmp-
libraries="/usr/local/lib" --with-gcc="/usr/local/bin/gcc48" --with-
ld="/usr/local/bin/ld" --configure-option=--with-cc="/usr/local/bin/gcc48"
--with-ar="/usr/local/bin/ar" --with-alex="/usr/local/bin/alex" --with-
happy="/usr/local/bin/happy"
Configuring unix-2.7.1.0...
[...]
checking for fdatasync... yes
}}}
That is the corresponding part of the {{{config.log}}}:
{{{
configure:4242: checking for fdatasync
configure:4263: /usr/local/bin/gcc48 -c -Wall -fno-stack-protector
-Werror=unused-but-set-variable -Wno-error=inline conftest.c >&5
conftest.c: In function 'main':
conftest.c:71:1: warning: implicit declaration of function 'fdatasync'
[-Wimplicit-function-declaration]
fdatasync(4);
^
configure:4263: $? = 0
configure:4271: result: yes
}}}
Looks like GCC is willing to compile the test code, although it notes that
it cannot find the declaration of the {{{fdatasync()}}} function.
Unfortunately, the {{{configure}}} script does not instruct GCC to do any
linking or be serious on such warnings, so it happily proceeds.
For the reference, previously the {{{config.log}}} said something like
that instead:
{{{
configure:4230: checking for fdatasync
configure:4230: /usr/local/bin/gcc48 -o conftest -Wall -fno-stack-
protector -Werror=unused-but-set-variable -Wno-error=inline
conftest.c >&5
/tmp//ccDCjZtO.o: In function `main':
conftest.c:(.text+0xa): undefined reference to `fdatasync'
collect2: error: ld returned 1 exit status
configure:4230: $? = 1
[...]
}}}
I am inclined to think that this is caused by the commit
[https://github.com/haskell/unix/commit/b06446edd4753f964a46d27ddae864fad97adc13
b06446edd4753f964a46d27ddae864fad97adc13] for the {{{unix}}} package.
Perhaps the following change can fix that, at least it fixed for me:
{{{
--- a/mk/warnings.mk
+++ b/mk/warnings.mk
@@ -16,6 +16,7 @@ SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
endif
# gcc 4.6 gives 3 warning for giveCapabilityToTask not being inlined
SRC_CC_WARNING_OPTS += -Wno-error=inline
+SRC_CC_WARNING_OPTS += -Werror=implicit-function-declaration
endif
else
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11137>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list