| exports_files(["pex_rules.bzl", "testlauncher.sh.template"]) |
| |
| # Can't use pex_binary to build this one, so we have this elaborate ritual: |
| PRE_EXECUTE = [ |
| 'OUTDIR=$$(cd $(@D) && pwd)', |
| ] |
| |
| DARWIN_EXECUTE = [ |
| '# Workaround really long shebang lines breaking on linux:', |
| '# Use a /tmp path, but keep the actual venv inside the bazel outdir.', |
| '# Avoids having to worry about cleanup, even if sandboxing is off.', |
| 'TMPF=$$(mktemp -d -t pex.XXXXX)', |
| ] |
| |
| LINUX_EXECUTE = [ |
| '# Workaround really long shebang lines breaking on linux:', |
| '# Use a /tmp path, but keep the actual venv inside the bazel outdir.', |
| '# Avoids having to worry about cleanup, even if sandboxing is off.', |
| 'TMPF=$$(mktemp -d -p /tmp pex.XXXXX)', |
| ] |
| |
| POST_EXECUTE = [ |
| 'ln -sf "$$OUTDIR" "$$TMPF"', |
| 'VENV="$${TMPF}/venv"', |
| |
| '$(location @virtualenv//:virtualenv) --no-download --quiet --clear "$$VENV"', |
| 'PYTHON="$$VENV/bin/python"', |
| |
| '$$VENV/bin/pip install pex \ |
| --quiet --no-cache-dir --no-index --build $(@D)/pexbuild \ |
| --find-links $$(dirname $(location @pex_src//file)) \ |
| --find-links $$(dirname $(location @wheel_src//file)) \ |
| --find-links $$(dirname $(location @setuptools_src//file))', |
| |
| '# Work around setuptools insistance on writing to the source directory,', |
| '# which is discouraged by Bazel (and annoying)', |
| 'cp -r $$(dirname $(location wrapper/setup.py)) $(@D)/.pex_wrapper', |
| |
| '# Use the bootstrapped pex to build pex_wrapper.pex', |
| '$$VENV/bin/pex $(@D)/.pex_wrapper \ |
| --disable-cache --no-index -m pex_wrapper -o $@ \ |
| --find-links $$(dirname $(location @pex_src//file)) \ |
| --find-links $$(dirname $(location @setuptools_src//file)) \ |
| --find-links $$(dirname $(location @requests_src//file)) \ |
| --find-links $$(dirname $(location @wheel_src//file))', |
| ] |
| |
| genrule( |
| name = "pex_wrapper", |
| srcs = [ |
| "wrapper/setup.py", |
| "wrapper/pex_wrapper.py", |
| "wrapper/README", |
| "@setuptools_src//file", |
| "@wheel_src//file", |
| "@pex_src//file", |
| "@requests_src//file", |
| ], |
| tools = ["@virtualenv//:virtualenv"], |
| outs = ["pex_wrapper.pex"], |
| executable = True, |
| output_to_bindir = True, |
| message = "Bootstrapping pex", |
| cmd = select({ |
| "//tools/platform:darwin": "\n".join(PRE_EXECUTE + DARWIN_EXECUTE + POST_EXECUTE), |
| "//conditions:default": "\n".join(PRE_EXECUTE + LINUX_EXECUTE + POST_EXECUTE), |
| }), |
| visibility = ["//visibility:public"], |
| ) |