[DEV] start create a pip installable lutin

This commit is contained in:
Edouard DUPIN 2015-05-08 13:13:50 +02:00
parent 78336f359e
commit 801e2e8209
43 changed files with 315 additions and 299 deletions

210
bin/lutin Executable file
View File

@ -0,0 +1,210 @@
#!/usr/bin/python
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
# for path inspection:
import sys
import os
import lutin.debug as debug
import lutin.arg as arguments
import lutin.host as host
import lutin.module as module
import lutin.target as target
import lutin.multiprocess as multiprocess
myArgs = arguments.LutinArg()
myArgs.add(arguments.ArgDefine("h", "help", desc="display this help"))
myArgs.add_section("option", "Can be set one time in all case")
myArgs.add(arguments.ArgDefine("v", "verbose", list=[["0","None"],["1","error"],["2","warning"],["3","info"],["4","debug"],["5","verbose"],["6","extreme_verbose"]], desc="display makefile debug level (verbose) default =2"))
myArgs.add(arguments.ArgDefine("C", "color", desc="display makefile output in color"))
myArgs.add(arguments.ArgDefine("f", "force", desc="Force the rebuild without checking the dependency"))
myArgs.add(arguments.ArgDefine("P", "pretty", desc="print the debug has pretty display"))
myArgs.add(arguments.ArgDefine("j", "jobs", haveParam=True, desc="Specifies the number of jobs (commands) to run simultaneously"))
myArgs.add(arguments.ArgDefine("s", "force-strip", desc="Force the stripping of the compile elements"))
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("c", "compilator", list=[["clang",""],["gcc",""]], desc="Compile with clang or Gcc mode (by default gcc will be used)"))
myArgs.add(arguments.ArgDefine("m", "mode", list=[["debug",""],["release",""]], desc="Compile in release or debug mode (default release)"))
myArgs.add(arguments.ArgDefine("a", "arch", list=[["auto","Automatic choice"],["arm","Arm processer"],["x86","Generic PC : AMD/Intel"],["ppc","Power PC"]], desc="Architecture to compile"))
myArgs.add(arguments.ArgDefine("b", "bus", list=[["auto","Automatic choice"],["32","32 bits"],["64","64 bits"]], desc="Adressing size (Bus size)"))
myArgs.add(arguments.ArgDefine("p", "package", desc="Disable the package generation (usefull when just compile for test on linux ...)"))
myArgs.add(arguments.ArgDefine("g", "gcov", desc="Enable code coverage intrusion in code"))
myArgs.add(arguments.ArgDefine("", "simulation", desc="simulater mode (availlable only for IOS)"))
myArgs.add(arguments.ArgDefine("", "list-target", desc="list all availlables targets ==> for auto completion"))
myArgs.add(arguments.ArgDefine("", "list-module", desc="list all availlables module ==> for auto completion"))
myArgs.add_section("cible", "generate in order set")
localArgument = myArgs.parse()
"""
display the help of this makefile
"""
def usage():
# generic argument displayed :
myArgs.display()
print(" All target can finish with '?clean' '?dump' ... ?action")
print(" all")
print(" build all (only for the current selected board) (bynary and packages)")
print(" clean")
print(" clean all (same as previous)")
print(" dump")
print(" Dump all the module dependency and properties")
listOfAllModule = module.list_all_module_with_desc()
for mod in listOfAllModule:
print(" " + mod[0])
if mod[1] != "":
print(" " + mod[1])
print(" ex: " + sys.argv[0] + " all --target=Android all -t Windows -m debug all")
exit(0)
# preparse the argument to get the verbose element for debug mode
def parseGenericArg(argument, active):
if argument.get_option_nName() == "help":
#display help
if active==False:
usage()
return True
if argument.get_option_nName() == "list-module":
if active==False:
listOfModule = module.list_all_module()
retValue = ""
for moduleName in listOfModule:
if retValue != "":
retValue += " "
retValue += moduleName
print(retValue)
exit(0)
return True
if argument.get_option_nName() == "list-target":
if active==False:
listOfTarget = target.list_all_target()
retValue = ""
for targetName in listOfTarget:
if retValue != "":
retValue += " "
retValue += targetName
print(retValue)
exit(0)
return True
elif argument.get_option_nName()=="jobs":
if active==True:
lutinMultiprocess.set_core_number(int(argument.get_arg()))
return True
elif argument.get_option_nName() == "verbose":
if active==True:
debug.set_level(int(argument.get_arg()))
return True
elif argument.get_option_nName() == "color":
if active==True:
debug.enable_color()
return True
elif argument.get_option_nName() == "force":
if active==True:
lutinEnv.set_force_mode(True)
return True
elif argument.get_option_nName() == "pretty":
if active==True:
lutinEnv.set_print_pretty_mode(True)
return True
elif argument.get_option_nName() == "force-strip":
if active==True:
lutinEnv.set_force_strip_mode(True)
return True
return False
# parse default unique argument:
for argument in localArgument:
parseGenericArg(argument, True)
import lutin
import lutin.host as lutinHost
import lutin.tools as lutinTools
#available target : Linux / MacOs / Windows / Android ...
targetName = host.OS
config = {
"compilator":"gcc",
"mode":"release",
"bus-size":"auto",
"arch":"auto",
"generate-package":True,
"simulation":False,
"gcov":False
}
# load the default target :
my_target = None
actionDone=False
# parse all argument
for argument in localArgument:
if parseGenericArg(argument, False) == True:
continue
elif argument.get_option_nName() == "package":
config["generate-package"]=False
elif argument.get_option_nName() == "simulation":
config["simulation"]=True
elif argument.get_option_nName() == "gcov":
config["gcov"]=True
elif argument.get_option_nName() == "bus":
config["bus-size"]=argument.get_arg()
elif argument.get_option_nName() == "arch":
config["arch"]=argument.get_arg()
elif argument.get_option_nName() == "compilator":
if config["compilator"] != argument.get_arg():
debug.debug("change compilator ==> " + argument.get_arg())
config["compilator"] = argument.get_arg()
#remove previous target
my_target = None
elif argument.get_option_nName() == "target":
# No check input ==> this will be verify automaticly chen the target will be loaded
if targetName != argument.get_arg():
targetName = argument.get_arg()
debug.debug("change target ==> '" + targetName + "' & reset mode : gcc&release")
#reset properties by defauult:
config = {
"compilator":"gcc",
"mode":"release",
"bus-size":"auto",
"arch":"auto",
"generate-package":True,
"simulation":False,
"gcov":False
}
#remove previous target
my_target = None
elif argument.get_option_nName() == "mode":
if config["mode"] != argument.get_arg():
config["mode"] = argument.get_arg()
debug.debug("change mode ==> " + config["mode"])
#remove previous target
my_target = None
else:
if argument.get_option_nName() != "":
debug.warning("Can not understand argument : '" + argument.get_option_nName() + "'")
usage()
else:
#load the target if needed :
if my_target == None:
my_target = target.load_target(targetName, config)
my_target.build(argument.get_arg())
actionDone=True
# if no action done : we do "all" ...
if actionDone==False:
#load the target if needed :
if my_target == None:
my_target = target.load_target(targetName, config)
my_target.build("all")
# stop all started threads;
multiprocess.un_init()

241
lutin.py
View File

@ -1,241 +0,0 @@
#!/usr/bin/python
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
# for path inspection:
import sys
import os
import inspect
import fnmatch
import lutinDebug as debug
import lutinEnv
import lutinModule
import lutinMultiprocess
import lutinArg
myLutinArg = lutinArg.LutinArg()
myLutinArg.add(lutinArg.ArgDefine("h", "help", desc="display this help"))
myLutinArg.add_section("option", "Can be set one time in all case")
myLutinArg.add(lutinArg.ArgDefine("v", "verbose", list=[["0","None"],["1","error"],["2","warning"],["3","info"],["4","debug"],["5","verbose"],["6","extreme_verbose"]], desc="display makefile debug level (verbose) default =2"))
myLutinArg.add(lutinArg.ArgDefine("C", "color", desc="display makefile output in color"))
myLutinArg.add(lutinArg.ArgDefine("f", "force", desc="Force the rebuild without checking the dependency"))
myLutinArg.add(lutinArg.ArgDefine("P", "pretty", desc="print the debug has pretty display"))
myLutinArg.add(lutinArg.ArgDefine("j", "jobs", haveParam=True, desc="Specifies the number of jobs (commands) to run simultaneously"))
myLutinArg.add(lutinArg.ArgDefine("s", "force-strip", desc="Force the stripping of the compile elements"))
myLutinArg.add_section("properties", "keep in the sequency of the cible")
myLutinArg.add(lutinArg.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'"))
myLutinArg.add(lutinArg.ArgDefine("c", "compilator", list=[["clang",""],["gcc",""]], desc="Compile with clang or Gcc mode (by default gcc will be used)"))
myLutinArg.add(lutinArg.ArgDefine("m", "mode", list=[["debug",""],["release",""]], desc="Compile in release or debug mode (default release)"))
myLutinArg.add(lutinArg.ArgDefine("a", "arch", list=[["auto","Automatic choice"],["arm","Arm processer"],["x86","Generic PC : AMD/Intel"],["ppc","Power PC"]], desc="Architecture to compile"))
myLutinArg.add(lutinArg.ArgDefine("b", "bus", list=[["auto","Automatic choice"],["32","32 bits"],["64","64 bits"]], desc="Adressing size (Bus size)"))
myLutinArg.add(lutinArg.ArgDefine("p", "package", desc="Disable the package generation (usefull when just compile for test on linux ...)"))
myLutinArg.add(lutinArg.ArgDefine("g", "gcov", desc="Enable code coverage intrusion in code"))
myLutinArg.add(lutinArg.ArgDefine("", "simulation", desc="simulater mode (availlable only for IOS)"))
myLutinArg.add(lutinArg.ArgDefine("", "list-target", desc="list all availlables targets ==> for auto completion"))
myLutinArg.add(lutinArg.ArgDefine("", "list-module", desc="list all availlables module ==> for auto completion"))
myLutinArg.add_section("cible", "generate in order set")
localArgument = myLutinArg.parse()
"""
display the help of this makefile
"""
def usage():
# generic argument displayed :
myLutinArg.display()
print(" All target can finish with '?clean' '?dump' ... ?action")
print(" all")
print(" build all (only for the current selected board) (bynary and packages)")
print(" clean")
print(" clean all (same as previous)")
print(" dump")
print(" Dump all the module dependency and properties")
listOfAllModule = lutinModule.list_all_module_with_desc()
for mod in listOfAllModule:
print(" " + mod[0])
if mod[1] != "":
print(" " + mod[1])
print(" ex: " + sys.argv[0] + " all --target=Android all -t Windows -m debug all")
exit(0)
# preparse the argument to get the verbose element for debug mode
def parseGenericArg(argument,active):
if argument.get_option_nName() == "help":
#display help
if active==False:
usage()
return True
if argument.get_option_nName() == "list-module":
if active==False:
listOfModule = lutinModule.list_all_module()
retValue = ""
for moduleName in listOfModule:
if retValue != "":
retValue += " "
retValue += moduleName
print(retValue)
exit(0)
return True
if argument.get_option_nName() == "list-target":
if active==False:
listOfTarget = lutinTarget.list_all_target()
retValue = ""
for targetName in listOfTarget:
if retValue != "":
retValue += " "
retValue += targetName
print(retValue)
exit(0)
return True
elif argument.get_option_nName()=="jobs":
if active==True:
lutinMultiprocess.set_core_number(int(argument.get_arg()))
return True
elif argument.get_option_nName() == "verbose":
if active==True:
debug.set_level(int(argument.get_arg()))
return True
elif argument.get_option_nName() == "color":
if active==True:
debug.enable_color()
return True
elif argument.get_option_nName() == "force":
if active==True:
lutinEnv.set_force_mode(True)
return True
elif argument.get_option_nName() == "pretty":
if active==True:
lutinEnv.set_print_pretty_mode(True)
return True
elif argument.get_option_nName() == "force-strip":
if active==True:
lutinEnv.set_force_strip_mode(True)
return True
return False
# parse default unique argument:
if __name__ == "__main__":
for argument in localArgument:
parseGenericArg(argument, True)
# now import other standard module (must be done here and not before ...
import lutinTarget
import lutinBuilder
import lutinSystem
import lutinHost
import lutinTools
"""
Run everything that is needed in the system
"""
def Start():
#available target : Linux / MacOs / Windows / Android ...
targetName=lutinHost.OS
config = {
"compilator":"gcc",
"mode":"release",
"bus-size":"auto",
"arch":"auto",
"generate-package":True,
"simulation":False,
"gcov":False
}
# load the default target :
target = None
actionDone=False
# parse all argument
for argument in localArgument:
if True==parseGenericArg(argument, False):
continue
elif argument.get_option_nName() == "package":
config["generate-package"]=False
elif argument.get_option_nName() == "simulation":
config["simulation"]=True
elif argument.get_option_nName() == "gcov":
config["gcov"]=True
elif argument.get_option_nName() == "bus":
config["bus-size"]=argument.get_arg()
elif argument.get_option_nName() == "arch":
config["arch"]=argument.get_arg()
elif argument.get_option_nName() == "compilator":
if config["compilator"] != argument.get_arg():
debug.debug("change compilator ==> " + argument.get_arg())
config["compilator"] = argument.get_arg()
#remove previous target
target = None
elif argument.get_option_nName() == "target":
# No check input ==> this will be verify automaticly chen the target will be loaded
if targetName!=argument.get_arg():
targetName=argument.get_arg()
debug.debug("change target ==> '" + targetName + "' & reset mode : gcc&release")
#reset properties by defauult:
config = {
"compilator":"gcc",
"mode":"release",
"bus-size":"auto",
"arch":"auto",
"generate-package":True,
"simulation":False,
"gcov":False
}
#remove previous target
target = None
elif argument.get_option_nName() == "mode":
if config["mode"]!=argument.get_arg():
config["mode"] = argument.get_arg()
debug.debug("change mode ==> " + config["mode"])
#remove previous target
target = None
else:
if argument.get_option_nName() != "":
debug.warning("Can not understand argument : '" + argument.get_option_nName() + "'")
usage()
else:
#load the target if needed :
if target == None:
target = lutinTarget.load_target(targetName, config)
target.build(argument.get_arg())
actionDone=True
# if no action done : we do "all" ...
if actionDone==False:
#load the target if needed :
if target == None:
target = lutinTarget.load_target(targetName, config)
target.build("all")
# stop all started threads
lutinMultiprocess.un_init()
"""
When the user use with make.py we initialise ourself
"""
if __name__ == '__main__':
debug.verbose("Use Make as a make stadard")
sys.path.append(lutinTools.get_run_folder())
debug.verbose(" try to impoert module 'lutinBase.py'")
if os.path.exists("lutinBase.py" )==True:
__import__("lutinBase")
else:
debug.debug("missing file lutinBase.py ==> loading subPath...");
# Import all sub path without out and archive
for folder in os.listdir("."):
if os.path.isdir(folder)==True:
if folder.lower()!="android" \
and folder.lower()!="archive" \
and folder.lower()!="out" :
debug.debug("Automatic load path: '" + folder + "'")
lutinBuilder.import_path(folder)
lutinModule.import_path(folder)
lutinSystem.import_path(folder)
lutinTarget.import_path(folder)
#lutinSystem.display()
lutinBuilder.init()
Start()

41
lutin/__init__.py Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/python
import os
import sys
# now import other standard module (must be done here and not before ...
from . import target
from . import builder
from . import system
from . import host
from . import tools
from . import debug
from . import module
is_init = False
if is_init == False:
"""
When the user use with make.py we initialise ourself
"""
debug.verbose("Use Make as a make stadard")
sys.path.append(tools.get_run_folder())
debug.debug("missing file lutinBase.py ==> loading subPath...");
# Import all sub path without out and archive
for folder in os.listdir("."):
if os.path.isdir(folder)==True:
if folder.lower()!="android" \
and folder.lower()!="archive" \
and folder.lower()!="out" :
debug.debug("Automatic load path: '" + folder + "'")
builder.import_path(folder)
module.import_path(folder)
system.import_path(folder)
target.import_path(folder)
builder.init()
is_init = True

View File

@ -8,7 +8,7 @@
## ##
import sys import sys
import lutinDebug as debug from . import debug
class ArgElement: class ArgElement:
def __init__(self, option, value=""): def __init__(self, option, value=""):

View File

@ -11,14 +11,14 @@ import sys
import os import os
import inspect import inspect
import fnmatch import fnmatch
import lutinDebug as debug from . import debug
import lutinHeritage as heritage from . import heritage
import datetime import datetime
import lutinTools from . import tools as lutinTools
import lutinModule from . import module as lutinModule
import lutinSystem from . import system as lutinSystem
import lutinImage from . import image as lutinImage
import lutinHost from . import host as lutinHost
## ##
## constitution of dictionnary: ## constitution of dictionnary:

View File

@ -8,7 +8,7 @@
## ##
import os import os
import lutinMultiprocess from . import multiprocess as lutinMultiprocess
import threading import threading
import re import re

View File

@ -8,8 +8,8 @@
## ##
import os import os
import lutinDebug as debug from . import debug
import lutinEnv as environement from . import env as environement
def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""): def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""):

View File

@ -7,7 +7,7 @@
## @license APACHE v2.0 (see license file) ## @license APACHE v2.0 (see license file)
## ##
import lutinDebug as debug from . import debug

View File

@ -9,7 +9,7 @@
import sys import sys
import copy import copy
import lutinDebug as debug from . import debug
def append_to_list(listout, list): def append_to_list(listout, list):

View File

@ -9,7 +9,7 @@
import platform import platform
import sys import sys
import lutinDebug as debug from . import debug
# print os.name # ==> 'posix' # print os.name # ==> 'posix'
if platform.system() == "Linux": if platform.system() == "Linux":

View File

@ -7,12 +7,13 @@
## @license APACHE v2.0 (see license file) ## @license APACHE v2.0 (see license file)
## ##
import lutinDebug as debug from . import debug
import lutinTools as tools from . import tools
import platform import platform
import os import os
import lutinMultiprocess from . import multiprocess as lutinMultiprocess
import lutinDepend as dependency from . import depend as dependency
enableResizeImage = True enableResizeImage = True
try: try:
if platform.system() == "Darwin": if platform.system() == "Darwin":

View File

@ -11,15 +11,15 @@ import sys
import os import os
import inspect import inspect
import fnmatch import fnmatch
import lutinModule as module from . import module
import lutinHost as host from . import host
import lutinTools from . import tools as lutinTools
import lutinDebug as debug from . import debug
import lutinHeritage as heritage from . import heritage
import lutinDepend as dependency from . import depend as dependency
import lutinBuilder as builder from . import builder
import lutinMultiprocess from . import multiprocess as lutinMultiprocess
import lutinEnv from . import env as lutinEnv
class Module: class Module:

View File

@ -8,7 +8,6 @@
## ##
import sys import sys
import lutinDebug as debug
import threading import threading
import time import time
import sys import sys
@ -18,9 +17,10 @@ else:
import Queue as queue import Queue as queue
import os import os
import subprocess import subprocess
import lutinTools
import lutinEnv
import shlex import shlex
from . import debug
from . import tools as lutinTools
from . import env as lutinEnv
queueLock = threading.Lock() queueLock = threading.Lock()
workQueue = queue.Queue() workQueue = queue.Queue()

View File

@ -11,12 +11,12 @@ import sys
import os import os
import inspect import inspect
import fnmatch import fnmatch
import lutinDebug as debug from . import debug
import datetime import datetime
import lutinTools from . import tools as lutinTools
import lutinModule as module from . import module
import lutinImage from . import image as lutinImage
import lutinHost from . import host as lutinHost
class System: class System:
def __init__(self): def __init__(self):

View File

@ -11,15 +11,15 @@ import sys
import os import os
import inspect import inspect
import fnmatch import fnmatch
import lutinDebug as debug from . import debug
import lutinHeritage as heritage from . import heritage
import datetime import datetime
import lutinTools from . import tools as lutinTools
import lutinModule from . import module as lutinModule
import lutinSystem from . import system as lutinSystem
import lutinImage from . import image as lutinImage
import lutinHost from . import host as lutinHost
import lutinMultiprocess as multiprocess from . import multiprocess
class Target: class Target:
def __init__(self, name, config, arch): def __init__(self, name, config, arch):
@ -436,6 +436,7 @@ def load_target(name, config):
#create the target #create the target
tmpTarget = theTarget.Target(config) tmpTarget = theTarget.Target(config)
return tmpTarget return tmpTarget
raise KeyError("No entry for : " + name)
def list_all_target(): def list_all_target():
global targetList global targetList

View File

@ -10,10 +10,10 @@
import os import os
import shutil import shutil
import errno import errno
import lutinDebug as debug from . import debug
import fnmatch import fnmatch
import lutinMultiprocess from . import multiprocess as lutinMultiprocess
import lutinDepend as dependency from . import depend as dependency
""" """

View File

@ -6,12 +6,13 @@
## ##
## @license APACHE v2.0 (see license file) ## @license APACHE v2.0 (see license file)
## ##
import lutinDebug as debug
import lutinTools as tools
import platform import platform
import os import os
import zipfile import zipfile
from . import debug
from . import tools
def create_zip(path, outputFile): def create_zip(path, outputFile):
debug.debug("Create Zip : '" + outputFile + "'") debug.debug("Create Zip : '" + outputFile + "'")
@ -26,14 +27,4 @@ def create_zip(path, outputFile):
zf.write(file, file[basePathlen:]) zf.write(file, file[basePathlen:])
zf.close() zf.close()
"""
print('creating archive')
zf = zipfile.ZipFile('zipfile_write.zip', mode='w')
try:
print('adding README.md')
zf.write('README.md')
finally:
print('closing')
zf.close()
"""

13
setup.py Executable file
View File

@ -0,0 +1,13 @@
#!/usr/bin/python
from setuptools import setup
setup(name='lutin',
version='0.5.0',
description='Lutin generic builder',
url='http://github.com/HeeroYui/lutin',
author='Edouard DUPIN',
author_email='yui.heero@gmail.com',
license='APACHE-2',
packages=['lutin'],
scripts=['bin/lutin'],
zip_safe=False)