From 266fb5c31a3a4a9ac69b04778c4c84b2072e994f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= Date: Sun, 6 Aug 2017 17:59:18 +0200 Subject: [PATCH] Haiku patches --- Setup.in | 6 +- config.py | 4 + config_haiku.py | 221 ++++++++++++++++++++++++++++++++++++++++++++ pygame.egg-info/SOURCES.txt | 6 +- setup.py | 18 +--- src/pgcompat.h | 4 +- src/transform.c | 2 +- 7 files changed, 232 insertions(+), 29 deletions(-) create mode 100644 config_haiku.py diff --git a/Setup.in b/Setup.in index 38bb83e..3db8346 100644 --- a/Setup.in +++ b/Setup.in @@ -29,8 +29,8 @@ imageext src/imageext.c $(SDL) $(IMAGE) $(PNG) $(JPEG) $(DEBUG) font src/font.c $(SDL) $(FONT) $(DEBUG) mixer src/mixer.c $(SDL) $(MIXER) $(DEBUG) mixer_music src/music.c $(SDL) $(MIXER) $(DEBUG) -scrap src/scrap.c $(SDL) $(SCRAP) $(DEBUG) -pypm src/pypm.c $(SDL) $(PORTMIDI) $(PORTTIME) $(DEBUG) +#scrap src/scrap.c $(SDL) $(SCRAP) $(DEBUG) +#pypm src/pypm.c $(SDL) $(PORTMIDI) $(PORTTIME) $(DEBUG) GFX = src/SDL_gfx/SDL_gfxPrimitives.c #GFX = src/SDL_gfx/SDL_gfxBlitFunc.c src/SDL_gfx/SDL_gfxPrimitives.c @@ -61,7 +61,7 @@ joystick src/joystick.c $(SDL) $(DEBUG) draw src/draw.c $(SDL) $(DEBUG) image src/image.c $(SDL) $(DEBUG) overlay src/overlay.c $(SDL) $(DEBUG) -transform src/transform.c src/rotozoom.c src/scale2x.c src/scale_mmx.c $(SDL) $(DEBUG) -D_NO_MMX_FOR_X86_64 +transform src/transform.c src/rotozoom.c src/scale2x.c $(SDL) $(DEBUG) -D_NO_MMX_FOR_X86_64 mask src/mask.c src/bitmask.c $(SDL) $(DEBUG) bufferproxy src/bufferproxy.c $(SDL) $(DEBUG) pixelarray src/pixelarray.c $(SDL) $(DEBUG) diff --git a/config.py b/config.py index 8418946..8ea4de9 100644 --- a/config.py +++ b/config.py @@ -142,12 +142,16 @@ def main(): elif sys.platform == 'win32': print_('Using WINDOWS mingw/msys configuration...\n') import config_msys as CFG + elif sys.platform == 'haiku1' or sys.platform == 'haiku1_x86': + print_('Using Haiku configuration...\n') + import config_haiku as CFG elif sys.platform == 'darwin': print_('Using Darwin configuration...\n') import config_darwin as CFG additional_platform_setup = open("Setup_Darwin.in", "r").readlines() else: print_('Using UNIX configuration...\n') + print_(sys.platform) import config_unix as CFG additional_platform_setup = open("Setup_Unix.in", "r").readlines() diff --git a/config_haiku.py b/config_haiku.py new file mode 100644 index 0000000..8c4dd8e --- /dev/null +++ b/config_haiku.py @@ -0,0 +1,221 @@ +"""Config on Haiku""" + +import os, sys +from glob import glob +from distutils.sysconfig import get_python_inc + +# Python 2.x/3.x compatibility +try: + raw_input +except NameError: + raw_input = input + +configcommand = os.environ.get('SDL_CONFIG', 'sdl-config',) +configcommand = configcommand + ' --version --cflags --libs' +localbase = os.environ.get('LOCALBASE', '') + +#these get prefixes with '/usr' and '/usr/local' or the $LOCALBASE +origincdirs = ['/develop/headers', '/develop/headers/SDL', '/develop/headers/x86/SDL'] +origlibdirs = ['/develop/lib','/develop/lib/x86'] +if 'ORIGLIBDIRS' in os.environ and os.environ['ORIGLIBDIRS'] != "": + origlibdirs = os.environ['ORIGLIBDIRS'].split(":") + + +def confirm(message): + "ask a yes/no question, return result" + if not sys.stdout.isatty(): + return False + reply = raw_input('\n' + message + ' [Y/n]:') + if reply and (reply[0].lower()) == 'n': + return False + return True + +class DependencyProg: + def __init__(self, name, envname, exename, minver, defaultlibs, version_flag="--version"): + self.name = name + command = os.environ.get(envname, exename) + self.lib_dir = '' + self.inc_dir = '' + self.libs = [] + self.cflags = '' + try: + # freetype-config for freetype2 version 2.3.7 on Debian lenny + # does not recognize multiple command line options. So execute + # 'command' separately for each option. + config = (os.popen(command + ' ' + version_flag).readlines() + + os.popen(command + ' --cflags').readlines() + + os.popen(command + ' --libs').readlines()) + flags = ' '.join(config[1:]).split() + + # remove this GNU_SOURCE if there... since python has it already, + # it causes a warning. + if '-D_GNU_SOURCE=1' in flags: + flags.remove('-D_GNU_SOURCE=1') + self.ver = config[0].strip() + if minver and self.ver < minver: + err= 'WARNING: requires %s version %s (%s found)' % (self.name, self.ver, minver) + raise ValueError(err) + self.found = 1 + self.cflags = '' + for f in flags: + if f[:2] in ('-l', '-D', '-I', '-L'): + self.cflags += f + ' ' + elif f[:3] == '-Wl': + self.cflags += f + ' ' + if self.name == 'SDL': + inc = '-I' + '/boot/system/develop/headers/SDL' + self.cflags = inc + ' ' + self.cflags + except: + print ('WARNING: "%s" failed!' % command) + self.found = 0 + self.ver = '0' + self.libs = defaultlibs + + def configure(self, incdirs, libdir): + if self.found: + print (self.name + ' '[len(self.name):] + ': found ' + self.ver) + self.found = 1 + else: + print (self.name + ' '[len(self.name):] + ': not found') + +class Dependency: + def __init__(self, name, checkhead, checklib, libs): + self.name = name + self.inc_dir = None + self.lib_dir = None + self.libs = libs + self.found = 0 + self.checklib = checklib + self.checkhead = checkhead + self.cflags = '' + + def configure(self, incdirs, libdirs): + incname = self.checkhead + libnames = self.checklib, self.name.lower() + + if incname: + for dir in incdirs: + path = os.path.join(dir, incname) + if os.path.isfile(path): + self.inc_dir = dir + + for dir in libdirs: + for name in libnames: + path = os.path.join(dir, name) + if filter(os.path.isfile, glob(path+'*')): + self.lib_dir = dir + + if (incname and self.lib_dir and self.inc_dir) or (not incname and self.lib_dir): + print (self.name + ' '[len(self.name):] + ': found') + self.found = 1 + else: + print (self.name + ' '[len(self.name):] + ': not found') + + +class DependencyPython: + def __init__(self, name, module, header): + self.name = name + self.lib_dir = '' + self.inc_dir = '' + self.libs = [] + self.cflags = '' + self.found = 0 + self.ver = '0' + self.module = module + self.header = header + + def configure(self, incdirs, libdirs): + self.found = 1 + if self.module: + try: + self.ver = __import__(self.module).__version__ + except ImportError: + self.found = 0 + if self.found and self.header: + fullpath = os.path.join(get_python_inc(0), self.header) + if not os.path.isfile(fullpath): + self.found = 0 + else: + self.inc_dir = os.path.split(fullpath)[0] + if self.found: + print (self.name + ' '[len(self.name):] + ': found', self.ver) + else: + print (self.name + ' '[len(self.name):] + ': not found') + +sdl_lib_name = 'SDL' + +def main(): + print ('\nHunting dependencies...') + + def get_porttime_dep(): + """ returns the porttime Dependency + + On some distributions, such as Fedora, porttime is compiled into portmidi. + On others, such as Debian, it is a separate library. + """ + portmidi_as_porttime = True + + if 'PORTMIDI_INC_PORTTIME' in os.environ: + inc_porttime = os.environ.get('PORTMIDI_INC_PORTTIME') + portmidi_as_porttime = True if inc_porttime in ['1', 'True'] else False + else: + if os.path.exists('/etc/redhat-release'): + portmidi_as_porttime = True + else: + portmidi_as_porttime = False + + if portmidi_as_porttime: + return Dependency('PORTTIME', 'porttime.h', 'libportmidi.so', ['portmidi']) + else: + return Dependency('PORTTIME', 'porttime.h', 'libporttime.so', ['porttime']) + + porttime_dep = get_porttime_dep() + + DEPS = [ + DependencyProg('SDL', 'SDL_CONFIG', 'sdl-config', '1.2', ['sdl']), + Dependency('FONT', 'SDL_ttf.h', 'libSDL_ttf.so', ['SDL_ttf']), + Dependency('IMAGE', 'SDL_image.h', 'libSDL_image.so', ['SDL_image']), + Dependency('MIXER', 'SDL_mixer.h', 'libSDL_mixer.so', ['SDL_mixer']), + Dependency('PNG', 'png.h', 'libpng', ['png']), + Dependency('JPEG', 'jpeglib.h', 'libjpeg', ['jpeg']), + Dependency('SCRAP', '', 'libX11', ['X11']), + Dependency('PORTMIDI', 'portmidi.h', 'libportmidi.so', ['portmidi']), + porttime_dep, + DependencyProg('FREETYPE', 'FREETYPE_CONFIG', 'freetype-config', '2.0', + ['freetype'], '--ftversion'), + #Dependency('GFX', 'SDL_gfxPrimitives.h', 'libSDL_gfx.so', ['SDL_gfx']), + ] + if not DEPS[0].found: + sys.exit('Unable to run "sdl-config". Please make sure a development version of SDL is installed.') + + incdirs = [] + libdirs = [] + incdirs += ["/system"+d for d in origincdirs] + libdirs += ["/system"+d for d in origlibdirs] + if localbase: + incdirs = [localbase+d for d in origincdirs] + libdirs = [localbase+d for d in origlibdirs] + + for arg in DEPS[0].cflags.split(): + if arg[:2] == '-I': + incdirs.append(arg[2:]) + elif arg[:2] == '-L': + libdirs.append(arg[2:]) + for d in DEPS: + d.configure(incdirs, libdirs) + + for d in DEPS[1:]: + if not d.found: + if "-auto" not in sys.argv and not confirm(""" +Warning, some of the pygame dependencies were not found. Pygame can still +compile and install, but games that depend on those missing dependencies +will not run. Would you like to continue the configuration?"""): + raise SystemExit("Missing dependencies") + break + + return DEPS + +if __name__ == '__main__': + print ("""This is the configuration subscript for Unix. +Please run "config.py" for full configuration.""") + diff --git a/pygame.egg-info/SOURCES.txt b/pygame.egg-info/SOURCES.txt index c54a93a..1b9d208 100644 --- a/pygame.egg-info/SOURCES.txt +++ b/pygame.egg-info/SOURCES.txt @@ -308,11 +308,7 @@ src/pypm.pyx src/rect.c src/rotozoom.c src/rwobject.c -src/scale.h src/scale2x.c -src/scale_mmx.c -src/scale_mmx32.c -src/scale_mmx64.c src/scale_mmx64_gcc.c src/scale_mmx64_msvc.c src/scrap.c @@ -537,4 +533,4 @@ test/util/build_page/results/.htaccess test/util/build_page/results/index.py test/util/build_page/results/results.css test/util/build_page/upload_results/.htaccess -test/util/build_page/upload_results/index.py \ No newline at end of file +test/util/build_page/upload_results/index.py diff --git a/setup.py b/setup.py index e5cc8cf..499ae73 100644 --- a/setup.py +++ b/setup.py @@ -125,7 +125,7 @@ else: #headers to install headers = glob.glob(os.path.join('src', '*.h')) -headers.remove(os.path.join('src', 'scale.h')) +#headers.remove(os.path.join('src', 'scale.h')) # option for not installing the headers. if "-noheaders" in sys.argv: @@ -418,22 +418,6 @@ if sys.platform == 'win32': build_ext.run(self) cmdclass['build_ext'] = WinBuildExt - # Add the precompiled smooth scale MMX functions to transform. - def replace_scale_mmx(): - for e in extensions: - if e.name == 'transform': - if '64 bit' in sys.version: - e.extra_objects.append( - os.path.join('obj', 'win64', 'scale_mmx.obj')) - else: - e.extra_objects.append( - os.path.join('obj', 'win32', 'scale_mmx.obj')) - for i in range(len(e.sources)): - if e.sources[i].endswith('scale_mmx.c'): - del e.sources[i] - return - replace_scale_mmx() - #clean up the list of extensions for e in extensions[:]: diff --git a/src/pgcompat.h b/src/pgcompat.h index bd18431..324130f 100644 --- a/src/pgcompat.h +++ b/src/pgcompat.h @@ -81,9 +81,7 @@ #define DECREF_MOD(mod) /* Type header differs. */ -#define TYPE_HEAD(x,y) \ - PyObject_HEAD_INIT(x) \ - 0, +#define TYPE_HEAD(x,y) PyObject_HEAD_INIT(x) 0, /* Text interface. Use ascii strings. */ #define Text_Type PyString_Type diff --git a/src/transform.c b/src/transform.c index 4fb2fd9..56025b9 100644 --- a/src/transform.c +++ b/src/transform.c @@ -29,7 +29,7 @@ #include "doc/transform_doc.h" #include #include -#include "scale.h" +//#include "scale.h" typedef void (* SMOOTHSCALE_FILTER_P)(Uint8 *, Uint8 *, int, int, int, int, int); -- 2.13.1