PathInterposer » History » Version 2
Denis 'GNUtoo' Carikli, 12/01/2020 07:01 PM
add more infos
| 1 | 1 | Denis 'GNUtoo' Carikli | h1. PathInterposer |
|---|---|---|---|
| 2 | |||
| 3 | h2 .Warnings |
||
| 4 | |||
| 5 | This page is a work in progress, so it might contains mistakes, inaccuracies, etc. |
||
| 6 | |||
| 7 | h2. Introduction |
||
| 8 | |||
| 9 | TODO |
||
| 10 | |||
| 11 | h2. how it works |
||
| 12 | 2 | Denis 'GNUtoo' Carikli | |
| 13 | During the build: |
||
| 14 | * The host path is saved to out/.path_interposer_origpath |
||
| 15 | * The host path is changed to a new one |
||
| 16 | * The path interposer is used to access host binaries. It uses the saved path for that. |
||
| 17 | |||
| 18 | With Trisquel 8, here's an example of how the path looks like for applications being launched through the path interposer[1]: |
||
| 19 | <pre> |
||
| 20 | /home/replicant/replicant-11/prebuilts/jdk/jdk11/linux-x86/bin |
||
| 21 | /home/replicant/replicant-11/prebuilts/jdk/jdk11/linux-x86/bin |
||
| 22 | /home/replicant/replicant-11/out/soong/host/linux-x86/bin |
||
| 23 | /home/replicant/replicant-11/out/host/linux-x86/bin |
||
| 24 | /home/replicant/replicant-11/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin |
||
| 25 | /home/replicant/replicant-11/development/scripts |
||
| 26 | /home/replicant/replicant-11/prebuilts/devtools/tools |
||
| 27 | /home/replicant/replicant-11/external/selinux/prebuilts/bin |
||
| 28 | /home/replicant/replicant-11/prebuilts/misc/linux-x86/dtc |
||
| 29 | /home/replicant/replicant-11/prebuilts/misc/linux-x86/libufdt |
||
| 30 | /home/replicant/replicant-11/prebuilts/clang/host/linux-x86/llvm-binutils-stable |
||
| 31 | /home/replicant/replicant-11/prebuilts/android-emulator/linux-x86_64 |
||
| 32 | /home/replicant/replicant-11/prebuilts/asuite/acloud/linux-x86 |
||
| 33 | /home/replicant/replicant-11/prebuilts/asuite/aidegen/linux-x86 |
||
| 34 | /home/replicant/replicant-11/prebuilts/asuite/atest/linux-x86 |
||
| 35 | /home/replicant/bin |
||
| 36 | /home/replicant/.local/bin |
||
| 37 | /usr/local/sbin |
||
| 38 | /usr/local/bin |
||
| 39 | /usr/sbin |
||
| 40 | /usr/bin |
||
| 41 | /sbin |
||
| 42 | /bin |
||
| 43 | /usr/games |
||
| 44 | </pre> |
||
| 45 | |||
| 46 | Here we can deduce that the prebuilts take precedence over the host binaries. |
||
| 47 | |||
| 48 | fn1. This has been deduced by prints with the following patch: |
||
| 49 | <pre> |
||
| 50 | --- a/cmd/path_interposer/main.go |
||
| 51 | +++ b/cmd/path_interposer/main.go |
||
| 52 | @@ -116,6 +116,10 @@ func Main(stdout, stderr io.Writer, interposer string, args []string, opts mainO |
||
| 53 | return 1, fmt.Errorf("Failed to set PATH env: %v", err) |
||
| 54 | } |
||
| 55 | |||
| 56 | + fmt.Fprintln(os.Stderr, "####################################") |
||
| 57 | + fmt.Fprintln(os.Stderr, os.Getenv("PATH")) |
||
| 58 | + fmt.Fprintln(os.Stderr, "####################################") |
||
| 59 | + |
||
| 60 | if config := opts.config(base); config.Log || config.Error { |
||
| 61 | var procs []paths.LogProcess |
||
| 62 | if opts.lookupParents != nil { |
||
| 63 | </pre> |
||
| 64 | |||
| 65 | h2. Launching host binaries without touching the prebuilts |
||
| 66 | |||
| 67 | In Replicant 10, we could use out/.path/python3 as python3 interpreter assuming that we enabled it in build/soong/ui/build/paths/config.go |
||
| 68 | |||
| 69 | for instance in the Mesa (external/mesa3d) Android.mk we had: |
||
| 70 | <pre> |
||
| 71 | MESA_PYTHON2 := out/.path/python2 |
||
| 72 | MESA_PYTHON3 := out/.path/python3 |
||
| 73 | </pre> |