From bc3ed98b1f1521cd61e17119247b0c182a7ebe15 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 10 Oct 2026 12:49:01 +1100 Subject: [PATCH 1/2] Stop the Linux viewer needing libSM and libICE The library built in the manylinux container records every library it is handed as needed, used or not. raylib hands on all of FindX11's, so the viewer needed libSM and libICE, which a stock Ubuntu lacks, and could not start there. Link with --as-needed, as Ubuntu's own compiler does by default, and have build-native fail a build that needs a library outside a short list. --- .github/workflows/build-native.yml | 26 ++++++++++++++++++++++++++ claude.md | 7 +++++++ native/CMakeLists.txt | 11 +++++++++++ 3 files changed, 44 insertions(+) diff --git a/.github/workflows/build-native.yml b/.github/workflows/build-native.yml index 262fa431..2120f4ae 100644 --- a/.github/workflows/build-native.yml +++ b/.github/workflows/build-native.yml @@ -75,6 +75,32 @@ jobs: exit 1 fi + # Everything recorded as needed has to be on a machine for the library to load at all, so + # the list is held to what any machine that runs .NET and has a display already has. It grew + # once without anybody choosing it: the container's linker records every library it is + # handed, used or not, and raylib hands on libSM and libICE, which a stock Ubuntu lacks. + # The viewer could not start there, and nothing noticed until somebody ran it on one. + - name: Check needed libraries + if: runner.os == 'Linux' + env: + ALLOWED: >- + libc.so.6 libm.so.6 libdl.so.2 libpthread.so.0 librt.so.1 libstdc++.so.6 libgcc_s.so.1 + libX11.so.6 libGL.so.1 ld-linux-x86-64.so.2 ld-linux-aarch64.so.1 + run: | + needed=$(objdump -p build/libdiffengine_viewer.so | awk '$1 == "NEEDED" { print $2 }') + echo "Needed:" $needed + failed=0 + for library in $needed; do + case " $ALLOWED " in + *" $library "*) ;; + *) + echo "::error::libdiffengine_viewer.so needs $library, which is not in the list of libraries it may need" + failed=1 + ;; + esac + done + exit $failed + # macOS draws with AppKit and Core Text rather than raylib and ImGui, so it is a Swift # package rather than a CMake project. Both --arch flags in one invocation produce a # universal binary, so there is no separate lipo step. diff --git a/claude.md b/claude.md index b1d84005..450ba208 100644 --- a/claude.md +++ b/claude.md @@ -622,6 +622,13 @@ the comment there about not caching "nothing staged" asks for. - Built binaries are **committed** to `src/DiffEngineViewer.{Linux,Mac}/runtimes/{rid}/native/`, so a plain `dotnet build` produces a shippable package and contributors never need CMake. Regenerate them with the `build-native` GitHub workflow, which opens a PR. +- The Linux library is linked with `--as-needed`, and `build-native` fails a build whose `NEEDED` + entries are outside a short list. A library recorded there has to be installed for the viewer + to load at all, and the manylinux container's linker records every one it is handed: raylib + passes on all of FindX11's, so the binaries built there needed `libSM` and `libICE`, which a + stock Ubuntu lacks, where the ones built on the Ubuntu runner (whose compiler passes the flag + itself) had not. GLFW opens the X11 extension libraries and `libGL` itself at run time, so only + `libX11` is left of them. **DiffEngineTray (`src/DiffEngineTray/`):** - Windows Forms tray application that handles pending file diffs diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 5800fd12..67b1c3a6 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -109,6 +109,17 @@ target_compile_definitions(diffengine_viewer PRIVATE IMGUI_USE_WCHAR32) find_package(Threads REQUIRED) target_link_libraries(diffengine_viewer PRIVATE raylib Threads::Threads ${CMAKE_DL_LIBS}) +# Only the libraries something is actually called in are recorded as needed. raylib hands on +# everything CMake's FindX11 found, which includes libSM and libICE wherever their headers are +# installed, and nothing here or in raylib calls either. A library recorded as needed has to be +# on the machine for this one to load at all, and a stock Ubuntu has neither of those two: the +# viewer could not start, and every inline snapshot sent to it was staged instead of shown. +# Ubuntu's own compiler passes this by default, which is why the binaries built on the runner +# never had the problem and the ones built in the manylinux container did. +if(UNIX AND NOT APPLE) + target_link_options(diffengine_viewer PRIVATE LINKER:--as-needed) +endif() + # The managed side probes for a bare name; keep it identical on every platform apart from the # platform's own prefix and extension. set_target_properties(diffengine_viewer PROPERTIES From fa0cca3d2019763bd2846a770455c3fcfc5c545b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 10 Oct 2026 13:10:17 +1100 Subject: [PATCH 2/2] Rebuild native renderer binaries (#950) Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com> --- .../native/libdiffengine_viewer.so | Bin 2243416 -> 2243416 bytes .../linux-x64/native/libdiffengine_viewer.so | Bin 2476392 -> 2476392 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so index ed2b57188b5234f86fc17f8857738bebb3dd6415..1d57eb20dd0e54f62b4b844788774cbc7aeee037 100644 GIT binary patch delta 11910 zcmZ{q4|G#in!xW%OL=VqB*c&erMwguf?`ckAu!|NbyOxYD5=glcGZ>OxLS}|S{)&Z zk`$0e{%G2Zy!vM_#hI}Vo;6I}O-JWwsykZ$jHWZYZU)b47#)eqjDgveG9c`C-*-cs z?;OH;@4ol@efPfi?)Saqr6m7NLdnCDjMU{WQJ8q;F6myg&Buy9bB`4pD%#;?xSQk- z#qEop!l>vej4HRf1*3F+t@7GA$6_9gVtlS;=6NqaaoNT5jvQ=^C-SeRzlfeV@5USN z8@Sc7b4HKm;l-JrXFZxli4S-iGBwIGe8g`k!+iDJo0R|5cf5O^ zn@8pal;6VEO66s-uk;SoUJ_H3UyGfARAalMLA5SapS$~8W*s&t8Z^@Y8rT^ zdJ zF)KT!^C#EW$Hu~H*)1|G#TaWJHDH>iux};1f8<3NeKNB(<4{p^e-iV`{Xe{T_XNi3 z*lfAqVfL?OO>%#gxvw%^?%!wjuZgi068vOtkIL8tcB|aK$Lvte+F)P2#C1e+vEjS1S34g8 z8z(j*`zE+@zuTK6Hd&8-dwCPs6tVr%_VZO>2Z@c!k+ZxT>@cwj**C|Bz~+ffNn7AY z!Ip?EPVk!ZIm&$xxVe9$-P`^HBXP(wLeT)1k9BUMgm5@h=)IJ2M-DHpX>u?11%gWRS-iNnHc-aZp)*<&0KFE=4gty6a z@DuLAd5*CF5y7Q69YMl-<*Dn0rz8&%-YzQCr5%}NXT0-Gf^FD>K?Y>wEHw2-gOZa%!lUTeP|=NxhbWE4n1 z63ELI$jer{HzbLAq%tq9yk#rA(@ERug}Hb`tja-Hy`#A?z)%E2ay4N42?PrxlrY*<<-1+ZyigSB{EC=0MzV#Ctrd3VCC z6nM)cb9gSHdPhl|wgyLG+_Bxw(~sD>wq5ml{#u#rfQ-`kAsDChi0TcJh@gzn&2jYY z<~T|#Kk$fKi9j#6(k9m4DCrlH{oeAK4CtO-9w`;Z+s6vcnx4B{nX{VP98XWmIyN@PycL(@WF5K6FPJb9_B}P!29n`d(Tc4W*K&1mc_cAx9o(uCf#zY@x0=^bElgp zcG+tSk|g;7AcH_klBD<{AjNSpY3|qsPyS>~CQm)fo52nfYnL|1J9fc`-lLGqT`E)~ z>?uWaUE(9VAVZ{IQl14XRc5GHa+UCu@mxQREo2>Rl-N;eA?uGp)|2pI z-H0a*S%>&u65l2*Q~=n1Vtb{9YDhvg5IZa_R0G&yVvEv3HGs_%t6qv{Rp5PKi^K+` zg?dRsy%4K=o#qz=cC@ly;*zU`Yo4iQyod0#3%N$PeHwB<^07NQBt?L9C`cY8{0=t` zq!X^o_*OpD4Ie&K&2^R^ z>VaFF+j*%+RdQla$(!o}Z|33#73&i3fc2`y!8O8% z<@kQ&W4CEp1kTYRcn+=;{@D^dq0l*aYX#?fch`9%6^OAy(=4-;+W63JcsQUofHuL8 zg6$=i%}1N!zQ^HKqgIZb<}F}{sg)z=cqiCAwQu8v75D+LMPkFRp)HwxM~P*!FXP>Y zJEs1vGUw&KcESUHkhvv1^n2tQ;p#AQKjF*YLLNXqcB{=BK@lV!LOJ9*;di`=JVf{l zzeOJAiUIGm#D?BS8{ti0+lXcVfwrBm0vn}PPF!3}oHs#idE%0M2y8F0@pp0L6h8{K zpV-t8+BEm|irZJLhj~jcJn)l9{br0T@J@&+nvtU-GRFS5GLhv-mGEjmj$kJ|H3zvy z`0!K6{e+jEL>@psmdFb)K@lV!hUXy<5q`BCC`|a;CosO1_dNmcnZ$n9gtncJfQ=Gc zFwn-i@+72+SbaKL_){p@6t!}S;ZLDp)5KOU#J=#SP_V`6=AB#NKfTM^5o3u>Hh_KSrD8t9~l(TCs+&=@6MCk<0%RBMW>8Vv1(usECZQ zZz>a6j#LScJcv&~cEYnek!yta@5Lkf3D@(;1IWh`S&ZU9LDC_eKprAol?MnD9{F!P zKr27A7w%eOU)YMHwR6WakSb#1A7bA)Zw8wnRy&A&dwB=g6tU%r>*sx7)5P9!2>WLF z2-sm_L;r=x&2c3KcP+77uR>ekO<;?}w%>t|wI#kP1rM&o#-(NQKTyj5nURp(PI!D1 zj;0YlEV-X>Rqh9|z3A*0o#KNyP?&TGKZLxE`}*KhyQBdGs|7!u8A~t^8 zB=bS3pC165Cid!2(GK!MV6()s56}*C$3D1wh}90G>lk1!8kwpoQ<7U`xc>K1Vys z`}V=zHd=YNZT%9hO1SMSi{c4_9#b9$JtBzKA>vw`YZh|CZi`-QbG|*mh#|-DsoS_cQovLTqtA z+5~R_nL?2zoUiP0h=aP8$=7W12#*n{%f>QJ3oioA(p+27HS7?RAXz5U#(8Tq8U_jNFfWtajd$B0xH9 zeH%Lj3C~Kd6P|tt<3ofO-$fp-;7~iM-=Too`32NYg=TE+duX9{z_t^cdLJ#+&T~*Z z#AfCF548g}Nv!@S>n8{b`T-t8sA zb8>%_@YJ8DnepuJm6gIiN8V0&PL7{K&Y$ad#0E)B+v9i+S;EWj)c%u|$Lf`F0m8F= zZu8uNgcl_5M?Urel9mIdNe4}KfXAKZVM2-3pTonzV-VOJvD!Yg@E8QPNNo9%M)}d_ z;dYZh1S)@GmaU!eyd1?tc>HSoO^`--N^(Ep+ER=UARl`$D##8&(jj#Xb_fw(k|z`< zJR-+|2cuuY-9v0j9=?q`_KQCO&E21AQe{l!Ol6LXvhLalPjSZ!E2nGn_*r80Qv=&y z`0!S5`H?|U7`qK>Li{92ygbHGt>RV!*o3f&U=uYP!*5k=#;IDxrnDKpItY%NjnQud zKCcc|!AWvU$s3(@ibt&6if$YbO{>`$tuV^;J$O)at;$jpXQVOXW2-W4!t=ryN}b}o zwq;zXHZHVn9QTjo|1ypT#_@nL$)>nx{LeV8kJIY}H=5vxUjMj|@VJn6<4PFeA1rX5 zs0?X9pmXu~#S6f~c?YpwwvBvT~>}PJd+tM&aY{VY0ELOzED;q7A z^DWP6#%p^ld!g-GX;?BVjjCf^mh7y|jWeqo6|u2JtKRo-u+cT=!)jP2WafNWbI(-E z>$5UX6>Az4*f3uEqGqoEE5EGSUSoM2jduwk5;VEv^4`)jP*ss*^rYJEq5Ggj;87Ryx& zGlwTzAFUP}8=TfRO|oQ~bx(EmRSUa=#zRi4H*;*d^*M{^^VAIML38*GGp%=?5u<%l zZ|f25y)&_$sM&58k#}ph2h1*q8*DXGM8wxkw!OkUHs5xz$_!axn~mqX(6&j$8qUSG z^}_5}Z2Qd3cG^_2F5B&=EP8#{r&}h$G8vXBnNPRapPo~lUi1db zY}s$W?;d51abkw!`%sz9^^Wf-*Jd87cMP;D7i5|?I1E+!#&|pCSf?B`7R4PuP~Pf# zIPS&U6;kQFJ9^TMs$OAm7y+ijR^bE64z3jptF{{J{Q1xo$H2b zv9YqnRd4o--QYSVz`ZxR#4S;kdG?2{kFSIcV@r>#QM3a+uJ4KVc#rEg(cZ*e^`hOt zUE&0d{j&XpW8AFWu6=^Pwc8~wBvbXcYnyqf9eZ%VSN34wnLRk*N&^Rs893m8Y!4e4 zcX2Nc_(88ZV3+j?SH}9pwE7*EedlK`zRS37) ziT%=XH@>CQ%MTOfZkqgh?Kz%VeB5`Z1>TkWPWV2kf;dBIRQ_4%HU9W_Urb3G|9H~3 zWG?L<-h&Tml;@41lW_EsapI)!E@g$W>XdKheDO12@lvoceuYRa@|Tn6qdxnS=jrABqH)8wzU!6EM&Gx-6^@7<4=_<`_&_@CyHrt)rqjNeN{`WU z+ILqK{K}e-C@v#++Lv&YA2-U67b#=)8Q%(P`FTP=WzNNwFEvE3uxxHNKHgP7%}8F+ z;HmAo2anNX9Jr!kVXe9zcU9x4*o|($-Kf#D0Cvmg70GnKuBEPgS*&RMD%h~V=8>1_ rfuD^V+K=kbGt@;5T3tEOTG5!ls9}Kv&fFZf{JU{IbN`}-Pn7=$n=MWT delta 12162 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 DTnA)j diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-x64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-x64/native/libdiffengine_viewer.so index bc05f05e966bc75f89af0d2ad16684f739a7469a..e7c794f40bfd914fa35e457f1c3f919df3cf3b5f 100644 GIT binary patch delta 15266 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 delta 15497 zcmZ{r30PBC+JNtO5eZ8mD3C;=f|`o93hvYuR5WN8?5M>(E>-MitQ)RCUBDf^>cOQN zwN=_W3UxWynYN*|%1pHrXa2VQo&Gan`m{rw+?(%x&vx(m z&dp5-jXN1M;hng{viFxn(!ZU=U2XaEOu)6>8a`$ z9ija6qn&tbcwf7j#?<doN$mU-j4F?;gMRGIvDIz1R7@dfk8hOyT0wT^7FG$_@%BN3-xm z;aF4fnfK80XhpFp*R=mG=~(n58vOxEq_QhZl=5QiX<~Q^5|z7>Ex&pSYqeEkvqhOg zBQ`6^GXC4C=fV{wMoE+LLZg0^(nrQKjW|*nF5@LeeN!i8oCJ%z?KCM$gfd;mFBuhD zE6-}@mo^`!s!Wzc%D`ck?%0FVn4~NZHQR1}q@uJ^njcoRERV$%`~3N4MX@UDLcQAc z@(Ic|8CwnCM%gE0X0#taS$S20T?Viyr(~RDRESmHmT_Anj#e(nIKha+l#gY+#2BD@ zZ-6GPdYRR338k$*Mtr!pg0Z)04a=;#Da3~248qfxNa9SwgV#iBSz30XHP=O~azogB z!n0&+ZpvkA1=?Y3%|mRJY^|8^eA!wV;XY0DUarA%>!b=|-G30)OSrO2@Jhn-yn@#d z?$JsLt@Ep7Uva8p75Y7A0XUvM3h&wo6D_sQ>mB@%xdHDMECZ_-lCPmK$}nOZduo@#jmv53y59z zh^Xt)vR7KQ%oUc%6S91{>ZyObE1P#9lcr`o-i}W9?Q!>?1kCdI{gD)vmS{^?hB~ zDq<%M61;}+h4L7Egje?!etB$zWLR?Spwi5wsa<_VHaB*P@Z+(1%*WV9rh4@fGCE%qlR@sb{Y zr`6&(rb}Bz>>TYT+GnNp5xY=JEwSbgSGqu*L*wsZ7O;FiDW4=Q&d54k#l$`&EzSan{!1n>4WtrS%fNTJlQ5 zH%eYb_zvwR9@PP9eZ(HsQgLKe()x-0qc#rhWoZM%{-0KY_L{UoVt>)9*I6T@dx%Ae zGq@hF+nZa?MR#d&HaFn9BX*>;IJ0Qeh|QN4XBllKvCm73vy9e7Y?-t;<7o4VeN$ST z@lsra8!VB3kpyQMNhXpXB*B?2#hE27#P$?NjWb(nEvg{aDXo|A9+FoQ-cRx>!m}l> zA$&@b=-nrH(Y?#uY$@tUh36&r6TV3Ddcu3R5gh~w_pNJX+>14~;DZ#!`?mPt7i=LE z<^4p_P!r+)(}H8xlwsD$Pm`gmb;=oGF>5wr)(|^b4jQutZ5pv(SVdjT8nl_j`a21W zS%cO^EOZtYvj%NGu~VhRtl5Ou31U~tQDFw5EhN_ST7+@pFq_bp5gX_lWmwFnP1YhW zu`}e`XXOKU)dP6V1Gtay9NB)I;PXH0G-sTi&@mujCvBeVkrYuvaWpA~{mu+o%sXMLB#I}mJnxH~kh`y5e zb6V{dYcDoRq*x8HAznxLc`X%t*ITXETbLihIVzU6*Bd0yo=QMla{^Bs%309LB5u{-3kTTINW-)65JN*TYDL)QL|Yb zd%0G<9WR>1zBEACO2YpxkFbjHQ283d|0T=U5&pI0e!;Z`+arzRt=ErtW+N$mEp%Q9 zzkNuIvgrX_+1~QJj_)VRo3yLt_1QBl{W z%|x3=>;-A_wH;{P#C|1hfmVywLu~A;qUA#ECfZ_R2T5C|rS7!a%ZYtf+6rylPP~*6 zyIOu9QD0Uk+PEnYFE*g5gYhk)WvW27+xuf&G9yTo_KpbDHA#~0sYM6HWI6RBU%U&?kN=`RCYF>9{k?+hB#i6mRg}_ z{SIc;%9+dVCgoD*igpXM>Iyuk#QJ9mTc|alEhaYQC1K07_`P`DBGx@g*a|IsFRmA2 zQ#`^}Qoca&D#Cpe1+O8zc!Jow!Eh z#07~Bowz3B#3@?K$tiwLv}w|I?8CP(V!iW(wQ03zQ-}@qi*I3QGl&iKo2ku2n?PQQk**aHZgW%C8AtFL?KRsbIMzrFD^e~L;bppe)EV8^_y?>TR?2FUmSx++kq_?Qu`NS@eaj{?{3t7ENms= z0oi61;cm%m2oK0!e1y9tuNVCOwKgC-ZX^{vPl;s^Bs?%)@Fv28k}F#EVf|C8zO`r# zhw;0LJuRnJku7Iv@kj9HgV=zyc=LhQMQn=f1#dpkx{0++5M#re540X)z4EpOZ$8i# z6C0=%b;~q3ip!Z;kF*t9ucNq}i5+`V+-Fx3-b3;#!u^AijoY9a!oB?j_fg(o@H)Zo zFX!M>LikCAV#(_XcS{~1{M%}A0F8v-lswpi4^ou>NYT_nD9X>0o8%vGL*H%rrlcB2 zY|~0!#RW^OBI69L8m)`i;>n_}TWdgDK&(Z^g;5CGM zcM0wzJY%=ub%NiY8Lt$6QX#lnRH!H1yGHN;;mTgY8wpR5JlKNc%((Z93QaA9qLfRn zRJ2@;85N?uNt<~LFSNue2ZXh0JJ6;OYxzJ}{MrO<2C-Fj!e(kW(Pk0r{lr9)p;nEynAqZMVeu{qZ8@>ZWMT0xs1nyXwX=n- zB)t3?!K(;Y<_cazctCO=;TiKp`8vVxXOm9~KdF#XAS%=oUMzWlaKGe@gl9b`+6lJc zm`%k}G_?@;b}qTHmt@lmq9M$t*D;%j&GQJ0*@QNQ*o=k3Vm6`8AlA1`Sj;B0S;Tq^ zg~e=o1G9-(|8ik5o6x$6^{x^Yvk9$-SkFpfF`Lj96I(8qGiDRoa$>9GqQ-1`6SIlf z6nRalBs@#jiIi8zwsrkP79J2MN#GB~D5c z;h}@a8?fJ7b1m|RilMjRkWC@HQMQssxc{seF5ar0#9K9DedmP5TeXw;OEF?S(&iJc z$k!|5)o)e9E7MDupcG1XkvXgc#;9K@3z1P=60J zvW0qy!Wb-ZLNAfYuHqjW^o`XXlxsw9cDIpoVq;?vi8@8*o37t%rqft2U1v1Y&oG}F%k zdodD{X7#>TNKtB<`F8qo$w%M;ys;U7rdj!5Gu|0k&nQSTcMLU#`#jcw!@>EDkH%xI zi_+&O8aMfP)a)_+Rg=#2S2+6%^+IVnU8Qddbag_1m9KB~SCGQ4>V?X5@P!W27;dbr zMh7uCyY_OqeDqN+Z8p>l)(Z>TE1KyO&2$!VTs z)kji^gD}gV9~x)E#ct{y=gEbj|8_ao5MqD6vF<35(H^R!sx_!HxM4?kZR z3s0x+$$)66<}n%Yw*Yu zE^9jh)|!sx8h$%FH~|is?z)Vqk>yOpC|^X`?D|AFYWn?X!|h@0X^d16U1P)ZF?xEG z;j-9w`EbB=I>(3(upN`&XrxI*H%GD|li{Fg=14=1VP8(hF5VttL`T`CDR3yVt%!ad z&U#P9qR$UEPcu zP&UM^_dnE-*uNW#zCFZYBQ|04QzFzY=_?|-l%vHw|c*;Fyeh)URr+2A&1h{(

9;c`!jWebd(n|H`L4 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 T8!tK2BTb=ipm^;i=W+Odb~+<+