blob: 74177fbfccaa918c6746a96381b5430e4692555f [file] [log] [blame]
From 9f318ab1a173bc3527c72f2ce9073d4b711559f4 Mon Sep 17 00:00:00 2001
From: hasufell <hasufell@gentoo.org>
Date: Sat, 4 Apr 2015 13:13:18 +0200
Subject: [PATCH] fix multiple abi support
---
renpy.py | 124 ++------------------------------------------------------
renpy/common.py | 106 ++++++++++++++++++++++++++++++++++++++++++++++++
renpy/main.py | 6 +--
3 files changed, 113 insertions(+), 123 deletions(-)
create mode 100644 renpy/common.py
diff --git a/renpy.py b/renpy.py
index b7bc67d..82ea492 100644
--- a/renpy.py
+++ b/renpy.py
@@ -29,114 +29,9 @@ import os
import sys
import warnings
-# Functions to be customized by distributors. ################################
-
-# Given the Ren'Py base directory (usually the directory containing
-# this file), this is expected to return the path to the common directory.
-def path_to_common(renpy_base):
- return renpy_base + "/renpy/common"
-
-# Given a directory holding a Ren'Py game, this is expected to return
-# the path to a directory that will hold save files.
-def path_to_saves(gamedir):
- import renpy #@UnresolvedImport
-
- # Makes sure the permissions are right on the save directory.
- def test_writable(d):
- try:
- fn = os.path.join(d, "test.txt")
- open(fn, "w").close()
- open(fn, "r").close()
- os.unlink(fn)
- return True
- except:
- return False
-
-
- # Android.
- if renpy.android:
- paths = [
- os.path.join(os.environ["ANDROID_OLD_PUBLIC"], "game/saves"),
- os.path.join(os.environ["ANDROID_PRIVATE"], "saves"),
- os.path.join(os.environ["ANDROID_PUBLIC"], "saves"),
- ]
-
- for rv in paths:
- if os.path.isdir(rv) and test_writable(rv):
- break
-
- print "Saving to", rv
-
- # We return the last path as the default.
-
- return rv
-
- if renpy.ios:
- from pyobjus import autoclass
- from pyobjus.objc_py_types import enum
-
- NSSearchPathDirectory = enum("NSSearchPathDirectory", NSDocumentDirectory=9)
- NSSearchPathDomainMask = enum("NSSearchPathDomainMask", NSUserDomainMask=1)
-
- NSFileManager = autoclass('NSFileManager')
- manager = NSFileManager.defaultManager()
- url = manager.URLsForDirectory_inDomains_(
- NSSearchPathDirectory.NSDocumentDirectory,
- NSSearchPathDomainMask.NSUserDomainMask,
- ).lastObject()
-
- # url.path seems to change type based on iOS version, for some reason.
- try:
- rv = url.path().UTF8String().decode("utf-8")
- except:
- rv = url.path.UTF8String().decode("utf-8")
-
- print "Saving to", rv
- return rv
-
- # No save directory given.
- if not renpy.config.save_directory:
- return gamedir + "/saves"
-
- # Search the path above Ren'Py for a directory named "Ren'Py Data".
- # If it exists, then use that for our save directory.
- path = renpy.config.renpy_base
-
- while True:
- if os.path.isdir(path + "/Ren'Py Data"):
- return path + "/Ren'Py Data/" + renpy.config.save_directory
-
- newpath = os.path.dirname(path)
- if path == newpath:
- break
- path = newpath
-
- # Otherwise, put the saves in a platform-specific location.
- if renpy.macintosh:
- rv = "~/Library/RenPy/" + renpy.config.save_directory
- return os.path.expanduser(rv)
-
- elif renpy.windows:
- if 'APPDATA' in os.environ:
- return os.environ['APPDATA'] + "/RenPy/" + renpy.config.save_directory
- else:
- rv = "~/RenPy/" + renpy.config.save_directory
- return os.path.expanduser(rv)
-
- else:
- rv = "~/.renpy/" + renpy.config.save_directory
- return os.path.expanduser(rv)
-
-
-# Returns the path to the Ren'Py base directory (containing common and
-# the launcher, usually.)
-def path_to_renpy_base():
- renpy_base = os.path.dirname(os.path.realpath(sys.argv[0]))
- renpy_base = os.path.abspath(renpy_base)
-
- return renpy_base
-
-##############################################################################
+from distutils.sysconfig import get_python_lib
+sys.path.append(get_python_lib() + "/renpy@SLOT@")
+import renpy.common as common
# The version of the Mac Launcher and py4renpy that we require.
macos_version = (6, 14, 0)
@@ -151,20 +46,9 @@ except:
print "Ren'Py requires at least python 2.6."
sys.exit(0)
-android = ("ANDROID_PRIVATE" in os.environ)
-
-# Android requires us to add code to the main module, and to command some
-# renderers.
-if android:
- __main__ = sys.modules["__main__"]
- __main__.path_to_renpy_base = path_to_renpy_base
- __main__.path_to_common = path_to_common
- __main__.path_to_saves = path_to_saves
- os.environ["RENPY_RENDERER"] = "gl"
-
def main():
- renpy_base = path_to_renpy_base()
+ renpy_base = common.path_to_renpy_base()
# Add paths.
if os.path.exists(renpy_base + "/module"):
diff --git a/renpy/common.py b/renpy/common.py
new file mode 100644
index 0000000..598b16c
--- /dev/null
+++ b/renpy/common.py
@@ -0,0 +1,106 @@
+# This file is part of Ren'Py. The license below applies to Ren'Py only.
+# Games and other projects that use Ren'Py may use a different license.
+
+# Copyright 2004-2015 Tom Rothamel <pytom@bishoujo.us>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import os
+import sys
+import warnings
+from distutils.sysconfig import get_python_lib
+
+# Functions to be customized by distributors. ################################
+
+# Given the Ren'Py base directory (usually the directory containing
+# this file), this is expected to return the path to the common directory.
+def path_to_common(renpy_base):
+ return renpy_base + "/renpy/common"
+
+# Given a directory holding a Ren'Py game, this is expected to return
+# the path to a directory that will hold save files.
+def path_to_saves(gamedir):
+ import renpy #@UnresolvedImport
+
+ # Makes sure the permissions are right on the save directory.
+ def test_writable(d):
+ try:
+ fn = os.path.join(d, "test.txt")
+ open(fn, "w").close()
+ open(fn, "r").close()
+ os.unlink(fn)
+ return True
+ except:
+ return False
+
+
+ # Makes sure the permissions are right on the save directory.
+ def test_writable(d):
+ try:
+ fn = os.path.join(d, "test.txt")
+ open(fn, "w").close()
+ open(fn, "r").close()
+ os.unlink(fn)
+ return True
+ except:
+ return False
+
+ # No save directory given.
+ if not renpy.config.save_directory:
+ return gamedir + "/saves"
+
+ # Search the path above Ren'Py for a directory named "Ren'Py Data".
+ # If it exists, then use that for our save directory.
+ path = renpy.config.renpy_base
+
+ while True:
+ if os.path.isdir(path + "/Ren'Py Data"):
+ return path + "/Ren'Py Data/" + renpy.config.save_directory
+
+ newpath = os.path.dirname(path)
+ if path == newpath:
+ break
+ path = newpath
+
+ # Otherwise, put the saves in a platform-specific location.
+ if renpy.macintosh:
+ rv = "~/Library/RenPy/" + renpy.config.save_directory
+ return os.path.expanduser(rv)
+
+ elif renpy.windows:
+ if 'APPDATA' in os.environ:
+ return os.environ['APPDATA'] + "/RenPy/" + renpy.config.save_directory
+ else:
+ rv = "~/RenPy/" + renpy.config.save_directory
+ return os.path.expanduser(rv)
+
+ else:
+ rv = "~/.renpy/" + renpy.config.save_directory
+ return os.path.expanduser(rv)
+
+
+# Returns the path to the Ren'Py base directory (containing common and
+# the launcher, usually.)
+def path_to_renpy_base():
+ renpy_base = os.path.dirname(os.path.realpath(sys.argv[0]))
+ renpy_base = get_python_lib() + "/renpy@SLOT@"
+ renpy_base = os.path.abspath(renpy_base)
+
+ return renpy_base
diff --git a/renpy/main.py b/renpy/main.py
index 70372d1..937dd21 100644
--- a/renpy/main.py
+++ b/renpy/main.py
@@ -27,7 +27,7 @@ import os
import sys
import time
import zipfile
-import __main__
+import renpy.common as common
def run(restart):
@@ -204,7 +204,7 @@ def main():
renpy.config.searchpath = [ renpy.config.gamedir ]
# Find the common directory.
- commondir = __main__.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable
+ commondir = common.path_to_common(renpy.config.renpy_base) # E1101 @UndefinedVariable
if os.path.isdir(commondir):
renpy.config.searchpath.append(commondir)
@@ -272,7 +272,7 @@ def main():
# Find the save directory.
if renpy.config.savedir is None:
- renpy.config.savedir = __main__.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable
+ renpy.config.savedir = common.path_to_saves(renpy.config.gamedir) # E1101 @UndefinedVariable
if renpy.game.args.savedir: #@UndefinedVariable
renpy.config.savedir = renpy.game.args.savedir #@UndefinedVariable
--
2.3.1