Commit 10effdf61e6ee3d35394acf58e7cdc7121798b36

David Turner 1999-12-29T00:22:24

Added the rules files `module.mk' to "sfnt", "truetype" and "type1" to reflect the new modules/drivers list management performed through the file `freetype2/config/modules.mk' Changed the driver header files to reflect the new modules/drivers list management. We get rid, at last, of the infamous pre-processor tricks used to build the list at compile time. `src/base/ftinit.c' is also modified to reflect the changes..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
diff --git a/src/base/ftdriver.h b/src/base/ftdriver.h
index 04cf748..fe24f46 100644
--- a/src/base/ftdriver.h
+++ b/src/base/ftdriver.h
@@ -573,68 +573,6 @@
 
   } FT_DriverInterface;
 
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_DriverChain                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A very structure used exclusively by "ftinit.c" in the function    */
-  /*    FT_Add_Default_Drivers. This function is in charge of loading the  */
-  /*    set of "default" font drivers into each new library object.        */
-  /*                                                                       */
-  /*    The set itself is determined at _compile_ time through various     */
-  /*    macro definitions.                                                 */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    next      :: pointer to next element in driver list chain          */
-  /*    interface :: pointer to the driver's interface                     */
-  /*                                                                       */
-  typedef struct FT_DriverChain_  FT_DriverChain;
-
-  struct FT_DriverChain_
-  {
-    const FT_DriverChain*      next;
-    const FT_DriverInterface*  interface;
-  };
-
-
-/*************************************************************************
- *
- *  Here is a template of the code that should appear in each
- *  font driver's _interface_ file (the one included by "ftinit.c").
- *
- *  It is used to build, at compile time, a simple linked list of
- *  the interfaces of the drivers which have been #included in 
- *  "ftinit.c". See the source code of the latter file for details
- *
- *  (Note that this is only required when you want your driver included
- *   in the set of default drivers loaded by FT_Init_FreeType. Other
- *   drivers can still be added manually at runtime with FT_Add_Driver.
- *
- * {
- *   #ifdef FTINIT_DRIVER_CHAIN
- *
- *   static
- *   const FT_DriverChain  ftinit_<FORMAT>_driver_chain =
- *   {
- *     FT_INIT_LAST_DRIVER_CHAIN,
- *     &<FORMAT>_driver_interface
- *   };
- * 
- *   #undef  FT_INIT_LAST_DRIVER_CHAIN
- *   #define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_<FORMAT>_driver_chain
- *
- *   #endif 
- * }
- *
- *  replace <FORMAT> with your driver's prefix
- *
- *************************************************************************/
-
-
 #endif /* FTDRIVER_H */
 
 
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index ca754ae..56f41f6 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -48,47 +48,25 @@
   ************************************************************************/
 
 #include <ftobjs.h>
-#include <ftdriver.h>
 #include <ftconfig.h>
 #include <ftdebug.h>
+#include <ftdriver.h>
 
 #undef  FT_COMPONENT
 #define FT_COMPONENT  trace_init
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* The macros FT_SUPPORT_xxxx are defined by Makefile.lib when this file */
-  /* is compiled.  They come from a make variable called FTINIT_MACROS     */
-  /* which is updated by each driver Makefile.                             */
-  /*                                                                       */
-  /* This means that when a driver isn't part of the build, ftinit.o       */
-  /* won't try to reference it.                                            */
-  /*                                                                       */
-  /*************************************************************************/
-
-#define  FTINIT_DRIVER_CHAIN
-#define  FT_INIT_LAST_DRIVER_CHAIN    ((FT_DriverChain*) 0)
-
-  /* Include the SFNT driver interface if needed */
-
-#ifdef FT_SUPPORT_SFNT
-#include "sfdriver.h"
-#endif
-
-  /* Include the TrueType driver interface if needed */
-
-#ifdef FT_SUPPORT_TRUETYPE
-#include "ttdriver.h"
-#endif
-
-
-  /* Include the Type1 driver interface if needed */
-
-#ifdef FT_SUPPORT_TYPE1
-#include "t1driver.h"
-#endif
+#undef  FT_DRIVER
+#define FT_DRIVER(x)  extern FT_DriverInterface x;
+#include <ftmodule.h>
 
+#undef  FT_DRIVER
+#define FT_DRIVER(x)  &x,
 
+static
+const FT_DriverInterface*  ft_default_drivers[] = {
+#include <ftmodule.h>
+  0
+};
 
   /*************************************************************************/
   /*                                                                       */
@@ -104,23 +82,20 @@
   EXPORT_FUNC
   void  FT_Default_Drivers( FT_Library  library )
   {
-    FT_Error               error;
-    const FT_DriverChain*  chain = FT_INIT_LAST_DRIVER_CHAIN;
+    FT_Error                   error;
+    const FT_DriverInterface* *cur;
 
-    while (chain)
+    cur = ft_default_drivers;
+    while (*cur)
     {
-      error = FT_Add_Driver( library, chain->interface );
-
+      error = FT_Add_Driver( library, *cur );
       /* notify errors, but don't stop */
       if (error)
       {
         FT_ERROR(( "FT.Default_Drivers: cannot install `%s', error = %x\n",
-                   chain->interface->driver_name,
-                   error ));
+                   (*cur)->driver_name, error ));
       }
-
-      chain = chain->next;
-      error = 0;  /* clear error */
+      cur++;
     }
   }
 
diff --git a/src/sfnt/module.mk b/src/sfnt/module.mk
new file mode 100644
index 0000000..66ae7d2
--- /dev/null
+++ b/src/sfnt/module.mk
@@ -0,0 +1,6 @@
+make_module_list: add_sfnt_driver
+
+add_sfnt_driver:
+	$(OPEN_DRIVER)sfnt_driver_interface$(CLOSE_DRIVER)
+	$(ECHO_DRIVER)sfnt      $(ECHO_DRIVER_DESC) pseudo-driver for TrueType & OpenType formats $(ECHO_DRIVER_DONE)
+
diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk
index 2aa008b..3232cad 100644
--- a/src/sfnt/rules.mk
+++ b/src/sfnt/rules.mk
@@ -161,12 +161,5 @@ $(OBJ_)sf%.$O: $(SFNT_DIR_)sf%.c $(BASE_H) $(SHARED_H) $(SFNT_DRV_H)
 DRV_OBJS_S += $(SFNT_DRV_OBJ_S)
 DRV_OBJS_M += $(SFNT_DRV_OBJ_M)
 
-
-# update `ftinit' variables
-#
-FTINIT_DRIVER_PATHS  += $(SFNT_DIR) $(SHARED)
-FTINIT_DRIVER_H      += $(SFNT_DRV_H)
-FTINIT_DRIVER_MACROS += FT_SUPPORT_SFNT
-
 endif
 # END
diff --git a/src/sfnt/sfdriver.h b/src/sfnt/sfdriver.h
index fd10d88..b0eb258 100644
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -25,58 +25,6 @@
   EXPORT_DEF
   const FT_DriverInterface  sfnt_driver_interface;
 
-
-
-/*************************************************************************
- *
- *  Here is a template of the code that should appear in each
- *  font driver's _interface_ file (the one included by "ftinit.c").
- *
- *  It is used to build, at compile time, a simple linked list of
- *  the interfaces of the drivers which have been #included in 
- *  "ftinit.c". See the source code of the latter file for details
- *
- *  (Note that this is only required when you want your driver included
- *   in the set of default drivers loaded by FT_Init_FreeType. Other
- *   drivers can still be added manually at runtime with FT_Add_Driver.
- *
- * {
- *   #ifdef FTINIT_DRIVER_CHAIN
- *
- *   static
- *   const FT_DriverChain  ftinit_<FORMAT>_driver_chain =
- *   {
- *     FT_INIT_LAST_DRIVER_CHAIN,
- *     &<FORMAT>_driver_interface
- *   };
- * 
- *   #undef  FT_INIT_LAST_DRIVER_CHAIN
- *   #define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_<FORMAT>_driver_chain
- *
- *   #endif 
- * }
- *
- *  replace <FORMAT> with your driver's prefix
- *
- *************************************************************************/
-
-
-#ifdef FTINIT_DRIVER_CHAIN
-
-  static
-  const FT_DriverChain  ftinit_sfnt_driver_chain =
-  {
-    FT_INIT_LAST_DRIVER_CHAIN,
-    &sfnt_driver_interface
-  };
-
-#undef  FT_INIT_LAST_DRIVER_CHAIN
-#define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_sfnt_driver_chain
-
-#endif /* FTINIT_DRIVER_CHAIN */ 
-
-
-
 #endif /* SFDRIVER_H */
 
 
diff --git a/src/truetype/module.mk b/src/truetype/module.mk
new file mode 100644
index 0000000..1c91526
--- /dev/null
+++ b/src/truetype/module.mk
@@ -0,0 +1,6 @@
+make_module_list: add_truetype_driver
+
+add_truetype_driver:
+	$(OPEN_DRIVER)tt_driver_interface$(CLOSE_DRIVER)
+	$(ECHO_DRIVER)truetype  $(ECHO_DRIVER_DESC) Windows/Mac font files with extension *.ttf or *.ttc $(ECHO_DRIVER_DONE)
+
diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk
index cba7ac1..3d029ef 100644
--- a/src/truetype/rules.mk
+++ b/src/truetype/rules.mk
@@ -195,11 +195,4 @@ $(OBJ_)ttpload.$O: $(TT_DIR_)ttpload.c $(BASE_H) $(SFNT_SRC) $(TT_DRV_H)
 DRV_OBJS_S += $(TT_DRV_OBJ_S)
 DRV_OBJS_M += $(TT_DRV_OBJ_M)
 
-
-# update `ftinit' variables
-#
-FTINIT_DRIVER_PATHS  += $(SFNT_DIR) $(TT_DIR) $(TT_EXT_DIR)
-FTINIT_DRIVER_H      += $(SFNT_H) $(TT_DRV_H)
-FTINIT_DRIVER_MACROS += FT_SUPPORT_TRUETYPE
-
 # END
diff --git a/src/truetype/ttdriver.h b/src/truetype/ttdriver.h
index eba67b6..16e20c3 100644
--- a/src/truetype/ttdriver.h
+++ b/src/truetype/ttdriver.h
@@ -135,58 +135,6 @@
   EXPORT_DEF
   const TT_DriverInterface  tt_format_interface;
 
-
-
-/*************************************************************************
- *
- *  Here is a template of the code that should appear in each
- *  font driver's _interface_ file (the one included by "ftinit.c").
- *
- *  It is used to build, at compile time, a simple linked list of
- *  the interfaces of the drivers which have been #included in 
- *  "ftinit.c". See the source code of the latter file for details
- *
- *  (Note that this is only required when you want your driver included
- *   in the set of default drivers loaded by FT_Init_FreeType. Other
- *   drivers can still be added manually at runtime with FT_Add_Driver.
- *
- * {
- *   #ifdef FTINIT_DRIVER_CHAIN
- *
- *   static
- *   const FT_DriverChain  ftinit_<FORMAT>_driver_chain =
- *   {
- *     FT_INIT_LAST_DRIVER_CHAIN,
- *     &<FORMAT>_driver_interface
- *   };
- * 
- *   #undef  FT_INIT_LAST_DRIVER_CHAIN
- *   #define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_<FORMAT>_driver_chain
- *
- *   #endif 
- * }
- *
- *  replace <FORMAT> with your driver's prefix
- *
- *************************************************************************/
-
-
-#ifdef FTINIT_DRIVER_CHAIN
-
-  static
-  const FT_DriverChain  ftinit_tt_driver_chain =
-  {
-    FT_INIT_LAST_DRIVER_CHAIN,
-    &tt_driver_interface
-  };
-
-#undef  FT_INIT_LAST_DRIVER_CHAIN
-#define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_tt_driver_chain
-
-#endif /* FTINIT_DRIVER_CHAIN */ 
-
-
-
 #endif /* TTDRIVER_H */
 
 
diff --git a/src/type1/module.mk b/src/type1/module.mk
new file mode 100644
index 0000000..0acc599
--- /dev/null
+++ b/src/type1/module.mk
@@ -0,0 +1,6 @@
+make_module_list: add_type1_driver
+
+add_type1_driver:
+	$(OPEN_DRIVER)t1_driver_interface$(CLOSE_DRIVER)
+	$(ECHO_DRIVER)type1     $(ECHO_DRIVER_DESC) Postscript font files with extension *.pfa or *.pfb $(ECHO_DRIVER_DONE)
+
diff --git a/src/type1/rules.mk b/src/type1/rules.mk
index adae99c..3c50a4d 100644
--- a/src/type1/rules.mk
+++ b/src/type1/rules.mk
@@ -156,12 +156,4 @@ $(OBJ_)t1%.$O: $(T1SHARED_DIR_)t1%.c $(BASE_H) $(T1SHARED_H)
 DRV_OBJS_S += $(T1_DRV_OBJ_S)
 DRV_OBJS_M += $(T1_DRV_OBJ_M)
 
-
-# update 'ftinit' variables
-#
-FTINIT_DRIVER_PATHS  += $(T1_DIR) $(T1SHARED_DIR)
-FTINIT_DRIVER_H      += $(T1_DRV_H)
-FTINIT_DRIVER_MACROS += FT_SUPPORT_TYPE1
-
-
 # END
diff --git a/src/type1/t1driver.h b/src/type1/t1driver.h
index 61a16b0..a442035 100644
--- a/src/type1/t1driver.h
+++ b/src/type1/t1driver.h
@@ -24,54 +24,5 @@
   EXPORT_DEF
   const  FT_DriverInterface  t1_driver_interface;
 
-
-/*************************************************************************
- *
- *  Here is a template of the code that should appear in each
- *  font driver's _interface_ file (the one included by "ftinit.c").
- *
- *  It is used to build, at compile time, a simple linked list of
- *  the interfaces of the drivers which have been #included in 
- *  "ftinit.c". See the source code of the latter file for details
- *
- *  (Note that this is only required when you want your driver included
- *   in the set of default drivers loaded by FT_Init_FreeType. Other
- *   drivers can still be added manually at runtime with FT_Add_Driver.
- *
- * {
- *   #ifdef FTINIT_DRIVER_CHAIN
- *
- *   static
- *   const FT_DriverChain  ftinit_<FORMAT>_driver_chain =
- *   {
- *     FT_INIT_LAST_DRIVER_CHAIN,
- *     &<FORMAT>_driver_interface
- *   };
- * 
- *   #undef  FT_INIT_LAST_DRIVER_CHAIN
- *   #define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_<FORMAT>_driver_chain
- *
- *   #endif 
- * }
- *
- *  replace <FORMAT> with your driver's prefix
- *
- *************************************************************************/
-
-#ifdef FTINIT_DRIVER_CHAIN
-
-  static
-  const FT_DriverChain  ftinit_t1_driver_chain =
-  {
-    FT_INIT_LAST_DRIVER_CHAIN,
-    &t1_driver_interface
-  };
-
-#undef  FT_INIT_LAST_DRIVER_CHAIN
-#define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_t1_driver_chain
-
-#endif /* FTINIT_DRIVER_CHAIN */ 
-
-
 #endif /* T1DRIVER_H */