summaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rwxr-xr-xsetup.py323
1 files changed, 323 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..f7d90f2
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,323 @@
+#!/usr/bin/python
+###########################################################################
+# setup - description #
+# ------------------------------ #
+# begin : Thu Apr 21 2005 #
+# copyright : (C) 2005 by Simon Edwards #
+# email : [email protected] #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU Library General Public License as #
+# published by the Free Software Foundation; either version 2 of the #
+# License, or (at your option) any later version. #
+# #
+###########################################################################
+from distutils.cmd import Command
+from distutils import sysconfig
+from distutils.spawn import find_executable,spawn
+from distutils import dir_util
+import sys
+import os
+import glob
+sys.path.insert(0,"src") # We need this for the import statement below.
+
+import kdedistutils
+
+def main():
+ kdedistutils.setup(name="pykdeextensions",
+ version="0.4.0",
+ author="Simon Edwards",
+ author_email="[email protected]",
+ url="http://www.simonzone.com/software/pykdeextensions/",
+ min_kde_version = "3.0.0",
+ min_qt_version = "3.0.0",
+ license = "LGPL",
+ package_dir = {'': 'src'},
+ py_modules = ["kdedistutils","qtuicompiler","qtdesigner","kdedesigner"],
+ application_data = ["app_templates","AUTHORS","ChangeLog","COPYING","INSTALL","NEWS"],
+ docbooks = [ ('doc/en','en') ],
+ cmdclass = {
+ 'install' : InstallPyKDEExtensions,
+ 'build_libpythonize' : BuildLibpythonize,
+ 'install_libpythonize' : InstallLibpythonize
+ }
+ )
+
+###########################################################################
+class InstallPyKDEExtensions(kdedistutils.InstallKDE):
+ sub_commands = kdedistutils.InstallKDE.sub_commands[:]
+ sub_commands.append( ('install_libpythonize',None) )
+
+ user_options = kdedistutils.InstallKDE.user_options
+ user_options.append( ('install-clib=', None, "installation directory for shared libraries") )
+ user_options.append( ('install-cheaders=', None, "installation directory for C header files") )
+
+ def initialize_options(self):
+ self.install_clib = None
+ self.install_cheaders = None
+ kdedistutils.InstallKDE.initialize_options(self)
+
+ def finalize_options(self):
+ if self.install_clib is None:
+ if self.prefix is not None:
+ self.install_clib = os.path.join(self.prefix,'lib')
+ else:
+ self.announce("Detecting KDE library directory...")
+ self.install_clib = kdedistutils.ask_kde_config('--install lib --expandvars').strip()
+ self.announce(" ...KDE library directory is %s" % self.install_clib)
+
+ if self.install_cheaders is None:
+ if self.prefix is not None:
+ self.install_cheaders = os.path.join(self.prefix,'include')
+ else:
+ self.announce("Detecting KDE headers directory...")
+ self.install_cheaders = os.path.normpath(os.path.join(kdedistutils.ask_kde_config('--install lib --expandvars').strip(),"../include"))
+ self.announce(" ...KDE library headers is %s" % self.install_cheaders)
+
+ kdedistutils.InstallKDE.finalize_options(self)
+
+ if self.root is not None:
+ self.change_roots('clib','cheaders')
+
+###########################################################################
+class BuildLibpythonize(Command):
+ description = "Build libpythonize"
+
+ user_options = [
+ ('install-dir=', 'd',"Directory for the libpythonize shared library."),
+ ('no-libpythonize',None,"Don't build libpythonize"),
+ ('build-dir=','b', "build directory (where to install from)"),
+ ('python-dir=',None,'Directory containing the Python installation'),
+ ('python-inc-dir=',None,'Directory containing C Header files for Python'),
+ ('clib=',None,'gcc library and path'),
+ ]
+
+ def initialize_options(self):
+ self.build_dir = None
+ self.install_dir = None
+ self.no_libpythonize = 0
+ self.python_inc_dir = None
+ self.python_dir = None
+ self.clib = None
+
+ def finalize_options(self):
+ if self.no_libpythonize==0:
+ own_install_dir = self.install_dir is not None
+
+ self.set_undefined_options('install',\
+ ('build_base', 'build_dir'),
+ ('install_clib', 'install_dir') )
+
+ install = self.get_finalized_command('install')
+ self.install_prefix = install.prefix
+
+ # Python dir
+ if self.python_dir is None:
+ self.python_dir = os.path.split(sysconfig.get_config_var("LIBP"))[0]
+ self.announce("Using %s for the python directory" % self.python_dir)
+
+ # Python include dir.
+ if self.python_inc_dir is None:
+ # Find the Python include directory.
+ self.python_inc_dir = sysconfig.get_config_var("INCLUDEPY")
+ self.announce("Using %s for Python header files" % self.python_inc_dir)
+
+ # Find the C library (libgcc, libgcc_s or some other variation).
+ if self.clib is None:
+ canidatepaths = ["/usr/"+kdedistutils.get_libdir_name(), "/usr/local/"+kdedistutils.get_libdir_name() ]
+ self.clib = kdedistutils.FindFileInPaths("libgcc*.so",canidatepaths)
+ if self.clib!=None:
+ self.clib = glob.glob(os.path.join(self.clib,'libgcc*.so'))[0]
+ else:
+ self.clib = kdedistutils.FindFileInPaths("libgcc*.a",canidatepaths)
+ if self.clib!=None:
+ self.clib = glob.glob(os.path.join(self.clib,'libgcc*.a'))[0]
+ if self.clib is None:
+ raise SystemExit, "Failed to find a suitable libgcc library"
+ self.announce("Using %s for clib" % self.clib)
+
+ # Make a list of places to look for python .so modules
+ self.python_sub_dirs = sysconfig.get_config_var("LIBSUBDIRS").split()
+ base = sysconfig.get_config_var("LIBP")
+ self.python_sub_dirs = [ os.path.join(base,item) for item in self.python_sub_dirs ]
+ self.python_sub_dirs.append(base)
+
+ def get_command_name(self):
+ return 'build_libpythonize'
+
+ def run(self):
+ if self.no_libpythonize:
+ self.announce("Skipping libpythonize")
+ return
+
+ self.announce("Building libpythonize.")
+
+ cppfile = "src/pythonize.cpp"
+ # Compile the library.
+ cmdlist = ['libtool']
+
+ # Couldn't get it to pass without this ...
+ cmdlist.append("--mode=compile")
+ cmdlist.append("--tag=CXX")
+
+ # Find the compiler flags and options
+ # CXX is empty on some Systems, let's do it 'the hard way'.
+ # FIXME :: get CXX from make.conf for Gentoo.
+ if len(sysconfig.get_config_var("CXX").split()) >= 2:
+ cmdlist.extend(sysconfig.get_config_var("CXX").split())
+ else:
+ cmdlist.extend(['g++', '-pthread'])
+
+ # cc_flags
+ cmdlist.append("-c")
+ cmdlist.append("-g")
+
+ # The 4 is randomly chosen!
+ # FIXME :: get CFLAGS from make.conf for Gentoo.
+ if len(sysconfig.get_config_var("CFLAGS").split()) >=4:
+ cmdlist.extend(sysconfig.get_config_var("CFLAGS").split())
+ else:
+ # On Gentoo systems, CFLAGS are not in the environment.
+ raw = os.popen('emerge info 2> /dev/null|grep CFLAGS')
+ lines = raw.readlines()
+ if len(lines):
+ cflags = lines[0].split('"')[1].split()
+ print "Got CFLAGS from emerge info."
+ cmdlist.extend(cflags)
+ else:
+ # Still no CFLAGS found, use these ...
+ cmdlist.extend(['-fno-strict-aliasing', '-DNDEBUG', '-g', '-O3', '-Wall', '-Wstrict-prototypes'])
+
+ # includes
+ cmdlist.append("-I" + sysconfig.get_config_var("INCLUDEDIR"))
+ cmdlist.append("-I" + sysconfig.get_config_var("INCLUDEPY"))
+ cmdlist.append("-I" + self.python_inc_dir)
+ cmdlist.append("-Isrc")
+ # input
+ cmdlist.append(cppfile)
+ # output
+ outputfile = os.path.join(self.build_dir,'libpythonize.lo')
+ cmdlist.append("-o")
+ cmdlist.append(outputfile)
+ spawn(cmdlist) # Execute!!!
+ print
+
+ # Link the resulting object file to create a shared library.
+ cmdlist = ['libtool']
+ cmdlist.append("--mode=link")
+
+ # Grab the linker command name
+ cmdlist.append(sysconfig.get_config_var("LDSHARED").split()[0])
+ # link_flags
+ cmdlist.append("-module")
+ cmdlist.append("-export-dynamic")
+ # object
+ cmdlist.append(outputfile)
+ cmdlist.append("-rpath"); cmdlist.append(self.install_dir)
+ cmdlist.append("-o"); cmdlist.append(os.path.join(self.build_dir,'libpythonize.la'))
+ # Link libs
+ linklist = []
+ linklist.append("-lpython%i.%i" % (sys.version_info[0],sys.version_info[1]) )
+ linklist.extend(sysconfig.get_config_var("LIBS").split())
+
+ linklist.append("-lm")
+ linklist.append("-lstdc++")
+ linklist.append("-lc")
+ linklist.append(self.clib)
+
+ linklist.append("-R"); linklist.append(self.python_dir)
+
+ cmdlist.extend(linklist)
+ spawn(cmdlist) # Execute!!
+ print
+
+###########################################################################
+class InstallLibpythonize(Command):
+ description = "Install libpythonize"
+
+ user_options = [
+ ('install-dir=', 'd',"Directory for the libpythonize shared library."),
+ ('build-dir=','b', "build directory (where to install from)"),
+ ('cheader-dir=', 'h',"Directory for the pythonize.h C header file."),
+ ('install-cmd=', None, "Command to use to install the files"),
+ ('root=', None, "install everything relative to this alternate root directory"),
+ ('force', 'f', "force installation (overwrite existing files)"),
+ ('skip-build', None, "skip the build steps"),
+ ]
+
+ boolean_options = ['force', 'skip-build']
+
+ def initialize_options(self):
+ self.install_dir = None
+ self.build_dir = None
+ self.install_cmd = None
+ self.cheader_dir = None
+ self.outfiles = []
+ self.root = None
+ self.force = 0
+ self.warn_dir = 1
+ self.skip_build = None
+
+ def finalize_options(self):
+ own_install_dir = self.install_dir is not None
+ own_cheader_dir = self.cheader_dir is not None
+
+ self.set_undefined_options('install',
+ ('build_base','build_dir'),
+ ('install_clib', 'install_dir'),
+ ('install_cheaders', 'cheader_dir'),
+ ('install_cmd', 'install_cmd'),
+ ('root', 'root'),
+ ('force', 'force'),
+ ('skip_build', 'skip_build')
+ )
+
+ if own_install_dir and self.root is not None:
+ self.install_dir = change_root(self.root,self.install_dir)
+ if own_cheader_dir and self.root is not None:
+ self.cheader_dir = change_root(self.root,self.cheader_dir)
+
+ def get_command_name(self):
+ return 'install_libpythonize'
+
+ def run(self):
+ if not self.skip_build:
+ self.run_command('build_libpythonize')
+
+ self.announce("Installing libpythonize...")
+
+ self.outfiles.extend(self.mkpath(self.install_dir))
+
+ # Install the library.
+ cmdlist = ['libtool']
+ cmdlist.append("--mode=install")
+ cmdlist.append(self.install_cmd)
+ cmdlist.append("-c")
+ cmdlist.append(os.path.join(self.build_dir,"libpythonize.la"))
+ cmdlist.append(os.path.join(self.install_dir,"libpythonize.la"))
+ spawn(cmdlist) # Execute!!
+ print
+
+ # Work the names of the files that were installed.
+ self.outfiles = []
+ for file in glob.glob(os.path.join(self.build_dir,'.libs/libpythonize*')):
+ self.outfiles.append(os.path.join(self.install_dir,os.path.basename(file)))
+
+ # Create a directory for the C header file.
+ self.outfiles.extend(self.mkpath(self.cheader_dir))
+
+ # Install the header file.
+ (out, _) = self.copy_file("src/pythonize.h", os.path.join(self.cheader_dir,'pythonize.h'))
+ self.outfiles.append(out)
+
+ self.announce("Done installing libpythonize.")
+
+ def get_outputs(self):
+ return self.outfiles
+
+ def mkpath(self, name, mode=0777):
+ return dir_util.mkpath(name, mode, dry_run=self.dry_run)
+
+main()