2022-05-06 09:36:47 +08:00
import { Inputs , Opts } from "./main"
2021-09-16 19:36:35 +08:00
const DefaultVersions : Record < string , string > = {
2022-04-28 03:41:21 +08:00
llvm : "13.0.0" , // https://github.com/llvm/llvm-project/releases
clangtidy : "13.0.0" ,
clangformat : "13.0.0" ,
2022-03-02 06:01:08 +08:00
ninja : "1.10.2" , // https://github.com/ninja-build/ninja/releases
2022-04-16 15:49:19 +08:00
cmake : "3.23.1" , // https://github.com/Kitware/CMake/releases
2022-05-15 18:58:11 +08:00
gcovr : "5.1" , // https://pypi.org/project/gcovr/
conan : "1.48.0" , // https://github.com/conan-io/conan/releases
meson : "0.62.1" , // https://github.com/mesonbuild/meson/releases
2022-01-23 09:17:56 +08:00
python : "3.8.10" ,
2022-04-16 17:25:25 +08:00
kcov : "40" , // https://github.com/SimonKagstrom/kcov/releases
2022-05-15 18:58:11 +08:00
task : "3.12.1" , // https://github.com/go-task/task/releases
2022-05-06 11:21:32 +08:00
doxygen : process.platform === "darwin" ? "1.9.3" : "1.9.4" , // https://www.doxygen.nl/download.html // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=doxygen
2022-05-21 06:58:11 +08:00
gcc : "11" , // https://github.com/brechtsanders/winlibs_mingw/releases and // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=gcc
2021-09-16 19:36:35 +08:00
}
/** Get the default version if passed true or undefined, otherwise return the version itself */
2022-05-06 08:11:42 +08:00
export function getVersion ( name : string , version : string | undefined , osVersion : number [ ] | null = null ) {
2022-05-06 09:36:47 +08:00
if ( useDefault ( version , name ) ) {
2022-05-21 09:51:32 +08:00
// choose the default linux version based on ubuntu version
if ( process . platform === "linux" && osVersion !== null ) {
if ( [ "llvm" , "clangtidy" , "clangformat" ] . includes ( name ) ) {
2022-05-06 08:11:42 +08:00
if ( [ 20 , 18 , 16 ] . includes ( osVersion [ 0 ] ) && osVersion [ 1 ] === 4 ) {
2022-05-06 10:21:51 +08:00
return ` ${ osVersion [ 0 ] === 18 ? "13.0.1" : "13.0.0" } -ubuntu- ${ osVersion [ 0 ] } .0 ${ osVersion [ 1 ] } `
2022-05-03 14:32:01 +08:00
}
2022-05-21 10:16:58 +08:00
} else {
if ( osVersion [ 0 ] < 20 ) {
switch ( name ) {
case "gcovr" :
2022-05-21 10:28:05 +08:00
return osVersion [ 0 ] === 18 ? "5.0" : "" /* pip default */
2022-05-21 10:16:58 +08:00
case "meson" :
2022-05-21 10:28:05 +08:00
return osVersion [ 0 ] === 18 ? "0.61.4" : "" /* pip default */
2022-05-21 10:16:58 +08:00
case "doxygen" :
2022-05-21 10:35:03 +08:00
return "" /* apt default */
2022-05-21 10:16:58 +08:00
default : {
// nothing
}
2022-05-21 09:51:32 +08:00
}
}
}
2022-05-03 14:32:01 +08:00
}
2022-05-21 09:51:32 +08:00
2022-05-03 15:46:03 +08:00
// anything else
return DefaultVersions [ name ]
} else {
return version ? ? ""
2022-05-03 14:32:01 +08:00
}
}
2022-05-06 09:36:47 +08:00
function useDefault ( version : string | undefined , name : string ) {
return version === "true" || ( version === undefined && name in DefaultVersions )
}
export function syncVersions ( opts : Opts , tools : Inputs [ ] ) : boolean {
for ( let i = 0 ; i < tools . length ; i ++ ) {
// tools excluding i_tool
const otherTools = tools . slice ( 0 , i ) . concat ( tools . slice ( i + 1 ) )
const tool = tools [ i ]
if ( ! useDefault ( opts [ tool ] , tool ) ) {
for ( let i_other = 0 ; i_other < otherTools . length ; i_other ++ ) {
const otherTool = otherTools [ i_other ]
const useDefaultOtherTool = useDefault ( opts [ otherTool ] , otherTools [ i_other ] )
if ( useDefaultOtherTool ) {
// use the same version if the other tool was requested with the default
opts [ otherTool ] = opts [ tool ]
} else if ( opts [ tool ] !== opts [ otherTools [ i_other ] ] ) {
// error if different from the other given versions
return false
}
}
}
}
return true
}