summaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
masterCMake Nightly Date StampKitware Robot8 years
releaseMerge branch 'cpack-pkg-fix' into release-3.10Brad King8 years
 
TagDownloadAuthorAge
v4.0.4CMake-4.0.4.zip  CMake-4.0.4.tar.gz  CMake-4.0.4.tar.bz2  Brad King23 hours
v4.1.1CMake-4.1.1.zip  CMake-4.1.1.tar.gz  CMake-4.1.1.tar.bz2  Brad King13 days
v4.1.0CMake-4.1.0.zip  CMake-4.1.0.tar.gz  CMake-4.1.0.tar.bz2  Brad King5 weeks
v4.1.0-rc4CMake-4.1.0-rc4.zip  CMake-4.1.0-rc4.tar.gz  CMake-4.1.0-rc4.tar.bz2  Brad King6 weeks
v4.1.0-rc3CMake-4.1.0-rc3.zip  CMake-4.1.0-rc3.tar.gz  CMake-4.1.0-rc3.tar.bz2  Brad King7 weeks
v4.1.0-rc2CMake-4.1.0-rc2.zip  CMake-4.1.0-rc2.tar.gz  CMake-4.1.0-rc2.tar.bz2  Brad King2 months
v4.1.0-rc1CMake-4.1.0-rc1.zip  CMake-4.1.0-rc1.tar.gz  CMake-4.1.0-rc1.tar.bz2  Brad King3 months
v4.0.3CMake-4.0.3.zip  CMake-4.0.3.tar.gz  CMake-4.0.3.tar.bz2  Brad King3 months
v3.31.8CMake-3.31.8.zip  CMake-3.31.8.tar.gz  CMake-3.31.8.tar.bz2  Brad King3 months
v3.30.9CMake-3.30.9.zip  CMake-3.30.9.tar.gz  CMake-3.30.9.tar.bz2  Brad King3 months
v4.0.2CMake-4.0.2.zip  CMake-4.0.2.tar.gz  CMake-4.0.2.tar.bz2  Brad King4 months
v4.0.1CMake-4.0.1.zip  CMake-4.0.1.tar.gz  CMake-4.0.1.tar.bz2  Brad King5 months
v3.31.7CMake-3.31.7.zip  CMake-3.31.7.tar.gz  CMake-3.31.7.tar.bz2  Brad King5 months
v4.0.0CMake-4.0.0.zip  CMake-4.0.0.tar.gz  CMake-4.0.0.tar.bz2  Brad King5 months
v4.0.0-rc5CMake-4.0.0-rc5.zip  CMake-4.0.0-rc5.tar.gz  CMake-4.0.0-rc5.tar.bz2  Brad King6 months
v4.0.0-rc4CMake-4.0.0-rc4.zip  CMake-4.0.0-rc4.tar.gz  CMake-4.0.0-rc4.tar.bz2  Brad King6 months
v4.0.0-rc3CMake-4.0.0-rc3.zip  CMake-4.0.0-rc3.tar.gz  CMake-4.0.0-rc3.tar.bz2  Brad King6 months
v4.0.0-rc2CMake-4.0.0-rc2.zip  CMake-4.0.0-rc2.tar.gz  CMake-4.0.0-rc2.tar.bz2  Brad King6 months
v3.31.6CMake-3.31.6.zip  CMake-3.31.6.tar.gz  CMake-3.31.6.tar.bz2  Brad King6 months
v3.30.8CMake-3.30.8.zip  CMake-3.30.8.tar.gz  CMake-3.30.8.tar.bz2  Brad King6 months
v4.0.0-rc1CMake-4.0.0-rc1.zip  CMake-4.0.0-rc1.tar.gz  CMake-4.0.0-rc1.tar.bz2  Brad King7 months
v3.31.5CMake-3.31.5.zip  CMake-3.31.5.tar.gz  CMake-3.31.5.tar.bz2  Brad King8 months
v3.30.7CMake-3.30.7.zip  CMake-3.30.7.tar.gz  CMake-3.30.7.tar.bz2  Brad King8 months
v3.31.4CMake-3.31.4.zip  CMake-3.31.4.tar.gz  CMake-3.31.4.tar.bz2  Brad King8 months
v3.31.3CMake-3.31.3.zip  CMake-3.31.3.tar.gz  CMake-3.31.3.tar.bz2  Brad King9 months
v3.31.2CMake-3.31.2.zip  CMake-3.31.2.tar.gz  CMake-3.31.2.tar.bz2  Brad King9 months
v3.31.1CMake-3.31.1.zip  CMake-3.31.1.tar.gz  CMake-3.31.1.tar.bz2  Brad King10 months
v3.30.6CMake-3.30.6.zip  CMake-3.30.6.tar.gz  CMake-3.30.6.tar.bz2  Brad King10 months
v3.29.9CMake-3.29.9.zip  CMake-3.29.9.tar.gz  CMake-3.29.9.tar.bz2  Brad King10 months
v3.31.0CMake-3.31.0.zip  CMake-3.31.0.tar.gz  CMake-3.31.0.tar.bz2  Brad King10 months
v3.31.0-rc3CMake-3.31.0-rc3.zip  CMake-3.31.0-rc3.tar.gz  CMake-3.31.0-rc3.tar.bz2  Brad King10 months
v3.31.0-rc2CMake-3.31.0-rc2.zip  CMake-3.31.0-rc2.tar.gz  CMake-3.31.0-rc2.tar.bz2  Brad King11 months
v3.31.0-rc1CMake-3.31.0-rc1.zip  CMake-3.31.0-rc1.tar.gz  CMake-3.31.0-rc1.tar.bz2  Brad King11 months
v3.30.5CMake-3.30.5.zip  CMake-3.30.5.tar.gz  CMake-3.30.5.tar.bz2  Brad King11 months
v3.30.4CMake-3.30.4.zip  CMake-3.30.4.tar.gz  CMake-3.30.4.tar.bz2  Brad King11 months
v3.30.3CMake-3.30.3.zip  CMake-3.30.3.tar.gz  CMake-3.30.3.tar.bz2  Brad King12 months
v3.29.8CMake-3.29.8.zip  CMake-3.29.8.tar.gz  CMake-3.29.8.tar.bz2  Brad King12 months
v3.30.2CMake-3.30.2.zip  CMake-3.30.2.tar.gz  CMake-3.30.2.tar.bz2  Brad King13 months
v3.30.1CMake-3.30.1.zip  CMake-3.30.1.tar.gz  CMake-3.30.1.tar.bz2  Brad King14 months
v3.29.7CMake-3.29.7.zip  CMake-3.29.7.tar.gz  CMake-3.29.7.tar.bz2  Brad King14 months
v3.30.0CMake-3.30.0.zip  CMake-3.30.0.tar.gz  CMake-3.30.0.tar.bz2  Brad King14 months
v3.30.0-rc4CMake-3.30.0-rc4.zip  CMake-3.30.0-rc4.tar.gz  CMake-3.30.0-rc4.tar.bz2  Brad King15 months
v3.29.6CMake-3.29.6.zip  CMake-3.29.6.tar.gz  CMake-3.29.6.tar.bz2  Brad King15 months
v3.30.0-rc3CMake-3.30.0-rc3.zip  CMake-3.30.0-rc3.tar.gz  CMake-3.30.0-rc3.tar.bz2  Brad King15 months
v3.30.0-rc2CMake-3.30.0-rc2.zip  CMake-3.30.0-rc2.tar.gz  CMake-3.30.0-rc2.tar.bz2  Brad King15 months
v3.30.0-rc1CMake-3.30.0-rc1.zip  CMake-3.30.0-rc1.tar.gz  CMake-3.30.0-rc1.tar.bz2  Brad King15 months
v3.29.5CMake-3.29.5.zip  CMake-3.29.5.tar.gz  CMake-3.29.5.tar.bz2  Brad King15 months
v3.29.4CMake-3.29.4.zip  CMake-3.29.4.tar.gz  CMake-3.29.4.tar.bz2  Brad King15 months
v3.28.6CMake-3.28.6.zip  CMake-3.28.6.tar.gz  CMake-3.28.6.tar.bz2  Brad King15 months
v3.29.3CMake-3.29.3.zip  CMake-3.29.3.tar.gz  CMake-3.29.3.tar.bz2  Brad King16 months
v3.28.5CMake-3.28.5.zip  CMake-3.28.5.tar.gz  CMake-3.28.5.tar.bz2  Brad King16 months
v3.29.2CMake-3.29.2.zip  CMake-3.29.2.tar.gz  CMake-3.29.2.tar.bz2  Brad King17 months
v3.29.1CMake-3.29.1.zip  CMake-3.29.1.tar.gz  CMake-3.29.1.tar.bz2  Brad King17 months
v3.29.0CMake-3.29.0.zip  CMake-3.29.0.tar.gz  CMake-3.29.0.tar.bz2  Brad King18 months
v3.28.4CMake-3.28.4.zip  CMake-3.28.4.tar.gz  CMake-3.28.4.tar.bz2  Brad King18 months
v3.29.0-rc4CMake-3.29.0-rc4.zip  CMake-3.29.0-rc4.tar.gz  CMake-3.29.0-rc4.tar.bz2  Brad King18 months
v3.29.0-rc3CMake-3.29.0-rc3.zip  CMake-3.29.0-rc3.tar.gz  CMake-3.29.0-rc3.tar.bz2  Brad King18 months
v3.29.0-rc2CMake-3.29.0-rc2.zip  CMake-3.29.0-rc2.tar.gz  CMake-3.29.0-rc2.tar.bz2  Brad King19 months
v3.29.0-rc1CMake-3.29.0-rc1.zip  CMake-3.29.0-rc1.tar.gz  CMake-3.29.0-rc1.tar.bz2  Brad King19 months
v3.28.3CMake-3.28.3.zip  CMake-3.28.3.tar.gz  CMake-3.28.3.tar.bz2  Brad King19 months
v3.28.2CMake-3.28.2.zip  CMake-3.28.2.tar.gz  CMake-3.28.2.tar.bz2  Brad King19 months
v3.28.1CMake-3.28.1.zip  CMake-3.28.1.tar.gz  CMake-3.28.1.tar.bz2  Brad King21 months
v3.28.0CMake-3.28.0.zip  CMake-3.28.0.tar.gz  CMake-3.28.0.tar.bz2  Brad King21 months
v3.28.0-rc6CMake-3.28.0-rc6.zip  CMake-3.28.0-rc6.tar.gz  CMake-3.28.0-rc6.tar.bz2  Brad King21 months
v3.27.9CMake-3.27.9.zip  CMake-3.27.9.tar.gz  CMake-3.27.9.tar.bz2  Brad King21 months
v3.26.6CMake-3.26.6.zip  CMake-3.26.6.tar.gz  CMake-3.26.6.tar.bz2  Brad King21 months
v3.28.0-rc5CMake-3.28.0-rc5.zip  CMake-3.28.0-rc5.tar.gz  CMake-3.28.0-rc5.tar.bz2  Brad King22 months
v3.27.8CMake-3.27.8.zip  CMake-3.27.8.tar.gz  CMake-3.27.8.tar.bz2  Brad King22 months
v3.28.0-rc4CMake-3.28.0-rc4.zip  CMake-3.28.0-rc4.tar.gz  CMake-3.28.0-rc4.tar.bz2  Brad King22 months
v3.28.0-rc3CMake-3.28.0-rc3.zip  CMake-3.28.0-rc3.tar.gz  CMake-3.28.0-rc3.tar.bz2  Brad King23 months
v3.28.0-rc2CMake-3.28.0-rc2.zip  CMake-3.28.0-rc2.tar.gz  CMake-3.28.0-rc2.tar.bz2  Brad King23 months
v3.28.0-rc1CMake-3.28.0-rc1.zip  CMake-3.28.0-rc1.tar.gz  CMake-3.28.0-rc1.tar.bz2  Brad King23 months
v3.27.7CMake-3.27.7.zip  CMake-3.27.7.tar.gz  CMake-3.27.7.tar.bz2  Brad King23 months
v3.27.6CMake-3.27.6.zip  CMake-3.27.6.tar.gz  CMake-3.27.6.tar.bz2  Brad King24 months
v3.27.5CMake-3.27.5.zip  CMake-3.27.5.tar.gz  CMake-3.27.5.tar.bz2  Brad King24 months
v3.27.4CMake-3.27.4.zip  CMake-3.27.4.tar.gz  CMake-3.27.4.tar.bz2  Brad King2 years
v3.27.3CMake-3.27.3.zip  CMake-3.27.3.tar.gz  CMake-3.27.3.tar.bz2  Brad King2 years
v3.27.2CMake-3.27.2.zip  CMake-3.27.2.tar.gz  CMake-3.27.2.tar.bz2  Brad King2 years
v3.27.1CMake-3.27.1.zip  CMake-3.27.1.tar.gz  CMake-3.27.1.tar.bz2  Brad King2 years
v3.26.5CMake-3.26.5.zip  CMake-3.26.5.tar.gz  CMake-3.26.5.tar.bz2  Brad King2 years
v3.27.0CMake-3.27.0.zip  CMake-3.27.0.tar.gz  CMake-3.27.0.tar.bz2  Brad King2 years
v3.27.0-rc5CMake-3.27.0-rc5.zip  CMake-3.27.0-rc5.tar.gz  CMake-3.27.0-rc5.tar.bz2  Brad King2 years
v3.27.0-rc4CMake-3.27.0-rc4.zip  CMake-3.27.0-rc4.tar.gz  CMake-3.27.0-rc4.tar.bz2  Brad King2 years
v3.27.0-rc3CMake-3.27.0-rc3.zip  CMake-3.27.0-rc3.tar.gz  CMake-3.27.0-rc3.tar.bz2  Brad King2 years
v3.27.0-rc2CMake-3.27.0-rc2.zip  CMake-3.27.0-rc2.tar.gz  CMake-3.27.0-rc2.tar.bz2  Brad King2 years
v3.27.0-rc1CMake-3.27.0-rc1.zip  CMake-3.27.0-rc1.tar.gz  CMake-3.27.0-rc1.tar.bz2  Brad King2 years
v3.26.4CMake-3.26.4.zip  CMake-3.26.4.tar.gz  CMake-3.26.4.tar.bz2  Brad King2 years
v3.26.3CMake-3.26.3.zip  CMake-3.26.3.tar.gz  CMake-3.26.3.tar.bz2  Brad King2 years
v3.26.2CMake-3.26.2.zip  CMake-3.26.2.tar.gz  CMake-3.26.2.tar.bz2  Brad King2 years
v3.26.1CMake-3.26.1.zip  CMake-3.26.1.tar.gz  CMake-3.26.1.tar.bz2  Brad King2 years
v3.26.0CMake-3.26.0.zip  CMake-3.26.0.tar.gz  CMake-3.26.0.tar.bz2  Brad King2 years
v3.26.0-rc6CMake-3.26.0-rc6.zip  CMake-3.26.0-rc6.tar.gz  CMake-3.26.0-rc6.tar.bz2  Brad King3 years
v3.25.3CMake-3.25.3.zip  CMake-3.25.3.tar.gz  CMake-3.25.3.tar.bz2  Brad King3 years
v3.24.4CMake-3.24.4.zip  CMake-3.24.4.tar.gz  CMake-3.24.4.tar.bz2  Brad King3 years
v3.26.0-rc5CMake-3.26.0-rc5.zip  CMake-3.26.0-rc5.tar.gz  CMake-3.26.0-rc5.tar.bz2  Brad King3 years
v3.26.0-rc4CMake-3.26.0-rc4.zip  CMake-3.26.0-rc4.tar.gz  CMake-3.26.0-rc4.tar.bz2  Brad King3 years
v3.26.0-rc3CMake-3.26.0-rc3.zip  CMake-3.26.0-rc3.tar.gz  CMake-3.26.0-rc3.tar.bz2  Brad King3 years
v3.26.0-rc2CMake-3.26.0-rc2.zip  CMake-3.26.0-rc2.tar.gz  CMake-3.26.0-rc2.tar.bz2  Brad King3 years
v3.26.0-rc1CMake-3.26.0-rc1.zip  CMake-3.26.0-rc1.tar.gz  CMake-3.26.0-rc1.tar.bz2  Brad King3 years
v3.25.2CMake-3.25.2.zip  CMake-3.25.2.tar.gz  CMake-3.25.2.tar.bz2  Brad King3 years
v3.25.1CMake-3.25.1.zip  CMake-3.25.1.tar.gz  CMake-3.25.1.tar.bz2  Brad King3 years
v3.25.0CMake-3.25.0.zip  CMake-3.25.0.tar.gz  CMake-3.25.0.tar.bz2  Brad King3 years
v3.25.0-rc4CMake-3.25.0-rc4.zip  CMake-3.25.0-rc4.tar.gz  CMake-3.25.0-rc4.tar.bz2  Brad King3 years
v3.25.0-rc3CMake-3.25.0-rc3.zip  CMake-3.25.0-rc3.tar.gz  CMake-3.25.0-rc3.tar.bz2  Brad King3 years
v3.24.3CMake-3.24.3.zip  CMake-3.24.3.tar.gz  CMake-3.24.3.tar.bz2  Brad King3 years
v3.23.5CMake-3.23.5.zip  CMake-3.23.5.tar.gz  CMake-3.23.5.tar.bz2  Brad King3 years
v3.25.0-rc2CMake-3.25.0-rc2.zip  CMake-3.25.0-rc2.tar.gz  CMake-3.25.0-rc2.tar.bz2  Brad King3 years
v3.25.0-rc1CMake-3.25.0-rc1.zip  CMake-3.25.0-rc1.tar.gz  CMake-3.25.0-rc1.tar.bz2  Brad King3 years
v3.23.4CMake-3.23.4.zip  CMake-3.23.4.tar.gz  CMake-3.23.4.tar.bz2  Brad King3 years
v3.24.2CMake-3.24.2.zip  CMake-3.24.2.tar.gz  CMake-3.24.2.tar.bz2  Brad King3 years
v3.24.1CMake-3.24.1.zip  CMake-3.24.1.tar.gz  CMake-3.24.1.tar.bz2  Brad King3 years
v3.24.0CMake-3.24.0.zip  CMake-3.24.0.tar.gz  CMake-3.24.0.tar.bz2  Brad King3 years
v3.24.0-rc5CMake-3.24.0-rc5.zip  CMake-3.24.0-rc5.tar.gz  CMake-3.24.0-rc5.tar.bz2  Brad King3 years
v3.23.3CMake-3.23.3.zip  CMake-3.23.3.tar.gz  CMake-3.23.3.tar.bz2  Brad King3 years
v3.22.6CMake-3.22.6.zip  CMake-3.22.6.tar.gz  CMake-3.22.6.tar.bz2  Brad King3 years
v3.24.0-rc4CMake-3.24.0-rc4.zip  CMake-3.24.0-rc4.tar.gz  CMake-3.24.0-rc4.tar.bz2  Brad King3 years
v3.24.0-rc3CMake-3.24.0-rc3.zip  CMake-3.24.0-rc3.tar.gz  CMake-3.24.0-rc3.tar.bz2  Brad King3 years
v3.24.0-rc2CMake-3.24.0-rc2.zip  CMake-3.24.0-rc2.tar.gz  CMake-3.24.0-rc2.tar.bz2  Brad King3 years
v3.24.0-rc1CMake-3.24.0-rc1.zip  CMake-3.24.0-rc1.tar.gz  CMake-3.24.0-rc1.tar.bz2  Brad King3 years
v3.22.5CMake-3.22.5.zip  CMake-3.22.5.tar.gz  CMake-3.22.5.tar.bz2  Brad King3 years
v3.21.7CMake-3.21.7.zip  CMake-3.21.7.tar.gz  CMake-3.21.7.tar.bz2  Brad King3 years
v3.23.2CMake-3.23.2.zip  CMake-3.23.2.tar.gz  CMake-3.23.2.tar.bz2  Brad King3 years
v3.23.1CMake-3.23.1.zip  CMake-3.23.1.tar.gz  CMake-3.23.1.tar.bz2  Brad King3 years
v3.22.4CMake-3.22.4.zip  CMake-3.22.4.tar.gz  CMake-3.22.4.tar.bz2  Brad King3 years
v3.23.0CMake-3.23.0.zip  CMake-3.23.0.tar.gz  CMake-3.23.0.tar.bz2  Brad King3 years
v3.23.0-rc5CMake-3.23.0-rc5.zip  CMake-3.23.0-rc5.tar.gz  CMake-3.23.0-rc5.tar.bz2  Brad King3 years
v3.23.0-rc4CMake-3.23.0-rc4.zip  CMake-3.23.0-rc4.tar.gz  CMake-3.23.0-rc4.tar.bz2  Brad King3 years
v3.23.0-rc3CMake-3.23.0-rc3.zip  CMake-3.23.0-rc3.tar.gz  CMake-3.23.0-rc3.tar.bz2  Brad King4 years
v3.22.3CMake-3.22.3.zip  CMake-3.22.3.tar.gz  CMake-3.22.3.tar.bz2  Brad King4 years
v3.21.6CMake-3.21.6.zip  CMake-3.21.6.tar.gz  CMake-3.21.6.tar.bz2  Brad King4 years
v3.23.0-rc2CMake-3.23.0-rc2.zip  CMake-3.23.0-rc2.tar.gz  CMake-3.23.0-rc2.tar.bz2  Brad King4 years
v3.23.0-rc1CMake-3.23.0-rc1.zip  CMake-3.23.0-rc1.tar.gz  CMake-3.23.0-rc1.tar.bz2  Brad King4 years
v3.21.5CMake-3.21.5.zip  CMake-3.21.5.tar.gz  CMake-3.21.5.tar.bz2  Brad King4 years
v3.22.2CMake-3.22.2.zip  CMake-3.22.2.tar.gz  CMake-3.22.2.tar.bz2  Brad King4 years
v3.22.1CMake-3.22.1.zip  CMake-3.22.1.tar.gz  CMake-3.22.1.tar.bz2  Brad King4 years
v3.22.0CMake-3.22.0.zip  CMake-3.22.0.tar.gz  CMake-3.22.0.tar.bz2  Brad King4 years
v3.22.0-rc3CMake-3.22.0-rc3.zip  CMake-3.22.0-rc3.tar.gz  CMake-3.22.0-rc3.tar.bz2  Brad King4 years
v3.22.0-rc2CMake-3.22.0-rc2.zip  CMake-3.22.0-rc2.tar.gz  CMake-3.22.0-rc2.tar.bz2  Brad King4 years
v3.21.4CMake-3.21.4.zip  CMake-3.21.4.tar.gz  CMake-3.21.4.tar.bz2  Brad King4 years
v3.22.0-rc1CMake-3.22.0-rc1.zip  CMake-3.22.0-rc1.tar.gz  CMake-3.22.0-rc1.tar.bz2  Brad King4 years
v3.21.3CMake-3.21.3.zip  CMake-3.21.3.tar.gz  CMake-3.21.3.tar.bz2  Brad King4 years
v3.20.6CMake-3.20.6.zip  CMake-3.20.6.tar.gz  CMake-3.20.6.tar.bz2  Brad King4 years
v3.21.2CMake-3.21.2.zip  CMake-3.21.2.tar.gz  CMake-3.21.2.tar.bz2  Brad King4 years
v3.21.1CMake-3.21.1.zip  CMake-3.21.1.tar.gz  CMake-3.21.1.tar.bz2  Brad King4 years
v3.21.0CMake-3.21.0.zip  CMake-3.21.0.tar.gz  CMake-3.21.0.tar.bz2  Brad King4 years
v3.21.0-rc3CMake-3.21.0-rc3.zip  CMake-3.21.0-rc3.tar.gz  CMake-3.21.0-rc3.tar.bz2  Brad King4 years
v3.21.0-rc2CMake-3.21.0-rc2.zip  CMake-3.21.0-rc2.tar.gz  CMake-3.21.0-rc2.tar.bz2  Brad King4 years
v3.21.0-rc1CMake-3.21.0-rc1.zip  CMake-3.21.0-rc1.tar.gz  CMake-3.21.0-rc1.tar.bz2  Brad King4 years
v3.20.5CMake-3.20.5.zip  CMake-3.20.5.tar.gz  CMake-3.20.5.tar.bz2  Brad King4 years
v3.20.4CMake-3.20.4.zip  CMake-3.20.4.tar.gz  CMake-3.20.4.tar.bz2  Brad King4 years
v3.20.3CMake-3.20.3.zip  CMake-3.20.3.tar.gz  CMake-3.20.3.tar.bz2  Brad King4 years
v3.20.2CMake-3.20.2.zip  CMake-3.20.2.tar.gz  CMake-3.20.2.tar.bz2  Brad King4 years
v3.20.1CMake-3.20.1.zip  CMake-3.20.1.tar.gz  CMake-3.20.1.tar.bz2  Brad King4 years
v3.19.8CMake-3.19.8.zip  CMake-3.19.8.tar.gz  CMake-3.19.8.tar.bz2  Brad King4 years
v3.20.0CMake-3.20.0.zip  CMake-3.20.0.tar.gz  CMake-3.20.0.tar.bz2  Brad King4 years
v3.20.0-rc5CMake-3.20.0-rc5.zip  CMake-3.20.0-rc5.tar.gz  CMake-3.20.0-rc5.tar.bz2  Brad King4 years
v3.19.7CMake-3.19.7.zip  CMake-3.19.7.tar.gz  CMake-3.19.7.tar.bz2  Brad King4 years
v3.20.0-rc4CMake-3.20.0-rc4.zip  CMake-3.20.0-rc4.tar.gz  CMake-3.20.0-rc4.tar.bz2  Brad King5 years
v3.20.0-rc3CMake-3.20.0-rc3.zip  CMake-3.20.0-rc3.tar.gz  CMake-3.20.0-rc3.tar.bz2  Brad King5 years
v3.20.0-rc2CMake-3.20.0-rc2.zip  CMake-3.20.0-rc2.tar.gz  CMake-3.20.0-rc2.tar.bz2  Brad King5 years
v3.19.6CMake-3.19.6.zip  CMake-3.19.6.tar.gz  CMake-3.19.6.tar.bz2  Brad King5 years
v3.20.0-rc1CMake-3.20.0-rc1.zip  CMake-3.20.0-rc1.tar.gz  CMake-3.20.0-rc1.tar.bz2  Brad King5 years
v3.19.5CMake-3.19.5.zip  CMake-3.19.5.tar.gz  CMake-3.19.5.tar.bz2  Brad King5 years
v3.18.6CMake-3.18.6.zip  CMake-3.18.6.tar.gz  CMake-3.18.6.tar.bz2  Brad King5 years
v3.19.4CMake-3.19.4.zip  CMake-3.19.4.tar.gz  CMake-3.19.4.tar.bz2  Brad King5 years
v3.19.3CMake-3.19.3.zip  CMake-3.19.3.tar.gz  CMake-3.19.3.tar.bz2  Brad King5 years
v3.19.2CMake-3.19.2.zip  CMake-3.19.2.tar.gz  CMake-3.19.2.tar.bz2  Brad King5 years
v3.19.1CMake-3.19.1.zip  CMake-3.19.1.tar.gz  CMake-3.19.1.tar.bz2  Brad King5 years
v3.19.0CMake-3.19.0.zip  CMake-3.19.0.tar.gz  CMake-3.19.0.tar.bz2  Brad King5 years
v3.18.5CMake-3.18.5.zip  CMake-3.18.5.tar.gz  CMake-3.18.5.tar.bz2  Brad King5 years
v3.19.0-rc3CMake-3.19.0-rc3.zip  CMake-3.19.0-rc3.tar.gz  CMake-3.19.0-rc3.tar.bz2  Brad King5 years
v3.19.0-rc2CMake-3.19.0-rc2.zip  CMake-3.19.0-rc2.tar.gz  CMake-3.19.0-rc2.tar.bz2  Brad King5 years
v3.19.0-rc1CMake-3.19.0-rc1.zip  CMake-3.19.0-rc1.tar.gz  CMake-3.19.0-rc1.tar.bz2  Brad King5 years
v3.18.4CMake-3.18.4.zip  CMake-3.18.4.tar.gz  CMake-3.18.4.tar.bz2  Brad King5 years
v3.18.3CMake-3.18.3.zip  CMake-3.18.3.tar.gz  CMake-3.18.3.tar.bz2  Brad King5 years
v3.17.5CMake-3.17.5.zip  CMake-3.17.5.tar.gz  CMake-3.17.5.tar.bz2  Brad King5 years
v3.16.9CMake-3.16.9.zip  CMake-3.16.9.tar.gz  CMake-3.16.9.tar.bz2  Brad King5 years
v3.18.2CMake-3.18.2.zip  CMake-3.18.2.tar.gz  CMake-3.18.2.tar.bz2  Brad King5 years
v3.18.1CMake-3.18.1.zip  CMake-3.18.1.tar.gz  CMake-3.18.1.tar.bz2  Brad King5 years
v3.17.4CMake-3.17.4.zip  CMake-3.17.4.tar.gz  CMake-3.17.4.tar.bz2  Brad King5 years
v3.18.0CMake-3.18.0.zip  CMake-3.18.0.tar.gz  CMake-3.18.0.tar.bz2  Brad King5 years
v3.18.0-rc4CMake-3.18.0-rc4.zip  CMake-3.18.0-rc4.tar.gz  CMake-3.18.0-rc4.tar.bz2  Brad King5 years
v3.18.0-rc3CMake-3.18.0-rc3.zip  CMake-3.18.0-rc3.tar.gz  CMake-3.18.0-rc3.tar.bz2  Brad King5 years
v3.18.0-rc2CMake-3.18.0-rc2.zip  CMake-3.18.0-rc2.tar.gz  CMake-3.18.0-rc2.tar.bz2  Brad King5 years
v3.18.0-rc1CMake-3.18.0-rc1.zip  CMake-3.18.0-rc1.tar.gz  CMake-3.18.0-rc1.tar.bz2  Brad King5 years
v3.16.8CMake-3.16.8.zip  CMake-3.16.8.tar.gz  CMake-3.16.8.tar.bz2  Brad King5 years
v3.17.3CMake-3.17.3.zip  CMake-3.17.3.tar.gz  CMake-3.17.3.tar.bz2  Brad King5 years
v3.16.7CMake-3.16.7.zip  CMake-3.16.7.tar.gz  CMake-3.16.7.tar.bz2  Brad King5 years
v3.17.2CMake-3.17.2.zip  CMake-3.17.2.tar.gz  CMake-3.17.2.tar.bz2  Brad King5 years
v3.16.6CMake-3.16.6.zip  CMake-3.16.6.tar.gz  CMake-3.16.6.tar.bz2  Brad King5 years
v3.17.1CMake-3.17.1.zip  CMake-3.17.1.tar.gz  CMake-3.17.1.tar.bz2  Brad King5 years
v3.17.0CMake-3.17.0.zip  CMake-3.17.0.tar.gz  CMake-3.17.0.tar.bz2  Brad King5 years
v3.17.0-rc3CMake-3.17.0-rc3.zip  CMake-3.17.0-rc3.tar.gz  CMake-3.17.0-rc3.tar.bz2  Brad King5 years
v3.16.5CMake-3.16.5.zip  CMake-3.16.5.tar.gz  CMake-3.16.5.tar.bz2  Brad King6 years
v3.17.0-rc2CMake-3.17.0-rc2.zip  CMake-3.17.0-rc2.tar.gz  CMake-3.17.0-rc2.tar.bz2  Brad King6 years
v3.17.0-rc1CMake-3.17.0-rc1.zip  CMake-3.17.0-rc1.tar.gz  CMake-3.17.0-rc1.tar.bz2  Brad King6 years
v3.16.4CMake-3.16.4.zip  CMake-3.16.4.tar.gz  CMake-3.16.4.tar.bz2  Brad King6 years
v3.15.7CMake-3.15.7.zip  CMake-3.15.7.tar.gz  CMake-3.15.7.tar.bz2  Brad King6 years
v3.16.3CMake-3.16.3.zip  CMake-3.16.3.tar.gz  CMake-3.16.3.tar.bz2  Brad King6 years
v3.16.2CMake-3.16.2.zip  CMake-3.16.2.tar.gz  CMake-3.16.2.tar.bz2  Brad King6 years
v3.15.6CMake-3.15.6.zip  CMake-3.15.6.tar.gz  CMake-3.15.6.tar.bz2  Brad King6 years
v3.16.1CMake-3.16.1.zip  CMake-3.16.1.tar.gz  CMake-3.16.1.tar.bz2  Brad King6 years
v3.16.0CMake-3.16.0.zip  CMake-3.16.0.tar.gz  CMake-3.16.0.tar.bz2  Brad King6 years
v3.16.0-rc4CMake-3.16.0-rc4.zip  CMake-3.16.0-rc4.tar.gz  CMake-3.16.0-rc4.tar.bz2  Brad King6 years
v3.16.0-rc3CMake-3.16.0-rc3.zip  CMake-3.16.0-rc3.tar.gz  CMake-3.16.0-rc3.tar.bz2  Brad King6 years
v3.15.5CMake-3.15.5.zip  CMake-3.15.5.tar.gz  CMake-3.15.5.tar.bz2  Brad King6 years
v3.16.0-rc2CMake-3.16.0-rc2.zip  CMake-3.16.0-rc2.tar.gz  CMake-3.16.0-rc2.tar.bz2  Brad King6 years
v3.16.0-rc1CMake-3.16.0-rc1.zip  CMake-3.16.0-rc1.tar.gz  CMake-3.16.0-rc1.tar.bz2  Brad King6 years
v3.15.4CMake-3.15.4.zip  CMake-3.15.4.tar.gz  CMake-3.15.4.tar.bz2  Brad King6 years
v3.14.7CMake-3.14.7.zip  CMake-3.14.7.tar.gz  CMake-3.14.7.tar.bz2  Brad King6 years
v3.15.3CMake-3.15.3.zip  CMake-3.15.3.tar.gz  CMake-3.15.3.tar.bz2  Brad King6 years
v3.15.2CMake-3.15.2.zip  CMake-3.15.2.tar.gz  CMake-3.15.2.tar.bz2  Brad King6 years
v3.15.1CMake-3.15.1.zip  CMake-3.15.1.tar.gz  CMake-3.15.1.tar.bz2  Brad King6 years
v3.15.0CMake-3.15.0.zip  CMake-3.15.0.tar.gz  CMake-3.15.0.tar.bz2  Brad King6 years
v3.14.6CMake-3.14.6.zip  CMake-3.14.6.tar.gz  CMake-3.14.6.tar.bz2  Brad King6 years
v3.15.0-rc4CMake-3.15.0-rc4.zip  CMake-3.15.0-rc4.tar.gz  CMake-3.15.0-rc4.tar.bz2  Brad King6 years
v3.15.0-rc3CMake-3.15.0-rc3.zip  CMake-3.15.0-rc3.tar.gz  CMake-3.15.0-rc3.tar.bz2  Brad King6 years
v3.15.0-rc2CMake-3.15.0-rc2.zip  CMake-3.15.0-rc2.tar.gz  CMake-3.15.0-rc2.tar.bz2  Brad King6 years
v3.15.0-rc1CMake-3.15.0-rc1.zip  CMake-3.15.0-rc1.tar.gz  CMake-3.15.0-rc1.tar.bz2  Brad King6 years
v3.14.5CMake-3.14.5.zip  CMake-3.14.5.tar.gz  CMake-3.14.5.tar.bz2  Brad King6 years
v3.14.4CMake-3.14.4.zip  CMake-3.14.4.tar.gz  CMake-3.14.4.tar.bz2  Brad King6 years
v3.13.5CMake-3.13.5.zip  CMake-3.13.5.tar.gz  CMake-3.13.5.tar.bz2  Brad King6 years
v3.14.3CMake-3.14.3.zip  CMake-3.14.3.tar.gz  CMake-3.14.3.tar.bz2  Brad King6 years
v3.14.2CMake-3.14.2.zip  CMake-3.14.2.tar.gz  CMake-3.14.2.tar.bz2  Brad King6 years
v3.14.1CMake-3.14.1.zip  CMake-3.14.1.tar.gz  CMake-3.14.1.tar.bz2  Brad King6 years
v3.14.0CMake-3.14.0.zip  CMake-3.14.0.tar.gz  CMake-3.14.0.tar.bz2  Brad King6 years
v3.14.0-rc4CMake-3.14.0-rc4.zip  CMake-3.14.0-rc4.tar.gz  CMake-3.14.0-rc4.tar.bz2  Brad King7 years
v3.14.0-rc3CMake-3.14.0-rc3.zip  CMake-3.14.0-rc3.tar.gz  CMake-3.14.0-rc3.tar.bz2  Brad King7 years
v3.14.0-rc2CMake-3.14.0-rc2.zip  CMake-3.14.0-rc2.tar.gz  CMake-3.14.0-rc2.tar.bz2  Brad King7 years
v3.14.0-rc1CMake-3.14.0-rc1.zip  CMake-3.14.0-rc1.tar.gz  CMake-3.14.0-rc1.tar.bz2  Brad King7 years
v3.13.4CMake-3.13.4.zip  CMake-3.13.4.tar.gz  CMake-3.13.4.tar.bz2  Brad King7 years
v3.13.3CMake-3.13.3.zip  CMake-3.13.3.tar.gz  CMake-3.13.3.tar.bz2  Brad King7 years
v3.13.2CMake-3.13.2.zip  CMake-3.13.2.tar.gz  CMake-3.13.2.tar.bz2  Brad King7 years
v3.13.1CMake-3.13.1.zip  CMake-3.13.1.tar.gz  CMake-3.13.1.tar.bz2  Brad King7 years
v3.13.0CMake-3.13.0.zip  CMake-3.13.0.tar.gz  CMake-3.13.0.tar.bz2  Brad King7 years
v3.13.0-rc3CMake-3.13.0-rc3.zip  CMake-3.13.0-rc3.tar.gz  CMake-3.13.0-rc3.tar.bz2  Brad King7 years
v3.12.4CMake-3.12.4.zip  CMake-3.12.4.tar.gz  CMake-3.12.4.tar.bz2  Brad King7 years
v3.13.0-rc2CMake-3.13.0-rc2.zip  CMake-3.13.0-rc2.tar.gz  CMake-3.13.0-rc2.tar.bz2  Brad King7 years
v3.13.0-rc1CMake-3.13.0-rc1.zip  CMake-3.13.0-rc1.tar.gz  CMake-3.13.0-rc1.tar.bz2  Brad King7 years
v3.12.3CMake-3.12.3.zip  CMake-3.12.3.tar.gz  CMake-3.12.3.tar.bz2  Brad King7 years
v3.12.2CMake-3.12.2.zip  CMake-3.12.2.tar.gz  CMake-3.12.2.tar.bz2  Brad King7 years
v3.12.1CMake-3.12.1.zip  CMake-3.12.1.tar.gz  CMake-3.12.1.tar.bz2  Brad King7 years
v3.12.0CMake-3.12.0.zip  CMake-3.12.0.tar.gz  CMake-3.12.0.tar.bz2  Brad King7 years
v3.12.0-rc3CMake-3.12.0-rc3.zip  CMake-3.12.0-rc3.tar.gz  CMake-3.12.0-rc3.tar.bz2  Brad King7 years
v3.12.0-rc2CMake-3.12.0-rc2.zip  CMake-3.12.0-rc2.tar.gz  CMake-3.12.0-rc2.tar.bz2  Brad King7 years
v3.12.0-rc1CMake-3.12.0-rc1.zip  CMake-3.12.0-rc1.tar.gz  CMake-3.12.0-rc1.tar.bz2  Brad King7 years
v3.11.4CMake-3.11.4.zip  CMake-3.11.4.tar.gz  CMake-3.11.4.tar.bz2  Brad King7 years
v3.11.3CMake-3.11.3.zip  CMake-3.11.3.tar.gz  CMake-3.11.3.tar.bz2  Brad King7 years
v3.11.2CMake-3.11.2.zip  CMake-3.11.2.tar.gz  CMake-3.11.2.tar.bz2  Brad King7 years
v3.11.1CMake-3.11.1.zip  CMake-3.11.1.tar.gz  CMake-3.11.1.tar.bz2  Brad King7 years
v3.11.0CMake-3.11.0.zip  CMake-3.11.0.tar.gz  CMake-3.11.0.tar.bz2  Brad King7 years
v3.11.0-rc4CMake-3.11.0-rc4.zip  CMake-3.11.0-rc4.tar.gz  CMake-3.11.0-rc4.tar.bz2  Brad King7 years
v3.10.3CMake-3.10.3.zip  CMake-3.10.3.tar.gz  CMake-3.10.3.tar.bz2  Brad King7 years
v3.11.0-rc3CMake-3.11.0-rc3.zip  CMake-3.11.0-rc3.tar.gz  CMake-3.11.0-rc3.tar.bz2  Brad King8 years
v3.11.0-rc2CMake-3.11.0-rc2.zip  CMake-3.11.0-rc2.tar.gz  CMake-3.11.0-rc2.tar.bz2  Brad King8 years
v3.11.0-rc1CMake-3.11.0-rc1.zip  CMake-3.11.0-rc1.tar.gz  CMake-3.11.0-rc1.tar.bz2  Brad King8 years
v3.10.2CMake-3.10.2.zip  CMake-3.10.2.tar.gz  CMake-3.10.2.tar.bz2  Brad King8 years
v3.10.1CMake-3.10.1.zip  CMake-3.10.1.tar.gz  CMake-3.10.1.tar.bz2  Brad King8 years
v3.10.0CMake-3.10.0.zip  CMake-3.10.0.tar.gz  CMake-3.10.0.tar.bz2  Brad King8 years
v3.10.0-rc5CMake-3.10.0-rc5.zip  CMake-3.10.0-rc5.tar.gz  CMake-3.10.0-rc5.tar.bz2  Brad King8 years
v3.9.6CMake-3.9.6.zip  CMake-3.9.6.tar.gz  CMake-3.9.6.tar.bz2  Brad King8 years
v3.9.5CMake-3.9.5.zip  CMake-3.9.5.tar.gz  CMake-3.9.5.tar.bz2  Brad King8 years
v3.10.0-rc4CMake-3.10.0-rc4.zip  CMake-3.10.0-rc4.tar.gz  CMake-3.10.0-rc4.tar.bz2  Brad King8 years
v3.10.0-rc3CMake-3.10.0-rc3.zip  CMake-3.10.0-rc3.tar.gz  CMake-3.10.0-rc3.tar.bz2  Brad King8 years
v3.10.0-rc2CMake-3.10.0-rc2.zip  CMake-3.10.0-rc2.tar.gz  CMake-3.10.0-rc2.tar.bz2  Brad King8 years
v3.10.0-rc1CMake-3.10.0-rc1.zip  CMake-3.10.0-rc1.tar.gz  CMake-3.10.0-rc1.tar.bz2  Brad King8 years
v3.9.4CMake-3.9.4.zip  CMake-3.9.4.tar.gz  CMake-3.9.4.tar.bz2  Brad King8 years
v3.9.3CMake-3.9.3.zip  CMake-3.9.3.tar.gz  CMake-3.9.3.tar.bz2  Brad King8 years
v3.9.2CMake-3.9.2.zip  CMake-3.9.2.tar.gz  CMake-3.9.2.tar.bz2  Brad King8 years
v3.9.1CMake-3.9.1.zip  CMake-3.9.1.tar.gz  CMake-3.9.1.tar.bz2  Brad King8 years
v3.9.0CMake-3.9.0.zip  CMake-3.9.0.tar.gz  CMake-3.9.0.tar.bz2  Brad King8 years
v3.9.0-rc6CMake-3.9.0-rc6.zip  CMake-3.9.0-rc6.tar.gz  CMake-3.9.0-rc6.tar.bz2  Brad King8 years
v3.9.0-rc5CMake-3.9.0-rc5.zip  CMake-3.9.0-rc5.tar.gz  CMake-3.9.0-rc5.tar.bz2  Brad King8 years
v3.9.0-rc4CMake-3.9.0-rc4.zip  CMake-3.9.0-rc4.tar.gz  CMake-3.9.0-rc4.tar.bz2  Brad King8 years
v3.9.0-rc3CMake-3.9.0-rc3.zip  CMake-3.9.0-rc3.tar.gz  CMake-3.9.0-rc3.tar.bz2  Brad King8 years
v3.9.0-rc2CMake-3.9.0-rc2.zip  CMake-3.9.0-rc2.tar.gz  CMake-3.9.0-rc2.tar.bz2  Brad King8 years
v3.9.0-rc1CMake-3.9.0-rc1.zip  CMake-3.9.0-rc1.tar.gz  CMake-3.9.0-rc1.tar.bz2  Brad King8 years
v3.8.2CMake-3.8.2.zip  CMake-3.8.2.tar.gz  CMake-3.8.2.tar.bz2  Brad King8 years
v3.8.1CMake-3.8.1.zip  CMake-3.8.1.tar.gz  CMake-3.8.1.tar.bz2  Brad King8 years
v3.8.0CMake-3.8.0.zip  CMake-3.8.0.tar.gz  CMake-3.8.0.tar.bz2  Brad King8 years
v3.8.0-rc4CMake-3.8.0-rc4.zip  CMake-3.8.0-rc4.tar.gz  CMake-3.8.0-rc4.tar.bz2  Brad King8 years
v3.8.0-rc3CMake-3.8.0-rc3.zip  CMake-3.8.0-rc3.tar.gz  CMake-3.8.0-rc3.tar.bz2  Brad King8 years
v3.8.0-rc2CMake-3.8.0-rc2.zip  CMake-3.8.0-rc2.tar.gz  CMake-3.8.0-rc2.tar.bz2  Brad King9 years
v3.8.0-rc1CMake-3.8.0-rc1.zip  CMake-3.8.0-rc1.tar.gz  CMake-3.8.0-rc1.tar.bz2  Brad King9 years
v3.7.2CMake-3.7.2.zip  CMake-3.7.2.tar.gz  CMake-3.7.2.tar.bz2  Brad King9 years
v3.7.1CMake-3.7.1.zip  CMake-3.7.1.tar.gz  CMake-3.7.1.tar.bz2  Brad King9 years
v3.7.0CMake-3.7.0.zip  CMake-3.7.0.tar.gz  CMake-3.7.0.tar.bz2  Brad King9 years
v3.7.0-rc3CMake-3.7.0-rc3.zip  CMake-3.7.0-rc3.tar.gz  CMake-3.7.0-rc3.tar.bz2  Brad King9 years
v3.6.3CMake-3.6.3.zip  CMake-3.6.3.tar.gz  CMake-3.6.3.tar.bz2  Brad King9 years
v3.7.0-rc2CMake-3.7.0-rc2.zip  CMake-3.7.0-rc2.tar.gz  CMake-3.7.0-rc2.tar.bz2  Brad King9 years
v3.7.0-rc1CMake-3.7.0-rc1.zip  CMake-3.7.0-rc1.tar.gz  CMake-3.7.0-rc1.tar.bz2  Brad King9 years
v3.6.2CMake-3.6.2.zip  CMake-3.6.2.tar.gz  CMake-3.6.2.tar.bz2  Brad King9 years
v3.6.1CMake-3.6.1.zip  CMake-3.6.1.tar.gz  CMake-3.6.1.tar.bz2  Brad King9 years
v3.6.0CMake-3.6.0.zip  CMake-3.6.0.tar.gz  CMake-3.6.0.tar.bz2  Brad King9 years
v3.6.0-rc4CMake-3.6.0-rc4.zip  CMake-3.6.0-rc4.tar.gz  CMake-3.6.0-rc4.tar.bz2  Brad King9 years
v3.6.0-rc3CMake-3.6.0-rc3.zip  CMake-3.6.0-rc3.tar.gz  CMake-3.6.0-rc3.tar.bz2  Brad King9 years
v3.6.0-rc2CMake-3.6.0-rc2.zip  CMake-3.6.0-rc2.tar.gz  CMake-3.6.0-rc2.tar.bz2  Brad King9 years
v3.6.0-rc1CMake-3.6.0-rc1.zip  CMake-3.6.0-rc1.tar.gz  CMake-3.6.0-rc1.tar.bz2  Brad King9 years
v3.5.2CMake-3.5.2.zip  CMake-3.5.2.tar.gz  CMake-3.5.2.tar.bz2  Brad King9 years
v3.5.1CMake-3.5.1.zip  CMake-3.5.1.tar.gz  CMake-3.5.1.tar.bz2  Brad King9 years
v3.5.0CMake-3.5.0.zip  CMake-3.5.0.tar.gz  CMake-3.5.0.tar.bz2  Brad King10 years
v3.5.0-rc3CMake-3.5.0-rc3.zip  CMake-3.5.0-rc3.tar.gz  CMake-3.5.0-rc3.tar.bz2  Brad King10 years
v3.5.0-rc2CMake-3.5.0-rc2.zip  CMake-3.5.0-rc2.tar.gz  CMake-3.5.0-rc2.tar.bz2  Brad King10 years
v3.5.0-rc1CMake-3.5.0-rc1.zip  CMake-3.5.0-rc1.tar.gz  CMake-3.5.0-rc1.tar.bz2  Brad King10 years
v3.4.3CMake-3.4.3.zip  CMake-3.4.3.tar.gz  CMake-3.4.3.tar.bz2  Brad King10 years
v3.4.2CMake-3.4.2.zip  CMake-3.4.2.tar.gz  CMake-3.4.2.tar.bz2  Brad King10 years
v3.4.1CMake-3.4.1.zip  CMake-3.4.1.tar.gz  CMake-3.4.1.tar.bz2  Brad King10 years
v3.4.0CMake-3.4.0.zip  CMake-3.4.0.tar.gz  CMake-3.4.0.tar.bz2  Brad King10 years
v3.4.0-rc3CMake-3.4.0-rc3.zip  CMake-3.4.0-rc3.tar.gz  CMake-3.4.0-rc3.tar.bz2  Brad King10 years
v3.4.0-rc2CMake-3.4.0-rc2.zip  CMake-3.4.0-rc2.tar.gz  CMake-3.4.0-rc2.tar.bz2  Brad King10 years
v3.4.0-rc1CMake-3.4.0-rc1.zip  CMake-3.4.0-rc1.tar.gz  CMake-3.4.0-rc1.tar.bz2  Brad King10 years
v3.3.2CMake-3.3.2.zip  CMake-3.3.2.tar.gz  CMake-3.3.2.tar.bz2  Brad King10 years
v3.3.1CMake-3.3.1.zip  CMake-3.3.1.tar.gz  CMake-3.3.1.tar.bz2  Brad King10 years
v3.3.0CMake-3.3.0.zip  CMake-3.3.0.tar.gz  CMake-3.3.0.tar.bz2  Brad King10 years
v3.3.0-rc4CMake-3.3.0-rc4.zip  CMake-3.3.0-rc4.tar.gz  CMake-3.3.0-rc4.tar.bz2  Brad King10 years
v3.3.0-rc3CMake-3.3.0-rc3.zip  CMake-3.3.0-rc3.tar.gz  CMake-3.3.0-rc3.tar.bz2  Brad King10 years
v3.3.0-rc2CMake-3.3.0-rc2.zip  CMake-3.3.0-rc2.tar.gz  CMake-3.3.0-rc2.tar.bz2  Brad King10 years
v3.3.0-rc1CMake-3.3.0-rc1.zip  CMake-3.3.0-rc1.tar.gz  CMake-3.3.0-rc1.tar.bz2  Brad King10 years
v3.2.3CMake-3.2.3.zip  CMake-3.2.3.tar.gz  CMake-3.2.3.tar.bz2  Brad King10 years
v3.2.2CMake-3.2.2.zip  CMake-3.2.2.tar.gz  CMake-3.2.2.tar.bz2  Brad King10 years
v3.2.1CMake-3.2.1.zip  CMake-3.2.1.tar.gz  CMake-3.2.1.tar.bz2  Brad King11 years
v3.2.0CMake-3.2.0.zip  CMake-3.2.0.tar.gz  CMake-3.2.0.tar.bz2  Brad King11 years
v3.2.0-rc2CMake-3.2.0-rc2.zip  CMake-3.2.0-rc2.tar.gz  CMake-3.2.0-rc2.tar.bz2  Brad King11 years
v3.2.0-rc1CMake-3.2.0-rc1.zip  CMake-3.2.0-rc1.tar.gz  CMake-3.2.0-rc1.tar.bz2  Brad King11 years
v3.1.3CMake-3.1.3.zip  CMake-3.1.3.tar.gz  CMake-3.1.3.tar.bz2  Brad King11 years
v3.1.2CMake-3.1.2.zip  CMake-3.1.2.tar.gz  CMake-3.1.2.tar.bz2  Brad King11 years
v3.1.1CMake-3.1.1.zip  CMake-3.1.1.tar.gz  CMake-3.1.1.tar.bz2  Brad King11 years
v3.1.0CMake-3.1.0.zip  CMake-3.1.0.tar.gz  CMake-3.1.0.tar.bz2  Brad King11 years
v3.1.0-rc3CMake-3.1.0-rc3.zip  CMake-3.1.0-rc3.tar.gz  CMake-3.1.0-rc3.tar.bz2  Brad King11 years
v3.1.0-rc2CMake-3.1.0-rc2.zip  CMake-3.1.0-rc2.tar.gz  CMake-3.1.0-rc2.tar.bz2  Brad King11 years
v3.1.0-rc1CMake-3.1.0-rc1.zip  CMake-3.1.0-rc1.tar.gz  CMake-3.1.0-rc1.tar.bz2  Brad King11 years
v3.0.2CMake-3.0.2.zip  CMake-3.0.2.tar.gz  CMake-3.0.2.tar.bz2  Brad King11 years
v3.0.1CMake-3.0.1.zip  CMake-3.0.1.tar.gz  CMake-3.0.1.tar.bz2  Brad King11 years
v3.0.0CMake-3.0.0.zip  CMake-3.0.0.tar.gz  CMake-3.0.0.tar.bz2  Brad King11 years
v3.0.0-rc6CMake-3.0.0-rc6.zip  CMake-3.0.0-rc6.tar.gz  CMake-3.0.0-rc6.tar.bz2  Brad King11 years
v3.0.0-rc5CMake-3.0.0-rc5.zip  CMake-3.0.0-rc5.tar.gz  CMake-3.0.0-rc5.tar.bz2  Brad King11 years
v3.0.0-rc4CMake-3.0.0-rc4.zip  CMake-3.0.0-rc4.tar.gz  CMake-3.0.0-rc4.tar.bz2  Brad King11 years
v3.0.0-rc3CMake-3.0.0-rc3.zip  CMake-3.0.0-rc3.tar.gz  CMake-3.0.0-rc3.tar.bz2  Brad King11 years
v3.0.0-rc2CMake-3.0.0-rc2.zip  CMake-3.0.0-rc2.tar.gz  CMake-3.0.0-rc2.tar.bz2  Brad King11 years
v3.0.0-rc1CMake-3.0.0-rc1.zip  CMake-3.0.0-rc1.tar.gz  CMake-3.0.0-rc1.tar.bz2  Brad King12 years
v2.8.12.2CMake-2.8.12.2.zip  CMake-2.8.12.2.tar.gz  CMake-2.8.12.2.tar.bz2  Brad King12 years
v2.8.12.1CMake-2.8.12.1.zip  CMake-2.8.12.1.tar.gz  CMake-2.8.12.1.tar.bz2  Brad King12 years
v2.8.12CMake-2.8.12.zip  CMake-2.8.12.tar.gz  CMake-2.8.12.tar.bz2  Brad King12 years
v2.8.11.2CMake-2.8.11.2.zip  CMake-2.8.11.2.tar.gz  CMake-2.8.11.2.tar.bz2  Brad King12 years
v2.8.11.1CMake-2.8.11.1.zip  CMake-2.8.11.1.tar.gz  CMake-2.8.11.1.tar.bz2  Brad King12 years
v2.8.11CMake-2.8.11.zip  CMake-2.8.11.tar.gz  CMake-2.8.11.tar.bz2  Brad King12 years
v2.8.10.2CMake-2.8.10.2.zip  CMake-2.8.10.2.tar.gz  CMake-2.8.10.2.tar.bz2  Brad King13 years
v2.8.10.1CMake-2.8.10.1.zip  CMake-2.8.10.1.tar.gz  CMake-2.8.10.1.tar.bz2  Brad King13 years
v2.8.10CMake-2.8.10.zip  CMake-2.8.10.tar.gz  CMake-2.8.10.tar.bz2  Brad King13 years
v2.8.9CMake-2.8.9.zip  CMake-2.8.9.tar.gz  CMake-2.8.9.tar.bz2  Brad King13 years
v2.8.8CMake-2.8.8.zip  CMake-2.8.8.tar.gz  CMake-2.8.8.tar.bz2  Brad King13 years
v2.8.7CMake-2.8.7.zip  CMake-2.8.7.tar.gz  CMake-2.8.7.tar.bz2  Brad King14 years
v2.8.6CMake-2.8.6.zip  CMake-2.8.6.tar.gz  CMake-2.8.6.tar.bz2  Brad King14 years
v2.8.5CMake-2.8.5.zip  CMake-2.8.5.tar.gz  CMake-2.8.5.tar.bz2  Brad King14 years
v2.8.4CMake-2.8.4.zip  CMake-2.8.4.tar.gz  CMake-2.8.4.tar.bz2  Brad King15 years
v2.8.3CMake-2.8.3.zip  CMake-2.8.3.tar.gz  CMake-2.8.3.tar.bz2  Brad King15 years
v2.8.2CMake-2.8.2.zip  CMake-2.8.2.tar.gz  CMake-2.8.2.tar.bz2  Brad King15 years
v2.8.1CMake-2.8.1.zip  CMake-2.8.1.tar.gz  CMake-2.8.1.tar.bz2  Brad King15 years
v2.8.0CMake-2.8.0.zip  CMake-2.8.0.tar.gz  CMake-2.8.0.tar.bz2  Brad King16 years
v2.6.4CMake-2.6.4.zip  CMake-2.6.4.tar.gz  CMake-2.6.4.tar.bz2  Brad King16 years
v2.6.3CMake-2.6.3.zip  CMake-2.6.3.tar.gz  CMake-2.6.3.tar.bz2  Brad King17 years
v2.6.2CMake-2.6.2.zip  CMake-2.6.2.tar.gz  CMake-2.6.2.tar.bz2  Brad King17 years
v2.6.1CMake-2.6.1.zip  CMake-2.6.1.tar.gz  CMake-2.6.1.tar.bz2  Brad King17 years
v2.6.0CMake-2.6.0.zip  CMake-2.6.0.tar.gz  CMake-2.6.0.tar.bz2  Brad King17 years
v2.4.8CMake-2.4.8.zip  CMake-2.4.8.tar.gz  CMake-2.4.8.tar.bz2  Brad King18 years
v2.4.7CMake-2.4.7.zip  CMake-2.4.7.tar.gz  CMake-2.4.7.tar.bz2  Brad King18 years
v2.4.6CMake-2.4.6.zip  CMake-2.4.6.tar.gz  CMake-2.4.6.tar.bz2  Brad King19 years
v2.4.5CMake-2.4.5.zip  CMake-2.4.5.tar.gz  CMake-2.4.5.tar.bz2  Brad King19 years
v2.4.4CMake-2.4.4.zip  CMake-2.4.4.tar.gz  CMake-2.4.4.tar.bz2  Brad King19 years
v2.4.3CMake-2.4.3.zip  CMake-2.4.3.tar.gz  CMake-2.4.3.tar.bz2  Brad King19 years
v2.4.2CMake-2.4.2.zip  CMake-2.4.2.tar.gz  CMake-2.4.2.tar.bz2  Brad King19 years
v2.4.1CMake-2.4.1.zip  CMake-2.4.1.tar.gz  CMake-2.4.1.tar.bz2  Brad King19 years
v2.4.0CMake-2.4.0.zip  CMake-2.4.0.tar.gz  CMake-2.4.0.tar.bz2  Brad King19 years
pan class="hl opt">) { Tcl_DStringFree(&ds); return TCL_ERROR; } Tcl_DStringResult(interp, &ds); return TCL_OK; } else if (objc == 3) { Tcl_DString ds; /* DString to hold result of calling * Tcl_GetChannelOption. */ Tcl_DStringInit(&ds); optionName = TclGetString(objv[2]); if (Tcl_GetChannelOption(interp, chan, optionName, &ds) != TCL_OK) { Tcl_DStringFree(&ds); return TCL_ERROR; } Tcl_DStringResult(interp, &ds); return TCL_OK; } for (i = 3; i < objc; i += 2) { optionName = TclGetString(objv[i-1]); valueName = TclGetString(objv[i]); if (Tcl_SetChannelOption(interp, chan, optionName, valueName) != TCL_OK) { return TCL_ERROR; } } return TCL_OK; } /* *--------------------------------------------------------------------------- * * Tcl_EofObjCmd -- * * This function is invoked to process the Tcl "eof" command. See the * user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Sets interp's result to boolean true or false depending on whether the * specified channel has an EOF condition. * *--------------------------------------------------------------------------- */ /* ARGSUSED */ int Tcl_EofObjCmd( ClientData unused, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel chan; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "channelId"); return TCL_ERROR; } if (TclGetChannelFromObj(interp, objv[1], &chan, NULL, 0) != TCL_OK) { return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewBooleanObj(Tcl_Eof(chan))); return TCL_OK; } /* *---------------------------------------------------------------------- * * Tcl_ExecObjCmd -- * * This function is invoked to process the "exec" Tcl command. See the * user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * See the user documentation. * *---------------------------------------------------------------------- */ /* ARGSUSED */ int Tcl_ExecObjCmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Obj *resultPtr; const char **argv; /* An array for the string arguments. Stored * on the _Tcl_ stack. */ const char *string; Tcl_Channel chan; int argc, background, i, index, keepNewline, result, skip, length; int ignoreStderr; static const char *const options[] = { "-ignorestderr", "-keepnewline", "--", NULL }; enum options { EXEC_IGNORESTDERR, EXEC_KEEPNEWLINE, EXEC_LAST }; /* * Check for any leading option arguments. */ keepNewline = 0; ignoreStderr = 0; for (skip = 1; skip < objc; skip++) { string = TclGetString(objv[skip]); if (string[0] != '-') { break; } if (Tcl_GetIndexFromObj(interp, objv[skip], options, "switch", TCL_EXACT, &index) != TCL_OK) { return TCL_ERROR; } if (index == EXEC_KEEPNEWLINE) { keepNewline = 1; } else if (index == EXEC_IGNORESTDERR) { ignoreStderr = 1; } else { skip++; break; } } if (objc <= skip) { Tcl_WrongNumArgs(interp, 1, objv, "?-switch ...? arg ?arg ...?"); return TCL_ERROR; } /* * See if the command is to be run in background. */ background = 0; string = TclGetString(objv[objc - 1]); if ((string[0] == '&') && (string[1] == '\0')) { objc--; background = 1; } /* * Create the string argument array "argv". Make sure argv is large enough * to hold the argc arguments plus 1 extra for the zero end-of-argv word. */ argc = objc - skip; argv = TclStackAlloc(interp, (unsigned)(argc + 1) * sizeof(char *)); /* * Copy the string conversions of each (post option) object into the * argument vector. */ for (i = 0; i < argc; i++) { argv[i] = TclGetString(objv[i + skip]); } argv[argc] = NULL; chan = Tcl_OpenCommandChannel(interp, argc, argv, (background ? 0 : ignoreStderr ? TCL_STDOUT : TCL_STDOUT|TCL_STDERR)); /* * Free the argv array. */ TclStackFree(interp, (void *) argv); if (chan == NULL) { return TCL_ERROR; } if (background) { /* * Store the list of PIDs from the pipeline in interp's result and * detach the PIDs (instead of waiting for them). */ TclGetAndDetachPids(interp, chan); if (Tcl_Close(interp, chan) != TCL_OK) { return TCL_ERROR; } return TCL_OK; } resultPtr = Tcl_NewObj(); if (Tcl_GetChannelHandle(chan, TCL_READABLE, NULL) == TCL_OK) { if (Tcl_ReadChars(chan, resultPtr, -1, 0) < 0) { /* * TIP #219. * Capture error messages put by the driver into the bypass area * and put them into the regular interpreter result. Fall back to * the regular message if nothing was found in the bypass. */ if (!TclChanCaughtErrorBypass(interp, chan)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error reading output from command: %s", Tcl_PosixError(interp))); Tcl_DecrRefCount(resultPtr); } return TCL_ERROR; } } /* * If the process produced anything on stderr, it will have been returned * in the interpreter result. It needs to be appended to the result * string. */ result = Tcl_Close(interp, chan); Tcl_AppendObjToObj(resultPtr, Tcl_GetObjResult(interp)); /* * If the last character of the result is a newline, then remove the * newline character. */ if (keepNewline == 0) { string = TclGetStringFromObj(resultPtr, &length); if ((length > 0) && (string[length - 1] == '\n')) { Tcl_SetObjLength(resultPtr, length - 1); } } Tcl_SetObjResult(interp, resultPtr); return result; } /* *--------------------------------------------------------------------------- * * Tcl_FblockedObjCmd -- * * This function is invoked to process the Tcl "fblocked" command. See * the user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Sets interp's result to boolean true or false depending on whether the * preceeding input operation on the channel would have blocked. * *--------------------------------------------------------------------------- */ /* ARGSUSED */ int Tcl_FblockedObjCmd( ClientData unused, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel chan; int mode; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "channelId"); return TCL_ERROR; } if (TclGetChannelFromObj(interp, objv[1], &chan, &mode, 0) != TCL_OK) { return TCL_ERROR; } if (!(mode & TCL_READABLE)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "channel \"%s\" wasn't opened for reading", TclGetString(objv[1]))); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewBooleanObj(Tcl_InputBlocked(chan))); return TCL_OK; } /* *---------------------------------------------------------------------- * * Tcl_OpenObjCmd -- * * This function is invoked to process the "open" Tcl command. See the * user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * See the user documentation. * *---------------------------------------------------------------------- */ /* ARGSUSED */ int Tcl_OpenObjCmd( ClientData notUsed, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { int pipeline, prot; const char *modeString, *what; Tcl_Channel chan; if ((objc < 2) || (objc > 4)) { Tcl_WrongNumArgs(interp, 1, objv, "fileName ?access? ?permissions?"); return TCL_ERROR; } prot = 0666; if (objc == 2) { modeString = "r"; } else { modeString = TclGetString(objv[2]); if (objc == 4) { const char *permString = TclGetString(objv[3]); int code = TCL_ERROR; int scanned = TclParseAllWhiteSpace(permString, -1); /* * Support legacy octal numbers. */ if ((permString[scanned] == '0') && (permString[scanned+1] >= '0') && (permString[scanned+1] <= '7')) { Tcl_Obj *permObj; TclNewLiteralStringObj(permObj, "0o"); Tcl_AppendToObj(permObj, permString+scanned+1, -1); code = TclGetIntFromObj(NULL, permObj, &prot); Tcl_DecrRefCount(permObj); } if ((code == TCL_ERROR) && TclGetIntFromObj(interp, objv[3], &prot) != TCL_OK) { return TCL_ERROR; } } } pipeline = 0; what = TclGetString(objv[1]); if (what[0] == '|') { pipeline = 1; } /* * Open the file or create a process pipeline. */ if (!pipeline) { chan = Tcl_FSOpenFileChannel(interp, objv[1], modeString, prot); } else { int mode, seekFlag, cmdObjc, binary; const char **cmdArgv; if (Tcl_SplitList(interp, what+1, &cmdObjc, &cmdArgv) != TCL_OK) { return TCL_ERROR; } mode = TclGetOpenModeEx(interp, modeString, &seekFlag, &binary); if (mode == -1) { chan = NULL; } else { int flags = TCL_STDERR | TCL_ENFORCE_MODE; switch (mode & (O_RDONLY | O_WRONLY | O_RDWR)) { case O_RDONLY: flags |= TCL_STDOUT; break; case O_WRONLY: flags |= TCL_STDIN; break; case O_RDWR: flags |= (TCL_STDIN | TCL_STDOUT); break; default: Tcl_Panic("Tcl_OpenCmd: invalid mode value"); break; } chan = Tcl_OpenCommandChannel(interp, cmdObjc, cmdArgv, flags); if (binary && chan) { Tcl_SetChannelOption(interp, chan, "-translation", "binary"); } } ckfree(cmdArgv); } if (chan == NULL) { return TCL_ERROR; } Tcl_RegisterChannel(interp, chan); Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_GetChannelName(chan), -1)); return TCL_OK; } /* *---------------------------------------------------------------------- * * TcpAcceptCallbacksDeleteProc -- * * Assocdata cleanup routine called when an interpreter is being deleted * to set the interp field of all the accept callback records registered * with the interpreter to NULL. This will prevent the interpreter from * being used in the future to eval accept scripts. * * Results: * None. * * Side effects: * Deallocates memory and sets the interp field of all the accept * callback records to NULL to prevent this interpreter from being used * subsequently to eval accept scripts. * *---------------------------------------------------------------------- */ /* ARGSUSED */ static void TcpAcceptCallbacksDeleteProc( ClientData clientData, /* Data which was passed when the assocdata * was registered. */ Tcl_Interp *interp) /* Interpreter being deleted - not used. */ { Tcl_HashTable *hTblPtr = clientData; Tcl_HashEntry *hPtr; Tcl_HashSearch hSearch; for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); hPtr != NULL; hPtr = Tcl_NextHashEntry(&hSearch)) { AcceptCallback *acceptCallbackPtr = Tcl_GetHashValue(hPtr); acceptCallbackPtr->interp = NULL; } Tcl_DeleteHashTable(hTblPtr); ckfree(hTblPtr); } /* *---------------------------------------------------------------------- * * RegisterTcpServerInterpCleanup -- * * Registers an accept callback record to have its interp field set to * NULL when the interpreter is deleted. * * Results: * None. * * Side effects: * When, in the future, the interpreter is deleted, the interp field of * the accept callback data structure will be set to NULL. This will * prevent attempts to eval the accept script in a deleted interpreter. * *---------------------------------------------------------------------- */ static void RegisterTcpServerInterpCleanup( Tcl_Interp *interp, /* Interpreter for which we want to be * informed of deletion. */ AcceptCallback *acceptCallbackPtr) /* The accept callback record whose interp * field we want set to NULL when the * interpreter is deleted. */ { Tcl_HashTable *hTblPtr; /* Hash table for accept callback records to * smash when the interpreter will be * deleted. */ Tcl_HashEntry *hPtr; /* Entry for this record. */ int isNew; /* Is the entry new? */ hTblPtr = Tcl_GetAssocData(interp, "tclTCPAcceptCallbacks", NULL); if (hTblPtr == NULL) { hTblPtr = ckalloc(sizeof(Tcl_HashTable)); Tcl_InitHashTable(hTblPtr, TCL_ONE_WORD_KEYS); Tcl_SetAssocData(interp, "tclTCPAcceptCallbacks", TcpAcceptCallbacksDeleteProc, hTblPtr); } hPtr = Tcl_CreateHashEntry(hTblPtr, acceptCallbackPtr, &isNew); if (!isNew) { Tcl_Panic("RegisterTcpServerCleanup: damaged accept record table"); } Tcl_SetHashValue(hPtr, acceptCallbackPtr); } /* *---------------------------------------------------------------------- * * UnregisterTcpServerInterpCleanupProc -- * * Unregister a previously registered accept callback record. The interp * field of this record will no longer be set to NULL in the future when * the interpreter is deleted. * * Results: * None. * * Side effects: * Prevents the interp field of the accept callback record from being set * to NULL in the future when the interpreter is deleted. * *---------------------------------------------------------------------- */ static void UnregisterTcpServerInterpCleanupProc( Tcl_Interp *interp, /* Interpreter in which the accept callback * record was registered. */ AcceptCallback *acceptCallbackPtr) /* The record for which to delete the * registration. */ { Tcl_HashTable *hTblPtr; Tcl_HashEntry *hPtr; hTblPtr = Tcl_GetAssocData(interp, "tclTCPAcceptCallbacks", NULL); if (hTblPtr == NULL) { return; } hPtr = Tcl_FindHashEntry(hTblPtr, (char *) acceptCallbackPtr); if (hPtr != NULL) { Tcl_DeleteHashEntry(hPtr); } } /* *---------------------------------------------------------------------- * * AcceptCallbackProc -- * * This callback is invoked by the TCP channel driver when it accepts a * new connection from a client on a server socket. * * Results: * None. * * Side effects: * Whatever the script does. * *---------------------------------------------------------------------- */ static void AcceptCallbackProc( ClientData callbackData, /* The data stored when the callback was * created in the call to * Tcl_OpenTcpServer. */ Tcl_Channel chan, /* Channel for the newly accepted * connection. */ char *address, /* Address of client that was accepted. */ int port) /* Port of client that was accepted. */ { AcceptCallback *acceptCallbackPtr = callbackData; /* * Check if the callback is still valid; the interpreter may have gone * away, this is signalled by setting the interp field of the callback * data to NULL. */ if (acceptCallbackPtr->interp != NULL) { char portBuf[TCL_INTEGER_SPACE]; char *script = acceptCallbackPtr->script; Tcl_Interp *interp = acceptCallbackPtr->interp; int result; Tcl_Preserve(script); Tcl_Preserve(interp); TclFormatInt(portBuf, port); Tcl_RegisterChannel(interp, chan); /* * Artificially bump the refcount to protect the channel from being * deleted while the script is being evaluated. */ Tcl_RegisterChannel(NULL, chan); result = Tcl_VarEval(interp, script, " ", Tcl_GetChannelName(chan), " ", address, " ", portBuf, NULL); if (result != TCL_OK) { Tcl_BackgroundException(interp, result); Tcl_UnregisterChannel(interp, chan); } /* * Decrement the artificially bumped refcount. After this it is not * safe anymore to use "chan", because it may now be deleted. */ Tcl_UnregisterChannel(NULL, chan); Tcl_Release(interp); Tcl_Release(script); } else { /* * The interpreter has been deleted, so there is no useful way to use * the client socket - just close it. */ Tcl_Close(NULL, chan); } } /* *---------------------------------------------------------------------- * * TcpServerCloseProc -- * * This callback is called when the TCP server channel for which it was * registered is being closed. It informs the interpreter in which the * accept script is evaluated (if that interpreter still exists) that * this channel no longer needs to be informed if the interpreter is * deleted. * * Results: * None. * * Side effects: * In the future, if the interpreter is deleted this channel will no * longer be informed. * *---------------------------------------------------------------------- */ static void TcpServerCloseProc( ClientData callbackData) /* The data passed in the call to * Tcl_CreateCloseHandler. */ { AcceptCallback *acceptCallbackPtr = callbackData; /* The actual data. */ if (acceptCallbackPtr->interp != NULL) { UnregisterTcpServerInterpCleanupProc(acceptCallbackPtr->interp, acceptCallbackPtr); } Tcl_EventuallyFree(acceptCallbackPtr->script, TCL_DYNAMIC); ckfree(acceptCallbackPtr); } /* *---------------------------------------------------------------------- * * Tcl_SocketObjCmd -- * * This function is invoked to process the "socket" Tcl command. See the * user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Creates a socket based channel. * *---------------------------------------------------------------------- */ int Tcl_SocketObjCmd( ClientData notUsed, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { static const char *const socketOptions[] = { "-async", "-myaddr", "-myport", "-server", NULL }; enum socketOptions { SKT_ASYNC, SKT_MYADDR, SKT_MYPORT, SKT_SERVER }; int optionIndex, a, server = 0, port, myport = 0, async = 0; const char *host, *script = NULL, *myaddr = NULL; Tcl_Channel chan; if (TclpHasSockets(interp) != TCL_OK) { return TCL_ERROR; } for (a = 1; a < objc; a++) { const char *arg = Tcl_GetString(objv[a]); if (arg[0] != '-') { break; } if (Tcl_GetIndexFromObj(interp, objv[a], socketOptions, "option", TCL_EXACT, &optionIndex) != TCL_OK) { return TCL_ERROR; } switch ((enum socketOptions) optionIndex) { case SKT_ASYNC: if (server == 1) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot set -async option for server sockets", -1)); return TCL_ERROR; } async = 1; break; case SKT_MYADDR: a++; if (a >= objc) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "no argument given for -myaddr option", -1)); return TCL_ERROR; } myaddr = TclGetString(objv[a]); break; case SKT_MYPORT: { const char *myPortName; a++; if (a >= objc) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "no argument given for -myport option", -1)); return TCL_ERROR; } myPortName = TclGetString(objv[a]); if (TclSockGetPort(interp, myPortName, "tcp", &myport) != TCL_OK) { return TCL_ERROR; } break; } case SKT_SERVER: if (async == 1) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot set -async option for server sockets", -1)); return TCL_ERROR; } server = 1; a++; if (a >= objc) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "no argument given for -server option", -1)); return TCL_ERROR; } script = TclGetString(objv[a]); break; default: Tcl_Panic("Tcl_SocketObjCmd: bad option index to SocketOptions"); } } if (server) { host = myaddr; /* NULL implies INADDR_ANY */ if (myport != 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "option -myport is not valid for servers", -1)); return TCL_ERROR; } } else if (a < objc) { host = TclGetString(objv[a]); a++; } else { Interp *iPtr; wrongNumArgs: iPtr = (Interp *) interp; Tcl_WrongNumArgs(interp, 1, objv, "?-myaddr addr? ?-myport myport? ?-async? host port"); iPtr->flags |= INTERP_ALTERNATE_WRONG_ARGS; Tcl_WrongNumArgs(interp, 1, objv, "-server command ?-myaddr addr? port"); return TCL_ERROR; } if (a == objc-1) { if (TclSockGetPort(interp, TclGetString(objv[a]), "tcp", &port) != TCL_OK) { return TCL_ERROR; } } else { goto wrongNumArgs; } if (server) { AcceptCallback *acceptCallbackPtr = ckalloc(sizeof(AcceptCallback)); unsigned len = strlen(script) + 1; char *copyScript = ckalloc(len); memcpy(copyScript, script, len); acceptCallbackPtr->script = copyScript; acceptCallbackPtr->interp = interp; chan = Tcl_OpenTcpServer(interp, port, host, AcceptCallbackProc, acceptCallbackPtr); if (chan == NULL) { ckfree(copyScript); ckfree(acceptCallbackPtr); return TCL_ERROR; } /* * Register with the interpreter to let us know when the interpreter * is deleted (by having the callback set the interp field of the * acceptCallbackPtr's structure to NULL). This is to avoid trying to * eval the script in a deleted interpreter. */ RegisterTcpServerInterpCleanup(interp, acceptCallbackPtr); /* * Register a close callback. This callback will inform the * interpreter (if it still exists) that this channel does not need to * be informed when the interpreter is deleted. */ Tcl_CreateCloseHandler(chan, TcpServerCloseProc, acceptCallbackPtr); } else { chan = Tcl_OpenTcpClient(interp, port, host, myaddr, myport, async); if (chan == NULL) { return TCL_ERROR; } } Tcl_RegisterChannel(interp, chan); Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_GetChannelName(chan), -1)); return TCL_OK; } /* *---------------------------------------------------------------------- * * Tcl_FcopyObjCmd -- * * This function is invoked to process the "fcopy" Tcl command. See the * user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Moves data between two channels and possibly sets up a background copy * handler. * *---------------------------------------------------------------------- */ int Tcl_FcopyObjCmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel inChan, outChan; int mode, i, index; Tcl_WideInt toRead; Tcl_Obj *cmdPtr; static const char *const switches[] = { "-size", "-command", NULL }; enum { FcopySize, FcopyCommand }; if ((objc < 3) || (objc > 7) || (objc == 4) || (objc == 6)) { Tcl_WrongNumArgs(interp, 1, objv, "input output ?-size size? ?-command callback?"); return TCL_ERROR; } /* * Parse the channel arguments and verify that they are readable or * writable, as appropriate. */ if (TclGetChannelFromObj(interp, objv[1], &inChan, &mode, 0) != TCL_OK) { return TCL_ERROR; } if (!(mode & TCL_READABLE)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "channel \"%s\" wasn't opened for reading", TclGetString(objv[1]))); return TCL_ERROR; } if (TclGetChannelFromObj(interp, objv[2], &outChan, &mode, 0) != TCL_OK) { return TCL_ERROR; } if (!(mode & TCL_WRITABLE)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "channel \"%s\" wasn't opened for writing", TclGetString(objv[2]))); return TCL_ERROR; } toRead = -1; cmdPtr = NULL; for (i = 3; i < objc; i += 2) { if (Tcl_GetIndexFromObj(interp, objv[i], switches, "switch", 0, &index) != TCL_OK) { return TCL_ERROR; } switch (index) { case FcopySize: if (Tcl_GetWideIntFromObj(interp, objv[i+1], &toRead) != TCL_OK) { return TCL_ERROR; } if (toRead < 0) { /* * Handle all negative sizes like -1, meaning 'copy all'. By * resetting toRead we avoid changes in the core copying * functions (which explicitly check for -1 and crash on any * other negative value). */ toRead = -1; } break; case FcopyCommand: cmdPtr = objv[i+1]; break; } } return TclCopyChannel(interp, inChan, outChan, toRead, cmdPtr); } /* *--------------------------------------------------------------------------- * * ChanPendingObjCmd -- * * This function is invoked to process the Tcl "chan pending" command * (TIP #287). See the user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Sets interp's result to the number of bytes of buffered input or * output (depending on whether the first argument is "input" or * "output"), or -1 if the channel wasn't opened for that mode. * *--------------------------------------------------------------------------- */ /* ARGSUSED */ static int ChanPendingObjCmd( ClientData unused, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel chan; int index, mode; static const char *const options[] = {"input", "output", NULL}; enum options {PENDING_INPUT, PENDING_OUTPUT}; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "mode channelId"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], options, "mode", 0, &index) != TCL_OK) { return TCL_ERROR; } if (TclGetChannelFromObj(interp, objv[2], &chan, &mode, 0) != TCL_OK) { return TCL_ERROR; } switch ((enum options) index) { case PENDING_INPUT: if (!(mode & TCL_READABLE)) { Tcl_SetObjResult(interp, Tcl_NewIntObj(-1)); } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(Tcl_InputBuffered(chan))); } break; case PENDING_OUTPUT: if (!(mode & TCL_WRITABLE)) { Tcl_SetObjResult(interp, Tcl_NewIntObj(-1)); } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(Tcl_OutputBuffered(chan))); } break; } return TCL_OK; } /* *---------------------------------------------------------------------- * * ChanTruncateObjCmd -- * * This function is invoked to process the "chan truncate" Tcl command. * See the user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Truncates a channel (or rather a file underlying a channel). * *---------------------------------------------------------------------- */ static int ChanTruncateObjCmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel chan; Tcl_WideInt length; if ((objc < 2) || (objc > 3)) { Tcl_WrongNumArgs(interp, 1, objv, "channelId ?length?"); return TCL_ERROR; } if (TclGetChannelFromObj(interp, objv[1], &chan, NULL, 0) != TCL_OK) { return TCL_ERROR; } if (objc == 3) { /* * User is supplying an explicit length. */ if (Tcl_GetWideIntFromObj(interp, objv[2], &length) != TCL_OK) { return TCL_ERROR; } if (length < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot truncate to negative length of file", -1)); return TCL_ERROR; } } else { /* * User wants to truncate to the current file position. */ length = Tcl_Tell(chan); if (length == Tcl_WideAsLong(-1)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "could not determine current location in \"%s\": %s", TclGetString(objv[1]), Tcl_PosixError(interp))); return TCL_ERROR; } } if (Tcl_TruncateChannel(chan, length) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error during truncate on \"%s\": %s", TclGetString(objv[1]), Tcl_PosixError(interp))); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * ChanPipeObjCmd -- * * This function is invoked to process the "chan pipe" Tcl command. * See the user documentation for details on what it does. * * Results: * A standard Tcl result. * * Side effects: * Creates a pair of Tcl channels wrapping both ends of a new * anonymous pipe. * *---------------------------------------------------------------------- */ static int ChanPipeObjCmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Channel rchan, wchan; const char *channelNames[2]; Tcl_Obj *resultPtr; if (objc != 1) { Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } if (Tcl_CreatePipe(interp, &rchan, &wchan, 0) != TCL_OK) { return TCL_ERROR; } channelNames[0] = Tcl_GetChannelName(rchan); channelNames[1] = Tcl_GetChannelName(wchan); resultPtr = Tcl_NewObj(); Tcl_ListObjAppendElement(NULL, resultPtr, Tcl_NewStringObj(channelNames[0], -1)); Tcl_ListObjAppendElement(NULL, resultPtr, Tcl_NewStringObj(channelNames[1], -1)); Tcl_SetObjResult(interp, resultPtr); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclChannelNamesCmd -- * * This function is invoked to process the "chan names" and "file * channels" Tcl commands. See the user documentation for details on * what they do. * * Results: * A standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ int TclChannelNamesCmd( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { if (objc < 1 || objc > 2) { Tcl_WrongNumArgs(interp, 1, objv, "?pattern?"); return TCL_ERROR; } return Tcl_GetChannelNamesEx(interp, ((objc == 1) ? NULL : TclGetString(objv[1]))); } /* *---------------------------------------------------------------------- * * TclInitChanCmd -- * * This function is invoked to create the "chan" Tcl command. See the * user documentation for details on what it does. * * Results: * A Tcl command handle. * * Side effects: * None (since nothing is byte-compiled). * *---------------------------------------------------------------------- */ Tcl_Command TclInitChanCmd( Tcl_Interp *interp) { /* * Most commands are plugged directly together, but some are done via * alias-like rewriting; [chan configure] is this way for security reasons * (want overwriting of [fconfigure] to control that nicely), and [chan * names] because the functionality isn't available as a separate command * function at the moment. */ static const EnsembleImplMap initMap[] = { {"blocked", Tcl_FblockedObjCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"close", Tcl_CloseObjCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {"copy", Tcl_FcopyObjCmd, NULL, NULL, NULL, 0}, {"create", TclChanCreateObjCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, /* TIP #219 */ {"eof", Tcl_EofObjCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"event", Tcl_FileEventObjCmd, TclCompileBasic2Or3ArgCmd, NULL, NULL, 0}, {"flush", Tcl_FlushObjCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"gets", Tcl_GetsObjCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {"names", TclChannelNamesCmd, TclCompileBasic0Or1ArgCmd, NULL, NULL, 0}, {"pending", ChanPendingObjCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, /* TIP #287 */ {"pipe", ChanPipeObjCmd, TclCompileBasic0ArgCmd, NULL, NULL, 0}, /* TIP #304 */ {"pop", TclChanPopObjCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, /* TIP #230 */ {"postevent", TclChanPostEventObjCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, /* TIP #219 */ {"push", TclChanPushObjCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, /* TIP #230 */ {"puts", Tcl_PutsObjCmd, NULL, NULL, NULL, 0}, {"read", Tcl_ReadObjCmd, NULL, NULL, NULL, 0}, {"seek", Tcl_SeekObjCmd, TclCompileBasic2Or3ArgCmd, NULL, NULL, 0}, {"tell", Tcl_TellObjCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"truncate", ChanTruncateObjCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, /* TIP #208 */ {NULL, NULL, NULL, NULL, NULL, 0} }; static const char *const extras[] = { "configure", "::fconfigure", NULL }; Tcl_Command ensemble; Tcl_Obj *mapObj; int i; ensemble = TclMakeEnsemble(interp, "chan", initMap); Tcl_GetEnsembleMappingDict(NULL, ensemble, &mapObj); for (i=0 ; extras[i] ; i+=2) { /* * Can assume that reference counts are all incremented. */ Tcl_DictObjPut(NULL, mapObj, Tcl_NewStringObj(extras[i], -1), Tcl_NewStringObj(extras[i+1], -1)); } Tcl_SetEnsembleMappingDict(interp, ensemble, mapObj); return ensemble; } /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */