SYSloadedPackages and SYSloadedPackages,

PDF updated
This commit is contained in:
yabwon
2019-10-23 23:41:28 +02:00
parent 943cf26e5f
commit 767f364287
8 changed files with 126 additions and 25 deletions

View File

@@ -13,7 +13,7 @@ License: MIT :/*required, not null, values:
Encoding: UTF8 :/*required, not null, values: UTF8, WLATIN1, LATIN2, etc. */ Encoding: UTF8 :/*required, not null, values: UTF8, WLATIN1, LATIN2, etc. */
Required: "Base SAS Software" :/*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output */ Required: "Base SAS Software" :/*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output */
ReqPackages: "macroArray (0.1)", "DFA (0.1)" :/*optional, COMMA separated, QUOTED list, names of required packages */ ReqPackages: "macroArray (0.1)", "DFA (0.1)" :/*optional, COMMA separated, QUOTED list, names of required packages */
/* **DESCRIPTION** */ /* **DESCRIPTION** */
/* All the text below will be used in help */ /* All the text below will be used in help */

BIN
dfa.zip

Binary file not shown.

Binary file not shown.

View File

@@ -66,14 +66,15 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256;
%do; %do;
%put NOTE: Creating package%str(%')s metadata; %put NOTE: Creating package%str(%')s metadata;
%local packageName /* name of the package, required */ %local packageName /* name of the package, required */
packageVersion /* version of the package, required */ packageVersion /* version of the package, required */
packageTitle /* title of the package, required*/ packageTitle /* title of the package, required*/
packageAuthor /* required */ packageAuthor /* required */
packageMaintainer /* required */ packageMaintainer /* required */
packageEncoding /* required */ packageEncoding /* required */
packageLicense /* required */ packageLicense /* required */
packageRequired /* optional */ packageRequired /* optional */
packageReqPackages /* optional */
; ;
data _null_; data _null_;
infile &_DESCR_.; infile &_DESCR_.;
@@ -156,7 +157,7 @@ data _null_;
version = input("&packageVersion.", ?? best32.); version = input("&packageVersion.", ?? best32.);
if not (version > 0) then if not (version > 0) then
do; do;
put 'ERROR: Packave version should be a positive NUMBER.'; put 'ERROR: Package version should be a positive NUMBER.';
put 'ERROR- Current value is: ' "&packageVersion."; put 'ERROR- Current value is: ' "&packageVersion.";
put 'ERROR- Try something small, e.g. 0.1'; put 'ERROR- Try something small, e.g. 0.1';
put; put;
@@ -193,6 +194,9 @@ Maintainer: Firstname Lastname (xxxxxx@yyyyy.com)
License: MIT License: MIT
Encoding: UTF8 Encoding: UTF8
Required: "Base SAS Software" :%*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output *;
ReqPackages: "macroArray (0.1)", "DFA (0.1)" :%*optional, COMMA separated, QUOTED list, names of required packages *;
>> **DESCRIPTION** << >> **DESCRIPTION** <<
>> All the text below will be used in help << >> All the text below will be used in help <<
DESCRIPTION START: DESCRIPTION START:
@@ -338,7 +342,7 @@ proc print data = &filesWithCodes.(drop=base);
run; run;
title; title;
/* packages's description */ /* packages description */
data _null_; data _null_;
infile &_DESCR_.; infile &_DESCR_.;
file &zipReferrence.(description.sas); file &zipReferrence.(description.sas);
@@ -346,7 +350,7 @@ data _null_;
put _INFILE_; put _INFILE_;
run; run;
/* package's license */ /* package license */
%if %sysfunc(fexist(&_LIC_.)) %then %if %sysfunc(fexist(&_LIC_.)) %then
%do; %do;
data _null_; data _null_;
@@ -386,7 +390,7 @@ run;
run; run;
%end; %end;
/* package's metadata */ /* package metadata */
data _null_; data _null_;
if 0 then set &filesWithCodes. nobs=NOBS; if 0 then set &filesWithCodes. nobs=NOBS;
if NOBS = 0 then if NOBS = 0 then
@@ -418,7 +422,7 @@ data _null_;
stop; stop;
run; run;
/* loading package's files */ /* loading package files */
data _null_; data _null_;
if NOBS = 0 then stop; if NOBS = 0 then stop;
@@ -512,16 +516,52 @@ data _null_;
%if %bquote(&packageReqPackages.) ne %then %if %bquote(&packageReqPackages.) ne %then
%do; %do;
/* put ' data _null_ ; ';
put ' data _null_ ; '; put ' length req name $ 64 SYSloadedPackages $ 32767; ';
put ' length req $ 64 ; '; length packageReqPackages $ 32767;
length packageReqPackages $ 32767;
packageReqPackages = lowcase(symget('packageReqPackages')); packageReqPackages = lowcase(symget('packageReqPackages'));
put ' do req = ' / packageReqPackages / ' ; '; put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
put ' call execute(''%nrstr(%loadPackage('' || scan(req,1) || ''));'') ; '; put ' do; ';
put ' end ; '; put ' do until(EOF); ';
put 'run; '; put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
*/ put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
put ' end; ';
put ' SYSloadedPackages = lowcase(SYSloadedPackages); ';
put ' declare hash LP(); ';
put ' LP.defineKey("name"); ';
put ' LP.defineDone(); ';
put ' do _N_ = 1 to countw(SYSloadedPackages); ';
put ' name = scan(SYSloadedPackages, _N_); ';
put ' _RC_ = LP.add(); ';
put ' end; ';
put ' missingPackagr = 0; ';
put ' do req = ' / packageReqPackages / ' ; ';
put ' name = lowcase(strip(scan(req, 1, " "))); ';
put ' vers = lowcase(compress(scan(req,-1, " "), ".", "KD")); ';
put ' if LP.check() ne 0 then ';
put ' do; ';
put ' missingPackagr = 1; ';
put ' put "ERROR: SAS package " req "is missing! " ; ';
put ' put ''ERROR- Try %loadPackage('' name ", requiredVersion = " vers ") to load it." ;';
put ' end ; ';
put ' end ; ';
put ' if missingPackagr then call symputX("packageRequiredErrors", 1, "L"); ';
put ' end; ';
put ' else ';
put ' do; ';
put ' put "ERROR: No package loaded!"; ';
put ' call symputX("packageRequiredErrors", 1, "L"); ';
put ' do req = ' / packageReqPackages / ' ; ';
put ' name = lowcase(strip(scan(req, 1, " "))); ';
put ' vers = lowcase(compress(scan(req,-1, " "), ".", "KD")); ';
put ' put "ERROR: SAS package " req "is missing! " ; ';
put ' put ''ERROR- Try %loadPackage('' name ", requiredVersion = " vers ") to load it." ; ';
put ' end ; ';
put ' end; ';
put ' stop; ';
put 'run; ';
%end; %end;
%if (%bquote(&packageRequired.) ne ) %if (%bquote(&packageRequired.) ne )
@@ -533,6 +573,7 @@ data _null_;
put ' do; '; put ' do; ';
put ' put "ERROR: Loading package &packageName. will be aborted!";'; put ' put "ERROR: Loading package &packageName. will be aborted!";';
put ' put "ERROR- Required SAS components are missing."; '; put ' put "ERROR- Required SAS components are missing."; ';
put ' put "ERROR- *** STOP ***"; ';
put ' ABORT; '; put ' ABORT; ';
put ' end; '; put ' end; ';
put ' run; '; put ' run; ';
@@ -580,6 +621,33 @@ data _null_;
end; end;
end; end;
/* update SYSloadedPackages global macrovariable */
put ' data _null_ ; ';
put ' length SYSloadedPackages $ 32767; ';
put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
put ' do; ';
put ' do until(EOF); ';
put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
put ' end; ';
put ' SYSloadedPackages = cats("#", translate(strip(SYSloadedPackages), "#", " "), "#"); ';
put " if INDEX(lowcase(SYSloadedPackages), '#%lowcase(&packageName.)#') = 0 then ";
put ' do; ';
put " SYSloadedPackages = catx('#', SYSloadedPackages, '&packageName.'); ";
put ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); ';
put ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); ';
put ' put "NOTE: " SYSloadedPackages = ; ';
put ' end ; ';
put ' end; ';
put ' else ';
put ' do; ';
put " call symputX('SYSloadedPackages', '&packageName.', 'G'); ";
put " put 'NOTE: SYSloadedPackages = &packageName.'; ";
put ' end; ';
put ' stop; ';
put 'run; ' / ;
put '%put NOTE- ;'; put '%put NOTE- ;';
put '%put NOTE: '"Loading package &packageName., version &packageVersion., license &packageLicense.;"; put '%put NOTE: '"Loading package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;' /; put '%put NOTE- *** END ***;' /;
@@ -587,7 +655,7 @@ data _null_;
stop; stop;
run; run;
/* unloading package's objects */ /* unloading package objects */
data _null_; data _null_;
/* break if no data */ /* break if no data */
if NOBS = 0 then stop; if NOBS = 0 then stop;
@@ -738,6 +806,29 @@ data _null_;
put 'libname ' fileshort ' clear;'; put 'libname ' fileshort ' clear;';
end; end;
put "run;" /; put "run;" /;
/* update SYSloadedPackages global macrovariable */
put ' data _null_ ; ';
put ' length SYSloadedPackages $ 32767; ';
put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
put ' do; ';
put ' do until(EOF); ';
put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
put ' end; ';
put ' SYSloadedPackages = cats("#", translate(strip(SYSloadedPackages), "#", " "), "#"); ';
put " if INDEX(lowcase(SYSloadedPackages), '#%lowcase(&packageName.)#') > 0 then ";
put ' do; ';
put " SYSloadedPackages = tranwrd(SYSloadedPackages, '#&packageName.#', '##'); ";
put ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); ';
put ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); ';
put ' put "NOTE: " SYSloadedPackages = ; ';
put ' end ; ';
put ' end; ';
put ' stop; ';
put 'run; ' / ;
put '%put NOTE: '"Unloading package &packageName., version &packageVersion., license &packageLicense.;"; put '%put NOTE: '"Unloading package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;'; put '%put NOTE- *** END ***;';
@@ -747,7 +838,7 @@ data _null_;
stop; stop;
run; run;
/* package's help */ /* package help */
data _null_; data _null_;
/* break if no data */ /* break if no data */
if NOBS = 0 then stop; if NOBS = 0 then stop;

View File

@@ -55,6 +55,7 @@ TODO:
, path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" library */ , path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" library */
, options = %str(LOWCASE_MEMNAME) /* possible options for ZIP filename */ , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP filename */
, source2 = /*source2*/ /* option to print out details, null by default */ , source2 = /*source2*/ /* option to print out details, null by default */
, requiredVersion = . /* option to test if loaded package is provided in required version */
)/secure; )/secure;
/*** HELP END ***/ /*** HELP END ***/
%local ls_tmp ps_tmp notes_tmp source_tmp; %local ls_tmp ps_tmp notes_tmp source_tmp;
@@ -72,6 +73,15 @@ TODO:
%do; %do;
%include package(packagemetadata.sas) / &source2.; %include package(packagemetadata.sas) / &source2.;
filename package clear; filename package clear;
/* test if required version of package is "good enough" */
%if %sysevalf(&requiredVersion. > &packageVersion.) %then
%do;
%put ERROR: Required version is &requiredVersion.;
%put ERROR- Provided version is &packageVersion.;
%ABORT;
%end;
options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
filename package ZIP filename package ZIP
"&path./%lowcase(&packageName.).zip" %unquote(&options.) "&path./%lowcase(&packageName.).zip" %unquote(&options.)

Binary file not shown.

Binary file not shown.