package.sh 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #!/bin/sh
  2. # $Id$
  3. # Copyright 2004-2005 Nick Mathewson.
  4. # Copyright 2005-2007 Andrew Lewman
  5. # See LICENSE in Tor distribution for licensing information.
  6. # This script builds a Macintosh OS X metapackage containing 4 packages:
  7. # - One for Tor.
  8. # - One for Privoxy.
  9. # - One for a tor-specific privoxy configuration script.
  10. # - One for Startup scripts for Tor.
  11. # - One for Torbutton, an extension for FireFox
  12. #
  13. # This script expects to be run from the toplevel makefile, with VERSION
  14. # set to the latest Tor version, and Tor already built.
  15. #
  16. # Read the documentation located in tor/doc/tor-osx-dmg-creation.txt on
  17. # how to build Tor for OSX
  18. # Where have we put the zip file containing Privoxy? Edit this if your
  19. # privoxy lives somewhere else.
  20. PRIVOXY_PKG_ZIP=~/tmp/privoxyosx_setup_3.0.6.zip
  21. # Where have we put the xpi and license for Torbutton? Edit this if your
  22. # torbutton and torbutton license live somewhere else.
  23. TORBUTTON_PATH=~/tmp/torbutton-1.1.13-alpha.xpi
  24. TORBUTTON_LIC_PATH=~/tmp/LICENSE
  25. ###
  26. # Helpful info on OS X packaging:
  27. # http://developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/index.html
  28. # man packagemaker
  29. # Make sure VERSION is set, so we don't name the package
  30. # "Tor--$OS-$ARCH-Bundle.dmg"
  31. if [ "XX$VERSION" = 'XX' ]; then
  32. echo "VERSION not set."
  33. exit 1
  34. fi
  35. ## Determine OSX Version
  36. # map version to name
  37. if [ -x /usr/bin/sw_vers ]; then
  38. # This is poor, yet functional. We don't care about the 3rd number in
  39. # the OS version
  40. OSVER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2`
  41. case "$OSVER" in
  42. "10.5") OS="leopard" ARCH="universal";;
  43. "10.4") OS="tiger" ARCH="universal";;
  44. "10.3") OS="panther" ARCH="ppc";;
  45. "10.2") OS="jaguar" ARCH="ppc";;
  46. "10.1") OS="puma" ARCH="ppc";;
  47. "10.0") OS="cheetah" ARCH="ppc";;
  48. *) OS="unknown";;
  49. esac
  50. else
  51. OS="unknown"
  52. fi
  53. # Where will we put our temporary files?
  54. BUILD_DIR=/tmp/tor-osx-$$
  55. # Path to PackageMaker app.
  56. PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
  57. umask 022
  58. echo I might ask you for your password now, so you can sudo.
  59. sudo rm -rf $BUILD_DIR
  60. mkdir $BUILD_DIR || exit 1
  61. for subdir in tor_packageroot tor_resources \
  62. torstartup_packageroot \
  63. privoxyconf_packageroot \
  64. torbundle_resources \
  65. torbutton_packageroot \
  66. output; do
  67. mkdir $BUILD_DIR/$subdir
  68. done
  69. ### Make Tor package.
  70. make install DESTDIR=$BUILD_DIR/tor_packageroot
  71. #mv $BUILD_DIR/tor_packageroot/Library/Tor/torrc.sample $BUILD_DIR/tor_packageroot/Library/Tor/torrc
  72. cp contrib/osx/ReadMe.rtf $BUILD_DIR/tor_resources
  73. #cp contrib/osx/License.rtf $BUILD_DIR/tor_resources
  74. chmod 755 contrib/osx/TorPostflight
  75. cp contrib/osx/TorPostflight $BUILD_DIR/tor_resources/postflight
  76. cp contrib/osx/addsysuser $BUILD_DIR/tor_resources/addsysuser
  77. cp contrib/osx/Tor_Uninstaller.applescript $BUILD_DIR/tor_resources/Tor_Uninstaller.applescript
  78. cp contrib/osx/uninstall_tor_bundle.sh $BUILD_DIR/tor_resources/uninstall_tor_bundle.sh
  79. cp contrib/osx/package_list.txt $BUILD_DIR/tor_resources/package_list.txt
  80. cp contrib/osx/tor_logo.gif $BUILD_DIR/tor_resources/background.gif
  81. cat <<EOF > $BUILD_DIR/tor_resources/Welcome.txt
  82. Tor: an anonymous Internet communication system
  83. Tor is a system for using the internet anonymously, and allowing
  84. others to do so.
  85. EOF
  86. ### Assemble documentation
  87. DOC=$BUILD_DIR/tor_resources/documents
  88. mkdir $DOC
  89. mkdir $DOC/howto
  90. #cp doc/website/stylesheet.css doc/website/tor-doc-osx.html.* $DOC/howto
  91. #cp doc/website/tor-doc-server.html.* $DOC/howto
  92. #cp doc/website/tor-hidden-service.html.* $DOC/howto
  93. #cp doc/website/tor-switchproxy.html.* $DOC/howto
  94. #mkdir $DOC/img
  95. #cp doc/img/screenshot-osx* $DOC/img
  96. cp AUTHORS $DOC/AUTHORS.txt
  97. groff doc/tor.1.in -T ps -m man | pstopdf -i -o $DOC/tor-reference.pdf
  98. groff doc/tor-resolve.1 -T ps -m man | pstopdf -i -o $DOC/tor-resolve.pdf
  99. mkdir $DOC/Advanced
  100. cp doc/spec/tor-spec.txt \
  101. doc/spec/rend-spec.txt \
  102. doc/spec/control-spec.txt \
  103. doc/spec/socks-extensions.txt \
  104. doc/spec/version-spec.txt \
  105. doc/spec/address-spec.txt \
  106. doc/spec/path-spec.txt \
  107. $DOC/Advanced
  108. cp doc/HACKING $DOC/Advanced/HACKING.txt
  109. cp ChangeLog $DOC/Advanced/ChangeLog.txt
  110. find $BUILD_DIR/tor_packageroot -print0 |sudo xargs -0 chown root:wheel
  111. $PACKAGEMAKER -build \
  112. -p $BUILD_DIR/output/Tor.pkg \
  113. -f $BUILD_DIR/tor_packageroot \
  114. -r $BUILD_DIR/tor_resources \
  115. -i contrib/osx/TorInfo.plist \
  116. -d contrib/osx/TorDesc.plist
  117. ### Put privoxy configuration package in place.
  118. mkdir -p $BUILD_DIR/privoxyconf_packageroot/Library/Privoxy
  119. cp contrib/osx/privoxy.config $BUILD_DIR/privoxyconf_packageroot/Library/Privoxy/config
  120. find $BUILD_DIR/privoxyconf_packageroot -print0 |sudo xargs -0 chown root:wheel
  121. $PACKAGEMAKER -build \
  122. -p $BUILD_DIR/output/privoxyconf.pkg \
  123. -f $BUILD_DIR/privoxyconf_packageroot \
  124. -i contrib/osx/PrivoxyConfInfo.plist \
  125. -d contrib/osx/PrivoxyConfDesc.plist
  126. ### Make Startup Script package
  127. mkdir -p $BUILD_DIR/torstartup_packageroot/Library/StartupItems/Tor
  128. cp contrib/osx/Tor contrib/osx/StartupParameters.plist \
  129. $BUILD_DIR/torstartup_packageroot/Library/StartupItems/Tor
  130. find $BUILD_DIR/torstartup_packageroot -print0 | sudo xargs -0 chown root:wheel
  131. $PACKAGEMAKER -build \
  132. -p $BUILD_DIR/output/torstartup.pkg \
  133. -f $BUILD_DIR/torstartup_packageroot \
  134. -i contrib/osx/TorStartupInfo.plist \
  135. -d contrib/osx/TorStartupDesc.plist
  136. ### Make Torbutton Installation package
  137. mkdir -p $BUILD_DIR/torbutton_packageroot/Library/Torbutton
  138. cp $TORBUTTON_PATH $BUILD_DIR/torbutton_packageroot/Library/Torbutton/
  139. cp $TORBUTTON_LIC_PATH $BUILD_DIR/torbutton_packageroot/Library/Torbutton/Torbutton-LICENSE.txt
  140. find $BUILD_DIR/torbutton_packageroot -print0 | sudo xargs -0 chown root:wheel
  141. $PACKAGEMAKER -build \
  142. -p $BUILD_DIR/output/torbutton.pkg \
  143. -f $BUILD_DIR/torbutton_packageroot \
  144. -i contrib/osx/TorbuttonInfo.plist \
  145. -d contrib/osx/TorbuttonDesc.plist
  146. ### Assemble the metapackage. Packagemaker won't buld metapackages from
  147. # the command line, so we need to do it by hand.
  148. MPKG=$BUILD_DIR/output/Tor-$VERSION-$OS-$ARCH-Bundle.mpkg
  149. mkdir -p "$MPKG/Contents/Resources"
  150. echo -n "pmkrpkg1" > "$MPKG/Contents/PkgInfo"
  151. cp contrib/osx/ReadMe.rtf "$MPKG/Contents/Resources"
  152. #cp contrib/osx/License.rtf "$MPKG/Contents/Resources"
  153. cp contrib/osx/TorBundleInfo.plist "$MPKG/Contents/Info.plist"
  154. cp contrib/osx/TorBundleWelcome.rtf "$MPKG/Contents/Resources/Welcome.rtf"
  155. cp contrib/osx/TorBundleDesc.plist "$MPKG/Contents/Resources/Description.plist"
  156. cp contrib/osx/tor_logo.gif "$MPKG/Contents/Resources/background.gif"
  157. # Move all the subpackages into place. unzip Privoxy.pkg into place,
  158. # and fix its file permissions so we can rm -rf it later.
  159. mkdir $BUILD_DIR/output/.contained_packages
  160. mv $BUILD_DIR/output/*.pkg $BUILD_DIR/OUTPUT/.contained_packages
  161. ( cd $BUILD_DIR/output/.contained_packages && unzip $PRIVOXY_PKG_ZIP && find Privoxy.pkg -type d -print0 | xargs -0 chmod u+w )
  162. ### Copy readmes and licenses into toplevel.
  163. PRIVOXY_RESDIR=$BUILD_DIR/output/.contained_packages/Privoxy.pkg/Contents/Resources
  164. cp $PRIVOXY_RESDIR/License.html $BUILD_DIR/output/Privoxy\ License.html
  165. cp $PRIVOXY_RESDIR/ReadMe.txt $BUILD_DIR/output/Privoxy\ ReadMe.txt
  166. cp contrib/osx/ReadMe.rtf $BUILD_DIR/output/Tor\ ReadMe.rtf
  167. cp LICENSE $BUILD_DIR/output/Tor\ License.txt
  168. cp $TORBUTTON_LIC_PATH $BUILD_DIR/output/Torbutton_LICENSE.txt
  169. ### Package it all into a DMG
  170. find $BUILD_DIR/output -print0 | sudo xargs -0 chown root:wheel
  171. mv $BUILD_DIR/output "$BUILD_DIR/Tor-$VERSION-$OS-$ARCH-Bundle"
  172. rm -f "Tor-$VERSION-$OS-$ARCH-Bundle.dmg"
  173. USER="`whoami`"
  174. sudo hdiutil create -format UDZO -srcfolder "$BUILD_DIR/Tor-$VERSION-$OS-$ARCH-Bundle" "Tor-$VERSION-$OS-$ARCH-Bundle.dmg"
  175. sudo chown "$USER" "Tor-$VERSION-$OS-$ARCH-Bundle.dmg"
  176. sudo rm -rf $BUILD_DIR