aboutsummaryrefslogtreecommitdiffstats
path: root/python/binary.go
diff options
context:
space:
mode:
Diffstat (limited to 'python/binary.go')
-rw-r--r--python/binary.go102
1 files changed, 14 insertions, 88 deletions
diff --git a/python/binary.go b/python/binary.go
index 0314edb8..4135dfef 100644
--- a/python/binary.go
+++ b/python/binary.go
@@ -18,8 +18,6 @@ package python
import (
"fmt"
- "path/filepath"
- "strings"
"android/soong/android"
)
@@ -80,89 +78,44 @@ func (binary *binaryDecorator) bootstrapperProps() []interface{} {
return []interface{}{&binary.binaryProperties}
}
-func (binary *binaryDecorator) bootstrap(ctx android.ModuleContext, actual_version string,
- embedded_launcher bool, srcsPathMappings []pathMapping, parSpec parSpec,
- depsPyRunfiles []string, depsParSpecs []parSpec) android.OptionalPath {
- // no Python source file for compiling .par file.
- if len(srcsPathMappings) == 0 {
- return android.OptionalPath{}
- }
-
- // the runfiles packages needs to be populated with "__init__.py".
- newPyPkgs := []string{}
- // the set to de-duplicate the new Python packages above.
- newPyPkgSet := make(map[string]bool)
- // the runfiles dirs have been treated as packages.
- existingPyPkgSet := make(map[string]bool)
-
- wholePyRunfiles := []string{}
- for _, path := range srcsPathMappings {
- wholePyRunfiles = append(wholePyRunfiles, path.dest)
- }
- wholePyRunfiles = append(wholePyRunfiles, depsPyRunfiles...)
-
- // find all the runfiles dirs which have been treated as packages.
- for _, path := range wholePyRunfiles {
- if filepath.Base(path) != initFileName {
- continue
- }
- existingPyPkg := PathBeforeLastSlash(path)
- if _, found := existingPyPkgSet[existingPyPkg]; found {
- panic(fmt.Errorf("found init file path duplicates: %q for module: %q.",
- path, ctx.ModuleName()))
- } else {
- existingPyPkgSet[existingPyPkg] = true
- }
- parentPath := PathBeforeLastSlash(existingPyPkg)
- populateNewPyPkgs(parentPath, existingPyPkgSet, newPyPkgSet, &newPyPkgs)
- }
-
- // create new packages under runfiles tree.
- for _, path := range wholePyRunfiles {
- if filepath.Base(path) == initFileName {
- continue
- }
- parentPath := PathBeforeLastSlash(path)
- populateNewPyPkgs(parentPath, existingPyPkgSet, newPyPkgSet, &newPyPkgs)
- }
+func (binary *binaryDecorator) bootstrap(ctx android.ModuleContext, actualVersion string,
+ embeddedLauncher bool, srcsPathMappings []pathMapping, srcsZip android.Path,
+ depsSrcsZips android.Paths) android.OptionalPath {
main := binary.getPyMainFile(ctx, srcsPathMappings)
- if main == "" {
- return android.OptionalPath{}
- }
- var launcher_path android.Path
- if embedded_launcher {
+ var launcherPath android.Path
+ if embeddedLauncher {
ctx.VisitDirectDepsWithTag(launcherTag, func(m android.Module) {
if provider, ok := m.(IntermPathProvider); ok {
- if launcher_path != nil {
+ if launcherPath != nil {
panic(fmt.Errorf("launcher path was found before: %q",
- launcher_path))
+ launcherPath))
}
- launcher_path = provider.IntermPathForModuleOut().Path()
+ launcherPath = provider.IntermPathForModuleOut().Path()
}
})
}
- binFile := registerBuildActionForParFile(ctx, embedded_launcher, launcher_path,
- binary.getHostInterpreterName(ctx, actual_version),
- main, binary.getStem(ctx), newPyPkgs, append(depsParSpecs, parSpec))
+ binFile := registerBuildActionForParFile(ctx, embeddedLauncher, launcherPath,
+ binary.getHostInterpreterName(ctx, actualVersion),
+ main, binary.getStem(ctx), append(android.Paths{srcsZip}, depsSrcsZips...))
return android.OptionalPathForPath(binFile)
}
// get host interpreter name.
func (binary *binaryDecorator) getHostInterpreterName(ctx android.ModuleContext,
- actual_version string) string {
+ actualVersion string) string {
var interp string
- switch actual_version {
+ switch actualVersion {
case pyVersion2:
interp = "python2.7"
case pyVersion3:
interp = "python3"
default:
panic(fmt.Errorf("unknown Python actualVersion: %q for module: %q.",
- actual_version, ctx.ModuleName()))
+ actualVersion, ctx.ModuleName()))
}
return interp
@@ -196,30 +149,3 @@ func (binary *binaryDecorator) getStem(ctx android.ModuleContext) string {
return stem + String(binary.binaryProperties.Suffix)
}
-
-// Sets the given directory and all its ancestor directories as Python packages.
-func populateNewPyPkgs(pkgPath string, existingPyPkgSet,
- newPyPkgSet map[string]bool, newPyPkgs *[]string) {
- for pkgPath != "" {
- if _, found := existingPyPkgSet[pkgPath]; found {
- break
- }
- if _, found := newPyPkgSet[pkgPath]; !found {
- newPyPkgSet[pkgPath] = true
- *newPyPkgs = append(*newPyPkgs, pkgPath)
- // Gets its ancestor directory by trimming last slash.
- pkgPath = PathBeforeLastSlash(pkgPath)
- } else {
- break
- }
- }
-}
-
-// filepath.Dir("abc") -> "." and filepath.Dir("/abc") -> "/". However,
-// the PathBeforeLastSlash() will return "" for both cases above.
-func PathBeforeLastSlash(path string) string {
- if idx := strings.LastIndex(path, "/"); idx != -1 {
- return path[:idx]
- }
- return ""
-}