Compare commits

...

15 Commits
1.2.2 ... 1.2.6

Author SHA1 Message Date
dc42a8e14b [RELEASE] new version 1.2.6 2016-09-02 21:39:18 +02:00
97f7566a7e [DEV] rework isaolated function to manage it in option 2016-09-02 21:39:18 +02:00
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
45 changed files with 1026 additions and 95 deletions

View File

@@ -37,6 +37,7 @@ myArgs.add(arguments.ArgDefine("d", "depth", haveParam=True, desc="Depth of the
myArgs.add(arguments.ArgDefine("s", "force-strip", desc="Force the stripping of the compile elements")) 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("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(arguments.ArgDefine("w", "warning", desc="Store warning in a file build file"))
myArgs.add(arguments.ArgDefine("i", "isolate-system", desc="Isolate system build (copy header of c and c++ system lib to not include unneeded external libs) EXPERIMENTAL (archlinux)"))
myArgs.add_section("properties", "keep in the sequency of the cible") myArgs.add_section("properties", "keep in the sequency of the cible")
myArgs.add(arguments.ArgDefine("t", "target", haveParam=True, desc="Select a target (by default the platform is the computer that compile this) To know list : 'lutin.py --list-target'")) myArgs.add(arguments.ArgDefine("t", "target", haveParam=True, desc="Select a target (by default the platform is the computer that compile this) To know list : 'lutin.py --list-target'"))
@@ -237,6 +238,13 @@ def parseGenericArg(argument, active):
else: else:
env.set_force_optimisation(False) env.set_force_optimisation(False)
return True return True
elif argument.get_option_name() == "isolate-system":
if active==True:
if check_boolean(argument.get_arg()) == True:
env.set_isolate_system(True)
else:
env.set_isolate_system(False)
return True
elif argument.get_option_name() == "force-strip": elif argument.get_option_name() == "force-strip":
if active==True: if active==True:
if check_boolean(argument.get_arg()) == True: if check_boolean(argument.get_arg()) == True:
@@ -262,34 +270,46 @@ if os.path.isfile(config_file) == True:
debug.debug("Find basic configuration file: '" + config_file + "'") debug.debug("Find basic configuration file: '" + config_file + "'")
# the file exist, we can open it and get the initial configuration: # the file exist, we can open it and get the initial configuration:
configuration_file = __import__(config_file_name[:-3]) configuration_file = __import__(config_file_name[:-3])
if "get_exclude_path" in dir(configuration_file): if "get_exclude_path" in dir(configuration_file):
data = configuration_file.get_exclude_path() data = configuration_file.get_exclude_path()
debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'") debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
env.set_exclude_search_path(data) env.set_exclude_search_path(data)
if "get_parsing_depth" in dir(configuration_file): if "get_parsing_depth" in dir(configuration_file):
data = configuration_file.get_parsing_depth() data = configuration_file.get_parsing_depth()
debug.debug(" get default config 'get_parsing_depth' val='" + str(data) + "'") debug.debug(" get default config 'get_parsing_depth' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("depth", str(data)), True) parseGenericArg(arguments.ArgElement("depth", str(data)), True)
if "get_default_jobs" in dir(configuration_file): if "get_default_jobs" in dir(configuration_file):
data = configuration_file.get_default_jobs() data = configuration_file.get_default_jobs()
debug.debug(" get default config 'get_default_jobs' val='" + str(data) + "'") debug.debug(" get default config 'get_default_jobs' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("jobs", str(data)), True) parseGenericArg(arguments.ArgElement("jobs", str(data)), True)
if "get_default_color" in dir(configuration_file): if "get_default_color" in dir(configuration_file):
data = configuration_file.get_default_color() data = configuration_file.get_default_color()
debug.debug(" get default config 'get_default_color' val='" + str(data) + "'") debug.debug(" get default config 'get_default_color' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("color", str(data)), True) parseGenericArg(arguments.ArgElement("color", str(data)), True)
if "get_default_debug_level" in dir(configuration_file): if "get_default_debug_level" in dir(configuration_file):
data = configuration_file.get_default_debug_level() data = configuration_file.get_default_debug_level()
debug.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'") debug.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("verbose", str(data)), True) parseGenericArg(arguments.ArgElement("verbose", str(data)), True)
if "get_default_print_pretty" in dir(configuration_file): if "get_default_print_pretty" in dir(configuration_file):
data = configuration_file.get_default_print_pretty() data = configuration_file.get_default_print_pretty()
debug.debug(" get default config 'get_default_print_pretty' val='" + str(data) + "'") debug.debug(" get default config 'get_default_print_pretty' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("pretty", str(data)), True) parseGenericArg(arguments.ArgElement("pretty", str(data)), True)
if "get_default_force_optimisation" in dir(configuration_file):
data = configuration_file.get_default_force_optimisation()
debug.debug(" get default config 'get_default_force_optimisation' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("force-optimisation", str(data)), True)
if "get_default_isolate_system" in dir(configuration_file):
data = configuration_file.get_default_isolate_system()
debug.debug(" get default config 'get_default_isolate_system' val='" + str(data) + "'")
parseGenericArg(arguments.ArgElement("isolate-system", str(data)), True)

View File

@@ -39,6 +39,19 @@ def get_force_optimisation():
global force_optimisation global force_optimisation
return force_optimisation return force_optimisation
isolate_system=False
def set_isolate_system(val):
global isolate_system
if val==1:
isolate_system = 1
else:
isolate_system = 0
def get_isolate_system():
global isolate_system
return isolate_system
parse_depth = 9999999 parse_depth = 9999999
def set_parse_depth(val): def set_parse_depth(val):

View File

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

View File

@@ -78,7 +78,8 @@ class Module:
or moduleType == 'LIBRARY_DYNAMIC' \ or moduleType == 'LIBRARY_DYNAMIC' \
or moduleType == 'LIBRARY_STATIC' \ or moduleType == 'LIBRARY_STATIC' \
or moduleType == 'PACKAGE' \ or moduleType == 'PACKAGE' \
or moduleType == 'PREBUILD': or moduleType == 'PREBUILD' \
or moduleType == 'DATA':
self.type=moduleType self.type=moduleType
else : else :
debug.error('for module "%s"' %module_name) debug.error('for module "%s"' %module_name)
@@ -129,6 +130,7 @@ class Module:
"ANDROID_SIGN" : True "ANDROID_SIGN" : True
} }
self.sub_heritage_list = None self.sub_heritage_list = None
self.generate_file = []
def __repr__(self): def __repr__(self):
return "{lutin.Module:" + str(self.name) + "}" return "{lutin.Module:" + str(self.name) + "}"
@@ -166,8 +168,9 @@ class Module:
## ##
## @brief Send image in the build data directory ## @brief Send image in the build data directory
## @param[in] target Target object ## @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: for source, destination, sizeX, sizeY in self.image_to_copy:
extension = source[source.rfind('.'):] extension = source[source.rfind('.'):]
if extension != ".png" \ if extension != ".png" \
@@ -187,13 +190,17 @@ class Module:
image.resize(source, os.path.join(target.get_build_path_data(self.name), destination), sizeX, sizeY, file_cmd) image.resize(source, os.path.join(target.get_build_path_data(self.name), destination), sizeX, sizeY, file_cmd)
else: else:
debug.verbose("Might copy file : " + display_source + " ==> " + destination) 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 ## @brief Send files in the build data directory
## @param[in] target Target object ## @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: for source, destination in self.files:
display_source = source display_source = source
source = os.path.join(self.origin_path, source) source = os.path.join(self.origin_path, source)
@@ -203,13 +210,17 @@ class Module:
# TODO : set it back : file_cmd = target.get_build_path_data(self.name) # TODO : set it back : file_cmd = target.get_build_path_data(self.name)
file_cmd = "" file_cmd = ""
debug.verbose("Might copy file : " + display_source + " ==> " + destination) 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 ## @brief Send compleate folder in the build data directory
## @param[in] target Target object ## @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: for source, destination in self.paths:
debug.debug("Might copy path : " + source + "==>" + destination) debug.debug("Might copy path : " + source + "==>" + destination)
tmp_path = os.path.dirname(os.path.realpath(os.path.join(self.origin_path, source))) tmp_path = os.path.dirname(os.path.realpath(os.path.join(self.origin_path, source)))
@@ -232,7 +243,10 @@ class Module:
# new_destination = os.path.join(new_destination, root[len(source)-1:]) # 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) + "'" ) 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 : ... 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)
@@ -327,8 +341,9 @@ class Module:
for line_base in start_with: for line_base in start_with:
if elem[:len(line_base)] == line_base: if elem[:len(line_base)] == line_base:
find = True find = True
elem = elem[len(line_base)+1:] elem = elem[len(line_base):]
break; break;
debug.verbose(" temp Value: " + str(elem))
if find == False: if find == False:
debug.warning(" gcov ret : " + str(elem)); debug.warning(" gcov ret : " + str(elem));
debug.warning(" ==> does not start with : " + str(start_with)); debug.warning(" ==> does not start with : " + str(start_with));
@@ -375,6 +390,7 @@ class Module:
debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0])); debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0]));
else: else:
debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0])); debug.info(" % " + str(elem[1]) + "\r\t\t" + str(elem[0]));
debug.verbose(" " + str(elem[2]) + " / " + str(elem[3]));
try: try:
pourcent = 100.0*float(executed_lines)/float(executable_lines) pourcent = 100.0*float(executed_lines)/float(executable_lines)
except ZeroDivisionError: except ZeroDivisionError:
@@ -433,6 +449,7 @@ class Module:
self.sub_heritage_list = heritage.HeritageList() self.sub_heritage_list = heritage.HeritageList()
# optionnal dependency : # optionnal dependency :
for dep, option, export in self.depends_optionnal: 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) inherit_list, isBuilt = target.build(dep, package_name, True)
if isBuilt == True: if isBuilt == True:
self.local_heritage.add_depends(dep); self.local_heritage.add_depends(dep);
@@ -469,7 +486,9 @@ class Module:
# -- Generic library help -- # -- Generic library help --
# ---------------------------------------------------- # ----------------------------------------------------
package_version_string = tools.version_to_string(self.package_prop["VERSION"]); 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) debug.print_element("Prebuild", self.name, "-", package_version_string)
elif self.type == 'LIBRARY': elif self.type == 'LIBRARY':
debug.print_element("Library", self.name, "-", package_version_string) debug.print_element("Library", self.name, "-", package_version_string)
@@ -485,9 +504,59 @@ class Module:
debug.print_element("Binary (stand alone)", self.name, "-", package_version_string) debug.print_element("Binary (stand alone)", self.name, "-", package_version_string)
elif self.type == 'PACKAGE': elif self.type == 'PACKAGE':
debug.print_element("Package", self.name, "-", package_version_string) 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': if self.type != 'PREBUILD':
# build local sources in a specific order: # build local sources in a specific order:
for extention_local in self.extention_order_build: for extention_local in self.extention_order_build:
@@ -708,43 +777,23 @@ class Module:
basic_path = self.origin_path) basic_path = self.origin_path)
except ValueError: except ValueError:
debug.error(" UN-SUPPORTED link format: 'binary'") debug.error(" UN-SUPPORTED link format: 'binary'")
elif self.type == "DATA":
debug.debug("Data package have noting to build... just install")
else: else:
debug.error("Did not known the element type ... (impossible case) type=" + self.type) 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 -- # -- install data --
# ---------------------------------------------------- # ----------------------------------------------------
debug.debug("install datas") debug.debug("install datas")
self.image_to_build(target) copy_list={}
self.files_to_build(target) 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.paths_to_build(target) self.files_to_build(target, copy_list)
# TODO : do sothing that create a list of file set in this directory and remove it if necessary ... ==> if not needed anymore ... 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 # create local heritage specification
self.local_heritage.auto_add_build_header() self.local_heritage.auto_add_build_header()
@@ -849,25 +898,117 @@ class Module:
def add_src_file(self, list): def add_src_file(self, list):
tools.list_append_to(self.src, list, True) 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: if destination_path != None:
debug.verbose("Change destination PATH: '" + str(destination_path) + "'") debug.verbose("Change destination PATH: '" + str(destination_path) + "'")
new_list = [] new_list = []
if type(list) == str:
list = [list]
for elem in list: for elem in list:
base = os.path.basename(elem)
if destination_path != None: if destination_path != None:
base = os.path.basename(elem) if clip_path != None:
if '*' in base or '[' in base or '(' in base: 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, new_list.append({"src":elem,
"multi-dst":destination_path}) "multi-dst":destination_path,
"recursive":recursive})
else: else:
new_list.append({"src":elem, new_list.append({"src":elem,
"dst":os.path.join(destination_path, base)}) "dst":os.path.join(destination_path, base),
"recursive":recursive})
else: else:
new_list.append({"src":elem, if clip_path == None:
"dst":elem}) 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) 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'): def add_export_path(self, list, type='c'):
tools.list_append_to_2(self.path["export"], type, list) tools.list_append_to_2(self.path["export"], type, list)

View File

@@ -28,6 +28,8 @@ class System:
self.export_src=[] self.export_src=[]
self.export_path=[] self.export_path=[]
self.action_on_state={} self.action_on_state={}
self.headers=[]
self.version=None
def add_export_sources(self, list): def add_export_sources(self, list):
tools.list_append_to(self.export_src, list) tools.list_append_to(self.export_src, list)
@@ -42,12 +44,21 @@ class System:
def add_export_flag(self, type, list): def add_export_flag(self, type, list):
tools.list_append_to_2(self.export_flags, 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): 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: if name_of_state not in self.action_on_add_src_filestate:
self.action_on_state[name_of_state] = [[level, name, action]] self.action_on_state[name_of_state] = [[level, name, action]]
else: else:
self.action_on_state[name_of_state].append([level, name, action]) 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): def __repr__(self):
return "{lutin.System}" return "{lutin.System}"
@@ -69,7 +80,14 @@ def create_module_from_system(target, dict):
for elem in dict["system"].action_on_state: for elem in dict["system"].action_on_state:
level, name, action = dict["system"].action_on_state[elem] level, name, action = dict["system"].action_on_state[elem]
target.add_action(elem, level, name, action) 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 return myModule
@@ -140,13 +158,13 @@ def exist(lib_name, target_name, target) :
debug.verbose("add to path: '" + os.path.dirname(data["path"]) + "'") debug.verbose("add to path: '" + os.path.dirname(data["path"]) + "'")
sys.path.append(os.path.dirname(data["path"])) sys.path.append(os.path.dirname(data["path"]))
debug.verbose("import system : '" + data["name"] + "'") 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 #create the system module
try: debug.verbose("SYSTEM: request: " + str(data["name"]))
debug.verbose("SYSTEM: request: " + data["name"]) if "System" in dir(the_system):
data["system"] = theSystem.System(target) data["system"] = the_system.System(target)
data["exist"] = data["system"].valid data["exist"] = data["system"].valid
except: else:
debug.warning("Not find: '" + data["name"] + "' ==> get exception") debug.warning("Not find: '" + data["name"] + "' ==> get exception")
return data["exist"] return data["exist"]
return False return False

View File

@@ -98,6 +98,7 @@ class Target:
'-D__TARGET_ADDR__' + self.select_bus + 'BITS', '-D__TARGET_ADDR__' + self.select_bus + 'BITS',
'-D_REENTRANT' '-D_REENTRANT'
]) ])
self.add_flag("c", "-nodefaultlibs")
self.add_flag("c++", "-nostdlib") self.add_flag("c++", "-nostdlib")
self.add_flag("ar", 'rcs') self.add_flag("ar", 'rcs')
@@ -144,6 +145,7 @@ class Target:
self.path_data="share" self.path_data="share"
self.path_doc="doc" self.path_doc="doc"
self.path_include="include" self.path_include="include"
self.path_temporary_generate="generate"
self.path_object="obj" self.path_object="obj"
@@ -361,6 +363,9 @@ class Target:
def get_build_path_include(self, binary_name): def get_build_path_include(self, binary_name):
return os.path.join(self.get_build_path(binary_name), self.path_include) 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): def get_build_file_bin(self, binary_name):
return os.path.join(self.get_build_path_bin(binary_name), binary_name + self.suffix_binary) return os.path.join(self.get_build_path_bin(binary_name), binary_name + self.suffix_binary)

View File

@@ -127,6 +127,7 @@ def link(file, binary, target, depancy, flags, name, basic_path, static = False)
cmd.append("-Wl,-R$ORIGIN/../lib/") cmd.append("-Wl,-R$ORIGIN/../lib/")
except: except:
pass pass
cmd.append("-Wl,-rpath,\"\$ORIGIN/../lib\"")
try: try:
cmd.append(flags["local"]["link"]) cmd.append(flags["local"]["link"])
except: except:
@@ -145,12 +146,20 @@ def link(file, binary, target, depancy, flags, name, basic_path, static = False)
for type in ["link-lib"]: for type in ["link-lib"]:
if type in flags[view]: if type in flags[view]:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in flags[view][type] ]) 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"]: for type in ["link-lib"]:
if type in depancy.flags: if type in depancy.flags:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in depancy.flags[type] ]) cmd.append([("-l" + sss).replace("-l/", "/") for sss in depancy.flags[type] ])
for type in ["link-lib"]: for type in ["link-lib"]:
if type in target.global_flags: if type in target.global_flags:
cmd.append([("-l" + sss).replace("-l/", "/") for sss in target.global_flags[type] ]) 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) cmd_line = tools.list_to_str(cmd)
# check the dependency for this file : # 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 \ if depend.need_re_package(file_dst, file_src, True, file_cmd=file_cmd, cmd_line=cmd_line) == False \

View File

@@ -70,8 +70,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
target.cc, target.cc,
"-o", file_dst, "-o", file_dst,
target.arch, target.arch,
target.sysroot, target.sysroot]
target.global_include_cc]
for view in ["export", "local"]: for view in ["export", "local"]:
try: try:
cmd.append(tools.add_prefix("-I", path[view]["c"])) cmd.append(tools.add_prefix("-I", path[view]["c"]))
@@ -81,6 +80,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
cmd.append(tools.add_prefix("-I", depancy.path["c"])) cmd.append(tools.add_prefix("-I", depancy.path["c"]))
except: except:
pass pass
cmd.append(target.global_include_cc)
try: try:
cmd.append(get_version_compilation_flags(flags, depancy.flags)) cmd.append(get_version_compilation_flags(flags, depancy.flags))
except: except:

View File

@@ -75,8 +75,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
target.xx, target.xx,
"-o", file_dst, "-o", file_dst,
target.arch, target.arch,
target.sysroot, target.sysroot
target.global_include_cc
] ]
for view in ["export", "local"]: for view in ["export", "local"]:
for type in ["c", "c++"]: for type in ["c", "c++"]:
@@ -89,6 +88,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_path, module
cmd.append(tools.add_prefix("-I",depancy.path[type])) cmd.append(tools.add_prefix("-I",depancy.path[type]))
except: except:
pass pass
cmd.append(target.global_include_cc)
try: try:
cmd.append(get_version_compilation_flags(flags, depancy.flags)) cmd.append(get_version_compilation_flags(flags, depancy.flags))
except: except:

View File

@@ -49,3 +49,57 @@ def get_output_type():
## ##
def get_support_multithreading(): def get_support_multithreading():
return True 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

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -0,0 +1,23 @@
#!/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
from lutin import env
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

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

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
from lutin import env
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,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
from lutin import env
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

@@ -10,6 +10,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

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
from lutin import env
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_export_flag('link-lib', 'X11')
if env.get_isolate_system() == False:
self.add_header_file([
"/usr/include/X11/*"
],
destination_path="X11",
recursive=True)

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -24,7 +25,22 @@ class System(system.System):
# we did not find the library reqiested (just return) (automaticly set at false) # we did not find the library reqiested (just return) (automaticly set at false)
return; return;
self.valid = True self.valid = True
# todo : create a searcher of the presence of the library: if env.get_isolate_system() == False:
self.add_export_flag("link-lib", "asound") self.add_export_flag("link-lib", "asound")
else:
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,41 @@
#!/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
from lutin import env
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)"
# check if the library exist:
if not os.path.isfile("/usr/include/arpa/ftp.h"):
# we did not find the library reqiested (just return) (automaticly set at false)
return;
# No check ==> on the basic std libs:
self.valid = True
if env.get_isolate_system() == True:
#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

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -23,12 +24,22 @@ class System(system.System):
# we did not find the library reqiested (just return) (automaticly set at false) # we did not find the library reqiested (just return) (automaticly set at false)
return; return;
self.valid = True self.valid = True
# todo : create a searcher of the presence of the library: if env.get_isolate_system() == False:
self.add_export_flag("link-lib", [ # todo : create a searcher of the presence of the library:
"boost_system", self.add_export_flag("link-lib", [
"boost_thread", "boost_system",
"boost_chrono" "boost_thread",
]) "boost_chrono"
])
else:
self.add_header_file([
"/usr/include/boost/*"
],
destination_path="boost",
recursive=True)
self.add_module_depend([
'cxx'
])

View File

@@ -0,0 +1,175 @@
#!/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
from lutin import env
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
if env.get_isolate_system() == False:
# We must have it ... all time
pass
else:
# 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

@@ -11,6 +11,8 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import multiprocess
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -20,8 +22,29 @@ class System(system.System):
self.help = "CXX: Generic C++ library" self.help = "CXX: Generic C++ library"
self.valid = True self.valid = True
# no check needed ==> just add this: # 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++", "-D__STDCPP_GNU__")
self.add_export_flag("c++-remove", "-nostdlib") if env.get_isolate_system() == False:
self.add_export_flag("need-libstdc++", True) self.add_export_flag("c++-remove", "-nostdlib")
self.add_export_flag("need-libstdc++", True)
else:
self.add_export_flag("link-lib", "stdc++")
compilator_gcc = "g++"
if target.config["compilator-version"] != "":
compilator_gcc = compilator_gcc + "-" + target.config["compilator-version"]
#get g++ compilation version :
version_cpp = multiprocess.run_command_direct(compilator_gcc + " -dumpversion");
if version_cpp == False:
debug.error("Can not get the g++ version ...")
self.add_header_file([
"/usr/include/c++/" + version_cpp + "/*"
],
recursive=True)

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -23,7 +24,16 @@ class System(system.System):
# we did not find the library reqiested (just return) (automaticly set at false) # we did not find the library reqiested (just return) (automaticly set at false)
return; return;
self.valid = True self.valid = True
# todo : create a searcher of the presence of the library: self.add_module_depend([
'uuid',
'c'
])
self.add_export_flag("link-lib", "jack") self.add_export_flag("link-lib", "jack")
if env.get_isolate_system() == True:
self.add_header_file([
"/usr/include/jack/*",
],
destination_path="jack",
recursive=True)

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -22,5 +23,15 @@ class System(system.System):
self.valid = True self.valid = True
# todo : create a searcher of the presence of the library: # todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "m") self.add_export_flag("link-lib", "m")
self.add_module_depend([
'c'
])
if env.get_isolate_system() == True:
self.add_header_file([
"/usr/include/math.h"
],
clip_path="/usr/include",
recursive=False)

View File

@@ -0,0 +1,54 @@
#!/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
from lutin import env
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_export_flag('link-lib', 'GL')
if env.get_isolate_system() == True:
self.add_header_file([
"/usr/include/GL/*"
],
destination_path="GL",
recursive=True)
"""
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

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -0,0 +1,39 @@
#!/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
from lutin import env
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'
])
if env.get_isolate_system() == True:
self.add_header_file([
"/usr/include/sched.h",
"/usr/include/pthread.h"
],
clip_path="/usr/include/")

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -22,8 +23,43 @@ class System(system.System):
if not os.path.isfile("/usr/include/pulse/pulseaudio.h"): if not os.path.isfile("/usr/include/pulse/pulseaudio.h"):
# we did not find the library reqiested (just return) (automaticly set at false) # we did not find the library reqiested (just return) (automaticly set at false)
return; 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.valid = True
# todo : create a searcher of the presence of the library: self.add_module_depend([
self.add_export_flag("link-lib", ["pulse-simple", "pulse"]) 'c'
])
if env.get_isolate_system() == False:
self.add_export_flag("link-lib", [
"pulse-simple",
"pulse"
])
else:
# todo : create a searcher of the presence of the library:
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,38 @@
#!/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
from lutin import env
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")
if env.get_isolate_system() == False:
self.add_header_file([
"/usr/include/rpc/*"
],
destination_path="rpc",
recursive=True)

View File

@@ -0,0 +1,39 @@
#!/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
from lutin import env
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")
if env.get_isolate_system() == False:
self.add_header_file([
"/usr/include/uuid/*",
],
destination_path="uuid",
recursive=True)

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):
@@ -25,5 +26,14 @@ class System(system.System):
self.valid = True self.valid = True
# todo : create a searcher of the presence of the library: # todo : create a searcher of the presence of the library:
self.add_export_flag("link-lib", "z") self.add_export_flag("link-lib", "z")
self.add_module_depend([
'c'
])
if env.get_isolate_system() == False:
self.add_header_file([
"/usr/include/zlib.h"
],
destination_path="")

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import system from lutin import system
from lutin import tools from lutin import tools
from lutin import env
import os import os
class System(system.System): class System(system.System):

View File

@@ -174,13 +174,15 @@ class Target(target.Target):
# ----------------------- # -----------------------
self.add_flag("c", [ self.add_flag("c", [
"-mfpu=neon", "-mfpu=neon",
"-march=armv7-a",
"-mfloat-abi=softfp", "-mfloat-abi=softfp",
"-D__ARM_ARCH_7__", "-D__ARM_ARCH_7__",
"-D__ARM_NEON__" "-D__ARM_NEON__"
]) ])
self.add_flag("link", [ self.add_flag("link", [
"-mfpu=neon", "-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) # 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)

View File

@@ -11,6 +11,7 @@
from lutin import debug from lutin import debug
from lutin import target from lutin import target
from lutin import tools from lutin import tools
from lutin import env
import os import os
import stat import stat
import re import re
@@ -41,6 +42,10 @@ class Target(target.Target):
self.pkg_path_bin = "bin" self.pkg_path_bin = "bin"
self.pkg_path_lib = "lib" self.pkg_path_lib = "lib"
self.pkg_path_license = "license" self.pkg_path_license = "license"
# disable sysroot when generate build in isolated mode
if env.get_isolate_system() == True:
self.sysroot = "--sysroot=/aDirectoryThatDoesNotExist/"
""" """
.local/application .local/application

View File

@@ -16,7 +16,7 @@ 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='1.2.2', version='1.2.6',
description='Lutin generic builder (might replace makefile, CMake ...)', 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',