1*a58d3d2aSXin Li# - Compile and run code to check for C features 2*a58d3d2aSXin Li# 3*a58d3d2aSXin Li# This functions compiles a source file under the `cmake` folder 4*a58d3d2aSXin Li# and adds the corresponding `HAVE_[FILENAME]` flag to the CMake 5*a58d3d2aSXin Li# environment 6*a58d3d2aSXin Li# 7*a58d3d2aSXin Li# c_feature_check(<FLAG> [<VARIANT>]) 8*a58d3d2aSXin Li# 9*a58d3d2aSXin Li# - Example 10*a58d3d2aSXin Li# 11*a58d3d2aSXin Li# include(CFeatureCheck) 12*a58d3d2aSXin Li# c_feature_check(VLA) 13*a58d3d2aSXin Li 14*a58d3d2aSXin Liif(__c_feature_check) 15*a58d3d2aSXin Li return() 16*a58d3d2aSXin Liendif() 17*a58d3d2aSXin Liset(__c_feature_check INCLUDED) 18*a58d3d2aSXin Li 19*a58d3d2aSXin Lifunction(c_feature_check FILE) 20*a58d3d2aSXin Li string(TOLOWER ${FILE} FILE) 21*a58d3d2aSXin Li string(TOUPPER ${FILE} VAR) 22*a58d3d2aSXin Li string(TOUPPER "${VAR}_SUPPORTED" FEATURE) 23*a58d3d2aSXin Li if (DEFINED ${VAR}_SUPPORTED) 24*a58d3d2aSXin Li set(${VAR}_SUPPORTED 1 PARENT_SCOPE) 25*a58d3d2aSXin Li return() 26*a58d3d2aSXin Li endif() 27*a58d3d2aSXin Li 28*a58d3d2aSXin Li if (NOT DEFINED COMPILE_${FEATURE}) 29*a58d3d2aSXin Li message(STATUS "Performing Test ${FEATURE}") 30*a58d3d2aSXin Li try_compile(COMPILE_${FEATURE} ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/${FILE}.c) 31*a58d3d2aSXin Li endif() 32*a58d3d2aSXin Li 33*a58d3d2aSXin Li if(COMPILE_${FEATURE}) 34*a58d3d2aSXin Li message(STATUS "Performing Test ${FEATURE} -- success") 35*a58d3d2aSXin Li set(${VAR}_SUPPORTED 1 PARENT_SCOPE) 36*a58d3d2aSXin Li else() 37*a58d3d2aSXin Li message(STATUS "Performing Test ${FEATURE} -- failed to compile") 38*a58d3d2aSXin Li endif() 39*a58d3d2aSXin Liendfunction() 40