]> git.donarmstrong.com Git - debhelper.git/blob - Debian/Debhelper/Buildsystem/cmake.pm
d7504d18784919cc2f930b4604a514b337ae8458
[debhelper.git] / Debian / Debhelper / Buildsystem / cmake.pm
1 # A buildsystem plugin for handling CMake based projects.
2 # It enforces outside-source building.
3 #
4 # Copyright: © 2008-2009 Modestas Vainius
5 # License: GPL-2+
6
7 package Debian::Debhelper::Buildsystem::cmake;
8
9 use strict;
10 use Debian::Debhelper::Dh_Lib;
11 use base 'Debian::Debhelper::Buildsystem::makefile';
12
13 sub _add_cmake_flag {
14         my ($self, $name, $val) = @_;
15         push @{$self->{cmake_flags}}, "-D$name=$val";
16 }
17
18 sub DESCRIPTION {
19         "support for building CMake based packages (outside-source tree only)"
20 }
21
22 sub is_buildable {
23         return -e "CMakeLists.txt";
24 }
25
26 sub new {
27         my $cls=shift;
28         my $self=$cls->SUPER::new(@_);
29         # Enfore outside-source tree builds.
30         $self->enforce_outside_source_building();
31         $self->{cmake_flags} = [];
32         return $self;
33 }
34
35 sub configure_impl {
36         my $self=shift;
37
38         # Standard set of cmake flags
39         $self->_add_cmake_flag("CMAKE_INSTALL_PREFIX", "/usr");
40         $self->_add_cmake_flag("CMAKE_C_FLAGS", $ENV{CFLAGS}) if (exists $ENV{CFLAGS});
41         $self->_add_cmake_flag("CMAKE_CXX_FLAGS", $ENV{CXXFLAGS}) if (exists $ENV{CXXFLAGS});
42         $self->_add_cmake_flag("CMAKE_SKIP_RPATH", "ON");
43         $self->_add_cmake_flag("CMAKE_VERBOSE_MAKEFILE", "ON");
44         # TODO: LDFLAGS
45
46         doit("cmake", $self->get_topdir(), @{$self->{cmake_flags}}, @_);
47 }
48
49 1;