blob: dde624cd099d653ea4ac7e56b744a83251a90985 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// secure/master/autoinclude.c -- module of the master object: Autoincludes
4//
5// $Id: master.c 7041 2008-10-13 18:18:27Z Zesstra $
6
7#define PRAGMA(x) "#pragma "x"\n"
8
MG Mud User88f12472016-06-24 23:31:02 +02009#define RTTCHECKS PRAGMA("rtt_checks")
Zesstra9b788912021-05-08 12:00:37 +020010#define DEFAULTS PRAGMA("save_types,warn_unused_variables,\
11 warn_applied_functions,warn_dead_code")
MG Mud User88f12472016-06-24 23:31:02 +020012
13// geschachteltes Mapping in toplevel.region.magier Hierarchie.
14// Wichtig: jede Hierarchiebene _muss_ ein Mapping sein, welches einen Eintrag
15// 0 als Default enthaelt, welcher einen Strings als Wert hat.
16// Ausnahme: die letzte Ebene (Magierebene), die muss ein String ein.
17private nosave mapping autoincludes = ([
18 "d": ([
19 "inseln": ([
20 0: "",
21 "zesstra": PRAGMA("strong_types") RTTCHECKS,
22 ]),
23 0: "",
24 ]),
25 "std": ([
Zesstraac5b06f2019-11-26 21:20:03 +010026 0: PRAGMA("strong_types") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020027 ]),
28 "items": ([
Zesstraac5b06f2019-11-26 21:20:03 +010029 0: PRAGMA("strong_types") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020030 ]),
31 "secure": ([
Zesstraac5b06f2019-11-26 21:20:03 +010032 0: PRAGMA("strong_types,range_check") RTTCHECKS,
MG Mud User88f12472016-06-24 23:31:02 +020033 ]),
34 "p": ([
35 0: "",
36 "daemon": ([
37 0: PRAGMA("strong_types") RTTCHECKS
38 ]),
39 "service": ([
40 0: ""
41 ]),
42 ]),
43 0: DEFAULTS,
44]);
45
46string autoincludehook(string base_file, string current_file, int sys_include)
47{
48 mapping topleveldir, region; // mappings for spezialisiertere Pfade
49 string ainc_string;
50
51 // Wenn current_file != 0 ist, wird gerade vom kompilierten Objekt
52 // <base_file> etwas (indirekt) inkludiert. Dort duerfen die Pragmas
53 // keinesfalls reingeschrieben werden.
54 if (current_file)
55 return 0;
56
57 string res=autoincludes[0]; // global default.
58
59 string *p_arr = explode(base_file,"/")-({""});
60 //DEBUG(sprintf("AINC: File: %O, Pfad: %O\n",base_file, p_arr));
61
62 if (sizeof(p_arr) && m_contains(&topleveldir, autoincludes, p_arr[0])) {
Zesstra0d7c6482021-05-07 09:44:56 +020063 // p_arr[0]: d, p, std, etc.
MG Mud User88f12472016-06-24 23:31:02 +020064 // erst wird der Defaulteintrag 0 genommen
65 res += topleveldir[0];
66 if (sizeof(p_arr) > 1 && m_contains(&region, topleveldir, p_arr[1])) {
67 // p_arr[1] ebene, polar, unterwelt, service, ...
68 // erst den Defaulteintrag der Region nehmen
69 res += region[0];
70 if (sizeof(p_arr) > 2 && m_contains(&ainc_string, region, p_arr[2])) {
71 // p_arr[2]: magiername. Fuer den Magier was hinterlegt.
72 res += ainc_string;
73 }
74 }
75 }
76 // Fuer aeltere Files schalten wir einige Warnungen explizit aus. :-(
77 // (1407179680 == "Mon, 4. Aug 2014, 21:14:40")
Zesstra0d7c6482021-05-07 09:44:56 +020078 // (1609455600 == "Fre, 1. Jan 2021, 00:00:00")
Zesstra085be172019-05-27 22:04:04 +020079 // Auf anderen Rechnern als dem Mudrechner werden die Warnungen nur
80 // eingeschaltet, wenn die Files seit dem Mudstart geaendert wurden.
81 // Hintergrund: bei kopierten Mudlibs werden oft die mtimes geaendert und
82 // dann scrollt auf einmal alles. Aber wenn man nach dem Mudstart was
83 // aendert, ist es vermutlich ne einzelne, gezielte Aenderung an einem File.
MG Mud User88f12472016-06-24 23:31:02 +020084#if MUDHOST == __HOST_NAME__
Zesstra0d7c6482021-05-07 09:44:56 +020085 int ftime = call_sefun("file_time", base_file);
86 if (ftime < 1407179680)
87 {
Zesstra9b788912021-05-08 12:00:37 +020088 res += PRAGMA("no_warn_missing_return, no_warn_unused_variables\
89 no_warn_dead_code");
Zesstra0d7c6482021-05-07 09:44:56 +020090 }
91 else if (ftime < 1609455600)
92 {
Zesstra9b788912021-05-08 12:00:37 +020093 res += PRAGMA("no_warn_unused_variables,no_warn_dead_code");
Zesstra0d7c6482021-05-07 09:44:56 +020094 }
Zesstra085be172019-05-27 22:04:04 +020095#else
96 if (call_sefun("file_time", base_file) < __BOOT_TIME__)
Zesstra085be172019-05-27 22:04:04 +020097 {
Zesstra9b788912021-05-08 12:00:37 +020098 res += PRAGMA("no_warn_missing_return,no_warn_unused_variables\
99 no_warn_dead_code");
MG Mud User88f12472016-06-24 23:31:02 +0200100 }
Zesstra0d7c6482021-05-07 09:44:56 +0200101#endif
MG Mud User88f12472016-06-24 23:31:02 +0200102 //DEBUG(res);
103 return res;
104}
105#undef RTTCHECKS
106#undef DEFAULTS
107#undef PRAGMA
108
109