1
1
import execa from "execa"
2
2
import { join } from "path"
3
- import untildify from "untildify"
4
3
import which from "which"
5
4
import { setupCmake } from "../cmake/cmake"
6
5
import { getVersion } from "../default_versions"
@@ -15,6 +14,8 @@ import { setupDnfPack } from "../utils/setup/setupDnfPack"
15
14
import { isUbuntu } from "../utils/env/isUbuntu"
16
15
import { addVPrefix , removeVPrefix } from "../utils/setup/version"
17
16
import { info } from "../utils/io/io"
17
+ import { untildify_user } from "../utils/path/untildify"
18
+ import { setupNinja } from "../ninja/ninja"
18
19
19
20
function getDownloadKcovPackageInfo ( version : string ) : PackageInfo {
20
21
return {
@@ -27,22 +28,21 @@ function getDownloadKcovPackageInfo(version: string): PackageInfo {
27
28
}
28
29
29
30
function getBuildKcovPackageInfo ( version : string ) : PackageInfo {
30
- const version_number = removeVPrefix ( version )
31
31
return {
32
32
url : `https://github.com/SimonKagstrom/kcov/archive/refs/tags/${ version } .tar.gz` ,
33
- extractedFolderName : `kcov- ${ version_number } ` ,
34
- binRelativeDir : "build/" ,
33
+ extractedFolderName : "" ,
34
+ binRelativeDir : "build/src " ,
35
35
binFileName : addBinExtension ( "kcov" ) ,
36
36
extractFunction : buildKcov ,
37
37
}
38
38
}
39
39
40
40
async function buildKcov ( file : string , dest : string ) {
41
41
const out = await extractTarByExe ( file , dest , [ "--strip-components=1" ] )
42
+
42
43
// build after extraction using CMake
43
- if ( which . sync ( "cmake" , { nothrow : true } ) === null ) {
44
- await setupCmake ( getVersion ( "cmake" , undefined ) , join ( untildify ( "" ) , "cmake" ) , "" )
45
- }
44
+ let cmake = await getCmake ( )
45
+
46
46
if ( process . platform === "linux" ) {
47
47
if ( isArch ( ) ) {
48
48
setupPacmanPack ( "libdwarf" )
@@ -55,11 +55,28 @@ async function buildKcov(file: string, dest: string) {
55
55
setupAptPack ( "libcurl4-openssl-dev" )
56
56
}
57
57
}
58
- await execa ( "cmake" , [ "-S" , "./" , "-B" , "./build" ] , { cwd : out , stdio : "inherit" } )
59
- await execa ( "cmake" , [ "--build" , "./build" , "--config" , "Release" ] , { cwd : out , stdio : "inherit" } )
60
- // execSudo("cmake", ["--install", "./build"], out)
58
+ const buildDir = join ( out , "build" )
59
+ await execa ( cmake , [ "-S" , out , "-B" , buildDir , "-DCMAKE_BUILD_TYPE=Release" , "-G" , "Ninja" ] , {
60
+ cwd : out ,
61
+ stdio : "inherit" ,
62
+ } )
63
+ await execa ( cmake , [ "--build" , buildDir , "--config" , "Release" ] , { cwd : out , stdio : "inherit" } )
64
+ // execSudo(cmake, ["--install", buildDir], out)
61
65
// return "user/local/bin" // the cmake install prefix
62
- return join ( out , "build" )
66
+ return out
67
+ }
68
+
69
+ async function getCmake ( ) {
70
+ let cmake = which . sync ( "cmake" , { nothrow : true } )
71
+ if ( cmake === null ) {
72
+ const { binDir } = await setupCmake ( getVersion ( "cmake" , undefined ) , join ( untildify_user ( "" ) , "cmake" ) , "" )
73
+ cmake = join ( binDir , "cmake" )
74
+ }
75
+ let ninja = which . sync ( "ninja" , { nothrow : true } )
76
+ if ( ninja === null ) {
77
+ await setupNinja ( getVersion ( "ninja" , undefined ) , join ( untildify_user ( "" ) , "ninja" ) , "" )
78
+ }
79
+ return cmake
63
80
}
64
81
65
82
export async function setupKcov ( versionGiven : string , setupDir : string , arch : string ) {
0 commit comments