Re: [Vala] Recommended way for combined C with Vala/Genie project?



On Mon, Apr 28, 2014 at 8:52 PM, Al Thomas <astavale yahoo co uk> wrote:

I've just got this error that made me wonder about valac's hidden
capabilities:

error: test.g is not a supported source file type. Only .vala, .vapi, .gs,
and .c files are supported.

I assume a .c file is passed straight through to the C compiler along with
the generated C files from .vala and .gs files. Is this a recommended way
of creating a combined C with Vala/Genie project?


First create vala/gs -> C files, then also specify other C files, and
finally compile all C files with gcc. Autotools does all that for you.


I note XFCE decided to combine C with Vala. From a couple of blog post
[1][2] it looks as though they use automake to create C files from Vala and
then distribute and compile those files for the whole project. The argument
being different versions of valac can produce different C files so it is
more stable for a distributed version to build from the generated C files.


It's true that it's more stable to compile directly the C files, but #if
conditions in vala won't get evaluated then. That is, once you have
compiled vala down to C, the #if conditions *in vala* can't be re-evaluated
anymore. That's a huge tradeoff you should care about.
I don't suggest to compile directly the distributed C files, rather compile
Vala. You can conditionate your code to run, e.g., with vala 0.22, 0.24...
to fix incompatibilities.



I also found the Parallel Builds [3] page. This is an interesting approach
with, as I understand it, an intermediate object file for each vala file.
These could be linked with object files from C or C++.


No the intermediate file is a special vapi file, those are not object files
understood by gcc.



Then there is the --compile option of valac to produce object files.


Use valac only to generate C, not as a build tool.



So at the moment I'm thinking for large, mixed language projects, it is
better to create object files and link outside of valac.

I am writing some documentation for Genie and was about to finish the
attached diagram with arrows when I stumbled upon valac accepting .c files.
At present I'm thinking this feature isn't too useful and it is better to
create object files and link using another tool. This is also useful for
GIR and using Vala/Genie binaries in Python, node.js, PHP, etc. So it is
probably better for documentation to introduce the more general process.


Drop the idea to create a large project by using valac as build tool. Use
autotools. There's plenty of projecs out there to look at, first of all the
sample vala project: https://github.com/tadeboro/Sampala


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]