From 96e418e63bba6f6a3eb5d3b3a51bc5d9cedcd567 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 16 Jul 2024 07:32:18 +0800 Subject: [PATCH] xtool/llvm/install_name_tool: Exec --- xtool/clang/clang.go | 1 + xtool/llvm/install_name_tool/rpath.go | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/xtool/clang/clang.go b/xtool/clang/clang.go index d55b7f4a..cda12809 100644 --- a/xtool/clang/clang.go +++ b/xtool/clang/clang.go @@ -40,6 +40,7 @@ func New(app string) *Cmd { return &Cmd{app, os.Stdout, os.Stderr} } +// Exec executes a clang command. func (p *Cmd) Exec(args ...string) error { cmd := exec.Command(p.app, args...) cmd.Stdout = p.Stdout diff --git a/xtool/llvm/install_name_tool/rpath.go b/xtool/llvm/install_name_tool/rpath.go index 744d196c..90f8f103 100644 --- a/xtool/llvm/install_name_tool/rpath.go +++ b/xtool/llvm/install_name_tool/rpath.go @@ -38,6 +38,14 @@ func New(app string) *Cmd { return &Cmd{app: app} } +// Exec executes a install_name_tool command. +func (p *Cmd) Exec(args ...string) error { + cmd := exec.Command(p.app, args...) + cmd.Stdout = p.Stdout + cmd.Stderr = p.Stderr + return cmd.Run() +} + // Change represents a dependent shared library install name change. type Change struct { Old string @@ -51,17 +59,15 @@ func (p *Cmd) Change(target string, chgs ...Change) error { args = append(args, "-change", chg.Old, chg.New) } args = append(args, target) - cmd := exec.Command(p.app, args...) - cmd.Stdout = p.Stdout - cmd.Stderr = p.Stderr - return cmd.Run() + return p.Exec(args...) } // ChangeToRpath changes dependent shared library install name to @rpath. func (p *Cmd) ChangeToRpath(target string, dylibDeps ...string) error { - chgs := make([]Change, len(dylibDeps)) - for i, dep := range dylibDeps { - chgs[i] = Change{Old: dep, New: "@rpath/" + filepath.Base(dep)} + args := make([]string, len(dylibDeps)*3+1) + for _, dep := range dylibDeps { + args = append(args, "-change", dep, "@rpath/"+filepath.Base(dep)) } - return p.Change(target, chgs...) + args = append(args, target) + return p.Exec(args...) }