0001 #!/usr/bin/pscript
0002
0003 userlog("Generate UBF table files");
0004
0005 //Include wizard base.
0006 compilestring(getwizardbase())();
0007
0008 //Provision class
0009 class UBFTab extends WizardBase {
0010
0011 constructor()
0012 {
0013 base.constructor();
0014 }
0015
0016 //Configure it:
0017 </ order=0, name = "UBF Table name (.fd will be added)", type = "string", min=1, max=512 />
0018 table_name = "test";
0019
0020 </ order=1, name = "Base number", type = "number", min=0/>
0021 base_number = "6000";
0022
0023 </ order=2, name = "Add test fields", type = "yn"/>
0024 testfields = "y";
0025
0026 </ order=3, name = "Gen Exfields", type = "yn"/>
0027 genexfields = "y";
0028
0029 </ order=4, name = "Gen makefile", type = "yn"/>
0030 genmake = "y";
0031
0032 </ order=5, name = "Target language (c/go/java)", type = "string"
0033 depend="(::prov.genmake==\"y\")" regex="^c|go|java$" />
0034 makeLang = "c";
0035
0036 </ order=6, name = "Go Pakcage name", type = "string",
0037 depend="(::prov.genmake==\"go\")" />
0038 go_pkg_name = "ubftab";
0039
0040 tabFile = "";
0041 exfieldsFile = "";
0042 makeFile = "";
0043 makeFileCommon = "";
0044
0045 function getOutputFiles()
0046 {
0047 tabFile=appHome+"/"+table_name+".fd";
0048 exfieldsFile=appHome+"/Exfields";
0049
0050 makeFileCommon=appHome+"/Makefile";
0051
0052 if (makeLang=="c")
0053 {
0054 makeFile=appHome+"/Mclang";
0055 }
0056 else if (makeLang=="go")
0057 {
0058 makeFile=appHome+"/Mgolang";
0059 }
0060 else if (makeLang=="java")
0061 {
0062 makeFile=appHome+"/Mjava";
0063 }
0064 }
0065
0066 ////////////////////////////////////////////////////////////////////////
0067 //Table file
0068 ////////////////////////////////////////////////////////////////////////
0069 tabFileVal = "";
0070 function buildTabFile()
0071 {
0072
0073 tabFileVal = @"
0074 $#ifndef __"+table_name.toupper()+@"_FD
0075 $#define __"+table_name.toupper()+@"_FD
0076
0077 *base "+base_number.tostring()+@"
0078
0079 "+(testfields=="y"?@"
0080 T_CHAR_FLD 11 char - 1 Chart test field 1
0081 T_CHAR_2_FLD 12 char - 1 Chart test field 2
0082 T_SHORT_FLD 21 short - 1 Short test field 1
0083 T_SHORT_2_FLD 22 short - 1 Short test field 2
0084 T_LONG_FLD 31 long - 1 Long test field 1
0085 T_LONG_2_FLD 32 long - 1 Long test field 2
0086 T_FLOAT_FLD 41 float - 1 Float test field 1
0087 T_FLOAT_2_FLD 42 float - 1 Float test field 2
0088 T_FLOAT_3_FLD 43 float - 1 Float test field 3
0089 T_DOUBLE_FLD 51 double - 1 Double test field 1
0090 T_DOUBLE_2_FLD 52 double - 1 Double test field 2
0091 T_DOUBLE_3_FLD 53 double - 1 Double test field 3
0092 T_DOUBLE_4_FLD 54 double - 1 Double test field 4
0093 T_STRING_FLD 61 string - 1 String test field 1
0094 T_STRING_2_FLD 62 string - 1 String test field 2
0095 T_STRING_3_FLD 63 string - 1 String test field 3
0096 T_STRING_4_FLD 64 string - 1 String test field 4
0097 T_STRING_5_FLD 65 string - 1 String test field 5
0098 T_STRING_6_FLD 66 string - 1 String test field 6
0099 T_STRING_7_FLD 67 string - 1 String test field 7
0100 T_STRING_8_FLD 68 string - 1 String test field 8
0101 T_STRING_9_FLD 69 string - 1 String test field 9
0102 T_STRING_10_FLD 10 string - 1 String test field 10
0103 T_CARRAY_FLD 81 carray - 1 Carray test field 1
0104 T_CARRAY_2_FLD 82 carray - 1 Carray test field 2
0105 ":"")+@"
0106
0107 $#endif
0108 ";
0109 }
0110
0111
0112 ////////////////////////////////////////////////////////////////////////
0113 //Build makefile, END
0114 ////////////////////////////////////////////////////////////////////////
0115 makeFileVal = "";
0116 function buildMakefile()
0117 {
0118 //Get the suffix
0119 local suffix = "";
0120 local langMode = "";
0121 if (makeLang=="c")
0122 {
0123 suffix = ".h";
0124 langMode = "0"; //It is c
0125 }
0126 else
0127 {
0128 suffix = ".go";
0129 langMode = "1"; //It is go
0130 }
0131
0132 if (makeLang=="java")
0133 {
0134 makeFileVal = @"
0135 JAVAC=javac
0136 SOURCEDIR=.
0137 SOURCES := $(wildcard *.fd)
0138 SOURCES += Exfields
0139
0140 OUTPUT = $(addsuffix .java, $(basename $(SOURCES)))
0141 CLASS = $(addsuffix .class, $(basename $(SOURCES)))
0142
0143 comma:= ,
0144 empty:=
0145 space:= $(empty) $(empty)
0146
0147 export FIELDTBLS=$(subst $(space),$(comma),$(SOURCES))
0148 export FLDTBLDIR=$(shell pwd)
0149 unexport NDRX_CCONFIG
0150
0151 $(info $$SOURCES is [${SOURCES}])
0152 $(info $$CLASS is [${CLASS}])
0153 $(info $$OUTPUT is [${OUTPUT}])
0154 $(info $$FIELDTBLS is [${FIELDTBLS}])
0155
0156 PACKAGE=ubftab.jar
0157
0158 %.java : $(SOURCES)
0159 mkfldhdr -m2 $(SOURCES)
0160
0161 %.class : %.java
0162 $(JAVAC) $(basename $<).java
0163
0164 $(PACKAGE) : $(CLASS)
0165 @echo ""Manifest-Version: 1.0"" > manifest.txt
0166 @echo ""Class-Path: ."" >> manifest.txt
0167 jar -cmf manifest.txt ${PACKAGE} $(CLASS)
0168 - rm manifest.txt
0169
0170 .PHONY: clean
0171 clean:
0172 - rm *.java *.class *.jar manifest.txt
0173 ";
0174 }
0175 else
0176 {
0177 makeFileVal = @"
0178 SOURCEDIR=.
0179 SOURCES := $(shell find $(SOURCEDIR) -name '*.fd')
0180 "+(genexfields=="y"?"SOURCES += Exfields":"")+@"
0181
0182 OUTPUT = $(addsuffix "+suffix+@", $(SOURCES))
0183
0184 comma:= ,
0185 empty:=
0186 space:= $(empty) $(empty)
0187
0188 export FIELDTBLS=$(subst $(space),$(comma),$(SOURCES))
0189 export FLDTBLDIR=$(shell pwd)
0190 unexport NDRX_CCONFIG
0191
0192 $(info $$SOURCES is [${SOURCES}])
0193 $(info $$OUTPUT is [${OUTPUT}])
0194 $(info $$FIELDTBLS is [${FIELDTBLS}])
0195
0196 PACKAGE="+go_pkg_name+@"
0197
0198 .DEFAULT_GOAL: $(OUTPUT)
0199 LDFLAGS=
0200
0201 $(OUTPUT): $(SOURCES)
0202 mkfldhdr -m"+langMode+@" -p${PACKAGE}
0203 "+ (makeLang=="go"? @" go build ${LDFLAGS} -o ${PACKAGE} *.go
0204 go install ${LDFLAGS} ./...":"")+@"
0205
0206 .PHONY: clean
0207 clean:
0208 - rm *"+suffix+@"
0209 ";
0210 }
0211 }
0212
0213 ////////////////////////////////////////////////////////////////////////
0214 //Build makefile, END
0215 ////////////////////////////////////////////////////////////////////////
0216 makeFileCommonVal = "";
0217 function makeFileCommonGen()
0218 {
0219
0220 makeFileCommonVal = @"
0221 .DEFAULT_GOAL: all
0222 .PHONY: clean all
0223
0224 all:
0225 -$(MAKE) -f Mclang
0226 -$(MAKE) -f Mgolang
0227 -$(MAKE) -f Mjava
0228 clean:
0229 -$(MAKE) -f Mclang clean
0230 -$(MAKE) -f Mgolang clean
0231 -$(MAKE) -f Mjava clean
0232 ";
0233 }
0234 }
0235
0236 //Run the mater installer
0237 function install()
0238 {
0239 local root = getroottable();
0240
0241 //Create a provision object
0242 root["prov"] <- UBFTab();
0243
0244 if (!::prov.isDefaulted)
0245 {
0246 ::prov.runInteractive();
0247 }
0248
0249 if (::prov.validatAndPrintConfig())
0250 {
0251 ::prov.getOutputFiles();
0252 ::prov.buildTabFile();
0253
0254 if (!::prov.writeFile(::prov.tabFile, ::prov.tabFileVal))
0255 {
0256 return false;
0257 }
0258
0259 //Write Exfields if requested...
0260 if ("y"==::prov.genexfields)
0261 {
0262 if (root.rawin("getExfields"))
0263 {
0264 if (!::prov.writeFile(::prov.exfieldsFile, ::getExfields()))
0265 {
0266 return false;
0267 }
0268 }
0269 }
0270
0271 //Build makefile if needed...
0272 if ("y"==::prov.genmake)
0273 {
0274 ::prov.buildMakefile();
0275
0276 if (!::prov.writeFile(::prov.makeFile, ::prov.makeFileVal))
0277 {
0278 return false;
0279 }
0280
0281 ::prov.makeFileCommonGen();
0282
0283 if (!::prov.writeFile(::prov.makeFileCommon,
0284 ::prov.makeFileCommonVal))
0285 {
0286 return false;
0287 }
0288 }
0289 }
0290 else
0291 {
0292 return false;
0293 }
0294
0295 return true;
0296 }
0297
0298 if (::install())
0299 {
0300 print("Gen ok!\n");
0301
0302 return 0;
0303 }
0304 else
0305 {
0306 print("Gen failed!\n");
0307 return -1;
0308 }