2020-06-25 20:36:18 -04:00
|
|
|
//+build generate
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
2020-06-28 21:52:53 -04:00
|
|
|
import (
|
|
|
|
"github.com/zserge/lorca"
|
|
|
|
|
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
var icecatdir = "gnuzilla"
|
|
|
|
|
|
|
|
var lowercase = "gingershrew"
|
|
|
|
var CamelCase = "GingerShrew"
|
|
|
|
var UPPERCASE = "GINGERSHREW"
|
|
|
|
|
|
|
|
var Full_Name = "Free GingerShrew"
|
|
|
|
var Developer = "From A Tiny Rodent"
|
|
|
|
var Foundation = "No Foundation"
|
2020-06-29 02:17:22 -04:00
|
|
|
var Corporation = "No Corporation"
|
2020-06-28 21:52:53 -04:00
|
|
|
|
|
|
|
var unpacker = `package REPLACEME
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
)
|
|
|
|
|
|
|
|
func userFind() string {
|
|
|
|
if os.Geteuid() == 0 {
|
|
|
|
log.Fatal("Do not run this application as root!")
|
|
|
|
}
|
|
|
|
if un, err := os.UserHomeDir(); err == nil {
|
|
|
|
os.MkdirAll(filepath.Join(un, "i2p"), 0755)
|
|
|
|
return un
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
var userdir = filepath.Join(userFind(), "/i2p/firefox-profiles")
|
|
|
|
|
|
|
|
func writeFile(val os.FileInfo, system *fs) ([]byte, error) {
|
|
|
|
if !val.IsDir() {
|
|
|
|
file, err := system.Open(val.Name())
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
sys := bytes.NewBuffer(nil)
|
|
|
|
if _, err := io.Copy(sys, file); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else {
|
|
|
|
return sys.Bytes(), nil
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
log.Println(filepath.Join(userdir, val.Name()), "ignored", "contents", val.Sys())
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("undefined unpacker error")
|
|
|
|
}
|
|
|
|
|
|
|
|
func WriteBrowser(FS *fs) ([]byte, error) {
|
|
|
|
if embedded, err := FS.Readdir(-1); err != nil {
|
|
|
|
log.Fatal("Extension error, embedded extension not read.", err)
|
|
|
|
} else {
|
|
|
|
for _, val := range embedded {
|
|
|
|
if val.IsDir() {
|
|
|
|
os.MkdirAll(filepath.Join(userdir, val.Name()), val.Mode())
|
|
|
|
} else {
|
|
|
|
return writeFile(val, FS)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
`
|
2020-06-25 20:36:18 -04:00
|
|
|
|
2020-07-02 17:03:46 -04:00
|
|
|
var mozconfig_windows = `
|
|
|
|
. "$topsrcdir/build/mozconfig.win-common"
|
|
|
|
|
|
|
|
unset MAKECAB
|
|
|
|
unset DUMP_SYMS
|
|
|
|
|
|
|
|
. "$topsrcdir/browser/config/mozconfigs/common"
|
|
|
|
|
|
|
|
export MOZ_PACKAGE_JSSHELL=1
|
|
|
|
|
|
|
|
ac_add_options --target=x86_64-w64-mingw32
|
|
|
|
ac_add_options --with-toolchain-prefix=x86_64-w64-mingw32-
|
|
|
|
|
|
|
|
ac_add_options --disable-warnings-as-errors
|
|
|
|
MOZ_COPY_PDBS=1
|
|
|
|
mk_add_options "export WIDL_TIME_OVERRIDE=0"
|
|
|
|
|
|
|
|
ac_add_options --enable-proxy-bypass-protection
|
|
|
|
|
|
|
|
ac_add_options --disable-webrtc # Bug 1393901
|
|
|
|
ac_add_options --disable-geckodriver # Bug 1489320
|
|
|
|
ac_add_options --disable-update-agent # Bug 1561797
|
|
|
|
|
|
|
|
HOST_CC="$MOZ_FETCHES_DIR/clang/bin/clang"
|
|
|
|
HOST_CXX="$MOZ_FETCHES_DIR/clang/bin/clang++"
|
|
|
|
CC="$MOZ_FETCHES_DIR/clang/bin/x86_64-w64-mingw32-clang"
|
|
|
|
CXX="$MOZ_FETCHES_DIR/clang/bin/x86_64-w64-mingw32-clang++"
|
|
|
|
ac_add_options --with-clang-path="$CC"
|
|
|
|
ac_add_options --with-libclang-path="$MOZ_FETCHES_DIR/clang/lib"
|
|
|
|
CXXFLAGS="-fms-extensions"
|
|
|
|
AR=llvm-ar
|
|
|
|
RANLIB=llvm-ranlib
|
|
|
|
|
|
|
|
BINDGEN_CFLAGS="-I$MOZ_FETCHES_DIR/clang/x86_64-w64-mingw32/include/c++/v1 -I$MOZ_FETCHES_DIR/clang/x86_64-w64-mingw32/include"
|
|
|
|
|
|
|
|
mk_add_options "export PATH=$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/mingw32/bin:$MOZ_FETCHES_DIR/wine/bin:$MOZ_FETCHES_DIR/upx/bin:$MOZ_FETCHES_DIR/fxc2/bin:$MOZ_FETCHES_DIR/binutils/bin:$PATH"
|
|
|
|
|
|
|
|
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$MOZ_FETCHES_DIR/mingw32/lib64:$MOZ_FETCHES_DIR/clang/lib
|
|
|
|
mk_add_options "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
|
|
|
|
|
|
|
|
|
|
|
ac_add_options --with-branding=browser/branding/nightly
|
|
|
|
|
|
|
|
. "$topsrcdir/build/mozconfig.common.override"
|
|
|
|
`
|
|
|
|
|
2020-06-25 20:36:18 -04:00
|
|
|
func main() {
|
|
|
|
// You can also run "npm build" or webpack here, or compress assets, or
|
|
|
|
// generate manifests, or do other preparations for your assets.
|
2020-06-28 21:52:53 -04:00
|
|
|
|
|
|
|
if err := deleteDirectories(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := createDirectories(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := generateGoUnpacker(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := splitBinaries(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-08-22 21:54:03 -04:00
|
|
|
if err := updateAllChunks(); err != nil {
|
2020-07-02 17:03:46 -04:00
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-08-22 21:54:03 -04:00
|
|
|
if err := lorca.Embed("gingershrew", "import/libc.go", "lib/lib"); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-06-28 21:52:53 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
var libs = []string{
|
|
|
|
"aa",
|
|
|
|
"ab",
|
|
|
|
"ac",
|
|
|
|
"ad",
|
|
|
|
"ae",
|
|
|
|
"af",
|
|
|
|
"ag",
|
|
|
|
"ah",
|
|
|
|
"ai",
|
|
|
|
"aj",
|
|
|
|
"ak",
|
|
|
|
"al",
|
|
|
|
}
|
|
|
|
|
2020-07-02 17:03:46 -04:00
|
|
|
func updateChunk(chunk string) error {
|
2020-08-28 11:42:58 -04:00
|
|
|
err := lorca.Embed("gs"+chunk, "parts/"+chunk+"/chunk_linux.go", "gingershrew-68.12.0.en-US.linux-x86_64.tar.bz2."+chunk)
|
2020-07-02 17:03:46 -04:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
log.Println("embedded gs"+chunk)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateAllChunks() error {
|
|
|
|
for _, lib:= range libs {
|
|
|
|
updateChunk(lib)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-06-28 21:52:53 -04:00
|
|
|
func splitBinaries() error {
|
2020-08-28 11:42:58 -04:00
|
|
|
fileToBeChunked := "gingershrew-68.12.0.en-US.linux-x86_64.tar.bz2"
|
2020-06-28 21:52:53 -04:00
|
|
|
bytes, err := ioutil.ReadFile(fileToBeChunked)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
chunkSize := len(bytes) / 12
|
|
|
|
for index, lib := range libs {
|
2020-06-29 02:17:22 -04:00
|
|
|
start := index * chunkSize
|
|
|
|
finish := ((index + 1) * chunkSize)
|
2020-06-29 01:49:56 -04:00
|
|
|
if index == 11 {
|
|
|
|
finish = len(bytes)
|
|
|
|
}
|
2020-06-28 21:52:53 -04:00
|
|
|
outBytes := bytes[start:finish]
|
|
|
|
err := ioutil.WriteFile(fileToBeChunked+"."+lib, outBytes, 0644)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-06-29 01:49:56 -04:00
|
|
|
log.Printf("Started at: %d, Ended at: %d", start, finish)
|
2020-06-28 21:52:53 -04:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func deleteDirectories() error {
|
|
|
|
for _, dir := range libs {
|
|
|
|
err := os.RemoveAll(filepath.Join("parts", dir))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func createDirectories() error {
|
|
|
|
for _, dir := range libs {
|
|
|
|
err := os.MkdirAll(filepath.Join("parts", dir), 0755)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func generateGoUnpacker() error {
|
|
|
|
for index, dir := range libs {
|
|
|
|
contents := strings.Replace(unpacker, "REPLACEME", "gs"+libs[index], -1)
|
|
|
|
if err := ioutil.WriteFile(filepath.Join("parts", dir, "unpacker.go"), []byte(contents), 0644); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
2020-06-25 20:36:18 -04:00
|
|
|
}
|
2020-07-02 17:03:46 -04:00
|
|
|
|