SAS Packages Framework version 20260126

SAS Packages Framework version 20260126

Changes:
- A utility function and a utility macro is now added to every package generated with %generatePackage() macro.
- Documentation updated.

Packages regenerated:
- BasePlus: F*91A5AD4709A418704315EF37DDCF954522D4FB42808D406B3ED4DA560F6864C6
- DFA: F*643FBE2B7AE1425FC0240139813B93AE2C6BCFFDF6A0CFAEBEC11F83D3548E57
- GSM: F*7A4FEC410DEB921613A33F154FBBE332D7EC4C4DAC1351A4E611D986489EE848
- macroArray: F*9DA64CA9A745E1DB7176F7AF4459BB014F61F71626473ABF6471A32689E14FF1
- SQLinDS: F*CEAA4C90515F6E8AACBFFD55ABA6544E399EDBE0A7081107B62DCEE6F5430A1D
- bpUTiL: F*D03FD84D518F0CF4E0042BFEA864D9118D7FF97265DC49019425878BDBA31FE8
- evExpress: F*A8A4B0389A765D4D22FDD7AF42C542C2AC537F0D81FFB2B65605C60B1E9CB1B4
This commit is contained in:
Bart Jablonski
2026-01-26 17:21:32 +01:00
parent 3520e4b948
commit dcb012883f
36 changed files with 748 additions and 383 deletions
+170 -71
View File
@@ -43,7 +43,7 @@
- to unload, or
- to generate SAS packages.
Version 20260125.
Version 20260126.
See examples below.
A SAS package is a zip file containing a group of files
@@ -101,7 +101,7 @@ Contributors:
*/
)/secure
/*** HELP END ***/
des = 'Macro to load SAS package, version 20260125. Run %loadPackage() for help info.'
des = 'Macro to load SAS package, version 20260126. Run %loadPackage() for help info.'
minoperator
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -117,7 +117,7 @@ minoperator
%put ### This is short help information for the `loadPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to *load* SAS packages, version `20260125` #;
%put # Macro to *load* SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -394,7 +394,7 @@ minoperator
*/
)/secure
/*** HELP END ***/
des = 'Macro to unload SAS package, version 20260125. Run %unloadPackage() for help info.'
des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for help info.'
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do;
@@ -409,7 +409,7 @@ des = 'Macro to unload SAS package, version 20260125. Run %unloadPackage() for h
%put ### This is short help information for the `unloadPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to unload SAS packages, version `20260125` #;
%put # Macro to unload SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -562,7 +562,7 @@ des = 'Macro to unload SAS package, version 20260125. Run %unloadPackage() for h
*/
)/secure
/*** HELP END ***/
des = 'Macro to get help about SAS package, version 20260125. Run %helpPackage() for help info.'
des = 'Macro to get help about SAS package, version 20260126. Run %helpPackage() for help info.'
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do;
@@ -577,7 +577,7 @@ des = 'Macro to get help about SAS package, version 20260125. Run %helpPackage()
%put ### This is short help information for the `helpPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to get help about SAS packages, version `20260125` #;
%put # Macro to get help about SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -720,7 +720,7 @@ TODO:
*/
/*+installPackage+*/
/* Macros to install SAS packages, version 20260125 */
/* Macros to install SAS packages, version 20260126 */
/* A SAS package is a zip file containing a group of files
with SAS code (macros, functions, data steps generating
data, etc.) wrapped up together and %INCLUDEed by
@@ -747,7 +747,7 @@ TODO:
/secure
minoperator
/*** HELP END ***/
des = 'Macro to install SAS package, version 20260125. Run %%installPackage() for help info.'
des = 'Macro to install SAS package, version 20260126. Run %%installPackage() for help info.'
;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
%do;
@@ -762,7 +762,7 @@ des = 'Macro to install SAS package, version 20260125. Run %%installPackage() fo
%put ### This is short help information for the `installPackage` macro #;
%put #--------------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to install SAS packages, version `20260125` #;
%put # Macro to install SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -1414,7 +1414,7 @@ des = 'Macro to install SAS package, version 20260125. Run %%installPackage() fo
Macro to list SAS packages in packages folder.
Version 20260125
Version 20260126
A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating
@@ -1436,7 +1436,7 @@ des = 'Macro to install SAS package, version 20260125. Run %%installPackage() fo
listDataSet /* Name of a data set to save results */
, quiet = 0 /* Indicate if results should be printed in log */
)/secure parmbuff
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20260125.'
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20260126.'
;
%if (%QUPCASE(&listDataSet.) = HELP) %then
%do;
@@ -1451,7 +1451,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE
%put ### This is short help information for the `listPackages` macro #;
%put #-----------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to list available SAS packages, version `20260125` #;
%put # Macro to list available SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -1677,7 +1677,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
Macro to generate SAS packages.
Version 20260125
Version 20260126
A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating
@@ -1703,7 +1703,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
if more than one are provided only the first is used */
,testResults= /* location where tests results should be stored,
if null (the default) the WORK is used */
,workInTestResults=0 /* indicates if WORK directories for tests should located
,workInTestResults=0 /* indicates if WORK directories for tests should be located
in the same place as results */
,testWorkPath= /* location where tests SAS sessions' work directories
should be stored, if null (the default) the main SAS
@@ -1727,7 +1727,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
when empty takes buildLocation */
)/ secure minoperator
/*** HELP END ***/
des = 'Macro to generate SAS packages, version 20260125. Run %generatePackage() for help info.'
des = 'Macro to generate SAS packages, version 20260126. Run %generatePackage() for help info.'
;
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
%do;
@@ -1742,7 +1742,7 @@ des = 'Macro to generate SAS packages, version 20260125. Run %generatePackage()
%put ### This is short help information for the `generatePackage` macro #;
%put #------------------------------------------------------------------------------------#;
%put # #;
%put # Macro to generate SAS packages, version `20260125` #;
%put # Macro to generate SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -1936,13 +1936,13 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 1024;
options &qlenmax_fstimer_tmp.;
/* test for required descriptors */
%if (%nrbquote(&packageName.) = )
or (%nrbquote(&packageVersion.) = )
or (%nrbquote(&packageAuthor.) = )
or (%nrbquote(&packageMaintainer.) = )
or (%nrbquote(&packageTitle.) = )
or (%nrbquote(&packageEncoding.) = )
or (%nrbquote(&packageLicense.) = )
%if (%superq(packageName) = )
or (%superq(packageVersion) = )
or (%superq(packageAuthor) = )
or (%superq(packageMaintainer) = )
or (%superq(packageTitle) = )
or (%superq(packageEncoding) = )
or (%superq(packageLicense) = )
%then
%do;
%put ERROR: At least one of descriptors is missing!;
@@ -2624,7 +2624,7 @@ title6 "MD5 hashed fileref of package lowcase name: &_PackageFileref_.";
title&_titleNumber_. "Package ZIP file location is: &buildLocation.";
%end;
footnote1 "SAS Packages Framework, version 20260125";
footnote1 "SAS Packages Framework, version 20260126";
proc print
data = &filesWithCodes.(drop=base build folderRef fileRef rc folderid _abort_ fileId additionalContent)
@@ -2913,7 +2913,7 @@ data _null_;
/ ' /* print out setinit */ '
/ ' proc setinit %str(;) run %str(;) '
/ ' proc printto %str(;) run %str(;) '
/ ' options ps=min %str(;) '
/ ' data _null_ %str(;) '
/ ' /* loadup checklist of required SAS components */ '
/ ' if _n_ = 1 then '
@@ -2972,8 +2972,10 @@ data _null_;
packageReqPackages = lowcase(symget('packageReqPackages'));
/* try to load required packages */
put 'data _null_ ; '
/ ' if "*" NE symget("cherryPick") then do; put "NOTE: No required packages loading."; stop; end; '
put '%let temp_noNotes_etc=%sysfunc(getoption(NOTES));'
/ 'options noNotes;'
/ 'data _null_ ; '
/ ' if "*" NE symget("cherryPick") then do; put "INFO: No required packages loading."; stop; end; '
/ ' length req name $ 64 vers verR $ 24 versN verRN 8 SYSloadedPackages $ 32767; '
/ ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then '
/ ' do; '
@@ -3015,7 +3017,7 @@ data _null_;
/ ' if (LP_find ne 0) or (LP_find = 0 and . < versN < verRN) then '
/ ' do; '
/ ' put "NOTE: Trying to load required SAS package: " req; '
/ ' put "INFO: Trying to load required SAS package: " req; '
/ ' if LoadPackageExist then '
/ ' call execute(cats(''%nrstr(%loadPackage('', name, ", requiredVersion = ", verR, "))")); '
/ ' else if ICELoadPackageExist then '
@@ -3027,7 +3029,7 @@ data _null_;
/* test if required packages are loaded */
/ 'data _null_ ; '
/ ' if "*" NE symget("cherryPick") then do; put "NOTE: No required packages checking."; stop; end; '
/ ' if "*" NE symget("cherryPick") then do; put "INFO: No required packages checking."; stop; end; '
/ ' length req name $ 64 vers verR $ 24 versN verRN 8 SYSloadedPackages $ 32767; '
/ ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then '
/ ' do; '
@@ -3088,14 +3090,17 @@ data _null_;
/ ' end ; '
/ ' end; '
/ ' stop; '
/ 'run; ';
/ 'run; '
/ 'options &temp_noNotes_etc.;';
%end;
%if (%superq(packageRequired) ne )
or (%superq(packageReqPackages) ne )
%then
%do;
put ' data _null_; '
put ' %let temp_noNotes_etc=%sysfunc(getoption(NOTES));'
/ ' options noNotes;'
/ ' data _null_; '
/ ' if 1 = symgetn("packageRequiredErrors") then '
/ ' do; '
/ ' put "ERROR: Loading package &packageName. will be aborted!";'
@@ -3110,7 +3115,8 @@ data _null_;
/ ' else '
/ ' call symputX("packageRequiredErrors", " ", "L");'
/ ' run; '
/ ' &packageRequiredErrors. ';
/ ' &packageRequiredErrors. '
/ ' options &temp_noNotes_etc.; ';
%end;
@@ -3443,7 +3449,7 @@ data _null_;
%end;
put +(-1) '`.;'''
/ ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"'
/ ' !! '' %put with the SAS Packages Framework version 20260125.;'''
/ ' !! '' %put with the SAS Packages Framework version 20260126.;'''
/ ' !! '' %put ****************************************************************************;'''
/ ' !! '' %GOTO theEndOfTheMacro;'''
/ ' !! '' %end;''' ;
@@ -3607,7 +3613,7 @@ data _null_;
%end;
put +(-1) '`.; '' !!' /
''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !! ' /
''' %put with the SAS Packages Framework version 20260125.; '' !! ' /
''' %put with the SAS Packages Framework version 20260126.; '' !! ' /
''' %put ****************************************************************************; '' !! ' /
''' %GOTO theEndOfTheMacro; '' !! ' /
''' %end; '' !! ' /
@@ -3823,6 +3829,65 @@ data _null_;
put 'run;';
/* KMF -------------------------------------------------------------------------------- end */
/*=add meta function========================================================================*/
isFunction+1;
length packageName $ 32 packageVersion packageGenerated $ 24
packageTitle packageAuthor packageMaintainer $ 2048
packageEncoding $ 8 packageLicense $ 128;
packageName = quote(strip(symget('packageName')),'"');
packageVersion = quote(strip(symget('packageVersion')),'"');
packageTitle = quote(strip(symget('packageTitle')),'"');
packageAuthor = quote(strip(symget('packageAuthor')),'"');
packageMaintainer = quote(strip(symget('packageMaintainer')),'"');
packageEncoding = quote(strip(symget('packageEncoding')),'"');
packageLicense = quote(strip(symget('packageLicense')),'"');
packageGenerated = quote(strip(symget('packageGenerated')),'"');
/* add quotes to hide special characters */
%if (%superq(packageReqPackages) ne ) %then /* required packages list */
%do;
packageReqPackages = quote(strip(packageReqPackages));
%end;
%if (%superq(packageRequired) ne ) %then /* required SAS products */
%do;
packageRequired = quote(strip(packageRequired));
%end;
put "proc fcmp outlib = work.&packageName.fcmp.packagemeta ; "
/ " function &packageName.META(meta $) $ 32767;"
/ ' m = char(upcase(meta),1);'
/ " if m = 'V' then return(strip(" packageVersion +(-1) "));"
/ " if m = 'D' then return(strip(" packageGenerated +(-1) "));"
/ " if m = 'A' then return(strip(" packageAuthor +(-1) "));"
/ " if m = 'M' then return(strip(" packageMaintainer +(-1) "));"
/ " if m = 'T' then return(strip(" packageTitle +(-1) "));"
/ " if m = 'E' then return(strip(" packageEncoding +(-1) "));"
/ " if m = 'L' then return(strip(" packageGenerated +(-1) "));"
%if (%superq(packageReqPackages) ne ) %then /* required packages list */
%do;
/ " if m = 'P' then return(strip(" packageReqPackages +(-1) "));"
%end;
%if (%superq(packageRequired) ne ) %then /* required SAS products */
%do;
/ " if m = 'S' then return(strip(" packageRequired +(-1) "));"
%end;
/ ' return(" ");'
/ ' endfunc;'
/ 'quit;';
put '%sysfunc(ifc(0<'
/ ' %sysfunc(findw((%sysfunc(getoption(cmplib)))'
/ " ,work.%sysfunc(lowcase(&packageName.fcmp)),""'( )'"",RIO))"
/ ',,%str(options' " APPEND=(cmplib = work.%sysfunc(lowcase(&packageName.fcmp)));)"
/ '))' ;
put '%macro ' "&packageName.META(meta)/parmbuff;" /* returned values are quoted to mask special chars*/
/ '%if %superq(meta) = %then %return;'
/ '%do;%qsysfunc(strip(%qsysfunc(' "&packageName.META" '&syspbuff.)))%end;'
/ '%mend;' / /;
/*==========================================================================================*/
/* list cmplib for functions and fmtsearch for formats*/
if isFunction OR isProto then
do;
@@ -3836,8 +3901,10 @@ data _null_;
end;
/* update SYSloadedPackages global macrovariable */
put 'options noNotes;'
/ '%if (%str(*)=%superq(cherryPick)) %then %do; ' /* Cherry Pick test3 start */
put '%if (%str(*)=%superq(cherryPick)) %then %do; ' /* Cherry Pick test3 start */
/ ' %let temp_noNotes_etc=%sysfunc(getoption(NOTES));'
/ ' options noNotes;'
/ ' data _null_ ; '
/ ' length SYSloadedPackages stringPCKG $ 32767; '
/ ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then '
@@ -3854,7 +3921,7 @@ data _null_;
/ " SYSloadedPackages = catx('#', SYSloadedPackages, '&packageName.(&packageVersion.)'); "
/ ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); '
/ ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); '
/ ' put / "INFO:[SYSLOADEDPACKAGES] " SYSloadedPackages ; '
/ ' put / "INFO: [SYSLOADEDPACKAGES] " SYSloadedPackages ; '
/ ' end ; '
/ " else "
/ ' do; '
@@ -3863,21 +3930,22 @@ data _null_;
/ " SYSloadedPackages = catx('#', SYSloadedPackages, '&packageName.(&packageVersion.)'); "
/ ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); '
/ ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); '
/ ' put / "INFO:[SYSLOADEDPACKAGES] " SYSloadedPackages ; '
/ ' put / "INFO: [SYSLOADEDPACKAGES] " SYSloadedPackages ; '
/ ' end ; '
/ ' end; '
/ ' else '
/ ' do; '
/ " call symputX('SYSloadedPackages', '&packageName.(&packageVersion.)', 'G'); "
/ " put / 'INFO:[SYSLOADEDPACKAGES] &packageName.(&packageVersion.)'; "
/ " put / 'INFO: [SYSLOADEDPACKAGES] &packageName.(&packageVersion.)'; "
/ ' end; '
/ ' stop; '
/ ' run; '
/ ' options &temp_noNotes_etc.;'
/ '%end; ' / ; /* Cherry Pick test3 end */
put 'options NOTES;'
/ '%put NOTE- ;'
/ '%put NOTE: '"Loading package &packageName., version &packageVersion., license &packageLicense.;"
/ '%put NOTE: '"Loading package &packageName., version "'%'"&packageName.META(V), license &packageLicense.;"
/ '%put NOTE- *** END ***;' /;
put 'options &temp_noNotes_etc.;'
@@ -3988,7 +4056,8 @@ data _null_;
/ ' from dictionary.catalogs'
/ ' where '
/ ' ('
/ ' objname in ("*"'
/ ' objname in ("*"'
/ " ,%UPCASE('&packageName.META')"
/ " ,%UPCASE('&packageName.IML')"
/ " ,%UPCASE('&packageName.CASLUDF')";
/* list of macros */
@@ -4090,7 +4159,12 @@ data _null_;
/ 'deletefunc ' fileshort ';';
isFunction + 1;
end;
put "run;" /;
put "quit;" /;
put "proc fcmp outlib = work.&packageName.fcmp.packagemeta;"
/ "deletefunc &packageName.META;"
/ "quit;" /;
isFunction + 1;
/* delete the link to the functions dataset */
if isFunction then
@@ -4410,7 +4484,7 @@ data _null_;
%end;
put 'put " " / @3 "---------------------------------------------------------------------" / " ";'
/ 'put @3 "*SAS package generated by SAS Package Framework, version `20260125`*";'
/ 'put @3 "*SAS package generated by SAS Package Framework, version `20260126`*";'
/ "put @3 '*under `&sysscp.`(`&sysscpl.`) operating system,*';"
/ "put @3 '*using SAS release: `&sysvlong4.`.*';"
/ 'put " " / @3 "---------------------------------------------------------------------";';
@@ -4849,7 +4923,7 @@ options &qlenmax_fstimer_tmp.;
/*+SPFint_gnPckg_tests+*/
%macro SPFint_gnPckg_tests()/secure minoperator
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the test part of the process. Version 20260125.';
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the test part of the process. Version 20260126.';
/* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */
%if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then
%do;
@@ -4922,6 +4996,18 @@ run;
put @n '%loadpackage'"(&packageName.,";
put @n " path=&buildLocation., lazyData=*)" /;
/* meta */
put @n '%put >>>%'"&packageName."'META( )<<<;'/
@n '%put >>>%'"&packageName."'META(V)<<<;'/
@n '%put >>>%'"&packageName."'META(D)<<<;'/
@n '%put >>>%'"&packageName."'META(A)<<<;'/
@n '%put >>>%'"&packageName."'META(M)<<<;'/
@n '%put >>>%'"&packageName."'META(L)<<<;'/
@n '%put >>>%'"&packageName."'META(E)<<<;'/
@n '%put >>>%'"&packageName."'META(T)<<<;'/
@n '%put >>>%'"&packageName."'META(P)<<<;'/
@n '%put >>>%'"&packageName."'META(S)<<<;'/;
/* help */
put @n '%helpPackage'"(&packageName.,";
put @n " path=&buildLocation.)" /;
@@ -5141,6 +5227,19 @@ data _null_;
put '%loadpackage'"(&packageName.,"
/ " path=&buildLocation., lazyData=*)" /;
/* meta */
put '%put >>null >%'"&packageName."'META( )<<<;'/
'%put >>unknown >%'"&packageName."'META(U)<<<;'/ /* test for unknown values */
'%put >>version >%'"&packageName."'META(V)<<<;'/
'%put >>datetime >%'"&packageName."'META(D)<<<;'/
'%put >>authors >%'"&packageName."'META(A)<<<;'/
'%put >>maintainers >%'"&packageName."'META(M)<<<;'/
'%put >>license >%'"&packageName."'META(L)<<<;'/
'%put >>encoding >%'"&packageName."'META(E)<<<;'/
'%put >>title >%'"&packageName."'META(T)<<<;'/
'%put >>req packages>%'"&packageName."'META(P)<<<;'/
'%put >>req SAS >%'"&packageName."'META(S)<<<;'/;
/* help */
put '%helpPackage'"(&packageName.,"
/ " path=&buildLocation.)" /;
@@ -5498,7 +5597,7 @@ options &quotelenmax_tmp.;
/*+SPFint_gnPckg_markdown+*/
%macro SPFint_gnPckg_markdown()/secure minoperator
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the markdown documentation part of the process. Version 20260125.';
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the markdown documentation part of the process. Version 20260126.';
/* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */
%if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then
%do;
@@ -5610,7 +5709,7 @@ data &filesWithCodes.markdown;
%end;
put " " / "---------------------------------------------------------------------" / " "
/ "*SAS package generated by SAS Package Framework, version `20260125`,*"
/ "*SAS package generated by SAS Package Framework, version `20260126`,*"
/ "*under `&sysscp.`(`&sysscpl.`) operating system,*"
/ "*using SAS release: `&sysvlong4.`.*"
/ " " / "---------------------------------------------------------------------" / " ";
@@ -5751,7 +5850,7 @@ options &MarkDownOptionsTmp.;
/*+SPFint_gnPckg_arch+*/
%macro SPFint_gnPckg_arch()/secure minoperator
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the archive version generation part of the process. Version 20260125.';
des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the archive version generation part of the process. Version 20260126.';
/* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */
%if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then
%do;
@@ -5918,7 +6017,7 @@ TODO: (in Polish)
*/
)/secure
/*** HELP END ***/
des = 'Macro to load multiple SAS packages at one run, version 20260125. Run %loadPackages() for help info.'
des = 'Macro to load multiple SAS packages at one run, version 20260126. Run %loadPackages() for help info.'
parmbuff
;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
@@ -5934,7 +6033,7 @@ parmbuff
%put ### This is short help information for the `loadPackageS` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro wrapper for the loadPackage macro, version `20260125` #;
%put # Macro wrapper for the loadPackage macro, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -6032,7 +6131,7 @@ parmbuff
hashing_file() function, SAS 9.4M6 */
)/secure
/*** HELP END ***/
des = 'Macro to verify SAS package with the hash digest, version 20260125. Run %verifyPackage() for help info.'
des = 'Macro to verify SAS package with the hash digest, version 20260126. Run %verifyPackage() for help info.'
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do;
@@ -6047,7 +6146,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260125. Run %
%put ### This is short help information for the `verifyPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to verify SAS package with it hash digest, version `20260125` #;
%put # Macro to verify SAS package with it hash digest, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -6230,7 +6329,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260125. Run %
*/
)/secure
/*** HELP END ***/
des = 'Macro to preview content of a SAS package, version 20260125. Run %previewPackage() for help info.'
des = 'Macro to preview content of a SAS package, version 20260126. Run %previewPackage() for help info.'
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do;
@@ -6245,7 +6344,7 @@ des = 'Macro to preview content of a SAS package, version 20260125. Run %preview
%put ### This is short help information for the `previewPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to get preview of a SAS packages, version `20260125` #;
%put # Macro to get preview of a SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -6377,7 +6476,7 @@ des = 'Macro to preview content of a SAS package, version 20260125. Run %preview
when empty the "packages" value is used */
)/secure
/*** HELP END ***/
des = 'Macro to list directories pointed by "packages" fileref, version 20260125. Run %extendPackagesFileref(HELP) for help info.'
des = 'Macro to list directories pointed by "packages" fileref, version 20260126. Run %extendPackagesFileref(HELP) for help info.'
;
%if %QUPCASE(&packages.) = HELP %then
@@ -6393,7 +6492,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20260125
%put ### This is short help information for the `extendPackagesFileref` macro #;
%put #-----------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to list directories pointed by 'packages' fileref, version `20260125` #;
%put # Macro to list directories pointed by 'packages' fileref, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -6495,7 +6594,7 @@ filename packages list;
is provided in required version */
)/secure
/*** HELP END ***/
des = 'Macro to load additional content for a SAS package, version 20260125. Run %loadPackageAddCnt() for help info.'
des = 'Macro to load additional content for a SAS package, version 20260126. Run %loadPackageAddCnt() for help info.'
minoperator
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -6511,7 +6610,7 @@ minoperator
%put ### This is short help information for the `loadPackageAddCnt` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to *load* additional content for a SAS package, version `20260125` #;
%put # Macro to *load* additional content for a SAS package, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -6880,7 +6979,7 @@ minoperator
,nobs=0 /* technical parameter */
)
/*** HELP END ***/
/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260125. Run %splitCodeForPackage() for help info.'
/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260126. Run %splitCodeForPackage() for help info.'
;
%if (%superq(codeFile) = ) OR (%qupcase(&codeFile.) = HELP) %then
%do;
@@ -6896,7 +6995,7 @@ minoperator
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Utility macro to *split* single file with SAS package code into multiple #;
%put # files with separate snippets, version `20260125` #;
%put # files with separate snippets, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -7272,7 +7371,7 @@ options nomprint nosymbolgen nomlogic notes source ls=MAX ps=MAX msglevel=N ;
*/
if firstLine[j] then
do;
put '/* File generated with help of SAS Packages Framework, version 20260125. */';
put '/* File generated with help of SAS Packages Framework, version 20260126. */';
firstLine[j]=0;
end;
put _infile_;
@@ -7305,7 +7404,7 @@ options &options_tmp2.;
,psMAX=MAX /* pageSise in case executed inside DoSubL() */
,ods= /* a data set for results, e.g., work.relocatePackageReport */
)
/ des = 'Utility macro that locally Copies or Moves Packages, version 20260125. Run %relocatePackage() for help info.'
/ des = 'Utility macro that locally Copies or Moves Packages, version 20260126. Run %relocatePackage() for help info.'
secure
minoperator
;
@@ -7323,7 +7422,7 @@ options &options_tmp2.;
%put ### This is short help information for the `relocatePackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to *locally copy or move* (relocate) SAS packages, version `20260125` #;
%put # Macro to *locally copy or move* (relocate) SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -7981,7 +8080,7 @@ filename PACKAGES ("R:\testPackages2" "R:\testPackages1");
vERRb /* indicates if macro should be verbose and report errors */
)
/ minoperator PARMBUFF
des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFilerefOK(HELP) for help, version 20260125.'
des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFilerefOK(HELP) for help, version 20260126.'
;
/*** HELP END ***/
%if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then
@@ -7997,7 +8096,7 @@ des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFile
%put ### This is short help information for the `isPackagesFilerefOK` macro #;
%put #-----------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to check if the `packages` fileref is "correct", version `20260125` #;
%put # Macro to check if the `packages` fileref is "correct", version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -8131,7 +8230,7 @@ SPFmacroName /* space separated list of names */
/
minoperator
secure
des = 'Macro to provide help notes about SAS Packages Framework macros, version 20260125. Run %SasPackagesFrameworkNotes(HELP) for help info.'
des = 'Macro to provide help notes about SAS Packages Framework macros, version 20260126. Run %SasPackagesFrameworkNotes(HELP) for help info.'
;
%local list N i element;
%let list=
@@ -8177,7 +8276,7 @@ SasPackagesFrameworkNotes
%put ### This is short help information for the `SasPackagesFrameworkNotes` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro prints help notes for SAS Packages Framework macros, version `20260125` #;
%put # Macro prints help notes for SAS Packages Framework macros, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -8300,7 +8399,7 @@ options mlogic symbolgen;
,packagesRef=packages
,ods= /* data set for report file */
)/
des='Macro to create a bundle of SAS packages, version 20260125. Run %bundlePackages(HELP) for help info.'
des='Macro to create a bundle of SAS packages, version 20260126. Run %bundlePackages(HELP) for help info.'
secure minoperator
;
@@ -8317,7 +8416,7 @@ secure minoperator
%put ### This is short help information for the `bundlePackages` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to *create bundles* of SAS packages, version `20260125` #;
%put # Macro to *create bundles* of SAS packages, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
@@ -8802,7 +8901,7 @@ filename p2 "R:/dontexist";
,ods= /* data set for report file */
,verify=0
)/
des='Macro to extract a bundle of SAS packages, version 20260125. Run %unbundlePackages(HELP) for help info.'
des='Macro to extract a bundle of SAS packages, version 20260126. Run %unbundlePackages(HELP) for help info.'
secure
minoperator
;
@@ -8820,7 +8919,7 @@ minoperator
%put ### This is short help information for the `unbundlePackages` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to *extract* SAS packages from a bundle, version `20260125` #;
%put # Macro to *extract* SAS packages from a bundle, version `20260126` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;