diff --git a/Makefile b/Makefile index cbe6086c..2993bd9a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ all: help +prefix=/usr EXTERNALS=externals +LIB_PATH=$(prefix)/share/pixie/ +BIN_PATH=$(prefix)/bin/pixie +DESTDIR= PYTHON ?= python2 PYTHONPATH=$$PYTHONPATH:$(EXTERNALS)/pypy @@ -18,17 +22,17 @@ help: @echo "make build_no_jit - build without jit" @echo "make fetch_externals - download and unpack external deps" -build_with_jit: fetch_externals +build_with_jit: fetch_externals standard_path.py @if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \ $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --opt=jit target.py && \ make compile_basics -build_no_jit: fetch_externals +build_no_jit: fetch_externals standard_path.py @if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \ $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) target.py && \ make compile_basics -build_no_jit_shared: fetch_externals +build_no_jit_shared: fetch_externals standard_path.py @if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \ $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --shared target.py && \ make compile_basics @@ -38,13 +42,13 @@ compile_basics: @echo -e "\n\n\n\nWARNING: Compiling core libs. If you want to modify one of these files delete the .pxic files first\n\n\n\n" ./pixie-vm -c pixie/uv.pxi -c pixie/io.pxi -c pixie/stacklets.pxi -c pixie/stdlib.pxi -c pixie/repl.pxi -build_preload_with_jit: fetch_externals +build_preload_with_jit: fetch_externals standard_path.py $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --opt=jit target_preload.py 2>&1 >/dev/null | grep -v 'WARNING' -build_preload_no_jit: fetch_externals +build_preload_no_jit: fetch_externals standard_path.py $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) target_preload.py -build: fetch_externals +build: fetch_externals standard_path.py $(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) $(JIT_OPTS) $(TARGET_OPTS) fetch_externals: $(EXTERNALS)/pypy ./lib @@ -80,6 +84,14 @@ run_built_tests: pixie-vm run_interpreted_tests: target.py PYTHONPATH=$(PYTHONPATH) $(PYTHON) target.py run-tests.pxi +standard_path.py: + echo "standard_path = \"$(LIB_PATH)\"" > $@ + +install: pixie-vm + install -D pixie-vm $(DESTDIR)$(BIN_PATH) + install -d $(DESTDIR)$(LIB_PATH) + cp -R pixie $(DESTDIR)$(LIB_PATH) + compile_tests: find "tests" -name "*.pxi" | xargs -L1 ./pixie-vm -l "tests" -c @@ -95,3 +107,5 @@ clean: clean_pxic rm -rf ./externals rm -f ./pixie-vm rm -f ./*.pyc + +.PHONY: standard_path.py compile_tests compile_src clean_pxic clean install diff --git a/target.py b/target.py index 7eb8932c..2320d0aa 100644 --- a/target.py +++ b/target.py @@ -11,6 +11,7 @@ from pixie.vm.atom import Atom from pixie.vm.persistent_vector import EMPTY as EMPTY_VECTOR from pixie.vm.util import unicode_from_utf8, unicode_to_utf8 +from standard_path import standard_path import sys import os import os.path as path @@ -236,6 +237,14 @@ def add_to_load_paths(path): rt.reset_BANG_(LOAD_PATHS.deref(), rt.conj(rt.deref(LOAD_PATHS.deref()), rt.wrap(path))) +def add_env_to_load_path(): + pp = os.environ.get("PIXIE_PATH") + if pp is not None: + LP = rt.deref(LOAD_PATHS.deref()) + for path in pp.split(":"): + LP = rt.conj(LP, rt.wrap(path)) + LOAD_PATHS.set_root(Atom(LP)) + def init_load_path(self_path): if not path.isfile(self_path): self_path = find_in_path(self_path) @@ -248,6 +257,8 @@ def init_load_path(self_path): LOAD_PATHS.set_root(Atom(EMPTY_VECTOR.conj(rt.wrap(self_path)))) # just for run_load_stdlib (global variables can't be assigned to) load_path.set_root(rt.wrap(self_path)) + add_env_to_load_path() + LOAD_PATHS.set_root(Atom(rt.conj(rt.deref(LOAD_PATHS.deref()), rt.wrap(standard_path)))) def dirname(path): return rpath.sep.join(path.split(rpath.sep)[0:-1])