yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
47475114d
master
1#!/usr/bin/env bash 2 3set -euo pipefail 4 5# File paths 6DOCS_FILE ="docs/building.md" 7CMAKE_CACHE ="build/CMakeCache.txt" 8 9# Check if required files exist 10if [[ ! -f" $ DOCS_FILE " ]];then 11echo "::warning::Documentation file $ DOCS_FILE not found" 12exit 0 13fi 14 15if [[ ! -f" $ CMAKE_CACHE " ]];then 16echo "::warning::CMakeCache.txt not found at $ CMAKE_CACHE " 17exit 0 18fi 19 20# Extract compiler path from CMakeCache.txt 21COMPILER_PATH =$( grep "^CMAKE_CXX_COMPILER:FILEPATH=" " $ CMAKE_CACHE " | cut -d '=' -f2 ) 22 23if [[ -z" $ COMPILER_PATH " ]];then 24echo "::warning::Could not find CMAKE_CXX_COMPILER in CMakeCache.txt" 25exit 0 26fi 27 28# Determine compiler type and get version 29COMPILER_NAME =$( basename " $ COMPILER_PATH " ) 30COMPILER_VERSION ="" 31COMPILER_TYPE ="" 32 33if [[" $ COMPILER_NAME " =~ ^g\+\+|^gcc ]];then 34COMPILER_TYPE ="GCC" 35# Get GCC version (e.g., "gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0") 36COMPILER_VERSION =$( " $ COMPILER_PATH " --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ) 37elif [[" $ COMPILER_NAME " =~ ^clang\+\+|^clang ]];then 38COMPILER_TYPE ="Clang" 39# Get Clang version (e.g., "Ubuntu clang version 15.0.7") 40COMPILER_VERSION =$( " $ COMPILER_PATH " --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ) 41elif [[" $ COMPILER_NAME " =~ ^cl\.exe|^cl$ ]];then 42COMPILER_TYPE ="MSVC" 43# MSVC version is more complex, extract major version 44# MSVC outputs version like "19.29.30133" where 19 is the major version 45COMPILER_VERSION =$( " $ COMPILER_PATH " 2 >&1 | grep -oE 'Version [0-9]+\.[0-9]+' | grep -oE '[0-9]+\.[0-9]+' | head -1 ) 46else 47echo "::warning::Unknown compiler type: $ COMPILER_NAME " 48exit 0 49fi 50 51if [[ -z" $ COMPILER_VERSION " ]];then 52echo "::warning::Could not determine version for compiler: $ COMPILER_PATH " 53exit 0 54fi 55 56# Extract major.minor version only 57COMPILER_MAJOR_MINOR =$( echo " $ COMPILER_VERSION " | cut -d '.' -f1,2 ) 58 59# Function to extract versions from a line 60extract_versions () { 61 localline =" $ 1 " 62 localis_msvc =" $ 2 " 63 64# Extract the part between compiler name and "are/is tested in CI" 65 localversion_part 66version_part =$( echo " $ line " | sed -E 's/^_[^_]+_ //; s/ (are|is) tested in CI.*//' ) 67 68# Split by "and" and extract version numbers 69 localversions =() 70if [[" $ is_msvc " =="true" ]];then 71# For MSVC, just extract numbers 72while IFS =read -r version;do 73version =$( echo " $ version " | grep -oE '[0-9]+' | head -1 ) 74 [[ -n" $ version " ]]&& versions +=(" $ version " ) 75done < <( echo " $ version_part " | tr ',' '\n' | sed 's/ and /\n/g' ) 76else 77# For GCC/Clang, extract major.minor versions 78while IFS =read -r version;do 79version =$( echo " $ version " | grep -oE '[0-9]+\.[0-9]+' | head -1 ) 80 [[ -n" $ version " ]]&& versions +=(" $ version " ) 81done < <( echo " $ version_part " | tr ',' '\n' | sed 's/ and /\n/g' ) 82fi 83 84echo " ${ versions [@]} " 85} 86 87# Parse the documentation for the expected versions 88EXPECTED_VERSIONS =() 89VERSION_FOUND =false 90 91case " $ COMPILER_TYPE " in 92"GCC" ) 93DOC_LINE =$( grep -E "^_GCC_ .+ (are|is) tested in CI" " $ DOCS_FILE " | head -1 ) 94if [[ -n" $ DOC_LINE " ]];then 95# shellcheck disable=SC2207 96EXPECTED_VERSIONS =($( extract_versions " $ DOC_LINE " "false" ) ) 97fi 98 ;; 99"Clang" ) 100DOC_LINE =$( grep -E "^_Clang_ .+ (are|is) tested in CI" " $ DOCS_FILE " | head -1 ) 101if [[ -n" $ DOC_LINE " ]];then 102# shellcheck disable=SC2207 103EXPECTED_VERSIONS =($( extract_versions " $ DOC_LINE " "false" ) ) 104fi 105 ;; 106"MSVC" ) 107# For MSVC, we only compare major version 108DOC_LINE =$( grep -E "^_MSVC_ .+ (are|is) tested in CI" " $ DOCS_FILE " | head -1 ) 109if [[ -n" $ DOC_LINE " ]];then 110# shellcheck disable=SC2207 111EXPECTED_VERSIONS =($( extract_versions " $ DOC_LINE " "true" ) ) 112fi 113COMPILER_MAJOR_MINOR =$( echo " $ COMPILER_VERSION " | cut -d '.' -f1 ) 114 ;; 115esac 116 117if [[${# EXPECTED_VERSIONS [@]} -eq 0 ]];then 118echo "::warning::Could not find expected version for $ COMPILER_TYPE in $ DOCS_FILE " 119exit 0 120fi 121 122# Check if current version matches any expected version 123for expected in " ${ EXPECTED_VERSIONS [@]} " ;do 124if [[" $ COMPILER_MAJOR_MINOR " ==" $ expected " ]];then 125VERSION_FOUND =true 126break 127fi 128done 129 130# Report results 131if [[" $ VERSION_FOUND " =="false" ]];then 132EXPECTED_LIST =$( 133IFS = ', ' 134echo " ${ EXPECTED_VERSIONS [*]} " 135) 136echo "::warning::Compiler version mismatch for $ COMPILER_TYPE : Documentation says $ EXPECTED_LIST but found $ COMPILER_MAJOR_MINOR (full version: $ COMPILER_VERSION )" 137else 138echo "✓ Compiler version matches: $ COMPILER_TYPE $ COMPILER_MAJOR_MINOR " 139fi 140 141exit 0