From 87a848c3bc56ceb933e5d4fa9a1561ac7cfe25e9 Mon Sep 17 00:00:00 2001 From: Mritunjay Date: Wed, 29 May 2024 01:33:04 +0530 Subject: [PATCH] adds ways to detect more piplelines in mconvert apkbuild Signed-off-by: Mritunjay --- pkg/convert/apkbuild/apkbuild.go | 70 ++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/pkg/convert/apkbuild/apkbuild.go b/pkg/convert/apkbuild/apkbuild.go index 5cfaa67cc..284002ed7 100644 --- a/pkg/convert/apkbuild/apkbuild.go +++ b/pkg/convert/apkbuild/apkbuild.go @@ -1,6 +1,7 @@ package apkbuild import ( + "bytes" "context" "crypto/sha256" "crypto/sha512" @@ -10,6 +11,7 @@ import ( "net/url" "os" "path/filepath" + "regexp" "strconv" "strings" "time" @@ -17,6 +19,7 @@ import ( rlhttp "chainguard.dev/melange/pkg/http" "chainguard.dev/melange/pkg/manifest" "github.com/chainguard-dev/clog" + "mvdan.cc/sh/v3/syntax" apkotypes "chainguard.dev/apko/pkg/build/types" "chainguard.dev/melange/pkg/config" @@ -328,6 +331,7 @@ func (c Context) buildFetchStep(ctx context.Context, converter ApkConvertor) err } // maps APKBUILD values to mconvert +// Question: Should not we return an error here for better error handling? func (c ApkConvertor) mapconvert() { c.GeneratedMelangeConfig.Package.Name = c.Apkbuild.Pkgname c.GeneratedMelangeConfig.Package.Description = c.Apkbuild.Pkgdesc @@ -345,33 +349,45 @@ func (c ApkConvertor) mapconvert() { c.GeneratedMelangeConfig.Package.Scriptlets.Trigger.Script = "FIXME" } - // if c.Apkbuild.Funcs["build"] != nil { - // // todo lets check the command and add the correct cmake | make | meson mconvert pipelines - // //build := c.Apkbuild.Funcs["build"] - //} - - // switch c.Apkbuild.BuilderType { - // - // case BuilderTypeCMake: - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "cmake/configure"}) - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "cmake/build"}) - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "cmake/install"}) - // - // case BuilderTypeMeson: - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "meson/configure"}) - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "meson/compile"}) - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "meson/install"}) - // - // case BuilderTypeMake: - c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "autoconf/configure"}) - c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "autoconf/make"}) - c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "autoconf/make-install"}) - c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "strip"}) - - //default: - // c.GeneratedMelangeConfig.Pipeline = append(c.GeneratedMelangeConfig.Pipeline, config.Pipeline{Uses: "# FIXME"}) - // - //} + if c.Apkbuild.Funcs["build"] != nil { + var output bytes.Buffer + printer := syntax.NewPrinter() + err := printer.Print(&output, c.Apkbuild.Funcs["build"]) + if err != nil { + fmt.Errorf("failed to print build function: %w", err) + } + + outputStr := output.String() + + // Define the regular expression to find options in the form of -