Plugin file name extension adapted to the host OS convention (.so on linux, .dll on windows, .dylib on Darwin/MacOS)

This commit is contained in:
Celestino Amoroso 2026-04-23 19:06:11 +02:00
parent b6b09b2fb1
commit 02df7f1c1f
6 changed files with 63 additions and 3 deletions

View File

@ -76,6 +76,12 @@ func isFile(filePath string) bool {
func searchAmongPath(filename string, dirList []string) (filePath string) { func searchAmongPath(filename string, dirList []string) (filePath string) {
var err error var err error
suffix := SHAREDLIBRARY_EXTENSION
if strings.HasSuffix(filename, ".debug") {
suffix += ".debug"
}
for _, dir := range dirList { for _, dir := range dirList {
if dir, err = ExpandPath(dir); err != nil { if dir, err = ExpandPath(dir); err != nil {
continue continue
@ -84,6 +90,12 @@ func searchAmongPath(filename string, dirList []string) (filePath string) {
filePath = fullPath filePath = fullPath
break break
} }
subdir := strings.TrimSuffix(filename, suffix)
if fullPath := path.Join(dir, subdir, filename); isFile(fullPath) {
filePath = fullPath
break
}
} }
return return
} }

9
lib-ext-darwin.go Normal file
View File

@ -0,0 +1,9 @@
//go:build darwin
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.
// lib-ext-darwin.go
package expr
const SHAREDLIBRARY_EXTENSION = ".dylib"

9
lib-ext-linux.go Normal file
View File

@ -0,0 +1,9 @@
//go:build linux
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.
// lib-ext-linux.go
package expr
const SHAREDLIBRARY_EXTENSION = ".so"

9
lib-ext-windows.go Normal file
View File

@ -0,0 +1,9 @@
//go:build windows
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.
// lib-ext-windows.go
package expr
const SHAREDLIBRARY_EXTENSION = ".dll"

View File

@ -31,11 +31,11 @@ func pluginExists(name string) (exists bool) {
func makePluginName(name string) (decorated string) { func makePluginName(name string) (decorated string) {
var template string var template string
if execName, err := os.Executable(); err != nil || !strings.Contains(execName, "debug") { if execName, err := os.Executable(); err != nil || !strings.Contains(execName, "debug") {
template = "expr-%s-plugin.so" template = "expr-%s-plugin%s"
} else { } else {
template = "expr-%s-plugin.so.debug" template = "expr-%s-plugin%s.debug"
} }
decorated = fmt.Sprintf(template, name) decorated = fmt.Sprintf(template, name, SHAREDLIBRARY_EXTENSION)
return return
} }

View File

@ -5,6 +5,7 @@
package expr package expr
import ( import (
"os"
"testing" "testing"
) )
@ -36,3 +37,23 @@ func TestMakePluginName(t *testing.T) {
t.Errorf("makePluginName(%q) failed: Got: %q, Want: %q", name, got, want) t.Errorf("makePluginName(%q) failed: Got: %q, Want: %q", name, got, want)
} }
} }
func TestLoadPluginName(t *testing.T) {
name := "json"
// want := "expr-" + name + "-plugin.so"
want := 1
os.Setenv("PLUGINS", "${HOME}/go/src/git.portale-stac.it/go")
// os.Setenv("EXPR_PLUGIN_PATH", "${PLUGINS}/expr-json-plugin:${PLUGINS}/expr-csv-plugin")
os.Setenv("EXPR_PLUGIN_PATH", "${PLUGINS}")
got, err := importPluginFromSearchPath(name)
if err != nil {
t.Errorf("importPluginFromSearchPath(%q) failed: %v", name, err)
return
}
if got != want {
t.Errorf("importPluginFromSearchPath(%q) failed: Got: %q, Want: %q", name, got, want)
}
}