gimick
13 years ago
2 changed files with 434 additions and 0 deletions
@ -0,0 +1,224 @@
|
||||
#!/usr/bin/env python |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
"""setup.py |
||||
|
||||
Py2exe script for fpdb. |
||||
""" |
||||
# Copyright 2009-2011, Ray E. Barker |
||||
# |
||||
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
|
||||
######################################################################## |
||||
|
||||
#TODO: |
||||
# think about an installer |
||||
|
||||
#HOW TO USE this script: |
||||
# |
||||
#- edit the fpdbver variable in this script (this value will be used to create the distribution folder name) |
||||
#- cd to the folder where this script is stored, usually ...packaging/windows |
||||
#- Run the script with python "py2exe_setup.py py2exe" |
||||
#- You will frequently get messages about missing .dll files.just assume other |
||||
# person will have them? we have copyright issues including some dll's |
||||
#- If it works, you'll have a new dir fpdb-version which should |
||||
# contain 2 dirs; gfx and pyfpdb and run_fpdb.bat |
||||
|
||||
# See walkthrough in packaging directory for versions used |
||||
# Very useful guide here : http://www.no-ack.org/2010/09/complete-guide-to-py2exe-for-pygtk.html |
||||
|
||||
# steffeN: Doesnt seem necessary to gettext-ify this, but feel free to if you disagree |
||||
# Gimick: restructure to allow script to run from packaging/windows directory, and not to write to source pyfpdb |
||||
|
||||
fpdbver = '0.22' |
||||
|
||||
import os |
||||
import sys |
||||
|
||||
# get out now if parameter not passed |
||||
try: |
||||
sys.argv[1] <> "" |
||||
except: |
||||
print "A parameter is required, quitting now" |
||||
quit() |
||||
|
||||
if sys.argv[1] <> "py2exe": |
||||
print "Parameter 1 is not valid, quitting now" |
||||
quit() |
||||
|
||||
from distutils.core import setup |
||||
import py2exe |
||||
import glob |
||||
import matplotlib |
||||
import shutil |
||||
import cdecimal |
||||
|
||||
def isSystemDLL(pathname): |
||||
#dwmapi appears to be vista-specific file, not XP |
||||
if os.path.basename(pathname).lower() in ("dwmapi.dll"): |
||||
return 0 |
||||
return origIsSystemDLL(pathname) |
||||
|
||||
def test_and_remove(top): |
||||
#print "Attempting to delete:", top |
||||
if os.path.exists(top): |
||||
if os.path.isdir(top): |
||||
remove_tree(top) |
||||
else: |
||||
print "Unexpected file '"+top+"' found. Exiting." |
||||
exit() |
||||
else: |
||||
"oops folder not found" |
||||
|
||||
def remove_tree(top): |
||||
# Delete everything reachable from the directory named in 'top', |
||||
# assuming there are no symbolic links. |
||||
# CAUTION: This is dangerous! For example, if top == '/', it |
||||
# could delete all your disk files. |
||||
# sc: Nicked this from somewhere, added the if statement to try |
||||
# make it a bit safer |
||||
if (top in ('build','dist') or top.startswith(distdir)) and os.path.basename(os.getcwd()) == 'windows': |
||||
print "removing directory '"+top+"' ..." |
||||
for root, dirs, files in os.walk(top, topdown=False): |
||||
for name in files: |
||||
os.remove(os.path.join(root, name)) |
||||
for name in dirs: |
||||
os.rmdir(os.path.join(root, name)) |
||||
os.rmdir(top) |
||||
|
||||
def copy_tree(source,destination): |
||||
source = source.replace('\\', '\\\\') |
||||
destination = destination.replace('\\', '\\\\') |
||||
print "*** Copying " + source + " to " + destination + " ***" |
||||
shutil.copytree( source, destination ) |
||||
|
||||
def copy_file(source,destination): |
||||
source = source.replace('\\', '\\\\') |
||||
destination = destination.replace('\\', '\\\\') |
||||
print "*** Copying " + source + " to " + destination + " ***" |
||||
shutil.copy( source, destination ) |
||||
|
||||
|
||||
distdir = r'fpdb-' + fpdbver |
||||
rootdir = r'../../' #cwd is normally /packaging/windows |
||||
pydir = rootdir+'pyfpdb/' |
||||
gfxdir = rootdir+'gfx/' |
||||
sys.path.append( pydir ) # allows fpdb modules to be found by options/includes below |
||||
|
||||
|
||||
print "\n" + r"Output will be created in "+distdir |
||||
|
||||
print "*** Cleaning working folders ***" |
||||
test_and_remove('dist') |
||||
test_and_remove('build') |
||||
test_and_remove(distdir) |
||||
|
||||
print "*** Building now in dist folder ***" |
||||
|
||||
origIsSystemDLL = py2exe.build_exe.isSystemDLL |
||||
py2exe.build_exe.isSystemDLL = isSystemDLL |
||||
|
||||
setup( |
||||
name = 'fpdb', |
||||
description = 'Free Poker DataBase', |
||||
version = fpdbver, |
||||
|
||||
windows = [ {'script': pydir+'fpdb.pyw', "icon_resources": [(1, gfxdir+"fpdb_large_icon.ico")]}, |
||||
{'script': pydir+'HUD_main.pyw', }, |
||||
{'script': pydir+'Configuration.py', } |
||||
], |
||||
|
||||
console = [ {'script': pydir+'Stove.py', } |
||||
], |
||||
|
||||
options = {'py2exe': { |
||||
'packages' : ['encodings', 'matplotlib'], |
||||
'includes' : ['gio', 'cairo', 'pango', 'pangocairo', 'atk', 'gobject' |
||||
,'matplotlib.numerix.random_array' |
||||
,'AbsoluteToFpdb', 'BetfairToFpdb' |
||||
,'CarbonToFpdb', 'EverleafToFpdb' |
||||
,'FulltiltToFpdb', 'iPokerToFpdb' |
||||
,'OnGameToFpdb', 'PartyPokerToFpdb' |
||||
,'PkrToFpdb', 'PokerStarsToFpdb' |
||||
,'Win2dayToFpdb', 'WinamaxToFpdb' |
||||
], |
||||
'excludes' : ['_tkagg', '_agg2', 'cocoaagg', 'fltkagg'], |
||||
'dll_excludes': ['libglade-2.0-0.dll', 'libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll' |
||||
, 'msvcr90.dll', 'MSVCP90.dll', 'MSVCR90.dll','msvcr90.dll'], # these are vis c / c++ runtimes, and must not be redistributed |
||||
} |
||||
}, |
||||
|
||||
# files in 2nd value in tuple are moved to dir named in 1st value |
||||
# this code will not walk a tree |
||||
# Note: cwd for 1st value is packaging/windows/dist (this is confusing BTW) |
||||
# Note: only include files here which are to be put into the package pyfpdb folder or subfolders |
||||
|
||||
data_files = [('', glob.glob(rootdir+'*.txt')) |
||||
,('', [pydir+'HUD_config.xml.example',pydir+'Cards01.png', pydir+'logging.conf']) |
||||
] + matplotlib.get_py2exe_datafiles() |
||||
) |
||||
|
||||
print "*** py2exe build phase complete ***" |
||||
|
||||
# copy zone info and fpdb translation folders |
||||
copy_tree (r'c:\python27\Lib\site-packages\pytz\zoneinfo', os.path.join(r'dist', 'zoneinfo')) |
||||
copy_tree (pydir+r'locale', os.path.join(r'dist', 'locale')) |
||||
|
||||
# create distribution folder and populate with gfx + bat |
||||
copy_tree (gfxdir, os.path.join(distdir, 'gfx')) |
||||
copy_file (rootdir+'run_fpdb.bat', distdir) |
||||
|
||||
print "*** Renaming dist folder as pyfpdb folder ***" |
||||
dest = os.path.join(distdir, 'pyfpdb') |
||||
os.rename( 'dist', dest ) |
||||
|
||||
print "*** copying GTK runtime ***" |
||||
gtk_dir = "" |
||||
while not os.path.exists(gtk_dir): |
||||
print "Enter directory name for GTK (e.g. c:/gtk) : ", # the comma means no newline |
||||
gtk_dir = sys.stdin.readline().rstrip() |
||||
|
||||
print "*** copying GTK runtime ***" |
||||
dest = os.path.join(distdir, 'pyfpdb') |
||||
copy_file(os.path.join(gtk_dir, 'bin', 'libgdk-win32-2.0-0.dll'), dest ) |
||||
copy_file(os.path.join(gtk_dir, 'bin', 'libgobject-2.0-0.dll'), dest) |
||||
copy_tree(os.path.join(gtk_dir, 'etc'), os.path.join(dest, 'etc')) |
||||
copy_tree(os.path.join(gtk_dir, 'lib'), os.path.join(dest, 'lib')) |
||||
copy_tree(os.path.join(gtk_dir, 'share'), os.path.join(dest, 'share')) |
||||
|
||||
print "*** Activating MS-Windows GTK theme ***" |
||||
gtkrc = open(os.path.join(distdir, 'pyfpdb', 'etc', 'gtk-2.0', 'gtkrc'), 'w') |
||||
print >>gtkrc, 'gtk-theme-name = "MS-Windows"' |
||||
gtkrc.close() |
||||
|
||||
print "*** deleting temporary build folder ***" |
||||
test_and_remove('build') |
||||
|
||||
print "*** deleting folders to shrink package size ***" |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'lib', 'glib-2.0')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'lib', 'gtk-2.0','include')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'lib', 'pkgconfig')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'aclocal')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'doc')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'glib-2.0')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'gtk-2.0')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'gtk-doc')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'locale')) |
||||
test_and_remove(os.path.join(distdir, 'pyfpdb', 'share', 'man')) |
||||
|
||||
print "***++++++++++++++++++++++++++++++++++++++++++++++" |
||||
print "All done!" |
||||
print "The distribution folder "+distdir+" is in the pyfpdb dir" |
||||
print "***++++++++++++++++++++++++++++++++++++++++++++++" |
@ -0,0 +1,210 @@
|
||||
pypokereval build for windows stepbystep guide |
||||
---------------------------------------------- |
||||
|
||||
Created by Gimick on 3rd December 2010 |
||||
Updated for py27 by Gimick 27th Feb 2011 |
||||
|
||||
This walkthrough is derived with the assistance of EricBlade and the build notes |
||||
supplied by Loic Dachary <loic@dachary.org> http://dachary.org/ |
||||
|
||||
Content is available under the the GNU Affero General Public License version 3 |
||||
|
||||
|
||||
0. Build environ |
||||
---------------- |
||||
|
||||
We are building against the 2008 runtime because Python 2.7 |
||||
has the same dependency (msvcr90.dll version 9.0.21022.8) |
||||
|
||||
Using winXPhome 32 bit |
||||
|
||||
1 Visual studio |
||||
--------------- |
||||
|
||||
1.1/ Get the ISO CD from here ... http://www.microsoft.com/express/Downloads/#2008-All |
||||
|
||||
1.2/ Run and install Visual C++ only, don't bother with the additional packages offered |
||||
|
||||
This package will run 30 days before registration is needed |
||||
|
||||
2. Python runtime |
||||
----------------- |
||||
|
||||
2.1/ Install python runtime from here ... |
||||
|
||||
Python 2.7 ... http://python.org/ftp/python/2.7/python-2.7.msi |
||||
|
||||
3. Source install |
||||
----------------- |
||||
|
||||
3.1/ grab sources from here |
||||
|
||||
pypoker-eval v138 ... http://download.gna.org/pokersource/sources/pypoker-eval-138.0.tar.gz |
||||
poker-eval v138 ... http://download.gna.org/pokersource/sources/poker-eval-138.0.tar.gz |
||||
|
||||
3.2/ unpack and place the pypoker-eval-138 directory in c:\ |
||||
3.2.1/ rename to pypoker-eval |
||||
|
||||
3.3/ unpack and place the poker-eval-138 directory in c:\ |
||||
3.3.1/ rename to poker-eval |
||||
|
||||
Important: the build will fail with bizarre missing header files if the project is placed |
||||
in a directory containing a space character - you have been warned! |
||||
|
||||
4. Update source file |
||||
--------------------- |
||||
|
||||
4.1/ dos> write c:/pypoker-eval/pypokereval.c |
||||
|
||||
change this: |
||||
|
||||
#define VERSION_NAME(W) W##2_4 |
||||
#define PYTHON_VERSION "2_4" |
||||
|
||||
to be this: |
||||
|
||||
#define VERSION_NAME(W) W##2_7 |
||||
#define PYTHON_VERSION "2_7" |
||||
|
||||
- - - - - - |
||||
|
||||
Move this block of code: |
||||
|
||||
#ifdef _DEBUG // for Windows python23_d.lib is not in distribution... ugly but works |
||||
#undef _DEBUG |
||||
#include <Python.h> |
||||
#define _DEBUG |
||||
#else |
||||
#include <Python.h> |
||||
#endif |
||||
|
||||
To be after this line: |
||||
|
||||
#include "enumdefs.h" |
||||
|
||||
4.2/ save and exit |
||||
|
||||
- - - - - |
||||
|
||||
4.3/ dos> write c:/pypoker-eval/pokereval.py |
||||
|
||||
Comment-out this line: |
||||
|
||||
_pokereval = __import__('_pokereval_' + sys.version[0] + '_' + sys.version[2]) |
||||
|
||||
Insert this one in its' place: |
||||
|
||||
import _pokereval_2_7 as _pokereval |
||||
|
||||
|
||||
4.4/ save and exit |
||||
|
||||
|
||||
5. Build pre-preparation |
||||
------------------------ |
||||
|
||||
(Here we are converting the two project definition files to 2008) |
||||
|
||||
5.1 navigate to directory c:/poker-eval |
||||
5.1.1 double click poker-eval.vcproj |
||||
5.1.2 Visual studio will launch and make a conversion - accept all defaults |
||||
5.1.3 exit and save |
||||
|
||||
5.2 navigate to directory c:/pypoker-eval |
||||
5.2.1 double click pypoker-eval.vcproj |
||||
5.2.2 Visual studio will launch and make a conversion - accept all defaults |
||||
5.2.3 exit |
||||
|
||||
6. build preparation |
||||
-------------------- |
||||
|
||||
6.2 navigate to directory c:/pypoker-eval |
||||
6.2.1 double click pypoker-eval.vcproj - visual studio should launch |
||||
|
||||
6.2.3 Select Build...configuration manager... |
||||
Select "active solution configuration" to "Release" |
||||
(The configuration for both projects will change to "Release") |
||||
|
||||
6.2.3 Close the configuration manager |
||||
|
||||
6.2.4 In the solution explorer window, hilight pythonpoker-eval / right mouse / properties... |
||||
|
||||
6.2.5 In the pythonpoker-eval properties dialog, |
||||
|
||||
change references to "python24" to "python27" in the following: |
||||
|
||||
= C/C++/Additional Include Directories/ |
||||
= linker/general/Additional library directories |
||||
= linker/input/Additional Dependencies |
||||
|
||||
Change the following |
||||
|
||||
= linker/generate debug info - set to No |
||||
|
||||
6.2.6 Apply all changes to the properties dialog and close |
||||
|
||||
6.3 Exit from visual studio |
||||
|
||||
7. Build poker eval |
||||
------------------- |
||||
|
||||
7.1 navigate to directory c:/poker-eval |
||||
7.1.1 double click poker-eval.vcproj |
||||
7.1.2 Visual studio will launch |
||||
|
||||
7.2 In the solution explorer window, hilight poker-eval / right mouse / build |
||||
|
||||
7.3 There should be no errors |
||||
|
||||
7.4 Exit from visual studio |
||||
|
||||
|
||||
8. Build pypoker eval |
||||
--------------------- |
||||
|
||||
8.1 navigate to directory c:/pypoker-eval |
||||
8.1.1 double click pypoker-eval.vcproj |
||||
8.1.2 Visual studio will launch |
||||
|
||||
8.2 In the solution explorer window, hilight pythonpoker-eval / right mouse / build |
||||
|
||||
8.3 There should be no errors (but a few warnings) |
||||
|
||||
8.4 Exit from visual studio |
||||
|
||||
9. Wrap-up |
||||
---------- |
||||
|
||||
9.1 Navigate to c:/pypoker-eval/release |
||||
9.2 the output file is pypokereval.dll |
||||
9.3 rename this file to _pokereval_2_7.pyd |
||||
|
||||
9.4 create a zip file containing : |
||||
|
||||
_pokereval_2_7.pyd from releases |
||||
test.py from pypoker-eval-138.0 |
||||
pokereval.py from pypoker-eval-138.0 |
||||
poker-eval.vcproj from c:\poker-eval |
||||
pypoker-eval.vcproj from c:\pypoker-eval |
||||
pypokereval.c from c:\pypoker-eval |
||||
|
||||
Remember to include the version (138), python 27 and win32 in the package filename |
||||
|
||||
10. Testing |
||||
----------- |
||||
|
||||
Python 2.7 must be installed |
||||
|
||||
10.1 Extract the zip file created in 9.4 into a new directory |
||||
10.2 Change directory to the directory in 10.1 |
||||
10.3 execute dos> c:\Python27\python.exe test.py |
||||
10.4 hand-output should scroll down the screen |
||||
10.5 start the python interpreter |
||||
10.6 >>> import pokereval |
||||
10.7 No errors should be seen |
||||
|
||||
11. Packaging |
||||
------------- |
||||
|
||||
Please follow pypokereval-win32-packaging-walkthrough.txt in the same directory as this walkthrough. |
||||
|
Loading…
Reference in new issue