@@ -175,20 +175,31 @@ func chooseGABinary(candidates []string) (string, error) {
175175 }
176176}
177177
178- // Prefix returns the <PREFIX> directory, which is two levels above the lima share directory.
179- func Prefix () (string , error ) {
180- dir , err := Dir ()
181- if err != nil {
182- return "" , err
183- }
184- return filepath .Dir (filepath .Dir (dir )), nil
185- }
186-
187- // LibexecLima returns the <PREFIX>/libexec/lima directory.
188- func LibexecLima () (string , error ) {
189- prefix , err := Prefix ()
190- if err != nil {
191- return "" , err
178+ // LibexecLima returns the <PREFIX>/libexec/lima directories.
179+ // For Homebrew compatibility, it also checks <PREFIX>/lib/lima.
180+ func LibexecLima () ([]string , error ) {
181+ var candidates []string
182+ selfDirs := SelfDirs ()
183+ for _ , selfDir := range selfDirs {
184+ // selfDir: /usr/local/bin
185+ // prefix: /usr/local
186+ // candidate: /usr/local/libexec/lima
187+ prefix := filepath .Dir (selfDir )
188+ candidate := filepath .Join (prefix , "libexec" , "lima" )
189+ if ents , err := os .ReadDir (candidate ); err == nil && len (ents ) > 0 {
190+ candidates = append (candidates , candidate )
191+ }
192+ // selfDir: /opt/homebrew/bin
193+ // prefix: /opt/homebrew
194+ // candidate: /opt/homebrew/lib/lima
195+ //
196+ // Note that there is no /opt/homebrew/libexec directory,
197+ // as Homebrew preserves libexec for private use.
198+ // https://github.com/lima-vm/lima/issues/4295#issuecomment-3490680651
199+ candidate = filepath .Join (prefix , "lib" , "lima" )
200+ if ents , err := os .ReadDir (candidate ); err == nil && len (ents ) > 0 {
201+ candidates = append (candidates , candidate )
202+ }
192203 }
193- return filepath . Join ( prefix , "libexec" , "lima" ) , nil
204+ return candidates , nil
194205}
0 commit comments