]> git.donarmstrong.com Git - lilypond.git/blob - lily/kpath.cc
* Documentation/user/tutorial.itely: Revised (continued).
[lilypond.git] / lily / kpath.cc
1 /*   
2   kpath.cc -- glue kpathsea to lily. Need some ugly kludges for gcc 2.96
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2000--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9 #include <stdio.h>
10 #include <string.h>
11
12 /*
13
14 The problem, as far as I can tell, is that MacOS X has its getopt
15 prototype in <unistd.h>, while I think other operating systems have it
16 in other places. <unistd.h> is included by kpathsea.h, so you end up
17 renaming both conflicting prototypes to YAKLUDGE.
18
19 I found a somewhat more elegant patch for this: Just #include
20 <unistd.h> before defining YAKLUDGE.
21
22 */
23 #include <unistd.h>     
24 #include "config.h"
25
26 #define popen REALLYUGLYKLUDGE
27 #define pclose ANOTHERREALLYUGLYKLUDGE
28 #define getopt YAKLUDGE
29
30 #if HAVE_KPATHSEA_KPATHSEA_H
31 extern "C" {
32 #include <kpathsea/kpathsea.h>
33 #include <kpathsea/tex-file.h>
34 }
35 #endif
36
37 #include "file-path.hh"
38 #include "string.hh"
39 #include "main.hh"
40 #include "kpath.hh"
41 #include "warn.hh"
42
43 String
44 kpathsea_find_afm (char const * name)
45 {
46 #if (KPATHSEA && HAVE_KPSE_FIND_FILE)
47   char * name_ptr =  kpse_find_file (name, kpse_afm_format, true);
48
49   if (!name_ptr)
50     {
51   /*
52     don't mutter about afms, since we try to find them first, and lots of
53     TFMs don't have AFMs. 
54    */
55       //      warning (_f ("kpathsea couldn't find AFM file `%s'", name));
56     }
57   else
58     return name_ptr;
59   
60 #endif
61   return "";
62 }
63
64 String
65 kpathsea_find_tfm (char const * name)
66 {
67   String p = global_path.find (String (name) + ".tfm");
68
69   if (p.length ())
70     return p;
71   
72 #if (KPATHSEA && HAVE_KPSE_FIND_FILE)
73   char * name_ptr =  kpse_find_file (name, kpse_tfm_format, true);
74   if (!name_ptr)
75     warning (_f ("kpathsea can not find TFM file: `%s'", name));
76   else
77     return name_ptr;
78   
79 #endif
80   return "";
81 }
82
83
84 void
85 initialize_kpathsea (char *av0)
86 {
87 #if KPATHSEA && HAVE_KPATHSEA_KPATHSEA_H
88   /*
89     We take two pronged approach to tfms:
90
91     * the lilypond tfms (feta*.tfm) are found through our own routines.
92
93     * the TeX tfms are found through vanilla kpathsea.
94
95     (* other TFMs are not found, i.e. don't use them. )
96
97     PRO:
98  
99     - TFM and AFM checksums always match in Lily.
100
101     - less hassle, no kpathsea spaghetti
102
103     CON:
104
105     - feta PK files are often recreated, locally
106     Solution: cache PK files locally?
107
108     - need env. vars to make sure that TeX finds the TFMs
109
110     - Outdated PK (TFM?) font files are not automatically removed,
111     since VERSION is not part of the standard location.
112
113
114     ALTERNATIVE
115
116     we have tried to come up with schemes that leave this kind of work
117     to kpathsea with objective of fixing the CONs, but miserably
118     failed. TeX installations and kpathsea itself form a buggy,
119     inconsistent, and unorderly mess.
120     
121   */
122
123   /*
124    initialize kpathsea
125    */
126   kpse_set_program_name (av0, NULL);
127   kpse_maketex_option ("tfm", TRUE);
128 #endif
129 }
130
131