setup: add support for non-windows platforms
authorGermán Póo-Caamaño <gpoo@calcifer.org>
Sun, 20 Jul 2008 09:33:06 -0400
changeset 1179 15415a973353
parent 1178 1625a49de779
child 1180 1c95c2301e5f
setup: add support for non-windows platforms
setup.py
--- a/setup.py	Sun Jul 20 05:54:01 2008 +0100
+++ b/setup.py	Sun Jul 20 09:33:06 2008 -0400
@@ -8,68 +8,84 @@
 import time
 import sys
 import os
+from distutils.core import setup
 
-# non-Win32 platforms doesn't require setup
-if os.name != 'nt':
-    sys.stderr.write("abort: %s is for Win32 platforms only" % sys.argv[0])
-    sys.exit(1)
+_description = 'Graphical interface for Mercurial VCS'
+_scripts = []
+_packages = []
+_data_files = []
+_extra = {}
+_options = {}
 
-# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
+if os.name == 'nt':
+    _description = 'Windows shell extension for Mercurial VCS'
+    _packages = ['tortoise', 'hggtk', 'hggtk.vis', 'hggtk.iniparse']
+    _data_files = [(root, [os.path.join(root, file_) for file_ in files])
+                           for root, dirs, files in os.walk('icons')]
+
+    # ModuleFinder can't handle runtime changes to __path__, but win32com uses them
 
-try:
-    # if this doesn't work, try import modulefinder
-    import py2exe.mf as modulefinder
-    import win32com
-    for p in win32com.__path__[1:]:
-        modulefinder.AddPackagePath("win32com", p)
-    for extra in ["win32com.shell"]: #,"win32com.mapi"
-        __import__(extra)
-        m = sys.modules[extra]
-        for p in m.__path__[1:]:
-            modulefinder.AddPackagePath(extra, p)
-except ImportError:
-    # no build path setup, no worries.
-    pass
+    try:
+        # if this doesn't work, try import modulefinder
+        import py2exe.mf as modulefinder
+        import win32com
+        for p in win32com.__path__[1:]:
+            modulefinder.AddPackagePath("win32com", p)
+        for extra in ["win32com.shell"]: #,"win32com.mapi"
+            __import__(extra)
+            m = sys.modules[extra]
+            for p in m.__path__[1:]:
+                modulefinder.AddPackagePath(extra, p)
+    except ImportError:
+        # no build path setup, no worries.
+        pass
 
-from distutils.core import setup
-import py2exe
+    import py2exe
 
-_data_files = []
-extra = {}
-hgextmods = []
+    hgextmods = []
 
-if 'py2exe' in sys.argv:
-    # FIXME: quick hack to include installed hg extensions in py2exe binary
-    import hgext
-    hgextdir = os.path.dirname(hgext.__file__)
-    hgextmods = set(["hgext." + os.path.splitext(f)[0]
-                  for f in os.listdir(hgextdir)])
-    _data_files = [(root, [os.path.join(root, file_) for file_ in files])
-                        for root, dirs, files in os.walk('icons')]
-    extra['windows'] = [
-            {"script":"hgproc.py",
-                        "icon_resources": [(1, "icons/tortoise/hg.ico")]},
-            {"script":"tracelog.py",
-                        "icon_resources": [(1, "icons/tortoise/python.ico")]}
-            ]
-    extra['com_server'] = ["tortoisehg"]
-    extra['console'] = ["contrib/hg"]
+    if 'py2exe' in sys.argv:
+        # FIXME: quick hack to include installed hg extensions in py2exe binary
+        import hgext
+        hgextdir = os.path.dirname(hgext.__file__)
+        hgextmods = set(["hgext." + os.path.splitext(f)[0]
+                      for f in os.listdir(hgextdir)])
+        _data_files = [(root, [os.path.join(root, file_) for file_ in files])
+                            for root, dirs, files in os.walk('icons')]
+        extra['windows'] = [
+                {"script":"hgproc.py",
+                 "icon_resources": [(1, "icons/tortoise/hg.ico")]},
+                {"script":"hggtk/tracelog.py",
+                 "icon_resources": [(1, "icons/tortoise/python.ico")]}
+                ]
+        extra['com_server'] = ["tortoisehg"]
+        extra['console'] = ["contrib/hg"]
 
-opts = {
-   "py2exe" : {
-       # Don't pull in all this MFC stuff used by the makepy UI.
-       "excludes" : "pywin,pywin.dialogs,pywin.dialogs.list",
+    _options = {
+       "py2exe" : {
+           # Don't pull in all this MFC stuff used by the makepy UI.
+           "excludes" : "pywin,pywin.dialogs,pywin.dialogs.list",
+           # add library files to support PyGtk-based dialogs/windows
+           # Note:
+           #    after py2exe build, copy GTK's etc and lib directories into
+           #    the dist directory created by py2exe.
+           #    also needed is the GTK's share/themes (as dist/share/themes), 
+           #    for dialogs to display in MS-Windows XP theme.
+           "includes" : "dbhash,pango,atk,pangocairo,cairo,gobject," + \
+                        ",".join(hgextmods),
+       }
+    }
+    _extra['options'] = _options
 
-       # add library files to support PyGtk-based dialogs/windows
-       # Note:
-       #    after py2exe build, copy GTK's etc and lib directories into
-       #    the dist directory created by py2exe.
-       #    also needed is the GTK's share/themes (as dist/share/themes), 
-       #    for dialogs to display in MS-Windows XP theme.
-       "includes" : "dbhash,pango,atk,pangocairo,cairo,gobject," + \
-                    ",".join(hgextmods),
-   }
-}
+else: # non-NT; assume Unixish
+
+    _scripts = ['contrib/hgtk']
+    _packages = ['hggtk', 'hggtk.vis', 'hggtk.iniparse']
+    _data_files = [(os.path.join('share/pixmaps/tortoisehg', root),
+        [os.path.join(root, file_) for file_ in files])
+        for root, dirs, files in os.walk('icons')]
+    _data_files += [('lib/nautilus/extensions-2.0/python', ['contrib/nautilus-thg.py'])]
+
 
 # specify version string, otherwise 'hg identify' will be used:
 version = ''
@@ -81,11 +97,11 @@
         version=tortoise.version.get_version(),
         author='TK Soh',
         author_email='teekaysoh@gmail.com',
-        url='http://tortoisehg.sourceforge.net',
-        description='Windows shell extension for Mercurial VCS',
+        url='http://tortoisehg.sourceforge.net/',
+        description=_description,
         license='GNU GPL2',
-        packages=['tortoise', 'hggtk', 'hggtk.vis', 'hggtk.iniparse'],
-        data_files = _data_files,
-        options=opts,
-        **extra
+        scripts=_scripts,
+        packages=_packages,
+        data_files=_data_files,
+        **_extra
     )