You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
358 lines
12 KiB
358 lines
12 KiB
From 7aa51dae5eb2f2123fee9bca23a2ce2f1b1c3f10 Mon Sep 17 00:00:00 2001
|
|
From: hasufell <hasufell@gentoo.org>
|
|
Date: Thu, 20 Aug 2015 01:10:58 +0200
|
|
Subject: [PATCH] Fix multiple abi support
|
|
|
|
---
|
|
renpy.py | 128 ++--------------------------------------------------
|
|
renpy/common.py | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
renpy/main.py | 6 +--
|
|
3 files changed, 144 insertions(+), 127 deletions(-)
|
|
create mode 100644 renpy/common.py
|
|
|
|
diff --git a/renpy.py b/renpy.py
|
|
index 7548cf6..8ec7353 100644
|
|
--- a/renpy.py
|
|
+++ b/renpy.py
|
|
@@ -28,122 +28,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, save_directory=None):
|
|
- import renpy # @UnresolvedImport
|
|
-
|
|
- if save_directory is None:
|
|
- save_directory = renpy.config.save_directory
|
|
- save_directory = renpy.exports.fsencode(save_directory)
|
|
-
|
|
- # 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 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/" + 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/" + save_directory
|
|
- return os.path.expanduser(rv)
|
|
-
|
|
- elif renpy.windows:
|
|
- if 'APPDATA' in os.environ:
|
|
- return os.environ['APPDATA'] + "/RenPy/" + save_directory
|
|
- else:
|
|
- rv = "~/RenPy/" + renpy.config.save_directory
|
|
- return os.path.expanduser(rv)
|
|
-
|
|
- else:
|
|
- rv = "~/.renpy/" + 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)
|
|
@@ -154,21 +45,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..0d60e36
|
|
--- /dev/null
|
|
+++ b/renpy/common.py
|
|
@@ -0,0 +1,137 @@
|
|
+# 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
|
|
+
|
|
+# 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, save_directory=None):
|
|
+ import renpy #@UnresolvedImport
|
|
+
|
|
+ if save_directory is None:
|
|
+ save_directory = renpy.config.save_directory
|
|
+
|
|
+ # 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 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/" + 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/" + save_directory
|
|
+ return os.path.expanduser(rv)
|
|
+
|
|
+ elif renpy.windows:
|
|
+ if 'APPDATA' in os.environ:
|
|
+ return os.environ['APPDATA'] + "/RenPy/" + save_directory
|
|
+ else:
|
|
+ rv = "~/RenPy/" + renpy.config.save_directory
|
|
+ return os.path.expanduser(rv)
|
|
+
|
|
+ else:
|
|
+ rv = "~/.renpy/" + 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 73e7239..6807ba1 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
|
|
|
|
|
|
last_clock = time.time()
|
|
@@ -273,7 +273,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)
|
|
@@ -371,7 +371,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
|
|
diff --git a/renpy/script.py b/renpy/script.py
|
|
index 73e7239..6807ba1 100644
|
|
--- a/renpy/script.py
|
|
+++ b/renpy/script.py
|
|
@@ -150,8 +150,8 @@ import os
|
|
if renpy.loader.loadable(i):
|
|
return None
|
|
|
|
- import __main__
|
|
- backups = __main__.path_to_saves(renpy.config.gamedir, "backups") # @UndefinedVariable
|
|
+ import renpy.common as common
|
|
+ backups = common.path_to_saves(renpy.config.gamedir, "backups") # @UndefinedVariable
|
|
|
|
if backups is None:
|
|
return
|
|
--
|
|
2.5.0
|
|
|