diff --git a/lib/master.pike b/lib/master.pike index 580a2622e2095ee3a17cc198d4e0ec3179235465..a68d23a60049fbe0664c5cd0ad4955793282f0da 100644 --- a/lib/master.pike +++ b/lib/master.pike @@ -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])) { diff --git a/src/Makefile.in b/src/Makefile.in index 89add6954c4d365e793f0b1095d539cc177f9e8d..e68bf8a7fa200469d08fa85e2b3fa975cccb1dd6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -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 diff --git a/src/module.c b/src/module.c index 6fd8d2f2f5096ee97e7908f56e241837f979d026..9b7b673a716be0a372185f96a1648a5dc1aa2867 100644 --- a/src/module.c +++ b/src/module.c @@ -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); } diff --git a/src/modules/Makefile.in b/src/modules/Makefile.in index f7e96c5a0cf4978dd2a96a94e9b8324f5435789a..5eca6b1ec7f13e0b1eb23034d80fbcf592626365 100644 --- a/src/modules/Makefile.in +++ b/src/modules/Makefile.in @@ -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 diff --git a/src/modules/dynamic_module_makefile.in b/src/modules/dynamic_module_makefile.in index deaab448f75317a2b2ec7f12a36ef4a4e3595746..28844953fb564903ee03e4a960162b589e059173 100644 --- a/src/modules/dynamic_module_makefile.in +++ b/src/modules/dynamic_module_makefile.in @@ -1,26 +1,22 @@ 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) diff --git a/src/modules/static_module_makefile.in b/src/modules/static_module_makefile.in index 54c95dcc4a316e8eadfafb075944500979addcd4..a18980f8c323176980bb74fee83ec8aa4d6f8338 100644 --- a/src/modules/static_module_makefile.in +++ b/src/modules/static_module_makefile.in @@ -1,27 +1,24 @@ 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: +