Compare commits

..

27 Commits
1.2.0 ... 1.2.4

Author SHA1 Message Date
bf6fde3770 [RELEASE] new version 1.2.4 2016-08-31 23:49:11 +02:00
97db63bcfd [DEV] add based on element 2016-08-22 21:52:31 +02:00
43c7947b95 [DEBUG/DEV] correct copy of library data, add DATA type of a module 2016-08-22 22:37:47 +02:00
1c32b7089a [DEV] add empty element for Android board (not work ...) 2016-08-09 23:44:55 +02:00
760a589cbe [DEV] correct copy of generated files 2016-08-09 21:26:39 +02:00
d38ecf5432 [DEV] continue proper isolation of basic c and c++ libs 2016-08-09 21:09:26 +02:00
7e44373f79 [DEV] better isolation 2016-08-08 22:23:27 +02:00
3804de2078 [DEV] create an isolation in the include file in Linux...
now libc header is install in a specific directory
lib c++ header is install in a specific directory
idem for pthread, X11, openGL, m, ...
2016-08-07 22:42:05 +02:00
8fa25bb8ec [DEBUG] correct the android build dependency order' 2016-08-01 00:28:18 +02:00
beb97f4bed [DEV] add compilation of S and s file (asm) 2016-07-13 20:50:01 +02:00
47dcca5578 [DEV] install header before building project 2016-05-05 23:18:19 +02:00
dde9c9c280 [RELEASE] new version 1.2.3 2016-04-28 22:31:32 +02:00
598d301284 [DEBUG] correct gcov report 2016-04-14 21:57:56 +02:00
520f97c7f6 [RELEASE] create version 1.2.2 2016-04-10 13:39:36 +02:00
e4b69d17f4 [DEV] thik of coverage for clang 2016-04-01 21:35:42 +02:00
42be4afd0a [DEV] optimize build for linux and windows with no regeneration of package when not needed 2016-03-17 22:38:58 +01:00
1fa860e5b3 [DEBUG] set back target optimisation 2016-03-17 21:45:22 +01:00
87a4106101 [DEBUG] correct the compilation with wrong dependency include ==> remove target optimisation 2016-03-17 21:11:17 +01:00
1ec07b9446 [DEV] add multiple compilation requesting with xxx* (only work with * at the end) 2016-03-16 23:41:25 +01:00
5995effd9e [DEV] add specific subfolder in the file lutinParseSubFolders.txt 2016-03-16 23:41:25 +01:00
43c0ec2535 [DEBUG] correct android signing property 2016-03-07 22:09:23 +01:00
31fb9818ff [DEBUG/DEV] correct android build (gcc) and add force optimisation to build with -O3 in debug 2016-03-07 22:08:50 +01:00
83d7154254 [DEV] add base on target 2016-02-24 21:20:49 +01:00
55609b904c [DEBUG] clean and display log error 2016-02-23 21:55:32 +01:00
4beda0dd23 [DEBUG] correct the no line to execute 2016-02-23 21:49:03 +01:00
236f19bf36 [RELEASE] new release for bugFix 2016-02-23 21:43:37 +01:00
fe75da7ef9 [DEBUG] Missing type of string for python file 2016-02-23 21:40:24 +01:00
71 changed files with 1381 additions and 189 deletions

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -10,6 +11,7 @@
# for path inspection:
import sys
import os
import copy
import lutin
import lutin.debug as debug
import lutin.arg as arguments
@@ -33,6 +35,7 @@ myArgs.add(arguments.ArgDefine("P", "pretty", desc="Print the debug has pretty d
myArgs.add(arguments.ArgDefine("j", "jobs", haveParam=True, desc="Specifies the number of jobs (commands) to run simultaneously"))
myArgs.add(arguments.ArgDefine("d", "depth", haveParam=True, desc="Depth of the search of sub element lutin_*.py (default=" + str(env.get_parse_depth()) + ")"))
myArgs.add(arguments.ArgDefine("s", "force-strip", desc="Force the stripping of the compile elements"))
myArgs.add(arguments.ArgDefine("o", "force-optimisation", desc="Force optimisation of the build"))
myArgs.add(arguments.ArgDefine("w", "warning", desc="Store warning in a file build file"))
myArgs.add_section("properties", "keep in the sequency of the cible")
@@ -152,6 +155,15 @@ def usage(full=False):
print(" ex: " + sys.argv[0] + " all --target=Android all -t Windows -m debug all")
exit(0)
def check_boolean(value):
if value == "" \
or value == "1" \
or value == "true" \
or value == "True" \
or value == True:
return True
return False
# preparse the argument to get the verbose element for debug mode
def parseGenericArg(argument, active):
debug.extreme_verbose("parse arg : " + argument.get_option_name() + " " + argument.get_arg() + " active=" + str(active))
@@ -199,48 +211,42 @@ def parseGenericArg(argument, active):
return True
elif argument.get_option_name() == "color":
if active==True:
if argument.get_arg() == "" \
or argument.get_arg() == "1" \
or argument.get_arg() == "true" \
or argument.get_arg() == "True" \
or argument.get_arg() == True:
if check_boolean(argument.get_arg()) == True:
debug.enable_color()
else:
debug.disable_color()
return True
elif argument.get_option_name() == "force-build":
if active==True:
env.set_force_mode(True)
if check_boolean(argument.get_arg()) == True:
env.set_force_mode(True)
else:
env.set_force_mode(False)
return True
elif argument.get_option_name() == "pretty":
if active==True:
if argument.get_arg() == "" \
or argument.get_arg() == "1" \
or argument.get_arg() == "true" \
or argument.get_arg() == "True" \
or argument.get_arg() == True:
if check_boolean(argument.get_arg()) == True:
env.set_print_pretty_mode(True)
else:
env.set_print_pretty_mode(False)
return True
elif argument.get_option_name() == "force-optimisation":
if active==True:
if check_boolean(argument.get_arg()) == True:
env.set_force_optimisation(True)
else:
env.set_force_optimisation(False)
return True
elif argument.get_option_name() == "force-strip":
if active==True:
if argument.get_arg() == "" \
or argument.get_arg() == "1" \
or argument.get_arg() == "true" \
or argument.get_arg() == "True" \
or argument.get_arg() == True:
if check_boolean(argument.get_arg()) == True:
env.set_force_strip_mode(True)
else:
env.set_force_strip_mode(False)
return True
elif argument.get_option_name() == "warning":
if active==True:
if argument.get_arg() == "" \
or argument.get_arg() == "1" \
or argument.get_arg() == "true" \
or argument.get_arg() == "True" \
or argument.get_arg() == True:
if check_boolean(argument.get_arg()) == True:
env.set_warning_mode(True)
else:
env.set_warning_mode(False)
@@ -356,14 +362,34 @@ for argument in localArgument:
#remove previous target
my_target = None
else:
argument_value = argument.get_arg()
debug.debug("something request : '" + argument_value + "'")
if argument.get_option_name() != "":
debug.warning("Can not understand argument : '" + argument.get_option_name() + "'")
usage()
break;
name2 = argument_value.replace("@", "?")
gettedElement = name2.split("?")
module_name = gettedElement[0]
action_list = gettedElement[1:]
if len(action_list) == 0:
action_list = "build"
debug.debug("requested: '" + module_name + "' ? actions:'" + str(action_list) + "'")
multiple_module_list = []
if module_name[-1] == "*":
base_name = module_name[:-1]
for mod in module.list_all_module():
if mod[:len(base_name)] == base_name:
debug.verbose("need do it for: " + mod);
multiple_module_list.append(mod)
else:
multiple_module_list.append(module_name)
debug.debug("Will do: '" + str(multiple_module_list) + "' ? actions:'" + str(action_list) + "'")
for module_name in multiple_module_list:
#load the target if needed :
if my_target == None:
my_target = target.load_target(targetName, config)
my_target.build(argument.get_arg())
my_target = target.load_target(targetName, copy.deepcopy(config))
my_target.build(module_name, actions=action_list)
actionDone=True
# if no action done : we do "all" ...

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -70,8 +71,26 @@ def import_path_local(path, limit_sub_folder, exclude_path = [], base_name = "")
# check if the file "lutin_parse_sub.py" is present ==> parse SubFolder (force and add +1 in the resursing
if base_name + "ParseSubFolders.txt" in list_files:
debug.debug("find SubParser ... " + str(base_name + "ParseSubFolders.txt") + " " + path)
need_parse_sub_folder = True
rm_value = 0
data_file_sub = tools.file_read_data(os.path.join(path, base_name + "ParseSubFolders.txt"))
if data_file_sub == "":
debug.debug(" Empty file Load all subfolder in the worktree in '" + str(path) + "'")
need_parse_sub_folder = True
rm_value = 0
else:
list_sub = data_file_sub.split("\n")
debug.debug(" Parse selected folders " + str(list_sub) + " no parse local folder directory")
need_parse_sub_folder = False
for folder in list_sub:
if folder == "" \
or folder == "/":
continue;
tmp_out = import_path_local(os.path.join(path, folder),
1,
exclude_path,
base_name)
# add all the elements:
for elem in tmp_out:
out.append(elem)
if need_parse_sub_folder == True:
list_folders = filter_path(path, list_files)
for folder in list_folders:

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -25,6 +26,19 @@ def get_force_mode():
global force_mode
return force_mode
force_optimisation=False
def set_force_optimisation(val):
global force_optimisation
if val==1:
force_optimisation = 1
else:
force_optimisation = 0
def get_force_optimisation():
global force_optimisation
return force_optimisation
parse_depth = 9999999
def set_parse_depth(val):
@@ -115,6 +129,19 @@ def print_pretty(my_string, force=False):
"-classpath",
"-sourcepath"
]
elif end_with(cmdApplication, ["java"]) == True:
baseElementList = [
"-z",
"-f",
"-rf"
]
elif end_with(cmdApplication, ["jarsigner"]) == True:
baseElementList = [
"-sigalg",
"-digestalg",
"-storepass",
"-keypass"
]
elif end_with(cmdApplication, ["jar"]) == True:
baseElementList = [
"cf",

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -15,12 +16,12 @@ from . import debug
def append_to_list(list_out, elem):
if type(elem) == str:
if elem not in list_out:
list_out.append(elem)
list_out.append(copy.deepcopy(elem))
else:
# mulyiple imput in the list ...
for element in elem:
if element not in list_out:
list_out.append(element)
list_out.append(copy.deepcopy(element))
@@ -60,6 +61,7 @@ class HeritageList:
self.regenerate_tree()
def regenerate_tree(self):
debug.verbose("Regenerate heritage list:")
self.flags = {}
# sources list:
self.src = { 'src':[],
@@ -71,30 +73,37 @@ class HeritageList:
listHeritage = self.list_heritage
self.list_heritage = []
# first step : add all lib with no dependency:
debug.extreme_verbose(" add element with no dependency:")
for herit in listHeritage:
if len(herit.depends) == 0:
self.list_heritage.append(herit)
debug.extreme_verbose(" add: " + str(herit.name))
self.list_heritage.append(copy.deepcopy(herit))
listHeritage.remove(herit)
debug.extreme_verbose(" add element with dependency:")
while len(listHeritage) > 0:
currentHeritageSize = len(listHeritage)
debug.verbose("list heritage = " + str([[x.name, x.depends] for x in listHeritage]))
debug.verbose(" list heritage = " + str([[x.name, x.depends] for x in listHeritage]))
debug.extreme_verbose(" list heritage (rest):")
for tmppp_herit in listHeritage:
debug.extreme_verbose(" elem= " + str(tmppp_herit.name) + " : " + str(tmppp_herit.depends))
# Add element only when all dependence are resolved
for herit in listHeritage:
listDependsName = [y.name for y in self.list_heritage]
if all(x in listDependsName for x in herit.depends) == True:
debug.extreme_verbose(" add: " + str(herit.name))
listHeritage.remove(herit)
self.list_heritage.append(herit)
self.list_heritage.append(copy.deepcopy(herit))
if currentHeritageSize == len(listHeritage):
debug.warning("Not resolve dependency between the library ==> can be a cyclic dependency !!!")
for herit in listHeritage:
self.list_heritage.append(herit)
self.list_heritage.append(copy.deepcopy(herit))
listHeritage = []
debug.warning("new heritage list:")
for element in self.list_heritage:
debug.warning(" " + element.name + " " + str(element.depends))
debug.verbose("new heritage list:")
debug.extreme_verbose("new heritage list:")
for element in self.list_heritage:
debug.verbose(" " + element.name + " " + str(element.depends))
debug.extreme_verbose(" " + element.name + " " + str(element.depends))
for element in reversed(self.list_heritage):
for flags in element.flags:
# get value
@@ -121,15 +130,26 @@ class HeritageList:
# keep only true, if false ==> bad case ...
if self.flags[flags] < value:
self.flags[flags] = value
append_to_list(self.src['src'], element.src['src'])
append_to_list(self.src['dynamic'], element.src['dynamic'])
append_to_list(self.src['static'], element.src['static'])
for element in self.list_heritage:
debug.extreme_verbose(" elem: " + str(element.name))
debug.extreme_verbose(" Path (base): " + str(self.path))
debug.extreme_verbose(" inside: " + str(element.path))
for ppp in element.path:
value = element.path[ppp]
value = copy.deepcopy(element.path[ppp])
if ppp not in self.path:
self.path[ppp] = value
else:
append_to_list(self.path[ppp], value)
append_to_list(self.src['src'], element.src['src'])
append_to_list(self.src['dynamic'], element.src['dynamic'])
append_to_list(self.src['static'], element.src['static'])
debug.extreme_verbose("Path : " + str(self.path))
for ppp in self.path:
tmp = self.path[ppp]
self.path[ppp] = []
for iii in reversed(tmp):
self.path[ppp].append(iii)
debug.extreme_verbose("Path : " + str(self.path))
def __repr__(self):
return "{HeritageList:" + str(self.list_heritage) + "}"
@@ -156,8 +176,8 @@ class heritage:
self.name = module.name
self.depends = copy.deepcopy(module.depends)
# keep reference because the flags can change in time
self.flags = module.flags["export"]
self.path = module.path["export"]
self.flags = module.flags["export"] # have no deep copy here is a feature ...
self.path = copy.deepcopy(module.path["export"])
# if the user install some header ==> they will ba autoamaticaly exported ...
if target != None:
if len(module.header) > 0:
@@ -209,7 +229,7 @@ class heritage:
for flags in other.flags:
value = other.flags[flags]
if flags not in self.flags:
self.flags[flags] = value
self.flags[flags] = copy.deepcopy(value)
else:
append_to_list(self.flags[flags], value)
self.add_import_path(other.path)

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -9,6 +10,7 @@
import sys
import os
import copy
import inspect
import fnmatch
# Local import
@@ -76,7 +78,8 @@ class Module:
or moduleType == 'LIBRARY_DYNAMIC' \
or moduleType == 'LIBRARY_STATIC' \
or moduleType == 'PACKAGE' \
or moduleType == 'PREBUILD':
or moduleType == 'PREBUILD' \
or moduleType == 'DATA':
self.type=moduleType
else :
debug.error('for module "%s"' %module_name)
@@ -103,7 +106,8 @@ class Module:
"ANDROID_WALLPAPER_PROPERTIES" : [], # To create properties of the wallpaper (no use of EWOL display)
"RIGHT" : [],
"LICENSE" : "", # by default: no license
"ADMOD_POSITION" : "top"
"ADMOD_POSITION" : "top",
"ANDROID_SIGN" : "no_file.jks"
}
self.package_prop_default = { "COMPAGNY_TYPE" : True,
"COMPAGNY_NAME" : True,
@@ -122,9 +126,11 @@ class Module:
"ANDROID_WALLPAPER_PROPERTIES" : True,
"RIGHT" : True,
"LICENSE" : True,
"ADMOD_POSITION" : True
"ADMOD_POSITION" : True,
"ANDROID_SIGN" : True
}
self.sub_heritage_list = None
self.generate_file = []
def __repr__(self):
return "{lutin.Module:" + str(self.name) + "}"
@@ -162,8 +168,9 @@ class Module:
##
## @brief Send image in the build data directory
## @param[in] target Target object
## @param[in] copy_list When copy file, this API permit to remove unneeded files
##
def image_to_build(self, target):
def image_to_build(self, target, copy_list):
for source, destination, sizeX, sizeY in self.image_to_copy:
extension = source[source.rfind('.'):]
if extension != ".png" \
@@ -183,13 +190,17 @@ class Module:
image.resize(source, os.path.join(target.get_build_path_data(self.name), destination), sizeX, sizeY, file_cmd)
else:
debug.verbose("Might copy file : " + display_source + " ==> " + destination)
tools.copy_file(source, os.path.join(target.get_build_path_data(self.name), destination), file_cmd)
tools.copy_file(source,
os.path.join(target.get_build_path_data(self.name), destination),
file_cmd,
in_list=copy_list)
##
## @brief Send files in the build data directory
## @param[in] target Target object
## @param[in] copy_list When copy file, this API permit to remove unneeded files
##
def files_to_build(self, target):
def files_to_build(self, target, copy_list):
for source, destination in self.files:
display_source = source
source = os.path.join(self.origin_path, source)
@@ -199,13 +210,17 @@ class Module:
# TODO : set it back : file_cmd = target.get_build_path_data(self.name)
file_cmd = ""
debug.verbose("Might copy file : " + display_source + " ==> " + destination)
tools.copy_file(source, os.path.join(target.get_build_path_data(self.name), destination), file_cmd)
tools.copy_file(source,
os.path.join(target.get_build_path_data(self.name), destination),
force_identical=True,
in_list=copy_list)
##
## @brief Send compleate folder in the build data directory
## @param[in] target Target object
## @param[in] copy_list When copy file, this API permit to remove unneeded files
##
def paths_to_build(self, target):
def paths_to_build(self, target, copy_list):
for source, destination in self.paths:
debug.debug("Might copy path : " + source + "==>" + destination)
tmp_path = os.path.dirname(os.path.realpath(os.path.join(self.origin_path, source)))
@@ -228,7 +243,10 @@ class Module:
# new_destination = os.path.join(new_destination, root[len(source)-1:])
debug.verbose("Might copy : '" + os.path.join(root, cycle_file) + "' ==> '" + os.path.join(target.get_build_path_data(self.name), new_destination, cycle_file) + "'" )
file_cmd = "" # TODO : ...
tools.copy_file(os.path.join(root, cycle_file), os.path.join(target.get_build_path_data(self.name), new_destination, cycle_file), file_cmd)
tools.copy_file(os.path.join(root, cycle_file),
os.path.join(target.get_build_path_data(self.name), new_destination, cycle_file),
file_cmd,
in_list=copy_list)
@@ -314,7 +332,8 @@ class Module:
debug.verbose(" REMOVE: '" + str(elem[6:len(self.origin_path)+1]) + "' not in " + str(gcov_path_file))
continue
continue
if elem[:7] == "Aucune ":
if elem[:7] == "Aucune " \
or elem[:19] == "No executable lines":
debug.verbose(" Nothing to execute");
continue
start_with = ["Lines executed:", "Lignes exécutées:"]
@@ -322,8 +341,9 @@ class Module:
for line_base in start_with:
if elem[:len(line_base)] == line_base:
find = True
elem = elem[len(line_base)+1:]
elem = elem[len(line_base):]
break;
debug.verbose(" temp Value: " + str(elem))
if find == False:
debug.warning(" gcov ret : " + str(elem));
debug.warning(" ==> does not start with : " + str(start_with));
@@ -370,6 +390,7 @@ class Module:
debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0]));
else:
debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0]));
debug.verbose(" " + str(elem[2]) + " / " + str(elem[3]));
try:
pourcent = 100.0*float(executed_lines)/float(executable_lines)
except ZeroDivisionError:
@@ -409,7 +430,8 @@ class Module:
if target.is_module_build(self.name) == True:
if self.sub_heritage_list == None:
self.local_heritage = heritage.heritage(self, target)
return self.sub_heritage_list
debug.warning("plop " + str(self.local_heritage));
return copy.deepcopy(self.sub_heritage_list)
# create the package heritage
self.local_heritage = heritage.heritage(self, target)
@@ -427,6 +449,7 @@ class Module:
self.sub_heritage_list = heritage.HeritageList()
# optionnal dependency :
for dep, option, export in self.depends_optionnal:
debug.verbose("try find optionnal dependency: '" + str(dep) + "'")
inherit_list, isBuilt = target.build(dep, package_name, True)
if isBuilt == True:
self.local_heritage.add_depends(dep);
@@ -463,7 +486,9 @@ class Module:
# -- Generic library help --
# ----------------------------------------------------
package_version_string = tools.version_to_string(self.package_prop["VERSION"]);
if self.type == 'PREBUILD':
if self.type == 'DATA':
debug.print_element("Data", self.name, "-", package_version_string)
elif self.type == 'PREBUILD':
debug.print_element("Prebuild", self.name, "-", package_version_string)
elif self.type == 'LIBRARY':
debug.print_element("Library", self.name, "-", package_version_string)
@@ -479,9 +504,59 @@ class Module:
debug.print_element("Binary (stand alone)", self.name, "-", package_version_string)
elif self.type == 'PACKAGE':
debug.print_element("Package", self.name, "-", package_version_string)
# ----------------------------------------------------
# -- Sources compilation --
# ----------------------------------------------------
# list of all file to copy:
copy_list={}
# ---------------------------------------------------------------------------
# -- install header (generated header files) --
# ---------------------------------------------------------------------------
generate_path = target.get_build_path_temporary_generate(self.name)
include_path = target.get_build_path_include(self.name)
have_only_generate_file = False
if len(self.generate_file) > 0:
debug.debug("install GENERATED headers ...")
for elem_generate in self.generate_file:
ret_write = tools.file_write_data(os.path.join(generate_path, elem_generate["filename"]), elem_generate["data"], only_if_new=True)
if ret_write == True:
debug.print_element("generate", self.name, "##", elem_generate["filename"])
dst = os.path.join(include_path, elem_generate["filename"])
copy_list[dst] = {"src":os.path.join(generate_path, elem_generate["filename"]),
"cmd_file":None,
"need_copy":ret_write}
if elem_generate["install"] == True:
have_only_generate_file = True
if have_only_generate_file == True:
self.add_path(generate_path)
# ---------------------------------------------------------------------------
# -- install header (do it first for extern lib and gcov better interface) --
# ---------------------------------------------------------------------------
debug.debug("install headers ...")
for file in self.header:
src_path = os.path.join(self.origin_path, file["src"])
if "multi-dst" in file:
dst_path = os.path.join(include_path, file["multi-dst"])
tools.copy_anything(src_path,
dst_path,
recursive=file["recursive"],
force_identical=True,
in_list=copy_list)
else:
dst_path = os.path.join(include_path, file["dst"])
tools.copy_file(src_path,
dst_path,
force_identical=True,
in_list=copy_list)
#real copy files
tools.copy_list(copy_list)
# remove unneded files (NOT folder ...)
tools.clean_directory(include_path, copy_list)
# add the pat to the usable dirrectory
self.add_path(include_path)
# ---------------------------------------------------------------------------
# -- Sources compilation --
# ---------------------------------------------------------------------------
if self.type != 'PREBUILD':
# build local sources in a specific order:
for extention_local in self.extention_order_build:
@@ -544,6 +619,7 @@ class Module:
debug.warning(" UN-SUPPORTED file format: '" + self.origin_path + "/" + file + "'")
# when multiprocess availlable, we need to synchronize here ...
multiprocess.pool_synchrosize()
# ----------------------------------------------------
# -- Generation point --
# ----------------------------------------------------
@@ -701,43 +777,23 @@ class Module:
basic_path = self.origin_path)
except ValueError:
debug.error(" UN-SUPPORTED link format: 'binary'")
elif self.type == "DATA":
debug.debug("Data package have noting to build... just install")
else:
debug.error("Did not known the element type ... (impossible case) type=" + self.type)
# ----------------------------------------------------
# -- install header --
# ----------------------------------------------------
debug.debug("install headers ...")
copy_list={}
include_path = target.get_build_path_include(self.name)
for file in self.header:
src_path = os.path.join(self.origin_path, file["src"])
if "multi-dst" in file:
dst_path = os.path.join(include_path, file["multi-dst"])
tools.copy_anything(src_path,
dst_path,
recursive=False,
force_identical=True,
in_list=copy_list)
else:
dst_path = os.path.join(include_path, file["dst"])
tools.copy_file(src_path,
dst_path,
force_identical=True,
in_list=copy_list)
#real copy files
tools.copy_list(copy_list)
# remove unneded files (NOT folder ...)
tools.clean_directory(include_path, copy_list)
# ----------------------------------------------------
# -- install data --
# ----------------------------------------------------
debug.debug("install datas")
self.image_to_build(target)
self.files_to_build(target)
self.paths_to_build(target)
# TODO : do sothing that create a list of file set in this directory and remove it if necessary ... ==> if not needed anymore ...
copy_list={}
self.image_to_build(target, copy_list) # TODO : When file is resized, the final file is not removed if the file is not needed anymore
self.files_to_build(target, copy_list)
self.paths_to_build(target, copy_list)
#real copy files
tools.copy_list(copy_list)
# remove unneded files (NOT folder ...)
tools.clean_directory(target.get_build_path_data(self.name), copy_list)
# create local heritage specification
self.local_heritage.auto_add_build_header()
@@ -757,13 +813,14 @@ class Module:
target.make_package(self.name, self.package_prop, os.path.join(self.origin_path, ".."), self.sub_heritage_list)
# return local dependency ...
return self.sub_heritage_list
return copy.deepcopy(self.sub_heritage_list)
# call here to clean the module
def clean(self, target):
if self.type=='PREBUILD':
# nothing to add ==> just dependence
None
return True
elif self.type=='LIBRARY' \
or self.type=='LIBRARY_DYNAMIC' \
or self.type=='LIBRARY_STATIC':
@@ -771,6 +828,7 @@ class Module:
pathbuild = target.get_build_path(self.name)
debug.info("remove path : '" + pathbuild + "'")
tools.remove_path_and_sub_path(pathbuild)
return True
elif self.type=='BINARY' \
or self.type=='PACKAGE':
# remove path of the lib ... for this targer
@@ -780,6 +838,7 @@ class Module:
pathStaging = target.get_staging_path(self.name)
debug.info("remove path : '" + pathStaging + "'")
tools.remove_path_and_sub_path(pathStaging)
return True
else:
debug.error("Dit not know the element type ... (impossible case) type=" + self.type)
@@ -839,25 +898,117 @@ class Module:
def add_src_file(self, list):
tools.list_append_to(self.src, list, True)
def add_header_file(self, list, destination_path=None):
##
## @brief An an header file in the install directory
## @param[in] list List of element that is needed to install (can be a list or a simple string)
## @param[in,optional] destination_path Path to install the files (remove all the path of the file)
## @param[in,optional] clip_path Remove a part of the path set in the list and install data in generic include path
## @param[in,optional] recursive when use regexp in file list ==> we can add recursive property
##
## @code
## my_module.add_header_file([
## 'include/ewol/widget.h',
## 'include/ewol/context/context.h',
## ])
## @endcode
## Here the user need to acces to the file wrote: #include <include/ewol/cotext/context.h>
##
## We can simplify it:
## @code
## my_module.add_header_file([
## 'include/ewol/widget.h',
## 'include/ewol/context/context.h',
## ],
## destination_path='ewol')
## @endcode
## Here the user need to acces to the file wrote: #include <ewol/context.h> ==> the internal path has been removed
##
## An other way is:
## @code
## my_module.add_header_file([
## 'include/ewol/widget.h',
## 'include/ewol/context/context.h',
## ],
## clip_path='include')
## @endcode
## Here the user need to acces to the file wrote: #include <ewol/context/context.h> ==> it just remove the include data
##
## With a copy all methode:
## @code
## my_module.add_header_file(
## 'include/*.h',
## recursive=True)
## @endcode
## Here the user need to acces to the file wrote: #include <ewol/context/context.h> ==> it just remove the include data
##
def add_header_file(self, list, destination_path=None, clip_path=None, recursive=False):
if destination_path != None:
debug.verbose("Change destination PATH: '" + str(destination_path) + "'")
new_list = []
if type(list) == str:
list = [list]
for elem in list:
base = os.path.basename(elem)
if destination_path != None:
base = os.path.basename(elem)
if '*' in base or '[' in base or '(' in base:
if clip_path != None:
debug.error("can not use 'destination_path' and 'clip_path' at the same time ...");
if '*' in base \
or '[' in base \
or '(' in base:
new_list.append({"src":elem,
"multi-dst":destination_path})
"multi-dst":destination_path,
"recursive":recursive})
else:
new_list.append({"src":elem,
"dst":os.path.join(destination_path, base)})
"dst":os.path.join(destination_path, base),
"recursive":recursive})
else:
new_list.append({"src":elem,
"dst":elem})
if clip_path == None:
if '*' in base \
or '[' in base \
or '(' in base:
new_list.append({"src":elem,
"multi-dst":"",
"recursive":recursive})
else:
new_list.append({"src":elem,
"dst":elem,
"recursive":recursive})
else:
if len(clip_path)>len(elem):
debug.error("can not clip a path with not the same name: '" + clip_path + "' != '" + elem + "' (size too small)")
if clip_path != elem[:len(clip_path)]:
debug.error("can not clip a path with not the same name: '" + clip_path + "' != '" + elem[:len(clip_path)] + "'")
out_elem = elem[len(clip_path):]
while len(out_elem) > 0 \
and out_elem[0] == "/":
out_elem = out_elem[1:]
if '*' in base \
or '[' in base \
or '(' in base:
new_list.append({"src":elem,
"multi-dst":"",
"recursive":recursive})
else:
new_list.append({"src":elem,
"dst":out_elem,
"recursive":recursive})
tools.list_append_to(self.header, new_list, True)
##
## @brief Many library need to generate dynamic file configuration, use this to generat your configuration and add it in the include path
## @param[in] data_file Data of the file that is generated
## @param[in] destination_path Path where to install data
## @param[in] install_element add the file in the include path and not only in the generate path
## @note this does not rewrite the file if it is not needed
##
def add_generated_header_file(self, data_file, destination_path, install_element=False):
self.generate_file.append({
"data":data_file,
"filename":destination_path,
"install":install_element
});
def add_export_path(self, list, type='c'):
tools.list_append_to_2(self.path["export"], type, list)
@@ -880,7 +1031,7 @@ class Module:
print(' ' + str(description))
print(' ' + str(input_list))
def display(self, target):
def display(self):
print('-----------------------------------------------')
print(' package : "' + self.name + "'")
print('-----------------------------------------------')
@@ -904,12 +1055,13 @@ class Module:
self.print_list('paths',self.paths)
for element in self.path["local"]:
value = self.path["local"][element]
self.print_list('local path ' + str(element), value)
self.print_list('local path "' + str(element) + '" ' + str(len(value)), value)
for element in self.path["export"]:
value = self.path["export"][element]
self.print_list('export path ' + str(element), value)
self.print_list('export path "' + str(element) + '" ' + str(len(value)), value)
return True
def pkg_set(self, variable, value):
if "COMPAGNY_TYPE" == variable:
@@ -973,7 +1125,8 @@ class Module:
"ANDROID_APPL_TYPE",
"ADMOD_ID",
"APPLE_APPLICATION_IOS_ID",
"LICENSE"]:
"LICENSE",
"ANDROID_SIGN"]:
self.package_prop[variable] = value
self.package_prop_default[variable] = False
elif "ADMOD_POSITION" == variable:

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -27,6 +28,8 @@ class System:
self.export_src=[]
self.export_path=[]
self.action_on_state={}
self.headers=[]
self.version=None
def add_export_sources(self, list):
tools.list_append_to(self.export_src, list)
@@ -41,12 +44,21 @@ class System:
def add_export_flag(self, type, list):
tools.list_append_to_2(self.export_flags, type, list)
def set_version(self, version_list):
self.version = version_list
def add_action(self, name_of_state="PACKAGE", level=5, name="no-name", action=None):
if name_of_state not in self.action_on_add_src_filestate:
self.action_on_state[name_of_state] = [[level, name, action]]
else:
self.action_on_state[name_of_state].append([level, name, action])
def add_header_file(self, list, destination_path=None, clip_path=None, recursive=False):
self.headers.append({
"list":list,
"dst":destination_path,
"clip":clip_path,
"recursive":recursive
})
def __repr__(self):
return "{lutin.System}"
@@ -68,7 +80,14 @@ def create_module_from_system(target, dict):
for elem in dict["system"].action_on_state:
level, name, action = dict["system"].action_on_state[elem]
target.add_action(elem, level, name, action)
for elem in dict["system"].headers:
myModule.add_header_file(
elem["list"],
destination_path=elem["dst"],
clip_path=elem["clip"],
recursive=elem["recursive"])
if dict["system"].version != None:
myModule.package_prop["VERSION"] = dict["system"].version
return myModule
@@ -139,13 +158,13 @@ def exist(lib_name, target_name, target) :
debug.verbose("add to path: '" + os.path.dirname(data["path"]) + "'")
sys.path.append(os.path.dirname(data["path"]))
debug.verbose("import system : '" + data["name"] + "'")
theSystem = __import__(env.get_build_system_base_name() + __start_system_name + target_name + "_" + data["name"])
the_system = __import__(env.get_build_system_base_name() + __start_system_name + target_name + "_" + data["name"])
#create the system module
try:
debug.verbose("SYSTEM: request: " + data["name"])
data["system"] = theSystem.System(target)
debug.verbose("SYSTEM: request: " + str(data["name"]))
if "System" in dir(the_system):
data["system"] = the_system.System(target)
data["exist"] = data["system"].valid
except:
else:
debug.warning("Not find: '" + data["name"] + "' ==> get exception")
return data["exist"]
return False

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -44,6 +45,7 @@ class Target:
# todo : remove this :
self.sumulator = config["simulation"]
self.name = name
self.config_based_on = name
self.end_generate_package = config["generate-package"]
debug.info("=================================");
debug.info("== Target='" + self.name + "' " + config["bus-size"] + " bits for arch '" + config["arch"] + "'");
@@ -96,6 +98,7 @@ class Target:
'-D__TARGET_ADDR__' + self.select_bus + 'BITS',
'-D_REENTRANT'
])
self.add_flag("c", "-nodefaultlibs")
self.add_flag("c++", "-nostdlib")
self.add_flag("ar", 'rcs')
@@ -105,9 +108,12 @@ class Target:
if "debug" == self.config["mode"]:
self.add_flag("c", [
"-g",
"-DDEBUG",
"-O0"
"-DDEBUG"
])
if env.get_force_optimisation() == False:
self.add_flag("c", "-O0")
else:
self.add_flag("c", "-O3")
else:
self.add_flag("c", [
"-DNDEBUG",
@@ -116,14 +122,22 @@ class Target:
## To add code coverate on build result system
if self.config["gcov"] == True:
self.add_flag("c", [
"-fprofile-arcs",
"-ftest-coverage"
])
self.add_flag("link", [
"-lgcov",
"--coverage"
])
if self.config["compilator"] == "clang":
self.add_flag("c", [
"--coverage"
])
self.add_flag("link", [
"--coverage"
])
else:
self.add_flag("c", [
"-fprofile-arcs",
"-ftest-coverage"
])
self.add_flag("link", [
"-lgcov",
"--coverage"
])
self.update_path_tree()
self.path_bin="bin"
@@ -131,6 +145,7 @@ class Target:
self.path_data="share"
self.path_doc="doc"
self.path_include="include"
self.path_temporary_generate="generate"
self.path_object="obj"
@@ -348,6 +363,9 @@ class Target:
def get_build_path_include(self, binary_name):
return os.path.join(self.get_build_path(binary_name), self.path_include)
def get_build_path_temporary_generate(self, binary_name):
return os.path.join(self.get_build_path(binary_name), self.path_temporary_generate)
def get_build_file_bin(self, binary_name):
return os.path.join(self.get_build_path_bin(binary_name), binary_name + self.suffix_binary)
@@ -460,7 +478,17 @@ class Target:
mod.ext_project_add_module(self, projectMng, addedModule)
return
def build(self, name, packagesName=None, optionnal=False):
def build(self, name, packagesName=None, optionnal=False, actions=[]):
if len(name.split("?")) != 1\
or len(name.split("@")) != 1:
debug.error("need update")
if actions == "":
actions = ["build"]
if actions == []:
actions = ["build"]
if type(actions) == str:
actions = [actions]
if name == "gcov":
debug.info("gcov all")
debug.error("must set the gcov parsing on a specific library or binary ==> not supported now for all")
@@ -468,7 +496,7 @@ class Target:
debug.info("dump all")
self.load_all()
for mod in self.module_list:
mod.display(self)
mod.display()
return
if name == "all":
debug.info("build all")
@@ -487,14 +515,8 @@ class Target:
for mod in self.module_list:
mod.clean(self)
else:
# get the action an the module ....
name2 = name.replace("@", "?")
gettedElement = name2.split("?")
module_name = gettedElement[0]
action_list = gettedElement[1:]
if len(action_list) == 0:
action_list = ["build"]
debug.verbose("requested : " + module_name + " ? actions:" + str(action_list))
module_name = name
action_list = actions
for action_name in action_list:
debug.verbose("requested : " + module_name + "?" + action_name + " [START]")
ret = None;
@@ -538,14 +560,13 @@ class Target:
and optionnal == True:
ret = [heritage.HeritageList(), False]
else:
# clean requested
for mod in self.module_list:
if mod.name == module_name:
if action_name[:4] == "dump":
debug.info("dump module '" + module_name + "'")
if len(action_name) > 4:
debug.warning("action 'dump' does not support options ... : '" + action_name + "'")
ret = mod.display(self)
ret = mod.display()
break
elif action_name[:5] == "clean":
debug.info("clean module '" + module_name + "'")
@@ -634,6 +655,8 @@ class Target:
## @param[in] pkg_name Package Name (generic name)
## @param[in] heritage_list List of dependency of the package
## @param[in] static The package is build in static mode
## @return True Something has been copied
## @return False Nothing has been copied
##
def make_package_binary_data(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
target_shared_path = os.path.join(path_package, self.pkg_path_data)
@@ -667,9 +690,10 @@ class Target:
force_identical=True,
in_list=copy_list)
#real copy files
tools.copy_list(copy_list)
ret_copy = tools.copy_list(copy_list)
# remove unneded files (NOT folder ...)
tools.clean_directory(target_shared_path, copy_list)
ret_remove = tools.clean_directory(target_shared_path, copy_list)
return ret_copy or ret_remove
##
## @brief Create a generic tree of the binary folder
@@ -677,6 +701,8 @@ class Target:
## @param[in] pkg_name Package Name (generic name)
## @param[in] heritage_list List of dependency of the package
## @param[in] static The package is build in static mode
## @return True Something has been copied
## @return False Nothing has been copied
##
def make_package_binary_bin(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
copy_list={}
@@ -689,10 +715,12 @@ class Target:
path_dst,
in_list=copy_list)
#real copy files
tools.copy_list(copy_list)
ret_copy = tools.copy_list(copy_list)
ret_remove = False
if self.pkg_path_bin != "":
# remove unneded files (NOT folder ...)
tools.clean_directory(path_package_bin, copy_list)
ret_remove = tools.clean_directory(path_package_bin, copy_list)
return ret_copy or ret_remove
##
## @brief Create a generic tree of the library folder
@@ -700,6 +728,8 @@ class Target:
## @param[in] pkg_name Package Name (generic name)
## @param[in] heritage_list List of dependency of the package
## @param[in] static The package is build in static mode
## @return True Something has been copied
## @return False Nothing has been copied
##
def make_package_binary_lib(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
copy_list={}
@@ -720,46 +750,49 @@ class Target:
os.path.join(path_package_lib, os.path.basename(file_src)),
in_list=copy_list)
#real copy files
tools.copy_list(copy_list)
ret_copy = tools.copy_list(copy_list)
ret_remove = False
if self.pkg_path_lib != "":
# remove unneded files (NOT folder ...)
tools.clean_directory(path_package_lib, copy_list)
ret_remove = tools.clean_directory(path_package_lib, copy_list)
return ret_copy or ret_remove
def make_package_generic_files(self, path_package, pkg_properties, pkg_name, base_pkg_path, heritage_list, static):
## Create version file:
tools.file_write_data(os.path.join(path_package, self.pkg_path_version_file),
tools.version_to_string(pkg_properties["VERSION"]),
only_if_new=True)
ret_version = tools.file_write_data(os.path.join(path_package, self.pkg_path_version_file),
tools.version_to_string(pkg_properties["VERSION"]),
only_if_new=True)
## Create maintainer file:
tools.file_write_data(os.path.join(path_package, self.pkg_path_maintainer_file),
self.generate_list_separate_coma(pkg_properties["MAINTAINER"]),
only_if_new=True)
ret_maintainer = tools.file_write_data(os.path.join(path_package, self.pkg_path_maintainer_file),
self.generate_list_separate_coma(pkg_properties["MAINTAINER"]),
only_if_new=True)
## Create appl_name file:
tools.file_write_data(os.path.join(path_package, self.pkg_path_application_name_file),
"en_EN:" + pkg_properties["NAME"],
only_if_new=True)
ret_appl_name = tools.file_write_data(os.path.join(path_package, self.pkg_path_application_name_file),
"en_EN:" + pkg_properties["NAME"],
only_if_new=True)
## Create appl_description file:
tools.file_write_data(os.path.join(path_package, self.pkg_path_application_description_file),
"en_EN:" + pkg_properties["DESCRIPTION"],
only_if_new=True)
ret_appl_desc = tools.file_write_data(os.path.join(path_package, self.pkg_path_application_description_file),
"en_EN:" + pkg_properties["DESCRIPTION"],
only_if_new=True)
## Create Readme file:
readme_file_dest = os.path.join(path_package, self.pkg_path_readme_file)
ret_readme = False
if os.path.exists(os.path.join(base_pkg_path, "os-Linux/README"))==True:
tools.copy_file(os.path.join(base_pkg_path, "os-Linux/README"), readme_file_dest)
ret_readme = tools.copy_file(os.path.join(base_pkg_path, "os-Linux/README"), readme_file_dest)
elif os.path.exists(os.path.join(base_pkg_path, "README"))==True:
tools.copy_file(os.path.join(base_pkg_path, "README"), readme_file_dest)
ret_readme = tools.copy_file(os.path.join(base_pkg_path, "README"), readme_file_dest)
elif os.path.exists(os.path.join(base_pkg_path, "README.md"))==True:
tools.copy_file(os.path.join(base_pkg_path, "README.md"), readme_file_dest)
ret_readme = tools.copy_file(os.path.join(base_pkg_path, "README.md"), readme_file_dest)
else:
debug.debug("no file 'README', 'README.md' or 'os-Linux/README' ==> generate an empty one")
tools.file_write_data(readme_file_dest,
"No documentation for " + pkg_name + "\n",
only_if_new=True)
ret_readme = tools.file_write_data(readme_file_dest,
"No documentation for " + pkg_name + "\n",
only_if_new=True)
## Create licence file:
"""
@@ -778,13 +811,20 @@ class Target:
## Create changeLog file:
change_log_file_dest = os.path.join(path_package, self.pkg_path_change_log_file)
ret_changelog = False
if os.path.exists(os.path.join(base_pkg_path, "changelog")) == True:
tools.copy_file(os.path.join(base_pkg_path, "changelog"), change_log_file_dest)
ret_changelog = tools.copy_file(os.path.join(base_pkg_path, "changelog"), change_log_file_dest)
else:
debug.debug("no file 'changelog' ==> generate an empty one")
tools.file_write_data(change_log_file_dest,
"No changelog data " + pkg_name + "\n",
only_if_new=True)
ret_changelog = tools.file_write_data(change_log_file_dest,
"No changelog data " + pkg_name + "\n",
only_if_new=True)
return ret_version \
or ret_maintainer \
or ret_appl_name \
or ret_appl_desc \
or ret_readme \
or ret_changelog
##
## @brief convert a s list of string in a string separated by a ","

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -86,17 +87,20 @@ def version_to_string(version):
## @param[in] path Path of the data might be written.
## @param[in] data Data To write in the file.
## @param[in] only_if_new (default: False) Write data only if data is different.
## @return True Something has been copied
## @return False Nothing has been copied
##
def file_write_data(path, data, only_if_new=False):
if only_if_new == True:
old_data = file_read_data(path)
if old_data == data:
return
return False
#real write of data:
create_directory_of_file(path)
file = open(path, "w")
file.write(data)
file.close()
return True
def list_to_str(list):
if type(list) == type(str()):
@@ -130,6 +134,8 @@ def add_prefix(prefix,list):
## @param[in] force (default False) Force copy of the file
## @param[in] force_identical (default False) Force file to be identical (read it in binary)
## @param[in,out] in_list (default None) Not real copy: set the request copy in the input list
## @return True Something has/must been copied
## @return False Nothing has/myst been copied
##
def copy_file(src, dst, cmd_file=None, force=False, force_identical=False, in_list=None):
if os.path.exists(src) == False:
@@ -137,7 +143,7 @@ def copy_file(src, dst, cmd_file=None, force=False, force_identical=False, in_li
cmd_line = "copy \"" + src + "\" \"" + dst + "\""
if force == False \
and depend.need_re_build(dst, src, file_cmd=cmd_file , cmd_line=cmd_line, force_identical=force_identical) == False:
debug.verbose ("no need to copy ...")
debug.verbose("no need to copy ...")
if in_list != None:
if dst in in_list:
debug.verbose("replace copy file " + os.path.relpath(src) + " ==> " + os.path.relpath(dst))
@@ -147,7 +153,7 @@ def copy_file(src, dst, cmd_file=None, force=False, force_identical=False, in_li
in_list[dst] = {"src":src,
"cmd_file":cmd_file,
"need_copy":False}
return
return False
if in_list == None:
debug.print_element("copy file ", os.path.relpath(src), "==>", os.path.relpath(dst))
create_directory_of_file(dst)
@@ -162,6 +168,7 @@ def copy_file(src, dst, cmd_file=None, force=False, force_identical=False, in_li
in_list[dst] = {"src":src,
"cmd_file":cmd_file,
"need_copy":True}
return True
##
## @brief Copy a compleate directory in a specific folder
@@ -209,20 +216,28 @@ def copy_anything(src, dst, recursive = False, force_identical=False, in_list=No
##
## @brief real copy of files in a specific dictionnary list
## @param[in] in_list Dictionnary of file to copy
## @return True Something has been copied
## @return False Nothing has been copied
##
def copy_list(in_list):
has_file_copied = False
for dst in in_list:
if in_list[dst]["need_copy"] == False:
continue
# note we force the copy to disable the check of needed of copy (already done)
copy_file(in_list[dst]["src"], dst, cmd_file=in_list[dst]["cmd_file"], force=True)
has_file_copied = True
return has_file_copied
##
## @brief Clean a path from all un-needed element in a directory
## @param[in] path Path to clean
## @param[in] normal_list List of all files/path in the path
## @return True Something has been removed
## @return False Nothing has been removed
##
def clean_directory(path, normal_list):
has_file_removed = False
# get a list of all element in the path:
for root, dirnames, filenames in os.walk(path):
for file in filenames:
@@ -230,6 +245,8 @@ def clean_directory(path, normal_list):
if file_name not in normal_list:
debug.print_element("remove file ", os.path.relpath(file_name), "==>", "---")
os.remove(file_name)
has_file_removed = True
return has_file_removed
def filter_extention(list_files, extentions, invert=False):
out = []

View File

@@ -0,0 +1,9 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Executable/binary builder
##
@@ -117,6 +127,7 @@ def link(file, binary, target, depancy, flags, name, basic_path, static = False)
cmd.append("-Wl,-R$ORIGIN/../lib/")
except:
pass
cmd.append("-Wl,-rpath,\"\$ORIGIN/../lib\"")
try:
cmd.append(flags["local"]["link"])
except:
@@ -135,12 +146,20 @@ def link(file, binary, target, depancy, flags, name, basic_path, static = False)
for type in ["link-lib"]:
if type in flags[view]:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in flags[view][type] ])
for type in ["link-bin"]:
if type in flags[view]:
cmd.append(flags[view][type])
for type in ["link-lib"]:
if type in depancy.flags:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in depancy.flags[type] ])
for type in ["link-lib"]:
if type in target.global_flags:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in target.global_flags[type] ])
for type in ["link-bin"]:
if type in target.global_flags:
cmd.append(target.global_flags[type])
if type in depancy.flags:
cmd.append(depancy.flags[type])
cmd_line = tools.list_to_str(cmd)
# check the dependency for this file :
if depend.need_re_package(file_dst, file_src, True, file_cmd=file_cmd, cmd_line=cmd_line) == False \

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## C builder
##
@@ -60,8 +70,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
target.cc,
"-o", file_dst,
target.arch,
target.sysroot,
target.global_include_cc]
target.sysroot]
for view in ["export", "local"]:
try:
cmd.append(tools.add_prefix("-I", path[view]["c"]))
@@ -71,6 +80,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
cmd.append(tools.add_prefix("-I", depancy.path["c"]))
except:
pass
cmd.append(target.global_include_cc)
try:
cmd.append(get_version_compilation_flags(flags, depancy.flags))
except:

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## C++ builder
##
@@ -65,8 +75,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
target.xx,
"-o", file_dst,
target.arch,
target.sysroot,
target.global_include_cc
target.sysroot
]
for view in ["export", "local"]:
for type in ["c", "c++"]:
@@ -79,6 +88,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
cmd.append(tools.add_prefix("-I",depancy.path[type]))
except:
pass
cmd.append(target.global_include_cc)
try:
cmd.append(get_version_compilation_flags(flags, depancy.flags))
except:

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Dynamic library builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Java builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Java builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Dynamic library builder
##
@@ -89,6 +99,10 @@ def link(file, binary, target, depancy, flags, name, basic_path, static=False):
cmd.append(file_src)
except:
pass
try:
cmd.append(list_static)
except:
pass
for view in ["local", "export"]:
if view not in flags:
continue
@@ -103,10 +117,6 @@ def link(file, binary, target, depancy, flags, name, basic_path, static=False):
cmd.append(target.global_flags[type])
if 'src' in depancy.src:
cmd.append(tools.filter_extention(depancy.src['src'], get_input_type()))
try:
cmd.append(list_static)
except:
pass
try:
for elem in list_dynamic:
lib_path = os.path.dirname(elem)

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Static library builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Objective-C builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## Objective C++ builder
##

View File

@@ -1,3 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
##
## ASM builder
##
@@ -39,3 +49,57 @@ def get_output_type():
##
def get_support_multithreading():
return True
##
## @brief Commands for running gcc to compile a C file in object file.
##
def compile(file, binary, target, depancy, flags, path, name, basic_path, module_src):
file_src = target.get_full_name_source(basic_path, file)
file_cmd = target.get_full_name_cmd(name, basic_path, file)
file_dst = target.get_full_name_destination(name, basic_path, file, get_output_type())
file_depend = target.get_full_dependency(name, basic_path, file)
file_warning = target.get_full_name_warning(name, basic_path, file)
# create the command line befor requesting start:
cmd = [
target.cc,
"-o", file_dst,
target.arch,
target.sysroot]
for view in ["export", "local"]:
try:
cmd.append(tools.add_prefix("-I", path[view]["c"]))
except:
pass
try:
cmd.append(tools.add_prefix("-I", depancy.path["c"]))
except:
pass
cmd.append(target.global_include_cc)
try:
cmd.append(target.global_flags["c"])
except:
pass
try:
cmd.append(depancy.flags["c"])
except:
pass
for view in ["local", "export"]:
try:
cmd.append(flags[view]["c"])
except:
pass
cmd.append("-c")
cmd.append("-MMD")
cmd.append("-MP")
cmd.append(file_src)
# Create cmd line
cmdLine=tools.list_to_str(cmd)
# check the dependency for this file :
if depend.need_re_build(file_dst, file_src, file_depend, file_cmd, cmdLine) == False:
return {"action":"add", "file":file_dst}
tools.create_directory_of_file(file_dst)
comment = ["s", name, "<==", file]
# process element
multiprocess.run_in_pool(cmdLine, comment, file_cmd, store_output_file=file_warning)
return {"action":"add", "file":file_dst}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,22 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help = "C: Generic C library"
self.valid = True

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -47,6 +48,7 @@ class System(system.System):
else:
self.add_export_flag("c++", "-D__STDCPP_GNU__")
self.add_export_flag("c++-remove","-nostdlib")
self.add_export_flag("need-libstdc++", True)
# GPL v3 (+ exception link for gcc compilator)
self.add_export_path(os.path.join(target.path_ndk, "sources", "cxx-stl", "gnu-libstdc++", target.compilator_version, "include"))
if target.type_arch == "armv5":

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,35 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help = "OpenGL: Generic graphic library"
self.valid = True
# no check needed ==> just add this:
self.add_module_depend([
'c',
])
"""
self.add_header_file([
"/usr/include/GL/*"
],
destination_path="GL",
recursive=True)
"""
self.add_export_flag('link-lib', "GLESv2")

View File

@@ -0,0 +1,34 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="pthread : Generic multithreading system\n Can be install with the package:\n - pthread-dev"
# check if the library exist:
"""
if not os.path.isfile("/usr/include/pthread.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
"""
self.valid = True
# todo : create a searcher of the presence of the library:
#self.add_export_flag("link-lib", "pthread")
self.add_module_depend([
'c'
])

View File

@@ -0,0 +1,28 @@
#!/usr/bin/python
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="Z : z library \n Can be install with the package:\n - zlib1g-dev"
# check if the library exist:
if not os.path.isfile("/usr/include/zlib.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "z")

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,33 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help = "X11: Basic interface of Linux Graphic interface"
self.valid = True
# no check needed ==> just add this:
self.add_module_depend(['c'])
self.add_header_file([
"/usr/include/X11/*"
],
destination_path="X11",
recursive=True)
self.add_export_flag('link-lib', 'X11')

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -25,5 +26,18 @@ class System(system.System):
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "asound")
self.add_header_file([
"/usr/include/alsa/*",
],
destination_path="alsa",
recursive=True)
self.add_header_file([
"/usr/include/dssi/*",
],
destination_path="dssi",
recursive=True)
self.add_module_depend([
'c'
])

View File

@@ -0,0 +1,36 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="rpc : generic RPC library (developed by oracle)"
# No check ==> on the basic std libs:
self.valid = True
# todo : create a searcher of the presence of the library:
#self.add_export_flag("link-lib", "xns")
self.add_header_file([
"/usr/include/arpa/*"
],
destination_path="arpa",
recursive=True)
self.add_module_depend([
'c'
])

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,173 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help = "C: Generic C library"
self.valid = True
# no check needed ==> just add this:
#self.add_export_flag("c", "-D__STDCPP_GNU__")
#self.add_export_flag("c++", "-nodefaultlibs")
# grep "This file is part of the GNU C Library" /usr/include/*
self.add_header_file([
'/usr/include/aio.h',
'/usr/include/aliases.h',
'/usr/include/alloca.h',
'/usr/include/ansidecl.h',
'/usr/include/argp.h',
'/usr/include/argz.h',
'/usr/include/ar.h',
'/usr/include/assert.h',
'/usr/include/byteswap.h',
'/usr/include/complex.h',
'/usr/include/cpio.h',
'/usr/include/ctype.h',
'/usr/include/dirent.h',
'/usr/include/dlfcn.h',
'/usr/include/elf.h',
'/usr/include/endian.h',
'/usr/include/envz.h',
'/usr/include/err.h',
'/usr/include/errno.h',
'/usr/include/error.h',
'/usr/include/execinfo.h',
'/usr/include/fcntl.h',
'/usr/include/features.h',
'/usr/include/fenv.h',
'/usr/include/fmtmsg.h',
'/usr/include/fnmatch.h',
'/usr/include/fpu_control.h',
'/usr/include/fts.h',
'/usr/include/ftw.h',
'/usr/include/gconv.h',
'/usr/include/getopt.h',
'/usr/include/glob.h',
'/usr/include/gnu-versions.h',
'/usr/include/grp.h',
'/usr/include/gshadow.h',
'/usr/include/iconv.h',
'/usr/include/ieee754.h',
'/usr/include/ifaddrs.h',
'/usr/include/inttypes.h',
'/usr/include/langinfo.h',
'/usr/include/libgen.h',
'/usr/include/libintl.h',
'/usr/include/libio.h',
'/usr/include/limits.h',
'/usr/include/link.h',
'/usr/include/locale.h',
'/usr/include/malloc.h',
'/usr/include/mcheck.h',
'/usr/include/memory.h',
'/usr/include/mntent.h',
'/usr/include/monetary.h',
'/usr/include/mqueue.h',
'/usr/include/netdb.h',
'/usr/include/nl_types.h',
'/usr/include/nss.h',
'/usr/include/obstack.h',
'/usr/include/printf.h',
'/usr/include/pthread.h',
'/usr/include/pty.h',
'/usr/include/pwd.h',
'/usr/include/re_comp.h',
'/usr/include/regex.h',
'/usr/include/regexp.h',
'/usr/include/sched.h',
'/usr/include/search.h',
'/usr/include/semaphore.h',
'/usr/include/setjmp.h',
'/usr/include/sgtty.h',
'/usr/include/shadow.h',
'/usr/include/signal.h',
'/usr/include/spawn.h',
'/usr/include/stdc-predef.h',
'/usr/include/stdint.h',
'/usr/include/stdio_ext.h',
'/usr/include/stdio.h',
'/usr/include/stdlib.h',
'/usr/include/string.h',
'/usr/include/strings.h',
'/usr/include/stropts.h',
'/usr/include/tar.h',
'/usr/include/termios.h',
'/usr/include/tgmath.h',
'/usr/include/thread_db.h',
'/usr/include/time.h',
'/usr/include/uchar.h',
'/usr/include/ucontext.h',
'/usr/include/ulimit.h',
'/usr/include/unistd.h',
'/usr/include/utime.h',
'/usr/include/utmp.h',
'/usr/include/utmpx.h',
'/usr/include/values.h',
'/usr/include/wchar.h',
'/usr/include/wctype.h',
'/usr/include/wordexp.h',
'/usr/include/xlocale.h',
],
destination_path="")
self.add_header_file([
'/usr/include/poll.h',
'/usr/include/unistdio.h',
'/usr/include/syslog.h',
'/usr/include/_G_config.h',
],
destination_path="")
self.add_header_file([
"/usr/include/sys/*",
],
destination_path="sys",
recursive=True)
self.add_header_file([
"/usr/include/bits/*",
],
destination_path="bits",
recursive=True)
self.add_header_file([
"/usr/include/gnu/*",
],
destination_path="gnu",
recursive=True)
self.add_header_file([
"/usr/include/linux/*",
],
destination_path="linux",
recursive=True)
self.add_header_file([
"/usr/include/asm/*",
],
destination_path="asm",
recursive=True)
self.add_header_file([
"/usr/include/asm-generic/*",
],
destination_path="asm-generic",
recursive=True)
self.add_header_file([
"/usr/include/netinet/*",
],
destination_path="netinet",
recursive=True)
self.add_header_file([
"/usr/include/net/*",
],
destination_path="net",
recursive=True)
self.add_export_flag("link", "-B/usr/lib")

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -19,8 +20,18 @@ class System(system.System):
self.help = "CXX: Generic C++ library"
self.valid = True
# no check needed ==> just add this:
self.add_module_depend([
'c',
'm',
'pthread'
])
self.add_export_flag("c++", "-D__STDCPP_GNU__")
self.add_export_flag("c++-remove", "-nostdlib")
self.add_export_flag("need-libstdc++", True)
#self.add_export_flag("c++-remove", "-nostdlib")
#self.add_export_flag("need-libstdc++", True)
self.add_export_flag("link-lib", "stdc++")
self.add_header_file([
"/usr/include/c++/6.1.1/*"
],
recursive=True)

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -24,5 +25,14 @@ class System(system.System):
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "jack")
self.add_module_depend([
'uuid',
'c'
])
self.add_header_file([
"/usr/include/jack/*",
],
destination_path="jack",
recursive=True)

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -21,5 +22,14 @@ class System(system.System):
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "m")
self.add_module_depend([
'c'
])
self.add_header_file([
"/usr/include/math.h"
],
clip_path="/usr/include",
recursive=False)

View File

@@ -0,0 +1,53 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help = "OpenGL: Generic graphic library"
self.valid = True
# no check needed ==> just add this:
self.add_module_depend([
'c',
'X11'
])
self.add_header_file([
"/usr/include/GL/*"
],
destination_path="GL",
recursive=True)
self.add_export_flag('link-lib', 'GL')
"""
if target.name=="Linux":
elif target.name=="Android":
my_module.add_export_flag('link-lib', "GLESv2")
elif target.name=="Windows":
my_module.add_module_depend([
"glew"
])
elif target.name=="MacOs":
my_module.add_export_flag('link', [
"-framework OpenGL"])
elif target.name=="IOs":
my_module.add_export_flag('link', [
"-framework OpenGLES"
])
"""

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,37 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="pthread : Generic multithreading system\n Can be install with the package:\n - pthread-dev"
# check if the library exist:
if not os.path.isfile("/usr/include/pthread.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "pthread")
self.add_header_file([
"/usr/include/sched.h",
"/usr/include/pthread.h"
],
clip_path="/usr/include/")
self.add_module_depend([
'c'
])

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -21,8 +22,37 @@ class System(system.System):
if not os.path.isfile("/usr/include/pulse/pulseaudio.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
dst_data = tools.file_read_data("/usr/include/pulse/version.h")
lines = dst_data.split("\n")
patern = "#define pa_get_headers_version() (\""
version = None
for line in lines:
if line[:len(patern)] == patern:
#Find the version line
version = line[len(patern)]
version2 = line[len(patern)+2]
debug.verbose("detect version '" + version + "'")
break;
if version == None:
debug.warning("Can not det version of Pulseaudio ... ==> remove it")
return
self.set_version([int(version),int(version2)])
self.valid = True
self.add_module_depend([
'c'
])
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", ["pulse-simple", "pulse"])
self.add_export_flag("link-lib", [
"pulsecommon-" + version + ".0",
"pulse-mainloop-glib",
"pulse-simple",
"pulse"
])
self.add_export_flag("link", "-L/usr/lib/pulseaudio")
self.add_header_file([
"/usr/include/pulse/*",
],
destination_path="pulse",
recursive=True)

View File

@@ -0,0 +1,36 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="rpc : generic RPC library (developed by oracle)"
# No check ==> on the basic std libs:
self.valid = True
self.add_module_depend([
'c'
])
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "rpcsvc")
self.add_header_file([
"/usr/include/rpc/*"
],
destination_path="rpc",
recursive=True)

View File

@@ -0,0 +1,37 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="uuid: Unique ID library"
# check if the library exist:
if not os.path.isfile("/usr/include/uuid/uuid.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
self.valid = True
self.add_module_depend([
'c'
])
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "uuid")
self.add_header_file([
"/usr/include/uuid/*",
],
destination_path="uuid",
recursive=True)

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -24,5 +25,12 @@ class System(system.System):
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "z")
self.add_module_depend([
'c'
])
self.add_header_file([
"/usr/include/zlib.h"
],
destination_path="")

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,9 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -0,0 +1,9 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -7,7 +8,6 @@
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import target
from lutin import tools
@@ -174,13 +174,15 @@ class Target(target.Target):
# -----------------------
self.add_flag("c", [
"-mfpu=neon",
"-march=armv7-a",
"-mfloat-abi=softfp",
"-D__ARM_ARCH_7__",
"-D__ARM_NEON__"
])
self.add_flag("link", [
"-mfpu=neon",
"-mfloat-abi=softfp"
"-mfloat-abi=softfp",
"-Wl,--fix-cortex-a8",
])
# the -mthumb must be set for all the android produc, some ot the not work coretly without this one ... (all android code is generated with this flags)
@@ -467,7 +469,7 @@ class Target(target.Target):
print("On release mode we need the file : and key an pasword to sign the application ...")
debug.print_element("pkg", ".apk(signed debug)", "<==", ".apk (not signed)")
cmdLine = "jarsigner " \
+ " -keystore " + base_pkg_path + "/AndroidKey.jks " \
+ " -keystore " + pkg_properties["ANDROID_SIGN"] + " " \
+ " -sigalg SHA1withRSA -digestalg SHA1 " \
+ target_outpath + "/build/" + pkg_name_application_name + "-unalligned.apk " \
+ " " + pkg_name_application_name

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -40,6 +41,9 @@ class Target(target.Target):
self.pkg_path_bin = "bin"
self.pkg_path_lib = "lib"
self.pkg_path_license = "license"
self.sysroot = "--sysroot=/aDirectoryThatDoesNotExist/"
"""
.local/application
@@ -73,30 +77,34 @@ class Target(target.Target):
"""
def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------")
debug.info("-- Generate generic '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("-- Generate generic '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("------------------------------------------------------------------------")
#output path
target_outpath = os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app")
tools.create_directory_of_file(target_outpath)
## Create share datas:
self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_share = self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## copy binary files:
self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_bin = self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create libraries:
self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files:
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## create the package:
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")
#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(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"))
if ret_share \
or ret_bin \
or ret_lib \
or ret_file:
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")
#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(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 install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------")

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -62,24 +63,30 @@ class Target(target.Target):
def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------")
debug.info("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("Generate package '" + pkg_name + "' v" + tools.version_to_string(pkg_properties["VERSION"]))
debug.debug("------------------------------------------------------------------------")
#output path
target_outpath = os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app")
tools.create_directory_of_file(target_outpath)
## Create share datas:
self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_share = self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## copy binary files:
self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_bin = self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create libraries:
self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files:
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## create the package:
if ret_share \
or ret_bin \
or ret_lib \
or ret_file:
debug.info("TODO: create a windows pkg ...")
def make_package_single_file(self, pkg_name, pkg_properties, base_pkg_path, heritage_list):
debug.debug("------------------------------------------------------------------------")

View File

@@ -1,4 +1,5 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
@@ -6,6 +7,7 @@
##
## @license APACHE v2.0 (see license file)
##
import platform
import os
import zipfile

View File

@@ -1,4 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from setuptools import setup
def readme():
@@ -7,7 +16,7 @@ def readme():
# https://pypi.python.org/pypi?%3Aaction=list_classifiers
setup(name='lutin',
version='1.2.0',
version='1.2.4',
description='Lutin generic builder (might replace makefile, CMake ...)',
long_description=readme(),
url='http://github.com/HeeroYui/lutin',