13
Vala CMake is a collection of macros for the CMake_ build system to allow the
14
creation and management of projects developed using the Vala_ programming
15
language or its "Genie" flavor (less tested).
21
To use the Vala macros in your own project you need to copy the macro files to
22
an arbitrary folder in your projects directory and reference them in your
23
``CMakeLists.txt`` file.
25
Assuming the macros are stored under ``cmake/vala`` in your projects folder you
26
need to add the following information to your base ``CMakeLists.txt``::
28
list(APPEND CMAKE_MODULE_PATH
29
${CMAKE_SOURCE_DIR}/cmake/vala
32
After the new module path as been added you can simply include the provided
33
modules or use the provided find routines.
39
The find module for vala works like any other Find module in CMake.
40
You can use it by simply calling the usual ``find_package`` function. Default
41
parameters like ``REQUIRED`` and ``QUIETLY`` are supported.
45
find_package(Vala REQUIRED)
47
After a successful call to the find_package function the following variables
51
Whether the vala compiler has been found or not
54
Full path to the valac executable if it has been found
57
Version number of the available valac
60
Precompiling Vala sources
61
=========================
63
CMake is mainly supposed to handle c or c++ based projects. Luckily every vala
64
program is translated into plain c code using the vala compiler, followed by
65
normal compilation of the generated c program using gcc.
67
The macro ``vala_precompile`` uses that fact to create c files from your .vala
68
sources for further CMake processing.
70
The first parameter provided is a variable, which will be filled with a list of
71
c files outputted by the vala compiler. This list can than be used in
72
conjunction with functions like ``add_executable`` or others to create the
73
necessary compile rules with CMake.
75
The initial variable is followed by a list of .vala files to be compiled.
76
Please take care to add every vala file belonging to the currently compiled
77
project or library as Vala will otherwise not be able to resolve all
80
The following sections may be specified afterwards to provide certain options
84
A list of vala packages/libraries to be used during the compile cycle. The
85
package names are exactly the same, as they would be passed to the valac
89
A list of optional options to be passed to the valac executable. This can be
90
used to pass "--thread" for example to enable multi-threading support.
93
Specify the directory where the output source files will be stored. If
94
ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR.
97
A list of custom vapi files to be included for compilation. This can be
98
useful to include freshly created vala libraries without having to install
102
Pass all the needed flags to the compiler to create an internal vapi for
103
the compiled library. The provided name will be used for this and a
104
<provided_name>.vapi file will be created.
107
Let the compiler generate a header file for the compiled code. There will
108
be a header file as well as an internal header file being generated called
109
<provided_name>.h and <provided_name>_internal.h
111
The following call is a simple example to the vala_precompile macro showing an
112
example to every of the optional sections::
114
vala_precompile(VALA_C
132
Most important is the variable VALA_C which will contain all the generated c
133
file names after the call. The easiest way to use this information is to tell
134
CMake to create an executable out of it.
138
add_executable(myexecutable ${VALA_C})
144
The `Pdf Presenter Console`__ , which is a vala based project of mine, makes
145
heavy usage of the here described macros. To look at a real world example of
146
these macros the mentioned project is the right place to take a look. The svn
147
trunk of it can be found at::
149
svn://pureenergy.cc/pdf_presenter_console/trunk
152
__ http://westhoffswelt.de/projects/pdf_presenter_console.html
158
Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me
159
a lot with the initial version of this macros and always answered my mostly
160
dumb CMake questions.
162
.. _CMake: http://cmake.org
163
.. _Vala: http://live.gnome.org/Vala
164
.. _Genie: http://live.gnome.org/Genie
173
vim: et syn=rst tw=79