Permalink
Browse files

Use more CMake functionality

- use cmake for version checking rather than custom macro
- use cmake_parse_arguments rather than custom macro
- make vala_precompile a function (was a macro)
- set VALA_USE_FILE variable
- put copyright below documentation (required by cmake doc generator)

use it like this:
  find_package(Vala "0.12" REQUIRED)
  inlcude(${VALA_USE_FILE})
  vala_precompile...  (as before)
  • Loading branch information...
purpleKarrot committed May 8, 2011
1 parent 285255b commit f7b486d1a24d4186283111b466d0e652a151450a
Showing with 94 additions and 217 deletions.
  1. +31 −27 vala/FindVala.cmake
  2. +0 −36 vala/ParseArguments.cmake
  3. +63 −58 vala/{ValaPrecompile.cmake → UseVala.cmake}
  4. +0 −96 vala/ValaVersion.cmake
View
@@ -1,5 +1,22 @@
+##
+# 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
+# VALA_USE_FILE Include this file to define the vala_precompile function
+##
+
##
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
+# Copyright 2010-2011 Daniel Pfeifer
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
@@ -27,39 +44,26 @@
# 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)
+find_program(VALA_EXECUTABLE valac)
+mark_as_advanced(VALA_EXECUTABLE)
+
+# Determine the valac version
+if(VALA_EXECUTABLE)
+ execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
+ OUTPUT_VARIABLE VALA_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE "Vala " "" VALA_VERSION "${VALA_VERSION}")
+endif(VALA_EXECUTABLE)
# 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)
+find_package_handle_standard_args(Vala
+ REQUIRED_VARS VALA_EXECUTABLE
+ VERSION_VAR VALA_VERSION)
-mark_as_advanced(VALA_EXECUTABLE)
+set(VALA_USE_FILE "${CMAKE_CURRENT_LIST_DIR}/UseVala.cmake")
-# 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)
View
@@ -1,36 +0,0 @@
-##
-# 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)
@@ -1,60 +1,28 @@
-##
-# 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
-##
-
-include(ParseArguments)
-find_package(Vala REQUIRED)
-
##
# Compile vala files to their c equivalents for further processing.
#
-# The "vala_precompile" macro takes care of calling the valac executable on the
-# given source to produce c files which can then be processed further using
+# The "vala_precompile" function takes care of calling the valac executable on
+# the given source to produce c files which can then be processed further using
# default cmake functions.
-#
+#
# 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
# conjuction with functions like "add_executable" or others to create the
# neccessary 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:
-#
+#
+# SOURCES
+# 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.
+#
# 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.
@@ -68,7 +36,7 @@ find_package(Vala REQUIRED)
# 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
@@ -77,32 +45,70 @@ find_package(Vala REQUIRED)
# The following call is a simple example to the vala_precompile macro showing
# an example to every of the optional sections:
#
+# find_package(Vala "0.12" REQUIRED)
+# inlcude(${VALA_USE_FILE})
+#
# vala_precompile(VALA_C
+# SOURCES
# source1.vala
# source2.vala
# source3.vala
-# PACKAGES
+# PACKAGES
# gtk+-2.0
# gio-1.0
# posix
-# DIRECTORY
+# DIRECTORY
# gen
-# OPTIONS
+# OPTIONS
# --thread
-# CUSTOM_VAPIS
+# CUSTOM_VAPIS
# some_vapi.vapi
-# GENERATE_VAPI
+# GENERATE_VAPI
# myvapi
-# GENERATE_HEADER
+# GENERATE_HEADER
# myheader
-# )
+# )
#
# Most important is the variable VALA_C which will contain all the generated c
# file names after the call.
##
-macro(vala_precompile output)
- parse_arguments(ARGS "PACKAGES;OPTIONS;DIRECTORY;GENERATE_HEADER;GENERATE_VAPI;CUSTOM_VAPIS" "" ${ARGN})
+##
+# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
+# Copyright 2010-2011 Daniel Pfeifer
+#
+# 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
+##
+
+include(CMakeParseArguments)
+
+function(vala_precompile output)
+ cmake_parse_arguments(ARGS "" "DIRECTORY;GENERATE_HEADER;GENERATE_VAPI"
+ "SOURCES;PACKAGES;OPTIONS;CUSTOM_VAPIS" ${ARGN})
+
if(ARGS_DIRECTORY)
set(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_DIRECTORY})
else(ARGS_DIRECTORY)
@@ -115,15 +121,13 @@ macro(vala_precompile output)
endforeach(pkg ${ARGS_PACKAGES})
set(in_files "")
set(out_files "")
- set(${output} "")
- foreach(src ${ARGS_DEFAULT_ARGS})
+ foreach(src ${ARGS_SOURCES} ${ARGS_UNPARSED_ARGUMENTS})
list(APPEND in_files "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
string(REPLACE ".vala" ".c" src ${src})
string(REPLACE ".gs" ".c" src ${src})
set(out_file "${DIRECTORY}/${src}")
list(APPEND out_files "${DIRECTORY}/${src}")
- list(APPEND ${output} ${out_file})
- endforeach(src ${ARGS_DEFAULT_ARGS})
+ endforeach(src ${ARGS_SOURCES} ${ARGS_UNPARSED_ARGUMENTS})
set(custom_vapi_arguments "")
if(ARGS_CUSTOM_VAPIS)
@@ -172,4 +176,5 @@ macro(vala_precompile output)
${in_files}
${ARGS_CUSTOM_VAPIS}
)
-endmacro(vala_precompile)
+ set(${output} ${out_files} PARENT_SCOPE)
+endfunction(vala_precompile)
View
@@ -1,96 +0,0 @@
-##
-# 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
-##
-
-include(ParseArguments)
-find_package(Vala REQUIRED)
-
-##
-# Ensure a certain valac version is available
-#
-# The initial argument is the version to check for
-#
-# It may be followed by a optional parameter to specifiy a version range. The
-# following options are valid:
-#
-# EXACT
-# Vala needs to be available in the exact version given
-#
-# MINIMUM
-# The provided version is the minimum version. Therefore Vala needs to be
-# available in the given version or any higher version
-#
-# MAXIMUM
-# The provided version is the maximum. Therefore Vala needs to be available
-# in the given version or any version older than this
-#
-# If no option is specified the version will be treated as a minimal version.
-##
-macro(ensure_vala_version version)
- parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN})
- set(compare_message "")
- set(error_message "")
- if(ARGS_MINIMUM)
- set(compare_message "a minimum ")
- set(error_message "or greater ")
- elseif(ARGS_MAXIMUM)
- set(compare_message "a maximum ")
- set(error_message "or less ")
- endif(ARGS_MINIMUM)
-
- message(STATUS
- "checking for ${compare_message}Vala version of ${version}"
- )
-
- unset(version_accepted)
-
- # MINIMUM is the default if no option is specified
- if(ARGS_EXACT)
- if(${VALA_VERSION} VERSION_EQUAL ${version} )
- set(version_accepted TRUE)
- endif(${VALA_VERSION} VERSION_EQUAL ${version})
- elseif(ARGS_MAXIMUM)
- if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
- set(version_accepted TRUE)
- endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
- else(ARGS_MAXIMUM)
- if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
- set(version_accepted TRUE)
- endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
- endif(ARGS_EXACT)
-
- if (NOT version_accepted)
- message(FATAL_ERROR
- "Vala version ${version} ${error_message}is required."
- )
- endif(NOT version_accepted)
-
- message(STATUS
- " found Vala, version ${VALA_VERSION}"
- )
-endmacro(ensure_vala_version)

0 comments on commit f7b486d

Please sign in to comment.