Skip to content

Commit e6af7fc

Browse files
authored
Merge pull request #57 from IBM/fix/module_sub_deps
Fixes to multi module program depedencies and makefile
2 parents dbccf8c + e00f7f6 commit e6af7fc

File tree

7 files changed

+423
-3
lines changed

7 files changed

+423
-3
lines changed

cli/src/targets.ts

+17-2
Original file line numberDiff line numberDiff line change
@@ -1390,7 +1390,7 @@ export class Targets {
13901390
newImports.push(possibleSrvPgmDep);
13911391
}
13921392

1393-
} else if (currentTarget.type === `PGM`) {
1393+
} else if ([`PGM`, `MODULE`].includes(currentTarget.type)) {
13941394
// Perhaps we're looking at a program object, which actually should be a multi
13951395
// module program, so we do a lookup for additional modules.
13961396
const possibleModuleDep = allModules.find(mod => mod.exports && mod.exports.includes(importName.toUpperCase()))
@@ -1414,6 +1414,20 @@ export class Targets {
14141414
// to be a program made up of many modules, usually done with CRTPGM
14151415
if (currentTarget.deps.some(d => d.type === `MODULE`)) {
14161416
this.convertBoundProgramToMultiModuleProgram(currentTarget);
1417+
1418+
// Then, also include any of the modules dep modules into the currentTarget deps!!
1419+
const depTargets = currentTarget.deps
1420+
.filter(d => d.type === `MODULE`)
1421+
.map(m => this.getTarget(m));
1422+
1423+
// Confusing names, it means: dependencies of the dependencies that are modules
1424+
const depDeps = depTargets .map(m => m?.deps).flat().filter(d => d.type === `MODULE`);
1425+
1426+
for (const newDep of depDeps) {
1427+
if (newDep && !currentTarget.deps.some(d => d.systemName === newDep.systemName && d.type === newDep.type)) {
1428+
currentTarget.deps.push(newDep);
1429+
}
1430+
}
14171431
}
14181432
}
14191433
}
@@ -1459,7 +1473,8 @@ export class Targets {
14591473
imports: currentTarget.imports,
14601474
exports: [],
14611475
type: `MODULE`,
1462-
relativePath: basePath
1476+
relativePath: basePath,
1477+
extension: path.extname(basePath).substring(1)
14631478
};
14641479

14651480
// Replace the old resolved object with the module
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
**free
2+
3+
ctl-opt nomain;
4+
5+
dcl-s names char(15) dim(78) ctdata;
6+
dcl-s surnames char(15) dim(27) ctdata;
7+
dcl-s streetTypes char(3) dim(9) ctdata;
8+
dcl-s states char(2) dim(50) ctdata;
9+
dcl-s cities char(15) dim(15) ctdata;
10+
11+
dcl-proc random export;
12+
dcl-pi *n int(10);
13+
low packed(7) const;
14+
high packed(7) const;
15+
end-pi;
16+
17+
dcl-s result float(8);
18+
dcl-s range packed(7);
19+
dcl-s seed int(10);
20+
21+
dcl-pr ceeran0 extproc('CEERAN0');
22+
*n int(10);
23+
*n float(8);
24+
*n char(12) options(*omit);
25+
end-pr;
26+
27+
range = (high - low) + 1;
28+
ceeran0(seed:result:*omit);
29+
30+
return %int(result * range);
31+
end-proc;
32+
33+
dcl-proc getFirst export;
34+
dcl-pi *n char(15);
35+
end-pi;
36+
37+
return names(random(1:%elem(names)));
38+
end-proc;
39+
40+
dcl-proc getSurname export;
41+
dcl-pi *n char(15);
42+
end-pi;
43+
44+
return surnames(random(1:%elem(surnames)));
45+
end-proc;
46+
47+
dcl-proc getStreetType export;
48+
dcl-pi *n char(3);
49+
end-pi;
50+
51+
return streetTypes(random(1:%elem(streetTypes)));
52+
end-proc;
53+
54+
dcl-proc getState export;
55+
dcl-pi *n char(2);
56+
end-pi;
57+
58+
return states(random(1:%elem(states)));
59+
end-proc;
60+
61+
dcl-proc getCity export;
62+
dcl-pi *n char(15);
63+
end-pi;
64+
65+
return cities(random(1:%elem(cities)));
66+
end-proc;
67+
68+
**CTDATA names
69+
DAVID
70+
JAMES
71+
JOHN
72+
ROBERT
73+
MICHAEL
74+
WILLIAM
75+
MARY
76+
PATRICIA
77+
LINDA
78+
BARBARA
79+
ELIZABETH
80+
JENNIFER
81+
MARIA
82+
SUSAN
83+
MARGARET
84+
DOROTHY
85+
LISA
86+
NANCY
87+
KAREN
88+
BETTY
89+
HELEN
90+
SANDRA
91+
DONNA
92+
CAROL
93+
RUTH
94+
SHARON
95+
MICHELLE
96+
LAURA
97+
SARAH
98+
KIMBERLY
99+
DEBORAH
100+
JESSICA
101+
SHIRLEY
102+
CYNTHIA
103+
ANGELA
104+
MELISSA
105+
BRENDA
106+
AMY
107+
ANNA
108+
REBECCA
109+
VIRGINIA
110+
KATHLEEN
111+
PAMELA
112+
MARTHA
113+
DEBRA
114+
AMANDA
115+
STEPHANIE
116+
CAROLYN
117+
CHRISTINE
118+
MARIE
119+
JANET
120+
CATHERINE
121+
FRANCES
122+
ANN
123+
JOYCE
124+
DIANE
125+
ALICE
126+
JULIE
127+
HEATHER
128+
TERESA
129+
DORIS
130+
GLORIA
131+
EVELYN
132+
JEAN
133+
CHERYL
134+
MILDRED
135+
KATHERINE
136+
JOAN
137+
ASHLEY
138+
JUDITH
139+
ROSE
140+
JANICE
141+
KELLY
142+
NICOLE
143+
JUDY
144+
CHRISTINA
145+
KATHY
146+
THERESA
147+
**CTDATA surnames
148+
SMITH
149+
JOHNSON
150+
WILLIAMS
151+
JONES
152+
BROWN
153+
DAVIS
154+
MILLER
155+
WILSON
156+
MOORE
157+
TAYLOR
158+
ANDERSON
159+
THOMAS
160+
JACKSON
161+
WHITE
162+
HARRIS
163+
MARTIN
164+
THOMPSON
165+
GARCIA
166+
MARTINEZ
167+
ROBINSON
168+
CLARK
169+
RODRIGUEZ
170+
LEWIS
171+
LEE
172+
WALKER
173+
HALL
174+
ALLEN
175+
**CTDATA streetTypes
176+
ST
177+
AVE
178+
RD
179+
DR
180+
CIR
181+
BLVD
182+
WAY
183+
CT
184+
LANE
185+
**CTDATA states
186+
AL
187+
AK
188+
AZ
189+
AR
190+
CA
191+
CO
192+
CT
193+
DE
194+
FL
195+
GA
196+
HI
197+
ID
198+
IL
199+
IN
200+
IA
201+
KS
202+
KY
203+
LA
204+
ME
205+
MD
206+
MA
207+
MI
208+
MN
209+
MS
210+
MO
211+
MT
212+
NE
213+
NV
214+
NH
215+
NJ
216+
NM
217+
NY
218+
NC
219+
ND
220+
OH
221+
OK
222+
OR
223+
PA
224+
RI
225+
SC
226+
SD
227+
TN
228+
TX
229+
UT
230+
VT
231+
VA
232+
WA
233+
WV
234+
WI
235+
WY
236+
**CTDATA cities
237+
SPARTANBURG
238+
GREENVILLE
239+
COLUMBIA
240+
CHARLESTON
241+
MYRTLE BEACH
242+
ROCK HILL
243+
FLORENCE
244+
ASHEVILLE
245+
HENDERSONVILLE
246+
ANDERSON
247+
GREENWOOD
248+
GAFFNEY
249+
EASLEY
250+
GREENWOOD
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
**free
2+
3+
ctl-opt nomain;
4+
5+
dcl-pr getFirst char(15) extproc('GETFIRST');
6+
end-pr;
7+
8+
dcl-pr getSurname char(15) extproc('GETSURNAME');
9+
end-pr;
10+
11+
dcl-pr random int(10) extproc('RANDOM');
12+
low packed(7) const;
13+
high packed(7) const;
14+
end-pr;
15+
16+
dcl-pr getStreetType char(3) extproc('GETSTREETTYPE');
17+
end-pr;
18+
19+
dcl-pr getCity char(15) extproc('GETCITY');
20+
end-pr;
21+
22+
dcl-pr getState char(2) extproc('GETSTATE');
23+
end-pr;
24+
25+
dcl-proc createCustomer export;
26+
dcl-pi *n int(10);
27+
type char(1) const;
28+
end-pi;
29+
30+
dcl-f customer qualified keyed usropn usage(*output);
31+
dcl-ds cust likerec(customer.custfmt);
32+
33+
cust.FIRSTNME = getFirst();
34+
cust.LASTNAME = getSurname();
35+
cust.PHONENO = %char(random(1111:9999));
36+
cust.CREATED = %date;
37+
cust.ADDR1 = %char(random(1:9999)) + ' ' + %trimr(getSurname()) + ' ' + getStreetType();
38+
cust.CITY = getCity();
39+
cust.STATE = getState();
40+
cust.ZIP = %char(random(10000:99999));
41+
42+
select;
43+
when (type = '1'); //RLA
44+
OPEN customer;
45+
write customer.CUSTFMT cust;
46+
CLOSE customer;
47+
when (type = '2'); //SQL
48+
EXEC SQL
49+
INSERT INTO CUSTOMER
50+
VALUES(:cust);
51+
52+
other;
53+
return -1;
54+
endsl;
55+
56+
end-proc;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
**free
2+
3+
dcl-pr createCustomer int(10) extproc('CREATECUSTOMER');
4+
type char(1) const;
5+
end-pr;
6+
7+
ctl-opt dftactgrp(*no);
8+
9+
createCustomer('1');
10+
createCustomer('2');
11+
12+
return;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- https://www.ibm.com/docs/en/i/7.3?topic=tables-employee-table-employee
2+
3+
CREATE OR REPLACE TABLE CUSTOMER
4+
(CUSNO integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
5+
FIRSTNME VARCHAR(12) NOT NULL,
6+
LASTNAME VARCHAR(15) NOT NULL,
7+
PHONENO CHAR(4) NOT NULL,
8+
CREATED DATE NOT NULL DEFAULT CURRENT_DATE,
9+
ADDR1 VARCHAR(30) NOT NULL,
10+
ADDR2 VARCHAR(30) NOT NULL,
11+
CITY VARCHAR(20) NOT NULL,
12+
STATE CHAR(2) NOT NULL,
13+
ZIP CHAR(5) NOT NULL,
14+
PRIMARY KEY (CUSNO)
15+
) RCDFMT CUSTFMT;
16+
17+
ALTER TABLE CUSTOMER
18+
ADD CONSTRAINT NUMBER
19+
CHECK (PHONENO >= '0000' AND PHONENO <= '9998');

cli/test/make.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ test(`Multi-module program and service program`, () => {
133133
'$(PREPATH)/MYWEBAPP.PGM: ',
134134
'\tliblist -c $(BIN_LIB);\\',
135135
'\tliblist -a $(LIBL);\\',
136-
'\tsystem "CRTPGM PGM($(BIN_LIB)/MYWEBAPP) ENTRY(MYWEBAPP) MODULES(HANDLERA HANDLERB MYWEBAPP) TGTRLS(*CURRENT) TGTCCSID(*JOB) BNDDIR($(BNDDIR)) DFTACTGRP(*NO)" > .logs/mywebapp.splf'
136+
'\tsystem "CRTPGM PGM($(BIN_LIB)/MYWEBAPP) ENTMOD(MYWEBAPP) MODULE(HANDLERA HANDLERB MYWEBAPP) TGTRLS(*CURRENT) BNDDIR($(BNDDIR)) ACTGRP(*NEW)" > .logs/mywebapp.splf'
137137
].join());
138138

139139
const webappMod = targets.getTarget({systemName: `MYWEBAPP`, type: `MODULE`});

0 commit comments

Comments
 (0)