diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3927d881288d90034c0fd9fc0d548cf677d6f260..f26726ef4b8afdd3f7981d3d317830d9446026b7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -125,67 +125,6 @@ stages: -intel_15_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - -intel_15_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - -intel_15_hybrid: - <<: *build_hybrid_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - -intel_15_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - -intel_15_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - -intel_15_hybrid_dbg: - <<: *build_hybrid_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - tags: - - docker - - intel - -intel_15_hybrid_dbg_sp: - <<: *build_hybrid_dbg_sp_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:15 - only: - - triggers - tags: - - docker - - intel - intel_16_serial: <<: *build_serial_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:16 @@ -239,8 +178,6 @@ intel_16_mpionly_dbg: intel_16_hybrid_dbg: <<: *build_hybrid_dbg_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:16 - only: - - triggers tags: - cuda - docker @@ -309,172 +246,6 @@ intel_17_hybrid_dbg_sp: - docker - intel -gcc_4.7_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.7_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.7_hybrid: - <<: *build_hybrid_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.7_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.7_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.7_hybrid_dbg: - <<: *build_hybrid_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - tags: - - docker - -gcc_4.7_hybrid_dbg_sp: - <<: *build_hybrid_dbg_sp_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.7 - only: - - triggers - tags: - - docker - -gcc_4.8_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_hybrid: - <<: *build_hybrid_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_hybrid_dbg: - <<: *build_hybrid_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.8_hybrid_dbg_sp: - <<: *build_hybrid_dbg_sp_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.8 - only: - - triggers - tags: - - docker - -gcc_4.9_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_hybrid: - <<: *build_hybrid_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_hybrid_dbg: - <<: *build_hybrid_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - -gcc_4.9_hybrid_dbg_sp: - <<: *build_hybrid_dbg_sp_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:4.9 - only: - - triggers - tags: - - docker - gcc_5_serial: <<: *build_serial_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:5 @@ -519,8 +290,6 @@ gcc_5_mpionly_dbg: gcc_5_hybrid_dbg: <<: *build_hybrid_dbg_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/gcc:5 - only: - - triggers tags: - cuda - docker @@ -636,72 +405,6 @@ gcc_7_hybrid_dbg_sp: tags: - docker -clang_3.4_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.4 - only: - - triggers - tags: - - docker - -clang_3.4_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.4 - only: - - triggers - tags: - - docker - -clang_3.4_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.4 - only: - - triggers - tags: - - docker - -clang_3.4_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.4 - tags: - - docker - -clang_3.5_serial: - <<: *build_serial_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.5 - only: - - triggers - tags: - - cuda - - docker - -clang_3.5_mpionly: - <<: *build_mpionly_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.5 - only: - - triggers - tags: - - cuda - - docker - -clang_3.5_serial_dbg: - <<: *build_serial_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.5 - only: - - triggers - tags: - - cuda - - docker - -clang_3.5_mpionly_dbg: - <<: *build_mpionly_dbg_definition - image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.5 - only: - - triggers - tags: - - cuda - - docker - clang_3.6_serial: <<: *build_serial_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.6 @@ -732,8 +435,6 @@ clang_3.6_serial_dbg: clang_3.6_mpionly_dbg: <<: *build_mpionly_dbg_definition image: i10git.cs.fau.de:5005/walberla/buildenvs/clang:3.6 - only: - - triggers tags: - cuda - docker @@ -1097,88 +798,6 @@ coverage: - ctest -LE $CTEST_EXCLUDE_LABELS -C $BUILD_CONFIGURATION --output-on-failure -j 4 -msvc-12_Hybrid_Dbg: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "DebugOptimized" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "ON" - WALBERLA_BUILD_WITH_OPENMP: "ON" - WALBERLA_DOUBLE_ACCURACY: "ON" - -msvc-12_Hybrid_SP_Dbg: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "DebugOptimized" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "ON" - WALBERLA_BUILD_WITH_OPENMP: "ON" - WALBERLA_DOUBLE_ACCURACY: "OFF" - only: - - triggers - -msvc-12_Hybrid: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "Release" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "ON" - WALBERLA_BUILD_WITH_OPENMP: "ON" - WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers - -msvc-12_Serial_Dbg: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "DebugOptimized" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "OFF" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers - -msvc-12_Serial: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "Release" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "OFF" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers - -msvc-12_MpiOnly_Dbg: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "DebugOptimized" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "ON" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers - -msvc-12_MpiOnly: - <<: *win_build_definition - variables: - CMAKE_GENERATOR: "Visual Studio 12 2013 Win64" - BUILD_CONFIGURATION: "Release" - CTEST_EXCLUDE_LABELS: "longrun" - WALBERLA_BUILD_WITH_MPI: "ON" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers - msvc-14_Hybrid_Dbg: <<: *win_build_definition variables: @@ -1188,8 +807,6 @@ msvc-14_Hybrid_Dbg: WALBERLA_BUILD_WITH_MPI: "ON" WALBERLA_BUILD_WITH_OPENMP: "ON" WALBERLA_DOUBLE_ACCURACY: "ON" - only: - - triggers msvc-14_Hybrid_SP_Dbg: <<: *win_build_definition @@ -1348,14 +965,10 @@ msvc-14.1_MpiOnly: .conda-deploy: &conda_deploy_definition stage: deploy before_script: - - conda update -y conda - - conda update -y python - conda install -y conda-build anaconda-client - anaconda login --username $CONDA_DEPLOY_USER --password $CONDA_DEPLOY_PASSWORD --hostname $CI_JOB_ID - conda config --set anaconda_upload yes - conda config --add channels lssfau - - conda -V - - conda build -V after_script: - anaconda logout dependencies: [] @@ -1364,41 +977,21 @@ msvc-14.1_MpiOnly: - master@walberla/walberla - tags@walberla/walberla -conda-py36-win-withoutLbm: +conda-py36-win: <<: *conda_deploy_definition tags: - win script: - - conda build --python=3.6 --user=lssfau utilities\\conda\\withoutLbm + - conda build --python=3.6 --user=lssfau utilities\\conda\\walberla -conda-py35-win-withoutLbm: +conda-py35-win: <<: *conda_deploy_definition tags: - win script: - - conda build --python=3.5 --user=lssfau utilities\\conda\\withoutLbm + - conda build --python=3.5 --user=lssfau utilities\\conda\\walberla -conda-py36-linux-withoutLbm: - <<: *conda_deploy_definition - tags: - - docker - image: continuumio/miniconda3 - script: - - apt-get update - - apt-get install -y build-essential - - conda build --python=3.6 --user=lssfau utilities/conda/withoutLbm - -conda-py35-linux-withoutLbm: - <<: *conda_deploy_definition - tags: - - docker - image: continuumio/miniconda3 - script: - - apt-get update - - apt-get install -y build-essential - - conda build --python=3.5 --user=lssfau utilities/conda/withoutLbm - -conda-py36-linux-withLbm: +conda-py36-linux: <<: *conda_deploy_definition tags: - docker @@ -1406,9 +999,9 @@ conda-py36-linux-withLbm: script: - apt-get update - apt-get install -y build-essential - - conda build --python=3.6 --user=lssfau utilities/conda/withLbm + - conda build --python=3.6 --user=lssfau utilities/conda/walberla -conda-py35-linux-withLbm: +conda-py35-linux: <<: *conda_deploy_definition tags: - docker @@ -1416,4 +1009,4 @@ conda-py35-linux-withLbm: script: - apt-get update - apt-get install -y build-essential - - conda build --python=3.5 --user=lssfau utilities/conda/withLbm + - conda build --python=3.5 --user=lssfau utilities/conda/walberla diff --git a/CMakeLists.txt b/CMakeLists.txt index acfc2e964a4b4f88a2eab85c5488c8d4ef5e32ad..dba76a843fcf2c42cdf168bec254c89b5757d9d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ ## ############################################################################################################################ -CMAKE_MINIMUM_REQUIRED (VERSION 2.8) +CMAKE_MINIMUM_REQUIRED (VERSION 3.1) PROJECT ( walberla ) @@ -36,11 +36,7 @@ include ( waLBerlaFunctions ) set_version( 4 0 ) -if( CMAKE_VERSION VERSION_LESS 2.8.3 ) - include( CMakeParseArgumentsCompat ) -else() - include( CMakeParseArguments ) -endif() +include( CMakeParseArguments ) # Enable CTest enable_testing() @@ -166,6 +162,9 @@ if( CMAKE_CXX_COMPILER MATCHES "icpc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpc" SET(CMAKE_LINKER "${XILD}") ENDIF(XILD) MARK_AS_ADVANCED(XILD) + if( CMAKE_VERSION VERSION_LESS 3.6.0 ) + add_flag ( CMAKE_CXX_FLAGS "-std=c++14" ) + endif() else() option ( WALBERLA_CXX_COMPILER_IS_INTEL "Use Intel compiler" OFF ) endif() @@ -204,7 +203,7 @@ endif() mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_NEC ) # Check for Clang compiler -if( CMAKE_CXX_COMPILER MATCHES "clang" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) +if( CMAKE_CXX_COMPILER MATCHES "clang" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" ) option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" ON ) else() option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" OFF ) @@ -270,30 +269,18 @@ if ( WALBERLA_PROFILE_USE ) endif() endif() +set( CMAKE_CXX_STANDARD 14 ) +set( CMAKE_CXX_STANDARD_REQUIRED ON ) +set( CMAKE_CXX_EXTENSIONS OFF ) + # common flags for intel and g++ if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL ) - if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7 ) - add_flag ( CMAKE_CXX_FLAGS "-std=c++0x" ) - else() - add_flag ( CMAKE_CXX_FLAGS "-std=c++11" ) - endif() - #add_flag ( CMAKE_C_FLAGS "-std=c99" ) add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow" ) endif() -# C++11 language features for IBM compiler -if( WALBERLA_CXX_COMPILER_IS_IBM ) - add_flag ( CMAKE_CXX_FLAGS "-qlanglvl=autotypededuction -qlanglvl=decltype -qlanglvl=static_assert -qlanglvl=rightanglebracket -qlanglvl=c99longlong" ) -endif() - -# C++11 language features for Cray compiler -if( WALBERLA_CXX_COMPILER_IS_CRAY ) - add_flag ( CMAKE_CXX_FLAGS "-hstd=c++11" ) -endif() - # C++11 language features for NEC compiler if( WALBERLA_CXX_COMPILER_IS_NEC ) - add_flag ( CMAKE_CXX_FLAGS "-Kcpp11 -Krtti -Kexceptions -size_t64 -Kgcc" ) + add_flag ( CMAKE_CXX_FLAGS "-Kcpp14 -Krtti -Kexceptions -size_t64 -Kgcc" ) add_flag ( CMAKE_CXX_FLAGS "-D__BIG_ENDIAN -D__BYTE_ORDER=__BIG_ENDIAN" ) add_flag ( CMAKE_CXX_FLAGS "-Tnoauto,used" ) add_flag ( CMAKE_EXE_LINKER_FLAGS "-Wl,-h,muldefs" ) @@ -384,7 +371,7 @@ endif ( ) if ( WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -std=c++11 -Qunused-arguments" ) + add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments" ) add_flag ( CMAKE_CXX_FLAGS "-D'_LIBCPP_EXTERN_TEMPLATE(...)='") endif ( ) diff --git a/cmake/CMakeParseArgumentsCompat.cmake b/cmake/CMakeParseArgumentsCompat.cmake deleted file mode 100644 index 2f54a2336b81558ce7803a4ec6e6d78a94f6dc1c..0000000000000000000000000000000000000000 --- a/cmake/CMakeParseArgumentsCompat.cmake +++ /dev/null @@ -1,138 +0,0 @@ -# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...) -# -# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for -# parsing the arguments given to that macro or function. -# It processes the arguments and defines a set of variables which hold the -# values of the respective options. -# -# The <options> argument contains all options for the respective macro, -# i.e. keywords which can be used when calling the macro without any value -# following, like e.g. the OPTIONAL keyword of the install() command. -# -# The <one_value_keywords> argument contains all keywords for this macro -# which are followed by one value, like e.g. DESTINATION keyword of the -# install() command. -# -# The <multi_value_keywords> argument contains all keywords for this macro -# which can be followed by more than one value, like e.g. the TARGETS or -# FILES keywords of the install() command. -# -# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the -# keywords listed in <options>, <one_value_keywords> and -# <multi_value_keywords> a variable composed of the given <prefix> -# followed by "_" and the name of the respective keyword. -# These variables will then hold the respective value from the argument list. -# For the <options> keywords this will be TRUE or FALSE. -# -# All remaining arguments are collected in a variable -# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see whether -# your macro was called with unrecognized parameters. -# -# As an example here a my_install() macro, which takes similar arguments as the -# real install() command: -# -# function(MY_INSTALL) -# set(options OPTIONAL FAST) -# set(oneValueArgs DESTINATION RENAME) -# set(multiValueArgs TARGETS CONFIGURATIONS) -# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) -# ... -# -# Assume my_install() has been called like this: -# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) -# -# After the cmake_parse_arguments() call the macro will have set the following -# variables: -# MY_INSTALL_OPTIONAL = TRUE -# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() -# MY_INSTALL_DESTINATION = "bin" -# MY_INSTALL_RENAME = "" (was not used) -# MY_INSTALL_TARGETS = "foo;bar" -# MY_INSTALL_CONFIGURATIONS = "" (was not used) -# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" -# -# You can the continue and process these variables. -# -# Keywords terminate lists of values, e.g. if directly after a one_value_keyword -# another recognized keyword follows, this is interpreted as the beginning of -# the new option. -# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in -# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would -# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. - -#============================================================================= -# Copyright 2010 Alexander Neundorf <neundorf@kde.org> -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - - -if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) - return() -endif() -set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) - - -function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) - # first set all result variables to empty/FALSE - foreach(arg_name ${_singleArgNames} ${_multiArgNames}) - set(${prefix}_${arg_name}) - endforeach(arg_name) - - foreach(option ${_optionNames}) - set(${prefix}_${option} FALSE) - endforeach(option) - - set(${prefix}_UNPARSED_ARGUMENTS) - - set(insideValues FALSE) - set(currentArgName) - - # now iterate over all arguments and fill the result variables - foreach(currentArg ${ARGN}) - list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword - - if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) - if(insideValues) - if(insideValues STREQUAL "SINGLE") - set(${prefix}_${currentArgName} ${currentArg}) - set(insideValues FALSE) - elseif(insideValues STREQUAL "MULTI") - list(APPEND ${prefix}_${currentArgName} ${currentArg}) - endif() - else(insideValues) - list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) - endif(insideValues) - else() - if(NOT ${optionIndex} EQUAL -1) - set(${prefix}_${currentArg} TRUE) - set(insideValues FALSE) - elseif(NOT ${singleArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "SINGLE") - elseif(NOT ${multiArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "MULTI") - endif() - endif() - - endforeach(currentArg) - - # propagate the result variables to the caller: - foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) - set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) - endforeach(arg_name) - set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) - -endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs)