Skip to content

Commit

Permalink
Closes #4982 Closes #4964 Switched to CMake, added an installer/unins…
Browse files Browse the repository at this point in the history
…taller
  • Loading branch information
eric-yorba committed Apr 24, 2012
1 parent 3b1c6d8 commit 9e3bab4
Show file tree
Hide file tree
Showing 21 changed files with 1,175 additions and 483 deletions.
42 changes: 42 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Geary build script
# Copyright 2011-2012 Yorba Foundation
#
# Check http://webdev.elementaryos.org/docs/developer-guide/cmake for documentation

cmake_minimum_required(VERSION 2.8)
cmake_policy(VERSION 2.6)

project(geary)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake )

#
# Base bits
#
set(GETTEXT_PACKAGE "geary")
set(RELEASE_NAME "Lightweight email client for Gnome.")
set(VERSION "0.0.0+trunk")
set(VERSION_INFO "Release")

add_subdirectory(src)
add_subdirectory(icons)
add_subdirectory(sql)
add_subdirectory(ui)

#
# Uninstall target
#
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY
)

add_custom_target(
uninstall
COMMAND
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
COMMAND
${glib_schema_compiler} ${GSETTINGS_DIR}
)

65 changes: 65 additions & 0 deletions cmake/FindVala.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
##
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# The views and conclusions contained in the software and documentation are those
# of the authors and should not be interpreted as representing official policies,
# either expressed or implied, of Jakob Westhoff
##

##
# Find module for the Vala compiler (valac)
#
# This module determines wheter a Vala compiler is installed on the current
# system and where its executable is.
#
# Call the module using "find_package(Vala) from within your CMakeLists.txt.
#
# The following variables will be set after an invocation:
#
# 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
##


# Search for the valac executable in the usual system paths.
find_program(VALA_EXECUTABLE
NAMES valac)

# Handle the QUIETLY and REQUIRED arguments, which may be given to the find call.
# Furthermore set VALA_FOUND to TRUE if Vala has been found (aka.
# VALA_EXECUTABLE is set)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Vala DEFAULT_MSG VALA_EXECUTABLE)

mark_as_advanced(VALA_EXECUTABLE)

# Determine the valac version
if(VALA_FOUND)
execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
OUTPUT_VARIABLE "VALA_VERSION")
string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
string(STRIP ${VALA_VERSION} "VALA_VERSION")
endif(VALA_FOUND)
108 changes: 108 additions & 0 deletions cmake/GSettings.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# GSettings.cmake
# Originally based on CMake macros written for Marlin
# Updated by Yorba for newer versions of GLib.
#
# NOTE: This module does an in-place compilation of GSettings; the
# resulting gschemas.compiled file will end up in the same
# source folder as the original schema(s).

option(GSETTINGS_COMPILE "Compile GSettings schemas. Can be disabled for packaging reasons." ON)
option(GSETTINGS_COMPILE_IN_PLACE "Compile GSettings schemas in the build folder. This is used for running an appliction without installing the GSettings systemwide. The application will need to set GSETTINGS_SCHEMA_DIR" ON)

if (GSETTINGS_COMPILE)
message(STATUS "GSettings schemas will be compiled.")
endif ()

if (GSETTINGS_COMPILE_IN_PLACE)
message(STATUS "GSettings schemas will be compiled in-place.")
endif ()

macro(add_schemas GSETTINGS_TARGET SCHEMA_DIRECTORY)
set(PKG_CONFIG_EXECUTABLE pkg-config)

# Locate all schema files.
file(GLOB all_schema_files
"${SCHEMA_DIRECTORY}/*.gschema.xml"
)

# Find the GLib path for schema installation
execute_process(
COMMAND
${PKG_CONFIG_EXECUTABLE}
glib-2.0
--variable prefix
OUTPUT_VARIABLE
_glib_prefix
OUTPUT_STRIP_TRAILING_WHITESPACE
)

set(GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/" CACHE INTERNAL "")

# Fetch path for schema compiler from pkg-config
execute_process(
COMMAND
${PKG_CONFIG_EXECUTABLE}
gio-2.0
--variable
glib_compile_schemas
OUTPUT_VARIABLE
_glib_compile_schemas
OUTPUT_STRIP_TRAILING_WHITESPACE
)

set(glib_schema_compiler ${_glib_compile_schemas} CACHE INTERNAL "")

if (GSETTINGS_COMPILE_IN_PLACE)
set(COMPILE_IN_PLACE_DIR ${CMAKE_BINARY_DIR}/gsettings)
add_custom_command(
TARGET
${GSETTINGS_TARGET}
COMMAND
${CMAKE_COMMAND} -E make_directory "${COMPILE_IN_PLACE_DIR}"
)

# Copy all schemas to the build folder.
foreach(schema_file ${all_schema_files})
add_custom_command(
TARGET
${GSETTINGS_TARGET}
COMMAND
${CMAKE_COMMAND} -E copy "${schema_file}" "${COMPILE_IN_PLACE_DIR}"
COMMENT "Copying schema ${schema_file} to ${COMPILE_IN_PLACE_DIR}"
)
endforeach()

# Compile schema in-place.
add_custom_command(
TARGET
${GSETTINGS_TARGET}
COMMAND
${glib_schema_compiler} ${COMPILE_IN_PLACE_DIR}
COMMENT "Compiling schemas in folder: ${COMPILE_IN_PLACE_DIR}"
)
endif ()

# Install and recompile schemas
message(STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}")

install(
FILES
${all_schema_files}
DESTINATION
${GSETTINGS_DIR}
OPTIONAL
)

if (GSETTINGS_COMPILE)
install(
CODE
"message (STATUS \"Compiling GSettings schemas\")"
)

install(
CODE
"execute_process (COMMAND ${glib_schema_compiler} ${GSETTINGS_DIR})"
)
endif ()
endmacro(add_schemas)

36 changes: 36 additions & 0 deletions cmake/ParseArguments.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
##
# This is a helper Macro to parse optional arguments in Macros/Functions
# It has been taken from the public CMake wiki.
# See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and
# licensing.
##
macro(parse_arguments prefix arg_names option_names)
set(DEFAULT_ARGS)
foreach(arg_name ${arg_names})
set(${prefix}_${arg_name})
endforeach(arg_name)
foreach(option ${option_names})
set(${prefix}_${option} FALSE)
endforeach(option)

set(current_arg_name DEFAULT_ARGS)
set(current_arg_list)
foreach(arg ${ARGN})
set(larg_names ${arg_names})
list(FIND larg_names "${arg}" is_arg_name)
if(is_arg_name GREATER -1)
set(${prefix}_${current_arg_name} ${current_arg_list})
set(current_arg_name ${arg})
set(current_arg_list)
else(is_arg_name GREATER -1)
set(loption_names ${option_names})
list(FIND loption_names "${arg}" is_option)
if(is_option GREATER -1)
set(${prefix}_${arg} TRUE)
else(is_option GREATER -1)
set(current_arg_list ${current_arg_list} ${arg})
endif(is_option GREATER -1)
endif(is_arg_name GREATER -1)
endforeach(arg)
set(${prefix}_${current_arg_name} ${current_arg_list})
endmacro(parse_arguments)
Loading

0 comments on commit 9e3bab4

Please sign in to comment.