blob: 396f03667dd2df815ea1ed44670c083573bf3108 [file] [log] [blame]
Nan Zhang5323f8e2017-05-10 13:37:54 -07001// Copyright 2017 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package python
16
17import (
Colin Cross402be412019-09-18 21:12:18 +000018 "path/filepath"
19
Nan Zhang5323f8e2017-05-10 13:37:54 -070020 "android/soong/android"
21)
22
23// This file handles installing python executables into their final location
24
Nan Zhangd9ec5e72017-12-01 20:00:31 +000025type installLocation int
26
27const (
28 InstallInData installLocation = iota
29)
30
Nan Zhang5323f8e2017-05-10 13:37:54 -070031type pythonInstaller struct {
Nan Zhangd9ec5e72017-12-01 20:00:31 +000032 dir string
33 dir64 string
34 relative string
Nan Zhang5323f8e2017-05-10 13:37:54 -070035
Colin Cross70dda7e2019-10-01 22:05:35 -070036 path android.InstallPath
Logan Chien02880e42018-11-06 17:30:35 +080037
38 androidMkSharedLibs []string
Nan Zhang5323f8e2017-05-10 13:37:54 -070039}
40
Rupert Shuttleworthffc4cc42021-11-03 09:07:26 +000041func NewPythonInstaller(dir, dir64 string) *pythonInstaller {
Nan Zhang5323f8e2017-05-10 13:37:54 -070042 return &pythonInstaller{
Rupert Shuttleworthffc4cc42021-11-03 09:07:26 +000043 dir: dir,
44 dir64: dir64,
Nan Zhang5323f8e2017-05-10 13:37:54 -070045 }
46}
47
48var _ installer = (*pythonInstaller)(nil)
49
Colin Cross70dda7e2019-10-01 22:05:35 -070050func (installer *pythonInstaller) installDir(ctx android.ModuleContext) android.InstallPath {
Nan Zhangd9ec5e72017-12-01 20:00:31 +000051 dir := installer.dir
52 if ctx.Arch().ArchType.Multilib == "lib64" && installer.dir64 != "" {
53 dir = installer.dir64
54 }
Colin Cross3b19f5d2019-09-17 14:45:31 -070055 if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) {
Colin Cross402be412019-09-18 21:12:18 +000056 dir = filepath.Join(dir, ctx.Arch().ArchType.String())
57 }
Nan Zhangd9ec5e72017-12-01 20:00:31 +000058 return android.PathForModuleInstall(ctx, dir, installer.relative)
59}
60
Nan Zhang5323f8e2017-05-10 13:37:54 -070061func (installer *pythonInstaller) install(ctx android.ModuleContext, file android.Path) {
Rupert Shuttleworthffc4cc42021-11-03 09:07:26 +000062 installer.path = ctx.InstallFile(installer.installDir(ctx), file.Base(), file)
Nan Zhang5323f8e2017-05-10 13:37:54 -070063}
Logan Chien02880e42018-11-06 17:30:35 +080064
65func (installer *pythonInstaller) setAndroidMkSharedLibs(sharedLibs []string) {
66 installer.androidMkSharedLibs = sharedLibs
67}