diff --git a/internal/lua/luafunctions.go b/internal/lua/luafunctions.go index 879210b..11ed7cb 100644 --- a/internal/lua/luafunctions.go +++ b/internal/lua/luafunctions.go @@ -147,4 +147,28 @@ func LChmod(L *lua.LState) int { return 2 } +type Flag struct { + Name string + Path string + FlagType string +} + +type Flags struct { + Flags []Flag +} + +func (f Flags) LSetFlag(L *lua.LState) int { + flagtype := L.CheckString(1) + name := L.CheckString(2) + flagPath := L.CheckString(3) + + f.Flags = append(f.Flags, Flag{ + Name: name, + Path: flagPath, + FlagType: flagtype, + }) + + return 0 +} + func llogger() *log.Logger { return log.New(os.Stderr, "script error: ", 0) } diff --git a/pkg/packet.lua.d/main.go b/pkg/packet.lua.d/main.go index 3a37743..f6293da 100644 --- a/pkg/packet.lua.d/main.go +++ b/pkg/packet.lua.d/main.go @@ -35,6 +35,8 @@ type PacketLua struct { GlobalSources *[]Source GlobalDependencies *PkgDependencies + Flags *[]lua_utils.Flag + Build *lua.LFunction Install *lua.LFunction PreRemove *lua.LFunction @@ -81,7 +83,7 @@ type GETSpecs struct { var ErrCantFindPacketDotLua = errors.New("can't find Packet.lua in .tar.zst file") var ErrFileDontReturnTable = errors.New("invalid Packet.lua format: the file do not return a table") var ErrCannotFindPackageTable = errors.New("invalid Packet.lua format: can't find package table") -var ErrInstallFunctionDoesNotExist = errors.New("can not find instal()") +var ErrInstallFunctionDoesNotExist = errors.New("can not find install()") var ErrSha256Sum = errors.New("false checksum") // ReadPacket read a Packet.lua and alredy set global vars @@ -103,6 +105,8 @@ func ReadPacket(f []byte, cfg *Config) (PacketLua, error) { L.SetGlobal("CURRENT_ARCH_NORMALIZED", lua.LString(normalizeArch(runtime.GOARCH))) L.SetGlobal("CURRENT_PLATAFORM", lua.LString(runtime.GOOS)) + var newFlags lua_utils.Flags + L.SetGlobal("setflags", L.NewFunction(newFlags.LSetFlag)) L.SetGlobal("pathjoin", L.NewFunction(lua_utils.Ljoin)) if err := L.DoString(string(f)); err != nil { @@ -143,6 +147,10 @@ func ReadPacket(f []byte, cfg *Config) (PacketLua, error) { PreRemove: getFunctionFromTable(table, "pre_remove"), } + if len(newFlags.Flags) > 0 { + packetLua.Flags = &newFlags.Flags + } + packetLua.LuaState = L if packetLua.Install == nil { return PacketLua{}, ErrInstallFunctionDoesNotExist @@ -205,7 +213,7 @@ func GetSource(url, method string, info any, tryAttempts int) (any, error) { client := http.Client{Timeout: 5 * time.Minute} var resp *http.Response - for i := 0; i < tryAttempts; i++ { + for range tryAttempts { resp, err = client.Do(req) if err != nil { return nil, err @@ -251,7 +259,7 @@ func GetSource(url, method string, info any, tryAttempts int) (any, error) { client := http.Client{Timeout: 5 * time.Minute} var resp *http.Response - for i := 0; i < tryAttempts; i++ { + for range tryAttempts { resp, err = client.Do(req) if err != nil { return nil, err @@ -328,6 +336,8 @@ func (pkg PacketLua) ExecuteBuild(cfg *Config) error { L.SetGlobal("SOURCESDIR", lua.LString(cfg.SourcesDir)) L.SetGlobal("PACKETDIR", lua.LString(cfg.PacketDir)) + var newFlags lua_utils.Flags + L.SetGlobal("setflags", L.NewFunction(newFlags.LSetFlag)) L.SetGlobal("pathjoin", L.NewFunction(lua_utils.Ljoin)) os.Chdir(cfg.RootDir) @@ -335,7 +345,14 @@ func (pkg PacketLua) ExecuteBuild(cfg *Config) error { os.Setenv("PATH", os.Getenv("PATH")+":"+cfg.BinDir) L.Push(pkg.Build) - return L.PCall(0, 0, nil) + L.Call(0, 0) + + if len(newFlags.Flags) > 0 && pkg.Flags != nil { + *pkg.Flags = append(*pkg.Flags, newFlags.Flags...) + } else if len(newFlags.Flags) > 0 { + *pkg.Flags = newFlags.Flags + } + return nil } func (pkg PacketLua) ExecuteInstall(cfg *Config) error { @@ -362,13 +379,21 @@ func (pkg PacketLua) ExecuteInstall(cfg *Config) error { L.SetGlobal("SOURCESDIR", lua.LString(cfg.SourcesDir)) L.SetGlobal("PACKETDIR", lua.LString(cfg.PacketDir)) + var newFlags lua_utils.Flags + L.SetGlobal("setflags", L.NewFunction(newFlags.LSetFlag)) L.SetGlobal("pathjoin", L.NewFunction(lua_utils.Ljoin)) os.Chdir(cfg.RootDir) os.Setenv("PATH", os.Getenv("PATH")+":"+cfg.BinDir) + L.Push(pkg.Install) L.Call(0, 0) + if len(newFlags.Flags) > 0 && pkg.Flags != nil { + *pkg.Flags = append(*pkg.Flags, newFlags.Flags...) + } else if len(newFlags.Flags) > 0 { + *pkg.Flags = newFlags.Flags + } return nil }