Re: [PATCH 8/9] configurator: Pass output cflag to configurator

David Gibson <[email protected]> Tue, 20 Sep 2016 23:32:41 +1000
Newsgroups org.ozlabs.lists.ccan
Message-ID <20160920133241.GJ20488@umbus>
On Tue, Sep 20, 2016 at 12:22:47AM -0600, Kevin Locke wrote:
> On 09/19/2016 11:23 PM, David Gibson wrote:
> > On Sun, Sep 18, 2016 at 06:52:05PM -0600, Kevin Locke wrote:
> > > Unfortunately, not all compilers support -o as a command-line option for
> > > specifying the output file.  Visual Studio cl.exe issues warning D9035
> > > when -o is given, which is detected as a compile warning by the
> > > configurator.
> > > 
> > > To support such compilers, pass the output flag as the last flag to the
> > > configurator.
> > > 
> > > This is a breaking change.  Existing scripts which pass flags to the
> > > compiler must be modified to add "-o" as the last flag.  As noted in the
> > > cover letter for this patch series, I'm open to considering alternatives
> > > if this is unacceptable.
> > 
> > So, as it stands, this change completely breaks ccanlint on POSIX,
> > which is not ok.  Specifically it looks like the problem is that the
> > DEFAULT_FLAGS from the configurator make it into CCAN_CFLAGS in
> > config.h.  ccanlint then tries to add further options and its own -o
> > to the end of that, which isn't going to work.
> > 
> > In short, I think the problem is that ccanlint needs fixes to work
> > with MSVC (and possibly anything much else apart from gcc).  I think
> > we need to look at how to fix that and the configurator together with
> > each other.
> > 
> > Not having working ccanlint on Windows seems like a pretty big, since
> > its the main tool for testing ccan, amongst other things.
> 
> Good catch.  I hadn't noticed the ccanlint breakage.  That was a big
> oversight on my part.
> 
> The breakage likely extends to any other programs which use CCAN_CFLAGS,
> since none are expecting the output flag at the end.  Perhaps a better
> solution would be to emit the output flag as a separate macro. Something
> like CCAN_OUTPUT_CFLAG.  What do you think?

I think that's a better option, and maybe the way to go in the short
term.

Longer term, I'm wondering if we want some sort of mini-library for
shared use by the ccan tools - configurator, ccanlint, etc.  Amongst
other things that could have an "invoke compiler" function which
abstracts this sort of thing in a more general way.

Of course, this borders on the questions about use of err() etc. in
the configurator - within the tools themselves, what can we and can't
we assume about the system.

> The command line API for configurator could either expect the output flag to
> be the last argument as currently in the patch (which is a breaking change
> for anything which call it).  Or a command line option such as
> --output-cflag could be added to specify the flag and preserve command-line
> syntax compatibility.
> 
> Thoughts?

--output-cflag is kind of clunky, but again might be our best bet in
the short term.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

_______________________________________________
ccan mailing list
[email protected]
https://lists.ozlabs.org/listinfo/ccan
signature.asc (application/pgp-signature, 819 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJX4Tp4AAoJEGw4ysog2bOSl3oP/3rHT3JZEO50Cbzn/Bh7VuOZ
e2X2frh6I1pQnl3Xf3vpL55HI944LKTsvpXIT3vQlF/ohHQKeorH42G43uAgYI+S
9eJrpDs/9FywZrvCF1cXkWUKG0SEdpzuzmorwF8WaltAqCZ/YOsYG5rgTGnHSOTT
TllvUPiux0n56lnrgvvgX5Dm0s1P7W+a4qoQKYSUkiucf9phiRIkzFckw83a/Ozc
YdSmQFYX+Kj6uDjcY05qYR5YJE65nB0SYeRbc02WM63ucW91YHllaGkVjvtZLnNW
d235XdowYIA2G1s27YRB1hSBccrZ+qx+Rozn7vikXbH/jXg0Zsk4LT9ZIjNaL8Ah
1v6/pvmmyAtUx4sbcmuGdq7a2j5QNpN8SYW3p0otevw5BsGV+7zx0eMhVg+TMPnx
/btbsvmMfG7U1i0kVyjdfGFYhL6cNdov90y6r3AKoZVcHT13y51DMZa7zZPsWdkr
nl2UwcnxeDM6cjedt7Ukp9eCY/FzUxaqeKWBQfN4vyLprXu4mK0pHmA8x9QsEzvw
z9DYWdPlY3CWWYBOQqxAgcyeQ0tNyqyUHA1xt3sm54z9Wh61xZiZWR/JN17+VZxW
+zSZBPsV8grExpW8mks7MxViN7hYxbK1ruiEmRGhaxtdn+echNAlTqVQGwV6hDcs
cQtIGtOnvmew2sr/vulv
=6Wj2
-----END PGP SIGNATURE-----