[DEV] work again with separate elements

This commit is contained in:
Edouard DUPIN 2015-05-06 16:43:16 +02:00
parent 63e46b8487
commit 78336f359e
12 changed files with 331 additions and 207 deletions

View File

@ -1,6 +1,12 @@
## ##
## Executable/binary builder ## Executable/binary builder
## ##
import lutinMultiprocess
import lutinTools
import lutinDebug as debug
import lutinDepend as dependency
import lutinEnv
import os
## ##
## Initialize the builder, if needed ... to get dependency between builder (for example) ## Initialize the builder, if needed ... to get dependency between builder (for example)
@ -12,7 +18,7 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "linker" return "linker"
@ -20,49 +26,76 @@ def getType():
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["o"] return ["o"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["", "exe"] return ["", "exe", "bin"]
## ##
## @brief Commands for running gcc to link an executable. ## @brief Commands for running gcc to link an executable.
## ##
def link(file, binary, target, depancy, libName=""): def link(file, binary, target, depancy, name, basic_folder):
if libName=="": file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, name, basic_folder, file, "bin")
libName = self.name
file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, libName,self.originFolder,file,"bin")
#create comdLine : #create comdLine :
cmdLine=lutinTools.list_to_str([ cmd = [
target.xx, target.xx
target.arch, ]
target.sysroot, try:
target.global_sysroot, cmd.append(target.arch)
"-o", file_dst, except:
file_src, pass
depancy.src, try:
self.flags_ld, cmd.append(target.sysroot)
depancy.flags_ld, except:
target.global_flags_ld]) pass
try:
cmd.append(target.global_sysroot)
except:
pass
try:
cmd.append(["-o", file_dst])
except:
pass
try:
cmd.append(file_src)
except:
pass
try:
cmd.append(depancy.src)
except:
pass
try:
cmd.append(flags["local"]["link"])
except:
pass
try:
cmd.append(depancy.flags["link"])
except:
pass
try:
cmd.append(target.global_flags_ld)
except:
pass
cmdLine=lutinTools.list_to_str(cmd)
# check the dependency for this file : # check the dependency for this file :
if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \ if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \
and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False: and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False:
return file_dst return file_dst
lutinTools.create_directory_of_file(file_dst) lutinTools.create_directory_of_file(file_dst)
debug.print_element("Executable", libName, "==>", file_dst) debug.print_element("Executable", name, "==>", file_dst)
lutinMultiprocess.run_command(cmdLine) lutinMultiprocess.run_command(cmdLine)
if target.config["mode"] == "release"\ if target.config["mode"] == "release"\
or lutinEnv.get_force_strip_mode() == True: or lutinEnv.get_force_strip_mode() == True:
# get the file size of the non strip file # get the file size of the non strip file
originSize = lutinTools.file_size(file_dst); originSize = lutinTools.file_size(file_dst);
debug.print_element("Executable(strip)", libName, "", "") debug.print_element("Executable(strip)", name, "", "")
cmdLineStrip=lutinTools.list_to_str([ cmdLineStrip=lutinTools.list_to_str([
target.strip, target.strip,
file_dst]) file_dst])

View File

@ -3,6 +3,7 @@
## ##
import lutinMultiprocess import lutinMultiprocess
import lutinTools import lutinTools
import lutinDebug as debug
import lutinDepend as dependency import lutinDepend as dependency
# C version: # C version:
@ -19,21 +20,21 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["c", "C"] return ["c", "C"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["o"] return ["o"]
## ##

View File

@ -3,6 +3,7 @@
## ##
import lutinMultiprocess import lutinMultiprocess
import lutinTools import lutinTools
import lutinDebug as debug
import lutinDepend as dependency import lutinDepend as dependency
# C++ default version: # C++ default version:
default_version = 1999 default_version = 1999
@ -18,21 +19,21 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["cpp", "CPP", "cxx", "CXX", "xx", "XX", "CC", "cc"] return ["cpp", "CPP", "cxx", "CXX", "xx", "XX", "CC", "cc"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["o"] return ["o"]
## ##

View File

@ -3,6 +3,7 @@
## ##
import lutinMultiprocess import lutinMultiprocess
import lutinTools import lutinTools
import lutinDebug as debug
import lutinDepend as dependency import lutinDepend as dependency
## ##
@ -15,19 +16,19 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["java"] return ["java"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["class"] return ["class"]

View File

@ -3,7 +3,9 @@
## ##
import lutinMultiprocess import lutinMultiprocess
import lutinTools import lutinTools
import lutinDebug as debug
import lutinDepend as dependency import lutinDepend as dependency
import os
## ##
## Initialize the builder, if needed ... to get dependency between builder (for example) ## Initialize the builder, if needed ... to get dependency between builder (for example)
@ -15,56 +17,76 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "linker" return "linker"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["o"] return ["o"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["so", "dynlib", "dll"] return ["so", "dynlib", "dll"]
## ##
## @brief Commands for running gcc to link a shared library. ## @brief Commands for running gcc to link a shared library.
## ##
def link(file, binary, target, depancy, libName=""): def link(file, binary, target, depancy, name, basic_folder):
if libName=="": file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, name, basic_folder, file, "lib-shared")
libName = self.name
file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, libName,self.originFolder,file,"lib-shared")
#create command Line #create command Line
cmdLine=lutinTools.list_to_str([ cmd = [
target.xx, target.xx,
"-o", file_dst, "-o", file_dst
target.global_sysroot, ]
target.arch, try:
"-shared", cmd.append(target.global_sysroot)
file_src, except:
depancy.src, pass
self.flags_ld, try:
depancy.flags_ld, cmd.append(target.arch)
target.global_flags_ld]) except:
pass
cmd.append("-shared")
try:
cmd.append(file_src)
except:
pass
try:
cmd.append(depancy.src)
except:
pass
try:
cmd.append(flags["local"]["link"])
except:
pass
try:
cmd.append(depancy.flags["link"])
except:
pass
try:
cmd.append(target.global_flags_ld)
except:
pass
cmdLine=lutinTools.list_to_str(cmd)
# check the dependency for this file : # check the dependency for this file :
if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \ if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \
and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False: and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False:
return tmpList[1] return tmpList[1]
lutinTools.create_directory_of_file(file_dst) lutinTools.create_directory_of_file(file_dst)
debug.print_element("SharedLib", libName, "==>", file_dst) debug.print_element("SharedLib", name, "==>", file_dst)
lutinMultiprocess.run_command(cmdLine) lutinMultiprocess.run_command(cmdLine)
# strip the output file: # strip the output file:
if target.config["mode"] == "release" \ if target.config["mode"] == "release" \
or lutinEnv.get_force_strip_mode() == True: or lutinEnv.get_force_strip_mode() == True:
# get the file size of the non strip file # get the file size of the non strip file
originSize = lutinTools.file_size(file_dst); originSize = lutinTools.file_size(file_dst);
debug.print_element("SharedLib(strip)", libName, "", "") debug.print_element("SharedLib(strip)", name, "", "")
cmdLineStrip=lutinTools.list_to_str([ cmdLineStrip=lutinTools.list_to_str([
target.strip, target.strip,
file_dst]) file_dst])

View File

@ -3,7 +3,9 @@
## ##
import lutinMultiprocess import lutinMultiprocess
import lutinTools import lutinTools
import lutinDebug as debug
import lutinDepend as dependency import lutinDepend as dependency
import os
## ##
## Initialize the builder, if needed ... to get dependency between builder (for example) ## Initialize the builder, if needed ... to get dependency between builder (for example)
@ -15,45 +17,55 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "linker" return "linker"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["o"] return ["o"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["a"] return ["a"]
## ##
## @brief Commands for running ar. ## @brief Commands for running ar.
## ##
def link(file, binary, target, depancy, libName=""): def link(file, binary, target, depancy, name, basic_folder):
if libName == "": file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, name, basic_folder, file, "lib-static")
libName = self.name
file_src, file_dst, file_depend, file_cmd = target.generate_file(binary, libName,self.originFolder,file,"lib-static")
#$(Q)$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $(PRIVATE_ALL_OBJECTS) #$(Q)$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $(PRIVATE_ALL_OBJECTS)
cmdLine=lutinTools.list_to_str([ cmd = [
target.ar, target.ar
target.global_flags_ar, ]
self.flags_ar, try:
file_dst, cmd.append(target.global_flags_ar)
file_src])#, except:
#depancy.src]) pass
try:
cmd.append(flags["local"]["link"])
except:
pass
try:
cmd.append(file_dst)
except:
pass
try:
cmd.append(file_src)
except:
pass
cmdLine=lutinTools.list_to_str(cmd)
# check the dependency for this file : # check the dependency for this file :
if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \ if dependency.need_re_package(file_dst, file_src, True, file_cmd, cmdLine) == False \
and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False: and dependency.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False:
return file_dst return file_dst
lutinTools.create_directory_of_file(file_dst) lutinTools.create_directory_of_file(file_dst)
debug.print_element("StaticLib", libName, "==>", file_dst) debug.print_element("StaticLib", name, "==>", file_dst)
# explicitly remove the destination to prevent error ... # explicitly remove the destination to prevent error ...
if os.path.exists(file_dst) and os.path.isfile(file_dst): if os.path.exists(file_dst) and os.path.isfile(file_dst):
os.remove(file_dst) os.remove(file_dst)

View File

@ -15,27 +15,27 @@ local_ref_on_builder_c = None
def init(): def init():
global local_ref_on_builder_c global local_ref_on_builder_c
debug.debug("m builder get dependency on the C builder") debug.debug("m builder get dependency on the C builder")
local_ref_on_builder_c = lutinBuilder.getBuilder("c") local_ref_on_builder_c = lutinBuilder.get_builder("c")
## ##
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["m", "M"] return ["m", "M"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["o"] return ["o"]
## ##

View File

@ -15,27 +15,27 @@ local_ref_on_builder_cpp = None
def init(): def init():
global local_ref_on_builder_cpp global local_ref_on_builder_cpp
debug.debug("mm builder get dependency on the CPP builder") debug.debug("mm builder get dependency on the CPP builder")
local_ref_on_builder_cpp = lutinBuilder.getBuilder("cpp") local_ref_on_builder_cpp = lutinBuilder.get_builder("cpp")
## ##
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["mm", "MM"] return ["mm", "MM"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["o"] return ["o"]
## ##

View File

@ -15,19 +15,19 @@ def init():
## Get the current builder type. ## Get the current builder type.
## Return the type of builder ## Return the type of builder
## ##
def getType(): def get_type():
return "compiler" return "compiler"
## ##
## @brief Get builder input file type ## @brief Get builder input file type
## @return List of extention supported ## @return List of extention supported
## ##
def getInputType(): def get_input_type():
return ["s", "S"] return ["s", "S"]
## ##
## @brief Get builder output file type ## @brief Get builder output file type
## @return List of extention supported ## @return List of extention supported
## ##
def getOutputType(): def get_output_type():
return ["o"] return ["o"]

View File

@ -47,7 +47,7 @@ def import_path(path):
builder_list.append({"name":builder_name, builder_list.append({"name":builder_name,
"element":the_builder "element":the_builder
}) })
debug.debug('BUILDER: type=' + the_builder.getType() + " in=" + str(the_builder.getInputType()) + " out=" + str(the_builder.getOutputType())) debug.debug('BUILDER: type=' + the_builder.get_type() + " in=" + str(the_builder.get_input_type()) + " out=" + str(the_builder.get_output_type()))
# we must have call all import before ... # we must have call all import before ...
def init(): def init():
@ -57,13 +57,23 @@ def init():
if element["element"] != None: if element["element"] != None:
element["element"].init() element["element"].init()
def getBuilder(input_type): def get_builder(input_type):
global builder_list global builder_list
for element in builder_list: for element in builder_list:
if element["element"] != None: if element["element"] != None:
if input_type in element["element"].getInputType(): if input_type in element["element"].get_input_type():
return element["element"] return element["element"]
# we can not find the builder ... # we can not find the builder ...
debug.error("Can not find builder for type : '" + str(input_type) + "'") debug.error("Can not find builder for type : '" + str(input_type) + "'")
return None raise ValueError('type error :' + str(input_type))
def get_builder_with_output(input_type):
global builder_list
for element in builder_list:
if element["element"] != None:
if input_type in element["element"].get_output_type():
return element["element"]
# we can not find the builder ...
debug.error("Can not find builder for type : '" + str(input_type) + "'")
raise ValueError('type error :' + str(input_type))

View File

@ -43,7 +43,7 @@ class HeritageList:
if element.name == heritage.name: if element.name == heritage.name:
return return
self.listHeritage.append(heritage) self.listHeritage.append(heritage)
self.regenerateTree() self.regenerate_tree()
def add_heritage_list(self, heritage_list): def add_heritage_list(self, heritage_list):
if type(heritage_list) == type(None): if type(heritage_list) == type(None):
@ -55,9 +55,9 @@ class HeritageList:
find = True find = True
if find == False: if find == False:
self.listHeritage.append(herit) self.listHeritage.append(herit)
self.regenerateTree() self.regenerate_tree()
def regenerateTree(self): def regenerate_tree(self):
self.flags={} self.flags={}
# sources list: # sources list:
self.src=[] self.src=[]
@ -91,22 +91,28 @@ class HeritageList:
for element in self.listHeritage: for element in self.listHeritage:
debug.verbose(" " + element.name + " " + str(element.depends)) debug.verbose(" " + element.name + " " + str(element.depends))
for element in reversed(self.listHeritage): for element in reversed(self.listHeritage):
debug.debug("elem : " + str(element.flags))
for flags in element.flags: for flags in element.flags:
if flags in ["c-version", "c++-version"]:
continue
value = element.flags[flags] value = element.flags[flags]
debug.debug(" elem : " + str(flags))
if flags not in self.flags: if flags not in self.flags:
self.flags[flags] = value self.flags[flags] = value
else: else:
append_to_list(self.flags[flags], value) append_to_list(self.flags[flags], value)
append_to_list(self.path, element.path) append_to_list(self.path, element.path)
append_to_list(self.src, element.src) append_to_list(self.src, element.src)
""" if "c-version" in element.flags:
if self.flags_xx_version < element.flags_xx_version: ver = element.flags["c-version"]
self.flags_xx_version = element.flags_xx_version if "c-version" in self.flags:
if self.flags_cc_version < element.flags_cc_version: if self.flags["c-version"] > ver:
self.flags_cc_version = element.flags_cc_version ver = self.flags["c-version"]
""" self.flags["c-version"] = ver
if "c++-version" in element.flags:
ver = element.flags["c++-version"]
if "c++-version" in self.flags:
if self.flags["c++-version"] > ver:
ver = self.flags["c++-version"]
self.flags["c++-version"] = ver
class heritage: class heritage:
@ -126,13 +132,9 @@ class heritage:
# all the parameter that the upper classe need when build # all the parameter that the upper classe need when build
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
self.flags = module.flags["export"] self.flags = module.flags["export"]
self.path = module.path["export"] self.path = module.path["export"]
if "c++-version" in self.flags:
self.flags["c++-version"] = self.flags["c++-version"]["api-version"]
if "c-version" in self.flags:
self.flags["c-version"] = self.flags["c-version"]["api-version"]
def add_depends(self, depend): def add_depends(self, depend):
self.depends.append(depend) self.depends.append(depend)
@ -160,11 +162,17 @@ class heritage:
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)
self.add_sources(other.src) self.add_sources(other.src)
""" if "c-version" in module.flags["export"]:
if self.flags_xx_version < module.xx_version_api: ver = module.flags["export"]["c-version"]
self.flags_xx_version = module.xx_version_api if "c-version" in self.flags:
if self.flags_cc_version < module.cc_version_api: if self.flags["c-version"] > ver:
self.flags_cc_version = module.cc_version_api ver = self.flags["c-version"]
""" self.flags["c-version"] = ver
if "c++-version" in module.flags["export"]:
ver = module.flags["export"]["c++-version"]
if "c++-version" in self.flags:
if self.flags["c++-version"] > ver:
ver = self.flags["c++-version"]
self.flags["c++-version"] = ver

View File

@ -35,8 +35,8 @@ class Module:
def __init__(self, file, moduleName, moduleType): def __init__(self, file, moduleName, moduleType):
## Remove all variable to prevent error of multiple deffinition of the module ... ## Remove all variable to prevent error of multiple deffinition of the module ...
debug.verbose("Create a new module : '" + moduleName + "' TYPE=" + moduleType) debug.verbose("Create a new module : '" + moduleName + "' TYPE=" + moduleType)
self.originFile='' self.origin_file=''
self.originFolder='' self.origin_folder=''
# type of the module: # type of the module:
self.type='LIBRARY' self.type='LIBRARY'
# Name of the module # Name of the module
@ -88,30 +88,30 @@ class Module:
debug.error('for module "%s"' %moduleName) debug.error('for module "%s"' %moduleName)
debug.error(' ==> error : "%s" ' %moduleType) debug.error(' ==> error : "%s" ' %moduleType)
raise 'Input value error' raise 'Input value error'
self.originFile = file; self.origin_file = file;
self.originFolder = lutinTools.get_current_path(self.originFile) self.origin_folder = lutinTools.get_current_path(self.origin_file)
self.localHeritage = heritage.heritage(self) self.local_heritage = heritage.heritage(self)
self.packageProp = { "COMPAGNY_TYPE" : set(""), self.package_prop = { "COMPAGNY_TYPE" : set(""),
"COMPAGNY_NAME" : set(""), "COMPAGNY_NAME" : set(""),
"COMPAGNY_NAME2" : set(""), "COMPAGNY_NAME2" : set(""),
"MAINTAINER" : set([]), "MAINTAINER" : set([]),
#"ICON" : set(""), #"ICON" : set(""),
"SECTION" : set([]), "SECTION" : set([]),
"PRIORITY" : set(""), "PRIORITY" : set(""),
"DESCRIPTION" : set(""), "DESCRIPTION" : set(""),
"VERSION" : set("0.0.0"), "VERSION" : set("0.0.0"),
"VERSION_CODE" : "", "VERSION_CODE" : "",
"NAME" : set("no-name"), # name of the application "NAME" : set("no-name"), # name of the application
"ANDROID_MANIFEST" : "", # By default generate the manifest "ANDROID_MANIFEST" : "", # By default generate the manifest
"ANDROID_JAVA_FILES" : ["DEFAULT"], # when user want to create his own services and activities "ANDROID_JAVA_FILES" : ["DEFAULT"], # when user want to create his own services and activities
"ANDROID_RESOURCES" : [], "ANDROID_RESOURCES" : [],
"ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET" "ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET"
"ANDROID_WALLPAPER_PROPERTIES" : [], # To create properties of the wallpaper (no use of EWOL display) "ANDROID_WALLPAPER_PROPERTIES" : [], # To create properties of the wallpaper (no use of EWOL display)
"RIGHT" : [], "RIGHT" : [],
"ADMOD_POSITION" : "top" "ADMOD_POSITION" : "top"
} }
self.subHeritageList = None self.sub_heritage_list = None
## ##
## @brief add Some copilation flags for this module (and only this one) ## @brief add Some copilation flags for this module (and only this one)
@ -143,7 +143,7 @@ class Module:
## ##
## @brief Commands for copying files ## @brief Commands for copying files
## ##
def image_to_staging(self, binaryName, target): def image_to_staging(self, binary_name, target):
for source, destination, sizeX, sizeY in self.imageToCopy: for source, destination, sizeX, sizeY in self.imageToCopy:
extension = source[source.rfind('.'):] extension = source[source.rfind('.'):]
if extension != ".png" \ if extension != ".png" \
@ -151,14 +151,14 @@ class Module:
and sizeX > 0: and sizeX > 0:
debug.error("Can not manage image other than .png and jpg to resize : " + source); debug.error("Can not manage image other than .png and jpg to resize : " + source);
displaySource = source displaySource = source
source = self.originFolder + "/" + source source = self.origin_folder + "/" + source
if destination == "": if destination == "":
destination = source[source.rfind('/')+1:] destination = source[source.rfind('/')+1:]
debug.verbose("Regenerate Destination : '" + destination + "'") debug.verbose("Regenerate Destination : '" + destination + "'")
file_cmd = target.generate_file(binaryName, self.name, self.originFolder, destination, "image")[0] file_cmd = target.generate_file(binary_name, self.name, self.origin_folder, destination, "image")[0]
if sizeX > 0: if sizeX > 0:
debug.verbose("Image file : " + displaySource + " ==> " + destination + " resize=(" + str(sizeX) + "," + str(sizeY) + ")") debug.verbose("Image file : " + displaySource + " ==> " + destination + " resize=(" + str(sizeX) + "," + str(sizeY) + ")")
fileName, fileExtension = os.path.splitext(self.originFolder+"/" + source) fileName, fileExtension = os.path.splitext(self.origin_folder+"/" + source)
target.add_image_staging(source, destination, sizeX, sizeY, file_cmd) target.add_image_staging(source, destination, sizeX, sizeY, file_cmd)
else: else:
debug.verbose("Might copy file : " + displaySource + " ==> " + destination) debug.verbose("Might copy file : " + displaySource + " ==> " + destination)
@ -167,14 +167,14 @@ class Module:
## ##
## @brief Commands for copying files ## @brief Commands for copying files
## ##
def files_to_staging(self, binaryName, target): def files_to_staging(self, binary_name, target):
for source, destination in self.files: for source, destination in self.files:
displaySource = source displaySource = source
source = self.originFolder + "/" + source source = self.origin_folder + "/" + source
if destination == "": if destination == "":
destination = source[source.rfind('/')+1:] destination = source[source.rfind('/')+1:]
debug.verbose("Regenerate Destination : '" + destination + "'") debug.verbose("Regenerate Destination : '" + destination + "'")
file_cmd = target.generate_file(binaryName, self.name, self.originFolder, destination, "image")[0] file_cmd = target.generate_file(binary_name, self.name, self.origin_folder, destination, "image")[0]
# TODO : when destination is missing ... # TODO : when destination is missing ...
debug.verbose("Might copy file : " + displaySource + " ==> " + destination) debug.verbose("Might copy file : " + displaySource + " ==> " + destination)
target.add_file_staging(source, destination, file_cmd) target.add_file_staging(source, destination, file_cmd)
@ -182,38 +182,38 @@ class Module:
## ##
## @brief Commands for copying files ## @brief Commands for copying files
## ##
def folders_to_staging(self, binaryName, target): def folders_to_staging(self, binary_name, target):
for source, destination in self.folders: for source, destination in self.folders:
debug.debug("Might copy folder : " + source + "==>" + destination) debug.debug("Might copy folder : " + source + "==>" + destination)
lutinTools.copy_anything_target(target, self.originFolder + "/" + source, destination) lutinTools.copy_anything_target(target, self.origin_folder + "/" + source, destination)
# call here to build the module # call here to build the module
def build(self, target, packageName): def build(self, target, package_name):
# ckeck if not previously build # ckeck if not previously build
if target.is_module_build(self.name)==True: if target.is_module_build(self.name)==True:
if self.subHeritageList == None: if self.sub_heritage_list == None:
self.localHeritage = heritage.heritage(self) self.local_heritage = heritage.heritage(self)
return self.subHeritageList return self.sub_heritage_list
# create the packege heritage # create the package heritage
self.localHeritage = heritage.heritage(self) self.local_heritage = heritage.heritage(self)
if packageName==None \ if package_name==None \
and ( self.type=="BINARY" \ and ( self.type=="BINARY" \
or self.type=="PACKAGE" ) : or self.type=="PACKAGE" ) :
# this is the endpoint binary ... # this is the endpoint binary ...
packageName = self.name package_name = self.name
else : else :
# TODO : Set it better ... # TODO : Set it better ...
None None
# build dependency before # build dependency before
listSubFileNeededTobuild = [] list_sub_file_needed_to_build = []
self.subHeritageList = 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:
inheritList, isBuilt = target.build_optionnal(dep, packageName) inherit_list, isBuilt = target.build_optionnal(dep, package_name)
if isBuilt == True: if isBuilt == True:
self.localHeritage.add_depends(dep); self.local_heritage.add_depends(dep);
# TODO : Add optionnal Flags ... # TODO : Add optionnal Flags ...
# ==> do it really better ... # ==> do it really better ...
if export == False: if export == False:
@ -221,29 +221,29 @@ class Module:
else: else:
self.add_export_flag_CC("-D"+option); self.add_export_flag_CC("-D"+option);
# add at the heritage list : # add at the heritage list :
self.subHeritageList.add_heritage_list(inheritList) self.sub_heritage_list.add_heritage_list(inherit_list)
for dep in self.depends: for dep in self.depends:
inheritList = target.build(dep, packageName) inherit_list = target.build(dep, package_name)
# add at the heritage list : # add at the heritage list :
self.subHeritageList.add_heritage_list(inheritList) self.sub_heritage_list.add_heritage_list(inherit_list)
# build local sources # build local sources
for file in self.src: for file in self.src:
#debug.info(" " + self.name + " <== " + file); #debug.info(" " + self.name + " <== " + file);
fileExt = file.split(".")[-1] fileExt = file.split(".")[-1]
tmpBuilder = builder.getBuilder(fileExt); try:
if tmpBuilder != None: tmp_builder = builder.get_builder(fileExt);
resFile = tmpBuilder.compile(file, resFile = tmp_builder.compile(file,
packageName, package_name,
target, target,
self.subHeritageList, self.sub_heritage_list,
flags = self.flags, flags = self.flags,
path = self.path, path = self.path,
name = self.name, name = self.name,
basic_folder = self.originFolder) basic_folder = self.origin_folder)
listSubFileNeededTobuild.append(resFile) list_sub_file_needed_to_build.append(resFile)
else: except ValueError:
debug.warning(" UN-SUPPORTED file format: '" + self.originFolder + "/" + file + "'") debug.warning(" UN-SUPPORTED file format: '" + self.origin_folder + "/" + file + "'")
# when multiprocess availlable, we need to synchronize here ... # when multiprocess availlable, we need to synchronize here ...
lutinMultiprocess.pool_synchrosize() lutinMultiprocess.pool_synchrosize()
@ -252,10 +252,28 @@ class Module:
if self.type=='PREBUILD': if self.type=='PREBUILD':
debug.print_element("Prebuild", self.name, "==>", "find") debug.print_element("Prebuild", self.name, "==>", "find")
elif self.type=='LIBRARY': elif self.type=='LIBRARY':
resFile = self.link_to_a(listSubFileNeededTobuild, packageName, target, self.subHeritageList) try:
self.localHeritage.add_sources(resFile) tmp_builder = builder.get_builder_with_output("a");
resFile = tmp_builder.link(list_sub_file_needed_to_build,
package_name,
target,
self.sub_heritage_list,
name = self.name,
basic_folder = self.origin_folder)
self.local_heritage.add_sources(resFile)
except ValueError:
debug.error(" UN-SUPPORTED link format: '.a'")
elif self.type=='BINARY': elif self.type=='BINARY':
resFile = self.link_to_bin(listSubFileNeededTobuild, packageName, target, self.subHeritageList) try:
tmp_builder = builder.get_builder_with_output("bin");
resFile = tmp_builder.link(list_sub_file_needed_to_build,
package_name,
target,
self.sub_heritage_list,
name = self.name,
basic_folder = self.origin_folder)
except ValueError:
debug.error(" UN-SUPPORTED link format: '.bin'")
# generate tree for this special binary # generate tree for this special binary
target.clean_module_tree() target.clean_module_tree()
self.build_tree(target, self.name) self.build_tree(target, self.name)
@ -263,36 +281,54 @@ class Module:
elif self.type=="PACKAGE": elif self.type=="PACKAGE":
if target.name=="Android": if target.name=="Android":
# special case for android wrapper : # special case for android wrapper :
resFile = self.link_to_so(listSubFileNeededTobuild, packageName, target, self.subHeritageList, "libewol") try:
tmp_builder = builder.get_builder_with_output("so");
resFile = tmp_builder.link(list_sub_file_needed_to_build,
package_name,
target,
self.sub_heritage_list,
name = "libewol",
basic_folder = self.origin_folder)
except ValueError:
debug.error(" UN-SUPPORTED link format: '.so'")
else: else:
resFile = self.link_to_bin(listSubFileNeededTobuild, packageName, target, self.subHeritageList) try:
tmp_builder = builder.get_builder_with_output("bin");
resFile = tmp_builder.link(list_sub_file_needed_to_build,
package_name,
target,
self.sub_heritage_list,
name = self.name,
basic_folder = self.origin_folder)
except ValueError:
debug.error(" UN-SUPPORTED link format: 'binary'")
target.clean_module_tree() target.clean_module_tree()
# generate tree for this special binary # generate tree for this special binary
self.build_tree(target, self.name) self.build_tree(target, self.name)
target.copy_to_staging(self.name) target.copy_to_staging(self.name)
if target.endGeneratePackage==True: if target.endGeneratePackage==True:
# generate the package with his properties ... # generate the package with his properties ...
target.make_package(self.name, self.packageProp, self.originFolder + "/..") target.make_package(self.name, self.package_prop, self.origin_folder + "/..")
else: else:
debug.error("Dit not know the element type ... (impossible case) type=" + self.type) debug.error("Dit not know the element type ... (impossible case) type=" + self.type)
self.subHeritageList.add_heritage(self.localHeritage) self.sub_heritage_list.add_heritage(self.local_heritage)
# return local dependency ... # return local dependency ...
return self.subHeritageList return self.sub_heritage_list
# call here to build the module # call here to build the module
def build_tree(self, target, packageName): def build_tree(self, target, package_name):
# ckeck if not previously build # ckeck if not previously build
if target.is_module_buildTree(self.name)==True: if target.is_module_buildTree(self.name)==True:
return return
debug.verbose("build tree of " + self.name) debug.verbose("build tree of " + self.name)
# add all the elements (first added only one keep ==> permit to everload sublib element) # add all the elements (first added only one keep ==> permit to everload sublib element)
self.image_to_staging(packageName, target) self.image_to_staging(package_name, target)
self.files_to_staging(packageName, target) self.files_to_staging(package_name, target)
self.folders_to_staging(packageName, target) self.folders_to_staging(package_name, target)
#build tree of all submodules #build tree of all submodules
for dep in self.depends: for dep in self.depends:
inherit = target.build_tree(dep, packageName) inherit = target.build_tree(dep, package_name)
# call here to clean the module # call here to clean the module
@ -395,9 +431,9 @@ class Module:
if same_as_api == True: if same_as_api == True:
api_version = version api_version = version
self.flags["local"]["c++-version"] = { "version":version, self.flags["local"]["c++-version"] = { "version":version,
"api-version":api_version,
"gnu":gnu "gnu":gnu
} }
self.flags["export"]["c++-version"] = api_version
if gnu == True and same_as_api == True: if gnu == True and same_as_api == True:
debug.warning("Can not propagate the gnu extention of the CPP vesion for API"); debug.warning("Can not propagate the gnu extention of the CPP vesion for API");
@ -410,9 +446,9 @@ class Module:
if same_as_api == True: if same_as_api == True:
api_version = version api_version = version
self.flags["local"]["c-version"] = { "version":version, self.flags["local"]["c-version"] = { "version":version,
"api-version":api_version,
"gnu":gnu "gnu":gnu
} }
self.flags["export"]["c-version"] = api_version
if gnu == True and same_as_api == True: if gnu == True and same_as_api == True:
debug.warning("Can not propagate the gnu extention of the C vesion for API"); debug.warning("Can not propagate the gnu extention of the C vesion for API");
@ -439,8 +475,8 @@ class Module:
print(' package : "' + self.name + "'") print(' package : "' + self.name + "'")
print('-----------------------------------------------') print('-----------------------------------------------')
print(' type:"' + str(self.type) + "'") print(' type:"' + str(self.type) + "'")
print(' file:"' + str(self.originFile) + "'") print(' file:"' + str(self.origin_file) + "'")
print(' folder:"' + str(self.originFolder) + "'") print(' folder:"' + str(self.origin_folder) + "'")
self.print_list('depends',self.depends) self.print_list('depends',self.depends)
self.print_list('depends_optionnal', self.depends_optionnal) self.print_list('depends_optionnal', self.depends_optionnal)
@ -470,18 +506,18 @@ class Module:
if value not in ["com", "net", "org", "gov", "mil", "edu", "pri", "museum"]: if value not in ["com", "net", "org", "gov", "mil", "edu", "pri", "museum"]:
debug.error("can not set the value for this Input : '" + variable + "' : '" + value + "'") debug.error("can not set the value for this Input : '" + variable + "' : '" + value + "'")
else: else:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "COMPAGNY_NAME" == variable: elif "COMPAGNY_NAME" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
val2 = value.lower() val2 = value.lower()
val2 = val2.replace(' ', '') val2 = val2.replace(' ', '')
val2 = val2.replace('-', '') val2 = val2.replace('-', '')
val2 = val2.replace('_', '') val2 = val2.replace('_', '')
self.packageProp["COMPAGNY_NAME2"] = val2 self.package_prop["COMPAGNY_NAME2"] = val2
elif "ICON" == variable: elif "ICON" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "MAINTAINER" == variable: elif "MAINTAINER" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "SECTION" == variable: elif "SECTION" == variable:
# project section : (must be separate by coma # project section : (must be separate by coma
# refer to : http://packages.debian.org/sid/ # refer to : http://packages.debian.org/sid/
@ -493,39 +529,39 @@ class Module:
# mail math misc net news ocaml oldlibs otherosfs # mail math misc net news ocaml oldlibs otherosfs
# perl php python ruby science shells sound tex # perl php python ruby science shells sound tex
# text utils vcs video virtual web x11 xfce zope ... # text utils vcs video virtual web x11 xfce zope ...
self.packageProp[variable] = value self.package_prop[variable] = value
elif "PRIORITY" == variable: elif "PRIORITY" == variable:
#list = ["required","important","standard","optional","extra"] #list = ["required","important","standard","optional","extra"]
#if isinstance(value, list): #if isinstance(value, list):
if value not in ["required", "important", "standard", "optional", "extra"]: if value not in ["required", "important", "standard", "optional", "extra"]:
debug.error("can not set the value for this Input : '" + variable + "' : '" + value + "'") debug.error("can not set the value for this Input : '" + variable + "' : '" + value + "'")
else: else:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "DESCRIPTION" == variable: elif "DESCRIPTION" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "VERSION" == variable: elif "VERSION" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "VERSION_CODE" == variable: elif "VERSION_CODE" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "NAME" == variable: elif "NAME" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ANDROID_MANIFEST" == variable: elif "ANDROID_MANIFEST" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ANDROID_JAVA_FILES" == variable: elif "ANDROID_JAVA_FILES" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "RIGHT" == variable: elif "RIGHT" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ANDROID_RESOURCES" == variable: elif "ANDROID_RESOURCES" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ANDROID_APPL_TYPE" == variable: elif "ANDROID_APPL_TYPE" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ADMOD_ID" == variable: elif "ADMOD_ID" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "APPLE_APPLICATION_IOS_ID" == variable: elif "APPLE_APPLICATION_IOS_ID" == variable:
self.packageProp[variable] = value self.package_prop[variable] = value
elif "ADMOD_POSITION" == variable: elif "ADMOD_POSITION" == variable:
if value in ["top", "bottom"]: if value in ["top", "bottom"]:
self.packageProp[variable] = value self.package_prop[variable] = value
else: else:
debug.error("not know pkg element : '" + variable + "' with value : '" + value + "' must be [top|bottom]") debug.error("not know pkg element : '" + variable + "' with value : '" + value + "' must be [top|bottom]")
else: else:
@ -533,20 +569,20 @@ class Module:
def pkg_add(self, variable, value): def pkg_add(self, variable, value):
# TODO : Check values... # TODO : Check values...
self.packageProp[variable].append(value) self.package_prop[variable].append(value)
def ext_project_add_module(self, target, projectMng, addedModule = []): def ext_project_add_module(self, target, projectMng, added_module = []):
if self.name in addedModule: if self.name in added_module:
return return
addedModule.append(self.name) added_module.append(self.name)
debug.verbose("add a module to the project generator :" + self.name) debug.verbose("add a module to the project generator :" + self.name)
debug.verbose("local path :" + self.originFolder) debug.verbose("local path :" + self.origin_folder)
projectMng.add_files(self.name, self.originFolder, self.src) projectMng.add_files(self.name, self.origin_folder, self.src)
#projectMng.add_data_file(self.originFolder, self.files) #projectMng.add_data_file(self.origin_folder, self.files)
#projectMng.add_data_folder(self.originFolder, self.folders) #projectMng.add_data_folder(self.origin_folder, self.folders)
""" """
for depend in self.depends: for depend in self.depends:
target.project_add_module(depend, projectMng, addedModule) target.project_add_module(depend, projectMng, added_module)
""" """
def create_project(self, target, projectMng): def create_project(self, target, projectMng):