mirror of
https://github.com/elementary/gala.git
synced 2024-12-01 03:34:04 +03:00
174 lines
4.9 KiB
ReStructuredText
174 lines
4.9 KiB
ReStructuredText
==========
|
||
Vala CMake
|
||
==========
|
||
:Author:
|
||
Jakob Westhoff
|
||
:Version:
|
||
Draft
|
||
|
||
|
||
Overview
|
||
========
|
||
|
||
Vala CMake is a collection of macros for the CMake_ build system to allow the
|
||
creation and management of projects developed using the Vala_ programming
|
||
language or its "Genie" flavor (less tested).
|
||
|
||
|
||
Installation
|
||
============
|
||
|
||
To use the Vala macros in your own project you need to copy the macro files to
|
||
an arbitrary folder in your projects directory and reference them in your
|
||
``CMakeLists.txt`` file.
|
||
|
||
Assuming the macros are stored under ``cmake/vala`` in your projects folder you
|
||
need to add the following information to your base ``CMakeLists.txt``::
|
||
|
||
list(APPEND CMAKE_MODULE_PATH
|
||
${CMAKE_SOURCE_DIR}/cmake/vala
|
||
)
|
||
|
||
After the new module path as been added you can simply include the provided
|
||
modules or use the provided find routines.
|
||
|
||
|
||
Finding Vala
|
||
============
|
||
|
||
The find module for vala works like any other Find module in CMake.
|
||
You can use it by simply calling the usual ``find_package`` function. Default
|
||
parameters like ``REQUIRED`` and ``QUIETLY`` are supported.
|
||
|
||
::
|
||
|
||
find_package(Vala REQUIRED)
|
||
|
||
After a successful call to the find_package function the following variables
|
||
will be set:
|
||
|
||
VALA_FOUND
|
||
Whether the vala compiler has been found or not
|
||
|
||
VALA_EXECUTABLE
|
||
Full path to the valac executable if it has been found
|
||
|
||
VALA_VERSION
|
||
Version number of the available valac
|
||
|
||
|
||
Precompiling Vala sources
|
||
=========================
|
||
|
||
CMake is mainly supposed to handle c or c++ based projects. Luckily every vala
|
||
program is translated into plain c code using the vala compiler, followed by
|
||
normal compilation of the generated c program using gcc.
|
||
|
||
The macro ``vala_precompile`` uses that fact to create c files from your .vala
|
||
sources for further CMake processing.
|
||
|
||
The first parameter provided is a variable, which will be filled with a list of
|
||
c files outputted by the vala compiler. This list can than be used in
|
||
conjunction with functions like ``add_executable`` or others to create the
|
||
necessary compile rules with CMake.
|
||
|
||
The initial variable is followed by a list of .vala files to be compiled.
|
||
Please take care to add every vala file belonging to the currently compiled
|
||
project or library as Vala will otherwise not be able to resolve all
|
||
dependencies.
|
||
|
||
The following sections may be specified afterwards to provide certain options
|
||
to the vala compiler:
|
||
|
||
PACKAGES
|
||
A list of vala packages/libraries to be used during the compile cycle. The
|
||
package names are exactly the same, as they would be passed to the valac
|
||
"--pkg=" option.
|
||
|
||
OPTIONS
|
||
A list of optional options to be passed to the valac executable. This can be
|
||
used to pass "--thread" for example to enable multi-threading support.
|
||
|
||
DIRECTORY
|
||
Specify the directory where the output source files will be stored. If
|
||
ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR.
|
||
|
||
CUSTOM_VAPIS
|
||
A list of custom vapi files to be included for compilation. This can be
|
||
useful to include freshly created vala libraries without having to install
|
||
them in the system.
|
||
|
||
GENERATE_VAPI
|
||
Pass all the needed flags to the compiler to create an internal vapi for
|
||
the compiled library. The provided name will be used for this and a
|
||
<provided_name>.vapi file will be created.
|
||
|
||
GENERATE_HEADER
|
||
Let the compiler generate a header file for the compiled code. There will
|
||
be a header file as well as an internal header file being generated called
|
||
<provided_name>.h and <provided_name>_internal.h
|
||
|
||
The following call is a simple example to the vala_precompile macro showing an
|
||
example to every of the optional sections::
|
||
|
||
vala_precompile(VALA_C
|
||
source1.vala
|
||
source2.vala
|
||
source3.vala
|
||
PACKAGES
|
||
gtk+-2.0
|
||
gio-1.0
|
||
posix
|
||
OPTIONS
|
||
--thread
|
||
CUSTOM_VAPIS
|
||
some_vapi.vapi
|
||
GENERATE_VAPI
|
||
myvapi
|
||
GENERATE_HEADER
|
||
myheader
|
||
)
|
||
|
||
Most important is the variable VALA_C which will contain all the generated c
|
||
file names after the call. The easiest way to use this information is to tell
|
||
CMake to create an executable out of it.
|
||
|
||
::
|
||
|
||
add_executable(myexecutable ${VALA_C})
|
||
|
||
|
||
Further reading
|
||
===============
|
||
|
||
The `Pdf Presenter Console`__ , which is a vala based project of mine, makes
|
||
heavy usage of the here described macros. To look at a real world example of
|
||
these macros the mentioned project is the right place to take a look. The svn
|
||
trunk of it can be found at::
|
||
|
||
svn://pureenergy.cc/pdf_presenter_console/trunk
|
||
|
||
|
||
__ http://westhoffswelt.de/projects/pdf_presenter_console.html
|
||
|
||
|
||
Acknowledgments
|
||
===============
|
||
|
||
Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me
|
||
a lot with the initial version of this macros and always answered my mostly
|
||
dumb CMake questions.
|
||
|
||
.. _CMake: http://cmake.org
|
||
.. _Vala: http://live.gnome.org/Vala
|
||
.. _Genie: http://live.gnome.org/Genie
|
||
|
||
|
||
|
||
..
|
||
Local Variables:
|
||
mode: rst
|
||
fill-column: 79
|
||
End:
|
||
vim: et syn=rst tw=79
|