SAS Packages Framework, version 20230904

## SAS Packages Framework, version `20230904`

---

New features in this release are:
- in `%generatePackage()` macro - test for check of duplicated names of the same type was added to the package generation process.
- in `%loadPackage()` macro - User can now suppress running the `exec` type files during the loading process. Parameter name is `suppressExec=`.
- in `%helpPackage()` macro - User can now generate dataset `work.packageName_content` containing list of the package elements similar to the one printed in the log. Parameter name is `packageContentDS=`.

Documentation updated.

---

Packages regenerated with new version of the SPF:
- BasePlus package [ver. `1.29.1`]
- DFA package [ver. `0.5.6`]
- GSM package [ver. `0.21.1`]
- macroArray package [ver. `1.0.6`]
- SQLinDS package [ver. `2.2.7`]
- dynMacroArray package [ver. `0.2.6`]
This commit is contained in:
Bart Jablonski
2023-09-04 16:29:05 +02:00
parent 77d6b0a2e5
commit 98e2125028
28 changed files with 343 additions and 152 deletions

View File

@@ -23,7 +23,7 @@
default value 1 means "delete tests work" */
)/ secure minoperator
/*** HELP END ***/
des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage() for help info.'
des = 'Macro to generate SAS packages, version 20230904. Run %generatePackage() for help info.'
;
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
%do;
@@ -38,7 +38,7 @@ des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage()
%put ### This is short help information for the `generatePackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to generate SAS packages, version `20230520` #;
%put # Macro to generate SAS packages, version `20230904` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -714,6 +714,34 @@ data _null_;
end;
run;
/*======== test for duplicated names of the same type ========*/
proc sort
data = &filesWithCodes.
out = &filesWithCodes._DUPSCHECK
;
by type file order;
run;
data _null_;
set &filesWithCodes._DUPSCHECK;
by type file;
if first.file NE last.file then
do;
if 0 = warnPrinted then
do;
put "WARNING: The following names are duplicated:";
warnPrinted+1;
end;
put "WARNING- " type= file= folder=;
end;
run;
proc delete data = &filesWithCodes._DUPSCHECK;
run;
/*=============================================================*/
%if %superq(additionalContent) NE %then
%do;
/* code inspired by Kurt Bremser's "Talking to Your Host" article */
@@ -936,7 +964,8 @@ data _null_;
put ' , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP */ ';
put ' , zip = zip /* file ext. */ ';
put ' , requiredVersion = . /* required version */ ';
put ' , source2 = /* source2*/ ';
put ' , source2 = /* source2 */ ';
put ' , suppressExec = 0 /* suppress execs */ ';
put ' )/secure; ';
put ' %PUT ** NOTE: Package ' "&packageName." ' loaded in ICE mode **; ';
put ' %local _PackageFileref_; ';
@@ -980,6 +1009,9 @@ data _null_;
put ' %local tempLoad_minoperator; ';
put ' %let tempLoad_minoperator = %sysfunc(getoption(minoperator)); ';
put ' options minoperator; ';
put ' %if %superq(suppressExec) NE 1 %then %let suppressExec = 0; ';
put ' %include &_PackageFileref_.(load.sas) / &source2.; ';
put ' options &tempLoad_minoperator.; ';
@@ -1345,22 +1377,33 @@ data _null_;
"exist. It will be overwritten by the macro from the &packageName. package, ));";
if upcase(type)=:'EXEC' then
do;
put ' %put NOTE- ;';
put ' %put NOTE- Executing the following code: ;';
put ' %put NOTE- *****************************;';
put ' data _null_;';
put " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767;';
put ' input;';
put ' putlog "*> " _infile_;';
put ' run;';
put ' %put NOTE- *****************************;';
put ' %put NOTE- ;';
end;
/* include the file with the code of the element */
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;';
do;
/* User can suppress running the exec files */
put ' %sysfunc(ifc(1 = %superq(suppressExec)'
/ ' ,%nrstr(%%put INFO: Inclusion of EXEC files is suppressed!;)'
/ ' ,%str('
/ ' data _null_;'
/ ' if _N_=1 then'
/ ' put "NOTE- " /'
/ ' "NOTE- Executing the following code:" /'
/ ' "NOTE- *****************************" / ;'
/ " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767 end=EOF;'
/ ' input;'
/ ' putlog "*> " _infile_;'
/ ' if EOF=1 then'
/ ' put "NOTE- *****************************" /'
/ ' "NOTE- " / ;'
/ ' run;'
/ ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;'
/ ' )));'
;
end;
else
do;
/* include the file with the code of the element */
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;';
end;
if upcase(type)=:'IMLMODULE' then
put ' %let cherryPick_IML = %eval(&cherryPick_IML. + 1);';
@@ -1478,7 +1521,7 @@ data _null_;
%end;
put +(-1) '`.;''' /
' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' /
' !! '' %put with the SAS Packages Framework version 20230520.;''' /
' !! '' %put with the SAS Packages Framework version 20230904.;''' /
' !! '' %put ****************************************************************************;''' /
' !! '' %GOTO theEndOfTheMacro;''' /
' !! '' %end;''' ;
@@ -1651,7 +1694,7 @@ data _null_;
%end;
put +(-1) '`.; '' !!' /
''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' /
''' %put with the SAS Packages Framework version 20230520.; '' !! ' /
''' %put with the SAS Packages Framework version 20230904.; '' !! ' /
''' %put ****************************************************************************; '' !! ' /
''' %GOTO theEndOfTheMacro; '' !! ' /
''' %end; '' !! ' /
@@ -2267,7 +2310,7 @@ data _null_;
put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;";
%end;
put 'put "***"; put "* SAS package generated by generatePackage, version 20230520 *"; put "***";';
put 'put "***"; put "* SAS package generated by generatePackage, version 20230904 *"; put "***";';
put 'run; ' /;
@@ -2361,15 +2404,37 @@ data _null_;
put " stop; ";
put "run; ";
/* cleanup */
/* clean up */
put "proc delete data = WORK._last_; ";
put "run; ";
put 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; ' /;
/* generate dataset witch content information */
put 'data &packageContentDS. _NULL_; '
/ ' if "&packageContentDS." = " " then stop; '
/ ' infile cards4 dlm = "/"; '
/ ' input (folder order type file fileshort) (: $ 256.); '
/ ' output; '
/ 'cards4; '
;
EOFDS = 0;
do until(EOFDS);
/* content is created during package creation */
set &filesWithCodes. end = EOFDS;
if upcase(type) in: ('TEST') then continue; /* exclude tests */
strX = catx('/', folder, order, type, file, fileshort);
put strX;
end;
put ";;;;"
/ "run;"
/ 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; '
/ ;
put '%put NOTE: '"Help for package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;' /;
put "/* help.sas end */";
stop;
run;