maketarball.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #!/usr/bin/python
  2. ########################################################################
  3. ##
  4. ##
  5. ## This script builds the panda source tarballs and zip-files
  6. ##
  7. ## usage: maketarball [version] [more options]
  8. ##
  9. ## The source tarball contains most of what is in CVS, but some of the
  10. ## control files (like the CVS directories themselves) are stripped out.
  11. ##
  12. ## The source tarball contains an rpmbuild 'spec' file so that you can
  13. ## easily build a binary RPM: rpmbuild -tb panda3d-version.tar.GZ
  14. ##
  15. ## The 'spec' file included in the tarball uses the 'makepanda' build
  16. ## system to compile panda.
  17. ##
  18. ##
  19. ########################################################################
  20. import sys,os,time,stat,string,re,getopt,cPickle;
  21. def oscmd(cmd):
  22. print cmd
  23. sys.stdout.flush()
  24. if (os.system(cmd)): sys.exit("Failed")
  25. def writefile(dest,desiredcontents):
  26. print "Generating file: "+dest
  27. sys.stdout.flush()
  28. try:
  29. wfile = open(dest, 'wb');
  30. wfile.write(desiredcontents);
  31. wfile.close();
  32. except: sys.exit("Cannot write to "+dest);
  33. ########################################################################
  34. #
  35. # Locate the root of the panda tree
  36. #
  37. ########################################################################
  38. PANDASOURCE=os.path.dirname(os.path.abspath(sys.path[0]))
  39. if ((os.path.exists(os.path.join(PANDASOURCE,"makepanda/makepanda.py"))==0) or
  40. (os.path.exists(os.path.join(PANDASOURCE,"dtool","src","dtoolbase","dtoolbase.h"))==0) or
  41. (os.path.exists(os.path.join(PANDASOURCE,"panda","src","pandabase","pandabase.h"))==0)):
  42. sys.exit("I am unable to locate the root of the panda source tree.")
  43. os.chdir(PANDASOURCE)
  44. ########################################################################
  45. ##
  46. ## Locate the Python SDK
  47. ##
  48. ########################################################################
  49. if sys.platform == "win32":
  50. PythonSDK="python2.2"
  51. if 0: # Needs testing:
  52. if (os.path.isdir("C:/Python22")): PythonSDK = "C:/Python22"
  53. elif (os.path.isdir("C:/Python23")): PythonSDK = "C:/Python23"
  54. elif (os.path.isdir("C:/Python24")): PythonSDK = "C:/Python24"
  55. elif (os.path.isdir("C:/Python25")): PythonSDK = "C:/Python25"
  56. else: sys.exit("Cannot find the python SDK")
  57. else:
  58. if (os.path.isdir("/usr/include/python2.5")): PythonSDK = "/usr/include/python2.5"
  59. elif (os.path.isdir("/usr/include/python2.4")): PythonSDK = "/usr/include/python2.4"
  60. elif (os.path.isdir("/usr/include/python2.3")): PythonSDK = "/usr/include/python2.3"
  61. elif (os.path.isdir("/usr/include/python2.2")): PythonSDK = "/usr/include/python2.2"
  62. else: sys.exit("Cannot find the python SDK")
  63. # this is so that the user can find out which version of python was used.
  64. ########################################################################
  65. ##
  66. ## Read the default version number from dtool/PandaVersion.pp
  67. ##
  68. ## Parse the command-line arguments.
  69. ##
  70. ########################################################################
  71. def printUsage():
  72. sys.exit("usage: maketarball [version]")
  73. if (len(sys.argv)>=2):
  74. VERSION = sys.argv[1]
  75. if (len(VERSION.split(".")) != 3): printUsage()
  76. elif (len(sys.argv)==1):
  77. VERSION="0.0.0"
  78. try:
  79. f = file("dtool/PandaVersion.pp","r")
  80. pattern = re.compile('^[ \t]*[#][ \t]*define[ \t]+PANDA_VERSION[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)')
  81. for line in f:
  82. match = pattern.match(line,0);
  83. if (match):
  84. VERSION = match.group(1)+"."+match.group(2)+"."+match.group(3)
  85. break
  86. f.close()
  87. except: sys.exit("Cannot read version number from dtool/PandaVersion.pp")
  88. else: printUsage()
  89. ########################################################################
  90. ##
  91. ## The SPEC File
  92. ##
  93. ########################################################################
  94. SPEC="""Summary: Panda 3D Engine
  95. Name: panda3d
  96. Version: VERSION
  97. Release: 1
  98. Source0: %{name}-%{version}.tar.gz
  99. License: Panda3D License
  100. Group: Development/Libraries
  101. BuildRoot: %{_builddir}/%{name}-%{version}/BUILDROOT
  102. %description
  103. The Panda3D engine.
  104. %prep
  105. %setup -q
  106. %build
  107. makepanda/makepanda.py --version VERSION --everything MOREARGUMENTS
  108. %install
  109. rm -rf $RPM_BUILD_ROOT
  110. mkdir -p $RPM_BUILD_ROOT/usr/bin
  111. mkdir -p $RPM_BUILD_ROOT/usr/include
  112. mkdir -p $RPM_BUILD_ROOT/usr/lib
  113. mkdir -p $RPM_BUILD_ROOT/usr/share/panda3d
  114. mkdir -p $RPM_BUILD_ROOT/usr/lib/PYTHONV/lib-dynload
  115. mkdir -p $RPM_BUILD_ROOT/usr/lib/PYTHONV/site-packages
  116. mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
  117. mkdir -p $RPM_BUILD_ROOT/usr/bin
  118. sed -e 's@$THIS_PRC_DIR/[.][.]@/usr/share/panda3d@' < built/etc/Config.prc > $RPM_BUILD_ROOT/etc/Config.prc
  119. cp built/etc/Confauto.prc $RPM_BUILD_ROOT/etc/Confauto.prc
  120. cp --recursive built/include $RPM_BUILD_ROOT/usr/include/panda3d
  121. cp --recursive direct $RPM_BUILD_ROOT/usr/share/panda3d/direct
  122. cp --recursive built/pandac $RPM_BUILD_ROOT/usr/share/panda3d/pandac
  123. cp --recursive built/Pmw $RPM_BUILD_ROOT/usr/share/panda3d/Pmw
  124. cp --recursive built/epydoc $RPM_BUILD_ROOT/usr/share/panda3d/epydoc
  125. cp built/direct/__init__.py $RPM_BUILD_ROOT/usr/share/panda3d/direct/__init__.py
  126. cp --recursive SceneEditor $RPM_BUILD_ROOT/usr/share/panda3d/SceneEditor
  127. cp --recursive built/models $RPM_BUILD_ROOT/usr/share/panda3d/models
  128. cp --recursive samples $RPM_BUILD_ROOT/usr/share/panda3d/samples
  129. cp --recursive built/lib $RPM_BUILD_ROOT/usr/lib/panda3d
  130. cp doc/LICENSE $RPM_BUILD_ROOT/usr/lib/panda3d/LICENSE
  131. cp doc/LICENSE $RPM_BUILD_ROOT/usr/share/panda3d/LICENSE
  132. cp doc/LICENSE $RPM_BUILD_ROOT/usr/include/panda3d/LICENSE
  133. cp doc/ReleaseNotes $RPM_BUILD_ROOT/usr/share/panda3d/ReleaseNotes
  134. echo "/usr/lib/panda3d" > $RPM_BUILD_ROOT/etc/ld.so.conf.d/panda3d.conf
  135. echo "/usr/share/panda3d" > $RPM_BUILD_ROOT/usr/lib/PYTHONV/site-packages/panda3d.pth
  136. cp built/bin/* $RPM_BUILD_ROOT/usr/bin/
  137. for x in built/lib/* ; do
  138. base=`basename $x`
  139. ln -sf /usr/lib/panda3d/$base $RPM_BUILD_ROOT/usr/lib/PYTHONV/lib-dynload/$base
  140. done
  141. for x in $RPM_BUILD_ROOT/usr/share/panda3d/direct/src/* ; do
  142. if [ `basename $x` != extensions ] ; then
  143. python -c "import compileall; compileall.compile_dir('$x')"
  144. fi
  145. done
  146. python -c "import compileall ; compileall.compile_dir('$RPM_BUILD_ROOT/usr/share/panda3d/Pmw');"
  147. python -c "import compileall ; compileall.compile_dir('$RPM_BUILD_ROOT/usr/share/panda3d/epydoc');"
  148. python -c "import compileall ; compileall.compile_dir('$RPM_BUILD_ROOT/usr/share/panda3d/SceneEditor');"
  149. chmod -R 555 $RPM_BUILD_ROOT/usr/share/panda3d
  150. %post
  151. /sbin/ldconfig
  152. rm -rf /usr/lib/PYTHONV/direct
  153. rm -rf /usr/lib/PYTHONV/SceneEditor
  154. %postun
  155. /sbin/ldconfig
  156. %clean
  157. rm -rf $RPM_BUILD_ROOT
  158. %files
  159. %defattr(-,root,root)
  160. /etc/Confauto.prc
  161. /etc/Config.prc
  162. /usr/share/panda3d
  163. /etc/ld.so.conf.d/panda3d.conf
  164. /usr/bin
  165. /usr/lib
  166. /usr/include/panda3d
  167. """
  168. MORE=''
  169. for x in sys.argv[2:]: MORE=MORE+x+' '
  170. SPEC=SPEC.replace("VERSION",str(VERSION))
  171. SPEC=SPEC.replace("MOREARGUMENTS",MORE)
  172. SPEC=SPEC.replace("PYTHONV",os.path.basename(PythonSDK))
  173. ########################################################################
  174. ##
  175. ## Build the Zip-file and Tar-File
  176. ##
  177. ########################################################################
  178. TARDIR="panda3d-"+VERSION
  179. oscmd("rm -rf "+TARDIR)
  180. oscmd("mkdir -p "+TARDIR)
  181. oscmd("mkdir -p "+TARDIR+"/thirdparty")
  182. oscmd("ln -sf ../dtool "+TARDIR+"/dtool")
  183. oscmd("ln -sf ../panda "+TARDIR+"/panda")
  184. oscmd("ln -sf ../direct "+TARDIR+"/direct")
  185. oscmd("ln -sf ../pandaapp "+TARDIR+"/pandaapp")
  186. oscmd("ln -sf ../pandatool "+TARDIR+"/pandatool")
  187. oscmd("ln -sf ../ppremake "+TARDIR+"/ppremake")
  188. oscmd("ln -sf ../SceneEditor "+TARDIR+"/SceneEditor")
  189. oscmd("ln -sf ../dmodels "+TARDIR+"/dmodels")
  190. oscmd("ln -sf ../models "+TARDIR+"/models")
  191. oscmd("ln -sf ../samples "+TARDIR+"/samples")
  192. oscmd("ln -sf ../doc "+TARDIR+"/doc")
  193. oscmd("ln -sf ../makepanda "+TARDIR+"/makepanda")
  194. oscmd("ln -sf ../../thirdparty/linux-libs-a "+TARDIR+"/thirdparty/linux-libs-a")
  195. oscmd("ln -sf ../../thirdparty/Pmw "+TARDIR+"/thirdparty/Pmw")
  196. oscmd("ln -sf ../../thirdparty/epydoc "+TARDIR+"/thirdparty/epydoc")
  197. writefile(TARDIR+'/panda3d.spec',SPEC)
  198. oscmd("tar --exclude CVS -chzf "+TARDIR+".tar.gz "+TARDIR)
  199. oscmd("rm -rf "+TARDIR)
  200. oscmd("mkdir -p "+TARDIR)
  201. oscmd("mkdir -p "+TARDIR+"/thirdparty")
  202. oscmd("ln -sf ../dtool "+TARDIR+"/dtool")
  203. oscmd("ln -sf ../panda "+TARDIR+"/panda")
  204. oscmd("ln -sf ../direct "+TARDIR+"/direct")
  205. oscmd("ln -sf ../pandaapp "+TARDIR+"/pandaapp")
  206. oscmd("ln -sf ../pandatool "+TARDIR+"/pandatool")
  207. oscmd("ln -sf ../ppremake "+TARDIR+"/ppremake")
  208. oscmd("ln -sf ../SceneEditor "+TARDIR+"/SceneEditor")
  209. oscmd("ln -sf ../dmodels "+TARDIR+"/dmodels")
  210. oscmd("ln -sf ../models "+TARDIR+"/models")
  211. oscmd("ln -sf ../samples "+TARDIR+"/samples")
  212. oscmd("ln -sf ../doc "+TARDIR+"/doc")
  213. oscmd("ln -sf ../makepanda "+TARDIR+"/makepanda")
  214. oscmd("ln -sf ../../thirdparty/win-libs-vc7 "+TARDIR+"/thirdparty/win-libs-vc7")
  215. oscmd("ln -sf ../../thirdparty/win-python "+TARDIR+"/thirdparty/win-python")
  216. oscmd("ln -sf ../../thirdparty/win-util "+TARDIR+"/thirdparty/win-util")
  217. oscmd("ln -sf ../../thirdparty/win-nsis "+TARDIR+"/thirdparty/win-nsis")
  218. oscmd("ln -sf ../../thirdparty/win-extras "+TARDIR+"/thirdparty/win-extras")
  219. oscmd("ln -sf ../../thirdparty/Pmw "+TARDIR+"/thirdparty/Pmw")
  220. oscmd("ln -sf ../../thirdparty/epydoc "+TARDIR+"/thirdparty/epydoc")
  221. oscmd("zip -rq "+TARDIR+".zip "+TARDIR+" -x '*/CVS/*'")
  222. oscmd("rm -rf "+TARDIR)
  223. oscmd("mkdir -p "+TARDIR)
  224. oscmd("mkdir -p "+TARDIR+"/thirdparty")
  225. oscmd("ln -sf ../dtool "+TARDIR+"/dtool")
  226. oscmd("ln -sf ../panda "+TARDIR+"/panda")
  227. oscmd("ln -sf ../direct "+TARDIR+"/direct")
  228. oscmd("ln -sf ../pandaapp "+TARDIR+"/pandaapp")
  229. oscmd("ln -sf ../pandatool "+TARDIR+"/pandatool")
  230. oscmd("ln -sf ../ppremake "+TARDIR+"/ppremake")
  231. oscmd("ln -sf ../SceneEditor "+TARDIR+"/SceneEditor")
  232. oscmd("ln -sf ../dmodels "+TARDIR+"/dmodels")
  233. oscmd("ln -sf ../models "+TARDIR+"/models")
  234. oscmd("ln -sf ../doc "+TARDIR+"/doc")
  235. oscmd("ln -sf ../makepanda "+TARDIR+"/makepanda")
  236. oscmd("zip -rq "+TARDIR+"-sourceforge.zip "+TARDIR+" -x '*/CVS/*'")
  237. oscmd("rm -rf "+TARDIR)
  238. oscmd("mkdir -p "+TARDIR)
  239. oscmd("ln -sf ../samples "+TARDIR+"/samples")
  240. oscmd("zip -rq "+TARDIR+"-samples.zip "+TARDIR+" -x '*/CVS/*'")
  241. oscmd("rm -rf "+TARDIR)
  242. oscmd("mkdir -p "+TARDIR)
  243. oscmd("mkdir -p "+TARDIR+"/thirdparty")
  244. oscmd("ln -sf ../../thirdparty/linux-libs-a "+TARDIR+"/thirdparty/linux-libs-a")
  245. oscmd("ln -sf ../../thirdparty/Pmw "+TARDIR+"/thirdparty/Pmw")
  246. oscmd("ln -sf ../../thirdparty/epydoc "+TARDIR+"/thirdparty/epydoc")
  247. oscmd("zip -rq "+TARDIR+"-tools-linux.zip "+TARDIR+" -x '*/CVS/*'")
  248. oscmd("rm -rf "+TARDIR)
  249. oscmd("mkdir -p "+TARDIR)
  250. oscmd("mkdir -p "+TARDIR+"/thirdparty")
  251. oscmd("ln -sf ../../thirdparty/win-libs-vc7 "+TARDIR+"/thirdparty/win-libs-vc7")
  252. oscmd("ln -sf ../../thirdparty/win-python "+TARDIR+"/thirdparty/win-python")
  253. oscmd("ln -sf ../../thirdparty/win-util "+TARDIR+"/thirdparty/win-util")
  254. oscmd("ln -sf ../../thirdparty/win-nsis "+TARDIR+"/thirdparty/win-nsis")
  255. oscmd("ln -sf ../../thirdparty/win-extras "+TARDIR+"/thirdparty/win-extras")
  256. oscmd("ln -sf ../../thirdparty/Pmw "+TARDIR+"/thirdparty/Pmw")
  257. oscmd("ln -sf ../../thirdparty/epydoc "+TARDIR+"/thirdparty/epydoc")
  258. oscmd("zip -rq "+TARDIR+"-tools-win32.zip "+TARDIR+" -x '*/CVS/*'")
  259. oscmd("rm -rf "+TARDIR)
  260. oscmd("mkdir -p "+TARDIR)
  261. oscmd("ln -sf ../thirdparty "+TARDIR+"/thirdparty")
  262. oscmd("zip -rq "+TARDIR+"-tools-all.zip "+TARDIR+" -x '*/CVS/*'")
  263. oscmd("rm -rf "+TARDIR)