pamac-classic/autovala/cmake/ValaVersion.cmake

154 lines
5.9 KiB
CMake

##
# Copyright (C) 2014 Raster Software Vigo
# Autovala is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Autovala is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2013, Valama development team
#
# 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 ensure_version)
if (USE_VALA_BINARY)
message(STATUS "Forced use of vala binary ${USE_VALA_BINARY}")
set(VALA_EXECUTABLE ${USE_VALA_BINARY})
else (USE_VALA_BINARY)
message(STATUS "checking for Vala version of valac-${ensure_version}")
unset(version_accepted)
execute_process(COMMAND "valac-${ensure_version}" "--version"
OUTPUT_VARIABLE "VALA_VERSION" OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT VALA_VERSION)
find_program(VALA_EXECUTABLE "valac")
# If the specific version asked for this project is not found,
# try to use the one pointed by the valac link
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 ${ensure_version}" )
execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
OUTPUT_VARIABLE "VALA_VERSION" OUTPUT_STRIP_TRAILING_WHITESPACE)
else(NOT VALA_VERSION)
set(VALA_EXECUTABLE "valac-${ensure_version}")
endif(NOT VALA_VERSION)
# this code allows to identify development versions as the right version
# e.g. 0.19.1 -> 0.20 ; 0.20.1 -> 0.20 ;
# But this code seems to not be fine 0.24.0.2-2235 -> 0.26
# Thanks to Yannick Inizan
string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
string(STRIP ${VALA_VERSION} "VALA_VERSION")
string(REPLACE "." ";" VALA_LIST "${VALA_VERSION}")
list(GET VALA_LIST 0 maj_ver)
list(GET VALA_LIST 1 min_ver)
list(GET VALA_LIST 2 rev_ver)
math(EXPR is_odd "${min_ver} % 2")
list(LENGTH VALA_LIST len)
#if((${is_odd} EQUAL 1))
# math(EXPR min_ver "${min_ver} + 1")
#elseif(len GREATER 3)
# math(EXPR min_ver "${min_ver} + 2")
#endif()
set(VALA_SVERSION "${maj_ver}.${min_ver}" CACHE INTERNAL "")
# MINIMUM is the default if no option is specified
if(ARGS_EXACT)
if(${VALA_SVERSION} VERSION_EQUAL ${ensure_version} )
set(version_accepted TRUE)
endif(${VALA_SVERSION} VERSION_EQUAL ${ensure_version})
elseif(ARGS_MAXIMUM)
if(${VALA_SVERSION} VERSION_LESS ${ensure_version} OR ${VALA_SVERSION} VERSION_EQUAL ${ensure_version})
set(version_accepted TRUE)
endif(${VALA_SVERSION} VERSION_LESS ${ensure_version} OR ${VALA_SVERSION} VERSION_EQUAL ${ensure_version})
else(ARGS_MAXIMUM)
if(${VALA_SVERSION} VERSION_GREATER ${ensure_version} OR ${VALA_SVERSION} VERSION_EQUAL ${ensure_version})
set(version_accepted TRUE)
endif(${VALA_SVERSION} VERSION_GREATER ${ensure_version} OR ${VALA_SVERSION} VERSION_EQUAL ${ensure_version})
endif(ARGS_EXACT)
if (NOT version_accepted)
message(FATAL_ERROR
"Vala version ${ensure_version} ${error_message}is required."
)
endif(NOT version_accepted)
message(STATUS
" found Vala, version ${VALA_SVERSION}"
)
endif(USE_VALA_BINARY)
endmacro(ensure_vala_version)