Skip to content
Snippets Groups Projects
Commit 1a8e1430 authored by Fredrik Hübinette (Hubbe)'s avatar Fredrik Hübinette (Hubbe)
Browse files

module system remade..

Rev: lib/master.pike:1.31
Rev: src/Makefile.in:1.15
Rev: src/module.c:1.4
Rev: src/modules/Makefile.in:1.7
Rev: src/modules/dynamic_module_makefile.in:1.4
Rev: src/modules/static_module_makefile.in:1.3
parent 2565f414
No related branches found
No related tags found
No related merge requests found
......@@ -278,16 +278,15 @@ varargs mixed resolv(string identifier, string current_file)
{
foreach(pike_module_path, path)
{
path=combine_path(path,identifier);
if(ret=findmodule(path)) break;
string file=combine_path(path,identifier);
if(ret=findmodule(file)) break;
}
}
if(!ret)
{
string path=combine_path(pike_library_path+"/modules",identifier);
if(!(ret=findmodule(path)))
ret=_static_modules[identifier];
ret=findmodule(path);
}
if(ret)
......@@ -316,14 +315,12 @@ void _main(string *argv, string *env)
add_constant("getenv",getenv);
add_constant("putenv",putenv);
add_constant("write",_static_modules.files.file("stdout")->write);
add_constant("write",_static_modules.files()->file("stdout")->write);
a=backtrace()[-1][0];
q=a/"/";
pike_library_path = q[0..sizeof(q)-2] * "/";
tmp=resolv("Getopt");
add_include_path(pike_library_path+"/include");
add_module_path(pike_library_path+"/modules");
......@@ -333,6 +330,8 @@ void _main(string *argv, string *env)
q=(getenv("PIKE_MODULE_PATH")||"")/":"-({""});
for(i=sizeof(q)-1;i>=0;i--) add_module_path(q[i]);
tmp=resolv("Getopt");
q=tmp->find_all_options(argv,({
({"version",tmp->NO_ARG,({"-v","--version"})}),
({"help",tmp->NO_ARG,({"-h","--help"})}),
......@@ -413,7 +412,14 @@ void _main(string *argv, string *env)
argv=argv[1..];
}
script=cast_to_object(argv[0], getcwd()+"/");
program tmp=compile_file(argv[0]);
if(!tmp)
{
werror("Pike: Couldn't find script to execute.\n");
exit(1);
}
object script=tmp();
if(!script->main)
{
......@@ -508,6 +514,13 @@ string handle_include(string f,
return path;
}
// FIXME
string stupid_describe(mixed m)
{
if(intp(m)) return (string)m;
return sprintf("%t",m);
}
/* It is possible that this should be a real efun,
* it is currently used by handle_error to convert a backtrace to a
* readable message.
......@@ -544,8 +557,14 @@ string describe_backtrace(mixed *trace)
row="";
if(sizeof(tmp)>=3 && functionp(tmp[2]))
{
row=function_name(tmp[2])+" in ";
row=function_name(tmp[2])+"(";
}
for(int e=3;e<sizeof(tmp);e++)
{
row+=stupid_describe(tmp[e])+",";
}
row=row[..sizeof(row)-2]+") in ";
if(sizeof(tmp)>=2 && stringp(tmp[0]) && intp(tmp[1]))
{
......
......@@ -12,17 +12,18 @@ SRCDIR=@srcdir@
VPATH=@srcdir@
# These are used while compiling
TMP_LIBDIR = @LIBDIR@
LIBDIR_SRC = @LIBDIR@
TMP_BINDIR = @BINDIR@
TMP_BUILDDIR = @BUILDDIR@
TMP_DOCDIR = @DOCDIR@
TMP_LIBDIR = $(TMP_BUILDDIR)/lib
prefix = @prefix@
exec_prefix = $(prefix)/bin
lib_prefix = $(prefix)/lib/pike
#
# use bison please, yacc doesn't always work good enough.
# use bison please, yacc isn't good enough.
#
YACC=@YACC@
YFLAGS=-d -v
......@@ -56,7 +57,7 @@ CPP=@CPP@
LD=$(CC)
LDFLAGS=$(CFLAGS) @LDFLAGS@ @LINKFORSHARED@
RUNPIKE=$(TMP_BUILDDIR)/pike -DNOT_INSTALLED -m $(TMP_LIBDIR)/master.pike -M$(TMP_BUILDDIR)/modules $(PIKEOPTS)
RUNPIKE=$(TMP_BUILDDIR)/pike -m $(TMP_LIBDIR)/master.pike $(PIKEOPTS)
MAKE_FLAGS = "prefix=$(prefix)" "exec_prefix=$(exec_prefix)" "CC=$(CC)" "OTHERFLAGS=$(OTHERFLAGS)" "TMP_BINDIR=$(TMP_BINDIR)" "DEFINES=$(DEFINES)" "TMP_LIBDIR=$(TMP_LIBDIR)" "RUNPIKE=$(RUNPIKE)" "INSTALL=$(INSTALL)"
......@@ -113,22 +114,22 @@ all: module_objects
pike: $(OBJ) modules/linker_options modules/lib_dirs
-mv pike pike.old
$(LD) $(LDFLAGS) $(OBJ) `cat modules/linker_options` @SET_RUN_PATH@ $(LIBS) -o pike
$(LD) $(LDFLAGS) $(OBJ) `cat modules/linker_options` $(LIBS) -o pike
# purify
pure: $(OBJ) module_objects
-mv pike pike.old
purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 $(LD) $(LDFLAGS) $(OBJ) `cat modules/linker_options` @SET_RUN_PATH@ $(LIBS) -o pike
purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 gcc $(LDFLAGS) $(OBJ) `cat modules/linker_options` $(LIBS) -o pike
# purecov
cover: $(OBJ) module_objects
-mv pike pike.old
purecov purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 $(LD) $(LDFLAGS) $(OBJ) `cat modules/linker_options` @SET_RUN_PATH@ $(LIBS) -o pike
purecov purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 gcc $(LDFLAGS) $(OBJ) `cat modules/linker_options` $(LIBS) -o pike
# quantify
quant: $(OBJ) module_objects
-mv pike pike.old
quantify $(LD) $(LDFLAGS) $(OBJ) `cat modules/linker_options` @SET_RUN_PATH@ $(LIBS) -o pike
quantify gcc $(LDFLAGS) $(OBJ) `cat modules/linker_options` $(LIBS) -o pike
# install
install:
......@@ -141,10 +142,7 @@ install:
if [ ! -d "$(prefix)/include" ]; then mkdir "$(prefix)/include"; chmod 755 "$(prefix)/include"; fi
if [ ! -d "$(prefix)/include/pike" ]; then mkdir "$(prefix)/include/pike"; chmod 755 "$(prefix)/include/pike"; fi
$(INSTALL) $(SRCDIR)/*.h *.h $(prefix)/include/pike
$(INSTALL) $(TMP_LIBDIR)/master.pike $(lib_prefix)
cp -r $(TMP_LIBDIR)/include $(lib_prefix)
cp -r $(TMP_LIBDIR)/modules $(lib_prefix)
-( cd modules; ${MAKE} $(MAKE_FLAGS) install )
cp -r $(TMP_LIBDIR) $(lib_prefix)
# tidy up a bit
tidy:
......@@ -200,6 +198,9 @@ gdb_verify: testsuite
run_hilfe:
$(RUNPIKE) $(TMP_BINDIR)/hilfe
lib: $(LIBDIR_SRC) $(LIBDIR_SRC)/master.pike
cp -r $(LIBDIR_SRC) .
# make export archive (requires compiled Pike)
# Do not compile in source tree if you want to use this!
# Beware that export archive this includes bison/yacc/byacc source
......@@ -234,7 +235,7 @@ html_docs: docs
#
# Pike internal targets
#
module_objects: global.h $(SRCDIR)/language.h
module_objects: global.h $(SRCDIR)/language.h lib
( cd modules ; ${MAKE} $(MAKE_FLAGS) )
language.o: $(SRCDIR)/language.c $(SRCDIR)/object.h $(SRCDIR)/interpret.h $(SRCDIR)/program.h
......
......@@ -43,17 +43,13 @@ void init_modules(void)
for(e=0;e<NELEM(module_list);e++)
{
struct program *p;
struct object *o;
struct pike_string *s;
start_new_program();
module_list[e].init();
p=end_program();
o=clone(p,0);
free_program(p);
push_text(module_list[e].name);
push_object(o);
push_program(p);
mapping_insert(m, sp-2, sp-1);
pop_n_elems(2);
}
......
......@@ -10,7 +10,7 @@ all: modules
modules:
for a in $(MODULES) ; do echo making $$a ; ( cd $$a ; $(MAKE) $(MAKE_FLAGS) MODNAME=$$a) ; done
$(MAKE) linker_options lib_dirs modlist.h modlist_headers.h
$(MAKE) linker_options lib_dirs modlist.h modlist_headers.h module_list
modlist.h: $(MODULE_SEGMENTS)
( for a in $(MODULES) ; do cat $$a/modlist_segment ; done ; ) >modlist.h
......@@ -19,14 +19,7 @@ modlist_headers.h: $(MODULE_SEGMENTS)
( for a in $(MODULES) ; do cat $$a/modlist_segment; done ) | sed -e 's/^.*{.*,\(.*\),\(.*\).*}.*$$/void \1(void),\2(void);/' >modlist_headers.h
linker_options: $(MODULE_LINKOPTS)
( for a in $(MODULES) ; do cat $$a/linker_options ; done ; ) >linker_options
lib_dirs: $(MODULE_LINKOPTS)
( ( if test -f master_lib_dirs; then cat master_lib_dirs; else :; fi; \
for a in $(MODULES) ; do \
if test -f $$a/lib_dirs ; then cat $$a/lib_dirs ; else : ; fi ; \
done ; ) | sort | uniq | tr '\012' ':'; echo "" )| \
sed -e 's/:$$//' -e 's/^/-R/' -e 's/^-R$$//' >lib_dirs
( for a in $(MODULES) ; do cat $$a/linker_options; done ; ) >linker_options
depend:
for a in $(MODULES) ; do ( cd $$a ; ${MAKE} $(MAKE_FLAGS) MODNAME=$$a depend ) ; done
......
PREFLAGS=$(DEFINES) -I. -I$(SRCDIR) -I$(SRCDIR)/../.. -I../.. -I. $(MODULE_CPPFLAGS)
CFLAGS=$(PREFLAGS) $(OTHERFLAGS) @CCSHARED@ $(MODULE_CFLAGS)
all: module.@SO@ linker_options modlist_segment modlist_headers
MAKE_FLAGS = "prefix=$(prefix)" "exec_prefix=$(exec_prefix)" "CC=$(CC)" "OTHERFLAGS=$(OTHERFLAGS)" "TMP_BINDIR=$(TMP_BINDIR)" "DEFINES=$(DEFINES)" "TMP_LIBDIR=$(TMP_LIBDIR)" "RUNPIKE=$(RUNPIKE)" "INSTALL=$(INSTALL)"
linker_options:
echo "" >linker_options
all: module.@SO@ dummy
modlist_headers:
dummy:
echo "" >linker_options
echo "" >modlist_headers
modlist_segment:
echo "" >modlist_segment
tmp="$(INSTALL_NAME)" ; if test x$$tmp = x ; then tmp="$(MODNAME)"; fi ; $(INSTALL) module.so $(TMP_LIBDIR)/modules/$$tmp.so
module.so: $(OBJS)
@LDSHARED@ -o module.@SO@ $(OBJS) $(MODULE_LDFLAGS)
$(TMP_BINDIR)/smartlink "@LDSHARED@" -o module.@SO@ $(OBJS) $(MODULE_LDFLAGS)
if test @SO@ != so ; then mv module.@SO@ module.so ; fi
echo "" >linker_options
echo "" >modlist_headers
echo "" >modlist_segment
clean:
-rm -f *.o module.so
-rm -f *.o *.a *.so module.so
depend:
gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(TMP_BINDIR)/fixdepends.sh $(SRCDIR)
......
PREFLAGS=$(DEFINES) -I. -I$(SRCDIR) -I$(SRCDIR)/../.. -I../.. -I. -Dpike_module_init=pike_module_$(MODNAME)_init -Dpike_module_exit=pike_module_$(MODNAME)_exit $(MODULE_CPPFLAGS)
CFLAGS=$(PREFLAGS) $(OTHERFLAGS) $(MODULE_CFLAGS)
all: module.a modlist_segment modlist_headers linker_options
MAKE_FLAGS = "prefix=$(prefix)" "exec_prefix=$(exec_prefix)" "CC=$(CC)" "OTHERFLAGS=$(OTHERFLAGS)" "TMP_BINDIR=$(TMP_BINDIR)" "DEFINES=$(DEFINES)" "TMP_LIBDIR=$(TMP_LIBDIR)" "RUNPIKE=$(RUNPIKE)" "INSTALL=$(INSTALL)"
module.a: $(OBJS)
-rm -f module.a
ar cq module.a $(OBJS)
-@RANLIB@ module.a
echo >linker_options modules/$(MODNAME)/module.a $(MODULE_LDFLAGS)
echo >modlist_headers "void pike_module_$(MODNAME)_init(void), pike_module_$(MODNAME)_exit(void);"
echo >modlist_segment " ,{ \"$(MODNAME)\", pike_module_$(MODNAME)_init, pike_module_$(MODNAME)_exit } "
all: module.a dummy
linker_options:
dummy:
echo >linker_options modules/$(MODNAME)/module.a $(MODULE_LDFLAGS)
modlist_headers:
echo >modlist_headers "void pike_module_$(MODNAME)_init(void), pike_module_$(MODNAME)_exit(void);"
modlist_segment:
echo >modlist_segment " ,{ \"$(MODNAME)\", pike_module_$(MODNAME)_init, pike_module_$(MODNAME)_exit } "
echo >module.pmod "inherit _static_modules.$(MODNAME);"
tmp="$(INSTALL_NAME)" ; if test x$$tmp = x ; then tmp="$(MODNAME)"; fi ; $(INSTALL) module.pmod $(TMP_LIBDIR)/modules/$$tmp.pmod
module.a: $(OBJS)
-rm -f module.a
ar cq module.a $(OBJS)
-@RANLIB@ module.a
clean:
-rm -f *.o *.a
-rm -f *.o *.a *.so module.so module.pmod
depend:
gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(TMP_BINDIR)/fixdepends.sh $(SRCDIR)
......@@ -43,3 +40,4 @@ gdb_verify: module_testsuite
@rm .gdbinit
install:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment