Branch: Tag:

2000-09-26

2000-09-26 19:00:27 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

oops, I forgot to check some stuff in yesterday...

Rev: lib/7.0/include/simulate.h:1.1
Rev: lib/7.0/modules/Simulate.pmod:1.1
Rev: lib/7.0/modules/__default.pmod:1.1
Rev: lib/master.pike.in:1.132
Rev: lib/modules/ADT.pmod/Heap.pike:1.4
Rev: lib/modules/ADT.pmod/Priority_queue.pike:1.3
Rev: lib/modules/ADT.pmod/Queue.pike:1.2
Rev: lib/modules/ADT.pmod/Table.pmod:1.13
Rev: lib/modules/ADT.pmod/struct.pike:1.7
Rev: lib/modules/Array.pmod:1.45
Rev: lib/modules/Cache.pmod/Data.pike:1.2
Rev: lib/modules/Cache.pmod/Policy.pmod/Base.pike:1.2
Rev: lib/modules/Cache.pmod/Policy.pmod/Multiple.pike:1.2
Rev: lib/modules/Cache.pmod/Policy.pmod/Null.pike:1.2
Rev: lib/modules/Cache.pmod/Policy.pmod/Sized.pike:1.2
Rev: lib/modules/Cache.pmod/Policy.pmod/Timed.pike:1.2
Rev: lib/modules/Cache.pmod/Storage.pmod/Base.pike:1.3
Rev: lib/modules/Cache.pmod/Storage.pmod/Gdbm.pike:1.3
Rev: lib/modules/Cache.pmod/Storage.pmod/Memory.pike:1.3
Rev: lib/modules/Cache.pmod/Storage.pmod/MySQL.pike:1.2
Rev: lib/modules/Cache.pmod/Storage.pmod/Yabu.pike:1.3
Rev: lib/modules/Cache.pmod/cache.pike:1.3
Rev: lib/modules/Calendar.pmod/Austrian.pmod:1.3
Rev: lib/modules/Calendar.pmod/Calendar.pike:1.2
Rev: lib/modules/Calendar.pmod/Coptic.pmod:1.2
Rev: lib/modules/Calendar.pmod/Discordian.pmod:1.2
Rev: lib/modules/Calendar.pmod/Event.pmod:1.6
Rev: lib/modules/Calendar.pmod/Gregorian.pmod:1.2
Rev: lib/modules/Calendar.pmod/ISO.pmod:1.2
Rev: lib/modules/Calendar.pmod/Islamic.pmod:1.2
Rev: lib/modules/Calendar.pmod/Julian.pmod:1.2
Rev: lib/modules/Calendar.pmod/Language.pmod:1.5
Rev: lib/modules/Calendar.pmod/Namedays.pmod:1.2
Rev: lib/modules/Calendar.pmod/Roman.pmod:1.2
Rev: lib/modules/Calendar.pmod/Ruleset.pike:1.4
Rev: lib/modules/Calendar.pmod/Stardate.pmod:1.2
Rev: lib/modules/Calendar.pmod/Swedish.pmod:1.3
Rev: lib/modules/Calendar.pmod/TZnames.pmod:1.4
Rev: lib/modules/Calendar.pmod/Time.pmod:1.3
Rev: lib/modules/Calendar.pmod/TimeRanges.pmod:1.7
Rev: lib/modules/Calendar.pmod/Timezone.pmod:1.9
Rev: lib/modules/Calendar.pmod/YMD.pmod:1.11
Rev: lib/modules/Calendar.pmod/mkrules.pike:1.3
Rev: lib/modules/Calendar.pmod/module.pmod:1.5
Rev: lib/modules/Colors.pmod:1.5
Rev: lib/modules/Crypto.pmod:1.5
Rev: lib/modules/Crypto/_rsa.pike:1.4
Rev: lib/modules/Crypto/des3.pike:1.5
Rev: lib/modules/Crypto/des3_cbc.pike:1.3
Rev: lib/modules/Crypto/des_cbc.pike:1.3
Rev: lib/modules/Crypto/dsa.pike:1.8
Rev: lib/modules/Crypto/hmac.pike:1.6
Rev: lib/modules/Crypto/idea_cbc.pike:1.3
Rev: lib/modules/Crypto/randomness.pmod:1.17
Rev: lib/modules/Crypto/rsa.pike:1.26
Rev: lib/modules/Debug.pmod/werror.pmod:1.4
Rev: lib/modules/Filesystem.pmod/System.pike:1.5
Rev: lib/modules/Filesystem.pmod/Tar.pmod:1.8
Rev: lib/modules/Filesystem.pmod/module.pmod:1.7
Rev: lib/modules/Function.pmod:1.2
Rev: lib/modules/GDK.pmod:1.8
Rev: lib/modules/GLU.pmod:1.7
Rev: lib/modules/GTKSupport.pmod/Alert.pike:1.4
Rev: lib/modules/GTKSupport.pmod/MenuFactory.pmod:1.4
Rev: lib/modules/GTKSupport.pmod/SClist.pike:1.5
Rev: lib/modules/GTKSupport.pmod/Util.pmod:1.7
Rev: lib/modules/GTKSupport.pmod/pCtree.pike:1.4
Rev: lib/modules/GTKSupport.pmod/pDrawingArea.pike:1.4
Rev: lib/modules/Geography.pmod/Countries.pmod:1.3
Rev: lib/modules/Geography.pmod/Position.pike:1.3
Rev: lib/modules/Getopt.pmod:1.10
Rev: lib/modules/Gnome.pmod:1.2
Rev: lib/modules/Graphics.pmod/Graph.pmod/create_bars.pike:1.2
Rev: lib/modules/Graphics.pmod/Graph.pmod/create_graph.pike:1.3
Rev: lib/modules/Graphics.pmod/Graph.pmod/create_pie.pike:1.3
Rev: lib/modules/Graphics.pmod/Graph.pmod/module.pmod:1.3
Rev: lib/modules/Graphics.pmod/Graph.pmod/polyline.pike:1.2
Rev: lib/modules/Graphics.pmod/Graph.pmod/test.pike:1.3
Rev: lib/modules/LR.pmod/Grammar_parser.pmod:1.9
Rev: lib/modules/LR.pmod/item.pike:1.5
Rev: lib/modules/LR.pmod/lr.pike:1.4
Rev: lib/modules/LR.pmod/parser.pike:1.23
Rev: lib/modules/LR.pmod/priority.pike:1.3
Rev: lib/modules/LR.pmod/rule.pike:1.6
Rev: lib/modules/LR.pmod/scanner.pike:1.2
Rev: lib/modules/Languages.pmod/PLIS.pmod:1.9
Rev: lib/modules/Locale.pmod/Charset.pmod:1.2
Rev: lib/modules/Locale.pmod/Gettext.pmod:1.2
Rev: lib/modules/Locale.pmod/module.pmod:1.3
Rev: lib/modules/Parser.pmod/C.pmod:1.15
Rev: lib/modules/Parser.pmod/Pike.pmod:1.3
Rev: lib/modules/Parser.pmod/XML.pmod/Simple.pike:1.2
Rev: lib/modules/Parser.pmod/XML.pmod/Tree.pmod:1.4
Rev: lib/modules/Parser.pmod/module.pmod:1.2
Rev: lib/modules/Process.pmod:1.28
Rev: lib/modules/Program.pmod:1.2
Rev: lib/modules/Protocols.pmod/DNS.pmod:1.50
Rev: lib/modules/Protocols.pmod/HTTP.pmod/Query.pike:1.19
Rev: lib/modules/Protocols.pmod/HTTP.pmod/module.pmod:1.15
Rev: lib/modules/Protocols.pmod/IMAP.pmod/dummy_server.pike:1.6
Rev: lib/modules/Protocols.pmod/IMAP.pmod/imap_server.pike:1.19
Rev: lib/modules/Protocols.pmod/IMAP.pmod/parse_line.pike:1.24
Rev: lib/modules/Protocols.pmod/IMAP.pmod/parser.pike:1.11
Rev: lib/modules/Protocols.pmod/IMAP.pmod/requests.pmod:1.88
Rev: lib/modules/Protocols.pmod/IMAP.pmod/server.pike:1.13
Rev: lib/modules/Protocols.pmod/IMAP.pmod/types.pmod:1.26
Rev: lib/modules/Protocols.pmod/IRC.pmod/Client.pike:1.3
Rev: lib/modules/Protocols.pmod/IRC.pmod/Error.pmod:1.2
Rev: lib/modules/Protocols.pmod/IRC.pmod/Raw.pike:1.3
Rev: lib/modules/Protocols.pmod/IRC.pmod/Requests.pmod:1.2
Rev: lib/modules/Protocols.pmod/Ident.pmod:1.8
Rev: lib/modules/Protocols.pmod/LDAP.pmod/client.pike:1.19
Rev: lib/modules/Protocols.pmod/LDAP.pmod/ldap_privates.pmod:1.5
Rev: lib/modules/Protocols.pmod/LDAP.pmod/protocol.pike:1.5
Rev: lib/modules/Protocols.pmod/LPD.pmod:1.5
Rev: lib/modules/Protocols.pmod/Line.pmod:1.10
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/ASync.pmod:1.2
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Connection.pike:1.6
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Helper.pmod:1.4
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/ProtocolTypes.pmod:1.6
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Raw.pike:1.9
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Request.pmod:1.6
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Session.pike:1.20
Rev: lib/modules/Protocols.pmod/LysKOM.pmod/Threads.pike:1.6
Rev: lib/modules/Protocols.pmod/NNTP.pmod:1.8
Rev: lib/modules/Protocols.pmod/Ports.pmod:1.6
Rev: lib/modules/Protocols.pmod/SMTP.pmod:1.12
Rev: lib/modules/Protocols.pmod/TELNET.pmod:1.10
Rev: lib/modules/Protocols.pmod/X.pmod/Atom.pmod:1.6
Rev: lib/modules/Protocols.pmod/X.pmod/Auth.pmod:1.8
Rev: lib/modules/Protocols.pmod/X.pmod/Extensions.pmod:1.9
Rev: lib/modules/Protocols.pmod/X.pmod/Requests.pmod:1.27
Rev: lib/modules/Protocols.pmod/X.pmod/Types.pmod:1.33
Rev: lib/modules/Protocols.pmod/X.pmod/XImage.pmod:1.15
Rev: lib/modules/Protocols.pmod/X.pmod/XTools.pmod:1.5
Rev: lib/modules/Protocols.pmod/X.pmod/Xlib.pmod:1.40
Rev: lib/modules/Protocols.pmod/X.pmod/_Types.pmod:1.4
Rev: lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod:1.14
Rev: lib/modules/Protocols.pmod/X.pmod/db/convert_compose.pike:1.3
Rev: lib/modules/Remote.pmod/Client.pike:1.8
Rev: lib/modules/Remote.pmod/Server.pike:1.8
Rev: lib/modules/Remote.pmod/call.pike:1.6
Rev: lib/modules/Remote.pmod/connection.pike:1.18
Rev: lib/modules/Remote.pmod/context.pike:1.11
Rev: lib/modules/Remote.pmod/obj.pike:1.4
Rev: lib/modules/Sql.pmod/msql.pike:1.8
Rev: lib/modules/Sql.pmod/mysql.pike:1.11
Rev: lib/modules/Sql.pmod/mysql_result.pike:1.3
Rev: lib/modules/Sql.pmod/odbc.pike:1.6
Rev: lib/modules/Sql.pmod/odbc_result.pike:1.3
Rev: lib/modules/Sql.pmod/oracle.pike:1.5
Rev: lib/modules/Sql.pmod/postgres.pike:1.10
Rev: lib/modules/Sql.pmod/postgres_result.pike:1.3
Rev: lib/modules/Sql.pmod/rsql.pike:1.5
Rev: lib/modules/Sql.pmod/sql.pike:1.39
Rev: lib/modules/Sql.pmod/sql_result.pike:1.6
Rev: lib/modules/Sql.pmod/sql_util.pmod:1.5
Rev: lib/modules/Sql.pmod/sybase.pike:1.4
Rev: lib/modules/Stack.pmod:1.6
Rev: lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod:1.10
Rev: lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod:1.5
Rev: lib/modules/Standards.pmod/ASN1.pmod/Types.pmod:1.15
Rev: lib/modules/Standards.pmod/ISO639_2.pmod:1.3
Rev: lib/modules/Standards.pmod/PKCS.pmod/CSR.pmod:1.7
Rev: lib/modules/Standards.pmod/PKCS.pmod/Certificate.pmod:1.7
Rev: lib/modules/Standards.pmod/PKCS.pmod/DSA.pmod:1.4
Rev: lib/modules/Standards.pmod/PKCS.pmod/Identifiers.pmod:1.9
Rev: lib/modules/Standards.pmod/PKCS.pmod/PFX.pmod:1.5
Rev: lib/modules/Standards.pmod/PKCS.pmod/RSA.pmod:1.13
Rev: lib/modules/Standards.pmod/PKCS.pmod/Signature.pmod:1.3
Rev: lib/modules/Stdio.pmod/Readline.pike:1.36
Rev: lib/modules/Stdio.pmod/Terminfo.pmod:1.10
Rev: lib/modules/Stdio.pmod/module.pmod:1.88
Rev: lib/modules/String.pmod:1.12
Rev: lib/modules/Thread.pmod:1.22
Rev: lib/modules/Tools.pmod/Hilfe.pmod:1.15
Rev: lib/modules/Tools.pmod/Install.pmod:1.8
Rev: lib/modules/Tools.pmod/PEM.pmod:1.7
Rev: lib/modules/Tools.pmod/X509.pmod:1.11
Rev: lib/modules/Tools.pmod/_PEM.pmod:1.3
Rev: lib/modules/Tools.pmod/sed.pmod:1.2
Rev: lib/modules/Yabu.pmod/module.pmod:1.23
Rev: lib/modules/Yabu.pmod/test.pike:1.7
Rev: lib/modules/_Image.pmod/module.pmod:1.10
Rev: lib/modules/_Image_PS.pmod:1.3
Rev: lib/modules/_Image_PSD.pmod:1.8
Rev: lib/modules/_Image_XCF.pmod:1.11
Rev: lib/modules/_Image_XPM.pmod:1.11
Rev: lib/modules/__builtin.pmod:1.2
Rev: lib/modules/error.pmod:1.3

1:   /* -*- Pike -*-    * -  * $Id: master.pike.in,v 1.131 2000/09/24 01:37:01 per Exp $ +  * $Id: master.pike.in,v 1.132 2000/09/26 18:58:56 hubbe Exp $    *    * Master-file for Pike.    *
9:      // Some configurable parameters useful for debugging    + #pike __VERSION__   #define PIKE_AUTORELOAD      // Used by describe_backtrace() et al.
94:   #define UNDEFINED (([])[0])   #define error(X) throw( ({ (X), backtrace()/*[0..sizeof(backtrace())-2]*/ }) )    - array(string) pike_include_path=({}); - array(string) pike_module_path=({}); - array(string) pike_program_path=({}); +    int want_warnings = PIKE_WARNINGS;      #ifdef PIKE_AUTORELOAD
131:      #endif    + int compat_major=-1; + int compat_minor=-1; +    program compile_string(string data, void|string name, object|void handler)   { -  return compile(cpp(data,name||"-", 0, handler), handler); +  return compile(cpp(data,name||"-", 0, handler, compat_major, compat_minor), +  handler, +  compat_major, +  compat_minor);   }      
149:   {    AUTORELOAD_CHECK_FILE(file);    return compile(cpp(master_read_file(file), -  file, 1, handler), handler); +  file, 1, handler, compat_major, compat_minor), handler, +  compat_major, compat_minor );   }      
259:   #endif   }    - void add_include_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_include_path-=({tmp}); -  pike_include_path=({tmp})+pike_include_path; - } -  - void remove_include_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_include_path-=({tmp}); - } -  - void add_module_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_module_path-=({tmp}); -  pike_module_path=({tmp})+pike_module_path; - } -  -  - void remove_module_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_module_path-=({tmp}); - } -  -  - void add_program_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_program_path-=({tmp}); -  pike_program_path=({tmp})+pike_program_path; - } -  -  - void remove_program_path(string tmp) - { -  tmp=normalize_path(combine_path_with_cwd(tmp)); -  pike_program_path-=({tmp}); - } -  -  +    mapping (string:program) programs=(["/master":object_program(this_object())]);      #define capitalize(X) (upper_case((X)[..0])+(X)[1..])
901:    return fc[path]=dirnode(path);   }    +  +  + multiset no_resolv = (<>); + class CompatResolver + { +  array(string) pike_include_path=({}); +  array(string) pike_module_path=({}); +  array(string) pike_program_path=({}); +  int want_warnings = PIKE_WARNINGS; +  string ver; +  +  void create(mixed v) +  { +  ver=(string)v; +  } +  +  void add_include_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_include_path-=({tmp}); +  pike_include_path=({tmp})+pike_include_path; +  } +  +  void remove_include_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_include_path-=({tmp}); +  } +  +  void add_module_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_module_path-=({tmp}); +  pike_module_path=({tmp})+pike_module_path; +  } +  +  +  void remove_module_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_module_path-=({tmp}); +  } +  +  +  void add_program_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_program_path-=({tmp}); +  pike_program_path=({tmp})+pike_program_path; +  } +  +  +  void remove_program_path(string tmp) +  { +  tmp=normalize_path(combine_path_with_cwd(tmp)); +  pike_program_path-=({tmp}); +  } +  +  mapping get_default_module() +  { +  /* This is an ugly kluge to avoid an infinite recursion. +  * The infinite recursion occurs because this function is +  * called for every file when the compat_major/minor is set. +  * This kluge could cause problems with threads if the +  * compiler was threaded. -Hubbe +  */ +  int saved_compat_minor=compat_minor; +  int saved_compat_major=compat_major; +  compat_minor=-1; +  compat_major=-1; +  +  mixed x; +  mixed err =catch { +  if(x=resolv("__default.all_constants")) x=x(); +  }; +  +  compat_major=saved_compat_major; +  compat_minor=saved_compat_minor; +  if(err) throw(err); +  return x; +  } +    mixed resolv_base(string identifier, string|void current_file)   {    array(mixed) tmp = ({});
937:    }    return UNDEFINED;   } - multiset no_resolv = (<>); +     mapping resolv_cache = set_weak_flag( ([]), 1 );    mixed resolv(string identifier, string|void current_file)    {    if( no_resolv[ identifier ] )    return UNDEFINED; -  +     mixed ret;    string id=identifier+":"+(current_file ? dirname(current_file) : "-");    if( !zero_type (ret = resolv_cache[id]) )
954:    return ret;   }    +  /* This function is called whenever an #include directive is encountered +  * it receives the argument for #include and should return the file name +  * of the file to include +  */ +  string handle_include(string f, +  string current_file, +  int local_include) +  { +  array(string) tmp; +  string path; +  +  if(local_include) +  { +  tmp=EXPLODE_PATH(current_file); +  tmp[-1]=f; +  path=combine_path_with_cwd(tmp*"/"); +  } +  else +  { +  foreach(pike_include_path, path) +  { +  path=combine_path(path,f); +  if(master_file_stat(fakeroot(path))) +  break; +  else +  path=0; +  } +  +  } +  +  return path; +  } +  +  string read_include(string f) +  { +  AUTORELOAD_CHECK_FILE(f) +  return master_read_file(f); +  } +  +  +  string _sprintf() +  { +  return sprintf("CompatResolver(%s)",ver); +  } + } +  + inherit CompatResolver; +    // These are useful if you want to start other Pike processes   // with the same options as this one was started with.   string _pike_file_name;
1021:    }       q=tmp->find_all_options(argv,({ +  ({"compat_version",tmp->HAS_ARG,({"-V","--compat"})}),    ({"version",tmp->NO_ARG,({"-v","--version"})}),    ({"help",tmp->NO_ARG,({"-h","--help"})}),    ({"execute",tmp->HAS_ARG,({"-e","--execute"})}),
1049:    {    switch(q[i][0])    { +  case "compat_version": +  sscanf(q[i][1],"%d.%d",compat_major,compat_minor); +  break;   #ifdef PIKE_AUTORELOAD    case "autoreload":    autoreload_on++;
1165:       case "execute":    random_seed(time() + (getpid() * 0x11111111)); -  compile_string("#include <simulate.h>\nmixed create(){"+opts[1]+";}")(); +  compile_string("mixed create(){"+opts[1]+";}")();    exit(0);       case "preprocess":
1382:   }       - /* This function is called whenever an #include directive is encountered -  * it receives the argument for #include and should return the file name -  * of the file to include -  * Note that previous_object cannot be trusted in ths function, because -  * the compiler calls this function. -  */ - string handle_include(string f, -  string current_file, -  int local_include) - { -  array(string) tmp; -  string path; +     -  if(local_include) -  { -  tmp=EXPLODE_PATH(current_file); -  tmp[-1]=f; -  path=combine_path_with_cwd(tmp*"/"); -  } -  else -  { -  foreach(pike_include_path, path) -  { -  path=combine_path(path,f); -  if(master_file_stat(fakeroot(path))) -  break; -  else -  path=0; -  } -  -  } -  -  return path; - } -  - string read_include(string f) - { -  AUTORELOAD_CHECK_FILE(f) -  return master_read_file(f); - } -  +    class Describer   {    int clipped=0;
1897:    o->_decode(data);    }   } +  +  + class Version + { +  int major; +  int minor; +  void create(int maj, int min) +  { +  major=maj; +  minor=min; +  } +  + #define CMP(X) (major - (X)->major) || (minor - (X)->minor) +  +  int `<(Version v) { return CMP(v) < 0; } +  int `>(Version v) { return CMP(v) > 0; } +  int `==(Version v) { return CMP(v)== 0; } +  int _hash() { return major * 4711 + minor ; } +  +  string _sprintf() { return sprintf("%d.%d",major,minor); } +  mixed cast(string type) +  { +  switch(type) +  { +  case "string": +  return sprintf("%d.%d",major,minor); +  } +  } + } +  + Version currentversion=Version(__MAJOR__,__MINOR__); + mapping(Version:CompatResolver) compat_handler_cache=set_weak_flag( ([]), 1); +  + CompatResolver get_compilation_handler(int major, int minor) + { +  CompatResolver ret; +  +  Version v=Version(major,minor); +  +  if(v > currentversion) +  { +  /* do we want to make an error if major.minor > __MAJOR__.__MINOR ? */ +  return 0; +  } +  +  if(!zero_type(ret=compat_handler_cache[v])) return ret; +  +  array(Version) available=({}); +  + #if "¤share_prefix¤"[0]!='¤' +  foreach(get_dir("¤share_prefix¤"), string ver) +  { +  if(sscanf(ver,"%d.%d",int maj, int min)) +  { +  Version x=Version(maj, min) ; +  if(x >= v) +  available|=({ x }); +  } +  } + #endif +  + #if "¤lib_prefix¤"[0]!='¤' +  foreach(get_dir("¤lib_prefix¤"), string ver) +  { +  if(sscanf(ver,"%d.%d",int maj, int min)) +  { +  Version x=Version(maj, min) ; +  if(x >= v) +  available|=({ x }); +  } +  } + #endif +  +  sort(available); +  + #ifndef RESOLVER_HACK +  /* We need to define RESOLVER_HACK when we add +  * version-specific stuff in the CompatResolver. +  * As long as all the compatibility is done in the +  * module dierctories, RESOLVER_HACK can be undefined +  */ +  +  /* No compat needed */ +  if(!sizeof(available)) +  { +  compat_handler_cache[v]=0; +  return 0; +  } +  +  /* Same as available[0] */ +  if(ret=compat_handler_cache[available[0]]) +  return compat_handler_cache[v]=ret; + #endif +  +  ret=CompatResolver(v); +  if( v < Version(0,6)) +  ret->pike_module_path+=({"."}); +  +  foreach(available, Version v) +  { +  string base; + #if "¤lib_prefix¤"[0]!='¤' +  base=combine_path("¤lib_prefix¤",sprintf("%s",v)); +  ret->add_module_path(combine_path(base,"modules")); +  ret->add_include_path(combine_path(base,"include")); + #endif +  + #if "¤share_prefix¤"[0]!='¤' +  base=combine_path("¤share_prefix¤",sprintf("%s",v)); +  ret->add_module_path(combine_path(base,"modules")); +  ret->add_include_path(combine_path(base,"include")); + #endif +  } +  +  /* Add default paths */ +  map(pike_module_path,ret->add_module_path); +  map(pike_include_path,ret->add_include_path); +  +  compat_handler_cache[v] = ret; +  + #ifndef RESOLVER_HACK +  compat_handler_cache[available[0]] = ret; /* may be equal to 'v' */ + #endif +  +  return ret; + } +  + string _sprintf() + { +  return "master()"; + }