Use a (mostly) hermetic Python interpreter

It still requires python to be installed on the host to run the wrapper
scripts, but it's close to being fully hermetic.

This also requires/enables the following changes, unfortunately all at
the same time:
 * Use a downloaded f2py
 * Use a downloaded scipy/numpy/matplotlib
 * Fix a few things that don't run with the python version in their #!
 * Stop using bazel-generated __init__.py files, because those interfere
   with importing matplotlib nicely

Change-Id: Ife280464613d67cece9587b7d947f0b1d5466d7e
diff --git a/aos/BUILD b/aos/BUILD
index 89948ab..2e73c51 100644
--- a/aos/BUILD
+++ b/aos/BUILD
@@ -1,62 +1,71 @@
 filegroup(
-  name = 'prime_binaries',
-  visibility = ['//visibility:public'],
-  srcs = [
-    '//aos/linux_code:core',
-    '//aos/common/logging:log_streamer',
-    '//aos/common/logging:log_displayer',
-    '//aos/linux_code/starter',
-  ],
-)
-filegroup(
-  name = 'prime_start_binaries',
-  visibility = ['//visibility:public'],
-  srcs = [
-    '//aos/common/logging:binary_log_writer',
-  ],
+    name = "prime_binaries",
+    srcs = [
+        "//aos/common/logging:log_displayer",
+        "//aos/common/logging:log_streamer",
+        "//aos/linux_code:core",
+        "//aos/linux_code/starter",
+    ],
+    visibility = ["//visibility:public"],
 )
 
 filegroup(
-  name = 'prime_binaries_stripped',
-  visibility = ['//visibility:public'],
-  srcs = [
-    # starter is hard coded to look for a non-stripped core...
-    '//aos/linux_code:core',
-    '//aos/common/logging:log_streamer.stripped',
-    '//aos/common/logging:log_displayer.stripped',
-    '//aos/linux_code/starter',
-  ],
+    name = "prime_start_binaries",
+    srcs = [
+        "//aos/common/logging:binary_log_writer",
+    ],
+    visibility = ["//visibility:public"],
 )
+
 filegroup(
-  name = 'prime_start_binaries_stripped',
-  visibility = ['//visibility:public'],
-  srcs = [
-    '//aos/common/logging:binary_log_writer.stripped',
-  ],
+    name = "prime_binaries_stripped",
+    srcs = [
+        # starter is hard coded to look for a non-stripped core...
+        "//aos/linux_code:core",
+        "//aos/common/logging:log_streamer.stripped",
+        "//aos/common/logging:log_displayer.stripped",
+        "//aos/linux_code/starter",
+    ],
+    visibility = ["//visibility:public"],
+)
+
+filegroup(
+    name = "prime_start_binaries_stripped",
+    srcs = [
+        "//aos/common/logging:binary_log_writer.stripped",
+    ],
+    visibility = ["//visibility:public"],
 )
 
 cc_library(
-  name = 'once',
-  visibility = ['//visibility:public'],
-  hdrs = [
-    'once.h',
-  ],
-  srcs = [
-    'once-tmpl.h',
-  ],
-  deps = [
-    '//aos/common:gtest_prod',
-    '//aos/common:type_traits',
-  ],
+    name = "once",
+    srcs = [
+        "once-tmpl.h",
+    ],
+    hdrs = [
+        "once.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//aos/common:gtest_prod",
+        "//aos/common:type_traits",
+    ],
 )
+
 cc_test(
-  name = 'once_test',
-  visibility = ['//visibility:public'],
-  srcs = [
-    'once_test.cc',
-  ],
-  deps = [
-    '//aos/testing:googletest',
-    '//aos:once',
-  ],
+    name = "once_test",
+    srcs = [
+        "once_test.cc",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//aos:once",
+        "//aos/testing:googletest",
+    ],
+)
+
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    visibility = ["//visibility:public"],
 )
diff --git a/aos/__init__.py b/aos/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aos/__init__.py
diff --git a/aos/common/BUILD b/aos/common/BUILD
index 4de57b6..b1c5b3b 100644
--- a/aos/common/BUILD
+++ b/aos/common/BUILD
@@ -400,3 +400,10 @@
         "//aos/testing:googletest",
     ],
 )
+
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    visibility = ["//visibility:public"],
+    deps = ["//aos:python_init"],
+)
diff --git a/aos/common/__init__.py b/aos/common/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aos/common/__init__.py
diff --git a/aos/common/util/BUILD b/aos/common/util/BUILD
index cd58bbf..8fcd2fe 100644
--- a/aos/common/util/BUILD
+++ b/aos/common/util/BUILD
@@ -1,268 +1,278 @@
-package(default_visibility = ['//visibility:public'])
+package(default_visibility = ["//visibility:public"])
 
 py_library(
-  name = 'py_trapezoid_profile',
-  srcs = [
-    'trapezoid_profile.py',
-  ],
+    name = "py_trapezoid_profile",
+    srcs = [
+        "trapezoid_profile.py",
+    ],
+    deps = [
+        ":python_init",
+    ],
 )
 
 cc_library(
-  name = 'run_command',
-  srcs = [
-    'run_command.cc',
-  ],
-  hdrs = [
-    'run_command.h',
-  ],
-  deps = [
-    '//aos/common/logging',
-  ],
+    name = "run_command",
+    srcs = [
+        "run_command.cc",
+    ],
+    hdrs = [
+        "run_command.h",
+    ],
+    deps = [
+        "//aos/common/logging",
+    ],
 )
 
 cc_test(
-  name = 'run_command_test',
-  srcs = [
-    'run_command_test.cc',
-  ],
-  deps = [
-    ':run_command',
-    '//aos/testing:googletest',
-    '//aos/common/logging',
-    ':thread',
-  ],
+    name = "run_command_test",
+    srcs = [
+        "run_command_test.cc",
+    ],
+    deps = [
+        ":run_command",
+        ":thread",
+        "//aos/common/logging",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'death_test_log_implementation',
-  hdrs = [
-    'death_test_log_implementation.h',
-  ],
-  deps = [
-    '//aos/common/logging:implementations',
-  ],
+    name = "death_test_log_implementation",
+    hdrs = [
+        "death_test_log_implementation.h",
+    ],
+    deps = [
+        "//aos/common/logging:implementations",
+    ],
 )
 
 cc_library(
-  name = 'inet_addr',
-  srcs = [
-    'inet_addr.cc',
-  ],
-  hdrs = [
-    'inet_addr.h',
-  ],
-  deps = [
-    '//aos/common:byteorder',
-    '//aos/common:network_port',
-  ],
+    name = "inet_addr",
+    srcs = [
+        "inet_addr.cc",
+    ],
+    hdrs = [
+        "inet_addr.h",
+    ],
+    deps = [
+        "//aos/common:byteorder",
+        "//aos/common:network_port",
+    ],
 )
 
 cc_library(
-  name = 'phased_loop',
-  srcs = [
-    'phased_loop.cc',
-  ],
-  hdrs = [
-    'phased_loop.h',
-  ],
-  deps = [
-    '//aos/common/logging',
-    '//aos/common:time',
-  ],
+    name = "phased_loop",
+    srcs = [
+        "phased_loop.cc",
+    ],
+    hdrs = [
+        "phased_loop.h",
+    ],
+    deps = [
+        "//aos/common:time",
+        "//aos/common/logging",
+    ],
 )
 
 cc_library(
-  name = 'log_interval',
-  hdrs = [
-    'log_interval.h',
-  ],
-  deps = [
-    '//aos/common:time',
-    '//aos/common/logging',
-  ],
+    name = "log_interval",
+    hdrs = [
+        "log_interval.h",
+    ],
+    deps = [
+        "//aos/common:time",
+        "//aos/common/logging",
+    ],
 )
 
 cc_library(
-  name = 'string_to_num',
-  hdrs = [
-    'string_to_num.h',
-  ],
+    name = "string_to_num",
+    hdrs = [
+        "string_to_num.h",
+    ],
 )
 
 cc_test(
-  name = 'string_to_num_test',
-  srcs = [
-    'string_to_num_test.cc',
-  ],
-  deps = [
-    ':string_to_num',
-    '//aos/testing:googletest',
-  ],
+    name = "string_to_num_test",
+    srcs = [
+        "string_to_num_test.cc",
+    ],
+    deps = [
+        ":string_to_num",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'thread',
-  srcs = [
-    'thread.cc',
-  ],
-  hdrs = [
-    'thread.h',
-  ],
-  deps = [
-    '//aos/common:macros',
-    '//aos/common/logging',
-  ],
+    name = "thread",
+    srcs = [
+        "thread.cc",
+    ],
+    hdrs = [
+        "thread.h",
+    ],
+    deps = [
+        "//aos/common:macros",
+        "//aos/common/logging",
+    ],
 )
 
 cc_library(
-  name = 'trapezoid_profile',
-  srcs = [
-    'trapezoid_profile.cc',
-  ],
-  hdrs = [
-    'trapezoid_profile.h',
-  ],
-  deps = [
-    '//third_party/eigen',
-    '//aos/common:time',
-    '//aos/common/logging',
-  ],
-  linkopts = [
-    '-lm',
-  ],
+    name = "trapezoid_profile",
+    srcs = [
+        "trapezoid_profile.cc",
+    ],
+    hdrs = [
+        "trapezoid_profile.h",
+    ],
+    linkopts = [
+        "-lm",
+    ],
+    deps = [
+        "//aos/common:time",
+        "//aos/common/logging",
+        "//third_party/eigen",
+    ],
 )
 
 cc_test(
-  name = 'trapezoid_profile_test',
-  srcs = [
-    'trapezoid_profile_test.cc',
-  ],
-  deps = [
-    ':trapezoid_profile',
-    '//aos/testing:googletest',
-  ],
+    name = "trapezoid_profile_test",
+    srcs = [
+        "trapezoid_profile_test.cc",
+    ],
+    deps = [
+        ":trapezoid_profile",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'wrapping_counter',
-  srcs = [
-    'wrapping_counter.cc',
-  ],
-  hdrs = [
-    'wrapping_counter.h',
-  ],
+    name = "wrapping_counter",
+    srcs = [
+        "wrapping_counter.cc",
+    ],
+    hdrs = [
+        "wrapping_counter.h",
+    ],
 )
 
 cc_test(
-  name = 'wrapping_counter_test',
-  srcs = [
-    'wrapping_counter_test.cc',
-  ],
-  deps = [
-    ':wrapping_counter',
-    '//aos/testing:googletest',
-  ],
+    name = "wrapping_counter_test",
+    srcs = [
+        "wrapping_counter_test.cc",
+    ],
+    deps = [
+        ":wrapping_counter",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'options',
-  hdrs = [
-    'options.h',
-  ],
+    name = "options",
+    hdrs = [
+        "options.h",
+    ],
 )
 
 cc_test(
-  name = 'options_test',
-  srcs = [
-    'options_test.cc',
-  ],
-  deps = [
-    ':options',
-    '//aos/testing:googletest',
-  ],
+    name = "options_test",
+    srcs = [
+        "options_test.cc",
+    ],
+    deps = [
+        ":options",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'compiler_memory_barrier',
-  hdrs = [
-    'compiler_memory_barrier.h',
-  ],
+    name = "compiler_memory_barrier",
+    hdrs = [
+        "compiler_memory_barrier.h",
+    ],
 )
 
 cc_library(
-  name = 'global_factory',
-  hdrs = [
-    'global_factory.h'
-  ],
+    name = "global_factory",
+    hdrs = [
+        "global_factory.h",
+    ],
 )
 
 cc_test(
-  name = 'global_factory_test',
-  srcs = [
-    'global_factory_test.cc'
-  ],
-  deps = [
-    '//aos/testing:googletest',
-    ':global_factory'
-  ],
+    name = "global_factory_test",
+    srcs = [
+        "global_factory_test.cc",
+    ],
+    deps = [
+        ":global_factory",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'linked_list',
-  hdrs = [
-    'linked_list.h',
-  ],
-  deps = [
-    '//aos/common:transaction',
-  ],
+    name = "linked_list",
+    hdrs = [
+        "linked_list.h",
+    ],
+    deps = [
+        "//aos/common:transaction",
+    ],
 )
 
 cc_test(
-  name = 'linked_list_test',
-  srcs = [
-    'linked_list_test.cc',
-  ],
-  deps = [
-    ':linked_list',
-    '//aos/testing:googletest',
-    '//aos/common/logging',
-  ],
+    name = "linked_list_test",
+    srcs = [
+        "linked_list_test.cc",
+    ],
+    deps = [
+        ":linked_list",
+        "//aos/common/logging",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_test(
-  name = 'phased_loop_test',
-  srcs = [
-    'phased_loop_test.cc',
-  ],
-  deps = [
-    ':phased_loop',
-    '//aos/testing:googletest',
-    '//aos/testing:test_logging',
-  ],
+    name = "phased_loop_test",
+    srcs = [
+        "phased_loop_test.cc",
+    ],
+    deps = [
+        ":phased_loop",
+        "//aos/testing:googletest",
+        "//aos/testing:test_logging",
+    ],
 )
 
 cc_library(
-  name = 'file',
-  hdrs = [
-    'file.h',
-  ],
-  srcs = [
-    'file.cc',
-  ],
-  deps = [
-    '//aos/common:scoped_fd',
-  ],
+    name = "file",
+    srcs = [
+        "file.cc",
+    ],
+    hdrs = [
+        "file.h",
+    ],
+    deps = [
+        "//aos/common:scoped_fd",
+    ],
 )
 
 cc_test(
-  name = 'file_test',
-  srcs = [
-    'file_test.cc',
-  ],
-  deps = [
-    ':file',
-    '//aos/testing:googletest',
-    '//aos/testing:test_logging',
-  ],
-  size = 'small',
+    name = "file_test",
+    size = "small",
+    srcs = [
+        "file_test.cc",
+    ],
+    deps = [
+        ":file",
+        "//aos/testing:googletest",
+        "//aos/testing:test_logging",
+    ],
+)
+
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    visibility = ["//visibility:public"],
+    deps = ["//aos/common:python_init"],
 )
diff --git a/aos/common/util/__init__.py b/aos/common/util/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aos/common/util/__init__.py
diff --git a/aos/externals/seasocks/gen_embedded.py b/aos/externals/seasocks/gen_embedded.py
index 416e37b..fdcdfd9 100755
--- a/aos/externals/seasocks/gen_embedded.py
+++ b/aos/externals/seasocks/gen_embedded.py
@@ -39,7 +39,7 @@
     with open(f, 'rb') as file:
       bytes = file.read()
     o.write('{"/%s", {' % os.path.basename(f))
-    o.write('"' + "".join(['\\x%02x' % ord(x) for x in bytes]) + '"')
+    o.write('"' + "".join(['\\x%02x' % x for x in bytes]) + '"')
     o.write(',%d }},' % len(bytes))
 
   o.write("""