Skip to content

Commit b9ac050

Browse files
authored
Merge pull request #126 from IBM/fix/better_support_for_srcfile
Better support for steps to copy to streamfile for member compiles
2 parents afe96ef + 2b963e7 commit b9ac050

File tree

6 files changed

+46
-27
lines changed

6 files changed

+46
-27
lines changed

cli/src/builders/make/index.ts

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,21 @@ export class MakeProject {
9292
};
9393
}
9494

95+
const qsysTempName = `QTMPSRC`;
96+
97+
if (data.member || data.parameters?.srcfile) {
98+
data.member = true;
99+
data.parameters[`srcfile`] = `$(BIN_LIB)/${qsysTempName}`;
100+
data.parameters[`srcmbr`] = ileObject.systemName;
101+
102+
steps.push(
103+
{
104+
object: {name: ileObject.systemName, type: ileObject.type},
105+
command: MakeProject.resolveCommand(`CPYFRMSTMF FROMSTMF('${asPosix(ileObject.relativePath)}') TOMBR('/QSYS.LIB/&CURLIB.LIB/${qsysTempName}.FILE/${data.parameters[`srcmbr`]}.MBR') MBROPT(*REPLACE)`, ileObject, commandOptions)
106+
}
107+
);
108+
}
109+
95110
const command = MakeProject.resolveCommand(toCl(data.command, data.parameters), ileObject, commandOptions);
96111

97112
steps.push({
@@ -348,10 +363,6 @@ export class MakeProject {
348363
return lines;
349364
}
350365

351-
static generateCommand(data: CompileData, ileObject: ILEObjectTarget): string|undefined {
352-
return MakeProject.resolveCommand(toCl(data.command, data.parameters), ileObject);
353-
}
354-
355366
static generateSpecificTarget(data: CompileData, ileObject: ILEObjectTarget, customAttributes?: CommandParameters): string[] {
356367
let lines: string[] = [];
357368

@@ -377,18 +388,23 @@ export class MakeProject {
377388
return undefined;
378389
}
379390

380-
const resolvedCommand = MakeProject.generateCommand(data, ileObject);
391+
const qsysTempName = `QTMPSRC`;
392+
393+
if (data.member) {
394+
data.parameters[`srcfile`] = `$(BIN_LIB)/${qsysTempName}`;
395+
data.parameters[`srcmbr`] = ileObject.systemName;
396+
}
397+
398+
const resolvedCommand = MakeProject.resolveCommand(toCl(data.command, data.parameters), ileObject);
381399
const objectKey = `${ileObject.systemName}.${ileObject.type}`;
382-
const parentName = ileObject.relativePath ? path.dirname(ileObject.relativePath) : undefined;
383-
const qsysTempName: string | undefined = (parentName && parentName.length > 10 ? parentName.substring(0, 10) : parentName);
384400

385401
lines.push(
386402
`$(PREPATH)/${objectKey}: ${asPosix(ileObject.relativePath)}`,
387403
...(qsysTempName && data.member ?
388404
[
389405
// TODO: consider CCSID when creating the source file
390-
`\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/${qsysTempName}) RCDLEN(112) CCSID(${sourceFileCcsid})"`,
391-
`\tsystem "CPYFRMSTMF FROMSTMF('${asPosix(ileObject.relativePath)}') TOMBR('$(PREPATH)/${qsysTempName}.FILE/${ileObject.systemName}.MBR') MBROPT(*REPLACE)"`
406+
`\t-system -qi "CRTSRCPF FILE(${data.parameters[`srcfile`]}) RCDLEN(112) CCSID(${sourceFileCcsid})"`,
407+
`\tsystem "CPYFRMSTMF FROMSTMF('${asPosix(ileObject.relativePath)}') TOMBR('$(PREPATH)/${qsysTempName}.FILE/${data.parameters[`srcmbr`]}.MBR') MBROPT(*REPLACE)"`
392408
] : []),
393409
...(data.preCommands ? data.preCommands.map(cmd => `\t${MakeProject.resolveCommand(cmd, ileObject)}`) : []),
394410
...(data.command ?
@@ -423,8 +439,7 @@ export class MakeProject {
423439
return str.replace(new RegExp(search, `gi`), replace);
424440
}
425441

426-
const parentName = ileObject.relativePath ? path.dirname(ileObject.relativePath) : undefined;
427-
const qsysTempName: string | undefined = (parentName && parentName.length > 10 ? parentName.substring(0, 10) : parentName);
442+
const qsysTempName = `QTMPSRC`;
428443

429444
const isForAction = opts.forAction === true;
430445
const libraryValue = isForAction ? `*CURLIB` : `$(BIN_LIB)`;
@@ -466,6 +481,9 @@ export class MakeProject {
466481
command = simpleReplace(command, `\\$\\(BIN_LIB\\)`, libraryValue);
467482
command = simpleReplace(command, `\\$\\(BNDDIR\\)`, opts.bindingDirectory ? opts.bindingDirectory.systemName : `*NONE`);
468483
command = simpleReplace(command, `\\$\\(APP_BNDDIR\\)`, `APP`); // Default name
484+
command = simpleReplace(command, `&SRCFILE`, `${libraryValue}/${qsysTempName}`);
485+
command = simpleReplace(command, `&SRCPF`, qsysTempName);
486+
command = simpleReplace(command, `&SRCLIB`, libraryValue);
469487
}
470488

471489
return command;

cli/test/cs_with_bnddir.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ describe(`pseudo tests`, () => {
7373
const empsSteps = targets.getTarget({systemName: `EMPLOYEES`, type: `PGM`});
7474
const steps = makefile.getSteps(empsSteps);
7575

76-
expect(steps.length).toBe(7);
76+
expect(steps.length).toBe(8);
7777
});
7878

7979
test('ibmi-bob rules', () => {

cli/test/make.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ test('generateTargets (post-resolve)', async () => {
6565
const programB = targets.getTarget({systemName: `PROGRAMB`, type: `PGM`});
6666
const steps = project.getSteps(programB);
6767

68-
console.log(steps);
69-
expect(steps.length).toBe(5);
70-
71-
expect(steps[0].command).toBe(`CRTPF FILE(*CURLIB/FILEB) SRCFILE(*CURLIB/qddssrc) OPTION(*EVENTF)`);
72-
expect(steps[1].command).toBe(`CRTSQLRPGI OBJ(*CURLIB/MODULEB) SRCSTMF('qrpglesrc/moduleB.sqlrpgle') COMMIT(*NONE) DBGVIEW(*SOURCE) COMPILEOPT('TGTCCSID(*JOB)') RPGPPOPT(*LVL2) OPTION(*EVENTF) OBJTYPE(*MODULE)`);
73-
expect(steps[2].command).toBe(`CRTSRVPGM SRVPGM(*CURLIB/SRVPGMA) MODULE(MODULEB) SRCSTMF('qsrvsrc/srvpgmA.bnd') BNDDIR(APP) REPLACE(*YES)`);
74-
expect(steps[3].command).toBe(`ADDBNDDIRE BNDDIR(*CURLIB/APP) OBJ((*LIBL/SRVPGMA *SRVPGM *IMMED))`);
75-
expect(steps[4].command).toBe(`CRTSQLRPGI OBJ(*CURLIB/PROGRAMB) SRCSTMF('qrpglesrc/programB.pgm.sqlrpgle') COMMIT(*NONE) DBGVIEW(*SOURCE) OPTION(*EVENTF) RPGPPOPT(*LVL2) COMPILEOPT('TGTCCSID(*JOB) BNDDIR(APP) DFTACTGRP(*no)')`);
68+
expect(steps.length).toBe(6);
69+
70+
expect(steps[0].command).toBe(`CPYFRMSTMF FROMSTMF('qddssrc/fileB.pf') TOMBR('/QSYS.LIB/&CURLIB.LIB/QTMPSRC.FILE/FILEB.MBR') MBROPT(*REPLACE)`);
71+
expect(steps[1].command).toBe(`CRTPF FILE(*CURLIB/FILEB) SRCFILE(*CURLIB/QTMPSRC) OPTION(*EVENTF) SRCMBR(FILEB)`);
72+
expect(steps[2].command).toBe(`CRTSQLRPGI OBJ(*CURLIB/MODULEB) SRCSTMF('qrpglesrc/moduleB.sqlrpgle') COMMIT(*NONE) DBGVIEW(*SOURCE) COMPILEOPT('TGTCCSID(*JOB)') RPGPPOPT(*LVL2) OPTION(*EVENTF) OBJTYPE(*MODULE)`);
73+
expect(steps[3].command).toBe(`CRTSRVPGM SRVPGM(*CURLIB/SRVPGMA) MODULE(MODULEB) SRCSTMF('qsrvsrc/srvpgmA.bnd') BNDDIR(APP) REPLACE(*YES)`);
74+
expect(steps[4].command).toBe(`ADDBNDDIRE BNDDIR(*CURLIB/APP) OBJ((*LIBL/SRVPGMA *SRVPGM *IMMED))`);
75+
expect(steps[5].command).toBe(`CRTSQLRPGI OBJ(*CURLIB/PROGRAMB) SRCSTMF('qrpglesrc/programB.pgm.sqlrpgle') COMMIT(*NONE) DBGVIEW(*SOURCE) OPTION(*EVENTF) RPGPPOPT(*LVL2) COMPILEOPT('TGTCCSID(*JOB) BNDDIR(APP) DFTACTGRP(*no)')`);
7676
});
7777

7878
test('generateHeader (binder changes)', async () => {

cli/test/project.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,12 @@ describe(`company_system tests`, () => {
231231

232232
expect(lines.join()).toBe([
233233
'$(PREPATH)/DEPTS.FILE: qddssrc/depts.dspf',
234-
'\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/qddssrc) RCDLEN(112) CCSID(*JOB)"',
235-
`\tsystem "CPYFRMSTMF FROMSTMF('qddssrc/depts.dspf') TOMBR('$(PREPATH)/qddssrc.FILE/DEPTS.MBR') MBROPT(*REPLACE)"`,
234+
'\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/QTMPSRC) RCDLEN(112) CCSID(*JOB)"',
235+
`\tsystem "CPYFRMSTMF FROMSTMF('qddssrc/depts.dspf') TOMBR('$(PREPATH)/QTMPSRC.FILE/DEPTS.MBR') MBROPT(*REPLACE)"`,
236236
'\tliblist -c $(BIN_LIB);\\',
237237
'\tliblist -a $(LIBL);\\',
238238
[
239-
`\tsystem "CRTDSPF FILE($(BIN_LIB)/DEPTS) SRCFILE($(BIN_LIB)/qddssrc) SRCMBR(DEPTS) OPTION(*EVENTF)" > .logs/depts.splf || \\`,
239+
`\tsystem "CRTDSPF FILE($(BIN_LIB)/DEPTS) SRCFILE($(BIN_LIB)/QTMPSRC) SRCMBR(DEPTS) OPTION(*EVENTF)" > .logs/depts.splf || \\`,
240240
`\t(system "CPYTOSTMF FROMMBR(\'$(PREPATH)/EVFEVENT.FILE/DEPTS.MBR\') TOSTMF(\'.evfevent/depts.evfevent\') DBFCCSID(*FILE) STMFCCSID(1208) STMFOPT(*REPLACE)"; $(SHELL) -c 'exit 1')`,
241241
].join('\n')
242242
].join());

cli/test/project2.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,12 @@ describe(`company_system tests`, () => {
227227

228228
expect(lines.join()).toBe([
229229
'$(PREPATH)/DEPTS.FILE: qddssrc/depts.dspf',
230-
'\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/qddssrc) RCDLEN(112) CCSID(*JOB)"',
231-
`\tsystem "CPYFRMSTMF FROMSTMF('qddssrc/depts.dspf') TOMBR('$(PREPATH)/qddssrc.FILE/DEPTS.MBR') MBROPT(*REPLACE)"`,
230+
'\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/QTMPSRC) RCDLEN(112) CCSID(*JOB)"',
231+
`\tsystem "CPYFRMSTMF FROMSTMF('qddssrc/depts.dspf') TOMBR('$(PREPATH)/QTMPSRC.FILE/DEPTS.MBR') MBROPT(*REPLACE)"`,
232232
'\tliblist -c $(BIN_LIB);\\',
233233
'\tliblist -a $(LIBL);\\',
234234
[
235-
`\tsystem "CRTDSPF FILE($(BIN_LIB)/DEPTS) SRCFILE($(BIN_LIB)/qddssrc) SRCMBR(DEPTS) OPTION(*EVENTF)" > .logs/depts.splf || \\`,
235+
`\tsystem "CRTDSPF FILE($(BIN_LIB)/DEPTS) SRCFILE($(BIN_LIB)/QTMPSRC) SRCMBR(DEPTS) OPTION(*EVENTF)" > .logs/depts.splf || \\`,
236236
`\t(system "CPYTOSTMF FROMMBR(\'$(PREPATH)/EVFEVENT.FILE/DEPTS.MBR\') TOSTMF(\'.evfevent/depts.evfevent\') DBFCCSID(*FILE) STMFCCSID(1208) STMFOPT(*REPLACE)"; $(SHELL) -c 'exit 1')`,
237237
].join('\n')
238238
].join());

cli/test/pseudo.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ describe(`pseudo tests`, () => {
7676
// .ibmi.json -> tgtCcsid -> CRTSRCPF CCSID
7777
const testerProgram = makefile.findIndex(l => l.startsWith(`$(PREPATH)/MSTDSP.FILE: qobjs/mstdsp.dspf`));
7878
expect(testerProgram).toBeGreaterThan(-1);
79-
expect(makefile[testerProgram + 1]).toBe(`\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/qobjs) RCDLEN(112) CCSID(37)"`);
79+
expect(makefile[testerProgram + 1]).toBe(`\t-system -qi "CRTSRCPF FILE($(BIN_LIB)/QTMPSRC) RCDLEN(112) CCSID(37)"`);
8080
});
8181
});
82+

0 commit comments

Comments
 (0)