diff options
-rw-r--r-- | cmd/merge_zips/merge_zips.go | 18 | ||||
-rw-r--r-- | python/builder.go | 28 |
2 files changed, 29 insertions, 17 deletions
diff --git a/cmd/merge_zips/merge_zips.go b/cmd/merge_zips/merge_zips.go index 8e71a978..c21da44b 100644 --- a/cmd/merge_zips/merge_zips.go +++ b/cmd/merge_zips/merge_zips.go @@ -19,6 +19,7 @@ import ( "flag" "fmt" "hash/crc32" + "io" "io/ioutil" "log" "os" @@ -66,6 +67,7 @@ var ( manifest = flag.String("m", "", "manifest file to insert in jar") pyMain = flag.String("pm", "", "__main__.py file to insert in par") entrypoint = flag.String("e", "", "par entrypoint file to insert in par") + prefix = flag.String("prefix", "", "A file to prefix to the zip file") ignoreDuplicates = flag.Bool("ignore-duplicates", false, "take each entry from the first zip it exists in and don't warn") ) @@ -77,7 +79,7 @@ func init() { func main() { flag.Usage = func() { - fmt.Fprintln(os.Stderr, "usage: merge_zips [-jpsD] [-m manifest] [-e entrypoint] [-pm __main__.py] output [inputs...]") + fmt.Fprintln(os.Stderr, "usage: merge_zips [-jpsD] [-m manifest] [--prefix script] [-e entrypoint] [-pm __main__.py] output [inputs...]") flag.PrintDefaults() } @@ -99,6 +101,19 @@ func main() { log.Fatal(err) } defer output.Close() + + var offset int64 + if *prefix != "" { + prefixFile, err := os.Open(*prefix) + if err != nil { + log.Fatal(err) + } + offset, err = io.Copy(output, prefixFile) + if err != nil { + log.Fatal(err) + } + } + writer := zip.NewWriter(output) defer func() { err := writer.Close() @@ -106,6 +121,7 @@ func main() { log.Fatal(err) } }() + writer.SetOffset(offset) // make readers readers := []namedZipReader{} diff --git a/python/builder.go b/python/builder.go index 11a792a4..7d4589cc 100644 --- a/python/builder.go +++ b/python/builder.go @@ -45,20 +45,21 @@ var ( hostPar = pctx.AndroidStaticRule("hostPar", blueprint.RuleParams{ Command: `sed -e 's/%interpreter%/$interp/g' -e 's/%main%/$main/g' $template > $stub && ` + - `$mergeParCmd -p -pm $stub $mergedZip $srcsZips && echo '#!/usr/bin/env python' | cat - $mergedZip > $out && ` + - `chmod +x $out && (rm -f $stub; rm -f $mergedZip)`, + `echo "#!/usr/bin/env python" >${out}.prefix &&` + + `$mergeParCmd -p --prefix ${out}.prefix -pm $stub $out $srcsZips && ` + + `chmod +x $out && (rm -f $stub; rm -f ${out}.prefix)`, CommandDeps: []string{"$mergeParCmd"}, }, - "interp", "main", "template", "stub", "mergedZip", "srcsZips") + "interp", "main", "template", "stub", "srcsZips") embeddedPar = pctx.AndroidStaticRule("embeddedPar", blueprint.RuleParams{ Command: `echo '$main' > $entryPoint &&` + - `$mergeParCmd -p -e $entryPoint $mergedZip $srcsZips && cat $launcher | cat - $mergedZip > $out && ` + - `chmod +x $out && (rm -f $entryPoint; rm -f $mergedZip)`, + `$mergeParCmd -p --prefix $launcher -e $entryPoint $out $srcsZips && ` + + `chmod +x $out && (rm -f $entryPoint)`, CommandDeps: []string{"$mergeParCmd"}, }, - "main", "entryPoint", "mergedZip", "srcsZips", "launcher") + "main", "entryPoint", "srcsZips", "launcher") ) func init() { @@ -73,9 +74,6 @@ func registerBuildActionForParFile(ctx android.ModuleContext, embeddedLauncher b launcherPath android.OptionalPath, interpreter, main, binName string, srcsZips android.Paths) android.Path { - // .intermediate output path for merged zip file. - mergedZip := android.PathForModuleOut(ctx, binName+".mergedzip") - // .intermediate output path for bin executable. binFile := android.PathForModuleOut(ctx, binName) @@ -96,12 +94,11 @@ func registerBuildActionForParFile(ctx android.ModuleContext, embeddedLauncher b Output: binFile, Implicits: implicits, Args: map[string]string{ - "interp": strings.Replace(interpreter, "/", `\/`, -1), - "main": strings.Replace(main, "/", `\/`, -1), - "template": template.String(), - "stub": stub, - "mergedZip": mergedZip.String(), - "srcsZips": strings.Join(srcsZips.Strings(), " "), + "interp": strings.Replace(interpreter, "/", `\/`, -1), + "main": strings.Replace(main, "/", `\/`, -1), + "template": template.String(), + "stub": stub, + "srcsZips": strings.Join(srcsZips.Strings(), " "), }, }) } else if launcherPath.Valid() { @@ -119,7 +116,6 @@ func registerBuildActionForParFile(ctx android.ModuleContext, embeddedLauncher b Args: map[string]string{ "main": main, "entryPoint": entryPoint, - "mergedZip": mergedZip.String(), "srcsZips": strings.Join(srcsZips.Strings(), " "), "launcher": launcherPath.String(), }, |