summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--pygtk_postinstall.py138
-rwxr-xr-xsetup.py64
3 files changed, 170 insertions, 45 deletions
diff --git a/ChangeLog b/ChangeLog
index 4467e47c..0c67871f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2006-09-21 Cedric Gustin <cedric.gustin@gmail.com>
+
+ * pygtk_postinstall.py: Adapt the codegendir variable to the user
+ platform. Copy style.css from pygobject docs to pygtk docs. Run
+ fixxref on installed html files. Add functions to install
+ shortcuts in the Start menu to the reference manual (currently
+ disabled: see bug #353849).
+ * setup.py: Changed the way the VERSION macro is defined on
+ win32. Added 2.10 defs files for gdk and gtk when GTK+ 2.10 is
+ detected. Added gtk.keysyms, gtk._lazyutils, dsextras_gen and
+ codegen to the list of installed packages. Also install the html
+ reference documentation and run fixxref on the html files.
+
2006-09-16 Gustavo J. A. M. Carneiro <gjc@gnome.org>
* gtk/pygtkcellrenderer.c (pygtk_generic_cell_renderer_activate):
diff --git a/pygtk_postinstall.py b/pygtk_postinstall.py
index b6e9d7ab..627bc12b 100644
--- a/pygtk_postinstall.py
+++ b/pygtk_postinstall.py
@@ -1,30 +1,108 @@
-
-"""pygtk is now installed on your machine.
-
-Local configuration files were successfully updated."""
-
-import os, re, sys
-
-prefix_pattern=re.compile("^prefix=.*")
-exec_pattern=re.compile("^exec\s.*")
-
-def replace_prefix(s):
- if prefix_pattern.match(s):
- s='prefix='+sys.prefix.replace("\\","\\\\")+'\n'
- if exec_pattern.match(s):
- s=('exec '+sys.prefix+'\\python.exe '+
- '$codegendir/codegen.py \"$@\"\n').replace("\\","\\\\")
- return s
-
-
-if len(sys.argv) == 2 and sys.argv[1] == "-install":
-
- filenames=['lib/pkgconfig/pygtk-2.0.pc','bin/pygtk-codegen-2.0']
- for filename in filenames:
- pkgconfig_file = os.path.normpath(
- os.path.join(sys.prefix,filename))
-
- lines=open(pkgconfig_file).readlines()
- open(pkgconfig_file, 'w').writelines(map(replace_prefix,lines))
-
- print __doc__
+
+"""pygtk is now installed on your machine.
+
+Local configuration files were successfully updated."""
+
+import os, os.path, re, sys
+import distutils.sysconfig
+import distutils.file_util
+import distutils.errors
+
+PYGOBJECT_XSL_DIR = os.path.join('share', 'pygobject','xsl')
+PYGOBJECT_HTML_DIR = os.path.join('share', 'gtk-doc', 'html', 'pygobject')
+HTML_DIR = os.path.join('share', 'gtk-doc', 'html', 'pygtk')
+
+prefix_pattern=re.compile("^prefix=.*")
+exec_pattern=re.compile("^exec\s.*")
+codegendir_pattern=re.compile("^codegendir=.*")
+
+def replace_prefix(s):
+ if prefix_pattern.match(s):
+ s='prefix='+sys.prefix.replace("\\","/")+'\n'
+ if exec_pattern.match(s):
+ s=('exec '+sys.prefix+'\\python.exe '+
+ '$codegendir/codegen.py \"$@\"\n').replace("\\","/")
+ if codegendir_pattern.match(s):
+ s=('codegendir='
+ +distutils.sysconfig.get_python_lib().replace("\\","/")+
+ '/gtk-2.0/codegen' + '\n')
+ return s
+
+def copy_pygobject_css():
+ # Copy style.css from pygobject docs to pygtk docs
+ try:
+ distutils.file_util.copy_file(
+ os.path.normpath(os.path.join(sys.prefix, PYGOBJECT_HTML_DIR,
+ 'style.css')),
+ os.path.normpath(os.path.join(sys.prefix,HTML_DIR)))
+ except distutils.errors.DistutilsFileError:
+ # probably pygobject has not been installed yet
+ pass
+
+
+
+def html_fixxref():
+ sys.path.insert(0, os.path.normpath(os.path.join(sys.prefix,
+ PYGOBJECT_XSL_DIR)))
+ try:
+ import fixxref
+ fixxref.scan_index_dir(fixxref.DOCDIR)
+ fixxref.fix_xrefs(os.path.normpath(os.path.join(sys.prefix,
+ HTML_DIR)))
+ except ImportError, e:
+ pass
+
+# TODO : Check that shortcuts are created system-wide when the user
+# has admin rights (hint: see pywin32 postinstall)
+def create_shortcuts():
+ progs_folder= get_special_folder_path("CSIDL_COMMON_PROGRAMS")
+ site_packages_dir = os.path.join(sys.prefix , 'lib','site-packages')
+
+ pygtk_shortcuts = os.path.join(progs_folder, 'PyGTK')
+ if not os.path.isdir(pygtk_shortcuts):
+ os.mkdir(pygtk_shortcuts)
+
+ pygtk_doc_link=os.path.join(pygtk_shortcuts,
+ 'PyGTK Documentation.lnk')
+ if os.path.isfile(pygtk_doc_link):
+ os.remove(pygtk_doc_link)
+
+ create_shortcut(os.path.join(sys.prefix,'share','gtk-doc','html',
+ 'pygtk','index.html'),
+ 'PyGTK Documentation', pygtk_doc_link)
+
+ homepage_link = os.path.join(pygtk_shortcuts,
+ "PyGTK Home.lnk")
+ if os.path.isfile(homepage_link):
+ os.remove(homepage_link)
+ create_shortcut("http://www.pygtk.org",'PyGTK Homepage', homepage_link)
+
+def remove_shortcuts():
+ pygtk_shortcuts = os.path.join(
+ get_special_folder_path('CSIDL_COMMON_PROGRAMS'), 'PyGTK')
+ os.remove(os.path.join(pygtk_shortcuts,'PyGTK Documentation.lnk'))
+ os.remove(os.path.join(pygtk_shortcuts,'PyGTK Home.lnk'))
+ try:
+ os.rmdir(pygtk_shortcuts)
+ except OSError, e:
+ # Directory is not empty, so leave it like that !
+ pass
+
+if len(sys.argv) == 2:
+ if sys.argv[1] == "-install":
+ filenames=['lib/pkgconfig/pygtk-2.0.pc','bin/pygtk-codegen-2.0']
+ for filename in filenames:
+ pkgconfig_file = os.path.normpath(
+ os.path.join(sys.prefix,filename))
+
+ lines=open(pkgconfig_file).readlines()
+ open(pkgconfig_file, 'w').writelines(map(replace_prefix,lines))
+ copy_pygobject_css()
+ html_fixxref()
+ # TODO: Add an installer option for shortcut creation
+ # create_shortcuts()
+ print __doc__
+ elif sys.argv[1] == "-remove":
+ # remove_shortcuts()
+ os.remove(os.path.normpath(
+ os.path.join(sys.prefix,HTML_DIR,'style.css')))
diff --git a/setup.py b/setup.py
index 843cf6fc..219f3e3e 100755
--- a/setup.py
+++ b/setup.py
@@ -16,13 +16,16 @@ official homepage, http://www.daa.com.au/~james/pygtk/"""
from distutils.command.build import build
from distutils.core import setup
+import glob
import os
import sys
-from dsextras import get_m4_define, getoutput, have_pkgconfig, list_files, \
+from dsextras import get_m4_define, getoutput, have_pkgconfig, \
+ pkgc_version_check, \
GLOBAL_INC, GLOBAL_MACROS, InstallLib, InstallData, BuildExt, \
PkgConfigExtension, Template, TemplateExtension
+
if '--yes-i-know-its-not-supported' in sys.argv:
sys.argv.remove('--yes-i-know-its-not-supported')
else:
@@ -38,10 +41,10 @@ else:
if not input.startswith('y'):
raise SystemExit
-if sys.version_info[:3] < (2, 3, 5):
- raise SystemExit, \
- "Python 2.3.5 or higher is required, %d.%d.%d found" % sys.version_info[:3]
-
+ if sys.version_info[:3] < (2, 3, 5):
+ raise SystemExit, \
+ "Python 2.3.5 or higher is required, %d.%d.%d found" % sys.version_info[:3]
+
MAJOR_VERSION = int(get_m4_define('pygtk_major_version'))
MINOR_VERSION = int(get_m4_define('pygtk_minor_version'))
MICRO_VERSION = int(get_m4_define('pygtk_micro_version'))
@@ -64,7 +67,7 @@ GLOBAL_MACROS += [('PYGTK_MAJOR_VERSION', MAJOR_VERSION),
('PYGTK_MICRO_VERSION', MICRO_VERSION)]
if sys.platform == 'win32':
- GLOBAL_MACROS.append(('VERSION', '\\\"%s\\\"' % VERSION))
+ GLOBAL_MACROS.append(('VERSION', '"""%s"""' % VERSION))
GLOBAL_MACROS.append(('PLATFORM_WIN32',1))
GLOBAL_MACROS.append(('HAVE_BIND_TEXTDOMAIN_CODESET',1))
else:
@@ -73,6 +76,7 @@ else:
DEFS_DIR = os.path.join('share', 'pygtk', PYGTK_SUFFIX, 'defs')
CODEGEN_DIR = os.path.join('share', 'pygtk', PYGTK_SUFFIX, 'codegen')
INCLUDE_DIR = os.path.join('include', 'pygtk-%s' % PYGTK_SUFFIX)
+HTML_DIR = os.path.join('share', 'gtk-doc', 'html', 'pygtk')
class PyGtkInstallLib(InstallLib):
def run(self):
@@ -143,10 +147,14 @@ pangocairo = TemplateExtension(name='pangocairo',
# Gdk (template only)
gdk_template = Template('gtk/gdk.override', 'gtk/gdk.c',
- defs='gtk/gdk.defs', prefix='pygdk',
+ defs=('gtk/gdk.defs',
+ ['gtk/gdk-2.10.defs','gtk/gdk-base.defs']),
+ prefix='pygdk',
register=['atk-types.defs',
'pango-types.defs',
- 'gtk/gdk-types.defs'])
+ ('gtk/gdk-types.defs',
+ ['gtk/gdk-base-types.defs'])]
+ )
# Gtk+
if pangocairo.can_build():
gtk_pkc_name=('gtk+-2.0','pycairo')
@@ -155,6 +163,24 @@ else:
gtk_pkc_name='gtk+-2.0'
gtk_pkc_version=GTK_REQUIRED
+if pkgc_version_check('gtk+-2.0', '2.10.0'):
+ gtk_pkc_defs=('gtk/gtk.defs',['gtk/gtk-2.10.defs','gtk/gtk-base.defs'])
+ gtk_pkc_register=['pango-types.defs',
+ ('gtk/gdk-types.defs',['gtk/gdk-base-types.defs']),
+ ('gtk/gtk-types.defs',['gtk/gtk-base-types.defs',
+ 'gtk/gtk-2.10-types.defs'])]
+ libglade_pkc_register=[('gtk/gtk-types.defs',
+ ['gtk/gtk-base-types.defs',
+ 'gtk/gtk-2.10-types.defs']),
+ 'gtk/libglade.defs']
+else:
+ gtk_pkc_defs=('gtk/gtk.defs',['gtk/gtk-base.defs'])
+ gtk_pkc_register=['pango-types.defs',
+ ('gtk/gdk-types.defs',['gtk/gdk-base-types.defs']),
+ ('gtk/gtk-types.defs',['gtk/gtk-base-types.defs'])]
+ libglade_pkc_register=[('gtk/gtk-types.defs',['gtk/gtk-base-types.defs']),
+ 'gtk/libglade.defs']
+
gtk = TemplateExtension(name='gtk', pkc_name=gtk_pkc_name,
pkc_version=gtk_pkc_version,
output='gtk._gtk',
@@ -165,11 +191,10 @@ gtk = TemplateExtension(name='gtk', pkc_name=gtk_pkc_name,
'gtk/pygtkcellrenderer.c',
'gtk/gdk.c',
'gtk/gtk.c'],
- register=['pango-types.defs',
- 'gtk/gdk-types.defs',
- 'gtk/gtk-types.defs'],
+ register=gtk_pkc_register,
override='gtk/gtk.override',
- defs='gtk/gtk.defs')
+ defs=gtk_pkc_defs
+ )
gtk.templates.append(gdk_template)
# Libglade
@@ -179,13 +204,13 @@ libglade = TemplateExtension(name='libglade', pkc_name='libglade-2.0',
defs='gtk/libglade.defs',
sources=['gtk/libglademodule.c',
'gtk/libglade.c'],
- register=['gtk/gtk-types.defs',
- 'gtk/libglade.defs'],
+ register=libglade_pkc_register,
override='gtk/libglade.override')
data_files = []
ext_modules = []
py_modules = []
+packages = ['codegen']
if not have_pkgconfig():
print "Error, could not find pkg-config"
@@ -215,9 +240,17 @@ if gtk.can_build():
ext_modules.append(gtk)
data_files.append((os.path.join(INCLUDE_DIR, 'pygtk'), ('gtk/pygtk.h',)))
data_files.append((DEFS_DIR, ('gtk/gdk.defs', 'gtk/gdk-types.defs',
+ 'gtk/gdk-base.defs',
+ 'gtk/gdk-base-types.defs',
'gtk/gtk.defs', 'gtk/gtk-types.defs',
+ 'gtk/gtk-2.10.defs',
+ 'gtk/gtk-2.10-types.defs',
+ 'gtk/gtk-base.defs',
+ 'gtk/gtk-base-types.defs',
'gtk/gtk-extrafuncs.defs')))
- py_modules += ['gtk.compat', 'gtk.keysyms']
+ data_files.append((HTML_DIR, glob.glob('docs/html/*.html')))
+ py_modules += ['gtk.compat', 'gtk.deprecation', 'gtk.keysyms',
+ 'gtk._lazyutils']
if libglade.can_build():
ext_modules.append(libglade)
@@ -272,6 +305,7 @@ setup(name="pygtk",
description = doclines[0],
long_description = "\n".join(doclines[2:]),
py_modules=py_modules,
+ packages=packages,
ext_modules=ext_modules,
data_files=data_files,
scripts = ["pygtk_postinstall.py"],