From 943cf26e5f129f832b53162f72e8db2f1045a399 Mon Sep 17 00:00:00 2001 From: yabwon Date: Tue, 22 Oct 2019 23:05:08 +0200 Subject: [PATCH] first attempt to packageReqPackages --- SQLinDS/description.sas | 5 ++- SQLinDS/generate_package_sqlinds.sas | 2 +- generatePackage.sas | 60 ++++++++++++++++++++++----- sqlinds.zip | Bin 8509 -> 8554 bytes 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/SQLinDS/description.sas b/SQLinDS/description.sas index 83e1c10..653ba28 100644 --- a/SQLinDS/description.sas +++ b/SQLinDS/description.sas @@ -1,4 +1,4 @@ -/* This is the description file for the package. */ +/* This is the description file for the package. */ /* The collon (:) is a field separator and is restricted */ /* in lines of the header part. */ @@ -12,7 +12,8 @@ Maintainer: Bartosz Jablonski (yabwon@gmail.com) :/*required, not null*/ License: MIT :/*required, not null, values: MIT, GPL2, BSD, etc.*/ Encoding: UTF8 :/*required, not null, values: UTF8, WLATIN1, LATIN2, etc. */ -Required: "Base SAS Software" :/*optional, COMMA separated, QUOTED list, 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 */ /* **DESCRIPTION** */ /* All the text below will be used in help */ diff --git a/SQLinDS/generate_package_sqlinds.sas b/SQLinDS/generate_package_sqlinds.sas index 30c15f0..5122c55 100644 --- a/SQLinDS/generate_package_sqlinds.sas +++ b/SQLinDS/generate_package_sqlinds.sas @@ -9,7 +9,7 @@ ods html; * filename reference "packages" and "package" are keywords; * the first one should be used to point folder with packages; * the second is used internaly by macros; - + filename packages "C:\SAS_PACKAGES"; %include packages(loadpackage.sas); diff --git a/generatePackage.sas b/generatePackage.sas index 5d1643a..7b20661 100644 --- a/generatePackage.sas +++ b/generatePackage.sas @@ -80,14 +80,15 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256; input; select; - when(upcase(scan(_INFILE_, 1, ":")) = "PACKAGE") call symputX("packageName", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "VERSION") call symputX("packageVersion", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "AUTHOR") call symputX("packageAuthor", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "MAINTAINER") call symputX("packageMaintainer", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "TITLE") call symputX("packageTitle", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "ENCODING") call symputX("packageEncoding", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "LICENSE") call symputX("packageLicense", scan(_INFILE_, 2, ":"),"L"); - when(upcase(scan(_INFILE_, 1, ":")) = "REQUIRED") call symputX("packageRequired", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "PACKAGE") call symputX("packageName", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "VERSION") call symputX("packageVersion", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "AUTHOR") call symputX("packageAuthor", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "MAINTAINER") call symputX("packageMaintainer", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "TITLE") call symputX("packageTitle", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "ENCODING") call symputX("packageEncoding", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "LICENSE") call symputX("packageLicense", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "REQUIRED") call symputX("packageRequired", scan(_INFILE_, 2, ":"),"L"); + when(upcase(scan(_INFILE_, 1, ":")) = "REQPACKAGES") call symputX("packageReqPackages", scan(_INFILE_, 2, ":"),"L"); /* stop at the begining of description */ when(upcase(scan(_INFILE_, 1, ":")) = "DESCRIPTION START") stop; @@ -150,6 +151,19 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256; %abort; %end; +/* test if version is a number */ +data _null_; + version = input("&packageVersion.", ?? best32.); + if not (version > 0) then + do; + put 'ERROR: Packave version should be a positive NUMBER.'; + put 'ERROR- Current value is: ' "&packageVersion."; + put 'ERROR- Try something small, e.g. 0.1'; + put; + abort; + end; +run; + /* create or replace the ZIP file for package */ filename &zipReferrence. ZIP "&filesLocation./%lowcase(&packageName.).zip"; @@ -426,12 +440,18 @@ data _null_; isFunction = 0; isFormat = 0; - %if %bquote(&packageRequired.) ne %then + %if (%bquote(&packageRequired.) ne ) + or (%bquote(&packageReqPackages.) ne ) + %then %do; put ' data _null_; '; put ' call symputX("packageRequiredErrors", 0, "L"); '; put ' run; '; - put ' %put NOTE- *Testing required SAS components*%sysfunc(dosubl( '; + %end; + + %if %bquote(&packageRequired.) ne %then + %do; + put ' %put NOTE- *Testing required SAS components*%sysfunc(DoSubL( '; /* DoSubL() */ put ' options nonotes nosource %str(;) '; put ' options ls=max ps=max %str(;) '; put ' /* temporary redirect log */ '; @@ -488,6 +508,26 @@ data _null_; put ' filename _stinit_ clear %str(;) '; put ' options notes source %str(;) '; put ' ))*; '; + %end; + + %if %bquote(&packageReqPackages.) ne %then + %do; + /* + put ' data _null_ ; '; + put ' length req $ 64 ; '; + length packageReqPackages $ 32767; + packageReqPackages = lowcase(symget('packageReqPackages')); + put ' do req = ' / packageReqPackages / ' ; '; + put ' call execute(''%nrstr(%loadPackage('' || scan(req,1) || ''));'') ; '; + put ' end ; '; + put 'run; '; + */ + %end; + + %if (%bquote(&packageRequired.) ne ) + or (%bquote(&packageReqPackages.) ne ) + %then + %do; put ' data _null_; '; put ' if symget("packageRequiredErrors") = "1" then '; put ' do; '; diff --git a/sqlinds.zip b/sqlinds.zip index 46f26335fc1a03be36d9ef71276cb2c5dc8ddeff..8731461e8c3c705f8d8b9baaabfbccb6d733c777 100644 GIT binary patch delta 4035 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 ch==zdd)*cvofFTBkW(JTDX#}LCL8 z0#%YEF$n<0MkDB18JZxGVc;`~3_=PfczBSnXT70@&XSYU5Gq#Aqn510M1SDXGQhvH z{*rH3uN=1+n`_ev`j}&eap+x7>@)Z8;2YOw2wYF0>T@!G9qH_5S&xcnhCh}s=#
p!k#VyOqtC*W~wawOY(2K)z_QcH2y z(7(LgN?sso4bxbgKL|=5HcR5`QpRu%X#-k@OAHR)hONN|KmEBhRqFSg{XK5zl%D16 zdk5}_98EB@=d`ok(}r9fkadl~74k9Nl^!RQUp0yA-WScSihxR+EMJRS50dd#&YC1O z$1lVTx_*%5)@MjDUaE6Ba1nQ_bn}x>IC&#uecv)2ZjyeM-?dxo+_+AC?jG(skOsV^ za8Yts=m4#hzpI+Z-v-@F8MDv0waFwNH8M-8pDvj>-XqnFk|~M1_Ki#dVEibhBI{L+ z_L0`-<6y2es>XB*O_L;&IF=dvo-@Z{&EIQx0(mLdz6Jswd**or4_ZWO8aa zE`#I3T&Ru_UEJ$=9CMq?=9|3XQQ*TF>0Bng`8T}IYR@+HyT|-#4I@{npTu>+2p<2V zTB)dI_{H2MG4}rP+9}NWDTe24oFYy@2RDntNbTb^0s>BV?L1|3<6Y}8b~j_A#-J2t z(5q@kQY%os@)5n!u(TfVY2hya*=^_eulN^mnCyt1(meGf^{(xKE^I$;Ua|d-tcf7s z9A=kGonax}n~e&70Q)v;L=4qBR}LCmI(&E{%{G<#jH~N`+<>r`_aVby%~VqYt|A2g z>Z%%Z5;X#{-|h8XHe6Q@G0Fvl%I>XT+Hz$XA&q*nW0_l-vr_=tx;6O)L zNB0GzI>q*OZy4`>tb5a={+Rwy|5k_nSs@5oo$6RK!cIO!=k>f2PZUWq(D9?cfz&=E zprr!dZm33FNM{O?R-DD2O}7LZG14iI4xyUiNVLw_1D z+gE>ti6YB!lXDU4?7o0)Xd@Wekf;t86^gg$oT;R;jpqOC{*w?;PkJFnV)pXYo$?TU zfQadzL{dq;>iby18*zla-tXc|ax+jro(IQB5?ktLj1gaFZ_736#!z-*O%zW^P`d^U zh<2IRVFga*2-^sqhPAN5Hk?;!p3(Ayw231%ul8}Gp0K4(>PUn-e?!>&%4@KM`u73K z{UM^hv&!_=wnU2n6Q>4l!f2j9=-PxT`%j615LP@oP?7WWF_A-JnM&PtY(ikm%6L!~CtNou%{L3-paNd0`)UF8*uL zmLYEDXExf~l1ShFVhI@Ddc99_n75E(k};l@QrX^OGFTbF!`ocPDg~MKyP_WyGPi`z z>=D_-%W-0wxBGFFRGNV}%w+sm@^LwN?SH7a+xs+v~L6E=)jopVF9rBM|7Ns!Q` zoY0L(PnUHE|FZs+7plI3(dXnFl_E#>9*fC+Ks4HQiouud?RUn`9=YF2%Y!9|vxT!0zYV5kSeNUaCfE(nU!7lmT z38R+T8~#d@ms(=71DUF?AEih7vi6*QYRB`_PIzcZ3j`<3;2BeGO^q)WEtd4r4gCD3 z!d^hxTcbFgCxtZ!qT06KcU7A|dTw4Zn|djBvj~_&{V@MAP&x1t_8|pwYyPpiJ9{Dd zVVcElWi@kk_j%0aL5sq|SUwTh@B*ZQk+{weHKW)e;W+Tg3tx>kj|h;FdZxv-ov>fa zi>9J7>EqLdn#5;sd(+_#r3USJw|oPWL+gOuiSLCOeUT?!v_XYtpQ(xOZ8}*x(t+RJ zN3zYf&71X8%4Lfw9FKhUjyKKK6|b!i&4@w$TtYp1>}4m@a_H?Dj)$jP#XqYQdL95w(`|ABc+%vz9+= z*>)c`E*unRpW@tor=%ij7PQg&Hf}r3rx`gJp9c0coJfhdX8o%<$&NX24s{0QNF-{)9%7%;&;waZ-Vw?z_u-O1xRF)2nf#FZZs^W%>>YVY zl-Z>tUGnFZt}O!0U=;qPbN&2D;nc~noXgRmj>(iY?|D*>tVF;goC0k_VA0!tC6o8k zIdSgc9$C`tEKIL!rQgCm&$(kS3)#K;E+gJ=2IfU>egp@jzuX-A@fBIA00=?6P5=XQ zxt8WE&9QKI7saJTi8#_EQL@4Oo)y=$aLlEW%rlu&y`zk$*)>UYw=ALyeAJN3JjE7T zJbA0$0P}@XyEbp{Z{wTu_nK zTdApGrw2leb!HeUDvZ0hD?7T5%7KU~QmP=s#ZMvl&vD*T&|yWZK(!#?%AO-jQzq&K z1Iv?RZu0s)!bbu;$fKZPQk)=8?*Jw;E|iT5U)lB`_tG<5a$aVkYb@o|oIyCXL&W@v z0FC<+cer{T)J!UBQVP;MO#smoZ|UY7>RxW9_|um0K>hgqTeg-XQtAHofbO_>JX`rC z->E#V(Q5tTAer{Wpazq%t1^_fZ&U)ud(hi4Nf!rm@-5MN8#HU))@PB`+P=@JJbE{tEb@1Z0tv7)Gl!`nENt`$U5W{eS&VL^v_9Kul`5AvT2$z030YGI zb9@{cJS)Lxnv|vPGsyY^o7IMoE|io?inq$rZ4e9X-AiaS{(1%}=Z>Q&)wNz&|6c!Rz-&_ zbV`pasM=&|QBo7Og(|-r&@V4V$UMJQH;S$o`qBjV35KkeyKajgcEV>1GGDn@H9sJJ zOK)g7=lm)oC_IoktsO$>GhfCa?EOF?nDb(2#%&qy!a&c%OI@eT zUcWipo7J=;LumzA!D9VOBw(e)1rsaHa-v1!BgZ(kaZQNSL~K`a$dO!|w?u(>vKnF0 z=fo@dv*FJ2QJD>aO_l};Gz8CNH`Lk>Oux-~RR+I5(W&m2d}CaM;i9N+zBcL!cs@cl z_3FJ#MD65@$GA(Nh3Nc%P`9=gr>o%)FeM4endk)q@@+uloV`9mrzy~nZ2RhU`p1}< z1PQB}+Q^wY7IXTS4TkJfJDO!-JM15Hzw%_S&9IWDIz0bgRFUG!a(g?dwq%CWs@`gvi*oCW5Kuzi=OmX*XgM?wJ z9ian1t3!uZ(QJ8&{e3DaFQc1X_Ki*AaJtbQ__TM)6xQvRUXdi8(BPi|j{evPY{7C%Q~^y80)= z^oCe(QDRyIk z1K>OVE?k*8!GAm$HU~oLzqKKjkW+;7w@bEfjPo%e2qaDf0zrO>$lpc)LV((yx?=S> zS$^ZOZk((H2y6@|m(hQIz^A{WO&EVm&VTJ+gd-^k1h!V!hWUpA6cqo zf1*A4iwE;7hT<<&Rx*P5{~rz{f>F903IaLVyFU6~=loszf3wSD(TFR^-x)$Q+g3_` zT~Ea?K9;|@l;9w2ESwcPgrNLW*#d%pcrAX&lp*g)7^HYV&nBn?Ru$8Yfe E0io(Dg#Z8m