DCLPRCOPT : Option de com­pi­la­tion CLLE dans le source

DCLPRCOPT : Option de com­pi­la­tion CLLE dans le source

lun 22 avril 2019 0 Par Ibmiiste

Avant la 6.1, les options de com­pi­la­tion d’un pro­gramme CL devaient être mémo­ri­sées (com­men­taires dans le source, docu­men­ta­tion externe, etc.) puis res­sai­sies à chaque CRTCLPGMCRTCLMOD ou CRTBNDCL.
Depuis la 6.1, on peut les décla­rer direc­te­ment dans le source CL grâce à la com­mande DCLPRCOPT, sur le même prin­cipe que ctl-opt en RPG ILE.

Prin­cipe de DCLPRCOPT

DCLPRCOPT per­met de posi­tion­ner dans le source les mêmes para­mètres que ceux des com­mandes de com­pi­la­tion CL (CRTCLPGMCRTCLMODCRTBNDCL).
Les valeurs indi­quées dans DCLPRCOPT écrasent celles spé­ci­fiées (ou par défaut) sur la com­mande de com­pi­la­tion appelée.

Quelques points importants.

Si un para­mètre ne s’applique pas au type de com­pi­la­tion (par exemple DFTACTGRP avec CRTCLPGM), il est sim­ple­ment ignoré.

Un seul DCLPRCOPT est auto­ri­sé par source CLLE.

La com­mande doit se trou­ver après PGM et après les autres DCL*, mais avant toute autre com­mande CL.

Les para­mètres de DCLPRCOPT n’ont pas de valeur par défaut : si un para­mètre n’est pas indi­qué, c’est la valeur de la com­mande de com­pi­la­tion qui est utilisée.

DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*NEW) BNDDIR(MYLIB/MYBNDDIR) 

Quelques options

LOG

Gère la géné­ra­tion du job log pour le pro­gramme CL.

  • *JOB : reprend les options du job (CHGJOB LOG(...)).
  • *YES : génère sys­té­ma­ti­que­ment un job log à l’exécution.
  • *NO : ne génère aucun job log, même si le job est para­mé­tré pour.

*YES et *NO sont prio­ri­taires sur le para­mé­trage LOG du job ou la com­mande CHGJOB.

dclprcopt  log(*no)

DFTACTGRP

Indique si le pro­gramme CL ILE est com­pi­lé dans le groupe d’activation par défaut.

  • *YES : pro­gramme dans le groupe d’activation par défaut.
  • *NO : pro­gramme dans un groupe d’activation ILE nor­mal (sou­vent avec ACTGRP(QILE) ou un groupe nom­mé via la com­mande de compilation).

Ce para­mètre n’est pris en compte que pour CRTBNDCL (CL ILE). Pour CRTCLPGM ou CRTCLMOD, il est ignoré.

dclprcopt  dftactgrp(*no)  actgrp(qile)

BNDSRVPGM

dclprcopt  dftactgrp(*no) +
           bndsrvpgm(MYLIB/MYSRVPGM)

Per­met d’indiquer la/les *SRVPGM à lier lors de la com­pi­la­tion d’un CL ILE.

Cela évite d’avoir à répé­ter les mêmes para­mètres BNDSRVPGM dans la com­mande CRTBNDCL (ou CRTPGM après CRTCLMOD) et garan­tit que le lien vers la *SRVPGM reste cohé­rent dans le temps.

BNDDIR

Indique la liste des réper­toires de liage à exa­mi­ner pour la réso­lu­tion des symboles.

dclprcopt  dftactgrp(*no) +
           actgrp(*new)   +
           bnddir(MYLIB/MYBNDDIR)

Exemple com­plet CLLE ILE avec options intégrées

pgm  parm(&PARM1)

    dcl  &PARM1   *char  10

    /* Options de compilation du programme */
    dclprcopt  dftactgrp(*no) +
               actgrp(QILE)   +
               log(*no)       +
               usrprf(*owner) +
               bnddir(MYLIB/MYBNDDIR)

    /* Corps du programme */
    /* ... */

endpgm

Dans cet exemple, le pro­gramme est com­pi­lé en CL ILE dans l’activation group QILE, sans job log, en adop­tant le pro­fil pro­prié­taire et en uti­li­sant un réper­toire de liage stan­dard pour retrou­ver les *SRVPGM.

Pour­quoi l’utiliser systématiquement

  • Lisi­bi­li­té : les options de com­pi­la­tion sont visibles au même endroit que le code.
  • Repro­duc­ti­bi­li­té : même si la com­mande CRTCLPGM/CRTBNDCL change, les options spé­ci­fiques au pro­gramme res­tent stables.
  • Indus­tria­li­sa­tion : dans un contexte ARCAD / DevOps, tu peux gar­der des com­mandes de com­pi­la­tion géné­riques, tout en adap­tant fine­ment le com­por­te­ment de chaque CL dans le source.