from distutils.core import setup, Extension import os, sys, string # these settings will read setup information from the environment. # instead of this, the relevant paths can be set directly here: # fltk_dir = "" opengl_dir = "" # this will be overrridden by environment variables: fltk_dir = os.environ.get('FLTK_HOME', '') opengl_dir = os.environ.get('OPENGL_HOME', '') # do not edit beyond this point ########################################################################### # test to see whether we are using MinGW use_mingw = False if sys.platform == 'win32': for item in sys.argv[1:]: if item == '--compiler=mingw32': use_mingw = True ########################################################################### # # create proper paths fltk_lib_dir = os.path.join(fltk_dir, 'lib') fltk_includes = [] # whatever is platform dependent if sys.platform == 'win32' and not use_mingw: print "Building for MS Windows, using Visual C++" opengl_lib_dir = os.path.join(opengl_dir, 'lib') def_list = [('WIN32', '1')] lib_dir_list = [fltk_lib_dir, opengl_lib_dir] lib_list = ["kernel32", "user32", "gdi32", "winspool", "comdlg32", "Comctl32", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "wsock32", "fltk", "fltkimages", "fltkforms", "fltkgl", "opengl32", "jpeg", "png", "z"] elif sys.platform == 'win32' and use_mingw: print "Building for MS Windows, using MinGW" def_list = [('WIN32', '1')] lib_dir_list = [fltk_lib_dir] lib_list = ["fltk", "fltk_images", "fltk_forms", "fltk_gl", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "Comctl32", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "wsock32", "opengl32", "stdc++"] elif sys.platform == 'linux2': print "Building for Linux" def_list = [('UNIX', '1')] lib_dir_list = [fltk_lib_dir] lib_list = ["fltk", "fltk_images", "fltk_forms", "fltk_gl", "GL", "jpeg", "png", "z"] elif sys.platform in ['freebsd4','freebsd5','freebsd6','freebsd7']: print "Building for FreeBSD" def_list = [('UNIX', '1')] lib_dir_list = [fltk_lib_dir,'/usr/X11R6/lib','/usr/local/lib'] lib_list = ["fltk", "fltk_images", "fltk_forms", "fltk_gl", "GL", "jpeg", "png", "z"] elif sys.platform == 'darwin': print "Building for Mac OS X" def_list = [('UNIX', '1')] lib_dir_list = [fltk_lib_dir] lib_list = ["fltk", "fltk_images", "fltk_forms", "fltk_gl", "z"] link_args=['-framework','Carbon','-framework','OpenGL','-framework','AGL'] elif sys.platform == 'cygwin': print "Building for cygwin using cygwin utilities" def_list = [('WIN32', '1')] lib_dir_list = [fltk_lib_dir,'/usr/lib','/lib','/lib/w32api','/lib/mingw'] lib_list = ["msvcrt","kernel32", "user32", "gdi32", "winspool", "comdlg32", "Comctl32", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "wsock32", "opengl32","fltk", "fltk_images", "fltk_forms", "fltk_gl"] lib_list = ["fltk", "fltk_images", "fltk_forms", "fltk_gl", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "Comctl32", "comctl32","advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "wsock32","opengl32", "stdc++","supc++"] else: print "Platform not officially supported!" print "You can try to edit the platform specific settings in the file setup.py by creating an entry for the following platform: ", sys.platform sys.exit(0) ########################################################################### # test for fltk configuration (libraries) def fltk_libs(dir): "return library paths and additional libraries that were used to link FLTK" needed_libraries = [] needed_directories = [] #try: # fltk_dir = os.environ['FLTK_HOME'] #except: # return needed_libraries # take fltk-config on the PATH cmd = "sh fltk-config --ldflags" result = os.popen(cmd).readlines() if len(result) == 0: # failed, try fltk-config from FLTK_HOME cmd = "sh %s/fltk-config --ldflags"%dir result = os.popen(cmd).readlines() if len(result) > 0: lib_list = map(lambda x: x.strip(), result[0].split(' ')) for lib in lib_list: if lib[:2] == '-l': needed_libraries.append(lib[2:]) if lib[:2] == '-L': needed_directories.append(lib[2:]) return (needed_libraries, needed_directories) if not (sys.platform == 'win32' and not use_mingw): print "Checking FLTK configuration ... ", additional_libs, additional_dirs = fltk_libs(fltk_dir) for item in additional_libs: # already included? add = True for used_lib in lib_list: if item == used_lib: add = False break if add: lib_list.append(item) for item in additional_dirs: # already included add = True for used_dir in lib_dir_list: if item == used_lib: add = False break if add: lib_dir_list.append(item) print "done" ########################################################################### all_include_dirs = ['./src', './contrib','/usr/include'] if fltk_dir != "": all_include_dirs = [fltk_dir, './src', './contrib','/usr/include'] ########################################################################### # module declarations module1 = Extension('_fltk', define_macros=def_list, include_dirs = all_include_dirs, sources = ['./python/fltk_wrap.cpp', './contrib/ListSelect.cpp', './contrib/Fl_Table_Row.cxx', './contrib/Fl_Table.cxx'], library_dirs=lib_dir_list, libraries=lib_list) setup (name = 'pyFltk', version = '1.1b3', author = 'Andreas Held', author_email = 'a.held@computer.org', url = 'http://pyfltk.sourceforge.net', description = 'This is a wrapper for the FLTK', ext_modules = [module1], py_modules = ["fltk"])