Skip to content

Commit f1d033e

Browse files
committed
Add '-debugbuild' option to 'install' command
1 parent 1b1ff78 commit f1d033e

File tree

5 files changed

+42
-21
lines changed

5 files changed

+42
-21
lines changed

main.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const (
2222
flagNameDebug = "debug"
2323
flagSkipUpgrade = "skip-upgrade"
2424
flagUpdateDB = "update-db"
25+
flagDebugBuild = "debugbuild"
2526
)
2627

2728
func setDebug(value bool) {
@@ -234,7 +235,7 @@ func installPackages(c *cli.Context) error {
234235
site.CleanPackage(pkg)
235236
}
236237

237-
err = site.InstallPackage(pkg)
238+
err = site.InstallPackage(pkg, c.Bool(flagDebugBuild))
238239
if err != nil {
239240
return err
240241
}
@@ -376,6 +377,10 @@ RZ_PM_SITE:
376377
Name: "file",
377378
Usage: "install a local file(s)",
378379
},
380+
&cli.BoolFlag{
381+
Name: flagDebugBuild,
382+
Usage: "Build the package in debug mode",
383+
},
379384
},
380385
},
381386
{

pkg/package.go

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ type Package interface {
5050
Description() string
5151
Source() RizinPackageSource
5252
Download(baseArtifactsPath string) error
53-
Build(site Site) error
54-
Install(site Site) ([]string, error)
53+
Build(site Site, debugBuild bool) error
54+
Install(site Site, debugBuild bool) ([]string, error)
5555
Uninstall(site Site) error
5656
}
5757

@@ -233,7 +233,7 @@ func (rp RizinPackage) sourcePath(baseArtifactsPath string) string {
233233
return filepath.Join(rp.artifactsPath(baseArtifactsPath), rp.PackageSource.Directory)
234234
}
235235

236-
func (rp RizinPackage) buildMeson(site Site) error {
236+
func (rp RizinPackage) buildMeson(site Site, debugBuild bool) error {
237237
srcPath := rp.sourcePath(site.GetArtifactsDir())
238238
args := []string{"setup"}
239239
args = append(args, rp.PackageSource.BuildArguments...)
@@ -244,6 +244,13 @@ func (rp RizinPackage) buildMeson(site Site) error {
244244
if site.GetCMakeDir() != "" {
245245
args = append(args, fmt.Sprintf("--cmake-prefix-path=%s", site.GetCMakeDir()))
246246
}
247+
if debugBuild {
248+
log.Println("Building in debug mode")
249+
args = append(args, "--buildtype=debug")
250+
} else {
251+
log.Println("Building in optimized debug mode")
252+
args = append(args, "--buildtype=debugoptimized")
253+
}
247254
args = append(args, "build")
248255
cmd := exec.Command("meson", args...)
249256
cmd.Dir = srcPath
@@ -263,14 +270,21 @@ func (rp RizinPackage) buildMeson(site Site) error {
263270
return nil
264271
}
265272

266-
func (rp RizinPackage) buildCMake(site Site) error {
273+
func (rp RizinPackage) buildCMake(site Site, debugBuild bool) error {
267274
srcPath := rp.sourcePath(site.GetArtifactsDir())
268275
args := []string{}
269276
args = append(args, rp.PackageSource.BuildArguments...)
270277
args = append(args, fmt.Sprintf("-DCMAKE_INSTALL_PREFIX=%s/.local", xdg.Home))
271278
if site.GetCMakeDir() != "" {
272279
args = append(args, fmt.Sprintf("-DCMAKE_PREFIX_PATH=%s", site.GetCMakeDir()))
273280
}
281+
if debugBuild {
282+
log.Println("Building in debug mode")
283+
args = append(args, "-DCMAKE_BUILD_TYPE=Debug")
284+
} else {
285+
log.Println("Building in optimized debug mode")
286+
args = append(args, "-DCMAKE_BUILD_TYPE=RelWithDebInfo")
287+
}
274288
args = append(args, "-B")
275289
args = append(args, "build")
276290
cmd := exec.Command("cmake", args...)
@@ -368,7 +382,7 @@ func buildErrorMsg(msg string) string {
368382
}
369383

370384
// Build a package if a source is provided
371-
func (rp RizinPackage) Build(site Site) error {
385+
func (rp RizinPackage) Build(site Site, debugBuild bool) error {
372386
if site.GetPkgConfigDir() == "" && site.GetCMakeDir() == "" {
373387
return fmt.Errorf("make sure rizin development files are installed (e.g. librizin-dev, rizin-devel, etc.)")
374388
}
@@ -397,7 +411,7 @@ func (rp RizinPackage) Build(site Site) error {
397411
}
398412
}
399413

400-
return rp.buildMeson(site)
414+
return rp.buildMeson(site, debugBuild)
401415
} else if rp.PackageSource.BuildSystem == "cmake" {
402416
_, err := exec.LookPath("cmake")
403417
if err != nil {
@@ -409,16 +423,16 @@ func (rp RizinPackage) Build(site Site) error {
409423
return fmt.Errorf(buildErrorMsg("make sure `pkg-config` is installed and in PATH"))
410424
}
411425

412-
return rp.buildCMake(site)
426+
return rp.buildCMake(site, debugBuild)
413427
} else {
414428
log.Printf("BuildSystem %s is not supported yet.", rp.PackageSource.BuildSystem)
415429
return fmt.Errorf("unsupported build system")
416430
}
417431
}
418432

419433
// Install a package after building it
420-
func (rp RizinPackage) Install(site Site) ([]string, error) {
421-
err := rp.Build(site)
434+
func (rp RizinPackage) Install(site Site, debugBuild bool) ([]string, error) {
435+
err := rp.Build(site, debugBuild)
422436
if err != nil {
423437
return []string{}, err
424438
}

pkg/package_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (s FakeSite) GetPkgConfigDir() string {
100100
func (s FakeSite) GetCMakeDir() string {
101101
return ""
102102
}
103-
func (s FakeSite) InstallPackage(pkg Package) error {
103+
func (s FakeSite) InstallPackage(pkg Package, debugBuild bool) error {
104104
return nil
105105
}
106106
func (s FakeSite) UninstallPackage(pkg Package) error {
@@ -140,7 +140,7 @@ func TestInstallSimplePackage(t *testing.T) {
140140
err = p.Download(tmpPath)
141141
require.NoError(t, err, "package should be downloaded")
142142

143-
installed_files, err := p.Install(FakeSite{ArtifactsDir: tmpPath})
143+
installed_files, err := p.Install(FakeSite{ArtifactsDir: tmpPath}, false)
144144
assert.NoError(t, err, "The plugin should be built and installed without errors")
145145
files, err := ioutil.ReadDir(pluginsPath)
146146
require.NoError(t, err, "pluginsPath should be read")
@@ -181,7 +181,7 @@ func TestUninstallSimplePackage(t *testing.T) {
181181
require.NoError(t, err, "package should be downloaded")
182182

183183
s := FakeSite{ArtifactsDir: tmpPath}
184-
_, err = p.Install(s)
184+
_, err = p.Install(s, false)
185185
assert.NoError(t, err, "The plugin should be built and installed without errors")
186186

187187
err = p.Uninstall(s)

pkg/site.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ type Site interface {
4949
GetArtifactsDir() string
5050
GetPkgConfigDir() string
5151
GetCMakeDir() string
52-
InstallPackage(pkg Package) error
52+
InstallPackage(pkg Package, debugBuild bool) error
5353
UninstallPackage(pkg Package) error
5454
CleanPackage(pkg Package) error
5555
Remove() error
@@ -137,8 +137,10 @@ func (rp InstalledPackage) Source() RizinPackageSource { return RizinPackageSour
137137
func (rp InstalledPackage) Download(baseArtifactsPath string) error {
138138
return fmt.Errorf("cannot be called")
139139
}
140-
func (rp InstalledPackage) Build(site Site) error { return fmt.Errorf("cannot be called") }
141-
func (rp InstalledPackage) Install(site Site) ([]string, error) {
140+
func (rp InstalledPackage) Build(site Site, debugBuild bool) error {
141+
return fmt.Errorf("cannot be called")
142+
}
143+
func (rp InstalledPackage) Install(site Site, debugBuild bool) ([]string, error) {
142144
return nil, fmt.Errorf("cannot be called")
143145
}
144146
func (rp InstalledPackage) Uninstall(site Site) error { return fmt.Errorf("cannot be called") }
@@ -204,12 +206,12 @@ func (s *RizinSite) GetCMakeDir() string {
204206
return s.CMakePath
205207
}
206208

207-
func (s *RizinSite) InstallPackage(pkg Package) error {
209+
func (s *RizinSite) InstallPackage(pkg Package, debugBuild bool) error {
208210
if s.ContainsInstalledPackage(pkg.Name()) {
209211
return fmt.Errorf("package %s already installed", pkg.Name())
210212
}
211213

212-
files, err := pkg.Install(s)
214+
files, err := pkg.Install(s, debugBuild)
213215
if err != nil {
214216
return err
215217
}

pkg/site_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@ func (fp FakePackage) Source() RizinPackageSource {
162162
func (fp FakePackage) Download(baseArtifactsPath string) error {
163163
return nil
164164
}
165-
func (fp FakePackage) Build(site Site) error {
165+
func (fp FakePackage) Build(site Site, debugBuild bool) error {
166166
return nil
167167
}
168-
func (fp FakePackage) Install(site Site) ([]string, error) {
168+
func (fp FakePackage) Install(site Site, debugBuild bool) ([]string, error) {
169169
return nil, nil
170170
}
171171
func (fp FakePackage) Uninstall(site Site) error {
@@ -181,7 +181,7 @@ func TestListInstalledPackages(t *testing.T) {
181181

182182
pkg := FakePackage{myName: "jsdec"}
183183

184-
err = site.InstallPackage(pkg)
184+
err = site.InstallPackage(pkg, false)
185185
require.NoError(t, err)
186186

187187
packages, err := site.ListAvailablePackages()

0 commit comments

Comments
 (0)