mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-10-09 16:46:42 +00:00
初始化
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
|
||||
from plugin_package import CCPluginPackage
|
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/cocospackage
Executable file
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/cocospackage
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash -l
|
||||
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
python ${DIR}/cocospackage.pyc "$@"
|
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/cocospackage.bat
Executable file
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/cocospackage.bat
Executable file
@@ -0,0 +1,3 @@
|
||||
SET script_path=%~dp0
|
||||
|
||||
python %script_path%cocospackage.pyc %*
|
@@ -0,0 +1,3 @@
|
||||
|
||||
from package_helper import PackageHelper
|
||||
from project_helper import ProjectHelper
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,90 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import json
|
||||
import re
|
||||
import shlex
|
||||
import uuid
|
||||
import sys
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
def get_template_path():
|
||||
if getattr(sys, 'frozen', None):
|
||||
cur_path = os.path.realpath(os.path.dirname(sys.executable))
|
||||
ret = os.path.join(cur_path, 'helper', 'template')
|
||||
else:
|
||||
cur_path = os.path.realpath(os.path.dirname(__file__))
|
||||
ret = os.path.join(cur_path, 'template')
|
||||
|
||||
return ret
|
||||
|
||||
class CreateFrameworkHelper(object):
|
||||
|
||||
def __init__(self, project, package_name):
|
||||
self._package_name = package_name
|
||||
self._package_path = project["packages_dir"] + os.sep + package_name + "-1.0"
|
||||
self._vars = {}
|
||||
|
||||
def run(self):
|
||||
package_path = self._package_path
|
||||
if os.path.isdir(package_path):
|
||||
raise cocos.CCPluginError(MultiLanguage.get_string('PACKAGE_PATH_EXISTED_FMT', package_path),
|
||||
cocos.CCPluginError.ERROR_PATH_NOT_FOUND)
|
||||
os.makedirs(package_path)
|
||||
|
||||
self._vars["__PACKAGE_NAME__"] = self._package_name
|
||||
self.generate_uuid_string()
|
||||
|
||||
template_path = get_template_path()
|
||||
|
||||
self.copy_files_from_template(template_path, package_path)
|
||||
|
||||
|
||||
def copy_files_from_template(self, src_dir, dst_dir):
|
||||
files = os.listdir(src_dir)
|
||||
for filename in files:
|
||||
src = src_dir + os.sep + filename
|
||||
dst = dst_dir + os.sep + self.get_format_string(filename)
|
||||
if os.path.isdir(src):
|
||||
os.makedirs(dst)
|
||||
self.copy_files_from_template(src, dst)
|
||||
else:
|
||||
self.copy_file_from_template(src, dst)
|
||||
|
||||
def copy_file_from_template(self, src, dst):
|
||||
f = open(src, "rb")
|
||||
text = f.read()
|
||||
f.close()
|
||||
text = self.get_format_string(text)
|
||||
|
||||
f = open(dst, "wb")
|
||||
f.write(text)
|
||||
f.close()
|
||||
print MultiLanguage.get_string('PACKAGE_CREATE_OK_FMT', dst)
|
||||
|
||||
def get_format_string(self, src_str):
|
||||
vars = self._vars
|
||||
for var in vars:
|
||||
src_str = src_str.replace(var, vars[var])
|
||||
|
||||
return src_str
|
||||
|
||||
def generate_uuid_string(self):
|
||||
uuid_str = uuid.uuid1().hex.upper()
|
||||
str1 = uuid_str[16:20]
|
||||
str2 = uuid_str[0:8]
|
||||
vars = self._vars
|
||||
vars["__XCODE_PROJ_ID__"] = str1 + "98D41A82028A" + str2
|
||||
vars["__MAC_LIB_ORI_ID__"] = str1 + "966C1A81DF7F" + str2
|
||||
vars["__MAC_LIB_CTN_ID__"] = str1 + "98D91A82028A" + str2
|
||||
vars["__MAC_LIB_PRJ_ID__"] = str1 + "98DA1A82028A" + str2
|
||||
vars["__MAC_LIB_BLD_ID__"] = str1 + "98DE1A820D18" + str2
|
||||
vars["__IOS_LIB_ORI_ID__"] = str1 + "98A71A81E087" + str2
|
||||
vars["__IOS_LIB_CTN_ID__"] = str1 + "98DB1A82028A" + str2
|
||||
vars["__IOS_LIB_PRJ_ID__"] = str1 + "98DC1A82028A" + str2
|
||||
vars["__IOS_LIB_BLD_ID__"] = str1 + "994F1A821434" + str2
|
||||
vars["__XCODE_PRDGRP_ID__"] = str1 + "98D51A82028A" + str2
|
||||
|
||||
|
@@ -0,0 +1,22 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import errno
|
||||
|
||||
|
||||
def ensure_directory(path):
|
||||
try:
|
||||
os.makedirs(path)
|
||||
except OSError as exc: # Python >2.5
|
||||
if exc.errno == errno.EEXIST and os.path.isdir(path):
|
||||
pass
|
||||
else:
|
||||
raise
|
||||
|
||||
|
||||
class UnrecognizedFormat:
|
||||
def __init__(self, prompt):
|
||||
self._prompt = prompt
|
||||
|
||||
def __str__(self):
|
||||
return self._prompt
|
@@ -0,0 +1,43 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import json
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
class LocalPackagesDatabase(object):
|
||||
def __init__(self, path):
|
||||
self._path = path
|
||||
if os.path.isfile(self._path):
|
||||
f = open(self._path, "rb")
|
||||
self._data = json.load(f)
|
||||
f.close()
|
||||
else:
|
||||
self._data = {}
|
||||
|
||||
def get_packages(self):
|
||||
return self._data.copy()
|
||||
|
||||
def add_package(self, package_data):
|
||||
key = package_data["name"] + "-" + package_data["version"]
|
||||
self._data[key] = package_data
|
||||
self.update_database()
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_ADD_OK_FMT', key)
|
||||
|
||||
def remove_package(self, package_data):
|
||||
key = package_data["name"] + "-" + package_data["version"]
|
||||
if key in self._data:
|
||||
del self._data[key]
|
||||
self.update_database()
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_REMOVE_OK_FMT', key)
|
||||
else:
|
||||
message = MultiLanguage.get_string('PACKAGE_PKG_NOT_FOUND_PKG_FMT', key)
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_WRONG_CONFIG)
|
||||
|
||||
def update_database(self):
|
||||
f = open(self._path, "w+b")
|
||||
str = json.dump(self._data, f)
|
||||
f.close()
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_UPDATE_OK_FMT', self._path)
|
||||
|
@@ -0,0 +1,212 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import json
|
||||
import urllib2
|
||||
import re
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from functions import *
|
||||
from local_package_database import LocalPackagesDatabase
|
||||
from zip_downloader import ZipDownloader
|
||||
|
||||
def convert_version_part(version_part):
|
||||
tag = '(\d+)(\D*.*)'
|
||||
match = re.search(tag, version_part)
|
||||
if match is None:
|
||||
return 0
|
||||
|
||||
return int(match.group(1)), match.group(2)
|
||||
|
||||
def compare_extra_version_string(str1, str2):
|
||||
if str1 == str2:
|
||||
return 0
|
||||
|
||||
if len(str1) == 0:
|
||||
return 1
|
||||
elif len(str2) == 0:
|
||||
return -1
|
||||
|
||||
if str1 > str2:
|
||||
return 1
|
||||
else:
|
||||
return -1
|
||||
|
||||
|
||||
def compare_version(version1, version2):
|
||||
v1 = re.split('\.', version1)
|
||||
v2 = re.split('\.', version2)
|
||||
n1 = len(v1)
|
||||
n2 = len(v2)
|
||||
|
||||
if n1 > n2:
|
||||
n = n1
|
||||
for x in xrange(n2,n):
|
||||
v2.append("0")
|
||||
else:
|
||||
n = n2
|
||||
for x in xrange(n1,n):
|
||||
v1.append("0")
|
||||
|
||||
for x in xrange(0,n):
|
||||
ver_num1, ver_str1 = convert_version_part(v1[x])
|
||||
ver_num2, ver_str2 = convert_version_part(v2[x])
|
||||
if ver_num1 > ver_num2:
|
||||
return 1
|
||||
elif ver_num2 > ver_num1:
|
||||
return -1
|
||||
|
||||
c = compare_extra_version_string(ver_str1, ver_str2)
|
||||
if c != 0:
|
||||
return c
|
||||
|
||||
return 0
|
||||
|
||||
def get_newer_package(package1, package2):
|
||||
if compare_version(package1["version"], package2["version"]) > 0:
|
||||
return package1
|
||||
else:
|
||||
return package2
|
||||
|
||||
def get_packages_adapt_engine(packages, engine):
|
||||
packages_out = []
|
||||
for package in packages:
|
||||
package_engine = package["engine"]
|
||||
if package_engine[-1] == '+':
|
||||
flag = True
|
||||
package_engine = package_engine[:-1]
|
||||
else:
|
||||
flag = False
|
||||
c = compare_version(engine, package_engine)
|
||||
if flag and c >= 0:
|
||||
packages_out.append(package)
|
||||
elif c == 0:
|
||||
packages_out.append(package)
|
||||
|
||||
if len(packages_out) > 0:
|
||||
return packages_out
|
||||
|
||||
class PackageHelper:
|
||||
REPO_URL = "http://pmr.cocos.com/"
|
||||
REPO_PACKAGES_DIR = "packages"
|
||||
WORKDIR = ".cocos" + os.sep + "packages"
|
||||
LOCALDB_FILENAME = "local_packages.json"
|
||||
QUERY_PACKAGE_URL = REPO_URL + "?name=%s"
|
||||
QUERY_KEYWORD_URL = REPO_URL + "?keyword=%s"
|
||||
|
||||
@classmethod
|
||||
def get_workdir(cls):
|
||||
home = os.path.expanduser("~").rstrip("/\\")
|
||||
return home + os.sep + cls.WORKDIR
|
||||
|
||||
@classmethod
|
||||
def get_local_database_path(cls):
|
||||
return cls.get_workdir() + os.sep + cls.LOCALDB_FILENAME
|
||||
|
||||
@classmethod
|
||||
def get_package_path(cls, package_data):
|
||||
return cls.get_workdir() + os.sep + package_data["name"] + "-" + package_data["version"]
|
||||
|
||||
@classmethod
|
||||
def search_keyword(cls, keyword):
|
||||
url = cls.QUERY_KEYWORD_URL % keyword
|
||||
# print "[PACKAGE] query url: %s" % url
|
||||
response = urllib2.urlopen(url)
|
||||
html = response.read()
|
||||
packages_data = json.loads(html)
|
||||
if packages_data is None or len(packages_data) == 0:
|
||||
return None
|
||||
|
||||
if "err" in packages_data:
|
||||
message = MultiLanguage.get_string('PACKAGE_ERROR_WITH_CODE_FMT',
|
||||
(packages_data["err"], packages_data["code"]))
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_WRONG_CONFIG)
|
||||
|
||||
return packages_data
|
||||
|
||||
@classmethod
|
||||
def query_package_data(cls, name, version = 'all'):
|
||||
url = cls.QUERY_PACKAGE_URL % name + '&version=' + version
|
||||
# print "[PACKAGE] query url: %s" % url
|
||||
response = urllib2.urlopen(url)
|
||||
html = response.read()
|
||||
package_data = json.loads(html)
|
||||
# d1 = json.dumps(package_data,indent=4)
|
||||
# print d1
|
||||
if package_data is None or len(package_data) == 0 or ("err" in package_data and "code" in package_data and package_data["code"] == "1002"):
|
||||
return None
|
||||
|
||||
if "err" in package_data:
|
||||
message = MultiLanguage.get_string('PACKAGE_ERROR_WITH_CODE_FMT',
|
||||
(package_data["err"], package_data["code"]))
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_WRONG_CONFIG)
|
||||
|
||||
return package_data
|
||||
|
||||
@classmethod
|
||||
def download_package_zip(cls, package_data, force):
|
||||
download_url = cls.REPO_URL + cls.REPO_PACKAGES_DIR + "/" + package_data["filename"]
|
||||
workdir = cls.get_package_path(package_data)
|
||||
print MultiLanguage.get_string('PACKAGE_WORKDIR_FMT', workdir)
|
||||
downloader = ZipDownloader(download_url, workdir, package_data, force)
|
||||
downloader.run()
|
||||
|
||||
@classmethod
|
||||
def add_package(cls, package_data):
|
||||
localdb = LocalPackagesDatabase(cls.get_local_database_path())
|
||||
localdb.add_package(package_data)
|
||||
|
||||
@classmethod
|
||||
def get_installed_packages(cls):
|
||||
localdb = LocalPackagesDatabase(cls.get_local_database_path())
|
||||
return localdb.get_packages()
|
||||
|
||||
@classmethod
|
||||
def get_installed_package_data(cls, package_name, version = None):
|
||||
localdb = LocalPackagesDatabase(cls.get_local_database_path())
|
||||
packages = localdb.get_packages()
|
||||
keys = packages.keys()
|
||||
keys.sort()
|
||||
keys.reverse()
|
||||
for key in keys:
|
||||
package_data = packages[key]
|
||||
if package_data["name"] == package_name:
|
||||
if version == None:
|
||||
return package_data
|
||||
elif package_data["version"] == version:
|
||||
return package_data
|
||||
|
||||
@classmethod
|
||||
def get_installed_package_newest_version(cls, package_name, engine = None):
|
||||
localdb = LocalPackagesDatabase(cls.get_local_database_path())
|
||||
packages = localdb.get_packages()
|
||||
keys = packages.keys()
|
||||
keys.sort()
|
||||
keys.reverse()
|
||||
package_list = []
|
||||
for key in keys:
|
||||
package_data = packages[key]
|
||||
if package_data["name"] == package_name:
|
||||
package_list.append(package_data)
|
||||
|
||||
n = len(package_list)
|
||||
if n < 1:
|
||||
return
|
||||
|
||||
if not engine is None:
|
||||
package_list = get_packages_adapt_engine(package_list, engine)
|
||||
if package_list is None:
|
||||
return
|
||||
|
||||
package_newest = package_list[0]
|
||||
for x in xrange(1,n-1):
|
||||
package_newest = get_newer_package(package_list[x], package_newest)
|
||||
|
||||
return package_newest
|
||||
|
||||
@classmethod
|
||||
def get_installed_package_zip_path(cls, package_data):
|
||||
workdir = cls.get_package_path(package_data)
|
||||
return workdir + os.sep + package_data["filename"]
|
@@ -0,0 +1,200 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from functions import *
|
||||
from package_helper import *
|
||||
from zip_unpacker import ZipUnpacker
|
||||
from add_framework_helper import AddFrameworkHelper
|
||||
from remove_framework_helper import RemoveFrameworkHelper
|
||||
from create_framework_helper import CreateFrameworkHelper
|
||||
from set_framework_helper import SetFrameworkHelper
|
||||
|
||||
def get_engine_of_project(project):
|
||||
ver_str = None
|
||||
x_ver_file = os.path.join(project["path"], 'frameworks/cocos2d-x/cocos/cocos2d.cpp')
|
||||
pattern = r".*return[ \t]+\"cocos2d-x (.*)\";"
|
||||
|
||||
f = open(x_ver_file)
|
||||
for line in f.readlines():
|
||||
match = re.match(pattern, line)
|
||||
if match:
|
||||
ver_str = match.group(1)
|
||||
break
|
||||
f.close()
|
||||
|
||||
return ver_str
|
||||
|
||||
class ProjectHelper:
|
||||
SUPPORTED_PLATFORMS = ("proj.android", "proj.ios_mac", "proj.win32")
|
||||
PACKAGES_DIRNAME = "packages"
|
||||
PACKAGE_INFO_FILE = "package.json"
|
||||
PACKAGE_UNINSTALL_FILE = "uninstall.json"
|
||||
|
||||
@classmethod
|
||||
def get_current_project(cls):
|
||||
cwd = os.path.realpath(os.getcwd())
|
||||
prefix = cwd
|
||||
|
||||
project = {}
|
||||
project["path"] = prefix
|
||||
|
||||
project["classes_dir"] = "Classes"
|
||||
if os.path.exists(prefix + os.sep + project["classes_dir"]):
|
||||
project["type"] = "cpp"
|
||||
prefix = ""
|
||||
else:
|
||||
prefix = "frameworks" + os.sep + "runtime-src" + os.sep
|
||||
project["classes_dir"] = prefix + os.sep + "Classes"
|
||||
if os.path.exists(cwd + os.sep + project["classes_dir"]):
|
||||
project["type"] = "script"
|
||||
|
||||
if not "type" in project:
|
||||
message = MultiLanguage.get_string('PACKAGE_ERROR_WRONG_DIR')
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_WRONG_CONFIG)
|
||||
|
||||
for platform in cls.SUPPORTED_PLATFORMS:
|
||||
path = project["path"] + os.sep + prefix + platform
|
||||
if os.path.exists(path):
|
||||
project[platform] = path
|
||||
|
||||
project["packages_dir"] = project["path"] + os.sep + cls.PACKAGES_DIRNAME
|
||||
return project
|
||||
|
||||
@classmethod
|
||||
def get_added_packages(cls, project):
|
||||
packages_dir = project["packages_dir"]
|
||||
if not os.path.isdir(packages_dir):
|
||||
return
|
||||
|
||||
packages = []
|
||||
dirs = os.listdir(packages_dir)
|
||||
for dir in dirs:
|
||||
dir_path = packages_dir + os.sep + dir
|
||||
if not os.path.isdir(dir_path):
|
||||
continue
|
||||
uninstall_file = dir_path + os.sep + cls.PACKAGE_UNINSTALL_FILE
|
||||
if not os.path.isfile(uninstall_file):
|
||||
continue
|
||||
info_file = dir_path + os.sep + cls.PACKAGE_INFO_FILE
|
||||
if not os.path.isfile(info_file):
|
||||
continue
|
||||
import json
|
||||
f = open(info_file, "rb")
|
||||
package_info = json.load(f)
|
||||
f.close()
|
||||
package_info["dir_path"] = dir_path
|
||||
packages.append(package_info)
|
||||
|
||||
return packages
|
||||
|
||||
@classmethod
|
||||
def check_added_package(cls, project, package_name):
|
||||
packages = cls.get_added_packages(project)
|
||||
if packages is None:
|
||||
return
|
||||
|
||||
for package in packages:
|
||||
if package["name"] == package_name:
|
||||
return package
|
||||
|
||||
@classmethod
|
||||
def show_project_info(cls, project):
|
||||
print MultiLanguage.get_string('PACKAGE_PROJ_PATH_FMT', project["path"])
|
||||
print MultiLanguage.get_string('PACKAGE_PROJ_TYPE_FMT', project["type"])
|
||||
|
||||
@classmethod
|
||||
def add_framework(cls, project, package_name):
|
||||
cls.show_project_info(project)
|
||||
|
||||
package_data = cls.check_added_package(project, package_name)
|
||||
if not package_data is None:
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_ADDED_WARN_FMT', (package_name, package_name))
|
||||
return
|
||||
|
||||
engine = get_engine_of_project(project)
|
||||
if engine is None:
|
||||
print MultiLanguage.get_string('PACKAGE_PROJ_UNKOWN_ENGINE')
|
||||
return
|
||||
|
||||
package_data = PackageHelper.get_installed_package_newest_version(package_name, engine)
|
||||
if package_data is None:
|
||||
print MultiLanguage.get_string('PACKAGE_NOT_FOUND_PKG_FMT', (package_name, engine, package_name))
|
||||
return
|
||||
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_ADD_FMT',
|
||||
(package_data["name"], package_data["version"], package_data["author"]))
|
||||
|
||||
# unpacking files
|
||||
ensure_directory(project["packages_dir"])
|
||||
unpacker = ZipUnpacker(PackageHelper.get_installed_package_zip_path(package_data))
|
||||
unpacker.unpack(project["packages_dir"])
|
||||
|
||||
# execute install.json
|
||||
install_helper = AddFrameworkHelper(project, package_data)
|
||||
install_helper.run()
|
||||
|
||||
@classmethod
|
||||
def remove_framework(cls, project, package_name):
|
||||
cls.show_project_info(project)
|
||||
|
||||
package = cls.check_added_package(project, package_name)
|
||||
if package is None:
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_NOT_FOUND_FMT', package_name)
|
||||
return
|
||||
|
||||
dir = package["dir_path"]
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_REMOVE_FMT', dir)
|
||||
uninstall_helper = RemoveFrameworkHelper(project, dir)
|
||||
uninstall_helper.run()
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_REMOVE_OK')
|
||||
|
||||
@classmethod
|
||||
def update_framework(cls, project, package_name):
|
||||
cls.show_project_info(project)
|
||||
|
||||
package = cls.check_added_package(project, package_name)
|
||||
if package is None:
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_NOT_FOUND_FMT', package_name)
|
||||
return
|
||||
|
||||
engine = get_engine_of_project(project)
|
||||
if engine is None:
|
||||
print MultiLanguage.get_string('PACKAGE_PROJ_UNKOWN_ENGINE')
|
||||
return
|
||||
|
||||
package_data = PackageHelper.get_installed_package_newest_version(package_name, engine)
|
||||
if package_data is None:
|
||||
print MultiLanguage.get_string('PACKAGE_NOT_FOUND_PKG_FMT', (package_name, engine, package_name))
|
||||
return
|
||||
newest_version = package_data["version"]
|
||||
|
||||
dir = package["dir_path"]
|
||||
if compare_version(newest_version, package["version"]) < 1:
|
||||
print MultiLanguage.get_string('PACKAGE_PKG_IS_NEWEST_FMT', (package_name, package_name))
|
||||
return
|
||||
cls.remove_framework(project, package_name)
|
||||
cls.add_framework(project, package_name)
|
||||
print MultiLanguage.get_string('PACKAGE_PROJ_PKG_UPDATE_OK')
|
||||
|
||||
@classmethod
|
||||
def create_framework(cls, project, package_name):
|
||||
cls.show_project_info(project)
|
||||
|
||||
ensure_directory(project["packages_dir"])
|
||||
create_helper = CreateFrameworkHelper(project, package_name)
|
||||
create_helper.run()
|
||||
|
||||
@classmethod
|
||||
def set_framework(cls, project, package_name, version):
|
||||
cls.show_project_info(project)
|
||||
packages_dir = project["packages_dir"]
|
||||
if not os.path.isdir(packages_dir):
|
||||
print MultiLanguage.get_string('PACKAGE_NO_PKG_FOUND')
|
||||
return
|
||||
|
||||
set_helper = SetFrameworkHelper(project, package_name, version)
|
||||
set_helper.run()
|
@@ -0,0 +1,397 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import json
|
||||
import re
|
||||
import shlex
|
||||
import shutil
|
||||
|
||||
import cocos
|
||||
|
||||
|
||||
class RemoveFrameworkHelper(object):
|
||||
|
||||
def __init__(self, project, package_path):
|
||||
self._project = project
|
||||
self._package_path = package_path
|
||||
self._uninstall_json_path = self._package_path + os.sep + "uninstall.json"
|
||||
self.get_uninstall_info()
|
||||
|
||||
def run(self):
|
||||
for remove_info in self._uninstall_info:
|
||||
if "file" in remove_info:
|
||||
if "tags" in remove_info:
|
||||
self.do_remove_string_with_tag(remove_info)
|
||||
else:
|
||||
self.do_remove_string_no_tag(remove_info)
|
||||
elif "json_file" in remove_info:
|
||||
filename = remove_info["json_file"]
|
||||
remove_items = remove_info["items"]
|
||||
self.do_remove_string_from_jsonfile(filename, remove_items)
|
||||
elif "bak_file" in remove_info:
|
||||
ori = remove_info["ori_file"]
|
||||
bak = remove_info["bak_file"]
|
||||
if os.path.exists(bak):
|
||||
self.do_remove_file(ori)
|
||||
os.rename(bak, ori)
|
||||
|
||||
if os.path.isfile(self._uninstall_json_path):
|
||||
os.remove(self._uninstall_json_path)
|
||||
|
||||
def do_remove_header_path_on_ios_mac(self, remove_info):
|
||||
filename = remove_info["file"]
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
tag = remove_info["tags"][0]
|
||||
workdir = remove_info["workdir"]
|
||||
remove_string = remove_info["string"]
|
||||
|
||||
f = open(filename, "rb")
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
contents = []
|
||||
tag_found = False
|
||||
for line in lines:
|
||||
match = re.search(tag, line)
|
||||
if match is None:
|
||||
contents.append(line)
|
||||
else:
|
||||
includes = shlex.split(match.group(2))
|
||||
headers = []
|
||||
for include in includes:
|
||||
include = self.get_ios_mac_path(workdir, include)
|
||||
headers.append(include)
|
||||
|
||||
if remove_string in headers:
|
||||
headers.remove(remove_string)
|
||||
start, end = match.span(0)
|
||||
parts = []
|
||||
parts.append(line[:start])
|
||||
parts.append(match.group(1))
|
||||
parts.append(' ')
|
||||
for header in headers:
|
||||
if header.find(' ') != -1:
|
||||
header = '"' + header + '"'
|
||||
parts.append(header)
|
||||
parts.append(' ')
|
||||
parts.append(match.group(3))
|
||||
parts.append(line[end:])
|
||||
contents.append(''.join(parts))
|
||||
tag_found = True
|
||||
|
||||
if tag_found:
|
||||
f = open(filename, "wb")
|
||||
f.writelines(contents)
|
||||
f.close()
|
||||
|
||||
def do_remove_header_path(self, remove_info):
|
||||
platform = remove_info["platform"]
|
||||
name = "do_remove_header_path_on_" + platform
|
||||
cmd = getattr(self, name)
|
||||
cmd(remove_info)
|
||||
|
||||
def do_remove_lib_on_win(self, remove_info):
|
||||
filename = remove_info["file"]
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
tag = remove_info["tags"][0]
|
||||
workdir = remove_info["workdir"]
|
||||
remove_string = remove_info["string"]
|
||||
|
||||
f = open(filename, "rb")
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
contents = []
|
||||
tag_found = False
|
||||
for line in lines:
|
||||
match = re.search(tag, line)
|
||||
if match is None:
|
||||
contents.append(line)
|
||||
else:
|
||||
includes = re.split(';', match.group(2))
|
||||
headers = []
|
||||
for include in includes:
|
||||
include = self.get_win32_path(workdir, include)
|
||||
if include is not None:
|
||||
headers.append(include)
|
||||
|
||||
if remove_string in headers:
|
||||
headers.remove(remove_string)
|
||||
start, end = match.span(0)
|
||||
parts = []
|
||||
parts.append(line[:start])
|
||||
parts.append(match.group(1))
|
||||
parts.append(';')
|
||||
for header in headers:
|
||||
if header.find(' ') != -1:
|
||||
header = '"' + header + '"'
|
||||
parts.append(header)
|
||||
parts.append(';')
|
||||
parts.append(match.group(3))
|
||||
parts.append(line[end:])
|
||||
contents.append(''.join(parts))
|
||||
tag_found = True
|
||||
|
||||
if tag_found:
|
||||
f = open(filename, "wb")
|
||||
f.writelines(contents)
|
||||
f.close()
|
||||
|
||||
def do_remove_lib_on_android(self, remove_info):
|
||||
filename = remove_info["file"]
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
begin_tag = remove_info["tags"][0]
|
||||
end_tag = remove_info["tags"][1]
|
||||
prefix_tag = remove_info["tags"][2]
|
||||
remove_string = remove_info["string"]
|
||||
workdir = remove_info["workdir"]
|
||||
is_import = remove_info["is_import"]
|
||||
|
||||
f = open(filename, "rb")
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
contents = []
|
||||
lib_begin = False
|
||||
tag_found = False
|
||||
libs = []
|
||||
for line in lines:
|
||||
if lib_begin == False:
|
||||
contents.append(line)
|
||||
match = re.search(begin_tag, line)
|
||||
if not match is None:
|
||||
lib_begin = True
|
||||
tag_found = True
|
||||
else:
|
||||
if prefix_tag is not None:
|
||||
match = re.search(prefix_tag, line)
|
||||
if match is not None:
|
||||
continue
|
||||
|
||||
match = re.search(end_tag, line)
|
||||
if match is None:
|
||||
libs.append(self.get_android_path(workdir, line, is_import))
|
||||
else:
|
||||
# remove lib
|
||||
if remove_string in libs:
|
||||
libs.remove(remove_string)
|
||||
libs = list(set(libs))
|
||||
count = len(libs)
|
||||
cur = 1
|
||||
if count > 0 and prefix_tag is not None:
|
||||
contents.append(prefix_tag)
|
||||
contents.append(" += \\\n")
|
||||
for lib in libs:
|
||||
if cur < count and prefix_tag is not None:
|
||||
contents.append(' ' + lib + ' \\')
|
||||
elif is_import is False:
|
||||
contents.append(' ' + lib)
|
||||
else:
|
||||
contents.append('$(call import-module,')
|
||||
contents.append(lib)
|
||||
contents.append(')')
|
||||
contents.append("\n")
|
||||
|
||||
libs = []
|
||||
lib_begin = False
|
||||
contents.append(line)
|
||||
|
||||
if tag_found:
|
||||
f = open(filename, "wb")
|
||||
f.writelines(contents)
|
||||
f.close()
|
||||
|
||||
def do_remove_lib_on_ios_mac(self, remove_info):
|
||||
filename = remove_info["file"]
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
begin_tag = remove_info["tags"][0]
|
||||
end_tag = remove_info["tags"][1]
|
||||
remove_string = remove_info["string"]
|
||||
workdir = remove_info["workdir"]
|
||||
|
||||
f = open(filename, "rb")
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
contents = []
|
||||
lib_begin = False
|
||||
tag_found = False
|
||||
libs = []
|
||||
for line in lines:
|
||||
if lib_begin == False:
|
||||
contents.append(line)
|
||||
match = re.search(begin_tag, line)
|
||||
if not match is None:
|
||||
lib_begin = True
|
||||
tag_found = True
|
||||
else:
|
||||
match = re.search(end_tag, line)
|
||||
if match is None:
|
||||
libs.append(self.get_ios_mac_path(workdir, line))
|
||||
else:
|
||||
# remove lib
|
||||
if remove_string in libs:
|
||||
libs.remove(remove_string)
|
||||
libs = list(set(libs))
|
||||
for lib in libs:
|
||||
contents.append('\t\t\t\t\t"' + lib + '",\n')
|
||||
|
||||
libs = []
|
||||
lib_begin = False
|
||||
contents.append(line)
|
||||
|
||||
if tag_found:
|
||||
f = open(filename, "wb")
|
||||
f.writelines(contents)
|
||||
f.close()
|
||||
|
||||
def do_remove_lib(self, remove_info):
|
||||
platform = remove_info["platform"]
|
||||
name = "do_remove_lib_on_" + platform
|
||||
cmd = getattr(self, name)
|
||||
cmd(remove_info)
|
||||
|
||||
def do_remove_string_with_tag(self, remove_info):
|
||||
info_type = remove_info["type"]
|
||||
if info_type == "header":
|
||||
name = "do_remove_header_path"
|
||||
elif info_type == "lib":
|
||||
name = "do_remove_lib"
|
||||
else:
|
||||
return
|
||||
|
||||
cmd = getattr(self, name)
|
||||
cmd(remove_info)
|
||||
|
||||
def do_remove_string_no_tag(self, remove_info):
|
||||
filename = remove_info["file"]
|
||||
remove_string = remove_info["string"]
|
||||
self.do_remove_string_from_file(filename, remove_string)
|
||||
|
||||
def do_remove_file(self, file_path):
|
||||
if not os.path.exists(file_path):
|
||||
return
|
||||
|
||||
if os.path.isdir(file_path):
|
||||
shutil.rmtree(file_path)
|
||||
else:
|
||||
os.remove(file_path)
|
||||
|
||||
def do_remove_string_from_file(self, filename, remove_string):
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
|
||||
f = open(filename, "rb")
|
||||
all_text = f.read()
|
||||
f.close()
|
||||
|
||||
find_index = all_text.find(remove_string.encode("ascii"))
|
||||
if find_index >= 0:
|
||||
headers = all_text[0:find_index]
|
||||
tails = all_text[find_index+len(remove_string):]
|
||||
all_text = headers + tails
|
||||
f = open(filename, "wb")
|
||||
f.write(all_text)
|
||||
f.close()
|
||||
|
||||
def do_remove_string_from_jsonfile(self, filename, remove_items):
|
||||
if not os.path.isfile(filename):
|
||||
return
|
||||
|
||||
f = open(filename, "rb")
|
||||
configs = json.load(f)
|
||||
f.close()
|
||||
|
||||
for remove_item in remove_items:
|
||||
key = remove_item["key"]
|
||||
if not key in configs:
|
||||
continue
|
||||
|
||||
# found the key need to remove or to remove items
|
||||
if "items" in remove_item:
|
||||
# remove items in configs[key]
|
||||
self.remove_items_from_json(configs[key], remove_item["items"])
|
||||
else:
|
||||
# remove configs[key]
|
||||
del(configs[key])
|
||||
|
||||
f = open(filename, "w+b")
|
||||
str = json.dump(configs, f)
|
||||
f.close()
|
||||
|
||||
def remove_items_from_json(self, configs, remove_items):
|
||||
if isinstance(configs, list):
|
||||
# delete string in list
|
||||
for item in remove_items:
|
||||
if item in configs:
|
||||
configs.remove(item)
|
||||
|
||||
else:
|
||||
# delete key in dict
|
||||
for item in remove_items:
|
||||
if "key" in item:
|
||||
key = item["key"]
|
||||
if not key in configs:
|
||||
continue
|
||||
# found the key need to remove or to remove items
|
||||
if "items" in item:
|
||||
# remove items in configs[key]
|
||||
self.remove_items_from_json(configs[key], item["items"])
|
||||
else:
|
||||
# remove configs[key]
|
||||
del(configs[key])
|
||||
|
||||
def get_ios_mac_path(self, project_path, source):
|
||||
source = source.strip(',"\t\n\r')
|
||||
if not source[:10] == '$(SRCROOT)':
|
||||
source = '$(SRCROOT)' + os.sep + os.path.relpath(self._project["packages_dir"] + os.sep + source,
|
||||
project_path)
|
||||
|
||||
return source.replace(os.sep, '/')
|
||||
|
||||
def get_win32_path(self, project_path, source):
|
||||
if source == ";" or source == "":
|
||||
return None
|
||||
|
||||
if source.find('\\') == -1 and source.find('/') == -1:
|
||||
return source
|
||||
|
||||
source = source.strip(',"\t\n\r')
|
||||
if not source[:13] == '$(ProjectDir)':
|
||||
source = '$(ProjectDir)' + os.sep + os.path.relpath(self._project["packages_dir"] + os.sep + source,
|
||||
project_path)
|
||||
|
||||
return source.replace('/', '\\')
|
||||
|
||||
def get_android_path(self, project_path, source, ignore_local_path):
|
||||
source = source.strip(' ,"\t\n\r')
|
||||
|
||||
if source.find('\\') == -1 and source.find('/') == -1:
|
||||
return source
|
||||
|
||||
if source[-2:] == ' \\':
|
||||
source = source[0:-2]
|
||||
if source[:21] == '$(call import-module,':
|
||||
# strip "$(call import-module, ../../../../packages/"
|
||||
source = source[21:-1].strip('./\\')
|
||||
if source[:8] == "packages":
|
||||
source = source[9:]
|
||||
if not source[:13] == '$(LOCAL_PATH)':
|
||||
source = os.path.relpath(self._project["packages_dir"] + os.sep + source, project_path)
|
||||
if ignore_local_path is False:
|
||||
source = '$(LOCAL_PATH)' + os.sep + source
|
||||
|
||||
return source
|
||||
|
||||
def get_uninstall_info(self):
|
||||
file_path = self._uninstall_json_path
|
||||
if os.path.isfile(file_path):
|
||||
f = open(file_path, "rb")
|
||||
self._uninstall_info = json.load(f)
|
||||
f.close()
|
||||
else:
|
||||
self._uninstall_info = []
|
@@ -0,0 +1,111 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import json
|
||||
import re
|
||||
import shlex
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
|
||||
class SetFrameworkHelper(object):
|
||||
|
||||
def __init__(self, project, package_name, version):
|
||||
self._package_name = package_name
|
||||
self._package_path = project["packages_dir"] + os.sep + package_name + "-" + version
|
||||
self._project = project
|
||||
|
||||
def run(self):
|
||||
package_name = self._package_name
|
||||
package_path = self._package_path
|
||||
if not os.path.isdir(package_path):
|
||||
raise cocos.CCPluginError(MultiLanguage.get_string('PACKAGE_ERROR_PATH_NOT_FOUND_FMT', package_path),
|
||||
cocos.CCPluginError.ERROR_PATH_NOT_FOUND)
|
||||
|
||||
sln_txt = self.load_sln_win32()
|
||||
if sln_txt is None:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_READ_SLN')
|
||||
else:
|
||||
find_tag = '(Project\(\"\{)(\S*)(\}\"\) = \"' + package_name + '\", \"\S*\", \"\{)(\S*)(\}\"\s*EndProject)'
|
||||
match = re.search(find_tag, sln_txt, re.DOTALL)
|
||||
if match is None:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_NOT_FOUND_PROJ', package_name)
|
||||
else:
|
||||
proj_id_win = match.group(2)
|
||||
build_id_win = match.group(4)
|
||||
self.set_win32(proj_id_win, build_id_win)
|
||||
|
||||
def set_win32(self, proj_id, build_id):
|
||||
text = self.load_install_json()
|
||||
if text is None:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_JSON_READ_FAILED')
|
||||
return
|
||||
|
||||
find_tag = '(\{\s*\"command\":\s*\"add_project\",\s*\"name\":\s*\"\S*\",\s*\"project_id\":\s*\")(\S*)(\",\s*\"build_id\":\s*\")(\S*)(\",\s*\"platform\":\s*\"win\"\s*\})'
|
||||
match = re.search(find_tag, text, re.DOTALL)
|
||||
if not match is None:
|
||||
old_id = match.group(2)
|
||||
text = text.replace(old_id, proj_id)
|
||||
old_id = match.group(4)
|
||||
text = text.replace(old_id, build_id)
|
||||
self.save_install_json(text)
|
||||
return
|
||||
|
||||
index = text.find("[")
|
||||
if index<0:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_JSON_ERROR')
|
||||
return
|
||||
|
||||
headers = text[0:index+1]
|
||||
tails = text[index+1:]
|
||||
skip_str = '\n\t\t'
|
||||
str_to_add = '\n\t{'
|
||||
str_to_add += skip_str + '"command": "add_project",'
|
||||
str_to_add += skip_str + '"name": "' + self._package_name + '",'
|
||||
str_to_add += skip_str + '"project_id": "' + proj_id + '",'
|
||||
str_to_add += skip_str + '"build_id": "' + build_id + '",'
|
||||
str_to_add += skip_str + '"platform": "win"'
|
||||
str_to_add += '\n\t},'
|
||||
text = headers + str_to_add + tails
|
||||
self.save_install_json(text)
|
||||
|
||||
def load_install_json(self):
|
||||
install_json_file = self._package_path + os.sep + "install.json"
|
||||
if not os.path.isfile(install_json_file):
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_NOT_FOUND_JSON')
|
||||
return
|
||||
|
||||
f = open(install_json_file, "rb")
|
||||
text = f.read()
|
||||
f.close()
|
||||
|
||||
return text
|
||||
|
||||
def save_install_json(self, text):
|
||||
install_json_file = self._package_path + os.sep + "install.json"
|
||||
f = open(install_json_file, "wb")
|
||||
f.write(text)
|
||||
f.close()
|
||||
|
||||
def load_sln_win32(self):
|
||||
if not "proj.win32" in self._project:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_WIN32_NOT_FOUND')
|
||||
return
|
||||
|
||||
workdir = self._project["proj.win32"]
|
||||
files = os.listdir(workdir)
|
||||
for filename in files:
|
||||
if filename[-4:] == ".sln":
|
||||
proj_file_path = workdir + os.sep + filename
|
||||
break
|
||||
|
||||
if proj_file_path is None:
|
||||
print MultiLanguage.get_string('PACKAGE_ERROR_NO_SLN_IN_WIN32')
|
||||
return
|
||||
|
||||
f = open(proj_file_path, "rb")
|
||||
text = f.read()
|
||||
f.close()
|
||||
|
||||
return text
|
@@ -0,0 +1,34 @@
|
||||
[
|
||||
{
|
||||
"command": "add_project",
|
||||
"name": "__PACKAGE_NAME__",
|
||||
"platform": "android"
|
||||
},
|
||||
{
|
||||
"command": "add_project",
|
||||
"name": "__PACKAGE_NAME__",
|
||||
"id": "__XCODE_PROJ_ID__",
|
||||
"mac_lib":
|
||||
{
|
||||
"remoteGlobalIDString": "__MAC_LIB_ORI_ID__",
|
||||
"remoteInfo": "__PACKAGE_NAME__ MAC",
|
||||
"container": "__MAC_LIB_CTN_ID__",
|
||||
"lib_id": "__MAC_LIB_PRJ_ID__",
|
||||
"build_id": "__MAC_LIB_BLD_ID__"
|
||||
},
|
||||
"ios_lib":
|
||||
{
|
||||
"remoteGlobalIDString": "__IOS_LIB_ORI_ID__",
|
||||
"remoteInfo": "__PACKAGE_NAME__ IOS",
|
||||
"container": "__IOS_LIB_CTN_ID__",
|
||||
"lib_id": "__IOS_LIB_PRJ_ID__",
|
||||
"build_id": "__IOS_LIB_BLD_ID__"
|
||||
},
|
||||
"ProductGroup": "__XCODE_PRDGRP_ID__",
|
||||
"platform": "ios_mac"
|
||||
},
|
||||
{
|
||||
"command": "add_entry_function",
|
||||
"declare": "void package___PACKAGE_NAME___register();"
|
||||
}
|
||||
]
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "__PACKAGE_NAME__",
|
||||
"version": "1.0",
|
||||
"engine": "3.4+",
|
||||
"author": "",
|
||||
"url": "",
|
||||
"description": ""
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
|
||||
void package___PACKAGE_NAME___register()
|
||||
{
|
||||
}
|
||||
|
@@ -0,0 +1,17 @@
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := __PACKAGE_NAME___static
|
||||
LOCAL_MODULE_FILENAME := lib__PACKAGE_NAME__
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(LOCAL_PATH)/../package___PACKAGE_NAME___register.cpp
|
||||
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/..
|
||||
|
||||
LOCAL_C_INCLUDES := $(LOCAL_EXPORT_C_INCLUDES) \
|
||||
$(LOCAL_PATH)/../../../frameworks/cocos2d-x/cocos \
|
||||
$(LOCAL_PATH)/../../../frameworks/cocos2d-x/external
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
@@ -0,0 +1,8 @@
|
||||
//
|
||||
// Prefix header for all source files of the 'lib__PACKAGE_NAME__' target in the 'lib__PACKAGE_NAME__' project
|
||||
//
|
||||
|
||||
#ifdef __OBJC__
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#endif
|
@@ -0,0 +1,333 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
DABC98D01A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DABC98CF1A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp */; };
|
||||
DABC98D11A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DABC98CF1A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp */; };
|
||||
DABC99751A82179700BF5CC4 /* __PACKAGE_NAME__.pch in Headers */ = {isa = PBXBuildFile; fileRef = DABC99741A82179700BF5CC4 /* __PACKAGE_NAME__.pch */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
__MAC_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ MAC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "lib__PACKAGE_NAME__ MAC.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
__IOS_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ IOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "lib__PACKAGE_NAME__ IOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DABC98CF1A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = package___PACKAGE_NAME___register.cpp; path = ../package___PACKAGE_NAME___register.cpp; sourceTree = "<group>"; };
|
||||
DABC99741A82179700BF5CC4 /* __PACKAGE_NAME__.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = __PACKAGE_NAME__.pch; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
DABC96691A81DF7F00BF5CC4 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DABC98451A81E08700BF5CC4 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
DABC96631A81DF7F00BF5CC4 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DABC99741A82179700BF5CC4 /* __PACKAGE_NAME__.pch */,
|
||||
DABC98CF1A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp */,
|
||||
DABC966D1A81DF7F00BF5CC4 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DABC966D1A81DF7F00BF5CC4 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
__MAC_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ MAC.a */,
|
||||
__IOS_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ IOS.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
DABC966A1A81DF7F00BF5CC4 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DABC98461A81E08700BF5CC4 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DABC99751A82179700BF5CC4 /* __PACKAGE_NAME__.pch in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
DABC966B1A81DF7F00BF5CC4 /* __PACKAGE_NAME__ MAC */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = DABC96801A81DF7F00BF5CC4 /* Build configuration list for PBXNativeTarget "__PACKAGE_NAME__ MAC" */;
|
||||
buildPhases = (
|
||||
DABC96681A81DF7F00BF5CC4 /* Sources */,
|
||||
DABC96691A81DF7F00BF5CC4 /* Frameworks */,
|
||||
DABC966A1A81DF7F00BF5CC4 /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "__PACKAGE_NAME__ MAC";
|
||||
productName = __PACKAGE_NAME__;
|
||||
productReference = __MAC_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ MAC.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
DABC98001A81E08700BF5CC4 /* __PACKAGE_NAME__ IOS */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = DABC98A41A81E08700BF5CC4 /* Build configuration list for PBXNativeTarget "__PACKAGE_NAME__ IOS" */;
|
||||
buildPhases = (
|
||||
DABC98011A81E08700BF5CC4 /* Sources */,
|
||||
DABC98451A81E08700BF5CC4 /* Frameworks */,
|
||||
DABC98461A81E08700BF5CC4 /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "__PACKAGE_NAME__ IOS";
|
||||
productName = __PACKAGE_NAME__;
|
||||
productReference = __IOS_LIB_ORI_ID__ /* lib__PACKAGE_NAME__ IOS.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
DABC96641A81DF7F00BF5CC4 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0610;
|
||||
ORGANIZATIONNAME = chukong;
|
||||
TargetAttributes = {
|
||||
DABC966B1A81DF7F00BF5CC4 = {
|
||||
CreatedOnToolsVersion = 6.1.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = DABC96671A81DF7F00BF5CC4 /* Build configuration list for PBXProject "__PACKAGE_NAME__" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = DABC96631A81DF7F00BF5CC4;
|
||||
productRefGroup = DABC966D1A81DF7F00BF5CC4 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
DABC966B1A81DF7F00BF5CC4 /* __PACKAGE_NAME__ MAC */,
|
||||
DABC98001A81E08700BF5CC4 /* __PACKAGE_NAME__ IOS */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
DABC96681A81DF7F00BF5CC4 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DABC98D01A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DABC98011A81E08700BF5CC4 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DABC98D11A8201AF00BF5CC4 /* package___PACKAGE_NAME___register.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
DABC967E1A81DF7F00BF5CC4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = NO;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"CC_LUA_ENGINE_ENABLED=1",
|
||||
"DEBUG=1",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../frameworks/cocos2d-x/cocos $(SRCROOT)/../../../frameworks/cocos2d-x/extensions $(SRCROOT)/../../../frameworks/cocos2d-x/external";
|
||||
VALID_ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
DABC967F1A81DF7F00BF5CC4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = NO;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "CC_LUA_ENGINE_ENABLED=1";
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../frameworks/cocos2d-x/cocos $(SRCROOT)/../../../frameworks/cocos2d-x/extensions $(SRCROOT)/../../../frameworks/cocos2d-x/external";
|
||||
VALID_ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
DABC96811A81DF7F00BF5CC4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES;
|
||||
EXECUTABLE_PREFIX = lib;
|
||||
PRODUCT_NAME = "__PACKAGE_NAME__ MAC";
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../../frameworks/cocos2d-x/external/glfw3/include/mac";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
DABC96821A81DF7F00BF5CC4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES;
|
||||
EXECUTABLE_PREFIX = lib;
|
||||
PRODUCT_NAME = "__PACKAGE_NAME__ MAC";
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../../frameworks/cocos2d-x/external/glfw3/include/mac";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
DABC98A51A81E08700BF5CC4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
EXECUTABLE_PREFIX = lib;
|
||||
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
|
||||
GCC_PREFIX_HEADER = __PACKAGE_NAME__.pch;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
CC_TARGET_OS_IPHONE,
|
||||
);
|
||||
PRODUCT_NAME = "__PACKAGE_NAME__ IOS";
|
||||
SDKROOT = iphoneos8.1;
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../../frameworks/cocos2d-x/external/curl/include/ios";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
DABC98A61A81E08700BF5CC4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
EXECUTABLE_PREFIX = lib;
|
||||
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
|
||||
GCC_PREFIX_HEADER = __PACKAGE_NAME__.pch;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
CC_TARGET_OS_IPHONE,
|
||||
);
|
||||
PRODUCT_NAME = "__PACKAGE_NAME__ IOS";
|
||||
SDKROOT = iphoneos8.1;
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../../../frameworks/cocos2d-x/external/curl/include/ios";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
DABC96671A81DF7F00BF5CC4 /* Build configuration list for PBXProject "__PACKAGE_NAME__" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
DABC967E1A81DF7F00BF5CC4 /* Debug */,
|
||||
DABC967F1A81DF7F00BF5CC4 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
DABC96801A81DF7F00BF5CC4 /* Build configuration list for PBXNativeTarget "__PACKAGE_NAME__ MAC" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
DABC96811A81DF7F00BF5CC4 /* Debug */,
|
||||
DABC96821A81DF7F00BF5CC4 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
DABC98A41A81E08700BF5CC4 /* Build configuration list for PBXNativeTarget "__PACKAGE_NAME__ IOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
DABC98A51A81E08700BF5CC4 /* Debug */,
|
||||
DABC98A61A81E08700BF5CC4 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = DABC96641A81DF7F00BF5CC4 /* Project object */;
|
||||
}
|
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{59411DD0-24F9-48F7-80EA-3F8000855168}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>__PACKAGE_NAME__</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '10.0'">v100</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '11.0'">v110</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '11.0' and exists('$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A')">v110_xp</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0' and exists('$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A')">v120_xp</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '10.0'">v100</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '11.0'">v110</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '11.0' and exists('$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A')">v110_xp</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0' and exists('$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A')">v120_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_LIB;CC_USE_CURL=1;CC_LUA_ENGINE_ENABLED=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\frameworks\cocos2d-x\cocos;$(ProjectDir)..\..\..\frameworks\cocos2d-x\external;$(ProjectDir)..\..\..\frameworks\cocos2d-x\external\glfw3\include\win32;$(ProjectDir)..\..\..\frameworks\cocos2d-x\external\win32-specific\zlib\include;$(ProjectDir)..\..\..\frameworks\cocos2d-x\external\win32-specific\gles\include\OGLES/;$(ProjectDir)..\..\..\frameworks\cocos2d-x\external\curl\include\win32;$(ProjectDir)..\..\..\frameworks\cocos2d-x\extensions;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<DisableSpecificWarnings>4267;4251;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="ReadMe.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\package___PACKAGE_NAME___register.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="源文件">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="头文件">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="资源文件">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="ReadMe.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\package___PACKAGE_NAME___register.cpp">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
@@ -0,0 +1,113 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import zipfile
|
||||
import sys
|
||||
import hashlib
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from time import time
|
||||
from functions import *
|
||||
|
||||
class ZipDownloader(object):
|
||||
def __init__(self, url, destdir, package_data, force):
|
||||
self._url = url
|
||||
self._destdir = destdir
|
||||
self._package_data = package_data
|
||||
self._force = force
|
||||
self._zip_file_size = int(package_data["filesize"])
|
||||
self._filename = destdir + os.sep + package_data["filename"]
|
||||
|
||||
def download_file(self):
|
||||
print(MultiLanguage.get_string('PACKAGE_READY_DOWNLOAD_FMT', (self._filename, self._url)))
|
||||
import urllib2
|
||||
|
||||
try:
|
||||
u = urllib2.urlopen(self._url)
|
||||
except urllib2.HTTPError as e:
|
||||
if e.code == 404:
|
||||
print(MultiLanguage.get_string('PACKAGE_ERROR_URL_FMT', self._url))
|
||||
print(MultiLanguage.get_string('PACKAGE_ERROR_DOWNLOAD_FAILED_FMT',
|
||||
(str(e.code), e.read())))
|
||||
sys.exit(1)
|
||||
|
||||
f = open(self._filename, 'wb')
|
||||
file_size = self._zip_file_size
|
||||
print(MultiLanguage.get_string('PACKAGE_START_DOWNLOAD'))
|
||||
|
||||
file_size_dl = 0
|
||||
block_sz = 8192
|
||||
block_size_per_second = 0
|
||||
old_time = time()
|
||||
|
||||
while True:
|
||||
buf = u.read(block_sz)
|
||||
if not buf:
|
||||
break
|
||||
|
||||
file_size_dl += len(buf)
|
||||
block_size_per_second += len(buf)
|
||||
f.write(buf)
|
||||
new_time = time()
|
||||
if (new_time - old_time) > 1:
|
||||
speed = block_size_per_second / (new_time - old_time) / 1000.0
|
||||
status = ""
|
||||
if file_size != 0:
|
||||
percent = file_size_dl * 100. / file_size
|
||||
status = MultiLanguage.get_string('PACKAGE_DOWNLOAD_PERCENT_FMT_1',
|
||||
(file_size_dl / 1000, file_size / 1000, percent, speed))
|
||||
else:
|
||||
status = MultiLanguage.get_string('PACKAGE_DOWNLOAD_PERCENT_FMT_2',
|
||||
(file_size_dl / 1000, speed))
|
||||
|
||||
status += chr(8) * (len(status) + 1)
|
||||
print(status),
|
||||
sys.stdout.flush()
|
||||
block_size_per_second = 0
|
||||
old_time = new_time
|
||||
|
||||
print(MultiLanguage.get_string('PACKAGE_DOWNLOAD_END'))
|
||||
f.close()
|
||||
|
||||
def check_file_md5(self):
|
||||
if not os.path.isfile(self._filename):
|
||||
return False
|
||||
|
||||
block_size = 65536 # 64KB
|
||||
md5 = hashlib.md5()
|
||||
f = open(self._filename)
|
||||
while True:
|
||||
data = f.read(block_size)
|
||||
if not data:
|
||||
break
|
||||
md5.update(data)
|
||||
hashcode = md5.hexdigest()
|
||||
return hashcode == self._package_data["md5"]
|
||||
|
||||
def download_zip_file(self):
|
||||
if os.path.isfile(self._filename):
|
||||
if self._force or not self.check_file_md5():
|
||||
os.remove(self._filename)
|
||||
else:
|
||||
print MultiLanguage.get_string('PACKAGE_EXISTS_FMT', self._filename)
|
||||
|
||||
if not os.path.isfile(self._filename):
|
||||
self.download_file()
|
||||
|
||||
try:
|
||||
if not zipfile.is_zipfile(self._filename):
|
||||
raise UnrecognizedFormat(MultiLanguage.get_string('PACKAGE_ERROR_NOT_ZIP_FMT', (self._filename)))
|
||||
except UnrecognizedFormat as e:
|
||||
print(MultiLanguage.get_string('PACKAGE_ERROR_UNKNOWN_FORMAT_FMT', self._filename))
|
||||
if os.path.isfile(self._filename):
|
||||
os.remove(self._filename)
|
||||
# print("==> Download it from internet again, please wait...")
|
||||
# self.download_zip_file()
|
||||
|
||||
|
||||
def run(self):
|
||||
ensure_directory(self._destdir)
|
||||
self.download_zip_file()
|
||||
|
@@ -0,0 +1,56 @@
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import zipfile
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from functions import *
|
||||
|
||||
class ZipUnpacker(object):
|
||||
def __init__(self, filename):
|
||||
self._filename = filename
|
||||
|
||||
def unpack(self, extract_dir):
|
||||
"""Unpack zip `filename` to `extract_dir`
|
||||
|
||||
Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined
|
||||
by ``zipfile.is_zipfile()``).
|
||||
"""
|
||||
|
||||
if not zipfile.is_zipfile(self._filename):
|
||||
raise UnrecognizedFormat(MultiLanguage.get_string('PACKAGE_ERROR_NOT_ZIP_FMT', self._filename))
|
||||
|
||||
print(MultiLanguage.get_string('PACKAGE_EXTRACT_TIP'))
|
||||
z = zipfile.ZipFile(self._filename)
|
||||
try:
|
||||
for info in z.infolist():
|
||||
name = info.filename
|
||||
|
||||
# don't extract absolute paths or ones with .. in them
|
||||
if name.startswith('/') or '..' in name:
|
||||
continue
|
||||
|
||||
target = os.path.join(extract_dir, *name.split('/'))
|
||||
if not target:
|
||||
continue
|
||||
if name.endswith('/'):
|
||||
# directory
|
||||
ensure_directory(target)
|
||||
else:
|
||||
# file
|
||||
data = z.read(info.filename)
|
||||
f = open(target, 'wb')
|
||||
try:
|
||||
f.write(data)
|
||||
finally:
|
||||
f.close()
|
||||
del data
|
||||
unix_attributes = info.external_attr >> 16
|
||||
if unix_attributes:
|
||||
os.chmod(target, unix_attributes)
|
||||
finally:
|
||||
z.close()
|
||||
print(MultiLanguage.get_string('PACKAGE_EXTRACT_END'))
|
||||
|
@@ -0,0 +1,52 @@
|
||||
|
||||
import time
|
||||
|
||||
from helper import PackageHelper
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
class PackageInfo(object):
|
||||
@staticmethod
|
||||
def plugin_name():
|
||||
return "info"
|
||||
|
||||
@staticmethod
|
||||
def brief_description():
|
||||
return MultiLanguage.get_string('PACKAGE_INFO_BRIEF')
|
||||
|
||||
def parse_args(self, argv):
|
||||
from argparse import ArgumentParser
|
||||
|
||||
parser = ArgumentParser(prog="cocos package %s" % self.__class__.plugin_name(),
|
||||
description=self.__class__.brief_description())
|
||||
parser.add_argument("name", metavar="NAME", help=MultiLanguage.get_string('PACKAGE_INFO_ARG_NAME'))
|
||||
parser.add_argument('-v', '--version', default='all', help=MultiLanguage.get_string('PACKAGE_INFO_ARG_VERSION'))
|
||||
return parser.parse_args(argv)
|
||||
|
||||
def run(self, argv):
|
||||
args = self.parse_args(argv)
|
||||
name = args.name
|
||||
version = args.version
|
||||
package_data = PackageHelper.query_package_data(name, version)
|
||||
if package_data is None:
|
||||
print MultiLanguage.get_string('PACKAGE_INFO_ERROR_NO_PKG_FMT', (name, version))
|
||||
return
|
||||
|
||||
if isinstance(package_data, list):
|
||||
for data in package_data:
|
||||
self.show_info(name, data)
|
||||
return
|
||||
|
||||
if package_data.has_key('err'):
|
||||
print MultiLanguage.get_string('PACKAGE_INFO_ERROR_NO_PKG_FMT', (name, version))
|
||||
return
|
||||
|
||||
self.show_info(name, package_data)
|
||||
|
||||
def show_info(self, name, package_data):
|
||||
print MultiLanguage.get_string('PACKAGE_INFO_PKG_FMT',
|
||||
(name, package_data["name"], package_data["version"],
|
||||
time.strftime("%Y-%m-%d %H:%I:%S", time.gmtime(int(package_data["filetime"]))),
|
||||
package_data["author"], (int(package_data["filesize"]) / 1024),
|
||||
package_data["description"]))
|
@@ -0,0 +1,55 @@
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from helper import PackageHelper
|
||||
|
||||
class PackageInstall(cocos.CCPlugin):
|
||||
@staticmethod
|
||||
def plugin_name():
|
||||
return "install"
|
||||
|
||||
@staticmethod
|
||||
def brief_description():
|
||||
return MultiLanguage.get_string('PACKAGE_INSTALL_BRIEF')
|
||||
|
||||
# parse arguments
|
||||
def parse_args(self, argv):
|
||||
from argparse import ArgumentParser
|
||||
parser = ArgumentParser(prog="cocos package %s" % self.__class__.plugin_name(),
|
||||
description=self.__class__.brief_description())
|
||||
parser.add_argument("name", metavar="PACKAGE_NAME",
|
||||
help=MultiLanguage.get_string('PACKAGE_INSTALL_ARG_NAME'))
|
||||
parser.add_argument("-f", action="store_true", dest="force",
|
||||
help=MultiLanguage.get_string('PACKAGE_INSTALL_ARG_FORCE'))
|
||||
parser.add_argument('-v', '--version', default='all',
|
||||
help=MultiLanguage.get_string('PACKAGE_INFO_ARG_VERSION'))
|
||||
return parser.parse_args(argv)
|
||||
|
||||
def run(self, argv):
|
||||
args = self.parse_args(argv)
|
||||
name = args.name
|
||||
version = args.version
|
||||
force = args.force
|
||||
|
||||
package_data = PackageHelper.query_package_data(name, version)
|
||||
if package_data is None:
|
||||
message = MultiLanguage.get_string('PACKAGE_INSTALL_ERROR_NO_PKG_FMT', (name, version))
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_OTHERS)
|
||||
|
||||
if isinstance(package_data, list):
|
||||
for data in package_data:
|
||||
self.download(force, data)
|
||||
return
|
||||
|
||||
if package_data.has_key('err'):
|
||||
message = MultiLanguage.get_string('PACKAGE_INSTALL_ERROR_NO_PKG_FMT', (name, version))
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_WRONG_CONFIG)
|
||||
|
||||
self.download(force, package_data)
|
||||
|
||||
def download(self, force, package_data):
|
||||
PackageHelper.download_package_zip(package_data, force)
|
||||
PackageHelper.add_package(package_data)
|
||||
|
||||
print ""
|
@@ -0,0 +1,30 @@
|
||||
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
from helper import PackageHelper
|
||||
|
||||
class PackageList(cocos.CCPlugin):
|
||||
@staticmethod
|
||||
def plugin_name():
|
||||
return "list"
|
||||
|
||||
@staticmethod
|
||||
def brief_description():
|
||||
return MultiLanguage.get_string('PACKAGE_LIST_BRIEF')
|
||||
|
||||
def run(self, argv):
|
||||
packages = PackageHelper.get_installed_packages()
|
||||
keys = packages.keys()
|
||||
if len(keys) == 0:
|
||||
print MultiLanguage.get_string('PACKAGE_LIST_NOT_FOUND')
|
||||
return
|
||||
|
||||
print MultiLanguage.get_string('PACKAGE_LIST_TIP')
|
||||
keys.sort()
|
||||
for k in keys:
|
||||
package_data = PackageHelper.get_installed_package_data(packages[k]["name"])
|
||||
print MultiLanguage.get_string('PACKAGE_ITEM_FMT',
|
||||
(package_data["name"], package_data["version"], package_data["author"]))
|
||||
|
||||
print ""
|
@@ -0,0 +1,40 @@
|
||||
|
||||
from helper import PackageHelper
|
||||
import cocos
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
class FrameworkAdd(object):
|
||||
@staticmethod
|
||||
def plugin_name():
|
||||
return "search"
|
||||
|
||||
@staticmethod
|
||||
def brief_description():
|
||||
return MultiLanguage.get_string('PACKAGE_SEARCH_BRIEF')
|
||||
|
||||
def parse_args(self, argv):
|
||||
from argparse import ArgumentParser
|
||||
parser = ArgumentParser(
|
||||
prog="cocos package %s" % self.__class__.plugin_name(),
|
||||
description=self.__class__.brief_description())
|
||||
parser.add_argument("keyword", metavar="PACKAGE_NAME",
|
||||
help=MultiLanguage.get_string('PACKAGE_SEARCH_ARG_KEY'))
|
||||
return parser.parse_args(argv)
|
||||
|
||||
def run(self, argv):
|
||||
args = self.parse_args(argv)
|
||||
keyword = args.keyword
|
||||
packages = PackageHelper.search_keyword(keyword)
|
||||
if packages is None:
|
||||
print MultiLanguage.get_string('PACKAGE_SEARCH_ERROR_NO_KEY_FMT', keyword)
|
||||
return
|
||||
|
||||
keys = packages.keys()
|
||||
print MultiLanguage.get_string('PACKAGE_SEARCH_TIP_FMT', keyword)
|
||||
keys.sort()
|
||||
for k in keys:
|
||||
package_data = packages[k]
|
||||
print MultiLanguage.get_string('PACKAGE_ITEM_FMT',
|
||||
(package_data["name"], package_data["version"], package_data["author"]))
|
||||
|
||||
print ""
|
@@ -0,0 +1,67 @@
|
||||
# ----------------------------------------------------------------------------
|
||||
# cocos "package" plugin
|
||||
#
|
||||
# Copyright 2014 (C) cocos2d-x.org
|
||||
#
|
||||
# License: MIT
|
||||
# ----------------------------------------------------------------------------
|
||||
'''
|
||||
"package" plugins
|
||||
'''
|
||||
|
||||
__docformat__ = 'restructuredtext'
|
||||
|
||||
import os
|
||||
import sys
|
||||
import cocos
|
||||
import subprocess
|
||||
from MultiLanguage import MultiLanguage
|
||||
|
||||
class CCPluginPackage(cocos.CCPlugin):
|
||||
@staticmethod
|
||||
def plugin_name():
|
||||
return "package"
|
||||
|
||||
@staticmethod
|
||||
def brief_description():
|
||||
return MultiLanguage.get_string('PACKAGE_BRIEF')
|
||||
|
||||
def parse_args(self, argv):
|
||||
return {"command": argv[0]}
|
||||
|
||||
def run(self, argv, dependencies):
|
||||
if '--anysdk' in argv:
|
||||
argv.remove('--anysdk')
|
||||
cmd = self._get_cocospackage_path() + ' --runincocos ' + ' '.join(argv) + ' --env ' + self. __class__.get_console_path()
|
||||
ret = self._run_cmd(cmd)
|
||||
else:
|
||||
if '--sdkbox' in argv:
|
||||
argv.remove('--sdkbox')
|
||||
cmd = self._get_sdkbox_path() + ' --runincocos ' + ' '.join(argv)
|
||||
ret = self._run_cmd(cmd)
|
||||
if 0 != ret:
|
||||
message = MultiLanguage.get_string('COCOS_ERROR_RUNNING_CMD_RET_FMT', str(ret))
|
||||
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_RUNNING_CMD)
|
||||
|
||||
def _run_cmd(self, command, cwd=None):
|
||||
# cocos.CMDRunner.run_cmd(command, False, cwd=cwd)
|
||||
return subprocess.call(command, shell=True, cwd=cwd)
|
||||
|
||||
def _get_sdkbox_path(self):
|
||||
path = ''
|
||||
if getattr(sys, 'frozen', None):
|
||||
path = os.path.realpath(os.path.dirname(sys.executable))
|
||||
else:
|
||||
path = os.path.realpath(os.path.dirname(__file__))
|
||||
return os.path.join(path, 'sdkbox')
|
||||
|
||||
def _get_cocospackage_path(self):
|
||||
path = ''
|
||||
if getattr(sys, 'frozen', None):
|
||||
path = os.path.realpath(os.path.dirname(sys.executable))
|
||||
else:
|
||||
path = os.path.realpath(os.path.dirname(__file__))
|
||||
return os.path.join(path, 'cocospackage')
|
||||
|
||||
def print_help(self):
|
||||
print(MultiLanguage.get_string('PACKAGE_HELP'))
|
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/sdkbox
Executable file
3
cocos2d-x/tools/cocos2d-console/plugins/plugin_package/sdkbox
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
python ${DIR}/sdkbox.pyc "$@"
|
@@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
@python "%~dp0\sdkbox.pyc" %*
|
||||
|
Reference in New Issue
Block a user