From fd4aa083330f22a68b69fc4ffee63e6734e65415 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sat, 10 Oct 2009 00:39:28 +0000 Subject: [PATCH] modifications for osx gtk building. not sure about the safety of the sdl modifications, and had to temporarily remove the configure check for glib. can someone help me make it bypassed on osx? my gtk/glib setup cannot be detected by the glib detector --- desmume/configure.ac | 16 +-- desmume/src/cli/Info.plist | 20 ++++ desmume/src/cli/main.cpp | 4 +- desmume/src/cli/osxbuild | 7 ++ desmume/src/ctrlssdl.h | 2 +- desmume/src/gtk/Info.plist | 20 ++++ desmume/src/gtk/check | 9 ++ desmume/src/gtk/dylibbundler | Bin 0 -> 72920 bytes .../gtk/dylibbundler.modified.Settings.cpp | 94 ++++++++++++++++++ desmume/src/gtk/fixups | 9 ++ desmume/src/gtk/osxbuild | 7 ++ desmume/src/sndsdl.cpp | 2 +- 12 files changed, 180 insertions(+), 10 deletions(-) create mode 100644 desmume/src/cli/Info.plist create mode 100755 desmume/src/cli/osxbuild create mode 100644 desmume/src/gtk/Info.plist create mode 100755 desmume/src/gtk/check create mode 100755 desmume/src/gtk/dylibbundler create mode 100644 desmume/src/gtk/dylibbundler.modified.Settings.cpp create mode 100755 desmume/src/gtk/fixups create mode 100755 desmume/src/gtk/osxbuild diff --git a/desmume/configure.ac b/desmume/configure.ac index 39ddc7fe7..828d26b1e 100644 --- a/desmume/configure.ac +++ b/desmume/configure.ac @@ -88,17 +88,17 @@ if test "x$osmesa" = "xyes" ; then fi dnl - Check for GTK and/or libglade -FOUND_GLIB=no +FOUND_GLIB=yes HAVE_ALSA=no GLIB_VER=2.8 GTK_VER=2.6 AC_CHECK_TOOL(HAVE_PKG, pkg-config) AC_PROVIDE_IFELSE([PKG_PROG_PKG_CONFIG], [ if test ! "x$HAVE_PKG" = "x" ; then - PKG_CHECK_MODULES(GLIB, - glib-2.0 >= $GLIB_VER, - FOUND_GLIB=yes, - FOUND_GLIB=no) + #PKG_CHECK_MODULES(GLIB, + # glib-2.0 >= $GLIB_VER, + # FOUND_GLIB=yes, + # FOUND_GLIB=no) PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_VER, @@ -236,7 +236,11 @@ case $target in UI_DIR="windows" ;; *darwin*) - LIBS="$LIBS -framework OpenGL" + LIBS="$LIBS -framework OpenGL -framework Gtk -framework GLib" + CPPFLAGS="$CPPFLAGS -I/Library/Frameworks/Cairo.framework/Headers -I/Library/Frameworks/Gtk.framework/Headers -I/Library/Frameworks/GLib.framework/Headers " + AC_SUBST(CPPFLAGS) + GLIB_LIBS="" + AC_SUBST(GLIB_LIBS) dnl - extra hackery needed for X includes AC_PATH_XTRA ;; diff --git a/desmume/src/cli/Info.plist b/desmume/src/cli/Info.plist new file mode 100644 index 000000000..649348aae --- /dev/null +++ b/desmume/src/cli/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + desmume-cli + CFBundleGetInfoString + desmume CLI + CFBundleIdentifier + org.desmume.desmume.cli + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Desmume CLI + CFBundlePackageType + APPL + + diff --git a/desmume/src/cli/main.cpp b/desmume/src/cli/main.cpp index bddf26f2b..4eb115ee2 100644 --- a/desmume/src/cli/main.cpp +++ b/desmume/src/cli/main.cpp @@ -18,8 +18,8 @@ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ -#include -#include +#include +#include #include #include diff --git a/desmume/src/cli/osxbuild b/desmume/src/cli/osxbuild new file mode 100755 index 000000000..d52abdba1 --- /dev/null +++ b/desmume/src/cli/osxbuild @@ -0,0 +1,7 @@ +rm -rf desmume.app +mkdir desmume.app +mkdir desmume.app/MacOS +cp desmume-cli desmume.app/MacOS +cp Info.plist desmume.app +~/dylibbundler -cd -d desmume.app/libs -b -x desmume.app/MacOS/desmume-cli + diff --git a/desmume/src/ctrlssdl.h b/desmume/src/ctrlssdl.h index 279e44d55..4b57ab16c 100644 --- a/desmume/src/ctrlssdl.h +++ b/desmume/src/ctrlssdl.h @@ -27,7 +27,7 @@ #include #include //#include -#include +#include #include "MMU.h" #include "types.h" diff --git a/desmume/src/gtk/Info.plist b/desmume/src/gtk/Info.plist new file mode 100644 index 000000000..b5313a446 --- /dev/null +++ b/desmume/src/gtk/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + desmume + CFBundleGetInfoString + desmume + CFBundleIdentifier + org.desmume.desmume.gtk + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Desmume + CFBundlePackageType + APPL + + diff --git a/desmume/src/gtk/check b/desmume/src/gtk/check new file mode 100755 index 000000000..91b3f01a6 --- /dev/null +++ b/desmume/src/gtk/check @@ -0,0 +1,9 @@ +#!/bin/sh + +for filename in desmume.app/libs/* +do + echo $filename + otool -L $filename | grep "Cairo.framework" + otool -L $filename | grep "Gtk.framework" + otool -L $filename | grep "GLib.framework" +done; diff --git a/desmume/src/gtk/dylibbundler b/desmume/src/gtk/dylibbundler new file mode 100755 index 0000000000000000000000000000000000000000..0aa0b622ca215d0ce6837a0f07a3ce4e3994039e GIT binary patch literal 72920 zcmeHwd3==B_4gA97&HnhDk{}ckwpO$c9dce21VH<#0_=GGC(w&nF)&pMF*5Pjw`rV z(V|jIEw-qrpb@Fy@>5i*R8gr?O$=64s@7Wbe!u6QXPKENi*4WckN3xXawqrR^S$Ss zd+xc*bMKv**S`P!$9*izYLCzkVSj`z9V~0{!VD_|@nHy|(Bx642QLUtnS_M>>S9OI z|Fhf~cngK52G5)7p|i|tP2)f1LX?%MS)ougJU6Nd{7Wrg*Uhp{nPXXXSw>d}nQ1Mw zAdHisrWnJFMvVOQSnFs4`ze1t>XkoOpcw9xPXp_og_MMhB6N=BS zwZuktIq&~aC_F1Pqq?v>Y;se1?6}vm0>@a^jvJEo*w3=2+k9xpEn>$pqo$6sbMe0p zA%H+z;=kQ~9g*ZK6e=l<7Mi$8ruk14rF#g*kb;(JsE6WLZPb4(u!!fS{3js&$eKBy9|@IKQJB&T~bqCMGKaRN2c<~ z+hJLM#vqUf9^P{3YMIo9{gnEf@nHP8iDw1JjI(R78-zTB9hS9igwfq=JL-h4EA+!b zxDfdHeJu;VZcS!BUPo)#jQ^h^3_xh^)%SDDdew(`0P<*uY=o0)BGo6Al@^^;V%+#h zY>%&0xK#1NH5K(AF2nBEJ`94?-YW+Cr?ikE;)KibP9_ zPdu^zkp9rEw8-e2R7SMPNGii#5b2+57m+%8%VcI$LSk~6{CSaRxV-;qP9Y%nzV=$+ z|0fGvV%7dNwsUuESC{xjnY9=8uo4rpYRC7;jJ=TY{KxGwUO`q?ynXD2%*Ayz-y)G+ zpBb{O+A%$>`X64ltUdKK#(7Pv_j}l~;tLPMd(#e+7hkxKqzWKlSC-_RpSbF?hb*h} z6Zorp>4jv<>&;Tuq*A&WZt-B&lHi`i&G!gBxMxW_<(WeNMJx0RQt6Ji!&{MjbaKga z@?l5OZCbo0tM;ozEMvVGE3>w1kNWpFA-+4dvCFiJU)qpqq4t1xRd_H9HqA`L-dqPz zW{>)f0K2K3FJeWQ3|I*O3_0SY&dcf+)kV7{Vu#K(vfN^|z{ECoo%YfTH$hsucKH+r zvDEI=wrJNwwd*O`*{QLvc6QdjY1+-j!qe2i#x$astKGR&ue)o!Z{xvigJ1iMF-eRX zQri(d>TgC_+Oqq!i$gRf>xc4#O!-Y?dSuZr6R}xQQwFX=tKR-ci2Sap=1dncI~h@< zh~6$@aWW!b5glI)ew@*miFdR^@ME;WK)1}YZwl_A*v3=h!9B*ZHlPo!3CpUL zZuH~VH4)s?WTEIO!QJ!MLkeg7cyMQI;~@1f*P9cu@16oj7`%+Na6HgOsHAL=#jiE} z7SbN4J|q$AS(BvNlK>DaedR?JayG3iLj3zwwc`5t;}Wq;6p-Tp)St9>CSrpWaa=R? zNyOSIBBNQv*0shak2Q+|AUdb*z7ni|u-#{#kKPtqN!m@}-t%f+^@29PnZ! zk7}5hi~=?n+Zx9uStyCubwZLFQ$)NAjoL*m-J1zIo>BSfIttlib0?Mf?6~#(j&_O6 zcCZ1FQb1}|D+PAD+_Gs2GceUcuoT$sk?Oq+*{S9&(Suh zs^KTL$;(W$NVyG5(Li)IhFMF9Rr?~fhY@~ll3(@NP`l;%@7hTf%sN6^2Z$yhT)TcM zDKv!Fu3eF-HKJdWZrX1B7(1}{KlJV!Nsf(dK*i@w#^V!4e2nD^q&KqH{1FQirTkN(X0kQdcEB#GtNEi{&n%BW$ygv2$^`0^V0PzQ zs0ijCS%-9}?{xGfyDoUw zVr&<1zZWWSUdrNVbLBh8wfVdl{1(<`b#3da?f;A-re5d5!~t+6qv=o~o&!NluvJ13%Uq~Sp~(3fJnN?*o1mH<^`|jfW8-5_ z6VK%frWqN3dTV{)fIfb6wbyRGh=C4*OWEnVl*LFO<0!_7;Tt+H`q-jaj2fAV$v-f1 zh77VCD)7`rwFir01|c*SmwuZFZX{qCY+zW#>M^Finh3sX8fi1B$2rAg^;xySt%=}P zL)}7Z2cd384!Xq_V=VFci{Jq2{^tWzyMe-BOO6%8q!~o^afmkj9Q$0g!PW7a)vD3{ z$gO3gtfq`USP9Xe5iKVxXOgQx3adx6P(2_KJGu;1pgKWzY{70Tx-WWAMqO=iP2)bB zf@?BpstIdqC+tDHqFm$v<=RuY?va608k|bLEScL9!EL6xb>w`gr~;1bP&85Spli(bQaDZ4KCg~}p+B=W zyGMPguoTcTL`8{DZ6yXcN;q?QJ=qmXA;O@?I-^HD3+W8dfSNWQZa07^a~4>k0U8=$ zGEwnUG8#<1Snn@vkF6{)|l?N za2#)DJhsO;2v5L_DB7My#XeosVqZRK=S;@9E}#!IYY!%l3{If6ld~G$lKL1=lPVQ~ z6)M`;p4B(*HUm0JE&pcM^3Py}S|)U- zivTfZQg@ev?*r{9QM0TH zqA|_N3wGt$=V)^zijvB)Lwt8~X5(?R6e=^ChJo3f0-Ape@@+|thhhQ1eC^lIKMp$u zv&ahbc+E$iQ5#P4tqr>lVvW=2NS2idlIZAluNd-MsKeURR)InW;FQPB!Cd!jNzLTT_!Xv4CGjMQVea6R{3q zMA)Na53;;Par;8Mc)@0AQY8NgF^OC6B>5maF940mm?e$cxsoF_sJhUymIS|5!m%K5 zo`~(vz&zBC{cvNvW}{LwrD_`+4#Ego|Fh4bqrk9L@Vaajyw0+(FRJUjXb?s>txL9O zza*M@ko`j3&u+Xx6`;yQ_WapY#{Fb8mK@w9MDd7C1h22aw0at z)+Y8#+FqKbl2%S>i>07q8N|WA{w~nDkW*m~f#le}^P-o4aqTbaEK=FGfK>lvV^b4N z&7)K`_5FXKqijvYZgI469px{mX1rjlZI(A_uN39JMfpVV8`k_Ijf$y%XR|ZUuYVKT zHpkSvZJxJ-r;}7N>_Hg7^oWaSb(#INerHQYBDUO9=V8c8+irGb2eGzTFi!FLCiqQRx6(nm6vS5YA4vk0K`Qny+O}>uJXZ(&l zgm5qjzU{@vf{Yv}i3NWwyAc1`K(T*4YS;BLnq1faVa7MWy9`w;zl4qv>+le0;FV2Y z?lxwr@du39qWYCIhiP!P$WhcAi<(`wyWHHvss4Fn&OJ@mb!WV0r!vZ;m>PRlx{wN) zP0t%+8*?~q^U0c?nWvr^+s9El5j)ta-Yc|H?8pa=@{^E)m`%Z5=&M%av2ml53y4rG zYWe9&q9M0hcbyX4IsffMGyE?F$NCAMnlbJ+4wr9!*VMErxLX8-xRoXbw>3CO1*{6N zMk&OlA=)TBf3al{38Q@h>N?oJwSYrF=J83Jt&dTq_tI37As zm!p3Rtv+gKYN`#^+q=(aVgPY4?1#EuaGXSDvI~T%ET$89{DF!ib16oMr;`|4fWef6d!f6>+s>{H*2Qb;6xv;s zsM9s&Fr$Pqw_W~Mgs=gOoVQQngKM-y16xY!rC#--3{>(c#%1$z@Dj_5Q};yk)^3P> zm9eB?le*{q&}-p>O;+>>_FbcsV3$zgn!3jBjYB9?+TK=%9?F(7aH)9WHv-ox)F7pr zMj15=RNK?-wO1_n0ThC9u7Z|m(}a^zWir&g8y@A98!N?FWAx|)o@RiXFGfCI(kAC= z=9p)y%fZDwf!SvJ1uCV)nIJm7##ZF#q+>;+14cghiuFwWjVJx#AC6O%fQP$e5Pv$G znq#?=Evp1E&6D8bHhse%(PH+QmBKJIctve=ef zP7LsPT<7ag!tSujIi7NYyL7av?|l7O^mTfQSuO|ScxaGCU+lzbNJ&pVn!sAuY;8O=$xYhBP2AyKe1TG-)=brtjs>E?344b9V;H) zN1?TdLf53=4ya$2(<^0kFy$>h@}V!vT3NN&bIt7 zAwOP_9ovuzZqB3eL#)%T%vzjy{a~L{o3j@8Jj*#ir*H?nt|O$&@eE29BafuA8oi-9l+`n3na74xMr zkD1=HU=4ege~E-7Q?El#im5jt%Qf}KE0RoYc4(;~b}*VhW8-26OB2VENe$l4sMq$B z!W|yVrkvCK9K2Kt?B;V)h@mC*0C1jEsnt`lDK<>%%vN#Qggt_$|0N+Z8b}k}V3K+& z*1ojvH;+8>h|k&B>%d`jQzlPJD&=hKYb<|Std|U@n5&@0eZXSGv;DC*TStt6F|2k= zMqS31=XbPEWM-rpVulp7TM6YnC!y!U=2Bp{N770z%AAwXWv-5t>Fl10Qv2FU8SAZu zCHD2$Pe%&7WBiqjongY9nV|}5al5A`Cd=sw_s$&8g3d6(7O#i2cy8DWODEe>vgem} zZm8`hkAG;~fPwF0-43dVo<xfIoLM^Orva98&rdG`NDr)jDN$(y%~^|_X!So=Stfr4Yq%v?y@zUsdl{wIcA@MPHi^l%_cO`JiE2G;Mv-H;x+d0 zU%_%rNu!<$k#4KWOlU0L4pnn3{&%4KEzX|ich8_V>Q6?>vW5PZI9w;@yD$6+oK7@8ib;p%h>Y$^v z{S0`tqX%uL$8Rr^3)B$*e~Jk-3706&smvX$J1=h}pEE-_~Pte^v?$DiX#)`|y zbIyQA>Pl@D*sJ&r04ARSzmJ^O&w&3aLS+Q**4UXX2dVR^wtL*rU~6EXyTTi!6Dj<8 zn+I$&h*iTm@`=u2Q% ze>k$u9$0-RMxBG>Gw&f@501?!Y}Wuz>(c_Gr6Trt?T7dRmUsP;BUPf{8`h62+5Mn7 zmXI_KbUTtY-w>aGGZ-SAh2~DFx9kd!L=-mkoZxJR%EBTmK1}(%hAih+%_~e`n~bMA z*|_H5c-lNDX0Ot8-+KqK&Vu;ocS9ByfTy7g%HhuQAUEciCA4NeswJE?_0L%chsF1I zq4C1s@!AA!B%@c-;`Kq4ht``c#;ld z{0?YhFzTFRZ>kG{26O9mAA1s}LwRVzKWB&3f(rF~+;5}hGx4l2Sd*yL_tS=qETa64Y1NWV<*1MzH_J+-?NtXKSj!76rnG47rD4_Q>jNX!aHDy8X2^)Ep;KOCc zOc=CftU8L+;C5B=5J~Oe&O4e$x6N-sRUOU0X2PTSW@Gk5fpZ7tQ6RL@s_ZG|4=e>s zh{)eCfrkX+Mh{2|2W$04q&!I+%}i8QZmc+qB+Oi=K%8#uJpv3krZik8=N40Y+5THZ zPEM=+WvP_$%nh>o_3mrjD{RxJhHLEnl&Rqqm<&}(n;OnB>e=H&@8tET{b1(YMeHVb z5iy$RU@NPJQBc=ihqmc1;u#R@&ietqi})DpZLdRDFk!DlZ)bvi(piUY1PAm)j=SOm z@({ESVLxRZ`ZD}XXJ2g0Rn?X!Z}yd z=es(9Sbev&n`@IjRIDIyq_owP-NLd1gt{3y7zVbGpgwsol-H&6d|>E_t4ZeC>9@C# zCbEBtXv3N9X|Cn*n&p~%EplsXmdAt3DWei8>W%1qWaVs?+>Mm?=2|!iDo~RkJL%@y z3f^2>fzb#z*H)z8T%(0JaGIe^mHb>X-J5Hx$a%D=vZ^+?5(;^4u6>7m9cRR@a)xmz zGR?UOW}{WcMCzJC|1BH>ob({Yg1kg6H`lJc*#WIbRFrT=jfkU!v-eU@ zb~i{N83*DJAWbDBg*Mgk(1ZK+rUB&U8d;$M8oq(aL`4}0E}~wnw{vsNazs*4Kbp+G zxpq7gX!WF!CEQ;VyB*-<@cx>B{&^EX zGH=@t?uo7$w5)TD&D2`zw*ci)Yc4u%-=o7xm7QyB`vZigcCN9}pm2JTc92w0ZlmP_ zraH`_4qfnYplcG@e#Ja;A0YK-&`c0V-mgR>I%k2BbdT*-v7|i4Y&RRWti+S#`jSxE_ zPr6=r=;qvGOZ$u)PKUC1z>$dc$OAKJ-)vU*UnrIbYPKAINJo+m&CkAl!s_x&AraoA zAAi%8Uru~MR=g%V_9FHYWFg*hvz)GT#?UE(3=Tv+!N7g66YLpM9lO3I33`r{Ujg3QD2<9JwG_FHi;V#1T2)7+v>WtB)U}`Vj6;w``*pT&UNw-X_w4-ZxFFOWIzwGOcz+iJ z&-i&x{#CoSK!3CJN-UcTck@)F`w!}Ui#(Y#z)d{kMpkDE83u1O&UNVsh-H0)OGvv| zXbTesi;RaXu{~rT=t~xh=R;oN)?-*qd}yJK*nuhvB1(klC5UA#VT0IY0;)=8vy6po z&}}xT44L|vn^?vYHe#NQkWA?PIBM8W&ZKNb}u+tVD1T zMLfr1Ly|=ZCh8PZV;KC6PIhCD#A135xy&QO#k4h3=k@{5{z*I?F^1rL_?jiJt1 znI{VF@VIwxT-$+D;kYV!dv89~U3>;z!kqmr9#6*z{*HQ&2UkXAh;@6xO480Ftzbo5 z@Pd#vs_6bBn9_p_mdAy)A+KN`;?VG+l7shnJIQj}ai6itOHl=6Vt~HKrme7PH+hRL zwaE*Wym%HXWHx^i1vlB`8BS@|;6b!Xs`K4M!u24iL%~s(GHad>RtVFRu=fx6k(CJEK@qpG*zhFB zHki|$Vs>W{e36sgaB4?z5xbMo;GSUQ+@h}X_xWd8N3YNS9vP`V|K?)X=eMyy()h)8 zro2A`WlYfUL7Z<#7_l>r@?}m}s8}MN#&zw+aJLRi3c@4BcCft3UO?%v?t@ajO zW0P-I^5PP&yRWv%bDYvt@rgz0?qi5j(&K zD}=+7uwv4VK3E}q9&_}C3ro|iL{=iWmLgt9G}VO#v&boCyRhKzbFv%ew+9!oB^gy8 z=XK#`hV6e+Z?6k~fs9la?hFz3n&uEViaTuIeKm?Zm#`Zi#};!UX-R(B*XoMgzZ&ByNH8?di%b4k2=X}*J{jQSnaZAWK94e-c#X_(^aGg`uv7cX+ zjupaI5M1mw@_pV1D}zq^Q2q|ldYDl)7b1n-cjjy)6 zd5(UKgIz6(k&E@b{Y567uRoR7Rh=F*2ISNQCr2t)pts8~D|IPlFS9ZojJuRN;tHC< zMtpQ7Qts_)*%9blZ{am95qoxlEUx51zM`)Bk@im*2i;YGh)%ZPEY|;i$_nnVzh7oLHb#wyt&16F$(cXZl`?cV>fj^i#pfrG#`91`Fof@(B$hT(4_g~Aq2Ln zv#%q1)nKH-=78CzfxtHa#yG{=>XYtJG^u<~506so$$l$xYIoyc^h7ml!$THw^dmU} zd5jR}xbJ^{L0`yb*)s5VN8-kj*fVgBA{`}uZj{hVQd}{h;ra#_byyIv7n@HR{1(JS0Y2U@ryca+r|^kJ)ECCn&-^p< zF2c;5w3u@6aO#yKb5fZjrxDKwGWDEKY>G}o$aAm_AEQm(Ey^?dL0PD${&&IU*rMbd zi(N{BfECwN3*>=pbj6ho-HW5TjmX!zrdP&fPQ zKiNhyLtf*RcE~VKq15H#kU1c&Yc!nHMJLpwtaGbk3KQOjzs0?0` zTaNMz*E0h{+!N@hsSYNn(}B{#XpA_$BXE~j;9JIlbV^CYz86DN_=BLZ4PW;d<$4-2 zr41jOjXZM;`7K0Km63_*X%JMIC!uh|fta&ACfM!OXq2rHbKz&MMhB}#pLsO;9@R|M z=xEVMRsy4_QOX!9gx-!ujlFG6x>6up=n!Eb50RD+10j4`V^^thzXt5Q-Ur288Al?eGx^I= z?FpEVoSA&HOJ74eH|eBeA0dT#)0xRH>V-0sKft=niou!5ZzMKl#*mqOwu4QX$rm0ECh%OH$#1G|aVDP) zvS-GSOBwX}W58Z#@@%S*(rIKS{~Bdg-ISU9bx=5OiyGqANA7WE@^v7l@{^hTS1vz$ zCa3nP)t8xkj)QG(CO->^r5W?Q9)+%X|4*%Gx_CU+T2Wj2|KKeu*1;a zW+q>SdMD51_t6rV1r{lqu5u0X61VncDQ71C4J0LEBl2}7U+u$u5{tzKi7+EB!5q&_ zKEhFC6exZ(`D_s*qSKV`4VpdQTD?r=sBUegV+405-=6}^i30|LDS)KR96~du&g8#B`POIh1wg5TwKS7=vITN}$Gn;281p?;g>Bfu zW0VavWJ();T7f(>lXrs5)NUv<`EFoTnO0}=IglYH(3#xTXq;*k@Mx6dqfvoqBop== zL{s~!5H5B!@|nrc5(YA15Ak6jgrB(#TAInfDYt9h*vw4+ki#f-CV#s5vYdzRcF68b z{@A5x3}+_ye!}+pA}E4VlOfLi3@&ypx~6_J=y38)`aGQMZ6w`^J_HyzuwLz>SO2w4 zEG-)<@NSCw9$D`Fjzggu`wqWsPw#ZZc3~Ce`P|>>EWn$Lrs>Tt%SM!QKljH9%03Wp zpLC(>_>$-@SWkGinLCpWyqWi0${0swy13sFZ9YGxN06`E{Jge$`Y6L75gU66loq>f zqE*lxiVBrE>bzF-PBtitMDE*QnTWmY!z1R4e@O5>k4~4F?~9);_>d3&IA8o&!B_j> zzov0er)2%vQ25RmAN&ix_)k!K@Cc;qf2%M43Bh0OgD>{QUnBU>eDDK(@#hG>=P~K} zwD-mL6nwQ0{w-J{-9F#o6wd8I*uA}KS6@6UnT@Ya!5tP}4PW97*S~NoP>EAilr53=Li5*MtBPgwc&Lu*+kx^L$v#x`|+Vp3C|&5P@zqmzn{mf|aF z3zlyR-m{-6z9PN=H}&rEE#7(YeE?w<(uB9?*c%5!ZI>mk`#gs}B9D-|9Wnv{jjmn6 zWtgm>Sd1H`cf@P%(5z#TRaqI7jzQ5TH-4qT9CxB zhzgpkE6d7IW|JH{cNR?_=Z%*5dS=HHJRSCBXuecL+jJA#v@pqtXwyw@o7NF93jqCo z!~UqI{Z)s^b=y>c6OqL>#llrMXCvLv3lH3O6H4wkGrUbWCY;iQmq``nuw)s}U^Xqj z5btU;IqhA~?0ACNzEw=ISyULF2XyT+9vg0wlj=^!X3UPSXLdZn18-l3Nj7_(Ch3Pd zxD5lFz3$pf9^(c9pqskm@2AZqm&IJ0N!Ag@8nl^k-UfR#eEoxKGs)e6T-WWplz64X zZx=`v$3y?xWxUX`NlvoVX3UPSXLdX>2JgOAOtINQVVDPW?XnSg-y}aZ6;ZtAWQvBIIlpu;W_Nz z+I}XvHyD%-72C0Naa#;Fi%S&;LH}CWK-?rd8JWf{m>plweZ_d9Z*x_Qo}I+-Mq$`n z81}&Xro{ogA8Z&hJHDRT@dUGdZRQRq7vGKHGerAt=uiS<5`hANZ zBHqwHRsAPKS|(W4F0=5yY4Hyj8&rK}$JaAEo?y1Gv=sGad9nCA4lv91;C<8L-FV;M zsL$;9dS=HH%=TsITD&h+{spdzC0TrvsJsisYnRpIebeHdc-M}_?D%?S#}mxXClqC;j8JIQA3N#3~eQr9Oaje|_g<%?0U3p%}wP{-JSmf3pVdP?+V%49H z!u5yUiCvD}8RpALJJ;vk)6}%M?#hlY2A`BKDSQ%-vB4+tZDj}6f4Ik0IU7Y2u@4>X zIyu@sj82M&MM)cd|B9UYdh`Z-T+Kc)&cSw1+`YM+g_e_NJ=xgV@;FBhi9R=-#L1r6|px4$|)*ylPh+BgB7!MCV)I{+CKv#r43Ov$=CeSpwp-*d$>?Zu++|6J&)tXoJF`?JvG(=`uiRCxc* z;VqjpzZV+s{GzpS2H<>m?liQKj2Ao1#~(m*J|uCfO~ZHYrhW?IIGeWBK6!92gzaO~ zHe-9<$m5+cIZJ6oB}Lvwe(j6sve~A+ZqsBfcmP!9QfE!PW{s{G{|SrN)~w+tD`X$M z5os49S=(HQ3~QT{Ad>aC3)#Uoc`ykgS+}?l*=@Tz2_jjQE<`LGN`gq%c!l6I7}7xd zBCQUSOEf;hVJauoT^C5@q_)zu`@6-(4PF62H_X36)GaR5-+GFR54~nGXslOR&1YH0 zv8QDHMj=p8yt5Q(y_qo|>lMxrMnR#TWzg~98nV0dJlW0V7g2X!bR*n85v#=VPW(A` z3RE}4@<*%$?w&cH9(h|b60t`V%)xWLg1XrK@G)d0ZXJqucPM(}d<>$xqE=>Lmt3A^rr2*#)&8OEK5BcK7^|
    ;b4>1Cx}Mg{@h5pC>i-xR86RwrcPo)SOO=(#`i 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 literal 0 HcmV?d00001 diff --git a/desmume/src/gtk/dylibbundler.modified.Settings.cpp b/desmume/src/gtk/dylibbundler.modified.Settings.cpp new file mode 100644 index 000000000..15b5672e9 --- /dev/null +++ b/desmume/src/gtk/dylibbundler.modified.Settings.cpp @@ -0,0 +1,94 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Settings.h" +#include +#include + +namespace Settings +{ + +bool overwrite_files = false; +bool overwrite_dir = false; +bool create_dir = false; + +bool canOverwriteFiles(){ return overwrite_files; } +bool canOverwriteDir(){ return overwrite_dir; } +bool canCreateDir(){ return create_dir; } + +void canOverwriteFiles(bool permission){ overwrite_files = permission; } +void canOverwriteDir(bool permission){ overwrite_dir = permission; } +void canCreateDir(bool permission){ create_dir = permission; } + + +bool bundleLibs_bool = false; +bool bundleLibs(){ return bundleLibs_bool; } +void bundleLibs(bool on){ bundleLibs_bool = on; } + + +std::string dest_folder_str = "./libs/"; +std::string destFolder(){ return dest_folder_str; } +void destFolder(std::string path) +{ + dest_folder_str = path; + // fix path if needed so it ends with '/' + if( dest_folder_str[ dest_folder_str.size()-1 ] != '/' ) dest_folder_str += "/"; +} + +std::vector files; +void addFileToFix(std::string path){ files.push_back(path); } +int fileToFixAmount(){ return files.size(); } +std::string fileToFix(const int n){ return files[n]; } + +std::string inside_path_str = "@executable_path/../libs/"; +std::string inside_lib_path(){ return inside_path_str; } +void inside_lib_path(std::string p) +{ + inside_path_str = p; + // fix path if needed so it ends with '/' + if( inside_path_str[ inside_path_str.size()-1 ] != '/' ) inside_path_str += "/"; +} + +std::vector prefixes_to_ignore; +void ignore_prefix(std::string prefix) +{ + if( prefix[ prefix.size()-1 ] != '/' ) prefix += "/"; + prefixes_to_ignore.push_back(prefix); +} + +bool isPrefixBundled(std::string prefix) +{ + //std::cout << "Testing " << prefix << " : " << std::endl; + + if(prefix.find("Gtk.framework") == std::string::npos + && prefix.find("GLib.framework") == std::string::npos + && prefix.find("Cairo.framework") == std::string::npos) + if(prefix.find(".framework") != std::string::npos) return false; + if(prefix.find("@executable_path") != std::string::npos) return false; + if(prefix.compare("/usr/lib/") == 0) return false; + + const int prefix_amount = prefixes_to_ignore.size(); + for(int n=0; n #include -#include +#include #include "types.h" #include "SPU.h" #include "sndsdl.h"