You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucy.apache.org by Nick Wellnhofer <we...@aevum.de> on 2013/01/02 18:01:43 UTC
Re: [lucy-dev] Compiler flags
On 21/12/2012 18:15, Marvin Humphrey wrote:
> Heh, generating Makefiles wasn't the approach I was thinking of. :) I meant
> writing actual build scripts in C.
Ah, I see. That's of course possible, but I think this can't be
implemented in plain C89 (the up_to_date part, for example). So we'd
have to run charmonizer first to configure the build script code, making
the whole thing a two-step process.
Another advantage of Makefiles is that they're more hackable if
adjustments are needed. If someone wants to make changes to the build
script, he has to alter the charmonizer C code and regenerate
charmonizer.c. This requires a lot more insight into how the build
system works than simply changing the generated Makefile.
GNU make also offers nice features like parallel builds which would be
hard to recreate.
I'm not really against the build script idea, but I think it's a lot
more effort than generating Makefiles.
>> * Windows is probably the first platform that will break because of overlong
>> command lines (8K limit).
>
> At some point we'll probably need to start generating scripts like
> ExtUtils::CBuilder does to address that problem.
Under nmake, there's also a very simple solution using "inline files"
(kind of like here-docs in a Makefile).
> If we want to generate Makefiles using Charmonizer, I suggest we do something
> similar faking up inheritance with structs.
>
> struct chaz_PosixMakefile {
> struct chaz_Makefile base;
> /* ... */
> };
Maybe we don't even need separate "classes" for different make
implementations. Most of the differences depend on the compiler and
shell type.
> I'd hope we could stay away from parsing a template file (a la "Makefile.in"),
> because having to support parsing would complicate things a lot.
Yes, that was my idea as well.
> I'd argue against generating Makefiles.
>
> Makefile syntax is obtuse on its own, but the real problem is that generating
> Makefiles essentially means compiling down to shell code. We do pretty well
> compiling down to C with the Clownfish compiler, but C compilers exhibit a lot
> less variability than shells and the external programs that they reference.
> Our task is made harder by the fact that we're contemplating targeting at
> least two shell environments -- POSIX-compliant sh and cmd.exe -- which means
> rearranging arguments, dealing with different quoting and splitting rules,
> invoking completely different commands, etc.
But doesn't the build script approach also mean to execute shell
commands in the end? I don't really see the difference except for things
like deleting files (make clean).
Using Makefiles to build a C project also seems like the most natural
approach to me. As you wrote somewhere else, users generally expect to
run "./configure && make && make install".
Nick