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_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);
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);
123 static int write_file_header(
124 GenCodeInfo genCodeInfo,
128 static int write_ab_params(
129 GenCodeInfo genCodeInfo,
132 static int write_targets(
133 GenCodeInfo genCodeInfo,
138 static int write_local_libraries(
144 static int write_codegen_macro(
152 abmfP_write_make_file(
153 GenCodeInfo genCodeInfo,
156 BOOL useSourceBrowser
159 File makeFile = genCodeInfo->code_file;
163 determine_libs(&libs, project, osType);
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);
171 * Sun needs a NO_PARALLEL directive
173 if (osType == AB_OS_SUNOS)
175 abio_printf(genCodeInfo->code_file,
177 ".NO_PARALLEL: $(TARGETS.h) $(TARGETS.h.merged) $(TARGETS.c) $(TARGETS.c.merged)\n"
181 write_targets(genCodeInfo, project, osType);
188 determine_libs(AbmfLibs libs, ABObj project, AB_OS_TYPE osType)
190 int return_value = 0;
191 CGenProjData projData = mfobj_get_proj_data(project);
193 if (projData->has_ui_obj)
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);
206 if (osType == AB_OS_HPUX)
208 lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
212 if (projData->has_terminal)
214 lib_add(libs, LibDtHelp, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
215 lib_add(libs, LibDtTerm, ABMF_LIB_PREPEND, ABMF_LIB_REJECT_DUP);
218 #if defined(USL) || defined(__uxp__)
219 if (1) /* Workaround because tooltalk not being used when needed */
221 if (obj_get_tooltalk_level(project) != AB_TOOLTALK_NONE)
223 lib_add(libs, LibTt, ABMF_LIB_APPEND, ABMF_LIB_REJECT_DUP);
228 return_value = determine_aix_libs(libs, project);
232 return_value = determine_hpux_libs(libs, project);
236 return_value = determine_sunos_libs(libs, project);
239 return_value = determine_osf1_libs(libs, project);
242 return_value = determine_unixware_libs(libs, project);
245 return_value = determine_uxp_libs(libs, project);
248 return_value = determine_lnx_libs(libs, project);
251 return_value = determine_fbsd_libs(libs, project);
254 return_value = determine_nbsd_libs(libs, project);
257 return_value = determine_obsd_libs(libs, project);
265 determine_aix_libs(AbmfLibs libs, ABObj project)
272 determine_hpux_libs(AbmfLibs libs, ABObj project)
275 lib_add(libs, LibWlarchive, ABMF_LIB_PREPEND, ABMF_LIB_REPLACE_DUP);
276 lib_add(libs, LibWldefault, ABMF_LIB_APPEND, ABMF_LIB_REPLACE_DUP);
283 determine_sunos_libs(AbmfLibs libs, ABObj project)
289 determine_uxp_libs(AbmfLibs libs, ABObj project)
295 determine_osf1_libs(AbmfLibs libs, ABObj project)
301 determine_unixware_libs(AbmfLibs libs, ABObj project)
307 determine_lnx_libs(AbmfLibs libs, ABObj project)
313 determine_fbsd_libs(AbmfLibs libs, ABObj project)
319 determine_nbsd_libs(AbmfLibs libs, ABObj project)
325 determine_obsd_libs(AbmfLibs libs, ABObj project)
331 get_string_for_lib(AbmfLibDesc lib, AB_OS_TYPE osType)
333 STRING libString = NULL;
338 libString = abmfP_str_empty;
342 libString = "-lDtHelp";
346 libString = "-lDtSvc";
350 libString = "-lDtTerm";
354 libString = "-lDtWidget";
366 libString = "-lXext";
390 libString = "-Wl,-a,archive";
394 libString = "-Wl,-a,default";
403 lib_find(AbmfLibs libs, AbmfLibDesc lib)
406 int numLibs = libs->numLibs;
408 for (i = 0; i < numLibs; ++i)
410 if (libs->libs[i] == lib)
415 return ERR_NOT_FOUND;
420 lib_add(AbmfLibs libs, AbmfLibDesc lib, int where, int how)
425 if ((old_pos = lib_find(libs, lib)) >= 0)
427 if (how == ABMF_LIB_REJECT_DUP)
429 return ERR_DUPLICATE_KEY;
431 if (how == ABMF_LIB_REPLACE_DUP)
433 return ERR_NOT_IMPLEMENTED;
436 if (libs->numLibs >= MAX_LIBS)
438 return ERR_DATA_SPACE_FULL;
442 * Figure out where to put it
445 if (pos == ABMF_LIB_PREPEND)
449 if (pos == ABMF_LIB_APPEND)
457 if (pos < libs->numLibs)
460 memmove(&(libs->libs[pos +1]), &(libs->libs[pos]),
461 ((libs->numLibs+1) - pos) * sizeof(libs->libs[0]));
462 libs->libs[pos] = lib;
467 libs->libs[(libs->numLibs)++] = lib;
476 GenCodeInfo genCodeInfo,
481 STRING osName = util_os_type_to_string(osType);
482 File makeFile = genCodeInfo->code_file;
484 abio_printf(makeFile,
486 "###########################################################################\n"
488 "# CDE Application Builder Makefile\n"
490 "# This file was generated by `%s' from project file `%s'.\n"
491 "# The target platform for this Makefile is %s.\n"
493 "###########################################################################\n",
494 util_get_program_name(),
495 obj_get_file(project),
509 int return_value = 0;
514 return_value = write_aix_stuff(makeFile, libs);
518 return_value = write_hpux_stuff(makeFile, libs);
522 return_value = write_sunos_params(makeFile, libs);
526 return_value = write_unixware_params(makeFile, libs);
530 return_value = write_uxp_params(makeFile, libs);
534 return_value = write_osf1_stuff(makeFile, libs);
538 return_value = write_lnx_params(makeFile, libs);
542 return_value = write_fbsd_params(makeFile, libs);
546 return_value = write_nbsd_params(makeFile, libs);
550 return_value = write_obsd_params(makeFile, libs);
559 write_aix_stuff(File makeFile, AbmfLibs libs)
561 STRING osName = util_os_type_to_string(AB_OS_AIX);
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",
570 abio_puts(makeFile, "\n");
573 " INCLUDES = -I/usr/dt/include -I/X11/include\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"
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"
589 write_local_libraries(makeFile, libs, AB_OS_AIX);
593 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
595 " LDLIBS = $(SYS_LIBRARIES)\n"
596 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
605 write_hpux_stuff(File makeFile, AbmfLibs libs)
607 STRING osName = util_os_type_to_string(AB_OS_HPUX);
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",
616 abio_puts(makeFile, "\n");
619 " INCLUDES = -I/usr/dt/include -I/X11/include\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"
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"
635 write_local_libraries(makeFile, libs, AB_OS_HPUX);
639 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
641 " LDLIBS = $(SYS_LIBRARIES)\n"
642 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
651 write_sunos_params(File makeFile, AbmfLibs libs)
653 STRING osName = util_os_type_to_string(AB_OS_SUNOS);
655 abio_printf(makeFile,
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",
668 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
673 " CDEBUGFLAGS = -g\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"
681 write_local_libraries(makeFile, libs, AB_OS_SUNOS);
685 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
687 " LDLIBS = $(SYS_LIBRARIES)\n"
688 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
696 write_uxp_params(File makeFile, AbmfLibs libs)
698 STRING osName = util_os_type_to_string(AB_OS_UXP);
700 abio_printf(makeFile,
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",
708 abio_puts(makeFile, "\n");
711 " INCLUDES = -I/usr/dt/include -I/X11/include\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");
723 write_local_libraries(makeFile, libs, AB_OS_UXP);
726 " CFLAGS = $(CDEBUGFLAGS) -D_POSIX_SOURCE=1 $(INCLUDES) $(STD_DEFINES)"
728 " LDLIBS = $(SYS_LIBRARIES)\n"
729 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
737 write_osf1_stuff(File makeFile, AbmfLibs libs)
739 STRING osName = util_os_type_to_string(AB_OS_OSF1);
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",
748 abio_puts(makeFile, "\n");
751 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
753 " STD_DEFINES = -DDEC\n"
756 " CDEBUGFLAGS = -g\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"
766 write_local_libraries(makeFile, libs, AB_OS_OSF1);
770 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
772 " LDLIBS = $(SYS_LIBRARIES)\n"
773 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS) $(EXTRA_LOAD_FLAGS)\n"
781 write_unixware_params(File makeFile, AbmfLibs libs)
783 STRING osName = util_os_type_to_string(AB_OS_UNIXWARE);
785 abio_printf(makeFile,
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",
793 abio_puts(makeFile, "\n");
796 " INCLUDES = -I/usr/dt/include -I/X11/include\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");
808 write_local_libraries(makeFile, libs, AB_OS_UNIXWARE);
811 " CFLAGS = $(CDEBUGFLAGS) -D_POSIX_SOURCE=1 $(INCLUDES) $(STD_DEFINES)"
813 " LDLIBS = $(SYS_LIBRARIES)\n"
814 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
822 write_lnx_params(File makeFile, AbmfLibs libs)
824 STRING osName = util_os_type_to_string(AB_OS_LNX);
826 abio_printf(makeFile,
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",
839 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
844 " CDEBUGFLAGS = -g\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"
852 write_local_libraries(makeFile, libs, AB_OS_LNX);
856 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
858 " LDLIBS = $(SYS_LIBRARIES)\n"
859 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
867 write_fbsd_params(File makeFile, AbmfLibs libs)
869 STRING osName = util_os_type_to_string(AB_OS_FBSD);
871 abio_printf(makeFile,
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",
884 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
889 " CDEBUGFLAGS = -g\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"
897 write_local_libraries(makeFile, libs, AB_OS_FBSD);
901 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
903 " LDLIBS = $(SYS_LIBRARIES)\n"
904 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
912 write_nbsd_params(File makeFile, AbmfLibs libs)
914 STRING osName = util_os_type_to_string(AB_OS_NBSD);
916 abio_printf(makeFile,
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",
929 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
934 " CDEBUGFLAGS = -g\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"
942 write_local_libraries(makeFile, libs, AB_OS_NBSD);
946 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
948 " LDLIBS = $(SYS_LIBRARIES)\n"
949 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
957 write_obsd_params(File makeFile, AbmfLibs libs)
959 STRING osName = util_os_type_to_string(AB_OS_OBSD);
961 abio_printf(makeFile,
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",
974 " INCLUDES = -I/usr/dt/include -I/X11/include\n"
979 " CDEBUGFLAGS = -g\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"
987 write_local_libraries(makeFile, libs, AB_OS_OBSD);
991 " CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES)"
993 " LDLIBS = $(SYS_LIBRARIES)\n"
994 " LDOPTIONS = $(CDE_LDFLAGS) $(ALLX_LDFLAGS)\n"
1002 write_local_libraries(
1008 int numLibs = libs->numLibs;
1010 AbmfLibDesc lib = LibNone;
1011 STRING libString = NULL;
1013 abio_puts(makeFile, " LOCAL_LIBRARIES =");
1014 for (i = 0; i < numLibs; ++i)
1016 lib = libs->libs[i];
1017 libString = get_string_for_lib(lib, osType);
1018 if (libString != NULL)
1020 abio_printf(makeFile, " %s", libString);
1023 abio_puts(makeFile, nlstr);
1031 GenCodeInfo genCodeInfo,
1035 File makeFile = genCodeInfo->code_file;
1036 int numModules = trav_count_cond(project, AB_TRAV_MODULES, obj_is_defined_module);
1037 int thisModuleNum = 0;
1039 ABObj module = NULL;
1041 abio_printf(makeFile,
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());
1049 abio_puts(makeFile, "\n");
1050 abio_printf(makeFile, "PROGRAM = %s\n", abmfP_get_exe_file_name(project));
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;
1060 if (!obj_is_defined(module))
1065 abio_printf(makeFile, "\t%s", abmfP_get_ui_header_file_name(module));
1066 if (thisModuleNum < (numModules-1))
1068 abio_puts(makeFile, " \\");
1070 abio_puts(makeFile, "\n");
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;
1085 if (!obj_is_defined(module))
1090 abio_printf(makeFile, "\t%s", abmfP_get_ui_c_file_name(module));
1091 if (thisModuleNum < (numModules-1))
1093 abio_puts(makeFile, " \\");
1095 abio_puts(makeFile, "\n");
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.
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));
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.
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;
1125 if (!obj_is_defined(module))
1130 abio_printf(makeFile, "\t%s", abmfP_get_stubs_c_file_name(module));
1131 if (thisModuleNum < (numModules-1))
1133 abio_puts(makeFile, " \\");
1135 abio_puts(makeFile, "\n");
1141 abio_puts(makeFile, "\n");
1142 abio_puts(makeFile, "SOURCES.h = $(TARGETS.h.merged) $(TARGETS.h)\n");
1144 abio_puts(makeFile, "\n");
1145 abio_puts(makeFile, "SOURCES.c = $(TARGETS.c.merged) $(TARGETS.c)\n");
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;
1157 if (!obj_is_defined(module))
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)));
1167 if (thisModuleNum < (numModules-1))
1169 abio_puts(makeFile, " \\");
1171 abio_puts(makeFile, "\n");
1180 write_codegen_macro(File makeFile)
1182 abio_printf(makeFile, " %s = %s\n",
1183 CODEGEN_MACRO, util_get_program_name());
1190 obj_is_module_func(ABObj obj)
1192 return obj_is_module(obj);
1197 GenCodeInfo genCodeInfo,
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;
1215 firstModule = obj_get_child_cond(project, 0, obj_is_module_func);
1216 if (firstModule != NULL)
1218 firstModuleFileName = obj_get_file(firstModule);
1220 if (obj_is_default(project))
1222 strcpy(projFlag, "-nomerge -noproject");
1226 sprintf(projFlag, "-changed -merge -p %s", projFile);
1231 "######################################################################\n"
1232 "# Standard targets. #\n"
1233 "######################################################################\n"
1237 "all:: $(PROGRAM)\n"
1239 "$(PROGRAM) : $(SOURCES.c) $(SOURCES.h) $(OBJS)\n"
1241 " $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS)\n"
1245 if (! (obj_is_default(project) && (firstModuleFileName == NULL)) )
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));
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));
1262 abio_printf(makeFile,
1263 "\t$(%s) %s -main", CODEGEN_MACRO, projFlag);
1264 if (obj_is_default(project))
1266 abio_printf(makeFile, " %s", firstModuleFileName);
1268 abio_printf(makeFile, "\n");
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));
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.
1281 abio_printf(makeFile, "%s: $(TARGETS.h)\n\n",
1282 abmfP_get_project_c_file_name(project));
1284 for (trav_open(&moduleTrav, project, AB_TRAV_MODULES);
1285 (module = trav_next(&moduleTrav)) != NULL; )
1287 if (!obj_is_defined(module))
1292 modFile = obj_get_file(module);
1293 util_strncpy(modName, obj_get_name(module), MAXPATHLEN+1);
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),
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),
1310 abio_printf(makeFile, "\t$(%s) %s %s\n",
1311 CODEGEN_MACRO, projFlag, modName);
1314 * .o dependency on .c and .bil file
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),
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),
1327 trav_close(&moduleTrav);
1331 "CLEAN_FILES = core .dtcodegen.log *.BAK *.delta \\\n"
1332 " $(PROGRAM) $(OBJS) $(TARGETS.c) $(TARGETS.h)\n"
1334 " $(RM) $(CLEAN_FILES)\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"
1348 * Converts a .c file name to a .o file name
1351 cvt_to_obj(STRING fileName)
1353 static char buf[MAXPATHLEN] = "";
1354 snprintf(buf, sizeof(buf), "%s", fileName);
1355 buf[strlen(buf)-1] = 'o';