Patch RFC: Fix broken builds with Sun CC
ellie timoney
ellie at fastmail.com
Sun Apr 3 19:22:46 EDT 2016
> You noted that the `lib/imapopts.c` file is autogenerated -- and indeed
> it is, but not during `configure` or `make`, but it is already shipped
> in the code tar bundle (with GCCisms included).
Oh, good catch!
I'm not sure what the reasoning is behind distributing a generated
lib/imapopts.c. It might just be oversight. It might be a deliberate
choice to protect the user from tools/config2header's own dependencies.
tools/config2header does some shell tricks to require perl 5, which
might have once been the "problematic" dependency, but I don't think
that's a problematic dependency anymore.
So I'll just go ahead and fix this for future releases, if there's no
objections?
Cheers,
ellie
On Fri, Apr 1, 2016, at 06:40 PM, Jens Erat wrote:
> Hi Ellie,
>
> although quite some time passed since I gave feedback last time, this
> issue is still open for us (although we have a workaround, so it doesn't
> bother us too much). By now I think that the issue isn't with
> `configure` or `make` parsing `$CC` wrong, we probably have been mislead
> by several other issues we had.
>
> You noted that the `lib/imapopts.c` file is autogenerated -- and indeed
> it is, but not during `configure` or `make`, but it is already shipped
> in the code tar bundle (with GCCisms included).
>
> Our current workaround is to remove `lib/imapopts.c` before `make`ing
> Cyrus IMAP, the file is automatically recreated. Is it possible that
> this file should never have been included in the source distribution?
>
> Build is successfull with following commands:
>
>
> export PATH=/opt/solarisstudio12.4/bin:$PATH
> export CC=/opt/solarisstudio12.4/bin/cc
> # also exported several compiler- and linkerflags,
> # don't seem relevant here
> ./configure # and a bunch of configure options
> rm lib/imapopts.c
> gmake
> gmake install
>
> `gmake` also regenerates `lib/imaptops.c` (without those union casts).
>
> Regards,
> Jens
>
> Am 22.09.2015 um 02:09 schrieb ellie timoney:
> > Hi Jens,
> >
> >> We already set `CC=cc`, which resulted in following `configure` output:
> >> [...]
> >> indeed, void casts are generated. For now, the issue is resolved by
> >> exporting the full path of the Sun C compiler.
> >
> > That's curious. I wonder if configure is being clever in some unhelpful
> > way.
> >
> > Can you re-run configure, once with CC=cc and once with the exported
> > full path that actually worked, and attach the config.log files that are
> > generated by each run? You might need to send them directly to me, I'm
> > not sure if the mailing list allows attachments.
> >
> > I'm not sure I'll actually be able to get to the bottom of this without
> > a Sun environment to experiment in, but I can at least have a look and
> > see if it's something obvious.
> >
> > Cheers,
> >
> > ellie
> >
> > On Mon, Sep 21, 2015, at 09:11 PM, Jens Erat wrote:
> >> Hi Ellie,
> >>
> >> thank you for the detailed analysis.
> >>
> >>>> This is not as simple as just removing the casts from lib/imapopts.c --
> >>>> it's a generated file. Note the comments at the top:
> >>>>
> >>>>> /* auto-generated by config2header 1.17 */
> >>>>>
> >>>>> /* DO NOT EDIT */
> >>>>>
> >>>>> /* THIS FILE AUTOMATICALLY GENERATED BY config2header 1.17 */
> >>>>
> >>
> >> Indeed, this is not the way to go.
> >>
> >>
> >>> I don't know what the Sun compiler is called, though I'm assuming it
> >>> doesn't call itself "gcc". If it does, there is your problem.
> >>>
> >>> Otherwise, you should be able to do something like this to make sure it
> >>> uses the same compiler for the whole build:
> >>>
> >>>> make clean
> >>>> ./configure CC=/path/to/sun/compiler [...]
> >>>> make
> >>
> >> We already set `CC=cc`, which resulted in following `configure` output:
> >>
> >> checking build system type... i386-pc-solaris2.11
> >> checking host system type... i386-pc-solaris2.11
> >> checking target system type... i386-pc-solaris2.11
> >> checking for a BSD-compatible install... /usr/bin/ginstall -c
> >> checking whether build environment is sane... yes
> >> checking for a thread-safe mkdir -p... /usr/bin/gmkdir -p
> >> checking for gawk... gawk
> >> checking whether make sets $(MAKE)... yes
> >> checking whether to enable maintainer-specific portions of Makefiles...
> >> no
> >> checking for gcc... cc
> >> checking whether the C compiler works... yes
> >> checking for C compiler default output file name... a.out
> >> checking for suffix of executables...
> >> checking whether we are cross compiling... no
> >> checking for suffix of object files... o
> >> checking whether we are using the GNU C compiler... no
> >> checking whether cc accepts -g... yes
> >> checking for cc option to accept ISO C89... none needed
> >> checking for style of include used by make... GNU
> >> checking dependency style of cc... none
> >> checking whether cc understands -c and -o together... yes
> >> checking whether ln -s works... yes
> >> checking whether make sets $(MAKE)... (cached) yes
> >> checking how to run the C preprocessor... cc -E
> >> checking for grep that handles long lines and -e... /usr/bin/ggrep
> >> checking for egrep... /usr/bin/ggrep -E
> >> checking for ANSI C header files... yes
> >>
> >>
> >> Also if using `export CC=/opt/solarisstudio12.4/bin/cc`, union casts are
> >> created, but one single line changes to
> >>
> >> checking fgor gcc... /opt/solarisstudio12.4/bin/cc
> >>
> >> `./configure CC=/opt/solarisstudio12.4/bin/cc [...]` does not change
> >> anything, either. GCC _is_ installed as `/usr/bin/gcc`, but should not
> >> have been used.
> >>
> >> Interestingly, configure also recognizes `make` as GNU make (available
> >> under `gmake`, though); resulting in a GNU-style make file (and we have
> >> to use `gmake` for Cyrus IMAP instead of `make`, but I guess that's just
> >> fine, at least for us, but also might hint a problem).
> >>
> >>
> >>
> >>>> The mailing list discussions you reference talk about this being a
> >>>> result of the Sun compiler being strict about "Ansi C", by which I'm
> >>>> assuming they mean C89/C90. We generally target C99 these days (it is,
> >>>> after all, 16 years old, and has itself already been superceded by
> >>>> C11...).
> >>>>
> >>>> I don't know if the Sun compiler has options to support C99, but if it
> >>>> does, have you tried using them?
> >>
> >> Following the man pages, Sun CC not only supports C99, but also C11, and
> >> C11 is set as default:
> >>
> >> -std=value
> >>
> >> C language standard selection flag.
> >>
> >> value is defined as one of the following:
> >>
> >>
> >> c89 C source language accepted is that defined
> >> by the ISO C90 standard.
> >>
> >>
> >> c99 C source language accepted is that defined
> >> by the ISO C99 standard.
> >>
> >>
> >> c11 C source language accepted is that defined
> >> by the ISO C11 standard.
> >>
> >> The first default is c11, implying acceptance of the C
> >> source language as defined by ANSI C11 with extensions.
> >>
> >> Enforcing C99 by adding `-std=c99` to CFLAGS did not resolve the issue,
> >> but c11 should be the default, anyway...
> >>
> >>
> >>> If your $CC evaluates to 'gcc' then it will generate union casts;
> >>> otherwise, it will generate (void *) casts. Watch:
> >>>
> >>>> $rm lib/imapopts.c
> >>>> $make CC=gcc lib/imapopts.c
> >>
> >> If I run
> >>
> >> gmake CC=`which cc` lib/imapopts.c
> >>
> >> indeed, void casts are generated. For now, the issue is resolved by
> >> exporting the full path of the Sun C compiler.
> >>
> >> Regards,
> >> Jens
> >>
> >> --
> >> Jens Erat
> >> Universität Konstanz
> >> Kommunikations-, Infomations-, Medienzentrum (KIM)
> >> Abteilung Basisdienste
> >> D-78457 Konstanz
> >> Mail: jens.erat at uni-konstanz.de
> >>
> >>
> >> Email had 1 attachment:
> >> + smime.p7s
> >> 7k (application/pkcs7-signature)
>
> --
> Jens Erat
> Universität Konstanz
> Kommunikations-, Infomations-, Medienzentrum (KIM)
> Abteilung Basisdienste
> D-78457 Konstanz
> Mail: jens.erat at uni-konstanz.de
>
> Email had 1 attachment:
> + smime.p7s
> 7k (application/pkcs7-signature)
More information about the Cyrus-devel
mailing list