ba303b000ee54bc665be4b052b9a3507262d82c5
[oweals/cde.git] / cde / programs / dtappbuilder / src / abmf / make_file.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23
24 /*
25  * $XConsortium: make_file.c /main/6 1996/06/28 08:31:16 mustafa $
26  * 
27  * @(#)make_file.c      3.53 19 Jan 1995        cde_app_builder/src/abmf
28  * 
29  * RESTRICTED CONFIDENTIAL INFORMATION:
30  * 
31  * The information in this document is subject to special restrictions in a
32  * confidential disclosure agreement between HP, IBM, Sun, USL, SCO and
33  * Univel.  Do not distribute this document outside HP, IBM, Sun, USL, SCO,
34  * or Univel without Sun's specific written approval.  This document and all
35  * copies and derivative works thereof must be returned or destroyed at Sun's
36  * request.
37  * 
38  * Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
39  * 
40  */
41
42
43 /*
44  * Create a make file that can be used to test the generated application.
45  */
46
47 #include <sys/param.h>
48 #include <sys/stat.h>
49 #include <stdio.h>
50 #include <ab/util_types.h>
51 #include <ab_private/abio.h>
52 #include "abmfP.h"
53 #include "obj_namesP.h"
54 #include "utilsP.h"
55 #include "write_cP.h"
56 #include "make_fileP.h"
57
58 #define MAX_LIBS        32
59
60 #define CODEGEN_MACRO   "DTCODEGEN"
61
62 typedef unsigned AbmfLibDesc;
63 #define LibNone         ((AbmfLibDesc)0)
64 #define LibDtHelp       ((AbmfLibDesc)1)
65 #define LibDtSvc        ((AbmfLibDesc)2)
66 #define LibDtTerm       ((AbmfLibDesc)3)
67 #define LibDtWidget     ((AbmfLibDesc)4)
68 #define LibX11          ((AbmfLibDesc)5)
69 #define LibXext         ((AbmfLibDesc)6)
70 #define LibXm           ((AbmfLibDesc)7)
71 #define LibXt           ((AbmfLibDesc)8)
72 #define LibWlarchive    ((AbmfLibDesc)9)
73 #define LibWldefault    ((AbmfLibDesc)10)
74 #define LibTt           ((AbmfLibDesc)11)
75 #define LibICE          ((AbmfLibDesc)12)
76 #define LibXp           ((AbmfLibDesc)13)
77 #define LibSM           ((AbmfLibDesc)14)
78
79 typedef struct
80 {
81     int         numLibs;
82     AbmfLibDesc libs[MAX_LIBS];
83 } AbmfLibsRec, *AbmfLibs;
84
85 #define ABMF_LIB_PREPEND        (-1)
86 #define ABMF_LIB_APPEND         (-2)
87 #define ABMF_LIB_REPLACE_DUP    (-3)
88 #define ABMF_LIB_REJECT_DUP     (-4)
89 #define ABMF_LIB_COMPLAIN_DUP   (-5)
90
91 static int      lib_find(AbmfLibs libs, AbmfLibDesc lib);
92 static int      lib_add(AbmfLibs libs, AbmfLibDesc lib, int where, int how);
93 static int      determine_libs(AbmfLibs libs, ABObj project, AB_OS_TYPE osType);
94
95 static STRING   cvt_to_obj(STRING fileName);
96 static int write_os_params(
97                         File            makeFile,
98                         AB_OS_TYPE      osType,
99                         AbmfLibs        libs
100                         );
101 static int write_aix_stuff(File makeFile, AbmfLibs libs);
102 static int write_hpux_stuff(File makeFile, AbmfLibs libs);
103 static int write_sunos_params(File makeFile, AbmfLibs libs);
104 static int write_unixware_params(File makeFile, AbmfLibs libs);
105 static int write_uxp_params(File makeFile, AbmfLibs libs);
106 static int write_osf1_stuff(File makeFile, AbmfLibs libs);
107 static int write_lnx_params(File makeFile, AbmfLibs libs);
108 static int write_fbsd_params(File makeFile, AbmfLibs libs);
109 static int write_nbsd_params(File makeFile, AbmfLibs libs);
110 static int write_obsd_params(File makeFile, AbmfLibs libs);
111
112 static int      determine_aix_libs(AbmfLibs libs, ABObj project);
113 static int      determine_hpux_libs(AbmfLibs libs, ABObj project);
114 static int      determine_sunos_libs(AbmfLibs libs, ABObj project);
115 static int      determine_unixware_libs(AbmfLibs libs, ABObj project);
116 static int      determine_uxp_libs(AbmfLibs libs, ABObj project);
117 static int      determine_osf1_libs(AbmfLibs libs, ABObj project);
118 static int      determine_lnx_libs(AbmfLibs libs, ABObj project);
119 static int      determine_fbsd_libs(AbmfLibs libs, ABObj project);
120 static int      determine_nbsd_libs(AbmfLibs libs, ABObj project);
121 static int      determine_obsd_libs(AbmfLibs libs, ABObj project);
122
123 static int      write_file_header(
124                         GenCodeInfo     genCodeInfo, 
125                         ABObj           project, 
126                         AB_OS_TYPE      osType
127                 );
128 static int      write_ab_params(
129                         GenCodeInfo     genCodeInfo, 
130                         ABObj           project
131                 );
132 static int      write_targets(
133                         GenCodeInfo     genCodeInfo,
134                         ABObj           project,
135                         AB_OS_TYPE      osType
136                 );
137
138 static int      write_local_libraries(
139                         File            makeFile, 
140                         AbmfLibs        libs,
141                         AB_OS_TYPE      osType
142                 );
143
144 static int write_codegen_macro(
145                         File            makeFile
146                 );
147
148 /*
149  * Write makefile.
150  */
151 int
152 abmfP_write_make_file(
153                       GenCodeInfo       genCodeInfo,
154                       ABObj             project,
155                       AB_OS_TYPE        osType,
156                       BOOL              useSourceBrowser
157 )
158 {
159     File        makeFile = genCodeInfo->code_file;
160     AbmfLibsRec libs;
161     libs.numLibs = 0;
162
163     determine_libs(&libs, project, osType);
164
165     write_file_header(genCodeInfo, project, osType);
166     write_os_params(makeFile, osType, &libs);
167     write_codegen_macro(makeFile);
168     write_ab_params(genCodeInfo, project);
169
170     /*
171      * Sun needs a NO_PARALLEL directive
172      */
173     if (osType == AB_OS_SUNOS)
174     {
175         abio_printf(genCodeInfo->code_file,
176 "\n"
177 ".NO_PARALLEL: $(TARGETS.h) $(TARGETS.h.merged) $(TARGETS.c) $(TARGETS.c.merged)\n"
178         );
179     }
180
181     write_targets(genCodeInfo, project, osType);
182
183     return 0;
184 }
185
186
187 static int
188 determine_libs(AbmfLibs libs, ABObj project, AB_OS_TYPE osType)
189 {
190     int                 return_value = 0;
191     CGenProjData        projData = mfobj_get_proj_data(project);
192
193     if (projData->has_ui_obj)
194     {
195         lib_add(libs, LibDtWidget, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
196         lib_add(libs, LibDtHelp, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
197         lib_add(libs, LibDtSvc, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
198         lib_add(libs, LibXm, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
199         lib_add(libs, LibXt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
200         lib_add(libs, LibXext, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
201         lib_add(libs, LibX11, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
202         lib_add(libs, LibICE, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
203         lib_add(libs, LibSM, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
204         lib_add(libs, LibXp, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
205
206         if (osType == AB_OS_HPUX)
207         {
208             lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
209         }
210     }
211
212     if (projData->has_terminal)
213     {
214         lib_add(libs, LibDtHelp, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
215         lib_add(libs, LibDtTerm, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
216     }
217
218 #if defined(USL) || defined(__uxp__)
219     if (1) /* Workaround because tooltalk not being used when needed */
220 #else
221     if (obj_get_tooltalk_level(project) != AB_TOOLTALK_NONE)
222 #endif
223         lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
224
225     switch(osType)
226     {
227         case AB_OS_AIX:
228                 return_value = determine_aix_libs(libs, project);
229                 break;
230
231         case AB_OS_HPUX:
232                 return_value = determine_hpux_libs(libs, project);
233                 break;
234
235         case AB_OS_SUNOS:
236                 return_value = determine_sunos_libs(libs, project);
237                 break;
238         case AB_OS_OSF1:
239                 return_value = determine_osf1_libs(libs, project);
240                 break;
241         case AB_OS_UNIXWARE:
242                 return_value = determine_unixware_libs(libs, project);
243                 break;
244         case AB_OS_UXP:
245                 return_value = determine_uxp_libs(libs, project);
246                 break;
247         case AB_OS_LNX:
248                 return_value = determine_lnx_libs(libs, project);
249                 break;
250         case AB_OS_FBSD:
251                 return_value = determine_fbsd_libs(libs, project);
252                 break;
253         case AB_OS_NBSD:
254                 return_value = determine_nbsd_libs(libs, project);
255                 break;
256         case AB_OS_OBSD:
257                 return_value = determine_obsd_libs(libs, project);
258                 break;
259     }
260
261     return return_value;
262 }
263
264 static int
265 determine_aix_libs(AbmfLibs libs, ABObj project)
266 {
267     return 0;
268 }
269
270
271 static int
272 determine_hpux_libs(AbmfLibs libs, ABObj project)
273 {
274     /*
275     lib_add(libs, LibWlarchive, ABMF_LIB_PREPEND, ABMF_LIB_REPLACE_DUP);
276     lib_add(libs, LibWldefault, ABMF_LIB_APPEND, ABMF_LIB_REPLACE_DUP);
277     */
278     return 0;
279 }
280
281
282 static int
283 determine_sunos_libs(AbmfLibs libs, ABObj project)
284 {
285     return 0;
286 }
287
288 static int
289 determine_uxp_libs(AbmfLibs libs, ABObj project)
290 {
291     return 0;
292 }
293
294 static int
295 determine_osf1_libs(AbmfLibs libs, ABObj project)
296 {
297     return 0;
298 }
299
300 static int
301 determine_unixware_libs(AbmfLibs libs, ABObj project)
302 {
303     return 0;
304 }
305
306 static int
307 determine_lnx_libs(AbmfLibs libs, ABObj project)
308 {
309     return 0;
310 }
311
312 static int
313 determine_fbsd_libs(AbmfLibs libs, ABObj project)
314 {
315     return 0;
316 }
317
318 static int
319 determine_nbsd_libs(AbmfLibs libs, ABObj project)
320 {
321     return 0;
322 }
323
324 static int
325 determine_obsd_libs(AbmfLibs libs, ABObj project)
326 {
327     return 0;
328 }
329
330 static STRING
331 get_string_for_lib(AbmfLibDesc lib, AB_OS_TYPE osType)
332 {
333     STRING      libString = NULL;
334
335     switch (lib)
336     {
337         case LibNone:
338             libString = abmfP_str_empty;
339         break;
340
341         case LibDtHelp:
342             libString = "-lDtHelp";
343         break;
344
345         case LibDtSvc:
346             libString = "-lDtSvc";
347         break;
348
349         case LibDtTerm:
350             libString = "-lDtTerm";
351         break;
352
353         case LibDtWidget:
354             libString = "-lDtWidget";
355         break;
356
357         case LibTt:
358             libString = "-ltt";
359         break;
360
361         case LibX11:
362             libString = "-lX11";
363         break;
364
365         case LibXext:
366             libString = "-lXext";
367         break;
368
369         case LibXm:
370             libString = "-lXm";
371         break;
372
373         case LibXt:
374             libString = "-lXt";
375         break;
376
377         case LibXp:
378             libString = "-lXp";
379         break;
380
381         case LibICE:
382             libString = "-lICE";
383         break;
384
385         case LibSM:
386             libString = "-lSM";
387         break;
388
389         case LibWlarchive:
390             libString = "-Wl,-a,archive";
391         break;
392
393         case LibWldefault:
394             libString = "-Wl,-a,default";
395         break;
396     }
397
398     return libString;
399 }
400
401
402 static int
403 lib_find(AbmfLibs libs, AbmfLibDesc lib)
404 {
405     int i;
406     int         numLibs = libs->numLibs;
407
408     for (i = 0; i < numLibs; ++i)
409     {
410         if (libs->libs[i] == lib)
411         {
412             return i;
413         }
414     }
415     return ERR_NOT_FOUND;
416 }
417
418
419 static int
420 lib_add(AbmfLibs libs, AbmfLibDesc lib, int where, int how)
421 {
422     int         pos = 0;
423     int         old_pos = -1;
424     
425     if ((old_pos = lib_find(libs, lib)) >= 0)
426     {
427         if (how == ABMF_LIB_REJECT_DUP)
428         {
429             return ERR_DUPLICATE_KEY;
430         }
431         if (how == ABMF_LIB_REPLACE_DUP)
432         {
433             return ERR_NOT_IMPLEMENTED;
434         }
435     }
436     if (libs->numLibs >= MAX_LIBS)
437     {
438         return ERR_DATA_SPACE_FULL;
439     }
440
441     /*
442      * Figure out where to put it
443      */
444     pos = where;
445     if (pos == ABMF_LIB_PREPEND)
446     {
447         pos = 0;
448     }
449     if (pos == ABMF_LIB_APPEND)
450     {
451         pos = libs->numLibs;
452     }
453
454     /*
455      * Insert it
456      */
457     if (pos < libs->numLibs)
458     {
459         /* insertion */
460         memmove(&(libs->libs[pos +1]), &(libs->libs[pos]),
461                     ((libs->numLibs+1) - pos) * sizeof(libs->libs[0]));
462         libs->libs[pos] = lib;
463         ++(libs->numLibs);
464     }
465     else
466     {
467         libs->libs[(libs->numLibs)++] = lib;
468     }
469
470     return 0;
471 }
472
473
474 static int
475 write_file_header(
476                         GenCodeInfo     genCodeInfo,
477                         ABObj           project,
478                         AB_OS_TYPE      osType
479 )
480 {
481     STRING      osName = util_os_type_to_string(osType);
482     File        makeFile = genCodeInfo->code_file;
483
484     abio_printf(makeFile, 
485     "\n"
486 "###########################################################################\n"
487 "#\n"
488 "#    CDE Application Builder Makefile\n"
489 "#\n"
490 "# This file was generated by `%s' from project file `%s'.\n"
491 "# The target platform for this Makefile is %s.\n"
492 "#\n"
493 "###########################################################################\n",
494         util_get_program_name(),
495         obj_get_file(project),
496         osName);
497
498     return 0;
499 }
500
501
502 static int
503 write_os_params(
504                         File            makeFile,
505                         AB_OS_TYPE      osType,
506                         AbmfLibs        libs
507 )
508 {
509     int         return_value = 0;
510
511     switch(osType)
512     {
513         case AB_OS_AIX:
514                 return_value = write_aix_stuff(makeFile, libs);
515                 break;
516
517         case AB_OS_HPUX:
518                 return_value = write_hpux_stuff(makeFile, libs);
519                 break;
520
521         case AB_OS_SUNOS:
522                 return_value = write_sunos_params(makeFile, libs);
523                 break;
524
525         case AB_OS_UNIXWARE:
526                 return_value = write_unixware_params(makeFile, libs);
527                 break;
528
529         case AB_OS_UXP:
530                 return_value = write_uxp_params(makeFile, libs);
531                 break;
532
533         case AB_OS_OSF1:
534                 return_value = write_osf1_stuff(makeFile, libs);
535                 break;
536
537         case AB_OS_LNX:
538                 return_value = write_lnx_params(makeFile, libs);
539                 break;
540
541         case AB_OS_FBSD:
542                 return_value = write_fbsd_params(makeFile, libs);
543                 break;
544
545         case AB_OS_NBSD:
546                 return_value = write_nbsd_params(makeFile, libs);
547                 break;
548
549         case AB_OS_OBSD:
550                 return_value = write_obsd_params(makeFile, libs);
551                 break;
552     }
553
554     return return_value;
555 }
556
557
558 static int
559 write_aix_stuff(File makeFile, AbmfLibs libs)
560 {
561     STRING      osName = util_os_type_to_string(AB_OS_AIX);
562
563     abio_printf(makeFile, 
564 "###########################################################################\n"
565 "# These are the %s-dependent configuration parameters that must be\n"
566 "# set in order for any application to build.\n"
567 "###########################################################################\n",
568         osName);
569
570      abio_puts(makeFile, "\n");
571      abio_puts(makeFile,
572 "        RM = rm -f\n"
573 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
574 "\n"
575 "        STD_DEFINES = -DSYSV -DAIXV3 -D_ALL_SOURCE"
576         " -D_AIX -D__AIX -D__aix -D_aix"
577         " -Daix -DMULTIBYTE -DNLS16 -DMESSAGE_CAT -DAIX_ILS\n"
578 "        ANSI_DEFINES =\n"
579 "\n"
580 "        CDEBUGFLAGS = -g -D__STR31__\n"
581 "        COPTFLAGS = -O -D__STR31__\n"
582 "        SYS_LIBRARIES = -lm\n"
583 "        CDE_LIBPATH = /usr/dt/lib\n"
584 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
585 "        ALLX_LIBPATH = /X11/lib\n"
586 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
587 );
588
589     write_local_libraries(makeFile, libs, AB_OS_AIX);
590
591     abio_puts(makeFile,
592 "\n"
593 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
594             " $(ANSI_DEFINES)\n"
595 "        LDLIBS = $(SYS_LIBRARIES)\n"
596 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
597 "\n"
598 );
599
600     return 0;
601 }
602
603
604 static int
605 write_hpux_stuff(File makeFile, AbmfLibs libs)
606 {
607     STRING      osName = util_os_type_to_string(AB_OS_HPUX);
608
609     abio_printf(makeFile, 
610 "###########################################################################\n"
611 "# These are the %s-dependent configuration parameters that must be\n"
612 "# set in order for any application to build.\n"
613 "###########################################################################\n",
614         osName);
615
616      abio_puts(makeFile, "\n");
617      abio_puts(makeFile,
618 "        RM = rm -f\n"
619 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
620 "\n"
621 "        STD_DEFINES = -DSYSV -DNLS16 -DMALLOC_0_RETURNS_NULL -DMERGE -DNDEBUG"
622         " -D__hpux -Dhpux -DOSMAJORVERSION=9 -DOSMINORVERSION=0 -DSHMLINK"
623         " -D__hp9000s800 -Dhp9000s800 -Dhp9000s700 -DHPPEX\n"
624 "        ANSI_DEFINES = -Aa -D_HPUX_SOURCE -DANSICPP\n"
625 "\n"
626 "        CDEBUGFLAGS = -g -z\n"
627 "        COPTFLAGS = -O -z\n"
628 "        SYS_LIBRARIES = -lm\n"
629 "        CDE_LIBPATH = /usr/dt/lib\n"
630 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
631 "        ALLX_LIBPATH = /X11/lib\n"
632 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
633 );
634
635     write_local_libraries(makeFile, libs, AB_OS_HPUX);
636
637     abio_puts(makeFile,
638 "\n"
639 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
640             " $(ANSI_DEFINES)\n"
641 "        LDLIBS = $(SYS_LIBRARIES)\n"
642 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
643 "\n"
644 );
645
646     return 0;
647 }
648
649
650 static int
651 write_sunos_params(File makeFile, AbmfLibs libs)
652 {
653     STRING      osName = util_os_type_to_string(AB_OS_SUNOS);
654
655     abio_printf(makeFile, 
656     "\n"
657 "###########################################################################\n"
658 "# These are the %s-dependent configuration parameters that must be\n"
659 "# set in order for any application to build.\n"
660 "###########################################################################\n",
661         osName);
662
663      abio_puts(makeFile,
664 "\n"
665 ".KEEP_STATE:\n"
666 "\n"
667 "        RM = rm -f\n"
668 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
669 "\n"
670 "        STD_DEFINES = \n"
671 "        ANSI_DEFINES = \n"
672 "\n"
673 "        CDEBUGFLAGS = -g\n"
674 "        COPTFLAGS = -O2\n"
675 "        SYS_LIBRARIES = -lgen -lm\n"
676 "        CDE_LIBPATH = /usr/dt/lib\n"
677 "        CDE_LDFLAGS = -L$(CDE_LIBPATH) -R$(CDE_LIBPATH)\n"
678 "        ALLX_LIBPATH = /X11/lib\n"
679 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH) -R$(ALLX_LIBPATH)\n"
680 );
681     write_local_libraries(makeFile, libs, AB_OS_SUNOS);
682
683     abio_puts(makeFile, 
684 "\n"
685 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
686             " $(ANSI_DEFINES)\n"
687 "        LDLIBS = $(SYS_LIBRARIES)\n"
688 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
689 "\n"
690 );
691
692     return 0;
693 }
694
695 static int
696 write_uxp_params(File makeFile, AbmfLibs libs)
697 {
698     STRING      osName = util_os_type_to_string(AB_OS_UXP);
699
700     abio_printf(makeFile, 
701     "\n"
702 "###########################################################################\n"
703 "# These are the %s-dependent configuration parameters that must be\n"
704 "# set in order for any application to build.\n"
705 "###########################################################################\n",
706         osName);
707
708      abio_puts(makeFile, "\n");
709      abio_puts(makeFile,
710 "        RM = rm -f\n"
711 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
712 "\n"
713 "        STD_DEFINES = \n"
714 "        ANSI_DEFINES = \n"
715 "\n"
716 "        CDEBUGFLAGS = -O\n"
717 "        SYS_LIBRARIES = -lnsl -lsocket -lm -ldl -lgen -lresolv -lw\n"
718 "        CDE_LIBPATH = /usr/dt/lib\n"
719 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
720 "        ALLX_LIBPATH = /X11/lib\n"
721 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n");
722
723     write_local_libraries(makeFile, libs, AB_OS_UXP);
724
725      abio_puts(makeFile,
726 "        CFLAGS = $(CDEBUGFLAGS) -D_POSIX_SOURCE=1 $(INCLUDES) $(STD_DEFINES)"
727             " $(ANSI_DEFINES)\n"
728 "        LDLIBS = $(SYS_LIBRARIES)\n"
729 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
730 "\n"
731 );
732
733     return 0;
734 }
735
736 static int
737 write_osf1_stuff(File makeFile, AbmfLibs libs)
738 {
739     STRING      osName = util_os_type_to_string(AB_OS_OSF1);
740
741     abio_printf(makeFile,
742 "###########################################################################\n"
743 "# These are the %s-dependent configuration parameters that must be\n"
744 "# set in order for any application to build.\n"
745 "###########################################################################\n",
746         osName);
747
748      abio_puts(makeFile, "\n");
749      abio_puts(makeFile,
750 "        RM = rm -f\n"
751 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
752 "\n"
753 "        STD_DEFINES = -DDEC\n"
754 "        ANSI_DEFINES =\n"
755 "\n"
756 "        CDEBUGFLAGS = -g\n"
757 "        COPTFLAGS = -O2\n"
758 "        SYS_LIBRARIES = -ldnet_stub -lm\n"
759 "        CDE_LIBPATH = /usr/dt/lib\n"
760 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
761 "        ALLX_LIBPATH = /X11/lib\n"
762 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
763 "        EXTRA_LOAD_FLAGS = -Wl,-rpath,$(CDE_LIBPATH):$(ALLX_LIBPATH)\n"
764 );
765
766     write_local_libraries(makeFile, libs, AB_OS_OSF1);
767
768     abio_puts(makeFile,
769 "\n"
770 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
771             " $(ANSI_DEFINES)\n"
772 "        LDLIBS = $(SYS_LIBRARIES)\n"
773 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS) $(EXTRA_LOAD_FLAGS)\n"
774 "\n"
775 );
776
777     return 0;
778 }
779
780 static int
781 write_unixware_params(File makeFile, AbmfLibs libs)
782 {
783     STRING      osName = util_os_type_to_string(AB_OS_UNIXWARE);
784
785     abio_printf(makeFile, 
786     "\n"
787 "###########################################################################\n"
788 "# These are the %s-dependent configuration parameters that must be\n"
789 "# set in order for any application to build.\n"
790 "###########################################################################\n",
791         osName);
792
793      abio_puts(makeFile, "\n");
794      abio_puts(makeFile,
795 "        RM = rm -f\n"
796 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
797 "\n"
798 "        STD_DEFINES = \n"
799 "        ANSI_DEFINES = \n"
800 "\n"
801 "        CDEBUGFLAGS = -O\n"
802 "        SYS_LIBRARIES = -lnsl -lsocket -lm -ldl -lgen -lresolv -lw\n"
803 "        CDE_LIBPATH = /usr/dt/lib\n"
804 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
805 "        ALLX_LIBPATH = /X11/lib\n"
806 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n");
807
808     write_local_libraries(makeFile, libs, AB_OS_UNIXWARE);
809
810      abio_puts(makeFile,
811 "        CFLAGS = $(CDEBUGFLAGS) -D_POSIX_SOURCE=1 $(INCLUDES) $(STD_DEFINES)"
812             " $(ANSI_DEFINES)\n"
813 "        LDLIBS = $(SYS_LIBRARIES)\n"
814 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
815 "\n"
816 );
817
818     return 0;
819 }
820
821 static int
822 write_lnx_params(File makeFile, AbmfLibs libs)
823 {
824     STRING      osName = util_os_type_to_string(AB_OS_LNX);
825
826     abio_printf(makeFile,
827     "\n"
828 "###########################################################################\n"
829 "# These are the %s-dependent configuration parameters that must be\n"
830 "# set in order for any application to build.\n"
831 "###########################################################################\n",
832         osName);
833
834      abio_puts(makeFile,
835 "\n"
836 ".KEEP_STATE:\n"
837 "\n"
838 "        RM = rm -f\n"
839 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
840 "\n"
841 "        STD_DEFINES = \n"
842 "        ANSI_DEFINES = \n"
843 "\n"
844 "        CDEBUGFLAGS = -g\n"
845 "        COPTFLAGS = -O2\n"
846 "        SYS_LIBRARIES = -lgen -lm\n"
847 "        CDE_LIBPATH = /usr/dt/lib\n"
848 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
849 "        ALLX_LIBPATH = /X11/lib\n"
850 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
851 );
852     write_local_libraries(makeFile, libs, AB_OS_LNX);
853
854     abio_puts(makeFile,
855 "\n"
856 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
857             " $(ANSI_DEFINES)\n"
858 "        LDLIBS = $(SYS_LIBRARIES)\n"
859 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
860 "\n"
861 );
862
863     return 0;
864 }
865
866 static int
867 write_fbsd_params(File makeFile, AbmfLibs libs)
868 {
869     STRING      osName = util_os_type_to_string(AB_OS_FBSD);
870
871     abio_printf(makeFile,
872     "\n"
873 "###########################################################################\n"
874 "# These are the %s-dependent configuration parameters that must be\n"
875 "# set in order for any application to build.\n"
876 "###########################################################################\n",
877         osName);
878
879      abio_puts(makeFile,
880 "\n"
881 ".KEEP_STATE:\n"
882 "\n"
883 "        RM = rm -f\n"
884 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
885 "\n"
886 "        STD_DEFINES = \n"
887 "        ANSI_DEFINES = \n"
888 "\n"
889 "        CDEBUGFLAGS = -g\n"
890 "        COPTFLAGS = -O2\n"
891 "        SYS_LIBRARIES = -lgen -lm\n"
892 "        CDE_LIBPATH = /usr/dt/lib\n"
893 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
894 "        ALLX_LIBPATH = /X11/lib\n"
895 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
896 );
897     write_local_libraries(makeFile, libs, AB_OS_FBSD);
898
899     abio_puts(makeFile,
900 "\n"
901 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
902             " $(ANSI_DEFINES)\n"
903 "        LDLIBS = $(SYS_LIBRARIES)\n"
904 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
905 "\n"
906 );
907
908     return 0;
909 }
910
911 static int
912 write_nbsd_params(File makeFile, AbmfLibs libs)
913 {
914     STRING      osName = util_os_type_to_string(AB_OS_NBSD);
915
916     abio_printf(makeFile,
917     "\n"
918 "###########################################################################\n"
919 "# These are the %s-dependent configuration parameters that must be\n"
920 "# set in order for any application to build.\n"
921 "###########################################################################\n",
922         osName);
923
924      abio_puts(makeFile,
925 "\n"
926 ".KEEP_STATE:\n"
927 "\n"
928 "        RM = rm -f\n"
929 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
930 "\n"
931 "        STD_DEFINES = \n"
932 "        ANSI_DEFINES = \n"
933 "\n"
934 "        CDEBUGFLAGS = -g\n"
935 "        COPTFLAGS = -O2\n"
936 "        SYS_LIBRARIES = -lgen -lm\n"
937 "        CDE_LIBPATH = /usr/dt/lib\n"
938 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
939 "        ALLX_LIBPATH = /X11/lib\n"
940 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
941 );
942     write_local_libraries(makeFile, libs, AB_OS_NBSD);
943
944     abio_puts(makeFile,
945 "\n"
946 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
947             " $(ANSI_DEFINES)\n"
948 "        LDLIBS = $(SYS_LIBRARIES)\n"
949 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
950 "\n"
951 );
952
953     return 0;
954 }
955
956 static int
957 write_obsd_params(File makeFile, AbmfLibs libs)
958 {
959     STRING      osName = util_os_type_to_string(AB_OS_OBSD);
960
961     abio_printf(makeFile,
962     "\n"
963 "###########################################################################\n"
964 "# These are the %s-dependent configuration parameters that must be\n"
965 "# set in order for any application to build.\n"
966 "###########################################################################\n",
967         osName);
968
969      abio_puts(makeFile,
970 "\n"
971 ".KEEP_STATE:\n"
972 "\n"
973 "        RM = rm -f\n"
974 "        INCLUDES = -I/usr/dt/include -I/X11/include\n"
975 "\n"
976 "        STD_DEFINES = \n"
977 "        ANSI_DEFINES = \n"
978 "\n"
979 "        CDEBUGFLAGS = -g\n"
980 "        COPTFLAGS = -O2\n"
981 "        SYS_LIBRARIES = -lgen -lm\n"
982 "        CDE_LIBPATH = /usr/dt/lib\n"
983 "        CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
984 "        ALLX_LIBPATH = /X11/lib\n"
985 "        ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
986 );
987     write_local_libraries(makeFile, libs, AB_OS_OBSD);
988
989     abio_puts(makeFile,
990 "\n"
991 "        CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
992             " $(ANSI_DEFINES)\n"
993 "        LDLIBS = $(SYS_LIBRARIES)\n"
994 "        LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
995 "\n"
996 );
997
998     return 0;
999 }
1000
1001 static int      
1002 write_local_libraries(
1003                         File            makeFile, 
1004                         AbmfLibs        libs,
1005                         AB_OS_TYPE      osType
1006 )
1007 {
1008     int         numLibs = libs->numLibs;
1009     int         i = 0;
1010     AbmfLibDesc lib = LibNone;
1011     STRING      libString = NULL;
1012
1013     abio_puts(makeFile, "        LOCAL_LIBRARIES =");
1014     for (i = 0; i < numLibs; ++i)
1015     {
1016         lib = libs->libs[i];
1017         libString = get_string_for_lib(lib, osType);
1018         if (libString != NULL)
1019         {
1020             abio_printf(makeFile, " %s", libString);
1021         }
1022     }
1023     abio_puts(makeFile, nlstr);
1024
1025     return 0;
1026 }
1027
1028
1029 static int
1030 write_ab_params(
1031                 GenCodeInfo     genCodeInfo,
1032                 ABObj           project
1033 )
1034 {
1035     File        makeFile = genCodeInfo->code_file;
1036     int         numModules = trav_count_cond(project, AB_TRAV_MODULES, obj_is_defined_module);
1037     int         thisModuleNum = 0;
1038     AB_TRAVERSAL        trav;
1039     ABObj               module = NULL;
1040
1041     abio_printf(makeFile, 
1042     "\n"
1043 "###########################################################################\n"
1044 "#  These parameters are generated by %s according to the structure\n"
1045 "#  of the project as defined in the .bip and .bil files\n"
1046 "###########################################################################\n",
1047         util_get_program_name());
1048
1049     abio_puts(makeFile, "\n");
1050     abio_printf(makeFile, "PROGRAM = %s\n", abmfP_get_exe_file_name(project));
1051
1052     abio_puts(makeFile, "\n");
1053     abio_puts(makeFile, "TARGETS.h = \\\n");
1054     abio_printf(makeFile, "\t%s \\\n", 
1055         abmfP_get_utils_header_file_name(project));
1056     for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1057         (module = trav_next(&trav)) != NULL;
1058         ++thisModuleNum)
1059     {
1060         if (!obj_is_defined(module))
1061         {
1062             continue;
1063         }
1064
1065         abio_printf(makeFile, "\t%s", abmfP_get_ui_header_file_name(module));
1066         if (thisModuleNum < (numModules-1))
1067         {
1068             abio_puts(makeFile, " \\");
1069         }
1070         abio_puts(makeFile, "\n");
1071
1072     }
1073     trav_close(&trav);
1074
1075     /*
1076      * TARGETS.c
1077      */
1078     abio_puts(makeFile, "\n");
1079     abio_puts(makeFile, "TARGETS.c = \\\n");
1080     abio_printf(makeFile, "\t%s \\\n", abmfP_get_utils_c_file_name(project));
1081     for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1082         (module = trav_next(&trav)) != NULL;
1083         ++thisModuleNum)
1084     {
1085         if (!obj_is_defined(module))
1086         { 
1087             continue; 
1088         } 
1089
1090         abio_printf(makeFile, "\t%s", abmfP_get_ui_c_file_name(module));
1091         if (thisModuleNum < (numModules-1))
1092         {
1093             abio_puts(makeFile, " \\");
1094         }
1095         abio_puts(makeFile, "\n");
1096
1097     }
1098     trav_close(&trav);
1099
1100     /*
1101      * TARGETS.h.merged
1102      *
1103      * These are hand-edited, as well, so we cannot consider them
1104      * target .h files, which can be removed and regenerated on a whim.
1105      */
1106     abio_puts(makeFile, "\n");
1107     abio_puts(makeFile, "TARGETS.h.merged = \\\n");
1108     abio_printf(makeFile, "\t%s\n", 
1109         abmfP_get_project_header_file_name(project));
1110
1111
1112     /*
1113      * TARGETS.c.merged
1114      *
1115      * These are hand-edited, as well, so we cannot consider them
1116      * target .c files, which can be removed and regenerated on a whim.
1117      */
1118     abio_puts(makeFile, "\n");
1119     abio_puts(makeFile, "TARGETS.c.merged = \\\n");
1120     abio_printf(makeFile, "\t%s \\\n", abmfP_get_project_c_file_name(project));
1121     for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1122         (module = trav_next(&trav)) != NULL;
1123         ++thisModuleNum)
1124     {
1125         if (!obj_is_defined(module))
1126         { 
1127             continue; 
1128         } 
1129
1130         abio_printf(makeFile, "\t%s", abmfP_get_stubs_c_file_name(module));
1131         if (thisModuleNum < (numModules-1))
1132         {
1133             abio_puts(makeFile, " \\");
1134         }
1135         abio_puts(makeFile, "\n");
1136
1137     }
1138     trav_close(&trav);
1139
1140
1141     abio_puts(makeFile, "\n");
1142     abio_puts(makeFile, "SOURCES.h = $(TARGETS.h.merged) $(TARGETS.h)\n");
1143
1144     abio_puts(makeFile, "\n");
1145     abio_puts(makeFile, "SOURCES.c = $(TARGETS.c.merged) $(TARGETS.c)\n");
1146
1147     abio_puts(makeFile, "\n");
1148     abio_puts(makeFile, "OBJS = \\\n");
1149     abio_printf(makeFile, "\t%s \\\n",
1150         cvt_to_obj(abmfP_get_project_c_file_name(project)));
1151     abio_printf(makeFile, "\t%s \\\n",
1152         cvt_to_obj(abmfP_get_utils_c_file_name(project)));
1153     for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1154         (module = trav_next(&trav)) != NULL;
1155         ++thisModuleNum)
1156     {
1157         if (!obj_is_defined(module))
1158         { 
1159             continue; 
1160         } 
1161
1162         abio_printf(makeFile, "\t%s \\\n",
1163                 cvt_to_obj(abmfP_get_ui_c_file_name(module)));
1164         abio_printf(makeFile, "\t%s", 
1165                 cvt_to_obj(abmfP_get_stubs_c_file_name(module)));
1166
1167         if (thisModuleNum < (numModules-1))
1168         {
1169             abio_puts(makeFile, " \\");
1170         }
1171         abio_puts(makeFile, "\n");
1172     }
1173     trav_close(&trav);
1174
1175     return 0;
1176 }
1177
1178
1179 static int
1180 write_codegen_macro(File makeFile)
1181 {
1182     abio_printf(makeFile, "        %s = %s\n", 
1183                 CODEGEN_MACRO, util_get_program_name());
1184
1185     return 0;
1186 }
1187
1188
1189 static BOOL
1190 obj_is_module_func(ABObj obj)
1191 {
1192     return obj_is_module(obj);
1193 }
1194
1195 static int
1196 write_targets(
1197         GenCodeInfo     genCodeInfo,
1198         ABObj           project,
1199         AB_OS_TYPE      osType
1200 )
1201 {
1202     File        makeFile = genCodeInfo->code_file;
1203     STRING      prog = util_get_program_name();
1204     STRING      projFile = obj_get_file(project);
1205     STRING      modFile = NULL;
1206     char        modName[MAXPATHLEN+1];
1207     ABObj       firstModule = NULL;
1208     STRING      firstModuleFileName = NULL;
1209     char        projFlag[1024];
1210     AB_TRAVERSAL        moduleTrav;
1211     ABObj               module = NULL;
1212     *projFlag = 0;
1213     *modName = 0;
1214
1215     firstModule = obj_get_child_cond(project, 0, obj_is_module_func);
1216     if (firstModule != NULL)
1217     {
1218         firstModuleFileName = obj_get_file(firstModule);
1219     }
1220     if (obj_is_default(project))
1221     {
1222         strcpy(projFlag, "-nomerge -noproject");
1223     }
1224     else
1225     {
1226         sprintf(projFlag, "-changed -merge -p %s", projFile);
1227     }
1228
1229     abio_puts(makeFile, 
1230     "\n"
1231     "######################################################################\n"
1232     "# Standard targets.                                                  #\n"
1233     "######################################################################\n"
1234     );
1235
1236     abio_puts(makeFile,
1237 "all:: $(PROGRAM)\n"
1238 "\n"
1239 "$(PROGRAM) : $(SOURCES.c) $(SOURCES.h) $(OBJS)\n"
1240 "       $(RM) $@\n"
1241 "       $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS)\n"
1242 "\n"
1243 );
1244
1245     if (! (obj_is_default(project) && (firstModuleFileName == NULL)) )
1246     {
1247         if (osType == AB_OS_SUNOS)
1248             abio_printf(makeFile, "%s + %s + %s + %s: %s\n",
1249                 abmfP_get_project_c_file_name(project), 
1250                 abmfP_get_project_header_file_name(project), 
1251                 abmfP_get_utils_c_file_name(project),
1252                 abmfP_get_utils_header_file_name(project),
1253                 obj_get_file(project));
1254         else
1255             abio_printf(makeFile, "%s %s %s %s: %s\n",
1256                 abmfP_get_project_c_file_name(project), 
1257                 abmfP_get_project_header_file_name(project), 
1258                 abmfP_get_utils_c_file_name(project),
1259                 abmfP_get_utils_header_file_name(project),
1260                 obj_get_file(project));
1261  
1262         abio_printf(makeFile, 
1263             "\t$(%s) %s -main", CODEGEN_MACRO, projFlag);
1264         if (obj_is_default(project))
1265         {
1266             abio_printf(makeFile, " %s", firstModuleFileName);
1267         }
1268         abio_printf(makeFile, "\n");
1269
1270         abio_printf(makeFile, "%s: %s %s $(TARGETS.h) $(TARGETS.h.merged)\n",
1271             cvt_to_obj(abmfP_get_project_c_file_name(project)),
1272             abmfP_get_project_c_file_name(project),
1273             obj_get_file(project));
1274     }
1275
1276     /*
1277      * Make the project.c file dependent upon the module header files.
1278      * That way, if a module changes, main() and the x-module connections
1279      * will be recompiled.
1280      */
1281     abio_printf(makeFile, "%s: $(TARGETS.h)\n\n",
1282         abmfP_get_project_c_file_name(project));
1283
1284     for (trav_open(&moduleTrav, project, AB_TRAV_MODULES);
1285         (module = trav_next(&moduleTrav)) != NULL; )
1286     {
1287         if (!obj_is_defined(module))
1288         {
1289             continue;
1290         }
1291
1292         modFile = obj_get_file(module);
1293         util_strncpy(modName, obj_get_name(module), MAXPATHLEN+1);
1294
1295         if (osType == AB_OS_SUNOS)
1296             abio_printf(makeFile, "\n%s + %s + %s: %s %s\n",
1297                 abmfP_get_ui_c_file_name(module), 
1298                 abmfP_get_ui_header_file_name(module),
1299                 abmfP_get_stubs_c_file_name(module),
1300                 projFile, 
1301                 modFile);
1302         else
1303             abio_printf(makeFile, "\n%s %s %s: %s %s\n",
1304                 abmfP_get_ui_c_file_name(module), 
1305                 abmfP_get_ui_header_file_name(module),
1306                 abmfP_get_stubs_c_file_name(module),
1307                 projFile, 
1308                 modFile);
1309
1310         abio_printf(makeFile, "\t$(%s) %s %s\n", 
1311                         CODEGEN_MACRO, projFlag, modName);
1312
1313         /*
1314          * .o dependency on .c and .bil file 
1315          */
1316         abio_printf(makeFile, "%s: %s %s %s\n",
1317             cvt_to_obj(abmfP_get_ui_c_file_name(module)),
1318             abmfP_get_ui_c_file_name(module),
1319             abmfP_get_ui_header_file_name(module),
1320             modFile);
1321         abio_printf(makeFile, "%s: %s %s %s\n",
1322             cvt_to_obj(abmfP_get_stubs_c_file_name(module)),
1323             abmfP_get_stubs_c_file_name(module),
1324             abmfP_get_ui_header_file_name(module),
1325             modFile);
1326     }
1327     trav_close(&moduleTrav);
1328
1329     abio_puts(makeFile,
1330 "\n"
1331 "CLEAN_FILES =  core .dtcodegen.log *.BAK *.delta \\\n"
1332 "               $(PROGRAM) $(OBJS) $(TARGETS.c) $(TARGETS.h)\n" 
1333 "clean:\n"
1334 "       $(RM)  $(CLEAN_FILES)\n"
1335 "\n"
1336 "scour:\n"
1337 "       $(RM) $(CLEAN_FILES) $(TARGETS.h.merged) $(TARGETS.c.merged) \\\n"
1338 "             Makefile Makefile.aix Makefile.hpux Makefile.sunos \\\n"
1339 "             Makefile.osf1 Makefile.uxp Makefile.unixware Makefile.linux \\\n"
1340 "             Makefile.freebsd Makefile.netbsd Makefile.openbsd\n"
1341 );
1342
1343     return 0;
1344 }
1345
1346
1347 /*
1348  * Converts a .c file name to a .o file name
1349  */
1350 static STRING
1351 cvt_to_obj(STRING fileName)
1352 {
1353     static char buf[MAXPATHLEN] = "";
1354     snprintf(buf, sizeof(buf), "%s", fileName);
1355     buf[strlen(buf)-1] = 'o';
1356     return buf;
1357 }
1358
1359