pike.git / lib / master.pike.in

version» Context lines:

pike.git/lib/master.pike.in:1:   // -*- Pike -*-   //   // Master Control Program for Pike.   //   // This file is part of Pike. For copyright information see COPYRIGHT.   // Pike is distributed under GPL, LGPL and MPL. See the file COPYING   // for more information.   // - // $Id: master.pike.in,v 1.254 2004/03/16 14:14:49 grubba Exp $ + // $Id: master.pike.in,v 1.255 2004/03/22 17:41:00 mast Exp $      #pike __REAL_VERSION__      // Some programs destroys character pairs beginning with the currency   // symbol when running in chinese locale.   #if "ยค/" != "\244/"   #error "master.pike.in is corrupted."   #endif      // --- Some configurable parameters
pike.git/lib/master.pike.in:724:    {    DEC_RESOLV_MSG_DEPTH();    resolv_debug ("low_findprog %s: compilation failed\n", fname);    objects[ret] = no_value;    ret=programs[fname]=0; // Negative cache.    throw(e);    }    DEC_RESOLV_MSG_DEPTH();    resolv_debug ("low_findprog %s: compilation ok\n", fname);    break; +    #if constant(load_module)    case ".so":    if (fname == "") {    werror( "low_findprog(\"%s\", \"%s\") => load_module(\"\")\n"    "%s\n", pname, ext, describe_backtrace(backtrace()) );    }    -  ret=load_module(fakeroot(fname)); +  if (array|object err = catch (ret=load_module(fakeroot(fname)))) { +  if (objectp (err) && err->is_dlopen_error) { +  // Do not treat errors from dlopen(3) as exceptions since in +  // a dist we can have .so files that are dynamically linked +  // against libraries that don't exist on the system, and in +  // that case we should just treat the module as nonexisting. +  // +  // What we really want is to do this only for errors that +  // are due to nonexisting files, but the error reporting +  // from dlerror(3) doesn't allow us to tell those from other +  // errors. +  (handler && handler->compile_warning || compile_warning) +  (fname, 0, "Failed to load library: " + err->__dlerror); +  ret = 0; +  } +  else +  throw (err); +  } +     resolv_debug ("low_findprog %s: loaded binary\n", fname);   #endif /* load_module */    }       AUTORELOAD_FINISH(ret,programs,fname);       resolv_debug("low_findprog %s: returning %O\n", fname, ret);       return programs[fname]=ret;    }