From d8a35dcb3932f96c91516d9407f4feacd4a5ef15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:41:07 +0000 Subject: [PATCH 1/6] Initial plan From 6d4ad3387e20a4b4dd06550f9eba0c3424e4ee80 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:43:41 +0000 Subject: [PATCH 2/6] Initial exploration - planning pkgconfig file creation Co-authored-by: sachintu47 <32639496+sachintu47@users.noreply.github.com> --- docs/bdwn.png | Bin 147 -> 195 bytes docs/doc.png | Bin 746 -> 1083 bytes docs/folderclosed.png | Bin 616 -> 905 bytes docs/folderopen.png | Bin 597 -> 880 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/bdwn.png b/docs/bdwn.png index 940a0b950443a0bb1b216ac03c45b8a16c955452..25e1aa3271dfa8f03b6907f430d487ce49861d98 100644 GIT binary patch delta 173 zcmV;e08;;x0mA_S!jK<-!=(lQ003G^L_t(|0mH4rox_U_!hj$UM8cm?!j>_^v1}W{ zo^8W`3v$A-0cygsE@ceEsKSOsTf>;ciNe0anZu96lmNoK!nMMt!=u8q!=3?r!>ND5 znZlzs!hlx7n!~Fz!n6m&g$F-Ob0;W$!mK_k3c{XC!?PU2x5A|)!oOn?XkZt@f(u^5 bmm37agTtP}jcxz{002ovPDH}4LSVvz4rfx= literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_TW!=zR&0SePB|TJ`M|s4N(*&tf(;Wi9BQEiar}8cmDV4 zDTWp047Q5$ay6ZP+`vM~&t+9Hc#S12zT}ZU=XOP9qB<%s@_Y1Ojn56z*0$+tL(iqB zcW||^fW}LYXyz39de~1Nmy>nvEg1BRz;LeGpWCf4tFipxJT`dDg}^WA%*;p$-6=- zg6*Y|?=f?qBP#6FaQd6BytL8HT|*J3Xx3nuCs@M>oSod^em3Ulf%O}h66=$=Buj%$JXJWP<2uEN+V3!l z!waHY%ju33*x`Q0cU`5z{?kABsLiJhdw#I$;YzFGeg%xVO`N1hm5li)IHO@gFHLy+ z8#crsUpXdv;DDtK+t1kl!yRpiDk>1CJve|nTpjp09AjPd!I_-j&>boU4AH7@!5j9W zubfBs<3zhppjYoi+>GSz6F4HZw_s7QCdNA-$cN^8Y4D1pQ=E^zjnN2rZ#8obha5}h z2l?9rOME1^4fmp8*Qm-8%l{0@;C^NsCc?yNTX4r`Ke(fh^UvmJRyQZG@+(HZ;DG_I zB${Zi%j4UEn{@iYEy3E(@FRS>E_!jyF&=ThR3hBtJT|YS{E`aWzctlT;~iSzD$SOW zXn&y*s#`x{0gIYf62@jzD~z0I&bo>d*D9#yR=MqkXc-YJn`f4znBavu12saOIw1vxwpcLho=3(=p4*mZFy^=D{ literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/docs/folderclosed.png b/docs/folderclosed.png index bb8ab35edce8e97554e360005ee9fc5bffb36e66..b450abb1842a08dc90d1cf464918e7109841c33e 100644 GIT binary patch literal 905 zcmWkt?N8HJ6#f;=FjzK>+Mp0^D2ma*%v>e{Dlh#_QLK$K*<>IrviUMcS|=SZsj0O@ zOA2kVwiKu>ZKbq;(1}24p~>_7V>|nB&$%DYeO}Hv7jCoZdPVt(az#-px^5WnO0JTl zJNT7E&e?nMR#8g6?J~CC8_{sB@Ae%A+Nxf1j=RI0h3}cAk6WcE8Zgg^KJ$I})K0wZ zz06!G3ZwKhI=~=ZEHZ{y5*>7p@H68Y#5?t8Dz8}SqpK2AWk_fcvh^^9hz(m8|H3Qy zgy1#a*zlp7c@tB1e&DtQM6lP>Ua7PVVMC+8!=%Ylu3+YW-2GeFV3yfxI7Ybe6aj2B z{Y`%f9C)Y4J4p-h_E(=o;a57j#wDbt8d$2!oBfW+do^w?X>mWz>EgUohFNat*uO*BcOG zo{QK$MaL0(ADLPd_&P8N#}A@%Pb4L=D*h(8)h28{eq`2irW)bLS1p$nB;i9?qpF;i zs%1`d68>7mhVc=Rp)xq??$%x#M^4v@*^`2?f{D{+(+kGy;6BPIw#4i%7tcRvW%@)d zQr{sarZPq=0#anR=jAN>?AMSkl#1+!*8}T{^8ya;mYJVeNHHHa9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000LSREw`g77M&shr1cW3T}+T4tF7Kv|V}H&Oh`q zfO$;P&qP6G1Lw`BxmsR~?-j6{u+|EP3BT*gj11Cw`8`Lha0}}1+uGx8NYg8YA%vLX zBo`RR6t=o*ixh2$>9f@9N8GW(R;?P~mDF#VPd6E(og0~X*Pn2hE({Bq7+i>E(DwFu zh0{fHx&i$zIy(02z3W$i6Pw7sB}8@mdxFoq3v@eG5{1Z9V5E}r8bB(26y zMiAzYrjJz!2#lk~$|PsF%B4%3;1+!tFXocOq6T>Mf^C<^pF229JCdgm#=KdiE$XrI zO4ETQuI_=KQAnX^o)mzg8=S-D0C(P0(^ZbOEN^51hml$1#L4 z@ix_0TJy48ans0jUxR9EJHkN?qWiFniD%7-_X+b+hI^GB&fTgTTP55ywcuOj8~p7m zx|Cgdr*`1j-goD+?jv-hM_@grJvk;i^%rtl5bf_gBxY=D^ST->CVZB)NFvhxxTA+( zxFx((8m5rqNP8=MbigK)iCim$t4)S8hMz*h%MiVp@PCkH3m0Iv8Y5TXVVsGxvJE3x zDT7Tc`&FsS#Z)I&E_2SHMB7(7bqL=xTlw?xeys-U^uKP#^jn4wAZC74h4FljVxIrn zh2WF{>*pDKff@R{ggn>9?lP?5FQ@lm(t?FX2@cCLE@KvfJPt9TQP@1g1k?4I!aKm_ ay-428t})@)0DSU|lwN13L;TiLIQ|3RKF$CD literal 597 zcmV-b0;>IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA From d1c4386f1b0d32fc37c9752c195bf7cf8da839f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:47:12 +0000 Subject: [PATCH 3/6] Add pkgconfig file for zoslib Co-authored-by: sachintu47 <32639496+sachintu47@users.noreply.github.com> --- CMakeLists.txt | 14 +++++++++++++- zoslib.pc.in | 11 +++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 zoslib.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index de1d2d36..02304e83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ ############################################################################### cmake_minimum_required(VERSION 3.24) -project(libzoslib CXX C ASM) +project(libzoslib VERSION 4.0.0 LANGUAGES CXX C ASM) include_directories(BEFORE include) @@ -103,3 +103,15 @@ endif() if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) SET(CMAKE_INSTALL_PREFIX "." CACHE PATH "install path" FORCE) endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + +# Configure and install pkgconfig file +set(ZOSLIB_VERSION "${PROJECT_VERSION}") +configure_file( + ${CMAKE_SOURCE_DIR}/zoslib.pc.in + ${CMAKE_BINARY_DIR}/zoslib.pc + @ONLY +) +install( + FILES ${CMAKE_BINARY_DIR}/zoslib.pc + DESTINATION lib/pkgconfig +) diff --git a/zoslib.pc.in b/zoslib.pc.in new file mode 100644 index 00000000..68f42b6b --- /dev/null +++ b/zoslib.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: zoslib +Description: ZOSLIB - A z/OS C/C++ Library providing POSIX APIs, EBCDIC/ASCII conversion, and diagnostic utilities +Version: @ZOSLIB_VERSION@ +URL: https://github.com/ibmruntimes/zoslib +Libs: -L${libdir} -lzoslib +Cflags: -I${includedir} From eb1ce8ecf172b2dc6b4a209900ffc4274677833b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:48:22 +0000 Subject: [PATCH 4/6] Update README with pkgconfig usage examples Co-authored-by: sachintu47 <32639496+sachintu47@users.noreply.github.com> --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e9d23fc3..028a8e0d 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,12 @@ After ZOSLIB has finished building, install it from `build`: $ cmake --build . --target install ``` +The install step will place: +- Libraries (`libzoslib.a`, `libzoslib.so`, and sidedeck) in `install/lib` +- Header files in `install/include` +- pkg-config file (`zoslib.pc`) in `install/lib/pkgconfig` +- Helper utilities in `install/bin` + ## Quick Start Once we have ZOSLIB built and installed, let's attempt to build our first @@ -196,8 +202,9 @@ In the `main` function, we make use of two ZOSLIB definitions, `__zoslib_version` to obtain the ZOSLIB version, and `getentropy` to generate a list of random values. -3. To compile and link the application, enter the following command: +3. To compile and link the application, enter one of the following commands: +Using explicit paths: ``` bash xlclang++ -qascii -I path/to/zoslib/include -L path/to/build/lib -lzoslib random.cc -o random ``` @@ -206,6 +213,15 @@ or: clang++ -fzos-le-char-mode=ascii -I path/to/zoslib/include -L path/to/build/lib -lzoslib random.cc -o random ``` +Using pkg-config (if zoslib is installed): +``` bash +xlclang++ -qascii $(pkg-config --cflags --libs zoslib) random.cc -o random +``` +or: +``` bash +clang++ -fzos-le-char-mode=ascii $(pkg-config --cflags --libs zoslib) random.cc -o random +``` + 4. To run the application, enter the following command: ``` bash ./random 2 From eee0b89d50ef40a6e75c9f3708d2019a846fe4bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:59:56 +0000 Subject: [PATCH 5/6] Add placeholders for extra flags and libs in pkgconfig Co-authored-by: sachintu47 <32639496+sachintu47@users.noreply.github.com> --- CMakeLists.txt | 10 ++++++++++ zoslib.pc.in | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02304e83..9587ba86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,6 +106,16 @@ endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # Configure and install pkgconfig file set(ZOSLIB_VERSION "${PROJECT_VERSION}") +# Allow users to specify extra flags and libs via CMake variables +if(NOT DEFINED ZOSLIB_EXTRA_CFLAGS) + set(ZOSLIB_EXTRA_CFLAGS "") +endif() +if(NOT DEFINED ZOSLIB_EXTRA_LIBS) + set(ZOSLIB_EXTRA_LIBS "") +endif() +if(NOT DEFINED ZOSLIB_PRIVATE_LIBS) + set(ZOSLIB_PRIVATE_LIBS "") +endif() configure_file( ${CMAKE_SOURCE_DIR}/zoslib.pc.in ${CMAKE_BINARY_DIR}/zoslib.pc diff --git a/zoslib.pc.in b/zoslib.pc.in index 68f42b6b..283882fc 100644 --- a/zoslib.pc.in +++ b/zoslib.pc.in @@ -7,5 +7,6 @@ Name: zoslib Description: ZOSLIB - A z/OS C/C++ Library providing POSIX APIs, EBCDIC/ASCII conversion, and diagnostic utilities Version: @ZOSLIB_VERSION@ URL: https://github.com/ibmruntimes/zoslib -Libs: -L${libdir} -lzoslib -Cflags: -I${includedir} +Libs: -L${libdir} -lzoslib@ZOSLIB_EXTRA_LIBS@ +Libs.private:@ZOSLIB_PRIVATE_LIBS@ +Cflags: -I${includedir}@ZOSLIB_EXTRA_CFLAGS@ From f7d67ae697bf7d4d1943f54062a78f32876961c8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 11:03:17 +0000 Subject: [PATCH 6/6] Add default CLIB override flags and celquopt.s.o to pkgconfig Co-authored-by: sachintu47 <32639496+sachintu47@users.noreply.github.com> --- README.md | 4 ++++ zoslib.pc.in | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 028a8e0d..b81d93ed 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,10 @@ or: clang++ -fzos-le-char-mode=ascii $(pkg-config --cflags --libs zoslib) random.cc -o random ``` +Note: pkg-config automatically includes the following flags: +- Compile flags: `-DZOSLIB_OVERRIDE_CLIB=1 -DZOSLIB_OVERRIDE_CLIB_GETENV=1 -DZOSLIB_OVERRIDE_CLIB_LOCALE_FORCE` +- Libraries: `-lzoslib` and `celquopt.s.o` + 4. To run the application, enter the following command: ``` bash ./random 2 diff --git a/zoslib.pc.in b/zoslib.pc.in index 283882fc..1c9033a5 100644 --- a/zoslib.pc.in +++ b/zoslib.pc.in @@ -7,6 +7,6 @@ Name: zoslib Description: ZOSLIB - A z/OS C/C++ Library providing POSIX APIs, EBCDIC/ASCII conversion, and diagnostic utilities Version: @ZOSLIB_VERSION@ URL: https://github.com/ibmruntimes/zoslib -Libs: -L${libdir} -lzoslib@ZOSLIB_EXTRA_LIBS@ +Libs: -L${libdir} -lzoslib ${libdir}/celquopt.s.o@ZOSLIB_EXTRA_LIBS@ Libs.private:@ZOSLIB_PRIVATE_LIBS@ -Cflags: -I${includedir}@ZOSLIB_EXTRA_CFLAGS@ +Cflags: -I${includedir} -DZOSLIB_OVERRIDE_CLIB=1 -DZOSLIB_OVERRIDE_CLIB_GETENV=1 -DZOSLIB_OVERRIDE_CLIB_LOCALE_FORCE@ZOSLIB_EXTRA_CFLAGS@