]>
git.saurik.com Git - apple/xnu.git/blob - SETUP/config/mkheaders.c
2 * Copyright (c) 1999-2006 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.0 (the 'License'). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
22 * @APPLE_LICENSE_HEADER_END@
25 * Mach Operating System
26 * Copyright (c) 1990 Carnegie-Mellon University
27 * Copyright (c) 1989 Carnegie-Mellon University
28 * Copyright (c) 1988 Carnegie-Mellon University
29 * Copyright (c) 1987 Carnegie-Mellon University
30 * All rights reserved. The CMU software License Agreement specifies
31 * the terms and conditions for use and redistribution.
35 * Copyright (c) 1980 Regents of the University of California.
36 * All rights reserved.
38 * Redistribution and use in source and binary forms are permitted
39 * provided that the above copyright notice and this paragraph are
40 * duplicated in all such forms and that any documentation,
41 * advertising materials, and other materials related to such
42 * distribution and use acknowledge that the software was developed
43 * by the University of California, Berkeley. The name of the
44 * University may not be used to endorse or promote products derived
45 * from this software without specific prior written permission.
46 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
47 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
48 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
52 static char sccsid
[] __attribute__((used
)) = "@(#)mkheaders.c 5.5 (Berkeley) 6/18/88";
56 * Make all the .h files for the optional entries
60 #include <unistd.h> /* unlink */
65 static void do_count(const char *dev
, const char *hname
, int search
);
66 static void do_header(const char *dev
, const char *hname
, int count
);
67 static char *toheader(const char *dev
);
68 static char *tomacro(const char *dev
);
75 for (fl
= ftab
; fl
!= 0; fl
= fl
->f_next
)
77 do_count(fl
->f_needs
, fl
->f_needs
, 1);
81 * count all the devices of a certain type and recurse to count
82 * whatever the device is connected to
85 do_count(const char *dev
, const char *hname
, int search
)
90 for (count
= 0,dp
= dtab
; dp
!= 0; dp
= dp
->d_next
)
91 if (eq(dp
->d_name
, dev
)) {
92 if (dp
->d_type
== PSEUDO_DEVICE
) {
94 dp
->d_slave
!= UNKNOWN
? dp
->d_slave
: 1;
100 do_header(dev
, hname
, count
);
104 do_header(const char *dev
, const char *hname
, int count
)
109 struct file_list
*fl
= NULL
; /* may exit for(;;) uninitted */
110 struct file_list
*fl_head
, *fl_prev
;
114 file
= toheader(hname
);
115 name
= tomacro(dev
?dev
:hname
) + (dev
== NULL
);
116 inf
= fopen(file
, "r");
120 outf
= fopen(file
, "w");
125 fprintf(outf
, "#define %s %d\n", name
, count
);
127 file
= path("meta_features.h");
128 outf
= fopen(file
, "a");
133 fprintf(outf
, "#include <%s.h>\n", hname
);
140 if ((inw
= get_word(inf
)) == 0 || inw
== (char *)EOF
)
142 if ((inw
= get_word(inf
)) == 0 || inw
== (char *)EOF
)
146 if (cp
== 0 || cp
== (char *)EOF
)
149 if (eq(inwcopy
, name
)) {
154 if (cp
== (char *)EOF
)
156 fl
= (struct file_list
*) malloc(sizeof *fl
);
159 fl
->f_next
= fl_head
;
163 if (count
== oldcount
) {
167 free((char *)fl_prev
);
171 if (oldcount
== -1) {
172 fl
= (struct file_list
*) malloc(sizeof *fl
);
175 fl
->f_next
= fl_head
;
179 outf
= fopen(file
, "w");
184 for (fl
= fl_head
; fl
!= 0; fl
= fl
->f_next
) {
185 fprintf(outf
, "#define %s %d\n",
186 fl
->f_fn
, count
? fl
->f_type
: 0);
193 * convert a dev name to a .h file name
196 toheader(const char *dev
)
198 static char hbuf
[MAXPATHLEN
];
199 (void) snprintf(hbuf
, sizeof hbuf
, "%s.h", path(dev
));
200 hbuf
[MAXPATHLEN
-1] = '\0';
205 * convert a dev name to a macro name
208 tomacro(const char *dev
)
210 static char mbuf
[FILENAME_MAX
];
219 *cp
++ = toupper(*dev
++);