2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
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)
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
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
25 * $XConsortium: make_file.c /main/6 1996/06/28 08:31:16 mustafa $
27 * @(#)make_file.c 3.53 19 Jan 1995 cde_app_builder/src/abmf
29 * RESTRICTED CONFIDENTIAL INFORMATION:
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
38 * Copyright 1993 Sun Microsystems, Inc. All rights reserved.
44 * Create a make file that can be used to test the generated application.
47 #include <sys/param.h>
50 #include <ab/util_types.h>
51 #include <ab_private/abio.h>
53 #include "obj_namesP.h"
56 #include "make_fileP.h"
60 #define CODEGEN_MACRO "DTCODEGEN"
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)
82 AbmfLibDesc libs[MAX_LIBS];
83 } AbmfLibsRec, *AbmfLibs;
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)
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);
95 static STRING cvt_to_obj(STRING fileName);
96 static int write_os_params(
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_osf1_stuff(File makeFile, AbmfLibs libs);
106 static int write_lnx_params(File makeFile, AbmfLibs libs);
107 static int write_fbsd_params(File makeFile, AbmfLibs libs);
108 static int write_nbsd_params(File makeFile, AbmfLibs libs);
109 static int write_obsd_params(File makeFile, AbmfLibs libs);
111 static int determine_aix_libs(AbmfLibs libs, ABObj project);
112 static int determine_hpux_libs(AbmfLibs libs, ABObj project);
113 static int determine_sunos_libs(AbmfLibs libs, ABObj project);
114 static int determine_unixware_libs(AbmfLibs libs, ABObj project);
115 static int determine_osf1_libs(AbmfLibs libs, ABObj project);
116 static int determine_lnx_libs(AbmfLibs libs, ABObj project);
117 static int determine_fbsd_libs(AbmfLibs libs, ABObj project);
118 static int determine_nbsd_libs(AbmfLibs libs, ABObj project);
119 static int determine_obsd_libs(AbmfLibs libs, ABObj project);
121 static int write_file_header(
122 GenCodeInfo genCodeInfo,
126 static int write_ab_params(
127 GenCodeInfo genCodeInfo,
130 static int write_targets(
131 GenCodeInfo genCodeInfo,
136 static int write_local_libraries(
142 static int write_codegen_macro(
150 abmfP_write_make_file(
151 GenCodeInfo genCodeInfo,
154 BOOL useSourceBrowser
157 File makeFile = genCodeInfo->code_file;
161 determine_libs(&libs, project, osType);
163 write_file_header(genCodeInfo, project, osType);
164 write_os_params(makeFile, osType, &libs);
165 write_codegen_macro(makeFile);
166 write_ab_params(genCodeInfo, project);
169 * Sun needs a NO_PARALLEL directive
171 if (osType == AB_OS_SUNOS)
173 abio_printf(genCodeInfo->code_file,
175 ".NO_PARALLEL: $(TARGETS.h) $(TARGETS.h.merged) $(TARGETS.c) $(TARGETS.c.merged)\n"
179 write_targets(genCodeInfo, project, osType);
186 determine_libs(AbmfLibs libs, ABObj project, AB_OS_TYPE osType)
188 int return_value = 0;
189 CGenProjData projData = mfobj_get_proj_data(project);
191 if (projData->has_ui_obj)
193 lib_add(libs, LibDtWidget, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
194 lib_add(libs, LibDtHelp, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
195 lib_add(libs, LibDtSvc, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
196 lib_add(libs, LibXm, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
197 lib_add(libs, LibXt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
198 lib_add(libs, LibXext, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
199 lib_add(libs, LibX11, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
200 lib_add(libs, LibICE, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
201 lib_add(libs, LibSM, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
202 lib_add(libs, LibXp, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
204 if (osType == AB_OS_HPUX)
206 lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
210 if (projData->has_terminal)
212 lib_add(libs, LibDtHelp, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
213 lib_add(libs, LibDtTerm, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
217 if (1) /* Workaround because tooltalk not being used when needed */
219 if (obj_get_tooltalk_level(project) != AB_TOOLTALK_NONE)
221 lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
226 return_value = determine_aix_libs(libs, project);
230 return_value = determine_hpux_libs(libs, project);
234 return_value = determine_sunos_libs(libs, project);
237 return_value = determine_osf1_libs(libs, project);
240 return_value = determine_unixware_libs(libs, project);
243 return_value = determine_lnx_libs(libs, project);
246 return_value = determine_fbsd_libs(libs, project);
249 return_value = determine_nbsd_libs(libs, project);
252 return_value = determine_obsd_libs(libs, project);
260 determine_aix_libs(AbmfLibs libs, ABObj project)
267 determine_hpux_libs(AbmfLibs libs, ABObj project)
270 lib_add(libs, LibWlarchive, ABMF_LIB_PREPEND, ABMF_LIB_REPLACE_DUP);
271 lib_add(libs, LibWldefault, ABMF_LIB_APPEND, ABMF_LIB_REPLACE_DUP);
278 determine_sunos_libs(AbmfLibs libs, ABObj project)
284 determine_osf1_libs(AbmfLibs libs, ABObj project)
290 determine_unixware_libs(AbmfLibs libs, ABObj project)
296 determine_lnx_libs(AbmfLibs libs, ABObj project)
302 determine_fbsd_libs(AbmfLibs libs, ABObj project)
308 determine_nbsd_libs(AbmfLibs libs, ABObj project)
314 determine_obsd_libs(AbmfLibs libs, ABObj project)
320 get_string_for_lib(AbmfLibDesc lib, AB_OS_TYPE osType)
322 STRING libString = NULL;
327 libString = abmfP_str_empty;
331 libString = "-lDtHelp";
335 libString = "-lDtSvc";
339 libString = "-lDtTerm";
343 libString = "-lDtWidget";
355 libString = "-lXext";
379 libString = "-Wl,-a,archive";
383 libString = "-Wl,-a,default";
392 lib_find(AbmfLibs libs, AbmfLibDesc lib)
395 int numLibs = libs->numLibs;
397 for (i = 0; i < numLibs; ++i)
399 if (libs->libs[i] == lib)
404 return ERR_NOT_FOUND;
409 lib_add(AbmfLibs libs, AbmfLibDesc lib, int where, int how)
414 if ((old_pos = lib_find(libs, lib)) >= 0)
416 if (how == ABMF_LIB_REJECT_DUP)
418 return ERR_DUPLICATE_KEY;
420 if (how == ABMF_LIB_REPLACE_DUP)
422 return ERR_NOT_IMPLEMENTED;
425 if (libs->numLibs >= MAX_LIBS)
427 return ERR_DATA_SPACE_FULL;
431 * Figure out where to put it
434 if (pos == ABMF_LIB_PREPEND)
438 if (pos == ABMF_LIB_APPEND)
446 if (pos < libs->numLibs)
449 memmove(&(libs->libs[pos +1]), &(libs->libs[pos]),
450 ((libs->numLibs+1) - pos) * sizeof(libs->libs[0]));
451 libs->libs[pos] = lib;
456 libs->libs[(libs->numLibs)++] = lib;
465 GenCodeInfo genCodeInfo,
470 STRING osName = util_os_type_to_string(osType);
471 File makeFile = genCodeInfo->code_file;
473 abio_printf(makeFile,
475 "###########################################################################\n"
477 "# CDE Application Builder Makefile\n"
479 "# This file was generated by `%s' from project file `%s'.\n"
480 "# The target platform for this Makefile is %s.\n"
482 "###########################################################################\n",
483 util_get_program_name(),
484 obj_get_file(project),
498 int return_value = 0;
503 return_value = write_aix_stuff(makeFile, libs);
507 return_value = write_hpux_stuff(makeFile, libs);
511 return_value = write_sunos_params(makeFile, libs);
515 return_value = write_unixware_params(makeFile, libs);
519 return_value = write_osf1_stuff(makeFile, libs);
523 return_value = write_lnx_params(makeFile, libs);
527 return_value = write_fbsd_params(makeFile, libs);
531 return_value = write_nbsd_params(makeFile, libs);
535 return_value = write_obsd_params(makeFile, libs);
544 write_aix_stuff(File makeFile, AbmfLibs libs)
546 STRING osName = util_os_type_to_string(AB_OS_AIX);
548 abio_printf(makeFile,
549 "###########################################################################\n"
550 "# These are the %s-dependent configuration parameters that must be\n"
551 "# set in order for any application to build.\n"
552 "###########################################################################\n",
555 abio_puts(makeFile, "\n");
558 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
560 " STD_DEFINES = -DSYSV -DAIXV3 -D_ALL_SOURCE"
561 " -D_AIX -D__AIX -D__aix -D_aix"
562 " -Daix -DMULTIBYTE -DNLS16 -DMESSAGE_CAT -DAIX_ILS\n"
565 " CDEBUGFLAGS = -g -D__STR31__\n"
566 " COPTFLAGS = -O -D__STR31__\n"
567 " SYS_LIBRARIES = -lm\n"
568 " CDE_LIBPATH = /usr/dt/lib\n"
569 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
570 " ALLX_LIBPATH = /X11/lib\n"
571 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
574 write_local_libraries(makeFile, libs, AB_OS_AIX);
578 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
580 " LDLIBS = $(SYS_LIBRARIES)\n"
581 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
590 write_hpux_stuff(File makeFile, AbmfLibs libs)
592 STRING osName = util_os_type_to_string(AB_OS_HPUX);
594 abio_printf(makeFile,
595 "###########################################################################\n"
596 "# These are the %s-dependent configuration parameters that must be\n"
597 "# set in order for any application to build.\n"
598 "###########################################################################\n",
601 abio_puts(makeFile, "\n");
604 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
606 " STD_DEFINES = -DSYSV -DNLS16 -DMALLOC_0_RETURNS_NULL -DMERGE -DNDEBUG"
607 " -D__hpux -Dhpux -DOSMAJORVERSION=9 -DOSMINORVERSION=0 -DSHMLINK"
608 " -D__hp9000s800 -Dhp9000s800 -Dhp9000s700 -DHPPEX\n"
609 " ANSI_DEFINES = -Aa -D_HPUX_SOURCE -DANSICPP\n"
611 " CDEBUGFLAGS = -g -z\n"
612 " COPTFLAGS = -O -z\n"
613 " SYS_LIBRARIES = -lm\n"
614 " CDE_LIBPATH = /usr/dt/lib\n"
615 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
616 " ALLX_LIBPATH = /X11/lib\n"
617 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
620 write_local_libraries(makeFile, libs, AB_OS_HPUX);
624 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
626 " LDLIBS = $(SYS_LIBRARIES)\n"
627 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
636 write_sunos_params(File makeFile, AbmfLibs libs)
638 STRING osName = util_os_type_to_string(AB_OS_SUNOS);
640 abio_printf(makeFile,
642 "###########################################################################\n"
643 "# These are the %s-dependent configuration parameters that must be\n"
644 "# set in order for any application to build.\n"
645 "###########################################################################\n",
653 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
658 " CDEBUGFLAGS = -g\n"
660 " SYS_LIBRARIES = -lgen -lm\n"
661 " CDE_LIBPATH = /usr/dt/lib\n"
662 " CDE_LDFLAGS = -L$(CDE_LIBPATH) -R$(CDE_LIBPATH)\n"
663 " ALLX_LIBPATH = /X11/lib\n"
664 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH) -R$(ALLX_LIBPATH)\n"
666 write_local_libraries(makeFile, libs, AB_OS_SUNOS);
670 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
672 " LDLIBS = $(SYS_LIBRARIES)\n"
673 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
681 write_osf1_stuff(File makeFile, AbmfLibs libs)
683 STRING osName = util_os_type_to_string(AB_OS_OSF1);
685 abio_printf(makeFile,
686 "###########################################################################\n"
687 "# These are the %s-dependent configuration parameters that must be\n"
688 "# set in order for any application to build.\n"
689 "###########################################################################\n",
692 abio_puts(makeFile, "\n");
695 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
697 " STD_DEFINES = -DDEC\n"
700 " CDEBUGFLAGS = -g\n"
702 " SYS_LIBRARIES = -ldnet_stub -lm\n"
703 " CDE_LIBPATH = /usr/dt/lib\n"
704 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
705 " ALLX_LIBPATH = /X11/lib\n"
706 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
707 " EXTRA_LOAD_FLAGS = -Wl,-rpath,$(CDE_LIBPATH):$(ALLX_LIBPATH)\n"
710 write_local_libraries(makeFile, libs, AB_OS_OSF1);
714 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
716 " LDLIBS = $(SYS_LIBRARIES)\n"
717 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS) $(EXTRA_LOAD_FLAGS)\n"
725 write_unixware_params(File makeFile, AbmfLibs libs)
727 STRING osName = util_os_type_to_string(AB_OS_UNIXWARE);
729 abio_printf(makeFile,
731 "###########################################################################\n"
732 "# These are the %s-dependent configuration parameters that must be\n"
733 "# set in order for any application to build.\n"
734 "###########################################################################\n",
737 abio_puts(makeFile, "\n");
740 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
745 " CDEBUGFLAGS = -O\n"
746 " SYS_LIBRARIES = -lnsl -lsocket -lm -ldl -lgen -lresolv -lw\n"
747 " CDE_LIBPATH = /usr/dt/lib\n"
748 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
749 " ALLX_LIBPATH = /X11/lib\n"
750 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n");
752 write_local_libraries(makeFile, libs, AB_OS_UNIXWARE);
755 " CFLAGS = $(CDEBUGFLAGS) -D_POSIX_SOURCE=1 $(INCLUDES) $(STD_DEFINES)"
757 " LDLIBS = $(SYS_LIBRARIES)\n"
758 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
766 write_lnx_params(File makeFile, AbmfLibs libs)
768 STRING osName = util_os_type_to_string(AB_OS_LNX);
770 abio_printf(makeFile,
772 "###########################################################################\n"
773 "# These are the %s-dependent configuration parameters that must be\n"
774 "# set in order for any application to build.\n"
775 "###########################################################################\n",
783 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
788 " CDEBUGFLAGS = -g\n"
790 " SYS_LIBRARIES = -lgen -lm\n"
791 " CDE_LIBPATH = /usr/dt/lib\n"
792 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
793 " ALLX_LIBPATH = /X11/lib\n"
794 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
796 write_local_libraries(makeFile, libs, AB_OS_LNX);
800 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
802 " LDLIBS = $(SYS_LIBRARIES)\n"
803 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
811 write_fbsd_params(File makeFile, AbmfLibs libs)
813 STRING osName = util_os_type_to_string(AB_OS_FBSD);
815 abio_printf(makeFile,
817 "###########################################################################\n"
818 "# These are the %s-dependent configuration parameters that must be\n"
819 "# set in order for any application to build.\n"
820 "###########################################################################\n",
828 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
833 " CDEBUGFLAGS = -g\n"
835 " SYS_LIBRARIES = -lgen -lm\n"
836 " CDE_LIBPATH = /usr/dt/lib\n"
837 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
838 " ALLX_LIBPATH = /X11/lib\n"
839 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
841 write_local_libraries(makeFile, libs, AB_OS_FBSD);
845 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
847 " LDLIBS = $(SYS_LIBRARIES)\n"
848 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
856 write_nbsd_params(File makeFile, AbmfLibs libs)
858 STRING osName = util_os_type_to_string(AB_OS_NBSD);
860 abio_printf(makeFile,
862 "###########################################################################\n"
863 "# These are the %s-dependent configuration parameters that must be\n"
864 "# set in order for any application to build.\n"
865 "###########################################################################\n",
873 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
878 " CDEBUGFLAGS = -g\n"
880 " SYS_LIBRARIES = -lgen -lm\n"
881 " CDE_LIBPATH = /usr/dt/lib\n"
882 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
883 " ALLX_LIBPATH = /X11/lib\n"
884 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
886 write_local_libraries(makeFile, libs, AB_OS_NBSD);
890 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
892 " LDLIBS = $(SYS_LIBRARIES)\n"
893 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
901 write_obsd_params(File makeFile, AbmfLibs libs)
903 STRING osName = util_os_type_to_string(AB_OS_OBSD);
905 abio_printf(makeFile,
907 "###########################################################################\n"
908 "# These are the %s-dependent configuration parameters that must be\n"
909 "# set in order for any application to build.\n"
910 "###########################################################################\n",
918 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
923 " CDEBUGFLAGS = -g\n"
925 " SYS_LIBRARIES = -lgen -lm\n"
926 " CDE_LIBPATH = /usr/dt/lib\n"
927 " CDE_LDFLAGS = -L$(CDE_LIBPATH)\n"
928 " ALLX_LIBPATH = /X11/lib\n"
929 " ALLX_LDFLAGS = -L$(ALLX_LIBPATH)\n"
931 write_local_libraries(makeFile, libs, AB_OS_OBSD);
935 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
937 " LDLIBS = $(SYS_LIBRARIES)\n"
938 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
946 write_local_libraries(
952 int numLibs = libs->numLibs;
954 AbmfLibDesc lib = LibNone;
955 STRING libString = NULL;
957 abio_puts(makeFile, " LOCAL_LIBRARIES =");
958 for (i = 0; i < numLibs; ++i)
961 libString = get_string_for_lib(lib, osType);
962 if (libString != NULL)
964 abio_printf(makeFile, " %s", libString);
967 abio_puts(makeFile, nlstr);
975 GenCodeInfo genCodeInfo,
979 File makeFile = genCodeInfo->code_file;
980 int numModules = trav_count_cond(project, AB_TRAV_MODULES, obj_is_defined_module);
981 int thisModuleNum = 0;
985 abio_printf(makeFile,
987 "###########################################################################\n"
988 "# These parameters are generated by %s according to the structure\n"
989 "# of the project as defined in the .bip and .bil files\n"
990 "###########################################################################\n",
991 util_get_program_name());
993 abio_puts(makeFile, "\n");
994 abio_printf(makeFile, "PROGRAM = %s\n", abmfP_get_exe_file_name(project));
996 abio_puts(makeFile, "\n");
997 abio_puts(makeFile, "TARGETS.h = \\\n");
998 abio_printf(makeFile, "\t%s \\\n",
999 abmfP_get_utils_header_file_name(project));
1000 for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1001 (module = trav_next(&trav)) != NULL;
1004 if (!obj_is_defined(module))
1009 abio_printf(makeFile, "\t%s", abmfP_get_ui_header_file_name(module));
1010 if (thisModuleNum < (numModules-1))
1012 abio_puts(makeFile, " \\");
1014 abio_puts(makeFile, "\n");
1022 abio_puts(makeFile, "\n");
1023 abio_puts(makeFile, "TARGETS.c = \\\n");
1024 abio_printf(makeFile, "\t%s \\\n", abmfP_get_utils_c_file_name(project));
1025 for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1026 (module = trav_next(&trav)) != NULL;
1029 if (!obj_is_defined(module))
1034 abio_printf(makeFile, "\t%s", abmfP_get_ui_c_file_name(module));
1035 if (thisModuleNum < (numModules-1))
1037 abio_puts(makeFile, " \\");
1039 abio_puts(makeFile, "\n");
1047 * These are hand-edited, as well, so we cannot consider them
1048 * target .h files, which can be removed and regenerated on a whim.
1050 abio_puts(makeFile, "\n");
1051 abio_puts(makeFile, "TARGETS.h.merged = \\\n");
1052 abio_printf(makeFile, "\t%s\n",
1053 abmfP_get_project_header_file_name(project));
1059 * These are hand-edited, as well, so we cannot consider them
1060 * target .c files, which can be removed and regenerated on a whim.
1062 abio_puts(makeFile, "\n");
1063 abio_puts(makeFile, "TARGETS.c.merged = \\\n");
1064 abio_printf(makeFile, "\t%s \\\n", abmfP_get_project_c_file_name(project));
1065 for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1066 (module = trav_next(&trav)) != NULL;
1069 if (!obj_is_defined(module))
1074 abio_printf(makeFile, "\t%s", abmfP_get_stubs_c_file_name(module));
1075 if (thisModuleNum < (numModules-1))
1077 abio_puts(makeFile, " \\");
1079 abio_puts(makeFile, "\n");
1085 abio_puts(makeFile, "\n");
1086 abio_puts(makeFile, "SOURCES.h = $(TARGETS.h.merged) $(TARGETS.h)\n");
1088 abio_puts(makeFile, "\n");
1089 abio_puts(makeFile, "SOURCES.c = $(TARGETS.c.merged) $(TARGETS.c)\n");
1091 abio_puts(makeFile, "\n");
1092 abio_puts(makeFile, "OBJS = \\\n");
1093 abio_printf(makeFile, "\t%s \\\n",
1094 cvt_to_obj(abmfP_get_project_c_file_name(project)));
1095 abio_printf(makeFile, "\t%s \\\n",
1096 cvt_to_obj(abmfP_get_utils_c_file_name(project)));
1097 for (thisModuleNum = 0, trav_open(&trav, project, AB_TRAV_MODULES);
1098 (module = trav_next(&trav)) != NULL;
1101 if (!obj_is_defined(module))
1106 abio_printf(makeFile, "\t%s \\\n",
1107 cvt_to_obj(abmfP_get_ui_c_file_name(module)));
1108 abio_printf(makeFile, "\t%s",
1109 cvt_to_obj(abmfP_get_stubs_c_file_name(module)));
1111 if (thisModuleNum < (numModules-1))
1113 abio_puts(makeFile, " \\");
1115 abio_puts(makeFile, "\n");
1124 write_codegen_macro(File makeFile)
1126 abio_printf(makeFile, " %s = %s\n",
1127 CODEGEN_MACRO, util_get_program_name());
1134 obj_is_module_func(ABObj obj)
1136 return obj_is_module(obj);
1141 GenCodeInfo genCodeInfo,
1146 File makeFile = genCodeInfo->code_file;
1147 STRING prog = util_get_program_name();
1148 STRING projFile = obj_get_file(project);
1149 STRING modFile = NULL;
1150 char modName[MAXPATHLEN+1];
1151 ABObj firstModule = NULL;
1152 STRING firstModuleFileName = NULL;
1153 char projFlag[1024];
1154 AB_TRAVERSAL moduleTrav;
1155 ABObj module = NULL;
1159 firstModule = obj_get_child_cond(project, 0, obj_is_module_func);
1160 if (firstModule != NULL)
1162 firstModuleFileName = obj_get_file(firstModule);
1164 if (obj_is_default(project))
1166 strcpy(projFlag, "-nomerge -noproject");
1170 sprintf(projFlag, "-changed -merge -p %s", projFile);
1175 "######################################################################\n"
1176 "# Standard targets. #\n"
1177 "######################################################################\n"
1181 "all:: $(PROGRAM)\n"
1183 "$(PROGRAM) : $(SOURCES.c) $(SOURCES.h) $(OBJS)\n"
1185 " $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS)\n"
1189 if (! (obj_is_default(project) && (firstModuleFileName == NULL)) )
1191 if (osType == AB_OS_SUNOS)
1192 abio_printf(makeFile, "%s + %s + %s + %s: %s\n",
1193 abmfP_get_project_c_file_name(project),
1194 abmfP_get_project_header_file_name(project),
1195 abmfP_get_utils_c_file_name(project),
1196 abmfP_get_utils_header_file_name(project),
1197 obj_get_file(project));
1199 abio_printf(makeFile, "%s %s %s %s: %s\n",
1200 abmfP_get_project_c_file_name(project),
1201 abmfP_get_project_header_file_name(project),
1202 abmfP_get_utils_c_file_name(project),
1203 abmfP_get_utils_header_file_name(project),
1204 obj_get_file(project));
1206 abio_printf(makeFile,
1207 "\t$(%s) %s -main", CODEGEN_MACRO, projFlag);
1208 if (obj_is_default(project))
1210 abio_printf(makeFile, " %s", firstModuleFileName);
1212 abio_printf(makeFile, "\n");
1214 abio_printf(makeFile, "%s: %s %s $(TARGETS.h) $(TARGETS.h.merged)\n",
1215 cvt_to_obj(abmfP_get_project_c_file_name(project)),
1216 abmfP_get_project_c_file_name(project),
1217 obj_get_file(project));
1221 * Make the project.c file dependent upon the module header files.
1222 * That way, if a module changes, main() and the x-module connections
1223 * will be recompiled.
1225 abio_printf(makeFile, "%s: $(TARGETS.h)\n\n",
1226 abmfP_get_project_c_file_name(project));
1228 for (trav_open(&moduleTrav, project, AB_TRAV_MODULES);
1229 (module = trav_next(&moduleTrav)) != NULL; )
1231 if (!obj_is_defined(module))
1236 modFile = obj_get_file(module);
1237 util_strncpy(modName, obj_get_name(module), MAXPATHLEN+1);
1239 if (osType == AB_OS_SUNOS)
1240 abio_printf(makeFile, "\n%s + %s + %s: %s %s\n",
1241 abmfP_get_ui_c_file_name(module),
1242 abmfP_get_ui_header_file_name(module),
1243 abmfP_get_stubs_c_file_name(module),
1247 abio_printf(makeFile, "\n%s %s %s: %s %s\n",
1248 abmfP_get_ui_c_file_name(module),
1249 abmfP_get_ui_header_file_name(module),
1250 abmfP_get_stubs_c_file_name(module),
1254 abio_printf(makeFile, "\t$(%s) %s %s\n",
1255 CODEGEN_MACRO, projFlag, modName);
1258 * .o dependency on .c and .bil file
1260 abio_printf(makeFile, "%s: %s %s %s\n",
1261 cvt_to_obj(abmfP_get_ui_c_file_name(module)),
1262 abmfP_get_ui_c_file_name(module),
1263 abmfP_get_ui_header_file_name(module),
1265 abio_printf(makeFile, "%s: %s %s %s\n",
1266 cvt_to_obj(abmfP_get_stubs_c_file_name(module)),
1267 abmfP_get_stubs_c_file_name(module),
1268 abmfP_get_ui_header_file_name(module),
1271 trav_close(&moduleTrav);
1275 "CLEAN_FILES = core .dtcodegen.log *.BAK *.delta \\\n"
1276 " $(PROGRAM) $(OBJS) $(TARGETS.c) $(TARGETS.h)\n"
1278 " $(RM) $(CLEAN_FILES)\n"
1281 " $(RM) $(CLEAN_FILES) $(TARGETS.h.merged) $(TARGETS.c.merged) \\\n"
1282 " Makefile Makefile.aix Makefile.hpux Makefile.sunos \\\n"
1283 " Makefile.osf1 Makefile.unixware Makefile.linux \\\n"
1284 " Makefile.freebsd Makefile.netbsd Makefile.openbsd\n"
1292 * Converts a .c file name to a .o file name
1295 cvt_to_obj(STRING fileName)
1297 static char buf[MAXPATHLEN] = "";
1298 snprintf(buf, sizeof(buf), "%s", fileName);
1299 buf[strlen(buf)-1] = 'o';