From b80393c11bec63f0d51f97864fda5ff738b815fe Mon Sep 17 00:00:00 2001 From: "Mark K. Kim" Date: Fri, 25 May 2018 00:24:46 -0400 Subject: [PATCH] Proper DMG support on macOS. Previously `make install` on macOS created TuxPaint.dmg, but it was a simple disk image. Now TuxPaint.dmg is formatted as one would expect from any other macOS app, with a Tux folder icon, symlink to the /Applications folder, and a background image with an arrow. --- .gitignore | 1 + Makefile | 12 ++++++----- custom/macos-mkdmg.sh | 45 ++++++++++++++++++++++++++++++++++++++++++ macos/DS_Store | Bin 0 -> 10244 bytes macos/background.png | Bin 0 -> 2548 bytes 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100755 custom/macos-mkdmg.sh create mode 100644 macos/DS_Store create mode 100644 macos/background.png diff --git a/.gitignore b/.gitignore index 70346a483..3f829341b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ TuxPaint.app TuxPaint.dmg *.dylib *.dylib.dSYM +.DS_Store diff --git a/Makefile b/Makefile index db1c2aad7..af60bc389 100644 --- a/Makefile +++ b/Makefile @@ -482,7 +482,8 @@ install: install-bin install-data install-man install-doc \ @echo @if [ "x$(OS)" == "xosx" ]; then \ echo "All done! Now you can double click $(BUNDLE) to run the"; \ - echo "program!!!"; \ + echo "program!!! TuxPaint.dmg has also been created for"; \ + echo "distribution."; \ echo; \ echo "For more information, see $(DOC_PREFIX)/README.txt"; \ else \ @@ -591,7 +592,7 @@ clean: @-rm -f templates/.thumbs/*.png @if [ -d templates/.thumbs ]; then rmdir templates/.thumbs; fi @-if [ "x$(BUNDLE)" != "x" ]; then rm -rf $(BUNDLE); fi - @-rm -f TuxPaint.dmg; rm -rf magic/*.dSYM + @-rm -f TuxPaint.dmg temp.dmg; rm -rf magic/*.dSYM @echo # "make uninstall" should remove the various parts from their @@ -1013,7 +1014,7 @@ install-man: @chmod a+rx,g-w,o-w $(MAN_PREFIX)/man1/tp-magic-config.1.gz -# Install the support files for macOS application bundle +# Install the support files for macOS application bundle and create DMG .PHONY: install-bundlefiles install-bundlefiles: @echo @@ -1026,8 +1027,9 @@ install-bundlefiles: @install -m 644 macos/Info.plist $(BUNDLE)/Contents @install -m 644 macos/tuxpaint.icns $(BUNDLE)/Contents/Resources @custom/macos.sh - @echo "...Creating TuxPaint.dmg..." - @hdiutil create -volname "Tux Paint $(VER_VERSION)" -srcfolder $(BUNDLE) -ov -format UDBZ -o TuxPaint.dmg + @echo + @echo "...Creating DMG Distribution File..." + @custom/macos-mkdmg.sh # Build the program! diff --git a/custom/macos-mkdmg.sh b/custom/macos-mkdmg.sh new file mode 100755 index 000000000..27a0f6406 --- /dev/null +++ b/custom/macos-mkdmg.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +BUNDLE=TuxPaint.app +TEMP_DMG=temp.dmg +TEMP_DMG_SIZE=`expr \`du -sm "$BUNDLE" | cut -f1\` \* 15 / 10`m +FINAL_DMG=TuxPaint.dmg +VOLNAME="Tux Paint" +ICON="macos/tuxpaint.icns" +BACKGROUND="macos/background.png" + + +echo " * Creating the temporary image..." +hdiutil create "$TEMP_DMG" -ov -fs HFS+ -size "$TEMP_DMG_SIZE" -volname "$VOLNAME" \ +&& VOLUME=`hdiutil attach "$TEMP_DMG" -nobrowse -noverify -noautoopen | grep Apple_HFS | sed 's/^.*Apple_HFS[[:blank:]]*//'` \ +|| exit 1 + +echo " * Adding the image background..." +mkdir "$VOLUME/.background" \ +&& tiffutil -cathidpicheck "$BACKGROUND" -out "$VOLUME/.background/background.tiff" \ +|| exit 1 + +echo " * Setting the folder icon..." +cp "$ICON" "$VOLUME/.VolumeIcon.icns" \ +&& xattr -wx com.apple.FinderInfo '00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' "$VOLUME" \ +|| exit 1 + +echo " * Copying the contents..." +ln -s "/Applications" "$VOLUME" \ +&& cp -a "$BUNDLE" "$VOLUME" \ +&& cp -a "macos/DS_Store" "$VOLUME/.DS_Store" \ +|| exit 1 + +echo " * Configuring the folder to open upon mount..." +bless --folder "$VOLUME" --openfolder "$VOLUME" \ +|| exit 1 + +echo " * Unmounting the temporary image..." +hdiutil detach "$VOLUME" + +echo " * Creating the final image..." +hdiutil convert "$TEMP_DMG" -ov -format "UDBZ" -imagekey "zlib-level=9" -o "$FINAL_DMG" + +echo " * Deleting the temporary image..." +rm -f "$TEMP_DMG" + diff --git a/macos/DS_Store b/macos/DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d8ac20b9560857ac83b19991d0b4d42f77f7edf4 GIT binary patch literal 10244 zcmeHMU1%KF6+R=c;$2C$Rx4RiS``M=BrehJ&i?PphOAaARR$ZmUe&R&6KQs5R@!Ja zv)!GQlo}NU`p^frP|^p}1QO_9z|c0Og_1s0&=3O7Lmx`x2bZ?AltK&fLqq%2^gAdyMO22bMBpU&s`IdRA_54BAJN%NX&x+$nHVh&gl^Kh?-;I62_BR z270I5sMlK7q26AFX93Rwo&`J$coy(1@JX-$?rbK1zr(%Uvw&v-&jK9_uz!$|nCAuG zak%X|kl9ZFa388|0uC|&mj%xYzTJRkw_x1G+ z_B~lzH8)F^YPDMhwRwe0=T&R9tTvZ|Jv3XGdBxn+t6Bee<3{JpU9V&Z6*AE|59-5 z+OD z@fyk!MQW7|VFusVoS!ii<&VL^E<+3)J3bg33JnKGf+tRlJ~;N!*k_l5!)3Lyw$kMF z&X{$xS*W-5OSOt=lxknqq2ylknRRtVpRU)`)+I~dvYhtNUb{W~g04NaSGD*|W4{c$ z&lj7zZd_Su*0hCcwWV8^y71+zEo{vhOJ6@@RL!MeXalxhXjnDVXkFBsE$}DnYFV!@ z7zNX^%=OD^v#A;@df}O+;GjJgYd_!Ad7Le`)KDumV`bv;yN=x^@|pt{hI)R_2ss>b zV6nX=pT~CIb&Z^&Jt@v=kK=9{q%x^gp*32eCYjVGgEWee zMK!A8Z;(bPK#Qo~LhtkFTSE_vLNp%j5*|G$dzeDei)OvOuD7C{<1zKlu)maj4pu&^=^IT=Yppp}4#)>& z_^tLt5fIP_eo>sDjx%PkztDOy*XYg5!} zR;I`m3)Io$IPB+#6?Iyt2CS`tufW!yp#eH)?}uY$lUlS2yU$Y*BV=26lx0UDI_gS} zb_5TT6eT)=RrT{p;xv&z=_nfPnQ%4s2c^KGVH$d1B7a#_`soYwI3`-cgxhqTzDGZy zU(p-%2l@xSBOR57rE%%uBk%hBzCPcuZ^Sq1d(b!T`1b z$1O|Ob*+-p;;Ndhq*YCgmowFbTB)RyN-mvNV(Hi^MbKg3G{lut6>~kJHX3!E^KeTw zw6eJsY3iyL-fY$^-5m;HF&-34yEQ^~EO9EjA&w`^DBBx<-vdo=LY4pG?69i;LbS#K znh)7BI8!h1FC9oh;6DkR2mY) z4+EbTSO(q_I1hY7V2LLcI0!7JqMf@$FNihRJ$QH4oZacYQ#Q@D)uX6~ZVI#aA?*Q2 z@{uFxh>x0w^6ezPefSQiyx8SY`JK*vy8H*uzEgM5j|90Mb1;{Yl1TGN@PXvRoPXyN z26D@;?{v!{r@7NUEXuCjEtJ23bOY&SBp%16n%=$g=QnnU#!%!KT^Q0{CwJ*43D)F; zFG1OAt*%c+qusvm;kaVoB~f=xwEQ+(Yu{Y2?+|^SWniM2+37@aZY~?1OC^)xL~ME{ zT*#$n!%8uO+L=_k5YM^mQpMWdhGOm-SvK!B@5xIrEN?c;wcUqk<1#xEUI=6O6MH?3 zUBANXwadb9jc^%z@qP69InplDn@D$%T-|QIicTQ6d|My2f0l8}<}3Tl=~70N0?Gh zAqvgGGq(8>yWc$n&xN(KH{|oh#DOS#!+)}ZAohlrpc~UcZ)l179+^lHo7M~blG`8n zrveWF|5af2fUgP69`JVp%fLY)M*(&}1ZkJ(>#iJNKC?`rU83)Z`h%YFw2;Go!``RE zK@2UUjdiEHME^m5_IW+>|6dpP8|HaB7<0Lp)p5U*tN6%Qku1R({~GOlzVt*&!O6;T zks=$VrcpNyKG-avAK}M6LcsTXNCo-=gMm-dLn`18*bk{}IyouFlL>xEWira7oQY?* zw*w#LA@v@nIbgs6nnn!QpgJPs3Su{ooK3{YtuuAABHp6-7^J_!*mpSgweA7os8C00UU)L`K~UwM(g(D$5U-7FThwpGDP;;~y!2zZ~q+6V62 zSnXQFi@cJLf$#}3$$W9l!WFQO_sFw=XMsfZnV18`80 A@Bjb+ literal 0 HcmV?d00001 diff --git a/macos/background.png b/macos/background.png new file mode 100644 index 0000000000000000000000000000000000000000..c50906308f1b5f0caa694016f0833d551208f1ce GIT binary patch literal 2548 zcmeAS@N?(olHy`uVBq!ia0y~yU`k+MV7$S>1QbcFI1HjV3p^r=85p>QL70(Y)*K0- zAbW|YuPgf_R!L@I1+BaYf1t9-o-U3d6}R5reVcpRN}?gq{DqWT*jtU*vmWd(`Pti) zPm6eVirAk!=vp|@sqYa}-6t=Tzpvl#w-;x4u$nD5Nlffk@Qgz(fpUVB#be z4U`js-k`D*fj*&bC{pS~lZV@vGe{NguKR!f`E+$=A4Du4D3mi-W^80>*cNe=>#on_ zu=!&N=FBZgm=kDZx1xbli0x$DpNPzv+8io8s->TP|G8!1qUNZOc(3e~ z3Wti1)S;_~boU8O_HtWshlE4Hg#qIgOm&?!;ppS%=S|L{Oad&`Xz zZ<2D?UEnmo^fU~pamMA8KT5KTf%cxcdg7?dj3_Ul^IHy1{yAsYlAv3~>?}f7dP#q* zmBrnUrUMOnv30@3nKrK+1UwQ}_&m$KQ&qTAw2|f6Otty5)29G6I%-vTsOjrVZ)f5* z<7yB~U*^8?(Cn3M{QWi;N;sG}@46&?tqJlsst%ufKy#+4pvMGf`-D%*`k!|0suE)n z5;5Gy_0(?V;(woO-rV3~;+%Z0`*Ev_l%U6ls=1c>*K9WSRO95;K3!b;PxOjlV~b&K-rm@}#OI$kSfA0?c-7(Hw0r%7b{$Jg?US{o7Z1s>2py9Y zPQJ&Nc+%7DGf0EmY4M-iA5D+iU2c7+N=?us;h2@$-%p7(DIW6km~PBjl=j=v$gSAG z(do7R-)`@wo9mxFPgAISz2oe0Pg|ShVu>G83ms;E`kcX{&&&y;+I| zm7&s2JP1#EFN`TJ6&6c3`sQUGRB{?71XS?dJZxxJUXs&82KhXDB32 zvx({2yKvD{$-w6h3JX1sy*i$se$iBvMJO!pX7!!Wbt|u}Qsz(zHs5sN_kX|piRsTz zt^o3z&5i!Op6wY?8(qtK{F>p*>1;sF7jtIFJ}kNSjPb1HAG1|=8G!jtc5?ReK48xC zlYRVt^Q|n=PdnH-=U)AIqw)L?4mFP%8~Yx%hXNfg5L*gL^v91calTUpWL*rI@wTTQ zs4rQzw|~R@&@~s5M84;UW=Ass!ypZ)VZoU#T)?b$&lsf7@a@k1EBYoJQIdVJrlYc4 z@~R-X401S9lUV~SLl_!alqBR8`(3Rr6u!;jW>E8B02y$E6Bs`cJFeVX3G@%J{z`Cb z`Lrgfby@0~;80(nHLrjn4Dzagu)Q=Zu#AN9K}tc!p1OYVRH%T5fhH3Z=aT;ZCSX3> zu>(j%t!P!4aA5WCt(Tu`ub9LMuA*4lJscDow_gv8jc?_uNigEM9e99+vxoy?G1QSD z4+D$#hL3`~p4S4?1+ai)U?Bntfc!%ga!_C-1_1+%SVWBbfNF?zA5a-F?gOi_WgTSI jAl4QJc{Q~|=6}Wq(^ypG)_bG_TWk!Tu6{1-oD!M