diff --git a/.gitignore b/.gitignore
index 1b36d8f..712d01c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,4 @@
/packages_temp.json
/APKINDEX
/APPINDEX
-/browser-amd64-nightly-linux.tar.gz
-/browser-amd64-nightly-windows.tar.gz
\ No newline at end of file
+/browser-amd64-nightly-linux.tar.gz
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index a92ad4d..0000000
--- a/README.md
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
- Spitfire Builder
-
-
-
-This is a "simple" script for building the Spitfire Browser based on Mozilla Firefox source code.
-
-
-## Dependencies
-
-- Mercurial (hg)
-- Git
-- Golang (tested with v1.21)
-- Python 3.11 and pip3
-
-# Example usage:
-
-## Build:
-
-```sh
-go run . -a
-```
-
-## Upload:
-
-```sh
-go run . --upload -c --upload-path=./mozilla-central/obj-x86_64-pc-linux-gnu/dist/bin
-```
-
-## Build and upload:
-
-```sh
-go run . --upload -c --upload-path=./mozilla-central/obj-x86_64-pc-linux-gnu/dist/bin -a
-```
-
-## Display all flags:
-
-```sh
-go run . -h
-```
-
-### Config file for uploading example:
-
-*sourceforge_config.json*
-
-```json
-{
- "SFKeyPath": "~/.ssh/id_rsa.pub",
- "SFUser": "internet-addict",
- "SFHost": "web.sourceforge.net",
- "SFProject": "spitfire-browser"
-}
-```
-
-## APPINDEX example:
-
-```
-C:905cd0cc2dea9e400e1ecd099462b6b19188a9f1
-P:Spitfire
-R:nightly
-V:2024.09.08
-A:amd64
-S:788506622
-I:3324483350
-T:Spitfire build
-U:https://spitfirebrowser.com/
-L:AGPL-3.0
-o:browser
-m:Internet Addict
-t:1725830641
-c:905cd0cc2dea9e400e1ecd099462b6b19188a9f1
-D:
-p:linux
-q:
-Z:905cd0cc2dea9e400e1ecd099462b6b19188a9f1
-```
-
-## Repositary structure
-
-```
-spitfire-browser/
-├── browser/
-│ ├── amd64/
-│ │ ├── stable/
-│ │ │ ├── latest/deb.tar.gz
-│ │ │ ├── x.x.x/deb.tar.gz
-│ │ ├── nightly/
-│ │ ├── latest/deb.tar.gz
-│ │ ├── yyyy-mm-dd/deb.tar.gz
-│ ├── arm/
-│ │ ├── stable/
-│ │ │ ├── latest/
-│ │ │ ├── x.x.x/
-│ │ ├── nightly/
-│ │ ├── latest/
-│ │ ├── yyyy-mm-dd/
-├── cli-package-manager/
-│ ├── stable/
-│ │ ├── latest/
-│ │ ├── x.x.x/
-│ ├── nightly/
-│ ├── latest/
-│ ├── yyyy-mm-dd/
-├── gui-installer/
-│ ├── stable/
-│ │ ├── latest/
-│ │ ├── x.x.x/
-│ ├── nightly/
-│ ├── latest/
-│ ├── yyyy-mm-dd/
-├── gui-package-manager/
-│ ├── stable/
-│ │ ├── latest/
-│ │ ├── x.x.x/
-│ ├── nightly/
-│ ├── latest/
-│ ├── yyyy-mm-dd/
-├── addons/
-│ ├── themes/
-│ │ ├── stable/
-│ │ │ ├── latest/
-│ │ │ ├── x.x.x/
-│ │ ├── nightly/
-│ │ ├── latest/
-│ │ ├── yyyy-mm-dd/
-│ ├── custom-configs/
-│ │ ├── stable/
-│ │ │ ├── latest/
-│ │ │ ├── x.x.x/
-│ │ ├── nightly/
-│ │ ├── latest/
-│ │ ├── yyyy-mm-dd/
-│ ├── search-engines/
-│ ├── stable/
-│ │ ├── latest/
-│ │ ├── x.x.x/
-│ ├── nightly/
-│ ├── latest/
-│ ├── yyyy-mm-dd/
-├── APPINDEX
-```
\ No newline at end of file
diff --git a/main.go b/main.go
index 5eefa46..b829dbd 100644
--- a/main.go
+++ b/main.go
@@ -1,254 +1,231 @@
package main
import (
- "flag"
- "fmt"
- "log"
- "os"
- "path/filepath"
- "runtime" // for detecting system architecture and platform
- "spitfire/spitfire"
- "time"
- //"errors"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "path/filepath"
+ "runtime" // for detecting system architecture and platform
+ "time"
+ "spitfire/spitfire"
+ //"errors"
)
var (
- // Define all flags as package-level variables
- all bool
- buildFlag bool
- clean bool
- update bool
- patches bool
- run bool
- compress bool
- buildPath string
- target string
- version string
- component string
- arch string
- release string
- platform string
- upload bool
- uploadPath string
- sourceRepo = "https://hg.mozilla.org/mozilla-central"
- patchesRepo = "https://weforgecode.xyz/Spitfire/Browser.git"
- url = "https://spitfirebrowser.com/"
- licence = "AGPL-3.0"
- name = "Spitfire"
- maintainer = "Internet Addict"
- initialDir string
+ // Define all flags as package-level variables
+ all bool
+ buildFlag bool
+ clean bool
+ update bool
+ patches bool
+ run bool
+ compress bool
+ buildPath string
+ target string
+ version string
+ component string
+ arch string
+ release string
+ platform string
+ upload bool
+ uploadPath string
+ sourceRepo = "https://hg.mozilla.org/mozilla-central"
+ patchesRepo = "https://weforgecode.xyz/Spitfire/Browser.git"
+ url = "https://spitfirebrowser.com/"
+ licence = "AGPL-3.0"
+ name = "Spitfire"
+ maintainer = "Internet Addict"
+ initialDir string
)
func init() {
- flag.StringVar(&buildPath, "p", "", "Path to the build directory")
- flag.StringVar(&target, "t", "", "Target location format: component-arch-release-platform")
- flag.BoolVar(&compress, "c", false, "Compress the build directory into a tar.gz file before uploading")
- flag.StringVar(&version, "v", "", "Specify version for the package. For nightly, use current date if not specified.")
- flag.StringVar(&component, "component", "browser", "Component name (default: browser)")
- flag.StringVar(&arch, "arch", runtime.GOARCH, "Architecture (default: system architecture)")
- flag.StringVar(&release, "release", "nightly", "Release type (default: nightly)")
- flag.StringVar(&platform, "platform", runtime.GOOS, "Platform (default: system platform)")
- flag.BoolVar(&all, "a", false, "Perform all steps (build, clean, update)")
- flag.BoolVar(&buildFlag, "b", false, "Build Spitfire")
- flag.BoolVar(&clean, "clean", false, "Clean build")
- flag.BoolVar(&update, "u", false, "Update Mozilla repository")
- flag.BoolVar(&patches, "patches", false, "Update patches")
- flag.BoolVar(&run, "r", false, "Run the project after build")
- flag.BoolVar(&upload, "upload", false, "Upload the compressed build file to SourceForge")
- flag.StringVar(&uploadPath, "upload-path", "", "Path to the file to upload if no build present")
- flag.Bool("h", false, "Display help message")
+ flag.StringVar(&buildPath, "p", "", "Path to the build directory")
+ flag.StringVar(&target, "t", "", "Target location format: component-arch-release-platform")
+ flag.BoolVar(&compress, "c", false, "Compress the build directory into a tar.gz file before uploading")
+ flag.StringVar(&version, "v", "", "Specify version for the package. For nightly, use current date if not specified.")
+ flag.StringVar(&component, "component", "browser", "Component name (default: browser)")
+ flag.StringVar(&arch, "arch", runtime.GOARCH, "Architecture (default: system architecture)")
+ flag.StringVar(&release, "release", "nightly", "Release type (default: nightly)")
+ flag.StringVar(&platform, "platform", runtime.GOOS, "Platform (default: system platform)")
+ flag.BoolVar(&all, "a", false, "Perform all steps (build, clean, update)")
+ flag.BoolVar(&buildFlag, "b", false, "Build Spitfire")
+ flag.BoolVar(&clean, "clean", false, "Clean build")
+ flag.BoolVar(&update, "u", false, "Update Mozilla repository")
+ flag.BoolVar(&patches, "patches", false, "Update patches")
+ flag.BoolVar(&run, "r", false, "Run the project after build")
+ flag.BoolVar(&upload, "upload", false, "Upload the compressed build file to SourceForge")
+ flag.StringVar(&uploadPath, "upload-path", "", "Path to the file to upload if no build present")
+ flag.Bool("h", false, "Display help message")
}
func printHelp() {
- fmt.Println("Usage: go run . -p= -t= [-c|--compress] [-v|--version=] [-component=] [-arch=] [-release=] [-platform=]")
- flag.PrintDefaults()
- fmt.Println("Example: go run . --upload -c --upload-path=./mozilla-central/obj-x86_64-pc-linux-gnu/dist/bin -a")
- os.Exit(0)
+ fmt.Println("Usage: ./main -p= -t= [-c|--compress] [-v|--version=] [-component=] [-arch=] [-release=] [-platform=]")
+ flag.PrintDefaults()
+ fmt.Println("Example: go run . --upload -c --upload-path=./mozilla-central/obj-x86_64-pc-linux-gnu/dist/bin -a")
+ os.Exit(0)
}
func main() {
- // // Check system dependencies
- // err := spitfire.CheckSystemDependencies()
- // if err != nil {
- // log.Fatalf("System check failed: %v", err)
- // }
+ flag.Parse()
- flag.Parse()
+ if flag.Lookup("h").Value.(flag.Getter).Get().(bool) {
+ printHelp()
+ }
- if flag.Lookup("h").Value.(flag.Getter).Get().(bool) {
- printHelp()
- }
+ // Set version to current date if it's empty and release is nightly
+ if version == "" && release == "nightly" {
+ version = time.Now().Format("2006.01.02") // Set version to current date if nightly
+ }
- // Set version to current date if it's empty and release is nightly
- if version == "" && release == "nightly" {
- version = time.Now().Format("2006.01.02") // Set version to current date if nightly
- }
+ // Save the initial directory
+ var err error
+ initialDir, err = os.Getwd()
+ if err != nil {
+ log.Fatalf("Failed to get current working directory: %v", err)
+ }
+ fmt.Printf("Initial working directory: %s\n", initialDir)
- // Save the initial directory
- var err2 error
- initialDir, err2 = os.Getwd()
- if err2 != nil {
- log.Fatalf("Failed to get current working directory: %v", err2)
- }
- fmt.Printf("Initial working directory: %s\n", initialDir)
+ if all || buildFlag {
+ BuildProcess()
+ }
- // Convert buildPath and uploadPath to absolute paths
- if buildPath != "" {
- buildPath, err2 = spitfire.ResolvePath(buildPath)
- if err2 != nil {
- log.Fatalf("Failed to convert buildPath to absolute path: %v", err2)
- }
- fmt.Printf("Resolved buildPath: %s\n", buildPath)
- }
+ if compress || upload {
+ PackageAndUploadProcess()
+ }
- if uploadPath != "" {
- uploadPath, err2 = spitfire.ResolvePath(uploadPath)
- if err2 != nil {
- log.Fatalf("Failed to convert uploadPath to absolute path: %v", err2)
- }
- fmt.Printf("Resolved uploadPath: %s\n", uploadPath)
- }
-
- if all || buildFlag {
- BuildProcess()
- }
-
- if compress || upload {
- PackageAndUploadProcess()
- }
-
- spitfire.PrintErrors()
+ spitfire.PrintErrors()
}
// BuildProcess handles the build process: downloading, cleaning, configuring, and building the project.
func BuildProcess() {
- sourcePath, err := spitfire.ResolvePath("./mozilla-central")
- if err != nil {
- log.Fatalf("Error resolving source path: %v", err)
- }
+ sourcePath, err := spitfire.ResolvePath("./mozilla-central")
+ if err != nil {
+ log.Fatalf("Error resolving source path: %v", err)
+ }
- patchesDir, err := spitfire.ResolvePath(filepath.Join(sourcePath, "Spitfire"))
- if err != nil {
- log.Fatalf("Error resolving patches directory: %v", err)
- }
+ patchesDir, err := spitfire.ResolvePath(filepath.Join(sourcePath, "Spitfire"))
+ if err != nil {
+ log.Fatalf("Error resolving patches directory: %v", err)
+ }
- if all {
- spitfire.DownloadSource(sourcePath, sourceRepo)
- spitfire.DiscardChanges(sourcePath)
- spitfire.CleanBuild(sourcePath)
- spitfire.UpdateRepo(sourcePath)
- spitfire.UpdatePatches(patchesDir, patchesRepo, sourcePath)
- spitfire.Configure(sourcePath)
- spitfire.Build(sourcePath)
- if run {
- spitfire.RunProject(sourcePath)
- }
- fmt.Println("Spitfire build completed successfully.")
- } else if clean {
- spitfire.CleanBuild(sourcePath)
- fmt.Println("Cleaned Firefox build.")
- } else if update {
- spitfire.DownloadSource(sourcePath, sourceRepo)
- spitfire.UpdateRepo(sourcePath)
- fmt.Println("Mozilla repository updated.")
- } else if patches {
- spitfire.DownloadSource(sourcePath, sourceRepo)
- spitfire.UpdatePatches(patchesDir, patchesRepo, sourcePath)
- fmt.Println("Patches updated.")
- } else if buildFlag {
- spitfire.Configure(sourcePath)
- spitfire.Build(sourcePath)
- if run {
- spitfire.RunProject(sourcePath)
- }
- fmt.Println("Spitfire build completed successfully.")
- }
+ if all {
+ spitfire.DownloadSource(sourcePath, sourceRepo)
+ spitfire.DiscardChanges(sourcePath)
+ spitfire.CleanBuild(sourcePath)
+ spitfire.UpdateRepo(sourcePath)
+ spitfire.UpdatePatches(patchesDir, patchesRepo, sourcePath)
+ spitfire.Configure(sourcePath)
+ spitfire.Build(sourcePath)
+ if run {
+ spitfire.RunProject(sourcePath)
+ }
+ fmt.Println("Spitfire build completed successfully.")
+ } else if clean {
+ spitfire.CleanBuild(sourcePath)
+ fmt.Println("Cleaned Firefox build.")
+ } else if update {
+ spitfire.DownloadSource(sourcePath, sourceRepo)
+ spitfire.UpdateRepo(sourcePath)
+ fmt.Println("Mozilla repository updated.")
+ } else if patches {
+ spitfire.DownloadSource(sourcePath, sourceRepo)
+ spitfire.UpdatePatches(patchesDir, patchesRepo, sourcePath)
+ fmt.Println("Patches updated.")
+ } else if buildFlag {
+ spitfire.Configure(sourcePath)
+ spitfire.Build(sourcePath)
+ if run {
+ spitfire.RunProject(sourcePath)
+ }
+ fmt.Println("Spitfire build completed successfully.")
+ }
}
// PackageAndUploadProcess handles compressing, packaging, and uploading the build to SourceForge.
func PackageAndUploadProcess() {
+
+ // Restore working directory before performing SourceForge operations
+ restoreWorkingDirectory()
- // Restore working directory before performing SourceForge operations
- restoreWorkingDirectory()
+ pathToUse := buildPath
+ if upload && uploadPath != "" {
+ pathToUse = uploadPath
+ }
- pathToUse := buildPath
- if upload && uploadPath != "" {
- pathToUse = uploadPath
- }
+ if pathToUse == "" {
+ log.Fatalf("Error: no valid build or upload path provided.")
+ }
- if pathToUse == "" {
- log.Fatalf("Error: no valid build or upload path provided.")
- }
+ // // This is stupid, it wait for the path to exist (up to a maximum wait time)
+ // err := waitForPath(pathToUse, 60, 5) // Max 60 seconds, checking every 5 seconds
+ // if err != nil {
+ // log.Fatalf("Error: Build path or upload path not found: %v", err)
+ // }
- // // This is stupid, it wait for the path to exist (up to a maximum wait time)
- // err := waitForPath(pathToUse, 60, 5) // Max 60 seconds, checking every 5 seconds
- // if err != nil {
- // log.Fatalf("Error: Build path or upload path not found: %v", err)
- // }
+ uncompressedSize, err := spitfire.GetDirectorySize(pathToUse)
+ if err != nil {
+ log.Fatalf("Failed to calculate uncompressed size: %v", err)
+ }
+ fmt.Printf("Uncompressed directory size: %d bytes\n", uncompressedSize)
- uncompressedSize, err := spitfire.GetDirectorySize(pathToUse)
- if err != nil {
- log.Fatalf("Failed to calculate uncompressed size: %v", err)
- }
- fmt.Printf("Uncompressed directory size: %d bytes\n", uncompressedSize)
+ outputCompressedFile := filepath.Join(".", fmt.Sprintf("%s-%s-%s-%s.tar.gz", component, arch, release, platform))
+ if compress {
+ err := spitfire.CompressDirectory(pathToUse, outputCompressedFile)
+ if err != nil {
+ log.Fatalf("Failed to compress build directory: %v", err)
+ }
+ fmt.Printf("Build directory compressed to: %s\n", outputCompressedFile)
+ }
- outputCompressedFile := filepath.Join(".", fmt.Sprintf("%s-%s-%s-%s.tar.gz", component, arch, release, platform))
- if compress {
- err := spitfire.CompressDirectory(pathToUse, outputCompressedFile)
- if err != nil {
- log.Fatalf("Failed to compress build directory: %v", err)
- }
- fmt.Printf("Build directory compressed to: %s\n", outputCompressedFile)
- }
+ compressedSize, err := spitfire.GetFileSize(outputCompressedFile)
+ if err != nil {
+ log.Fatalf("Failed to get compressed file size: %v", err)
+ }
+ fmt.Printf("Compressed file size: %d bytes\n", compressedSize)
- compressedSize, err := spitfire.GetFileSize(outputCompressedFile)
- if err != nil {
- log.Fatalf("Failed to get compressed file size: %v", err)
- }
- fmt.Printf("Compressed file size: %d bytes\n", compressedSize)
+ if upload {
+ config, err := spitfire.LoadConfig()
+ if err != nil {
+ log.Fatalf("Failed to load SourceForge config: %v", err)
+ }
- if upload {
- config, err := spitfire.LoadConfig()
- if err != nil {
- log.Fatalf("Failed to load SourceForge config: %v", err)
- }
+ if _, err := os.Stat(outputCompressedFile); err == nil {
+ err = spitfire.Upload(config, outputCompressedFile, "/home/frs/project/spitfire-browser/"+component+"/"+arch+"/"+release+"/"+version+"/")
+ if err != nil {
+ log.Fatalf("Failed to upload compressed file: %v", err)
+ }
+ fmt.Println("Compressed file uploaded successfully.")
+ } else {
+ log.Fatalf("No compressed file found to upload.")
+ }
- if _, err := os.Stat(outputCompressedFile); err == nil {
- err = spitfire.Upload(config, outputCompressedFile, "/home/frs/project/spitfire-browser/"+component+"/"+arch+"/"+release+"/"+version+"/")
- if err != nil {
- log.Fatalf("Failed to upload compressed file: %v", err)
- }
- fmt.Println("Compressed file uploaded successfully.")
- } else {
- log.Fatalf("No compressed file found to upload.")
- }
+ err = spitfire.DownloadAPPINDEX(config, "/home/frs/project/spitfire-browser/")
+ if err != nil {
+ fmt.Println("Failed to download APPINDEX. A new APPINDEX will be created and uploaded.")
+ }
- err = spitfire.DownloadAPPINDEX(config, "/home/frs/project/spitfire-browser/")
- if err != nil {
- fmt.Println("Failed to download APPINDEX. A new APPINDEX will be created and uploaded.")
- }
+ err = spitfire.PackageAPPINDEX(
+ name, release, version, arch,
+ fmt.Sprintf("%d", compressedSize),
+ fmt.Sprintf("%d", uncompressedSize),
+ "Spitfire build", url, licence, component, maintainer, "", platform,
+ )
+ if err != nil {
+ log.Fatalf("Failed to update APPINDEX: %v", err)
+ }
+ fmt.Println("APPINDEX updated successfully.")
- err = spitfire.PackageAPPINDEX(
- name, release, version, arch,
- fmt.Sprintf("%d", compressedSize),
- fmt.Sprintf("%d", uncompressedSize),
- "Spitfire build", url, licence, component, maintainer, "", platform,
- )
- if err != nil {
- log.Fatalf("Failed to update APPINDEX: %v", err)
- }
- fmt.Println("APPINDEX updated successfully.")
+ if err := spitfire.CleanAppIndex(); err != nil {
+ log.Fatalf("Failed to clean APPINDEX: %v", err)
+ }
- if err := spitfire.CleanAppIndex(); err != nil {
- log.Fatalf("Failed to clean APPINDEX: %v", err)
- }
-
- err = spitfire.UploadAPPINDEX(config, "/home/frs/project/spitfire-browser/")
- if err != nil {
- log.Fatalf("Failed to upload updated APPINDEX: %v", err)
- }
- fmt.Println("APPINDEX uploaded successfully.")
- }
+ err = spitfire.UploadAPPINDEX(config, "/home/frs/project/spitfire-browser/")
+ if err != nil {
+ log.Fatalf("Failed to upload updated APPINDEX: %v", err)
+ }
+ fmt.Println("APPINDEX uploaded successfully.")
+ }
}
// // waitForPath checks if a path exists, waiting for up to maxWait seconds and retrying every interval seconds.
@@ -275,9 +252,9 @@ func PackageAndUploadProcess() {
// restoreWorkingDirectory restores the initial working directory after any operation that might change it.
func restoreWorkingDirectory() {
- err := os.Chdir(initialDir)
- if err != nil {
- log.Fatalf("Failed to restore the working directory: %v", err)
- }
- fmt.Printf("Restored working directory to: %s\n", initialDir)
-}
+ err := os.Chdir(initialDir)
+ if err != nil {
+ log.Fatalf("Failed to restore the working directory: %v", err)
+ }
+ fmt.Printf("Restored working directory to: %s\n", initialDir)
+}
\ No newline at end of file
diff --git a/sourceforge_config.json b/sourceforge_config.json
index c1250c3..c98a8cf 100644
--- a/sourceforge_config.json
+++ b/sourceforge_config.json
@@ -1,6 +1,7 @@
{
- "SFKeyPath": "~/.ssh/id_rsa.pub",
- "SFUser": "internet-addict",
- "SFHost": "web.sourceforge.net",
- "SFProject": "spitfire-browser"
-}
\ No newline at end of file
+ "SFKeyPath": "~/.ssh/id_rsa.pub",
+ "SFUser": "internet-addict",
+ "SFHost": "web.sourceforge.net",
+ "SFProject": "spitfire-browser"
+ }
+
\ No newline at end of file
diff --git a/spitfire/build.go b/spitfire/build.go
index 3f5be5d..a35433a 100644
--- a/spitfire/build.go
+++ b/spitfire/build.go
@@ -5,39 +5,13 @@ import (
"os"
"os/exec"
"path/filepath"
- "runtime"
)
// Array to store errors
var errors []string
-// SetGlobalEnv sets the MOZILLABUILD environment variable globally for the user (or system)
-func SetGlobalEnv(variable, value string, scope string) error {
- if runtime.GOOS == "windows" {
- var cmd *exec.Cmd
- if scope == "user" {
- cmd = exec.Command("setx", variable, value) // Set for current user
- } else if scope == "system" {
- cmd = exec.Command("setx", variable, value, "/M") // Set for system (requires admin privileges)
- } else {
- return fmt.Errorf("unknown scope: %s", scope)
- }
-
- // Run the command
- out, err := cmd.CombinedOutput()
- if err != nil {
- return fmt.Errorf("failed to set environment variable %s=%s: %v\nOutput: %s", variable, value, err, string(out))
- }
- fmt.Printf("Successfully set %s=%s\n", variable, value)
- return nil
- } else {
- return fmt.Errorf("global environment variable setting is not supported on non-Windows systems")
- }
-}
-
// Run an external command like scp or rsync
func runCommand(command string, args ...string) error {
- fmt.Printf("Running command: %s %v\n", command, args)
cmd := exec.Command(command, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
@@ -46,13 +20,9 @@ func runCommand(command string, args ...string) error {
// Function to resolve paths using absolute path
func ResolvePath(path string) (string, error) {
- // Convert Unix-style slashes to the platform's native slashes
- path = filepath.FromSlash(path)
-
- // Get the absolute path
absPath, err := filepath.Abs(path)
if err != nil {
- return "", fmt.Errorf("failed to resolve path: %s, error: %v", path, err)
+ return "", fmt.Errorf("failed to resolve path: %s", path)
}
return absPath, nil
}
@@ -84,21 +54,10 @@ func CleanBuild(sourcePath string) {
errors = append(errors, "Failed to navigate to source directory.")
return
}
-
- // Use the appropriate mach command for Windows or Unix-like systems
- var machCmd string
- if runtime.GOOS == "windows" {
- machCmd = ".\\mach"
- } else {
- machCmd = "./mach"
- }
-
- // Revert uncommitted changes
if err := runCommand("hg", "revert", "--all", "--no-backup"); err != nil {
errors = append(errors, "Failed to revert changes in Mozilla repository.")
}
- // Clean the build
- if err := runCommand(machCmd, "clobber"); err != nil {
+ if err := runCommand("./mach", "clobber"); err != nil {
errors = append(errors, "Failed to clean build.")
}
}
@@ -154,19 +113,9 @@ func UpdatePatches(patchesDir, patchesRepo, sourcePath string) {
errors = append(errors, "Failed to clone patches repository.")
}
}
-
- // Handle platform-specific rsync command
fmt.Println("Copying files from patches directory to Firefox source directory...")
- if runtime.GOOS == "windows" {
- // Use robocopy for Windows
- if err := runCommand("robocopy", patchesDir, sourcePath, "*", "/S", "/XF", ".git", "/XD", ".git"); err != nil {
- errors = append(errors, "Failed to copy files (Windows robocopy).")
- }
- } else {
- // Use rsync for Unix-like systems
- if err := runCommand("rsync", "-av", "--exclude=.git", patchesDir+"/", sourcePath+"/"); err != nil {
- errors = append(errors, "Failed to copy files (rsync).")
- }
+ if err := runCommand("rsync", "-av", "--exclude=.git", patchesDir+"/", sourcePath+"/"); err != nil {
+ errors = append(errors, "Failed to copy files.")
}
}
@@ -177,16 +126,7 @@ func Configure(sourcePath string) {
errors = append(errors, "Failed to navigate to source directory.")
return
}
-
- // Use the appropriate mach command for Windows or Unix-like systems
- var machCmd string
- if runtime.GOOS == "windows" {
- machCmd = ".\\mach"
- } else {
- machCmd = "./mach"
- }
-
- if err := runCommand(machCmd, "configure"); err != nil {
+ if err := runCommand("./mach", "configure"); err != nil {
errors = append(errors, "Configuration failed.")
}
}
@@ -198,16 +138,7 @@ func Build(sourcePath string) {
errors = append(errors, "Failed to navigate to source directory.")
return
}
-
- // Use the appropriate mach command for Windows or Unix-like systems
- var machCmd string
- if runtime.GOOS == "windows" {
- machCmd = ".\\mach"
- } else {
- machCmd = "./mach"
- }
-
- if err := runCommand(machCmd, "build"); err != nil {
+ if err := runCommand("./mach", "build"); err != nil {
errors = append(errors, "Build failed.")
}
}
@@ -215,16 +146,11 @@ func Build(sourcePath string) {
// Function to run the project after build
func RunProject(sourcePath string) {
fmt.Println("Running the project...")
-
- // Use the appropriate mach command for Windows or Unix-like systems
- var machCmd string
- if runtime.GOOS == "windows" {
- machCmd = ".\\mach"
- } else {
- machCmd = "./mach"
+ if err := os.Chdir(sourcePath); err != nil {
+ errors = append(errors, "Failed to navigate to source directory.")
+ return
}
-
- if err := runCommand(machCmd, "run"); err != nil {
+ if err := runCommand("./mach", "run"); err != nil {
errors = append(errors, "Failed to run the project.")
}
}
diff --git a/spitfire/checks.go b/spitfire/checks.go
deleted file mode 100644
index c0bb232..0000000
--- a/spitfire/checks.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package spitfire
-
-import (
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
-)
-
-// CheckSystemDependencies ensures that required tools for building are installed.
-func CheckSystemDependencies() error {
- requiredTools := map[string]string{
- "git": "https://git-scm.com/download/win", // Git
- "python": "https://www.python.org/downloads/", // Python
- "pip3": "https://pip.pypa.io/en/stable/installing/", // Pip3
- }
-
- if runtime.GOOS == "windows" {
- // Check for MozillaBuild installation
- mozBuildPath := os.Getenv("MOZILLABUILD")
- if mozBuildPath == "" {
- mozBuildPath = "C:\\mozilla-build" // Default to standard MozillaBuild path
- }
-
- // Check if MozillaBuild exists at the specified location
- if !dirExists(mozBuildPath) {
- requiredTools["mozbuild"] = "https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe"
- }
- }
-
- missingTools := []string{}
-
- // Check for each required tool
- for tool, downloadLink := range requiredTools {
- if !isCommandAvailable(tool) {
- missingTools = append(missingTools, fmt.Sprintf("%s (Download: %s)", tool, downloadLink))
- }
- }
-
- // Special check for mach in the local source directory (mozilla-central)
- machPath := filepath.Join("mozilla-central", "mach")
- if !fileExists(machPath) {
- missingTools = append(missingTools, fmt.Sprintf("mach (run from mozilla-central directory)"))
- }
-
- if len(missingTools) > 0 {
- fmt.Println("The following tools are missing and are required for the build:")
- for _, tool := range missingTools {
- fmt.Println(" - " + tool)
- }
- return fmt.Errorf("missing required tools")
- }
-
- fmt.Println("All required system dependencies are installed.")
- return nil
-}
-
-// isCommandAvailable checks if a command/tool is available on the system.
-func isCommandAvailable(command string) bool {
- _, err := exec.LookPath(command)
- return err == nil
-}
-
-// fileExists checks if a file exists at the given path.
-func fileExists(path string) bool {
- _, err := os.Stat(path)
- return err == nil
-}
-
-// dirExists checks if a directory exists at the given path.
-func dirExists(path string) bool {
- info, err := os.Stat(path)
- if os.IsNotExist(err) {
- return false
- }
- return info.IsDir()
-}