diff --git a/bpm_utils/package_utils.go b/bpm_utils/package_utils.go index dc5d6bc..f59f965 100644 --- a/bpm_utils/package_utils.go +++ b/bpm_utils/package_utils.go @@ -8,7 +8,6 @@ import ( "fmt" "io" "io/fs" - "log" "os" "os/exec" "path" @@ -372,18 +371,39 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe } } } - if _, err := os.Stat(path.Join("source.sh")); os.IsNotExist(err) { + if _, err := os.Stat(path.Join(temp, "source.sh")); os.IsNotExist(err) { return errors.New("source.sh file could not be found in the temporary build directory") } if err != nil { return err } fmt.Println("Running source.sh file...") - cmd := exec.Command("/usr/bin/sh", "source.sh") + if err != nil { + return err + } + cmd := exec.Command("/bin/bash", "-e", "source.sh") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Dir = temp + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_NAME=%s", pkgInfo.Name)) + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_DESC=%s", pkgInfo.Description)) + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_VERSION=%s", pkgInfo.Version)) + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_URL=%s", pkgInfo.Url)) + depends := make([]string, len(pkgInfo.Depends)) + copy(depends, pkgInfo.Depends) + for i := 0; i < len(depends); i++ { + depends[i] = fmt.Sprintf("\"%s\"", depends[i]) + } + makeDepends := make([]string, len(pkgInfo.MakeDepends)) + copy(makeDepends, pkgInfo.MakeDepends) + for i := 0; i < len(makeDepends); i++ { + makeDepends[i] = fmt.Sprintf("\"%s\"", makeDepends[i]) + } + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_DEPENDS=(%s)", strings.Join(depends, " "))) + cmd.Env = append(cmd.Env, fmt.Sprintf("BPM_PKG_MAKE_DEPENDS=(%s)", strings.Join(makeDepends, " "))) + cmd.Env = append(cmd.Env, "BPM_PKG_TYPE=source") err = cmd.Run() if err != nil { return err @@ -479,7 +499,7 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe return err } sed := fmt.Sprintf("s/%s/files/", strings.Replace(strings.TrimPrefix(path.Join(temp, "/output/"), "/"), "/", `\/`, -1)) - cmd := exec.Command("/usr/bin/tar", "-czvf", compiledInfo.Name+".bpm", "pkg.info", path.Join(temp, "/output/"), "--transform", sed) + cmd := exec.Command("/usr/bin/tar", "-czvf", compiledInfo.Name+"-"+compiledInfo.Version+".bpm", "pkg.info", path.Join(temp, "/output/"), "--transform", sed) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr @@ -571,7 +591,11 @@ func InstallPackage(filename, installDir string, force, binaryPkgFromSrc, keepTe if len(filesDiff) != 0 { fmt.Println("Removing obsolete files") for _, f := range filesDiff { - fmt.Println("Removing: " + path.Join(installedDir, f)) + err := os.RemoveAll(path.Join(installDir, f)) + if err != nil { + return err + } + fmt.Println("Removing: " + path.Join(installDir, f)) } } return nil @@ -828,44 +852,3 @@ func RemovePackage(pkg, rootDir string) error { fmt.Println("Removing: " + pkgDir) return nil } - -func FixInstalledPackages(rootDir string) (map[string]error, int) { - var errs map[string]error - totalFixed := 0 - pkgs, err := GetInstalledPackages(rootDir) - if err != nil { - log.Fatalf("Could not check if installed package info files are formatted correctly\nError: %s", err.Error()) - } - for _, pkg := range pkgs { - fixed := false - pkgInfo := GetPackageInfo(pkg, "/", true) - if pkgInfo.Name == "" { - errs[pkg] = errors.New("this package contains no name") - continue - } - if pkgInfo.Description == "" { - pkgInfo.Description = "Default Description" - fixed = true - } - if pkgInfo.Version == "" { - errs[pkg] = errors.New("this package contains no version") - continue - } - if pkgInfo.Arch == "" { - pkgInfo.Arch = GetArch() - fixed = true - } - if pkgInfo.Type == "" { - errs[pkg] = errors.New("this package contains no type") - continue - } - if fixed { - totalFixed++ - } - err := setPackageInfo(pkg, CreateInfoFile(*pkgInfo), rootDir) - if err != nil { - log.Fatalf("Could not check if installed package info files are formatted correctly\nError: %s", err.Error()) - } - } - return errs, totalFixed -} diff --git a/main.go b/main.go index 60fb80d..5508e82 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,7 @@ import ( /* A simple-to-use package manager */ /* ---------------------------------- */ -var bpmVer = "0.1.2" +var bpmVer = "0.1.3" var subcommand = "help" var subcommandArgs []string @@ -43,7 +43,6 @@ const ( list install remove - cleanup ) func getCommandType() commandType { @@ -58,12 +57,9 @@ func getCommandType() commandType { return install case "remove": return remove - case "cleanup": - return cleanup default: return help } - } func resolveCommand() { @@ -335,44 +331,3 @@ func resolveFlags() { } } } - -/*func resolveFlags() ([]string, int) { - flags := getArgs()[1:] - var ret []string - for _, flag := range flags { - if strings.HasPrefix(flag, "-") { - f := strings.TrimPrefix(flag, "-") - switch getCommandType() { - default: - log.Fatalf("Invalid flag " + flag) - case list: - v := [...]string{"l", "n"} - if !slices.Contains(v[:], f) { - log.Fatalf("Invalid flag " + flag) - } - ret = append(ret, f) - case install: - v := [...]string{"y", "f", "b", "k"} - if !slices.Contains(v[:], f) { - log.Fatalf("Invalid flag " + flag) - } - ret = append(ret, f) - case remove: - v := [...]string{"y", "r"} - if !slices.Contains(v[:], f) { - log.Fatalf("Invalid flag " + flag) - } - ret = append(ret, f) - case info: - v := [...]string{"r"} - if !slices.Contains(v[:], f) { - log.Fatalf("Invalid flag " + flag) - } - ret = append(ret, f) - } - } else { - break - } - } - return ret, len(ret) -}*/ diff --git a/test_packages/x86_64/bpm/bpm.bpm b/test_packages/x86_64/bpm/bpm.bpm index 3c8f9b6..c8b07ed 100644 Binary files a/test_packages/x86_64/bpm/bpm.bpm and b/test_packages/x86_64/bpm/bpm.bpm differ diff --git a/test_packages/x86_64/bpm/files/usr/bin/bpm b/test_packages/x86_64/bpm/files/usr/bin/bpm index a96d54f..9afba06 100755 Binary files a/test_packages/x86_64/bpm/files/usr/bin/bpm and b/test_packages/x86_64/bpm/files/usr/bin/bpm differ diff --git a/test_packages/x86_64/bpm/pkg.info b/test_packages/x86_64/bpm/pkg.info index 3e7ef6f..7757fb1 100644 --- a/test_packages/x86_64/bpm/pkg.info +++ b/test_packages/x86_64/bpm/pkg.info @@ -1,6 +1,6 @@ name: bpm description: The Bubble Package Manager -version: 0.1.2 +version: 0.1.3 url: https://gitlab.com/bubble-package-manager/bpm/ license: GPL3 architecture: x86_64