Compare commits

..

14 Commits
0.7.2 ... 0.7.7

19 changed files with 349 additions and 319 deletions

60
.travis.yml Normal file
View File

@@ -0,0 +1,60 @@
#language: python
sudo: false
branches:
only:
- master
- dev
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.9
- expect
- binutils-mingw-w64-i686
- gcc-mingw-w64-i686
- g++-mingw-w64-i686
matrix:
include:
- os: linux
env: CONF=release BUILDER=gcc TARGET=Linux TAG=Linux
- os: linux
env: CONF=debug BUILDER=clang TARGET=Linux
- os: linux
env: CONF=release BUILDER=gcc TARGET=Windows TAG=Mingw
- os: linux
env: CONF=release BUILDER=gcc TARGET=Android TAG=Android DISABLE_PACKAGE=-p
- os: osx
env: CONF=release BUILDER=clang TARGET=MacOs TAG=MacOs
- os: osx
env: CONF=release BUILDER=clang TARGET=IOs TAG=IOs
install:
- cd ..
# download NDK
- if [ "$TAG" == "Android" ]; then
git clone --depth 1 --branch master https://github.com/HeeroYui/android-download-tool;
./android-download-tool/dl-android.sh;
fi
- git clone --depth 1 --branch master https://github.com/atria-soft/ci.git
- cd -
before_script:
- ./setup.py build
- export PYTHONPATH=$PYTHONPATH:./lutin/build/lib.linux-x86_64-2.7/:./lutin/build/lib.linux-x86_64-2.7/lutin/:./lutin/build/lib:./lutin/build/lib/lutin/
- cd ..
- pwd
- ls -l *
- ./ci/build_send.py --tag=$TAG --status=START;
script:
- ./lutin/build/scripts-2.7/lutin -w -j4 -C -P -t$TARGET -c $BUILDER $COMPILATOR_OPTION $BUS -m $CONF $GCOV $DISABLE_PACKAGE test-c; STATUS=$?
- ./ci/build_send.py --tag=$TAG --status="$STATUS";
notifications:
email:
- yui.heero@gmail.com

View File

@@ -3,9 +3,52 @@ Lutin
`lutin` is a generic builder and package maker is a FREE software tool. `lutin` is a generic builder and package maker is a FREE software tool.
.. image:: https://badge.fury.io/py/lutin.png .. image:: https://badge.fury.io/py/lutin.png
:target: https://pypi.python.org/pypi/lutin :target: https://pypi.python.org/pypi/lutin
Release (master)
----------------
.. image:: https://travis-ci.org/HeeroYui/lutin.svg?branch=master
:target: https://travis-ci.org/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=master&tag=Linux
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=master&tag=MacOs
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=master&tag=Mingw
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=master&tag=Android
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=master&tag=IOs
:target: http://atria-soft.com/ci/HeeroYui/lutin
Developement (dev)
------------------
.. image:: https://travis-ci.org/HeeroYui/lutin.svg?branch=dev
:target: https://travis-ci.org/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=dev&tag=Linux
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=dev&tag=MacOs
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=dev&tag=Mingw
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=dev&tag=Android
:target: http://atria-soft.com/ci/HeeroYui/lutin
.. image:: http://atria-soft.com/ci/build/HeeroYui/lutin.svg?branch=dev&tag=IOs
:target: http://atria-soft.com/ci/HeeroYui/lutin
Instructions Instructions
------------ ------------

View File

@@ -17,6 +17,7 @@ import lutin.module as module
import lutin.target as target import lutin.target as target
import lutin.env as env import lutin.env as env
import lutin.multiprocess as multiprocess import lutin.multiprocess as multiprocess
import lutin.tools as tools
myArgs = arguments.LutinArg() myArgs = arguments.LutinArg()
myArgs.add(arguments.ArgDefine("h", "help", desc="Display this help")) myArgs.add(arguments.ArgDefine("h", "help", desc="Display this help"))
@@ -66,7 +67,8 @@ def usage(full=False):
for mod in listOfAllModule: for mod in listOfAllModule:
data_print = " " data_print = " "
if full == False: if full == False:
if mod["type"][:6] == "BINARY": if mod["type"] != None \
and mod["type"][:6] == "BINARY":
data_print += color['blue'] data_print += color['blue']
if mod["sub-type"] == "": if mod["sub-type"] == "":
data_print += "* " data_print += "* "
@@ -78,9 +80,11 @@ def usage(full=False):
data_print += "S " data_print += "S "
else: else:
data_print += " " data_print += " "
elif mod["type"] == "PACKAGE": elif mod["type"] != None \
and mod["type"] == "PACKAGE":
data_print += color['red'] + "# " data_print += color['red'] + "# "
elif mod["type"][:7] == "LIBRARY": elif mod["type"] != None \
and mod["type"][:7] == "LIBRARY":
data_print += color['yellow'] + " " data_print += color['yellow'] + " "
else: else:
data_print += color['default'] + " " data_print += color['default'] + " "
@@ -89,9 +93,11 @@ def usage(full=False):
data_print += mod["name"] + color['default'] data_print += mod["name"] + color['default']
if full == False: if full == False:
data_print += "\r\t\t\t\t\t\t\t" data_print += "\r\t\t\t\t\t\t\t"
if mod["license"] != "": if mod["license"] != None \
and mod["license"] != "":
data_print += color['yellow'] + " [" + mod["license"] + "]" + color['default'] data_print += color['yellow'] + " [" + mod["license"] + "]" + color['default']
if mod["version"] != []: if mod["version"] != None \
and mod["version"] != []:
version_ID = tools.version_to_string(mod["version"]) version_ID = tools.version_to_string(mod["version"])
data_print += color['blue'] + " (" + version_ID + ")" + color['default'] data_print += color['blue'] + " (" + version_ID + ")" + color['default']
""" """
@@ -106,11 +112,14 @@ def usage(full=False):
if mod["description"] != "": if mod["description"] != "":
print(" " + mod["description"]) print(" " + mod["description"])
if full == True: if full == True:
if mod["type"] != "": if mod["type"] != None \
and mod["type"] != "":
print(" Type: " + mod["type"]) print(" Type: " + mod["type"])
if mod["sub-type"] != "": if mod["sub-type"] != None \
and mod["sub-type"] != "":
print(" Sub-Type: " + mod["sub-type"]) print(" Sub-Type: " + mod["sub-type"])
if mod["version"] != []: if mod["version"] != None \
and mod["version"] != []:
version_ID = "" version_ID = ""
for id in mod["version"]: for id in mod["version"]:
if len(version_ID) != 0: if len(version_ID) != 0:
@@ -120,14 +129,19 @@ def usage(full=False):
version_ID+="." version_ID+="."
version_ID += str(id) version_ID += str(id)
print(" version: " + color['blue'] + version_ID + color['default']) print(" version: " + color['blue'] + version_ID + color['default'])
if mod["compagny-type"] != "" \ if mod["compagny-type"] != None \
and mod["compagny-name"] != None \
and mod["compagny-type"] != "" \
and mod["compagny-name"] != "": and mod["compagny-name"] != "":
print(" compagny: " + color['purple'] + mod["compagny-type"] + "/" + mod["compagny-name"] + color['default']) print(" compagny: " + color['purple'] + mod["compagny-type"] + "/" + mod["compagny-name"] + color['default'])
elif mod["compagny-name"] != "": elif mod["compagny-name"] != None \
and mod["compagny-name"] != "":
print(" compagny: " + color['purple'] + mod["compagny-name"] + color['default']) print(" compagny: " + color['purple'] + mod["compagny-name"] + color['default'])
if mod["license"] != "": if mod["license"] != None \
and mod["license"] != "":
print(" license: " + color['yellow'] + mod["license"] + color['default']) print(" license: " + color['yellow'] + mod["license"] + color['default'])
if mod["maintainer"] != []: if mod["maintainer"] != None \
and mod["maintainer"] != []:
print(" maintainers:") print(" maintainers:")
for elem in mod["maintainer"]: for elem in mod["maintainer"]:
print(" " + str(elem)) print(" " + str(elem))
@@ -178,7 +192,7 @@ def parseGenericArg(argument, active):
if active==True: if active==True:
debug.enable_color() debug.enable_color()
return True return True
elif argument.get_option_name() == "force": elif argument.get_option_name() == "force-build":
if active==True: if active==True:
env.set_force_mode(True) env.set_force_mode(True)
return True return True
@@ -270,7 +284,7 @@ for argument in localArgument:
my_target = None my_target = None
else: else:
if argument.get_option_name() != "": if argument.get_option_name() != "":
debug.warning("Can not understand argument : '" + argument.get_option_nName() + "'") debug.warning("Can not understand argument : '" + argument.get_option_name() + "'")
usage() usage()
else: else:
#load the target if needed : #load the target if needed :

View File

@@ -40,7 +40,7 @@ def resize(src_file, dest_file, x, y, cmd_file=None):
if os.path.exists(src_file) == False: if os.path.exists(src_file) == False:
debug.error("Request a resize an image that does not existed : '" + src_file + "'") debug.error("Request a resize an image that does not existed : '" + src_file + "'")
cmd_line = "resize Image : " + src_file + " ==> " + dest_file + " newSize=(" + str(x) + "x" + str(y) + ")" cmd_line = "resize Image : " + src_file + " ==> " + dest_file + " newSize=(" + str(x) + "x" + str(y) + ")"
if False==depend.need_re_build(dest_file, src_file, file_cmd=cmd_file , cmd_line=cmd_line): if depend.need_re_build(dest_file, src_file, file_cmd=cmd_file , cmd_line=cmd_line) == False:
return return
# add cmdLine ... # add cmdLine ...
x = get_pow_2_multiple(x) x = get_pow_2_multiple(x)

View File

@@ -83,17 +83,17 @@ class Module:
self.origin_path = tools.get_current_path(self.origin_file) self.origin_path = tools.get_current_path(self.origin_file)
self.local_heritage = heritage.heritage(self, None) self.local_heritage = heritage.heritage(self, None)
self.package_prop = { "COMPAGNY_TYPE" : set(""), self.package_prop = { "COMPAGNY_TYPE" : "",
"COMPAGNY_NAME" : set(""), "COMPAGNY_NAME" : "",
"COMPAGNY_NAME2" : set(""), "COMPAGNY_NAME2" : "",
"MAINTAINER" : set([]), "MAINTAINER" : [],
#"ICON" : set(""), #"ICON" : set(""),
"SECTION" : set([]), "SECTION" : [],
"PRIORITY" : set(""), "PRIORITY" : "",
"DESCRIPTION" : set(""), "DESCRIPTION" : "",
"VERSION" : [0,0,0], "VERSION" : [0,0,0],
"VERSION_CODE" : "", "VERSION_CODE" : "",
"NAME" : set("no-name"), # name of the application "NAME" : "no-name", # name of the application
"ANDROID_MANIFEST" : "", # By default generate the manifest "ANDROID_MANIFEST" : "", # By default generate the manifest
"ANDROID_RESOURCES" : [], "ANDROID_RESOURCES" : [],
"ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET" "ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET"
@@ -135,9 +135,10 @@ class Module:
"-Wreturn-type", "-Wreturn-type",
#"-Wint-to-pointer-cast", #"-Wint-to-pointer-cast",
"-Wno-write-strings", "-Wno-write-strings",
"-Woverloaded-virtual",
"-Wnon-virtual-dtor",
"-Wno-unused-variable"]); "-Wno-unused-variable"]);
self.compile_flags('c++', [
"-Woverloaded-virtual",
"-Wnon-virtual-dtor"]);
#only for gcc : "-Wunused-variable", "-Wunused-but-set-variable", #only for gcc : "-Wunused-variable", "-Wunused-but-set-variable",
## ##
@@ -476,11 +477,13 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_lib_static(res_file) self.local_heritage.add_lib_static(res_file)
except ValueError: except ValueError:
debug.error(" UN-SUPPORTED link format: '.a'") debug.error(" UN-SUPPORTED link format: '.a'")
if target.support_dynamic_link == True:
if self.type == 'LIBRARY' \ if self.type == 'LIBRARY' \
or self.type == 'LIBRARY_DYNAMIC': or self.type == 'LIBRARY_DYNAMIC':
try: try:
@@ -491,6 +494,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_lib_dynamic(res_file) self.local_heritage.add_lib_dynamic(res_file)
@@ -504,6 +508,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_lib_interpreted('java', res_file) self.local_heritage.add_lib_interpreted('java', res_file)
@@ -513,7 +518,7 @@ class Module:
or self.type == 'BINARY_SHARED' \ or self.type == 'BINARY_SHARED' \
or self.type == 'BINARY_STAND_ALONE': or self.type == 'BINARY_STAND_ALONE':
shared_mode = False shared_mode = False
if target.name=="Android": if target.name == "Android":
debug.warning("Android mode ...") debug.warning("Android mode ...")
# special case for android ... # special case for android ...
for elem in self.sub_heritage_list.src['src']: for elem in self.sub_heritage_list.src['src']:
@@ -523,6 +528,7 @@ class Module:
shared_mode = True shared_mode = True
break; break;
static_mode = True static_mode = True
if target.support_dynamic_link == True:
if self.type == 'BINARY_SHARED': if self.type == 'BINARY_SHARED':
static_mode = False static_mode = False
if shared_mode == True: if shared_mode == True:
@@ -533,6 +539,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path, basic_path = self.origin_path,
static = static_mode) static = static_mode)
@@ -547,6 +554,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_sources(res_file) self.local_heritage.add_sources(res_file)
@@ -559,13 +567,14 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path, basic_path = self.origin_path,
static = static_mode) static = static_mode)
except ValueError: except ValueError:
debug.error(" UN-SUPPORTED link format: '.bin'") debug.error(" UN-SUPPORTED link format: '.bin'")
elif self.type == "PACKAGE": elif self.type == "PACKAGE":
if target.name=="Android": if target.name == "Android":
# special case for android wrapper: # special case for android wrapper:
try: try:
tmp_builder = builder.get_builder_with_output("so"); tmp_builder = builder.get_builder_with_output("so");
@@ -574,6 +583,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = "lib" + self.name, name = "lib" + self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_sources(res_file) self.local_heritage.add_sources(res_file)
@@ -587,6 +597,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
self.local_heritage.add_sources(res_file) self.local_heritage.add_sources(res_file)
@@ -599,6 +610,7 @@ class Module:
package_name, package_name,
target, target,
self.sub_heritage_list, self.sub_heritage_list,
flags = self.flags,
name = self.name, name = self.name,
basic_path = self.origin_path) basic_path = self.origin_path)
except ValueError: except ValueError:
@@ -1040,7 +1052,7 @@ def get_module_option(the_module, name):
if "get_type" in dir(the_module): if "get_type" in dir(the_module):
type = the_module.get_type() type = the_module.get_type()
else: else:
debug.debug(" fundtion get_type() must be provided in the module: " + name) debug.debug(" function get_type() must be provided in the module: " + name)
if "get_sub_type" in dir(the_module): if "get_sub_type" in dir(the_module):
sub_type = the_module.get_sub_type() sub_type = the_module.get_sub_type()

View File

@@ -134,6 +134,8 @@ class Target:
self.pkg_path_readme_file = "readme.txt" self.pkg_path_readme_file = "readme.txt"
self.pkg_path_change_log_file = "changelog.txt" self.pkg_path_change_log_file = "changelog.txt"
# special case for IOS (example) no build dynamicly ...
self.support_dynamic_link = True
def update_path_tree(self): def update_path_tree(self):
self.path_out = os.path.join("out", self.name + "_" + self.config["arch"] + "_" + self.config["bus-size"], self.config["mode"]) self.path_out = os.path.join("out", self.name + "_" + self.config["arch"] + "_" + self.config["bus-size"], self.config["mode"])
@@ -142,6 +144,9 @@ class Target:
self.path_build = os.path.join("build", self.config["compilator"]) self.path_build = os.path.join("build", self.config["compilator"])
def create_number_from_version_string(self, data): def create_number_from_version_string(self, data):
tmp_data = data.split("-")
if len(tmp_data) > 1:
data = tmp_data[0]
list = data.split(".") list = data.split(".")
if len(list) == 1: if len(list) == 1:
list.append("0") list.append("0")
@@ -528,9 +533,9 @@ class Target:
return return
if module.get_type() == 'BINARY' \ if module.get_type() == 'BINARY' \
or module.get_type() == 'BINARY_STAND_ALONE': or module.get_type() == 'BINARY_STAND_ALONE':
self.make_package_generic_binary(pkg_name, pkg_properties, base_pkg_path, heritage_list, static = True) self.make_package_binary(pkg_name, pkg_properties, base_pkg_path, heritage_list, static = True)
if module.get_type() == 'BINARY_SHARED': if module.get_type() == 'BINARY_SHARED':
self.make_package_generic_binary(pkg_name, pkg_properties, base_pkg_path, heritage_list, static = False) self.make_package_binary(pkg_name, pkg_properties, base_pkg_path, heritage_list, static = False)
if module.get_type() == 'PACKAGE': if module.get_type() == 'PACKAGE':
debug.info("Can not create package for package"); debug.info("Can not create package for package");
return return

View File

@@ -50,6 +50,8 @@ def remove_path_and_sub_path(path):
def remove_file(path): def remove_file(path):
if os.path.isfile(path): if os.path.isfile(path):
os.remove(path) os.remove(path)
elif os.path.islink(path):
os.remove(path)
def file_size(path): def file_size(path):
if not os.path.isfile(path): if not os.path.isfile(path):
@@ -91,6 +93,7 @@ def file_write_data(path, data, only_if_new=False):
if old_data == data: if old_data == data:
return return
#real write of data: #real write of data:
create_directory_of_file(path)
file = open(path, "w") file = open(path, "w")
file.write(data) file.write(data)
file.close() file.close()

View File

@@ -40,7 +40,7 @@ def get_output_type():
## ##
## @brief Commands for running gcc to link an executable. ## @brief Commands for running gcc to link an executable.
## ##
def link(file, binary, target, depancy, name, basic_path, static = False): def link(file, binary, target, depancy, flags, name, basic_path, static = False):
file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "bin") file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "bin")
debug.extreme_verbose("list files = " + str(depancy.src)) debug.extreme_verbose("list files = " + str(depancy.src))
list_static = [] list_static = []

View File

@@ -38,7 +38,7 @@ def get_output_type():
## ##
## @brief Commands for running gcc to link a shared library. ## @brief Commands for running gcc to link a shared library.
## ##
def link(file, binary, target, depancy, name, basic_path): def link(file, binary, target, depancy, flags, name, basic_path):
file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "jar") file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "jar")
#create command Line #create command Line
cmd = [ cmd = [

View File

@@ -38,7 +38,7 @@ def get_output_type():
## ##
## @brief Commands for running gcc to link a shared library. ## @brief Commands for running gcc to link a shared library.
## ##
def link(file, binary, target, depancy, name, basic_path, static=False): def link(file, binary, target, depancy, flags, name, basic_path, static=False):
file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "lib-shared") file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "lib-shared")
list_static = [] list_static = []
list_dynamic = [] list_dynamic = []
@@ -101,6 +101,10 @@ def link(file, binary, target, depancy, name, basic_path, static=False):
cmd.append(flags["local"]["link"]) cmd.append(flags["local"]["link"])
except: except:
pass pass
try:
cmd.append(flags["export"]["link"])
except:
pass
try: try:
cmd.append(depancy.flags["link"]) cmd.append(depancy.flags["link"])
except: except:
@@ -123,6 +127,12 @@ def link(file, binary, target, depancy, name, basic_path, static=False):
# get the file size of the non strip file # get the file size of the non strip file
originSize = tools.file_size(file_dst); originSize = tools.file_size(file_dst);
debug.print_element("SharedLib(strip)", name, "", "") debug.print_element("SharedLib(strip)", name, "", "")
if target.name == "MacOs":
cmdLineStrip=tools.list_to_str([
target.strip,
"-u",
file_dst])
else:
cmdLineStrip=tools.list_to_str([ cmdLineStrip=tools.list_to_str([
target.strip, target.strip,
file_dst]) file_dst])

View File

@@ -38,7 +38,7 @@ def get_output_type():
## ##
## @brief Commands for running ar. ## @brief Commands for running ar.
## ##
def link(file, binary, target, depancy, name, basic_path): def link(file, binary, target, depancy, flags, name, basic_path):
file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "lib-static") file_src, file_dst, file_depend, file_cmd, file_warning = target.generate_file(binary, name, basic_path, file, "lib-static")
#$(Q)$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $(PRIVATE_ALL_OBJECTS) #$(Q)$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $(PRIVATE_ALL_OBJECTS)
cmd = [ cmd = [

View File

@@ -87,19 +87,35 @@ class Target(target.Target):
self.pkg_path_lib = "data/lib/armeabi" self.pkg_path_lib = "data/lib/armeabi"
self.pkg_path_license = "license" self.pkg_path_license = "license"
# board id at 15 is for android 4.0.3 and more ... (note: API 14 has been removed ...) # If the env variable is not define, find the newest version of the BOARD_ID (Note: 0: autofind)
self.boardId = 15 self.board_id = int(os.getenv('PROJECT_NDK_BOARD_ID', "0"))
self.global_flags_cc.append("-D__ANDROID_BOARD_ID__=" + str(self.boardId)) if self.board_id != 0:
# check if element existed :
if not os.path.isdir(self.path_ndk +"/platforms/android-" + str(self.board_id)):
debug.error("Specify PROJECT_NDK_BOARD_ID env variable and the BOARD_ID does not exit ... : " + str(self.board_id) + "==> auto-search")
self.board_id = 0
if self.board_id == 0:
debug.debug("Auto-search BOARD-ID")
for iii in reversed(range(0, 50)):
debug.debug("try: " + self.path_ndk +"/platforms/android-" + str(iii))
if os.path.isdir(self.path_ndk +"/platforms/android-" + str(iii)):
debug.debug("Find BOARD-ID : " + str(iii))
self.board_id = iii
break;
if self.board_id == 0:
debug.error("Can not find BOARD-ID ==> update your android SDK")
self.global_flags_cc.append("-D__ANDROID_BOARD_ID__=" + str(self.board_id))
if arch == "armv5" or arch == "armv7": if arch == "armv5" or arch == "armv7":
self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.boardId) + "/arch-arm/usr/include/") self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.board_id) + "/arch-arm/usr/include/")
elif arch == "mips": elif arch == "mips":
self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.boardId) + "/arch-mips/usr/include/") self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.board_id) + "/arch-mips/usr/include/")
elif arch == "x86": elif arch == "x86":
self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.boardId) + "/arch-x86/usr/include/") self.global_include_cc.append("-I" + self.path_ndk +"/platforms/android-" + str(self.board_id) + "/arch-x86/usr/include/")
if True: if True:
if self.config["compilator"] == "clang": if self.config["compilator"] == "clang":
if self.boardId < 21: if self.board_id < 21:
debug.error("Clang work only with the board wersion >= 21 : android 5.x.x") debug.error("Clang work only with the board wersion >= 21 : android 5.x.x")
self.global_flags_cc.append("-D__STDCPP_LLVM__") self.global_flags_cc.append("-D__STDCPP_LLVM__")
# llvm-libc++ : BSD | MIT # llvm-libc++ : BSD | MIT
@@ -158,9 +174,9 @@ class Target(target.Target):
else : else :
self.global_include_cc.append("-I" + self.path_ndk +"/sources/cxx-stl/system/include/") self.global_include_cc.append("-I" + self.path_ndk +"/sources/cxx-stl/system/include/")
self.global_include_cc.append("-I" + self.path_ndk +"/sources/cxx-stl/stlport/stlport/") self.global_include_cc.append("-I" + self.path_ndk +"/sources/cxx-stl/stlport/stlport/")
self.global_flags_ld.append(self.path_ndk +"/platforms/android-" + str(self.boardId) + "/arch-arm/usr/lib/libstdc++.a") self.global_flags_ld.append(self.path_ndk +"/platforms/android-" + str(self.board_id) + "/arch-arm/usr/lib/libstdc++.a")
self.global_sysroot = "--sysroot=" + self.path_ndk +"/platforms/android-" + str(self.boardId) + "/arch-arm" self.global_sysroot = "--sysroot=" + self.path_ndk +"/platforms/android-" + str(self.board_id) + "/arch-arm"
self.global_flags_cc.append("-D__ARM_ARCH_5__") self.global_flags_cc.append("-D__ARM_ARCH_5__")
self.global_flags_cc.append("-D__ARM_ARCH_5T__") self.global_flags_cc.append("-D__ARM_ARCH_5T__")
@@ -213,7 +229,7 @@ class Target(target.Target):
return self.get_staging_path(binary_name) + self.path_data return self.get_staging_path(binary_name) + self.path_data
""" """
def make_package_generic_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static): def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"])) debug.info("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
@@ -266,16 +282,27 @@ class Target(target.Target):
pkg_name_application_name = pkg_name pkg_name_application_name = pkg_name
if self.config["mode"] == "debug": if self.config["mode"] == "debug":
pkg_name_application_name += "debug" pkg_name_application_name += "debug"
debug.info("ploppppp: " + str(pkg_properties))
# FINAL_path_JAVA_PROJECT # FINAL_path_JAVA_PROJECT
self.path_java_project = os.path.join(target_outpath, self.path_java_project = os.path.join(target_outpath,
"src", "src")
pkg_properties["COMPAGNY_TYPE"], if pkg_properties["COMPAGNY_TYPE"] != "":
pkg_properties["COMPAGNY_NAME2"], self.path_java_project = os.path.join(self.path_java_project,
pkg_properties["COMPAGNY_TYPE"])
if pkg_properties["COMPAGNY_NAME2"] != "":
self.path_java_project = os.path.join(self.path_java_project,
pkg_properties["COMPAGNY_NAME2"])
self.path_java_project = os.path.join(self.path_java_project,
pkg_name_application_name) pkg_name_application_name)
#FINAL_FILE_ABSTRACTION #FINAL_FILE_ABSTRACTION
self.file_final_abstraction = os.path.join(self.path_java_project, pkg_name_application_name + ".java") self.file_final_abstraction = os.path.join(self.path_java_project, pkg_name_application_name + ".java")
compleatePackageName = pkg_properties["COMPAGNY_TYPE"]+"."+pkg_properties["COMPAGNY_NAME2"]+"." + pkg_name_application_name compleatePackageName = ""
if pkg_properties["COMPAGNY_TYPE"] != "":
compleatePackageName += pkg_properties["COMPAGNY_TYPE"] + "."
if pkg_properties["COMPAGNY_NAME2"] != "":
compleatePackageName += pkg_properties["COMPAGNY_NAME2"] + "."
compleatePackageName += pkg_name_application_name
if "ADMOD_ID" in pkg_properties: if "ADMOD_ID" in pkg_properties:
pkg_properties["RIGHT"].append("INTERNET") pkg_properties["RIGHT"].append("INTERNET")
@@ -335,7 +362,7 @@ class Target(target.Target):
cmdLine = androidToolPath + "aapt p -f " \ cmdLine = androidToolPath + "aapt p -f " \
+ "-M " + target_outpath + "/AndroidManifest.xml " \ + "-M " + target_outpath + "/AndroidManifest.xml " \
+ "-F " + target_outpath + "/resources.res " \ + "-F " + target_outpath + "/resources.res " \
+ "-I " + self.path_sdk + "/platforms/android-" + str(self.boardId) + "/android.jar "\ + "-I " + self.path_sdk + "/platforms/android-" + str(self.board_id) + "/android.jar "\
+ "-S " + target_outpath + "/res/ " \ + "-S " + target_outpath + "/res/ " \
+ adModResoucepath \ + adModResoucepath \
+ "-J " + target_outpath + "/src/ " + "-J " + target_outpath + "/src/ "
@@ -360,7 +387,7 @@ class Target(target.Target):
cmdLine = "javac " \ cmdLine = "javac " \
+ "-d " + self.get_staging_path(pkg_name) + "/build/classes " \ + "-d " + self.get_staging_path(pkg_name) + "/build/classes " \
+ "-classpath " + self.path_sdk + "/platforms/android-" + str(self.boardId) + "/android.jar" \ + "-classpath " + self.path_sdk + "/platforms/android-" + str(self.board_id) + "/android.jar" \
+ adModJarFile + " " \ + adModJarFile + " " \
+ filesString \ + filesString \
+ self.file_final_abstraction + " " \ + self.file_final_abstraction + " " \

View File

@@ -82,6 +82,8 @@ class Target(target.Target):
self.pkg_path_lib = "lib" self.pkg_path_lib = "lib"
self.pkg_path_license = "license" self.pkg_path_license = "license"
# Disable capabiliteis to compile in shared mode
self.support_dynamic_link = False
def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static): def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
@@ -109,23 +111,23 @@ class Target(target.Target):
# Resize all icon needed for Ios ... # Resize all icon needed for Ios ...
# TODO : Do not regenerate if source resource is not availlable # TODO : Do not regenerate if source resource is not availlable
# TODO : Add a colored background ... # TODO : Add a colored background ...
debug.print_element("pkg", "iTunesArtwork.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "iTunesArtwork.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "iTunesArtwork.png"), 512, 512) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "iTunesArtwork.png"), 512, 512)
debug.print_element("pkg", "iTunesArtwork@2x.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "iTunesArtwork@2x.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "iTunesArtwork@2x.png"), 1024, 1024) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "iTunesArtwork@2x.png"), 1024, 1024)
debug.print_element("pkg", "Icon-60@2x.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-60@2x.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-60@2x.png"), 120, 120) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-60@2x.png"), 120, 120)
debug.print_element("pkg", "Icon-76.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-76.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-76.png"), 76, 76) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-76.png"), 76, 76)
debug.print_element("pkg", "Icon-76@2x.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-76@2x.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-76@2x.png"), 152, 152) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-76@2x.png"), 152, 152)
debug.print_element("pkg", "Icon-Small-40.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-Small-40.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small-40.png"), 40, 40) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small-40.png"), 40, 40)
debug.print_element("pkg", "Icon-Small-40@2x.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-Small-40@2x.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small-40@2x.png"), 80, 80) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small-40@2x.png"), 80, 80)
debug.print_element("pkg", "Icon-Small.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-Small.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small.png"), 29, 29) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small.png"), 29, 29)
debug.print_element("pkg", "Icon-Small@2x.png", "<==", pkg_properties["ICON"]) debug.print_element("pkg", os.path.relpath(pkg_properties["ICON"]), "==>", "Icon-Small@2x.png")
image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small@2x.png"), 58, 58) image.resize(pkg_properties["ICON"], os.path.join(target_outpath, "Icon-Small@2x.png"), 58, 58)
## Create the info file: ## Create the info file:
@@ -177,9 +179,9 @@ class Target(target.Target):
data_file += " </array>\n" data_file += " </array>\n"
data_file += " \n" data_file += " \n"
data_file += " <key>CFBundleShortVersionString</key>\n" data_file += " <key>CFBundleShortVersionString</key>\n"
data_file += " <string>"+pkg_properties["VERSION"]+"</string>\n" data_file += " <string>"+tools.version_to_string(pkg_properties["VERSION"])+"</string>\n"
data_file += " <key>CFBundleVersion</key>\n" data_file += " <key>CFBundleVersion</key>\n"
data_file += " <string>"+pkg_properties["VERSION_CODE"]+"</string>\n" data_file += " <string>"+str(pkg_properties["VERSION_CODE"])+"</string>\n"
data_file += " \n" data_file += " \n"
data_file += " <key>CFBundleResourceSpecification</key>\n" data_file += " <key>CFBundleResourceSpecification</key>\n"
data_file += " <string>ResourceRules.plist</string>\n" data_file += " <string>ResourceRules.plist</string>\n"
@@ -312,8 +314,10 @@ class Target(target.Target):
# Must create the tarball of the application # Must create the tarball of the application
#cd $(TARGET_OUT_FINAL)/; tar -cf $(PROJECT_NAME).tar $(PROJECT_NAME).app #cd $(TARGET_OUT_FINAL)/; tar -cf $(PROJECT_NAME).tar $(PROJECT_NAME).app
#cd $(TARGET_OUT_FINAL)/; tar -czf $(PROJECT_NAME).tar.gz $(PROJECT_NAME).app #cd $(TARGET_OUT_FINAL)/; tar -czf $(PROJECT_NAME).tar.gz $(PROJECT_NAME).app
if self.sumulator == False: if self.sumulator == False:
if "APPLE_APPLICATION_IOS_ID" not in pkg_properties:
pkg_properties["APPLE_APPLICATION_IOS_ID"] = "00000000"
debug.warning("Missing package property : APPLE_APPLICATION_IOS_ID USE " + pkg_properties["APPLE_APPLICATION_IOS_ID"] + " ID ... ==> CAN NOT WORK ..." )
# Create the info file # Create the info file
tmpFile = open(os.path.join(target_outpath, pkg_name + ".xcent"), 'w') tmpFile = open(os.path.join(target_outpath, pkg_name + ".xcent"), 'w')
tmpFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") tmpFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
@@ -321,15 +325,12 @@ class Target(target.Target):
tmpFile.write("<plist version=\"1.0\">\n") tmpFile.write("<plist version=\"1.0\">\n")
tmpFile.write(" <dict>\n") tmpFile.write(" <dict>\n")
tmpFile.write(" <key>application-identifier</key>\n") tmpFile.write(" <key>application-identifier</key>\n")
try:
tmpFile.write(" <string>" + pkg_properties["APPLE_APPLICATION_IOS_ID"] + "." + pkg_properties["COMPAGNY_TYPE"] + "." + pkg_properties["COMPAGNY_NAME2"] + "." + pkg_name + "</string>\n") tmpFile.write(" <string>" + pkg_properties["APPLE_APPLICATION_IOS_ID"] + "." + pkg_properties["COMPAGNY_TYPE"] + "." + pkg_properties["COMPAGNY_NAME2"] + "." + pkg_name + "</string>\n")
except:
debug.error("Missing package property : APPLE_APPLICATION_IOS_ID")
tmpFile.write(" <key>get-task-allow</key>\n") tmpFile.write(" <key>get-task-allow</key>\n")
tmpFile.write(" <true/>\n") tmpFile.write(" <true/>\n")
tmpFile.write(" <key>keychain-access-groups</key>\n") tmpFile.write(" <key>keychain-access-groups</key>\n")
tmpFile.write(" <array>\n") tmpFile.write(" <array>\n")
tmpFile.write(" <string>" + pkg_properties["APPLE_APPLICATION_IOS_ID"] + ".atriasoft.worddown</string>\n") tmpFile.write(" <string>" + pkg_properties["APPLE_APPLICATION_IOS_ID"] + "." + pkg_properties["COMPAGNY_TYPE"] + "." + pkg_properties["COMPAGNY_NAME2"] + "." + pkg_name + "</string>\n")
tmpFile.write(" </array>\n") tmpFile.write(" </array>\n")
tmpFile.write(" </dict>\n") tmpFile.write(" </dict>\n")
tmpFile.write("</plist>\n") tmpFile.write("</plist>\n")
@@ -339,7 +340,9 @@ class Target(target.Target):
debug.print_element("pkg(signed)", "pkg", "<==", "Signing application") debug.print_element("pkg(signed)", "pkg", "<==", "Signing application")
iosDevelopperKeyFile = ".iosKey.txt" iosDevelopperKeyFile = ".iosKey.txt"
if tools.file_size(iosDevelopperKeyFile) < 10: if tools.file_size(iosDevelopperKeyFile) < 10:
debug.error("To sign an application we need to have a signing key in the file '" + iosDevelopperKeyFile + "' \n it is represented like: 'iPhone Developer: Francis DUGENOUX (YRRQE5KGTH)'\n you can obtain it with : 'certtool y | grep \"Developer\"'") debug.warning("To sign an application we need to have a signing key in the file '" + iosDevelopperKeyFile + "' \n it is represented like: 'iPhone Developer: Francis DUGENOUX (YRRQE5KGTH)'\n you can obtain it with : 'certtool y | grep \"Developer\"'")
debug.warning("Can not be install ... not runnable")
else:
signatureKey = tools.file_read_data(iosDevelopperKeyFile) signatureKey = tools.file_read_data(iosDevelopperKeyFile)
signatureKey = re.sub('\n', '', signatureKey) signatureKey = re.sub('\n', '', signatureKey)
cmdLine = 'codesign --force --sign ' cmdLine = 'codesign --force --sign '
@@ -349,12 +352,6 @@ class Target(target.Target):
cmdLine += ' ' + self.get_staging_path(pkg_name) cmdLine += ' ' + self.get_staging_path(pkg_name)
multiprocess.run_command(cmdLine) multiprocess.run_command(cmdLine)
# --force --sign "iPhone Developer: Edouard DUPIN (SDFGSDFGSDFG)"
# --resource-rules=/Users/edouarddupin/Library/Developer/Xcode/DerivedData/worddown-cmuvjchgtiteexdiacyqoexsyadg/Build/Products/Debug-iphoneos/worddown.app/ResourceRules.plist
# --entitlements /Users/edouarddupin/Library/Developer/Xcode/DerivedData/worddown-cmuvjchgtiteexdiacyqoexsyadg/Build/Intermediates/worddown.build/Debug-iphoneos/worddown.build/worddown.xcent
# /Users/edouarddupin/Library/Developer/Xcode/DerivedData/worddown-cmuvjchgtiteexdiacyqoexsyadg/Build/Products/Debug-iphoneos/worddown.app
def createRandomNumber(self, len): def createRandomNumber(self, len):
out = "" out = ""
for iii in range(0,len): for iii in range(0,len):

View File

@@ -73,7 +73,7 @@ class Target(target.Target):
* *--> YY * *--> YY
*--> sources *--> sources
""" """
def make_package_generic_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static): def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Generate generic '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"])) debug.info("Generate generic '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
@@ -94,221 +94,50 @@ class Target(target.Target):
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## create the package: ## create the package:
debug.debug("package : " + self.get_staging_path(pkg_name) + "/" + pkg_name + ".app.pkg") debug.debug("package : " + os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.pkg"))
os.system("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app") os.system("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
#multiprocess.run_command("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app") #multiprocess.run_command("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
tools.create_directory_of_file(self.get_final_path()) tools.create_directory_of_file(self.get_final_path())
tools.copy_file(self.get_staging_path(pkg_name) + "/" + pkg_name + ".app.tar.gz", self.get_final_path() + "/" + pkg_name + ".app.gpkg") tools.copy_file(os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.tar.gz"), os.path.join(self.get_final_path(), pkg_name + ".app.gpkg"))
def make_package_debian(self, pkg_name, pkg_properties, base_pkg_path, heritage_list):
# http://alp.developpez.com/tutoriels/debian/creer-paquet/
debianpkg_name = re.sub("_", "-", pkg_name)
debug.debug("------------------------------------------------------------------------")
debug.info("Generate package '" + debianpkg_name + "' v"+pkg_properties["VERSION"])
debug.debug("------------------------------------------------------------------------")
self.get_staging_path(pkg_name)
target_outpathDebian = self.get_staging_path(pkg_name) + "/DEBIAN/"
finalFileControl = target_outpathDebian + "control"
finalFilepostRm = target_outpathDebian + "postrm"
# create the paths :
tools.create_directory_of_file(finalFileControl)
tools.create_directory_of_file(finalFilepostRm)
## Create the control file
tools.create_directory_of_file(finalFileControl)
tmpFile = open(finalFileControl, 'w')
tmpFile.write("Package: " + debianpkg_name + "\n")
tmpFile.write("Version: " + pkg_properties["VERSION"] + "\n")
tmpFile.write("Section: " + self.generate_list_separate_coma(pkg_properties["SECTION"]) + "\n")
tmpFile.write("Priority: " + pkg_properties["PRIORITY"] + "\n")
tmpFile.write("Architecture: all\n")
tmpFile.write("Depends: bash\n")
tmpFile.write("Maintainer: " + self.generate_list_separate_coma(pkg_properties["MAINTAINER"]) + "\n")
tmpFile.write("Description: " + pkg_properties["DESCRIPTION"] + "\n")
tmpFile.write("\n")
tmpFile.flush()
tmpFile.close()
## Create the PostRm
tmpFile = open(finalFilepostRm, 'w')
tmpFile.write("#!/bin/bash\n")
tmpFile.write("touch ~/." + pkg_name + "\n")
if pkg_name != "":
tmpFile.write("touch ~/.local/share/" + pkg_name + "\n")
tmpFile.write("rm -r ~/.local/share/" + pkg_name + "\n")
tmpFile.write("\n")
tmpFile.flush()
tmpFile.close()
## Enable Execution in script
os.chmod(finalFilepostRm, stat.S_IRWXU + stat.S_IRGRP + stat.S_IXGRP + stat.S_IROTH + stat.S_IXOTH);
## Readme donumentation
readmeFileDest = self.get_staging_path(pkg_name) + "/usr/share/doc/"+ debianpkg_name + "/README"
tools.create_directory_of_file(readmeFileDest)
if os.path.exists(base_pkg_path + "/os-Linux/README")==True:
tools.copy_file(base_pkg_path + "/os-Linux/README", readmeFileDest)
elif os.path.exists(base_pkg_path + "/README")==True:
tools.copy_file(base_pkg_path + "/README", readmeFileDest)
elif os.path.exists(base_pkg_path + "/README.md")==True:
tools.copy_file(base_pkg_path + "/README.md", readmeFileDest)
else:
debug.info("no file 'README', 'README.md' or 'os-Linux/README' ==> generate an empty one")
tmpFile = open(readmeFileDest, 'w')
tmpFile.write("No documentation for " + pkg_name + "\n")
tmpFile.flush()
tmpFile.close()
## licence file
license_file_dest = self.get_staging_path(pkg_name) + "/usr/share/doc/"+ debianpkg_name + "/copyright"
tools.create_directory_of_file(license_file_dest)
if os.path.exists(base_pkg_path + "/license.txt")==True:
tools.copy_file(base_pkg_path + "/license.txt", license_file_dest)
else:
debug.info("no file 'license.txt' ==> generate an empty one")
tmpFile = open(license_file_dest, 'w')
tmpFile.write("No license define by the developper for " + pkg_name + "\n")
tmpFile.flush()
tmpFile.close()
##changeLog file
change_log_file_dest = self.get_staging_path(pkg_name) + "/usr/share/doc/"+ debianpkg_name + "/changelog"
tools.create_directory_of_file(change_log_file_dest)
if os.path.exists(base_pkg_path + "/changelog")==True:
tools.copy_file(base_pkg_path + "/changelog", change_log_file_dest)
else:
debug.info("no file 'changelog' ==> generate an empty one")
tmpFile = open(change_log_file_dest, 'w')
tmpFile.write("No changelog data " + pkg_name + "\n")
tmpFile.flush()
tmpFile.close()
## create the package :
debug.debug("package : " + self.get_staging_path(pkg_name) + "/" + debianpkg_name + ".deb")
os.system("cd " + self.get_staging_path("") + " ; dpkg-deb --build " + pkg_name)
tools.create_directory_of_file(self.get_final_path())
tools.copy_file(self.get_staging_path("") + "/" + pkg_name + self.suffix_package, self.get_final_path() + "/" + pkg_name + self.suffix_package)
def install_package(self, pkg_name): def install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Install package '" + pkg_name + "'") debug.info("Install package '" + pkg_name + "'")
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
os.system("sudo dpkg -i " + self.get_final_path() + "/" + pkg_name + self.suffix_package) # this is temporary ... Will call:
if False:
os.system("lutin-pkg -i " + os.path.join(self.get_final_path(), + pkg_name + ".app.gpkg"))
else:
#Copy directly from staging path:
appl_path = os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app")
target_path = os.path.join(os.path.expanduser("~"), ".local", "application", pkg_name + ".app")
target_bin_path = os.path.join(os.path.expanduser("~"), ".local", "application", pkg_name + ".app", "bin", pkg_name)
target_bin_link = os.path.join(os.path.expanduser("~"), ".local", "application", pkg_name)
# remove output path:
tools.remove_path_and_sub_path(target_path)
# remove executable link version:
tools.remove_file(target_bin_link)
# copy result:
tools.copy_anything(appl_path, target_path, recursive=True)
# create synbolic link:
debug.info("kkk " + "ln -s " + target_bin_path + " " + target_bin_link)
os.symlink(target_bin_path, target_bin_link)
def un_install_package(self, pkg_name): def un_install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Un-Install package '" + pkg_name + "'") debug.info("Un-Install package '" + pkg_name + "'")
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
os.system("sudo dpkg -r " + self.get_final_path() + "/" + pkg_name + self.suffix_package) # this is temporary ... Will call:
if False:
""" os.system("lutin-pkg -r " + pkg_name)
.local/application
*--> applName -> applName.app/bin/applName
*--> applName.app
*--> appl_description.txt
*--> appl_name.txt
*--> changelog.txt
*--> copyright.txt
*--> readme.txt
*--> version.txt
*--> website.txt
*--> icon.png
*--> bin
* *--> applName
*--> doc
* *--> applName
*--> lib
* *--> XX.so
* *--> YY.so
*--> license
* *--> applName.txt
* *--> libXX.txt
* *--> libYY.txt
*--> man
*--> share
* *--> applName
* *--> XX
* *--> YY
*--> sources
"""
def make_package_generic(self, pkg_name, pkg_properties, base_pkg_path, heritage_list):
debug.warning("heritage for " + str(pkg_name) + ":")
for heritage in heritage_list.list_heritage:
debug.warning("heritage .... " + str(heritage.name) + " : " + str(heritage.depends))
debianpkg_name = re.sub("_", "-", pkg_name)
debug.debug("------------------------------------------------------------------------")
debug.info("Generate generic '" + debianpkg_name + "' v"+pkg_properties["VERSION"])
debug.debug("------------------------------------------------------------------------")
target_outpath = self.get_staging_path(pkg_name) + "/edn.app/"
tools.create_directory_of_file(target_outpath)
## Create version file
tmpFile = open(target_outpath + "/version.txt", 'w')
tmpFile.write(pkg_properties["VERSION"])
tmpFile.flush()
tmpFile.close()
## Create maintainer file
tmpFile = open(target_outpath + "/maintainer.txt", 'w')
tmpFile.write(self.generate_list_separate_coma(pkg_properties["MAINTAINER"]))
tmpFile.flush()
tmpFile.close()
## Create appl_name file
tmpFile = open(target_outpath + "/appl_name.txt", 'w')
tmpFile.write("en_EN:" + pkg_properties["NAME"])
tmpFile.flush()
tmpFile.close()
## Create appl_description file
tmpFile = open(target_outpath + "/appl_description.txt", 'w')
tmpFile.write("en_EN:" + pkg_properties["DESCRIPTION"])
tmpFile.flush()
tmpFile.close()
## Create Readme file
readmeFileDest = target_outpath + "/readme.txt"
if os.path.exists(base_pkg_path + "/os-Linux/README")==True:
tools.copy_file(base_pkg_path + "/os-Linux/README", readmeFileDest)
elif os.path.exists(base_pkg_path + "/README")==True:
tools.copy_file(base_pkg_path + "/README", readmeFileDest)
elif os.path.exists(base_pkg_path + "/README.md")==True:
tools.copy_file(base_pkg_path + "/README.md", readmeFileDest)
else: else:
debug.info("no file 'README', 'README.md' or 'os-Linux/README' ==> generate an empty one") #Copy directly from staging path:
tmpFile = open(readmeFileDest, 'w') target_path = os.path.join(os.path.expanduser("~"), ".local", "application", pkg_name + ".app")
tmpFile.write("No documentation for " + pkg_name + "\n") target_bin_link = os.path.join(os.path.expanduser("~"), ".local", "application", pkg_name)
tmpFile.flush() # remove output path:
tmpFile.close() tools.remove_path_and_sub_path(target_path)
## Create licence file # remove executable link version:
license_file_dest = target_outpath + "/license/"+ debianpkg_name + ".txt" tools.remove_file(target_bin_link)
tools.create_directory_of_file(license_file_dest)
if os.path.exists(base_pkg_path + "/license.txt")==True:
tools.copy_file(base_pkg_path + "/license.txt", license_file_dest)
else:
debug.info("no file 'license.txt' ==> generate an empty one")
tmpFile = open(license_file_dest, 'w')
tmpFile.write("No license define by the developper for " + pkg_name + "\n")
tmpFile.flush()
tmpFile.close()
## Create changeLog file
change_log_file_dest = target_outpath + "/changelog.txt"
if os.path.exists(base_pkg_path + "/changelog") == True:
tools.copy_file(base_pkg_path + "/changelog", change_log_file_dest)
else:
debug.info("no file 'changelog' ==> generate an empty one")
tmpFile = open(change_log_file_dest, 'w')
tmpFile.write("No changelog data " + pkg_name + "\n")
tmpFile.flush()
tmpFile.close()
## copy share path
#debug.info("plop:" + self.get_staging_path(pkg_name) + self.path_data)
if os.path.exists(self.get_staging_path(pkg_name) + self.path_data) == True:
tools.copy_anything(self.get_staging_path(pkg_name) + self.path_data + "/*", target_outpath + self.path_data, recursive=True)
## Create binary path:
bin_path = target_outpath + self.path_bin
#tools.create_directory_of_file(bin_path)
tools.copy_anything(self.get_staging_path(pkg_name) + self.path_bin + "/*",
bin_path)
## create the package:
debug.debug("package : " + self.get_staging_path(pkg_name) + "/" + debianpkg_name + ".app.pkg")
os.system("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
#multiprocess.run_command("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
tools.create_directory_of_file(self.get_final_path())
tools.copy_file(self.get_staging_path(pkg_name) + "/" + pkg_name + ".app.tar.gz", self.get_final_path() + "/" + pkg_name + ".app.gpkg")

View File

@@ -110,7 +110,6 @@ class Target(target.Target):
data_file = "#!/bin/bash\n" data_file = "#!/bin/bash\n"
data_file += "# Simply open the real application in the correct way (a link does not work ...)\n" data_file += "# Simply open the real application in the correct way (a link does not work ...)\n"
data_file += "/Applications/" + pkg_name + ".app/Contents/MacOS/" + pkg_name + " $*\n" data_file += "/Applications/" + pkg_name + ".app/Contents/MacOS/" + pkg_name + " $*\n"
#tmpFile.write("open -n /Applications/edn.app --args -AppCommandLineArg $*\n")
tools.file_write_data(os.path.join(target_outpath, "shell", pkg_name), tools.file_write_data(os.path.join(target_outpath, "shell", pkg_name),
data_file, data_file,
only_if_new=True) only_if_new=True)
@@ -128,8 +127,8 @@ class Target(target.Target):
debug.info("disk image: " + output_file_name) debug.info("disk image: " + output_file_name)
## user information: ## user information:
debug.info("You can have an shell interface by executing : ") #debug.info("You can have an shell interface by executing : ")
debug.info(" sudo cp " + shell_file_name + " /usr/local/bin") #debug.info(" sudo cp " + shell_file_name + " /usr/local/bin")
def install_package(self, pkg_name): def install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")

View File

@@ -39,11 +39,13 @@ class Target(target.Target):
sys.path.append("c:\\MinGW\\bin" ) sys.path.append("c:\\MinGW\\bin" )
os.environ['PATH'] += ";c:\\MinGW\\bin\\" os.environ['PATH'] += ";c:\\MinGW\\bin\\"
else: else:
if self.config["bus-size"] == "64": #if self.config["bus-size"] == "64":
# 64 bits # # 64 bits
self.set_cross_base("x86_64-w64-mingw32-") # self.set_cross_base("x86_64-w64-mingw32-")
else: #else:
# 32 bits # # 32 bits
# self.set_cross_base("i686-w64-mingw32-")
# Only one ... need understand why
self.set_cross_base("i686-w64-mingw32-") self.set_cross_base("i686-w64-mingw32-")
# force static link to prenvent many errors ... # force static link to prenvent many errors ...
self.global_flags_ld.append(["-static-libgcc", self.global_flags_ld.append(["-static-libgcc",
@@ -70,7 +72,7 @@ class Target(target.Target):
def get_staging_path_data(self, binary_name, heritage_list): def get_staging_path_data(self, binary_name, heritage_list):
return self.get_staging_path(binary_name) + self.path_data return self.get_staging_path(binary_name) + self.path_data
def make_package_generic_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static): def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"])) debug.info("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")

View File

@@ -7,8 +7,8 @@ def readme():
# https://pypi.python.org/pypi?%3Aaction=list_classifiers # https://pypi.python.org/pypi?%3Aaction=list_classifiers
setup(name='lutin', setup(name='lutin',
version='0.7.2', version='0.7.7',
description='Lutin generic builder', description='Lutin generic builder (might replace makefile, CMake ...)',
long_description=readme(), long_description=readme(),
url='http://github.com/HeeroYui/lutin', url='http://github.com/HeeroYui/lutin',
author='Edouard DUPIN', author='Edouard DUPIN',
@@ -19,7 +19,7 @@ setup(name='lutin',
'lutin/z_system', 'lutin/z_system',
'lutin/z_target'], 'lutin/z_target'],
classifiers=[ classifiers=[
'Development Status :: 3 - Alpha', 'Development Status :: 4 - Beta',
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python', 'Programming Language :: Python',
'Topic :: Software Development :: Compilers', 'Topic :: Software Development :: Compilers',
@@ -33,6 +33,7 @@ setup(name='lutin',
include_package_data = True, include_package_data = True,
zip_safe=False) zip_safe=False)
#To developp: ./setup.py install/develop #To developp: sudo ./setup.py install
# sudo ./setup.py develop
#TO register all in pip: ./setup.py register sdist upload #TO register all in pip: ./setup.py register sdist upload

View File

@@ -0,0 +1,22 @@
#!/usr/bin/python
import lutin.module as module
import lutin.tools as tools
import lutin.debug as debug
import os
def get_type():
return "BINARY"
def get_desc():
return "Text C compilation"
def create(target, module_name):
my_module = module.Module(__file__, module_name, get_type())
my_module.add_extra_compile_flags()
my_module.add_src_file([
'test.c'
])
if target.name=="Android":
my_module.compile_version("c", 1999)
return my_module

6
test/test-c/test.c Normal file
View File

@@ -0,0 +1,6 @@
#include <stdio.h>
int main(int _argc, char* _argv[]) {
printf("Hello World\n");
return 0;
}