Compare commits
32 Commits
Author | SHA1 | Date | |
---|---|---|---|
b0d300e3ff | |||
4b3072ddf2 | |||
ffeb404d52 | |||
185d3c290c | |||
e3a2e19fe6 | |||
91b0cecc28 | |||
95b2206da6 | |||
512651e746 | |||
03e67ae8d6 | |||
fc77789f93 | |||
220364c116 | |||
1ec26df856 | |||
134e0b523e | |||
2a58657df5 | |||
288207e4e1 | |||
dd03e46832 | |||
7c72aa8b84 | |||
0f4349e65a | |||
d0fb9045c4 | |||
0042e68581 | |||
0cb58135fd | |||
33dc55d84b | |||
67297b3063 | |||
e46e6add5e | |||
b1cbee3b4b | |||
02a72568c9 | |||
dd46d2d7b4 | |||
92c552fd59 | |||
885a60f22c | |||
db4a587a44 | |||
9d6418eed9 | |||
ec60375c9f |
42
README.md
42
README.md
@@ -22,38 +22,20 @@ you can see exemple for some type in :
|
|||||||
edn : package
|
edn : package
|
||||||
glew : prebuild
|
glew : prebuild
|
||||||
|
|
||||||
Copyright (c)
|
License (APACHE v2.0)
|
||||||
=============
|
=====================
|
||||||
|
|
||||||
2011, Edouard DUPIN
|
Copyright lutin Edouard DUPIN
|
||||||
|
|
||||||
License (DSB)
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
=============
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
Unless required by applicable law or agreed to in writing, software
|
||||||
notice, this list of conditions and the following disclaimer.
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in
|
|
||||||
the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
3. The name of the author may not be used to endorse or promote
|
|
||||||
products derived from this software without specific prior
|
|
||||||
written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
||||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
||||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
90
bash-autocompletion/lutin.py
Executable file
90
bash-autocompletion/lutin.py
Executable file
@@ -0,0 +1,90 @@
|
|||||||
|
_lutin()
|
||||||
|
{
|
||||||
|
local cur prev optshorts opts renameprev listmodule
|
||||||
|
COMPREPLY=()
|
||||||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
optshorts="-h -v -C -f -P -j -s -t -c -m -r -p"
|
||||||
|
opts="--help --verbose --color --force --pretty --jobs --force-strip --target --compilator --mode --prj --package --simulation"
|
||||||
|
|
||||||
|
renameprev=${prev}
|
||||||
|
case "${renameprev}" in
|
||||||
|
-h)
|
||||||
|
renameprev="--help"
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
renameprev="--verbose"
|
||||||
|
;;
|
||||||
|
-C)
|
||||||
|
renameprev="--color"
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
renameprev="--force"
|
||||||
|
;;
|
||||||
|
-P)
|
||||||
|
renameprev="--pretty"
|
||||||
|
;;
|
||||||
|
-j)
|
||||||
|
renameprev="--jobs"
|
||||||
|
;;
|
||||||
|
-s)
|
||||||
|
renameprev="--force-strip"
|
||||||
|
;;
|
||||||
|
-t)
|
||||||
|
renameprev="--target"
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
renameprev="--compilator"
|
||||||
|
;;
|
||||||
|
-m)
|
||||||
|
renameprev="--mode"
|
||||||
|
;;
|
||||||
|
-r)
|
||||||
|
renameprev="--prj"
|
||||||
|
;;
|
||||||
|
-p)
|
||||||
|
renameprev="--package"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
#
|
||||||
|
# Complete the arguments to some of the basic commands.
|
||||||
|
#
|
||||||
|
case "${renameprev}" in
|
||||||
|
--compilator)
|
||||||
|
local names="clang gcc"
|
||||||
|
COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--jobs)
|
||||||
|
local names="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"
|
||||||
|
COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--target)
|
||||||
|
local names=`lutin.py --list-target`
|
||||||
|
COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--mode)
|
||||||
|
local names="debug release"
|
||||||
|
COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ ${cur} == --* ]] ; then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ ${cur} == -* ]] ; then
|
||||||
|
COMPREPLY=( $(compgen -W "${optshorts}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
listmodule=`lutin.py --list-module`
|
||||||
|
COMPREPLY=( $(compgen -W "${listmodule}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _lutin lutin.py
|
6
bash-autocompletion/readme
Normal file
6
bash-autocompletion/readme
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
to install autocompletion for lutin :
|
||||||
|
|
||||||
|
sudo cp bash-autocompletion/lutin.py /etc/bash_completion.d
|
||||||
|
|
||||||
|
==> and restart bash ...
|
13
licence.txt
Normal file
13
licence.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright lutin Edouard DUPIN
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
@@ -1,32 +0,0 @@
|
|||||||
|
|
||||||
Copyright (c) 2011, Edouard DUPIN
|
|
||||||
|
|
||||||
License (DSB)
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in
|
|
||||||
the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
3. The name of the author may not be used to endorse or promote
|
|
||||||
products derived from this software without specific prior
|
|
||||||
written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
||||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
||||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.L
|
|
106
lutin.py
106
lutin.py
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
# for path inspection:
|
# for path inspection:
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
@@ -13,7 +21,7 @@ import lutinArg
|
|||||||
myLutinArg = lutinArg.LutinArg()
|
myLutinArg = lutinArg.LutinArg()
|
||||||
myLutinArg.add(lutinArg.ArgDefine("h", "help", desc="display this help"))
|
myLutinArg.add(lutinArg.ArgDefine("h", "help", desc="display this help"))
|
||||||
myLutinArg.add_section("option", "Can be set one time in all case")
|
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"]], desc="display makefile debug level (verbose) default =2"))
|
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("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("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("P", "pretty", desc="print the debug has pretty display"))
|
||||||
@@ -21,12 +29,16 @@ myLutinArg.add(lutinArg.ArgDefine("j", "jobs", haveParam=True, desc="Specifies t
|
|||||||
myLutinArg.add(lutinArg.ArgDefine("s", "force-strip", desc="Force the stripping of the compile elements"))
|
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_section("properties", "keep in the sequency of the cible")
|
||||||
myLutinArg.add(lutinArg.ArgDefine("t", "target", list=[["Android",""],["Linux",""],["MacOs",""],["IOs",""],["Windows",""]], desc="Select a target (by default the platform is the computer that compile this"))
|
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("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("m", "mode", list=[["debug",""],["release",""]], desc="Compile in release or debug mode (default release)"))
|
||||||
myLutinArg.add(lutinArg.ArgDefine("r", "prj", desc="Use external project management (not build with lutin..."))
|
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("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("", "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")
|
myLutinArg.add_section("cible", "generate in order set")
|
||||||
localArgument = myLutinArg.parse()
|
localArgument = myLutinArg.parse()
|
||||||
@@ -37,6 +49,7 @@ localArgument = myLutinArg.parse()
|
|||||||
def usage():
|
def usage():
|
||||||
# generic argument displayed :
|
# generic argument displayed :
|
||||||
myLutinArg.display()
|
myLutinArg.display()
|
||||||
|
print " All target can finish with '-clean' '-dump' ..."
|
||||||
print " all"
|
print " all"
|
||||||
print " build all (only for the current selected board) (bynary and packages)"
|
print " build all (only for the current selected board) (bynary and packages)"
|
||||||
print " clean"
|
print " clean"
|
||||||
@@ -45,7 +58,7 @@ def usage():
|
|||||||
print " Dump all the module dependency and properties"
|
print " Dump all the module dependency and properties"
|
||||||
listOfAllModule = lutinModule.list_all_module_with_desc()
|
listOfAllModule = lutinModule.list_all_module_with_desc()
|
||||||
for mod in listOfAllModule:
|
for mod in listOfAllModule:
|
||||||
print " " + mod[0] + " / " + mod[0] + "-clean / " + mod[0] + "-dump"
|
print " " + mod[0]
|
||||||
if mod[1] != "":
|
if mod[1] != "":
|
||||||
print " " + mod[1]
|
print " " + mod[1]
|
||||||
print " ex: " + sys.argv[0] + " all --target=Android all -t Windows -m debug all"
|
print " ex: " + sys.argv[0] + " all --target=Android all -t Windows -m debug all"
|
||||||
@@ -58,6 +71,28 @@ def parseGenericArg(argument,active):
|
|||||||
if active==False:
|
if active==False:
|
||||||
usage()
|
usage()
|
||||||
return True
|
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":
|
elif argument.get_option_nName()=="jobs":
|
||||||
if active==True:
|
if active==True:
|
||||||
lutinMultiprocess.set_core_number(int(argument.get_arg()))
|
lutinMultiprocess.set_core_number(int(argument.get_arg()))
|
||||||
@@ -91,6 +126,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
# now import other standard module (must be done here and not before ...
|
# now import other standard module (must be done here and not before ...
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
|
import lutinSystem
|
||||||
import lutinHost
|
import lutinHost
|
||||||
import lutinTools
|
import lutinTools
|
||||||
|
|
||||||
@@ -100,50 +136,59 @@ import lutinTools
|
|||||||
def Start():
|
def Start():
|
||||||
#available target : Linux / MacOs / Windows / Android ...
|
#available target : Linux / MacOs / Windows / Android ...
|
||||||
targetName=lutinHost.OS
|
targetName=lutinHost.OS
|
||||||
#compilation base
|
config = {
|
||||||
compilator="gcc"
|
"compilator":"gcc",
|
||||||
# build mode
|
"mode":"release",
|
||||||
mode="release"
|
"bus-size":"auto",
|
||||||
# package generationMode
|
"arch":"auto",
|
||||||
generatePackage=True
|
"generate-package":True,
|
||||||
|
"simulation":False,
|
||||||
|
"gcov":False
|
||||||
|
}
|
||||||
# load the default target :
|
# load the default target :
|
||||||
target = None
|
target = None
|
||||||
simulationMode=False
|
|
||||||
actionDone=False
|
actionDone=False
|
||||||
#build with extern tool
|
|
||||||
externBuild=False
|
|
||||||
# parse all argument
|
# parse all argument
|
||||||
for argument in localArgument:
|
for argument in localArgument:
|
||||||
if True==parseGenericArg(argument, False):
|
if True==parseGenericArg(argument, False):
|
||||||
continue
|
continue
|
||||||
elif argument.get_option_nName() == "package":
|
elif argument.get_option_nName() == "package":
|
||||||
generatePackage=False
|
config["generate-package"]=False
|
||||||
elif argument.get_option_nName() == "simulation":
|
elif argument.get_option_nName() == "simulation":
|
||||||
simulationMode=True
|
config["simulation"]=True
|
||||||
elif argument.get_option_nName() == "prj":
|
elif argument.get_option_nName() == "gcov":
|
||||||
externBuild=True
|
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":
|
elif argument.get_option_nName() == "compilator":
|
||||||
if compilator!=argument.get_arg():
|
if config["compilator"] != argument.get_arg():
|
||||||
debug.debug("change compilator ==> " + argument.get_arg())
|
debug.debug("change compilator ==> " + argument.get_arg())
|
||||||
compilator=argument.get_arg()
|
config["compilator"] = argument.get_arg()
|
||||||
#remove previous target
|
#remove previous target
|
||||||
target = None
|
target = None
|
||||||
elif argument.get_option_nName() == "target":
|
elif argument.get_option_nName() == "target":
|
||||||
# No check input ==> this will be verify automaticly chen the target will be loaded
|
# No check input ==> this will be verify automaticly chen the target will be loaded
|
||||||
if targetName!=argument.get_arg():
|
if targetName!=argument.get_arg():
|
||||||
targetName=argument.get_arg()
|
targetName=argument.get_arg()
|
||||||
debug.debug("change target ==> " + targetName + " & reset mode : gcc&release")
|
debug.debug("change target ==> '" + targetName + "' & reset mode : gcc&release")
|
||||||
#reset properties by defauult:
|
#reset properties by defauult:
|
||||||
compilator="gcc"
|
config = {
|
||||||
mode="release"
|
"compilator":"gcc",
|
||||||
generatePackage=True
|
"mode":"release",
|
||||||
simulationMode=False
|
"bus-size":"auto",
|
||||||
|
"arch":"auto",
|
||||||
|
"generate-package":True,
|
||||||
|
"simulation":False,
|
||||||
|
"gcov":False
|
||||||
|
}
|
||||||
#remove previous target
|
#remove previous target
|
||||||
target = None
|
target = None
|
||||||
elif argument.get_option_nName() == "mode":
|
elif argument.get_option_nName() == "mode":
|
||||||
if mode!=argument.get_arg():
|
if config["mode"]!=argument.get_arg():
|
||||||
mode = argument.get_arg()
|
config["mode"] = argument.get_arg()
|
||||||
debug.debug("change mode ==> " + mode)
|
debug.debug("change mode ==> " + config["mode"])
|
||||||
#remove previous target
|
#remove previous target
|
||||||
target = None
|
target = None
|
||||||
else:
|
else:
|
||||||
@@ -153,14 +198,14 @@ def Start():
|
|||||||
else:
|
else:
|
||||||
#load the target if needed :
|
#load the target if needed :
|
||||||
if target == None:
|
if target == None:
|
||||||
target = lutinTarget.target_load(targetName, compilator, mode, generatePackage, externBuild, simulationMode)
|
target = lutinTarget.load_target(targetName, config)
|
||||||
target.build(argument.get_arg())
|
target.build(argument.get_arg())
|
||||||
actionDone=True
|
actionDone=True
|
||||||
# if no action done : we do "all" ...
|
# if no action done : we do "all" ...
|
||||||
if actionDone==False:
|
if actionDone==False:
|
||||||
#load the target if needed :
|
#load the target if needed :
|
||||||
if target == None:
|
if target == None:
|
||||||
target = lutinTarget.target_load(targetName, compilator, mode, generatePackage, externBuild, simulationMode)
|
target = lutinTarget.load_target(targetName, config)
|
||||||
target.build("all")
|
target.build("all")
|
||||||
# stop all started threads
|
# stop all started threads
|
||||||
lutinMultiprocess.un_init()
|
lutinMultiprocess.un_init()
|
||||||
@@ -184,6 +229,9 @@ if __name__ == '__main__':
|
|||||||
and folder.lower()!="out" :
|
and folder.lower()!="out" :
|
||||||
debug.debug("Automatic load path: '" + folder + "'")
|
debug.debug("Automatic load path: '" + folder + "'")
|
||||||
lutinModule.import_path(folder)
|
lutinModule.import_path(folder)
|
||||||
|
lutinSystem.import_path(folder)
|
||||||
|
lutinTarget.import_path(folder)
|
||||||
|
#lutinSystem.display()
|
||||||
Start()
|
Start()
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
|
|
||||||
|
@@ -1,8 +1,17 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import thread
|
import thread
|
||||||
import lutinMultiprocess
|
import lutinMultiprocess
|
||||||
import threading
|
import threading
|
||||||
|
import re
|
||||||
|
|
||||||
debugLevel=3
|
debugLevel=3
|
||||||
debugColor=False
|
debugColor=False
|
||||||
@@ -23,6 +32,10 @@ def set_level(id):
|
|||||||
debugLevel = id
|
debugLevel = id
|
||||||
#print "SetDebug level at " + str(debugLevel)
|
#print "SetDebug level at " + str(debugLevel)
|
||||||
|
|
||||||
|
def get_level():
|
||||||
|
global debugLevel
|
||||||
|
return debugLevel
|
||||||
|
|
||||||
def enable_color():
|
def enable_color():
|
||||||
global debugColor
|
global debugColor
|
||||||
debugColor = True
|
debugColor = True
|
||||||
@@ -41,58 +54,89 @@ def enable_color():
|
|||||||
global color_cyan
|
global color_cyan
|
||||||
color_cyan = "\033[36m"
|
color_cyan = "\033[36m"
|
||||||
|
|
||||||
def verbose(input):
|
def extreme_verbose(input, force=False):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 5:
|
if debugLevel >= 6 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(color_blue + input + color_default)
|
print(color_blue + input + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
|
|
||||||
def debug(input):
|
def verbose(input, force=False):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 4:
|
if debugLevel >= 5 \
|
||||||
|
or force == True:
|
||||||
|
debugLock.acquire()
|
||||||
|
print(color_blue + input + color_default)
|
||||||
|
debugLock.release()
|
||||||
|
|
||||||
|
def debug(input, force=False):
|
||||||
|
global debugLock
|
||||||
|
global debugLevel
|
||||||
|
if debugLevel >= 4 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(color_green + input + color_default)
|
print(color_green + input + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
|
|
||||||
def info(input):
|
def info(input, force=False):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 3:
|
if debugLevel >= 3 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(input + color_default)
|
print(input + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
|
|
||||||
def warning(input):
|
def warning(input, force=False):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 2:
|
if debugLevel >= 2 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(color_purple + "[WARNING] " + input + color_default)
|
print(color_purple + "[WARNING] " + input + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
|
|
||||||
def error(input, threadID=-1):
|
def error(input, threadID=-1, force=False, crash=True):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 1:
|
if debugLevel >= 1 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(color_red + "[ERROR] " + input + color_default)
|
print(color_red + "[ERROR] " + input + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
lutinMultiprocess.error_occured()
|
if crash==True:
|
||||||
if threadID != -1:
|
lutinMultiprocess.error_occured()
|
||||||
thread.interrupt_main()
|
if threadID != -1:
|
||||||
exit(-1)
|
thread.interrupt_main()
|
||||||
#os_exit(-1)
|
exit(-1)
|
||||||
#raise "error happend"
|
#os_exit(-1)
|
||||||
|
#raise "error happend"
|
||||||
|
|
||||||
def print_element(type, lib, dir, name):
|
def print_element(type, lib, dir, name, force=False):
|
||||||
global debugLock
|
global debugLock
|
||||||
global debugLevel
|
global debugLevel
|
||||||
if debugLevel >= 3:
|
if debugLevel >= 3 \
|
||||||
|
or force == True:
|
||||||
debugLock.acquire()
|
debugLock.acquire()
|
||||||
print(color_cyan + type + color_default + " : " + color_yellow + lib + color_default + " " + dir + " " + color_blue + name + color_default)
|
print(color_cyan + type + color_default + " : " + color_yellow + lib + color_default + " " + dir + " " + color_blue + name + color_default)
|
||||||
debugLock.release()
|
debugLock.release()
|
||||||
|
|
||||||
|
def print_compilator(myString):
|
||||||
|
global debugColor
|
||||||
|
global debugLock
|
||||||
|
if debugColor == True:
|
||||||
|
myString = myString.replace('\\n', '\n')
|
||||||
|
myString = myString.replace('\\t', '\t')
|
||||||
|
myString = myString.replace('error:', color_red+'error:'+color_default)
|
||||||
|
myString = myString.replace('warning:', color_purple+'warning:'+color_default)
|
||||||
|
myString = myString.replace('note:', color_green+'note:'+color_default)
|
||||||
|
myString = re.sub(r'([/\w_-]+\.\w+):', r'-COLORIN-\1-COLOROUT-:', myString)
|
||||||
|
myString = myString.replace('-COLORIN-', color_yellow)
|
||||||
|
myString = myString.replace('-COLOROUT-', color_default)
|
||||||
|
|
||||||
|
debugLock.acquire()
|
||||||
|
print(myString)
|
||||||
|
debugLock.release()
|
@@ -1,51 +1,64 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinEnv as environement
|
import lutinEnv as environement
|
||||||
|
|
||||||
|
|
||||||
def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""):
|
def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""):
|
||||||
debug.verbose("Resuest check of dependency of :")
|
debug.extreme_verbose("Resuest check of dependency of :")
|
||||||
debug.verbose(" dst='" + str(dst) + "'")
|
debug.extreme_verbose(" dst='" + str(dst) + "'")
|
||||||
debug.verbose(" str='" + str(src) + "'")
|
debug.extreme_verbose(" str='" + str(src) + "'")
|
||||||
debug.verbose(" dept='" + str(dependFile) + "'")
|
debug.extreme_verbose(" dept='" + str(dependFile) + "'")
|
||||||
debug.verbose(" cmd='" + str(file_cmd) + "'")
|
debug.extreme_verbose(" cmd='" + str(file_cmd) + "'")
|
||||||
# if force mode selected ==> just force rebuild ...
|
# if force mode selected ==> just force rebuild ...
|
||||||
if environement.get_force_mode():
|
if environement.get_force_mode():
|
||||||
debug.verbose(" ==> must rebuild (force mode)")
|
debug.extreme_verbose(" ==> must rebuild (force mode)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# check if the destination existed:
|
# check if the destination existed:
|
||||||
if dst != "" \
|
if dst != "" \
|
||||||
and dst != None \
|
and dst != None \
|
||||||
and os.path.exists(dst) == False:
|
and os.path.exists(dst) == False:
|
||||||
debug.verbose(" ==> must rebuild (dst does not exist)")
|
debug.extreme_verbose(" ==> must rebuild (dst does not exist)")
|
||||||
|
return True
|
||||||
|
if dst != "" \
|
||||||
|
and dst != None \
|
||||||
|
and os.path.exists(src) == False:
|
||||||
|
debug.warning(" ==> unexistant file :'" + src + "'")
|
||||||
return True
|
return True
|
||||||
# chek the basic date if the 2 files
|
# chek the basic date if the 2 files
|
||||||
if dst != "" \
|
if dst != "" \
|
||||||
and dst != None \
|
and dst != None \
|
||||||
and os.path.getmtime(src) > os.path.getmtime(dst):
|
and os.path.getmtime(src) > os.path.getmtime(dst):
|
||||||
debug.verbose(" ==> must rebuild (source time greater)")
|
debug.extreme_verbose(" ==> must rebuild (source time greater)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if dependFile != "" \
|
if dependFile != "" \
|
||||||
and dependFile != None \
|
and dependFile != None \
|
||||||
and os.path.exists(dependFile) == False:
|
and os.path.exists(dependFile) == False:
|
||||||
debug.verbose(" ==> must rebuild (no depending file)")
|
debug.extreme_verbose(" ==> must rebuild (no depending file)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if file_cmd != "" \
|
if file_cmd != "" \
|
||||||
and file_cmd != None:
|
and file_cmd != None:
|
||||||
if os.path.exists(file_cmd) == False:
|
if os.path.exists(file_cmd) == False:
|
||||||
debug.verbose(" ==> must rebuild (no commandLine file)")
|
debug.extreme_verbose(" ==> must rebuild (no commandLine file)")
|
||||||
return True
|
return True
|
||||||
# check if the 2 cmdline are similar :
|
# check if the 2 cmdline are similar :
|
||||||
file2 = open(file_cmd, "r")
|
file2 = open(file_cmd, "r")
|
||||||
firstAndUniqueLine = file2.read()
|
firstAndUniqueLine = file2.read()
|
||||||
if firstAndUniqueLine != cmdLine:
|
if firstAndUniqueLine != cmdLine:
|
||||||
debug.verbose(" ==> must rebuild (cmdLines are not identical)")
|
debug.extreme_verbose(" ==> must rebuild (cmdLines are not identical)")
|
||||||
debug.verbose(" ==> '" + cmdLine + "'")
|
debug.extreme_verbose(" ==> '" + cmdLine + "'")
|
||||||
debug.verbose(" ==> '" + firstAndUniqueLine + "'")
|
debug.extreme_verbose(" ==> '" + firstAndUniqueLine + "'")
|
||||||
file2.close()
|
file2.close()
|
||||||
return True
|
return True
|
||||||
# the cmdfile is correct ...
|
# the cmdfile is correct ...
|
||||||
@@ -53,7 +66,7 @@ def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""):
|
|||||||
|
|
||||||
if dependFile != "" \
|
if dependFile != "" \
|
||||||
and dependFile != None:
|
and dependFile != None:
|
||||||
debug.verbose(" start parsing dependency file : '" + dependFile + "'")
|
debug.extreme_verbose(" start parsing dependency file : '" + dependFile + "'")
|
||||||
file = open(dependFile, "r")
|
file = open(dependFile, "r")
|
||||||
for curLine in file.readlines():
|
for curLine in file.readlines():
|
||||||
# normal file : end with : ": \\n"
|
# normal file : end with : ": \\n"
|
||||||
@@ -68,36 +81,36 @@ def need_re_build(dst, src, dependFile=None, file_cmd="", cmdLine=""):
|
|||||||
|
|
||||||
testFile=""
|
testFile=""
|
||||||
if curLine[len(curLine)-1:] == ':':
|
if curLine[len(curLine)-1:] == ':':
|
||||||
debug.verbose(" Line (no check (already done) : '" + curLine + "'");
|
debug.extreme_verbose(" Line (no check (already done) : '" + curLine + "'");
|
||||||
elif len(curLine) == 0 \
|
elif len(curLine) == 0 \
|
||||||
or curLine == '\\':
|
or curLine == '\\':
|
||||||
debug.verbose(" Line (Not parsed) : '" + curLine + "'");
|
debug.extreme_verbose(" Line (Not parsed) : '" + curLine + "'");
|
||||||
else:
|
else:
|
||||||
testFile = curLine
|
testFile = curLine
|
||||||
debug.verbose(" Line (might check) : '" + testFile + "'");
|
debug.extreme_verbose(" Line (might check) : '" + testFile + "'");
|
||||||
# really check files:
|
# really check files:
|
||||||
if testFile!="":
|
if testFile!="":
|
||||||
debug.verbose(" ==> test");
|
debug.extreme_verbose(" ==> test");
|
||||||
if False==os.path.exists(testFile):
|
if False==os.path.exists(testFile):
|
||||||
debug.verbose(" ==> must rebuild (a dependency file does not exist)")
|
debug.extreme_verbose(" ==> must rebuild (a dependency file does not exist)")
|
||||||
file.close()
|
file.close()
|
||||||
return True
|
return True
|
||||||
if os.path.getmtime(testFile) > os.path.getmtime(dst):
|
if os.path.getmtime(testFile) > os.path.getmtime(dst):
|
||||||
debug.verbose(" ==> must rebuild (a dependency file time is newer)")
|
debug.extreme_verbose(" ==> must rebuild (a dependency file time is newer)")
|
||||||
file.close()
|
file.close()
|
||||||
return True
|
return True
|
||||||
# close the current file :
|
# close the current file :
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
debug.verbose(" ==> Not rebuild (all dependency is OK)")
|
debug.extreme_verbose(" ==> Not rebuild (all dependency is OK)")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def need_re_package(dst, srcList, mustHaveSrc, file_cmd="", cmdLine=""):
|
def need_re_package(dst, srcList, mustHaveSrc, file_cmd="", cmdLine=""):
|
||||||
debug.verbose("Resuest check of dependency of :")
|
debug.extreme_verbose("Resuest check of dependency of :")
|
||||||
debug.verbose(" dst='" + dst + "'")
|
debug.extreme_verbose(" dst='" + dst + "'")
|
||||||
debug.verbose(" src()=")
|
debug.extreme_verbose(" src()=")
|
||||||
for src in srcList:
|
for src in srcList:
|
||||||
debug.verbose(" '" + src + "'")
|
debug.verbose(" '" + src + "'")
|
||||||
|
|
||||||
@@ -106,39 +119,39 @@ def need_re_package(dst, srcList, mustHaveSrc, file_cmd="", cmdLine=""):
|
|||||||
|
|
||||||
# if force mode selected ==> just force rebuild ...
|
# if force mode selected ==> just force rebuild ...
|
||||||
if environement.get_force_mode():
|
if environement.get_force_mode():
|
||||||
debug.verbose(" ==> must re-package (force mode)")
|
debug.extreme_verbose(" ==> must re-package (force mode)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# check if the destination existed:
|
# check if the destination existed:
|
||||||
if False==os.path.exists(dst):
|
if False==os.path.exists(dst):
|
||||||
debug.verbose(" ==> must re-package (dst does not exist)")
|
debug.extreme_verbose(" ==> must re-package (dst does not exist)")
|
||||||
return True
|
return True
|
||||||
# chek the basic date if the 2 files
|
# chek the basic date if the 2 files
|
||||||
if len(srcList)==0:
|
if len(srcList)==0:
|
||||||
debug.verbose(" ==> must re-package (no source ???)")
|
debug.extreme_verbose(" ==> must re-package (no source ???)")
|
||||||
return True
|
return True
|
||||||
for src in srcList:
|
for src in srcList:
|
||||||
if os.path.getmtime(src) > os.path.getmtime(dst):
|
if os.path.getmtime(src) > os.path.getmtime(dst):
|
||||||
debug.verbose(" ==> must re-package (source time greater) : '" + src + "'")
|
debug.extreme_verbose(" ==> must re-package (source time greater) : '" + src + "'")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if ""!=file_cmd:
|
if ""!=file_cmd:
|
||||||
if False==os.path.exists(file_cmd):
|
if False==os.path.exists(file_cmd):
|
||||||
debug.verbose(" ==> must rebuild (no commandLine file)")
|
debug.extreme_verbose(" ==> must rebuild (no commandLine file)")
|
||||||
return True
|
return True
|
||||||
# check if the 2 cmdline are similar :
|
# check if the 2 cmdline are similar :
|
||||||
file2 = open(file_cmd, "r")
|
file2 = open(file_cmd, "r")
|
||||||
firstAndUniqueLine = file2.read()
|
firstAndUniqueLine = file2.read()
|
||||||
if firstAndUniqueLine != cmdLine:
|
if firstAndUniqueLine != cmdLine:
|
||||||
debug.verbose(" ==> must rebuild (cmdLines are not identical)")
|
debug.extreme_verbose(" ==> must rebuild (cmdLines are not identical)")
|
||||||
debug.verbose(" ==> '" + cmdLine + "'")
|
debug.extreme_verbose(" ==> '" + cmdLine + "'")
|
||||||
debug.verbose(" ==> '" + firstAndUniqueLine + "'")
|
debug.extreme_verbose(" ==> '" + firstAndUniqueLine + "'")
|
||||||
file2.close()
|
file2.close()
|
||||||
return True
|
return True
|
||||||
# the cmdfile is correct ...
|
# the cmdfile is correct ...
|
||||||
file2.close()
|
file2.close()
|
||||||
|
|
||||||
debug.verbose(" ==> Not re-package (all dependency is OK)")
|
debug.extreme_verbose(" ==> Not re-package (all dependency is OK)")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
37
lutinEnv.py
37
lutinEnv.py
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
|
|
||||||
|
|
||||||
@@ -21,7 +29,7 @@ printPrettyMode=False
|
|||||||
|
|
||||||
def set_print_pretty_mode(val):
|
def set_print_pretty_mode(val):
|
||||||
global printPrettyMode
|
global printPrettyMode
|
||||||
if val==True:
|
if val == True:
|
||||||
printPrettyMode = True
|
printPrettyMode = True
|
||||||
else:
|
else:
|
||||||
printPrettyMode = False
|
printPrettyMode = False
|
||||||
@@ -30,9 +38,10 @@ def get_print_pretty_mode():
|
|||||||
global printPrettyMode
|
global printPrettyMode
|
||||||
return printPrettyMode
|
return printPrettyMode
|
||||||
|
|
||||||
def print_pretty(myString):
|
def print_pretty(myString, force=False):
|
||||||
global printPrettyMode
|
global printPrettyMode
|
||||||
if True==printPrettyMode:
|
if printPrettyMode == True \
|
||||||
|
or force == True:
|
||||||
if myString[len(myString)-1]==' ' :
|
if myString[len(myString)-1]==' ' :
|
||||||
tmpcmdLine = myString[:len(myString)-1]
|
tmpcmdLine = myString[:len(myString)-1]
|
||||||
else :
|
else :
|
||||||
@@ -41,7 +50,27 @@ def print_pretty(myString):
|
|||||||
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
||||||
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
||||||
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
tmpcmdLine = tmpcmdLine.replace('\n\t\n\t', '\n\t')
|
||||||
baseElementList = ["-o", "-D", "-I", "-L", "g++", "gcc", "clang", "clang++", "ar", "ld", "ranlib", "-framework", "-isysroot", "-arch"]
|
baseElementList = ["-o",
|
||||||
|
"-D",
|
||||||
|
"-I",
|
||||||
|
"-L",
|
||||||
|
"g++",
|
||||||
|
"gcc",
|
||||||
|
"clang",
|
||||||
|
"clang++",
|
||||||
|
"ar",
|
||||||
|
"ld",
|
||||||
|
"ranlib",
|
||||||
|
"-framework",
|
||||||
|
"-isysroot",
|
||||||
|
"-arch",
|
||||||
|
"-keystore",
|
||||||
|
"-sigalg",
|
||||||
|
"-digestalg",
|
||||||
|
"<",
|
||||||
|
"<<",
|
||||||
|
">",
|
||||||
|
">>"]
|
||||||
for element in baseElementList:
|
for element in baseElementList:
|
||||||
tmpcmdLine = tmpcmdLine.replace(element+'\n\t', element+' ')
|
tmpcmdLine = tmpcmdLine.replace(element+'\n\t', element+' ')
|
||||||
baseElementList = ["g++", "gcc", "clang", "clang++", "ar", "ld", "ranlib"]
|
baseElementList = ["g++", "gcc", "clang", "clang++", "ar", "ld", "ranlib"]
|
||||||
|
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
import lutinDebug as debug
|
|
||||||
import datetime
|
|
||||||
import lutinTools
|
|
||||||
import lutinModule
|
|
||||||
|
|
||||||
class ExtProjectGenerator:
|
|
||||||
def __init__(self, extType):
|
|
||||||
self.extType = extType
|
|
||||||
self.name = "emptyName"
|
|
||||||
#This is a distionnaty of all groups :
|
|
||||||
self.groups = {}
|
|
||||||
|
|
||||||
|
|
@@ -1,693 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
import lutinDebug as debug
|
|
||||||
import datetime
|
|
||||||
import lutinTools as tools
|
|
||||||
import os
|
|
||||||
import fnmatch
|
|
||||||
import lutinExtProjectGenerator
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
|
|
||||||
# id example : FFBA2F79187F44AE0034CC66
|
|
||||||
genericID = 100000
|
|
||||||
|
|
||||||
def convert_name_in_base_id(name,fill=True):
|
|
||||||
out = "FF"
|
|
||||||
for element in name.lower():
|
|
||||||
if element == "a": out += "01"
|
|
||||||
elif element == "b": out += "02"
|
|
||||||
elif element == "c": out += "03"
|
|
||||||
elif element == "d": out += "04"
|
|
||||||
elif element == "e": out += "05"
|
|
||||||
elif element == "f": out += "06"
|
|
||||||
elif element == "g": out += "07"
|
|
||||||
elif element == "h": out += "08"
|
|
||||||
elif element == "i": out += "09"
|
|
||||||
elif element == "j": out += "10"
|
|
||||||
elif element == "k": out += "11"
|
|
||||||
elif element == "l": out += "12"
|
|
||||||
elif element == "m": out += "13"
|
|
||||||
elif element == "n": out += "14"
|
|
||||||
elif element == "o": out += "15"
|
|
||||||
elif element == "p": out += "16"
|
|
||||||
elif element == "q": out += "17"
|
|
||||||
elif element == "r": out += "18"
|
|
||||||
elif element == "s": out += "19"
|
|
||||||
elif element == "t": out += "20"
|
|
||||||
elif element == "u": out += "21"
|
|
||||||
elif element == "v": out += "22"
|
|
||||||
elif element == "w": out += "23"
|
|
||||||
elif element == "x": out += "24"
|
|
||||||
elif element == "y": out += "25"
|
|
||||||
elif element == "z": out += "27"
|
|
||||||
else: out += "FF"
|
|
||||||
if len(out) >= 18:
|
|
||||||
return out
|
|
||||||
if fill == True:
|
|
||||||
for iii in range(0,256):
|
|
||||||
out += "A"
|
|
||||||
if len(out) >= 18:
|
|
||||||
return out
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
dictId = {}
|
|
||||||
|
|
||||||
def convert_folder_in_base_id(name, package):
|
|
||||||
global dictId
|
|
||||||
debug.verbose(" generate Id for : " + package + ":" + name);
|
|
||||||
if package not in dictId.keys():
|
|
||||||
dictId[package] = {"lastID": 100000, "sub":{}}
|
|
||||||
if name not in dictId[package]["sub"].keys():
|
|
||||||
generatedID = convert_name_in_base_id(package) + str(dictId[package]["lastID"])
|
|
||||||
dictId[package]["lastID"] = dictId[package]["lastID"] + 1
|
|
||||||
dictId[package]["sub"][name] = {"id":generatedID}
|
|
||||||
return dictId[package]["sub"][name]["id"]
|
|
||||||
|
|
||||||
FILE_MARKER = '<files>'
|
|
||||||
|
|
||||||
##
|
|
||||||
## @brief generate a tree from the specific file
|
|
||||||
##
|
|
||||||
def attach(branch, trunk):
|
|
||||||
parts = branch.split('/', 1)
|
|
||||||
if len(parts) == 1: # branch is a file
|
|
||||||
trunk[FILE_MARKER].append(parts[0])
|
|
||||||
else:
|
|
||||||
node, others = parts
|
|
||||||
if node not in trunk:
|
|
||||||
trunk[node] = defaultdict(dict, ((FILE_MARKER, []),))
|
|
||||||
attach(others, trunk[node])
|
|
||||||
|
|
||||||
##
|
|
||||||
## @brief display a specific path tree field
|
|
||||||
##
|
|
||||||
def prettify(d, indent=0):
|
|
||||||
for key, value in d.iteritems():
|
|
||||||
if key == FILE_MARKER:
|
|
||||||
if value:
|
|
||||||
debug.debug(' ' * indent + str(value))
|
|
||||||
else:
|
|
||||||
debug.debug(' ' * indent + str(key))
|
|
||||||
if isinstance(value, dict):
|
|
||||||
prettify(value, indent+1)
|
|
||||||
else:
|
|
||||||
debug.debug(' ' * (indent+1) + str(value))
|
|
||||||
|
|
||||||
|
|
||||||
def generate_tree(treedata, package, tree = []):
|
|
||||||
data = ""
|
|
||||||
tmpPath = "?tree?"
|
|
||||||
if len(tree) != 0:
|
|
||||||
tmpPath = ""
|
|
||||||
for elem in tree:
|
|
||||||
if tmpPath != "":
|
|
||||||
tmpPath += '/'
|
|
||||||
tmpPath += elem
|
|
||||||
if len(tree) == 0:
|
|
||||||
data +=' ' + convert_folder_in_base_id(tmpPath, package) + ' /* ' + package + ' */ = {\n'
|
|
||||||
else:
|
|
||||||
data +=' ' + convert_folder_in_base_id(tmpPath, package) + ' /* ' + tree[-1] + ' */ = {\n'
|
|
||||||
data +=' isa = PBXGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
"""
|
|
||||||
data +=' FFBA2F8B187F44AE0034CC66 /* AppDelegate.h */,\n'
|
|
||||||
data +=' FFBA2F8C187F44AE0034CC66 /* AppDelegate.m */,\n'
|
|
||||||
data +=' FFBA2F8E187F44AE0034CC66 /* Main_iPhone.storyboard */,\n'
|
|
||||||
data +=' FFBA2F91187F44AE0034CC66 /* Main_iPad.storyboard */,\n'
|
|
||||||
data +=' FFBA2F94187F44AE0034CC66 /* Shader.fsh */,\n'
|
|
||||||
data +=' FFBA2F96187F44AE0034CC66 /* Shader.vsh */,\n'
|
|
||||||
data +=' FFBA2F98187F44AE0034CC66 /* ViewController.h */,\n'
|
|
||||||
data +=' FFBA2F99187F44AE0034CC66 /* ViewController.m */,\n'
|
|
||||||
data +=' FFBA2F9B187F44AE0034CC66 /* Images.xcassets */,\n'
|
|
||||||
data +=' FFBA2F83187F44AE0034CC66 /* Supporting Files */,\n'
|
|
||||||
"""
|
|
||||||
for key, value in treedata.iteritems():
|
|
||||||
if key == FILE_MARKER:
|
|
||||||
for file in value:
|
|
||||||
data +=' ' + convert_folder_in_base_id(tmpPath + '/' + file, package) + ' /* ' + file + ' */,\n'
|
|
||||||
else:
|
|
||||||
# TODO : Check if folder is empty ...
|
|
||||||
data +=' ' + convert_folder_in_base_id(tmpPath + '/' + key, package) + ' /* ' + key + ' */,\n'
|
|
||||||
"""
|
|
||||||
debug.debug(' ' * indent + str(key))
|
|
||||||
if isinstance(value, dict):
|
|
||||||
prettify(value, indent+1)
|
|
||||||
else:
|
|
||||||
debug.debug(' ' * (indent+1) + str(value))
|
|
||||||
"""
|
|
||||||
data +=' );\n'
|
|
||||||
if len(tree) == 0:
|
|
||||||
data +=' path = ' + package + ';\n'
|
|
||||||
else:
|
|
||||||
data +=' path = ' + tree[-1] + ';\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
# generate all subFolder :
|
|
||||||
for key, value in treedata.iteritems():
|
|
||||||
if key == FILE_MARKER:
|
|
||||||
continue
|
|
||||||
tree.append(key)
|
|
||||||
data += generate_tree(value, package, tree)
|
|
||||||
tree.pop()
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
XCodeTypeElements = {
|
|
||||||
'a': ('archive.ar', 'PBXFrameworksBuildPhase', ''),
|
|
||||||
'xcodeproj': ('wrapper.pb-project', None, '""'),
|
|
||||||
'app': ('wrapper.application', None, ''),
|
|
||||||
'framework': ('wrapper.framework', 'PBXFrameworksBuildPhase', 'SDKROOT'),
|
|
||||||
'dylib': ('compiled.mach-o.dylib', 'PBXFrameworksBuildPhase', '"<group>"'),
|
|
||||||
'h': ('sourcecode.c.h', None, '"<group>"'),
|
|
||||||
'H': ('sourcecode.c.h', None, '"<group>"'),
|
|
||||||
'hpp': ('sourcecode.c.h', None, '"<group>"'),
|
|
||||||
'hxx': ('sourcecode.c.h', None, '"<group>"'),
|
|
||||||
'S': ('sourcecode.asm', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
's': ('sourcecode.asm', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'c': ('sourcecode.c.c', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'cpp': ('sourcecode.cpp.cpp', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'cxx': ('sourcecode.cpp.cpp', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'm': ('sourcecode.c.objc', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'j': ('sourcecode.c.objc', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'mm': ('sourcecode.cpp.objcpp', 'PBXSourcesBuildPhase', '"<group>"'),
|
|
||||||
'icns': ('image.icns', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'nib': ('wrapper.nib', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'plist': ('text.plist.xml', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'json': ('text.json', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'rtf': ('text.rtf', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'png': ('image.png', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'tiff': ('image.tiff', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'txt': ('text', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'fsh': ('sourcecode.glsl', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'frag': ('sourcecode.glsl', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'vsh': ('sourcecode.glsl', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'vert': ('sourcecode.glsl', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'svg': ('image.png', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'xml': ('sourcecode.xml', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'prog': ('text.xml', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'ttf': ('text', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'conf': ('text', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'emf': ('text', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'xib': ('file.xib', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'strings': ('text.plist.strings', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'bundle': ('wrapper.plug-in', 'PBXResourcesBuildPhase', '"<group>"'),
|
|
||||||
'storyboard':('file.storyboard', 'PBXResourcesBuildPhase', '"<group>"')
|
|
||||||
}
|
|
||||||
|
|
||||||
class ExtProjectGeneratorXCode(lutinExtProjectGenerator.ExtProjectGenerator):
|
|
||||||
def __init__(self):
|
|
||||||
lutinExtProjectGenerator.ExtProjectGenerator.__init__(self, "XCode")
|
|
||||||
self.baseId = "FFFFFFFFFFFFFFFFFF"
|
|
||||||
|
|
||||||
# set default framwork:
|
|
||||||
self.add_files("Frameworks",
|
|
||||||
"System/Library/Frameworks",
|
|
||||||
[ "Foundation.framework",
|
|
||||||
"CoreGraphics.framework",
|
|
||||||
"UIKit.framework",
|
|
||||||
"GLKit.framework",
|
|
||||||
"OpenGLES.framework",
|
|
||||||
"XCTest.framework" ]);
|
|
||||||
|
|
||||||
def set_project_name(self, name):
|
|
||||||
self.name = name
|
|
||||||
self.baseId = convert_name_in_base_id(name)
|
|
||||||
|
|
||||||
def add_files(self, group, basePath, srcList):
|
|
||||||
if group not in self.groups.keys() :
|
|
||||||
self.groups[group] = {
|
|
||||||
"list-files" : [],
|
|
||||||
"extra-flags" : []
|
|
||||||
}
|
|
||||||
for element in srcList:
|
|
||||||
debug.info("plop : " + str(element))
|
|
||||||
debug.info("plop : " + str(basePath))
|
|
||||||
path = basePath + "/" + element
|
|
||||||
pos = path.rfind('/')
|
|
||||||
simpleName = path
|
|
||||||
if pos >= 0:
|
|
||||||
simpleName = path[pos+1:]
|
|
||||||
pos = simpleName.rfind('.')
|
|
||||||
extention = "";
|
|
||||||
if pos >= 0:
|
|
||||||
extention = simpleName[pos+1:]
|
|
||||||
|
|
||||||
self.groups[group]["list-files"].append({
|
|
||||||
"path" : path,
|
|
||||||
"name" : simpleName,
|
|
||||||
"extention":extention,
|
|
||||||
"declare-name":element})
|
|
||||||
|
|
||||||
def add_data_file(self, basePath, srcList):
|
|
||||||
realBasePath = os.path.realpath(basePath)
|
|
||||||
if realBasePath[-1] == "/":
|
|
||||||
realBasePath = realBasePath[:-1]
|
|
||||||
debug.debug("add data file : " + str(srcList))
|
|
||||||
for realName,destName in srcList:
|
|
||||||
tools.copy_file(realBasePath+'/'+realName, 'out/iOs/' + self.name + '/data/' + destName, force=True)
|
|
||||||
self.add_files("data", 'out/iOs/' + self.name + 'xcodeprj/data', [destName])
|
|
||||||
|
|
||||||
def add_data_folder(self, basePath, srcList):
|
|
||||||
realBasePath = basePath
|
|
||||||
if realBasePath[-1] == "/":
|
|
||||||
realBasePath = realBasePath[:-1]
|
|
||||||
debug.debug("add data folder : " + str(srcList))
|
|
||||||
for inputPath,outputPath in srcList:
|
|
||||||
tmpPath = os.path.dirname(os.path.realpath(realBasePath + '/' + inputPath))
|
|
||||||
tmpRule = os.path.basename(inputPath)
|
|
||||||
debug.warning(" add folder : '" + tmpPath + "' rule : '" + tmpRule + "'")
|
|
||||||
for root, dirnames, filenames in os.walk(tmpPath):
|
|
||||||
tmpList = filenames
|
|
||||||
if len(tmpRule)>0:
|
|
||||||
tmpList = fnmatch.filter(filenames, tmpRule)
|
|
||||||
# Import the module :
|
|
||||||
for cycleFile in tmpList:
|
|
||||||
#for cycleFile in filenames:
|
|
||||||
self.add_data_file(tmpPath, [[cycleFile, outputPath+cycleFile]])
|
|
||||||
|
|
||||||
def generate_project_file(self):
|
|
||||||
|
|
||||||
|
|
||||||
#debug.error(" list : " + str(self.groups))
|
|
||||||
|
|
||||||
data ='// !$*UTF8*$!\n'
|
|
||||||
data +='{\n'
|
|
||||||
data +=' archiveVersion = 1;\n'
|
|
||||||
data +=' classes = {\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' objectVersion = 46;\n'
|
|
||||||
data +=' objects = {\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXBuildFile section */\n'
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
debug.debug(" PBXBuildFile ?? " + str(files))
|
|
||||||
if files["extention"] in XCodeTypeElements.keys():
|
|
||||||
if XCodeTypeElements[files["extention"]][1] == "PBXSourcesBuildPhase" \
|
|
||||||
or XCodeTypeElements[files["extention"]][1] == "PBXFrameworksBuildPhase"\
|
|
||||||
or XCodeTypeElements[files["extention"]][1] == "PBXSourcesBuildPhase"\
|
|
||||||
or XCodeTypeElements[files["extention"]][1] == "PBXVariantGroup":
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"] + '_PBXBuildFile', group)
|
|
||||||
data +=' /* ' + files["name"] + ' in ' + group + ' */ = {'
|
|
||||||
data +=' isa = PBXBuildFile;'
|
|
||||||
data +=' fileRef = ' + convert_folder_in_base_id(files["declare-name"], group) + ';'
|
|
||||||
data +=' };\n'
|
|
||||||
data +='/* End PBXBuildFile section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXContainerItemProxy section */\n'
|
|
||||||
|
|
||||||
# I did not understand this section ...
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXContainerItemProxy?", self.name) + ' /* PBXContainerItemProxy */ = {\n'
|
|
||||||
data +=' isa = PBXContainerItemProxy;\n'
|
|
||||||
data +=' containerPortal = ' + convert_folder_in_base_id("?PBXProject?", self.name) + ' /* Project object */;\n'
|
|
||||||
data +=' proxyType = 1;\n'
|
|
||||||
data +=' remoteGlobalIDString = ' + convert_folder_in_base_id("?PBXNativeTarget?sectio", self.name) + ';\n'
|
|
||||||
data +=' remoteInfo = ' + self.name + ';\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXContainerItemProxy section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXFileReference section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?app?", self.name) + ' /* ' + self.name + '.app */ = {\n'
|
|
||||||
data +=' isa = PBXFileReference;\n'
|
|
||||||
data +=' explicitFileType = wrapper.application;\n'
|
|
||||||
data +=' includeInIndex = 0;\n'
|
|
||||||
data +=' path = ' + self.name + '.app;\n'
|
|
||||||
data +=' sourceTree = BUILT_PRODUCTS_DIR;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
debug.debug(" PBXBuildFile ?? " + str(files))
|
|
||||||
data +=' /* ' + files["name"] + ' */\n'
|
|
||||||
if files["extention"] in XCodeTypeElements.keys():
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"], group) + ' = {'
|
|
||||||
data +=' isa = PBXBuildFile;'
|
|
||||||
data +=' lastKnownFileType = ' + XCodeTypeElements[files["extention"]][0] + ';'
|
|
||||||
data +=' path = ' + files["path"] + ';'
|
|
||||||
data +=' name = ' + files["name"] + ';'
|
|
||||||
data +=' sourceTree = ' + XCodeTypeElements[files["extention"]][2] + '; };\n'
|
|
||||||
else:
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"], group) + ' = {'
|
|
||||||
data +=' isa = PBXBuildFile;'
|
|
||||||
#data +=' lastKnownFileType = ' + XCodeTypeElements[files["extention"]][0] + ';'
|
|
||||||
data +=' path = ' + files["path"] + ';'
|
|
||||||
data +=' name = ' + files["name"] + ';'
|
|
||||||
data +=' sourceTree = "<group>"; };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXFileReference section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXFrameworksBuildPhase section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Frameworks?", self.name) + ' /* Frameworks */ = {\n'
|
|
||||||
data +=' isa = PBXFrameworksBuildPhase;\n'
|
|
||||||
data +=' buildActionMask = 2147483647;\n'
|
|
||||||
data +=' files = (\n'
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
if files["extention"] not in XCodeTypeElements.keys():
|
|
||||||
continue
|
|
||||||
if XCodeTypeElements[files["extention"]][1] == "PBXFrameworksBuildPhase":
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"] + '_PBXBuildFile', group)
|
|
||||||
data +=' /* ' + files["name"] + ' in ' + group + '*/,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' runOnlyForDeploymentPostprocessing = 0;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXFrameworksBuildPhase section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXGroup section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?mainTreeGroup?", self.name) + ' = {\n'
|
|
||||||
data +=' isa = PBXGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
for group in self.groups:
|
|
||||||
data +=' ' + convert_folder_in_base_id("?tree?", group) + ' /* ' + group + ' */,\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?tree?", "Products") + ' /* Products */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?tree?", "Products") + ' /* Products */ = {\n'
|
|
||||||
data +=' isa = PBXGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?app?", self.name) + ' /* ' + self.name + '.app */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = Products;\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
# treeview :
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
main_dict = defaultdict(dict, ((FILE_MARKER, []),))
|
|
||||||
for line in element["list-files"]:
|
|
||||||
attach(line["declare-name"], main_dict)
|
|
||||||
#prettify(main_dict);
|
|
||||||
data += generate_tree(main_dict, group)
|
|
||||||
|
|
||||||
data +='/* End PBXGroup section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXNativeTarget section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?sectio", self.name) + ' /* edn */ = {\n'
|
|
||||||
data +=' isa = PBXNativeTarget;\n'
|
|
||||||
data +=' buildConfigurationList = ' + convert_folder_in_base_id("?PBXNativeTarget?", self.name) + ' /* Build configuration list for PBXNativeTarget "edn" */;\n'
|
|
||||||
data +=' buildPhases = (\n'
|
|
||||||
data +=' FFBA2F71187F44AE0034CC66 /* Sources */,\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Frameworks?", self.name) + ' /* Frameworks */,\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Resources?", self.name) + ' /* Resources */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' buildRules = (\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' dependencies = (\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = edn;\n'
|
|
||||||
data +=' productName = edn;\n'
|
|
||||||
data +=' productReference = ' + convert_folder_in_base_id("?app?", self.name) + ' /* ' + self.name + '.app */;\n'
|
|
||||||
data +=' productType = "com.apple.product-type.application";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXNativeTarget section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXProject section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Project-object?", self.name) + ' /* Project object */ = {\n'
|
|
||||||
data +=' isa = PBXProject;\n'
|
|
||||||
data +=' attributes = {\n'
|
|
||||||
data +=' LastUpgradeCheck = 0500;\n'
|
|
||||||
data +=' ORGANIZATIONNAME = "Edouard DUPIN";\n'
|
|
||||||
data +=' TargetAttributes = {\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Project-object?targetAttribute", self.name) + ' = {\n'
|
|
||||||
data +=' TestTargetID = ' + convert_folder_in_base_id("?PBXNativeTarget?sectio", self.name) + ';\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' buildConfigurationList = ' + convert_folder_in_base_id("?PBXProject?", self.name) + ' /* Build configuration list for PBXProject "edn" */;\n'
|
|
||||||
data +=' compatibilityVersion = "Xcode 3.2";\n'
|
|
||||||
data +=' developmentRegion = English;\n'
|
|
||||||
data +=' hasScannedForEncodings = 0;\n'
|
|
||||||
data +=' knownRegions = (\n'
|
|
||||||
data +=' en,\n'
|
|
||||||
data +=' Base,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' mainGroup = ' + convert_folder_in_base_id("?mainTreeGroup?", self.name) + ';\n'
|
|
||||||
data +=' productRefGroup = ' + convert_folder_in_base_id("?tree?", "Products") + ' /* Products */;\n'
|
|
||||||
data +=' projectDirPath = "";\n'
|
|
||||||
data +=' projectRoot = "";\n'
|
|
||||||
data +=' targets = (\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?sectio", self.name) + ' /* edn */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +='/* End PBXProject section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXResourcesBuildPhase section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?Resources?", self.name) + ' /* Resources */ = {\n'
|
|
||||||
data +=' isa = PBXResourcesBuildPhase;\n'
|
|
||||||
data +=' buildActionMask = 2147483647;\n'
|
|
||||||
data +=' files = (\n'
|
|
||||||
# list of all resources to copy
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
if files["extention"] in XCodeTypeElements.keys():
|
|
||||||
if XCodeTypeElements[files["extention"]][1] == "PBXResourcesBuildPhase":
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"] + '_PBXBuildFile', group) + ' = {'
|
|
||||||
data +=' /* ' + files["name"] + ' in ' + group + ' */'
|
|
||||||
data +=' ,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' runOnlyForDeploymentPostprocessing = 0;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXResourcesBuildPhase section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXSourcesBuildPhase section */\n'
|
|
||||||
|
|
||||||
data +=' FFBA2F71187F44AE0034CC66 /* Sources */ = {\n'
|
|
||||||
data +=' isa = PBXSourcesBuildPhase;\n'
|
|
||||||
data +=' buildActionMask = 2147483647;\n'
|
|
||||||
data +=' files = (\n'
|
|
||||||
# list of all file to compile ...
|
|
||||||
# TODO : review this ==> generate to many files ...
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
if files["extention"] not in XCodeTypeElements.keys():
|
|
||||||
continue
|
|
||||||
if XCodeTypeElements[files["extention"]][1] == "PBXSourcesBuildPhase":
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"] + '_PBXBuildFile', group)
|
|
||||||
data +=' /* ' + group + " : " + files["name"] + ' */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' runOnlyForDeploymentPostprocessing = 0;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data +='/* End PBXSourcesBuildPhase section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXTargetDependency section */\n'
|
|
||||||
# nothing ...
|
|
||||||
data +='/* End PBXTargetDependency section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin PBXVariantGroup section */\n'
|
|
||||||
# not really needed, because it is for internal system data position ==> maybe change it if necessary ...
|
|
||||||
"""
|
|
||||||
for group in self.groups:
|
|
||||||
element = self.groups[group]
|
|
||||||
for files in element["list-files"]:
|
|
||||||
if files["extention"] not in XCodeTypeElements.keys():
|
|
||||||
continue
|
|
||||||
if XCodeTypeElements[files["extention"]][1] == "PBXSourcesBuildPhase":
|
|
||||||
data +=' ' + convert_folder_in_base_id(files["declare-name"] + '_PBXBuildFile', group)
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
data +=' FFBA2F85187F44AE0034CC66 /* InfoPlist.strings */ = {\n'
|
|
||||||
data +=' isa = PBXVariantGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
data +=' FFBA2F86187F44AE0034CC66 /* en */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = InfoPlist.strings;\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' FFBA2F8E187F44AE0034CC66 /* Main_iPhone.storyboard */ = {\n'
|
|
||||||
data +=' isa = PBXVariantGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
data +=' FFBA2F8F187F44AE0034CC66 /* Base */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = Main_iPhone.storyboard;\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' FFBA2F91187F44AE0034CC66 /* Main_iPad.storyboard */ = {\n'
|
|
||||||
data +=' isa = PBXVariantGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
data +=' FFBA2F92187F44AE0034CC66 /* Base */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = Main_iPad.storyboard;\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' FFBA2FAB187F44AF0034CC66 /* InfoPlist.strings */ = {\n'
|
|
||||||
data +=' isa = PBXVariantGroup;\n'
|
|
||||||
data +=' children = (\n'
|
|
||||||
data +=' FFBA2FAC187F44AF0034CC66 /* en */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' name = InfoPlist.strings;\n'
|
|
||||||
data +=' sourceTree = "<group>";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
"""
|
|
||||||
data +='/* End PBXVariantGroup section */\n'
|
|
||||||
data +='\n'
|
|
||||||
data +='/* Begin XCBuildConfiguration section */\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXProject?Debug", self.name) + ' /* Debug */ = {\n'
|
|
||||||
data +=' isa = XCBuildConfiguration;\n'
|
|
||||||
data +=' buildSettings = {\n'
|
|
||||||
data +=' ALWAYS_SEARCH_USER_PATHS = NO;\n'
|
|
||||||
data +=' ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";\n'
|
|
||||||
data +=' CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";\n'
|
|
||||||
data +=' CLANG_CXX_LIBRARY = "libc++";\n'
|
|
||||||
data +=' CLANG_ENABLE_MODULES = YES;\n'
|
|
||||||
data +=' CLANG_ENABLE_OBJC_ARC = YES;\n'
|
|
||||||
data +=' CLANG_WARN_BOOL_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_CONSTANT_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n'
|
|
||||||
data +=' CLANG_WARN_EMPTY_BODY = YES;\n'
|
|
||||||
data +=' CLANG_WARN_ENUM_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_INT_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n'
|
|
||||||
data +=' CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n'
|
|
||||||
data +=' "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";\n'
|
|
||||||
data +=' COPY_PHASE_STRIP = NO;\n'
|
|
||||||
data +=' GCC_C_LANGUAGE_STANDARD = gnu99;\n'
|
|
||||||
data +=' GCC_DYNAMIC_NO_PIC = NO;\n'
|
|
||||||
data +=' GCC_OPTIMIZATION_LEVEL = 0;\n'
|
|
||||||
data +=' GCC_PREPROCESSOR_DEFINITIONS = (\n'
|
|
||||||
data +=' "DEBUG=1",\n'
|
|
||||||
data +=' "$(inherited)",\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' GCC_SYMBOLS_PRIVATE_EXTERN = NO;\n'
|
|
||||||
data +=' GCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n'
|
|
||||||
data +=' GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n'
|
|
||||||
data +=' GCC_WARN_UNDECLARED_SELECTOR = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNINITIALIZED_AUTOS = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNUSED_FUNCTION = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNUSED_VARIABLE = YES;\n'
|
|
||||||
data +=' IPHONEOS_DEPLOYMENT_TARGET = 7.0;\n'
|
|
||||||
data +=' ONLY_ACTIVE_ARCH = YES;\n'
|
|
||||||
data +=' SDKROOT = iphoneos;\n'
|
|
||||||
data +=' TARGETED_DEVICE_FAMILY = "1,2";\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' name = Debug;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXProject?Release", self.name) + ' /* Release */ = {\n'
|
|
||||||
data +=' isa = XCBuildConfiguration;\n'
|
|
||||||
data +=' buildSettings = {\n'
|
|
||||||
data +=' ALWAYS_SEARCH_USER_PATHS = NO;\n'
|
|
||||||
data +=' ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";\n'
|
|
||||||
data +=' CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";\n'
|
|
||||||
data +=' CLANG_CXX_LIBRARY = "libc++";\n'
|
|
||||||
data +=' CLANG_ENABLE_MODULES = YES;\n'
|
|
||||||
data +=' CLANG_ENABLE_OBJC_ARC = YES;\n'
|
|
||||||
data +=' CLANG_WARN_BOOL_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_CONSTANT_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n'
|
|
||||||
data +=' CLANG_WARN_EMPTY_BODY = YES;\n'
|
|
||||||
data +=' CLANG_WARN_ENUM_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_INT_CONVERSION = YES;\n'
|
|
||||||
data +=' CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n'
|
|
||||||
data +=' CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n'
|
|
||||||
data +=' "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";\n'
|
|
||||||
data +=' COPY_PHASE_STRIP = YES;\n'
|
|
||||||
data +=' ENABLE_NS_ASSERTIONS = NO;\n'
|
|
||||||
data +=' GCC_C_LANGUAGE_STANDARD = gnu99;\n'
|
|
||||||
data +=' GCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n'
|
|
||||||
data +=' GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n'
|
|
||||||
data +=' GCC_WARN_UNDECLARED_SELECTOR = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNINITIALIZED_AUTOS = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNUSED_FUNCTION = YES;\n'
|
|
||||||
data +=' GCC_WARN_UNUSED_VARIABLE = YES;\n'
|
|
||||||
data +=' IPHONEOS_DEPLOYMENT_TARGET = 7.0;\n'
|
|
||||||
data +=' SDKROOT = iphoneos;\n'
|
|
||||||
data +=' TARGETED_DEVICE_FAMILY = "1,2";\n'
|
|
||||||
data +=' VALIDATE_PRODUCT = YES;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' name = Release;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?Debug", self.name) + ' /* Debug */ = {\n'
|
|
||||||
data +=' isa = XCBuildConfiguration;\n'
|
|
||||||
data +=' buildSettings = {\n'
|
|
||||||
data +=' ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n'
|
|
||||||
data +=' ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n'
|
|
||||||
data +=' GCC_PRECOMPILE_PREFIX_HEADER = YES;\n'
|
|
||||||
data +=' GCC_PREFIX_HEADER = "edn/edn-Prefix.pch";\n'
|
|
||||||
data +=' INFOPLIST_FILE = "edn/edn-Info.plist";\n'
|
|
||||||
data +=' PRODUCT_NAME = "$(TARGET_NAME)";\n'
|
|
||||||
data +=' WRAPPER_EXTENSION = app;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' name = Debug;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?Release", self.name) + ' /* Release */ = {\n'
|
|
||||||
data +=' isa = XCBuildConfiguration;\n'
|
|
||||||
data +=' buildSettings = {\n'
|
|
||||||
data +=' ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n'
|
|
||||||
data +=' ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n'
|
|
||||||
data +=' GCC_PRECOMPILE_PREFIX_HEADER = YES;\n'
|
|
||||||
data +=' GCC_PREFIX_HEADER = "edn/edn-Prefix.pch";\n'
|
|
||||||
data +=' INFOPLIST_FILE = "edn/edn-Info.plist";\n'
|
|
||||||
data +=' PRODUCT_NAME = "$(TARGET_NAME)";\n'
|
|
||||||
data +=' WRAPPER_EXTENSION = app;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' name = Release;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
|
|
||||||
data += '/* End XCBuildConfiguration section */\n'
|
|
||||||
data += '\n'
|
|
||||||
data += '/* Begin XCConfigurationList section */\n'
|
|
||||||
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXProject?", self.name) + ' /* Build configuration list for PBXProject "' + self.name + '" */ = {\n'
|
|
||||||
data +=' isa = XCConfigurationList;\n'
|
|
||||||
data +=' buildConfigurations = (\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXProject?Debug", self.name) + ' /* Debug */,\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXProject?Release", self.name) + ' /* Release */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' defaultConfigurationIsVisible = 0;\n'
|
|
||||||
data +=' defaultConfigurationName = Release;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?", self.name) + ' /* Build configuration list for PBXNativeTarget "PBXNativeTarget" */ = {\n'
|
|
||||||
data +=' isa = XCConfigurationList;\n'
|
|
||||||
data +=' buildConfigurations = (\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?Debug", self.name) + ' /* Debug */,\n'
|
|
||||||
data +=' ' + convert_folder_in_base_id("?PBXNativeTarget?Release", self.name) + ' /* Release */,\n'
|
|
||||||
data +=' );\n'
|
|
||||||
data +=' defaultConfigurationIsVisible = 0;\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +='/* End XCConfigurationList section */\n'
|
|
||||||
data +=' };\n'
|
|
||||||
data +=' rootObject = ' + convert_folder_in_base_id("?PBXProject?", self.name) + ' /* Project object */;\n'
|
|
||||||
data +='}\n'
|
|
||||||
|
|
||||||
#debug.info(data)
|
|
||||||
|
|
||||||
outName = 'out/iOs/' + self.name + '.xcodeproj/project.pbxproj'
|
|
||||||
tools.create_directory_of_file(outName)
|
|
||||||
tools.file_write_data(outName, data)
|
|
||||||
# TODO : Generate all dependency files ...
|
|
||||||
"""
|
|
||||||
# this is a file generated by xcode for his internal properties ...
|
|
||||||
# create workspace file:
|
|
||||||
data = '<?xml version="1.0" encoding="UTF-8"?>\n'
|
|
||||||
data += '<Workspace\n'
|
|
||||||
data += ' version = "1.0">\n'
|
|
||||||
data += ' <FileRef\n'
|
|
||||||
data += ' location = "self:' + self.name + '.xcodeproj">\n'
|
|
||||||
data += ' </FileRef>\n'
|
|
||||||
data += '</Workspace>\n'
|
|
||||||
|
|
||||||
outName = 'out/iOs/' + self.name + '.xcodeproj/project.xcworkspace/contents.xcworkspacedata'
|
|
||||||
tools.create_directory_of_file(outName)
|
|
||||||
tools.file_write_data(outName, data)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -1,5 +1,14 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import copy
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
|
|
||||||
|
|
||||||
@@ -22,6 +31,8 @@ class HeritageList:
|
|||||||
self.flags_xx=[]
|
self.flags_xx=[]
|
||||||
self.flags_m=[]
|
self.flags_m=[]
|
||||||
self.flags_mm=[]
|
self.flags_mm=[]
|
||||||
|
self.flags_xx_version=1999
|
||||||
|
self.flags_cc_version=1989
|
||||||
# sources list:
|
# sources list:
|
||||||
self.src=[]
|
self.src=[]
|
||||||
self.path=[]
|
self.path=[]
|
||||||
@@ -55,6 +66,8 @@ class HeritageList:
|
|||||||
self.flags_ld=[]
|
self.flags_ld=[]
|
||||||
self.flags_cc=[]
|
self.flags_cc=[]
|
||||||
self.flags_xx=[]
|
self.flags_xx=[]
|
||||||
|
self.flags_xx_version=1999
|
||||||
|
self.flags_xx_version=1989
|
||||||
self.flags_m=[]
|
self.flags_m=[]
|
||||||
self.flags_mm=[]
|
self.flags_mm=[]
|
||||||
# sources list:
|
# sources list:
|
||||||
@@ -96,7 +109,10 @@ class HeritageList:
|
|||||||
append_to_list(self.flags_mm, element.flags_mm)
|
append_to_list(self.flags_mm, element.flags_mm)
|
||||||
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 self.flags_xx_version < element.flags_xx_version:
|
||||||
|
self.flags_xx_version = element.flags_xx_version
|
||||||
|
if self.flags_cc_version < element.flags_cc_version:
|
||||||
|
self.flags_cc_version = element.flags_cc_version
|
||||||
|
|
||||||
|
|
||||||
class heritage:
|
class heritage:
|
||||||
@@ -108,6 +124,8 @@ class heritage:
|
|||||||
self.flags_ld=[]
|
self.flags_ld=[]
|
||||||
self.flags_cc=[]
|
self.flags_cc=[]
|
||||||
self.flags_xx=[]
|
self.flags_xx=[]
|
||||||
|
self.flags_xx_version=1999
|
||||||
|
self.flags_cc_version=1989
|
||||||
self.flags_m=[]
|
self.flags_m=[]
|
||||||
self.flags_mm=[]
|
self.flags_mm=[]
|
||||||
# sources list:
|
# sources list:
|
||||||
@@ -119,13 +137,18 @@ class heritage:
|
|||||||
if type(module) != type(None):
|
if type(module) != type(None):
|
||||||
# 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 = module.depends
|
self.depends = copy.deepcopy(module.depends)
|
||||||
self.flags_ld = module.export_flags_ld
|
self.flags_ld = module.export_flags_ld
|
||||||
self.flags_cc = module.export_flags_cc
|
self.flags_cc = module.export_flags_cc
|
||||||
self.flags_xx = module.export_flags_xx
|
self.flags_xx = module.export_flags_xx
|
||||||
self.flags_m = module.export_flags_m
|
self.flags_m = module.export_flags_m
|
||||||
self.flags_mm = module.export_flags_mm
|
self.flags_mm = module.export_flags_mm
|
||||||
self.path = module.export_path
|
self.path = module.export_path
|
||||||
|
self.flags_xx_version = module.xx_version_api
|
||||||
|
self.flags_cc_version = module.cc_version_api
|
||||||
|
|
||||||
|
def add_depends(self, depend):
|
||||||
|
self.depends.append(depend)
|
||||||
|
|
||||||
def add_flag_LD(self, list):
|
def add_flag_LD(self, list):
|
||||||
append_to_list(self.flags_ld, list)
|
append_to_list(self.flags_ld, list)
|
||||||
@@ -164,3 +187,9 @@ class heritage:
|
|||||||
self.add_flag_MM(other.flags_mm)
|
self.add_flag_MM(other.flags_mm)
|
||||||
self.add_import_path(other.path)
|
self.add_import_path(other.path)
|
||||||
self.add_sources(other.src)
|
self.add_sources(other.src)
|
||||||
|
if self.flags_xx_version < module.xx_version_api:
|
||||||
|
self.flags_xx_version = module.xx_version_api
|
||||||
|
if self.flags_cc_version < module.cc_version_api:
|
||||||
|
self.flags_cc_version = module.cc_version_api
|
||||||
|
|
||||||
|
|
||||||
|
19
lutinHost.py
19
lutinHost.py
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import platform
|
import platform
|
||||||
import sys
|
import sys
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
@@ -13,8 +21,13 @@ elif platform.system() == "Darwin":
|
|||||||
else:
|
else:
|
||||||
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
|
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
|
||||||
|
|
||||||
debug.debug(" host.OS = " + OS)
|
debug.debug("host.OS = " + OS)
|
||||||
|
|
||||||
|
|
||||||
OS64BITS = sys.maxsize > 2**32
|
if sys.maxsize > 2**32:
|
||||||
OS32BITS = OS64BITS==False
|
BUS_SIZE = 64
|
||||||
|
else:
|
||||||
|
BUS_SIZE = 32
|
||||||
|
|
||||||
|
debug.debug("host.BUS_SIZE = " + str(BUS_SIZE))
|
||||||
|
|
||||||
|
@@ -1,15 +1,27 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTools as tools
|
import lutinTools as tools
|
||||||
import platform
|
import platform
|
||||||
import os
|
import os
|
||||||
import lutinMultiprocess
|
import lutinMultiprocess
|
||||||
import lutinDepend as dependency
|
import lutinDepend as dependency
|
||||||
|
enableResizeImage = True
|
||||||
if platform.system() == "Darwin":
|
try:
|
||||||
import CoreGraphics
|
if platform.system() == "Darwin":
|
||||||
else:
|
import CoreGraphics
|
||||||
from PIL import Image
|
else:
|
||||||
|
from PIL import Image
|
||||||
|
except:
|
||||||
|
enableResizeImage = False
|
||||||
|
debug.warning("Missing python tools : CoreGraphics (MacOs) or PIL")
|
||||||
|
|
||||||
def get_pow_2_multiple(size):
|
def get_pow_2_multiple(size):
|
||||||
base = 2
|
base = 2
|
||||||
@@ -22,6 +34,8 @@ def get_pow_2_multiple(size):
|
|||||||
# check if time change
|
# check if time change
|
||||||
# check if command line change
|
# check if command line change
|
||||||
def resize(srcFile, destFile, x, y, cmd_file=None):
|
def resize(srcFile, destFile, x, y, cmd_file=None):
|
||||||
|
if enableResizeImage == False:
|
||||||
|
return
|
||||||
if os.path.exists(srcFile) == False:
|
if os.path.exists(srcFile) == False:
|
||||||
debug.error("Request a resize an image that does not existed : '" + srcFile + "'")
|
debug.error("Request a resize an image that does not existed : '" + srcFile + "'")
|
||||||
cmd_line = "resize Image : " + srcFile + " ==> " + destFile + " newSize=(" + str(x) + "x" + str(y) + ")"
|
cmd_line = "resize Image : " + srcFile + " ==> " + destFile + " newSize=(" + str(x) + "x" + str(y) + ")"
|
||||||
|
138
lutinModule.py
138
lutinModule.py
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import inspect
|
import inspect
|
||||||
@@ -25,6 +33,7 @@ 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)
|
||||||
self.originFile=''
|
self.originFile=''
|
||||||
self.originFolder=''
|
self.originFolder=''
|
||||||
# type of the module:
|
# type of the module:
|
||||||
@@ -33,6 +42,9 @@ class Module:
|
|||||||
self.name=moduleName
|
self.name=moduleName
|
||||||
# Dependency list:
|
# Dependency list:
|
||||||
self.depends = []
|
self.depends = []
|
||||||
|
# Dependency list (optionnal module):
|
||||||
|
self.depends_optionnal = []
|
||||||
|
self.depends_find = []
|
||||||
# Documentation list:
|
# Documentation list:
|
||||||
self.documentation = None
|
self.documentation = None
|
||||||
# export PATH
|
# export PATH
|
||||||
@@ -58,6 +70,11 @@ class Module:
|
|||||||
self.files = []
|
self.files = []
|
||||||
self.folders = []
|
self.folders = []
|
||||||
self.isbuild = False
|
self.isbuild = False
|
||||||
|
# CPP version:
|
||||||
|
self.xx_version = 1999
|
||||||
|
self.xx_version_api = 1999
|
||||||
|
self.cc_version = 1989
|
||||||
|
self.cc_version_api = 1989
|
||||||
## end of basic INIT ...
|
## end of basic INIT ...
|
||||||
if moduleType == 'BINARY' \
|
if moduleType == 'BINARY' \
|
||||||
or moduleType == 'LIBRARY' \
|
or moduleType == 'LIBRARY' \
|
||||||
@@ -91,7 +108,7 @@ class Module:
|
|||||||
"RIGHT" : [],
|
"RIGHT" : [],
|
||||||
"ADMOD_POSITION" : "top"
|
"ADMOD_POSITION" : "top"
|
||||||
}
|
}
|
||||||
|
self.subHeritageList = 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)
|
||||||
@@ -101,7 +118,7 @@ class Module:
|
|||||||
"-Wall",
|
"-Wall",
|
||||||
"-Wsign-compare",
|
"-Wsign-compare",
|
||||||
"-Wreturn-type",
|
"-Wreturn-type",
|
||||||
"-Wint-to-pointer-cast",
|
#"-Wint-to-pointer-cast",
|
||||||
"-Wno-write-strings",
|
"-Wno-write-strings",
|
||||||
"-Woverloaded-virtual",
|
"-Woverloaded-virtual",
|
||||||
"-Wnon-virtual-dtor",
|
"-Wnon-virtual-dtor",
|
||||||
@@ -125,6 +142,17 @@ class Module:
|
|||||||
##
|
##
|
||||||
def compile_mm_to_o(self, file, binary, target, depancy):
|
def compile_mm_to_o(self, file, binary, target, depancy):
|
||||||
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
||||||
|
xx_version = max(self.xx_version, depancy.flags_xx_version)
|
||||||
|
if xx_version == 2014:
|
||||||
|
debug.error("not supported flags for X14 ...");
|
||||||
|
local_xx_version_flags=["-std=c++14", "-D__CPP_VERSION__=2014"]
|
||||||
|
elif xx_version == 2011:
|
||||||
|
local_xx_version_flags=["-std=c++11", "-D__CPP_VERSION__=2011"]
|
||||||
|
elif xx_version == 2003:
|
||||||
|
local_xx_version_flags=["-std=c++03", "-D__CPP_VERSION__=2003"]
|
||||||
|
else:
|
||||||
|
local_xx_version_flags=["-D__CPP_VERSION__=1999"]
|
||||||
|
|
||||||
# create the command line befor requesting start:
|
# create the command line befor requesting start:
|
||||||
cmdLine=lutinTools.list_to_str([
|
cmdLine=lutinTools.list_to_str([
|
||||||
target.xx,
|
target.xx,
|
||||||
@@ -135,6 +163,7 @@ class Module:
|
|||||||
lutinTools.add_prefix("-I",self.export_path),
|
lutinTools.add_prefix("-I",self.export_path),
|
||||||
lutinTools.add_prefix("-I",self.local_path),
|
lutinTools.add_prefix("-I",self.local_path),
|
||||||
lutinTools.add_prefix("-I",depancy.path),
|
lutinTools.add_prefix("-I",depancy.path),
|
||||||
|
local_xx_version_flags,
|
||||||
target.global_flags_cc,
|
target.global_flags_cc,
|
||||||
target.global_flags_mm,
|
target.global_flags_mm,
|
||||||
depancy.flags_cc,
|
depancy.flags_cc,
|
||||||
@@ -160,6 +189,16 @@ class Module:
|
|||||||
##
|
##
|
||||||
def compile_m_to_o(self, file, binary, target, depancy):
|
def compile_m_to_o(self, file, binary, target, depancy):
|
||||||
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
||||||
|
cc_version = max(self.cc_version, depancy.flags_cc_version)
|
||||||
|
if cc_version == 2011:
|
||||||
|
local_cc_version_flags=["-std=c11", "-D__C_VERSION__=2011"]
|
||||||
|
elif cc_version == 1999:
|
||||||
|
local_cc_version_flags=["-std=c99", "-D__C_VERSION__=1999"]
|
||||||
|
elif cc_version == 1990:
|
||||||
|
local_cc_version_flags=["-std=c90", "-D__C_VERSION__=1990"]
|
||||||
|
else:
|
||||||
|
local_cc_version_flags=["-std=c89", "-D__C_VERSION__=1989"]
|
||||||
|
|
||||||
# create the command line befor requesting start:
|
# create the command line befor requesting start:
|
||||||
cmdLine=lutinTools.list_to_str([
|
cmdLine=lutinTools.list_to_str([
|
||||||
target.cc,
|
target.cc,
|
||||||
@@ -170,6 +209,7 @@ class Module:
|
|||||||
lutinTools.add_prefix("-I",self.export_path),
|
lutinTools.add_prefix("-I",self.export_path),
|
||||||
lutinTools.add_prefix("-I",self.local_path),
|
lutinTools.add_prefix("-I",self.local_path),
|
||||||
lutinTools.add_prefix("-I",depancy.path),
|
lutinTools.add_prefix("-I",depancy.path),
|
||||||
|
local_cc_version_flags,
|
||||||
target.global_flags_cc,
|
target.global_flags_cc,
|
||||||
target.global_flags_m,
|
target.global_flags_m,
|
||||||
depancy.flags_cc,
|
depancy.flags_cc,
|
||||||
@@ -195,6 +235,17 @@ class Module:
|
|||||||
##
|
##
|
||||||
def compile_xx_to_o(self, file, binary, target, depancy):
|
def compile_xx_to_o(self, file, binary, target, depancy):
|
||||||
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
||||||
|
xx_version = max(self.xx_version, depancy.flags_xx_version)
|
||||||
|
if xx_version == 2014:
|
||||||
|
debug.error("not supported flags for X14 ...");
|
||||||
|
local_xx_version_flags=["-std=c++14", "-D__CPP_VERSION__=2014"]
|
||||||
|
elif xx_version == 2011:
|
||||||
|
local_xx_version_flags=["-std=c++11", "-D__CPP_VERSION__=2011"]
|
||||||
|
elif xx_version == 2003:
|
||||||
|
local_xx_version_flags=["-std=c++03", "-D__CPP_VERSION__=2003"]
|
||||||
|
else:
|
||||||
|
local_xx_version_flags=["-D__CPP_VERSION__=1999"]
|
||||||
|
|
||||||
# create the command line befor requesting start:
|
# create the command line befor requesting start:
|
||||||
cmdLine=lutinTools.list_to_str([
|
cmdLine=lutinTools.list_to_str([
|
||||||
target.xx,
|
target.xx,
|
||||||
@@ -205,6 +256,7 @@ class Module:
|
|||||||
lutinTools.add_prefix("-I",self.export_path),
|
lutinTools.add_prefix("-I",self.export_path),
|
||||||
lutinTools.add_prefix("-I",self.local_path),
|
lutinTools.add_prefix("-I",self.local_path),
|
||||||
lutinTools.add_prefix("-I",depancy.path),
|
lutinTools.add_prefix("-I",depancy.path),
|
||||||
|
local_xx_version_flags,
|
||||||
target.global_flags_cc,
|
target.global_flags_cc,
|
||||||
target.global_flags_xx,
|
target.global_flags_xx,
|
||||||
depancy.flags_cc,
|
depancy.flags_cc,
|
||||||
@@ -229,6 +281,16 @@ class Module:
|
|||||||
##
|
##
|
||||||
def compile_cc_to_o(self, file, binary, target, depancy):
|
def compile_cc_to_o(self, file, binary, target, depancy):
|
||||||
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
file_src, file_dst, file_depend, file_cmd = target.file_generate_object(binary,self.name,self.originFolder,file)
|
||||||
|
cc_version = max(self.cc_version, depancy.flags_cc_version)
|
||||||
|
if cc_version == 2011:
|
||||||
|
local_cc_version_flags=["-std=c11", "-D__C_VERSION__=2011"]
|
||||||
|
elif cc_version == 1999:
|
||||||
|
local_cc_version_flags=["-std=c99", "-D__C_VERSION__=1999"]
|
||||||
|
elif cc_version == 1990:
|
||||||
|
local_cc_version_flags=["-std=c90", "-D__C_VERSION__=1990"]
|
||||||
|
else:
|
||||||
|
local_cc_version_flags=["-std=c89", "-D__C_VERSION__=1989"]
|
||||||
|
|
||||||
# create the command line befor requesting start:
|
# create the command line befor requesting start:
|
||||||
cmdLine=lutinTools.list_to_str([
|
cmdLine=lutinTools.list_to_str([
|
||||||
target.cc,
|
target.cc,
|
||||||
@@ -239,6 +301,7 @@ class Module:
|
|||||||
lutinTools.add_prefix("-I",self.export_path),
|
lutinTools.add_prefix("-I",self.export_path),
|
||||||
lutinTools.add_prefix("-I",self.local_path),
|
lutinTools.add_prefix("-I",self.local_path),
|
||||||
lutinTools.add_prefix("-I",depancy.path),
|
lutinTools.add_prefix("-I",depancy.path),
|
||||||
|
local_cc_version_flags,
|
||||||
target.global_flags_cc,
|
target.global_flags_cc,
|
||||||
depancy.flags_cc,
|
depancy.flags_cc,
|
||||||
self.flags_cc,
|
self.flags_cc,
|
||||||
@@ -318,7 +381,7 @@ class Module:
|
|||||||
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", libName, "==>", file_dst)
|
||||||
lutinMultiprocess.run_command(cmdLine)
|
lutinMultiprocess.run_command(cmdLine)
|
||||||
if "release"==target.buildMode \
|
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);
|
||||||
@@ -360,7 +423,7 @@ class Module:
|
|||||||
debug.print_element("Executable", self.name, "==>", file_dst)
|
debug.print_element("Executable", self.name, "==>", file_dst)
|
||||||
|
|
||||||
lutinMultiprocess.run_command(cmdLine)
|
lutinMultiprocess.run_command(cmdLine)
|
||||||
if "release"==target.buildMode \
|
if "release"==target.config["mode"] \
|
||||||
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);
|
||||||
@@ -420,13 +483,15 @@ class Module:
|
|||||||
##
|
##
|
||||||
def folders_to_staging(self, binaryName, target):
|
def folders_to_staging(self, binaryName, target):
|
||||||
for source, destination in self.folders:
|
for source, destination in self.folders:
|
||||||
debug.verbose("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.originFolder + "/" + source, destination)
|
||||||
|
|
||||||
# call here to build the module
|
# call here to build the module
|
||||||
def build(self, target, packageName):
|
def build(self, target, packageName):
|
||||||
# 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:
|
||||||
|
self.localHeritage = heritage.heritage(self)
|
||||||
return self.subHeritageList
|
return self.subHeritageList
|
||||||
# create the packege heritage
|
# create the packege heritage
|
||||||
self.localHeritage = heritage.heritage(self)
|
self.localHeritage = heritage.heritage(self)
|
||||||
@@ -440,9 +505,22 @@ class Module:
|
|||||||
# TODO : Set it better ...
|
# TODO : Set it better ...
|
||||||
None
|
None
|
||||||
|
|
||||||
# build dependency befor
|
# build dependency before
|
||||||
listSubFileNeededTobuild = []
|
listSubFileNeededTobuild = []
|
||||||
self.subHeritageList = heritage.HeritageList()
|
self.subHeritageList = heritage.HeritageList()
|
||||||
|
# optionnal dependency :
|
||||||
|
for dep, option, export in self.depends_optionnal:
|
||||||
|
inheritList, isBuilt = target.build_optionnal(dep, packageName)
|
||||||
|
if isBuilt == True:
|
||||||
|
self.localHeritage.add_depends(dep);
|
||||||
|
# TODO : Add optionnal Flags ...
|
||||||
|
# ==> do it really better ...
|
||||||
|
if export == False:
|
||||||
|
self.compile_flags_CC("-D"+option);
|
||||||
|
else:
|
||||||
|
self.add_export_flag_CC("-D"+option);
|
||||||
|
# add at the heritage list :
|
||||||
|
self.subHeritageList.add_heritage_list(inheritList)
|
||||||
for dep in self.depends:
|
for dep in self.depends:
|
||||||
inheritList = target.build(dep, packageName)
|
inheritList = target.build(dep, packageName)
|
||||||
# add at the heritage list :
|
# add at the heritage list :
|
||||||
@@ -452,35 +530,26 @@ class Module:
|
|||||||
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]
|
||||||
if fileExt == "c" \
|
if fileExt in ["c", "C"]:
|
||||||
or fileExt == "C":
|
|
||||||
resFile = self.compile_cc_to_o(file, packageName, target, self.subHeritageList)
|
resFile = self.compile_cc_to_o(file, packageName, target, self.subHeritageList)
|
||||||
listSubFileNeededTobuild.append(resFile)
|
listSubFileNeededTobuild.append(resFile)
|
||||||
elif fileExt == "cpp" \
|
elif fileExt in ["cpp", "CPP", "cxx", "CXX", "xx", "XX", "CC", "cc"]:
|
||||||
or fileExt == "CPP" \
|
|
||||||
or fileExt == "cxx" \
|
|
||||||
or fileExt == "CXX" \
|
|
||||||
or fileExt == "xx" \
|
|
||||||
or fileExt == "XX":
|
|
||||||
resFile = self.compile_xx_to_o(file, packageName, target, self.subHeritageList)
|
resFile = self.compile_xx_to_o(file, packageName, target, self.subHeritageList)
|
||||||
listSubFileNeededTobuild.append(resFile)
|
listSubFileNeededTobuild.append(resFile)
|
||||||
elif fileExt == "mm" \
|
elif fileExt in ["mm", "MM"]:
|
||||||
or fileExt == "MM":
|
|
||||||
resFile = self.compile_mm_to_o(file, packageName, target, self.subHeritageList)
|
resFile = self.compile_mm_to_o(file, packageName, target, self.subHeritageList)
|
||||||
listSubFileNeededTobuild.append(resFile)
|
listSubFileNeededTobuild.append(resFile)
|
||||||
elif fileExt == "m" \
|
elif fileExt in ["m", "M"]:
|
||||||
or fileExt == "M":
|
|
||||||
resFile = self.compile_m_to_o(file, packageName, target, self.subHeritageList)
|
resFile = self.compile_m_to_o(file, packageName, target, self.subHeritageList)
|
||||||
listSubFileNeededTobuild.append(resFile)
|
listSubFileNeededTobuild.append(resFile)
|
||||||
else:
|
else:
|
||||||
debug.verbose(" TODO : gcc " + self.originFolder + "/" + file)
|
debug.warning(" UN-SUPPORTED file format: '" + self.originFolder + "/" + file + "'")
|
||||||
# when multiprocess availlable, we need to synchronize here ...
|
# when multiprocess availlable, we need to synchronize here ...
|
||||||
lutinMultiprocess.pool_synchrosize()
|
lutinMultiprocess.pool_synchrosize()
|
||||||
|
|
||||||
# generate end point:
|
# generate end point:
|
||||||
if self.type=='PREBUILD':
|
if self.type=='PREBUILD':
|
||||||
# nothing to add ==> just dependence
|
debug.print_element("Prebuild", self.name, "==>", "find")
|
||||||
None
|
|
||||||
elif self.type=='LIBRARY':
|
elif self.type=='LIBRARY':
|
||||||
resFile = self.link_to_a(listSubFileNeededTobuild, packageName, target, self.subHeritageList)
|
resFile = self.link_to_a(listSubFileNeededTobuild, packageName, target, self.subHeritageList)
|
||||||
self.localHeritage.add_sources(resFile)
|
self.localHeritage.add_sources(resFile)
|
||||||
@@ -566,6 +635,9 @@ class Module:
|
|||||||
def add_module_depend(self, list):
|
def add_module_depend(self, list):
|
||||||
self.append_to_internalList(self.depends, list, True)
|
self.append_to_internalList(self.depends, list, True)
|
||||||
|
|
||||||
|
def add_optionnal_module_depend(self, module_name, compilation_flags="", export=False):
|
||||||
|
self.append_and_check(self.depends_optionnal, [module_name, compilation_flags, export], True)
|
||||||
|
|
||||||
def add_export_path(self, list):
|
def add_export_path(self, list):
|
||||||
self.append_to_internalList(self.export_path, list)
|
self.append_to_internalList(self.export_path, list)
|
||||||
|
|
||||||
@@ -606,6 +678,22 @@ class Module:
|
|||||||
def compile_flags_S(self, list):
|
def compile_flags_S(self, list):
|
||||||
self.append_to_internalList(self.flags_s, list)
|
self.append_to_internalList(self.flags_s, list)
|
||||||
|
|
||||||
|
def compile_version_XX(self, version, same_as_api=True):
|
||||||
|
cpp_version_list = [1999, 2003, 2011, 2014]
|
||||||
|
if version not in cpp_version_list:
|
||||||
|
debug.error("can not select CPP version : " + str(version) + " not in " + str(cpp_version_list))
|
||||||
|
self.xx_version = version
|
||||||
|
if same_as_api == True:
|
||||||
|
self.xx_version_api = self.xx_version
|
||||||
|
|
||||||
|
def compile_version_CC(self, version, same_as_api=True):
|
||||||
|
c_version_list = [1989, 1990, 1999, 2011]
|
||||||
|
if version not in c_version_list:
|
||||||
|
debug.error("can not select C version : " + str(version) + " not in " + str(c_version_list))
|
||||||
|
self.cc_version = version
|
||||||
|
if same_as_api == True:
|
||||||
|
self.cc_version_api = self.cc_version
|
||||||
|
|
||||||
def add_src_file(self, list):
|
def add_src_file(self, list):
|
||||||
self.append_to_internalList(self.src, list, True)
|
self.append_to_internalList(self.src, list, True)
|
||||||
|
|
||||||
@@ -632,6 +720,7 @@ class Module:
|
|||||||
print ' file:"%s"' %self.originFile
|
print ' file:"%s"' %self.originFile
|
||||||
print ' folder:"%s"' %self.originFolder
|
print ' folder:"%s"' %self.originFolder
|
||||||
self.print_list('depends',self.depends)
|
self.print_list('depends',self.depends)
|
||||||
|
self.print_list('depends_optionnal', self.depends_optionnal)
|
||||||
self.print_list('flags_ld',self.flags_ld)
|
self.print_list('flags_ld',self.flags_ld)
|
||||||
self.print_list('flags_cc',self.flags_cc)
|
self.print_list('flags_cc',self.flags_cc)
|
||||||
self.print_list('flags_xx',self.flags_xx)
|
self.print_list('flags_xx',self.flags_xx)
|
||||||
@@ -767,6 +856,13 @@ def import_path(path):
|
|||||||
debug.debug("integrate module: '" + moduleName + "' from '" + os.path.join(root, filename) + "'")
|
debug.debug("integrate module: '" + moduleName + "' from '" + os.path.join(root, filename) + "'")
|
||||||
moduleList.append([moduleName,os.path.join(root, filename)])
|
moduleList.append([moduleName,os.path.join(root, filename)])
|
||||||
|
|
||||||
|
def exist(target, name):
|
||||||
|
global moduleList
|
||||||
|
for mod in moduleList:
|
||||||
|
if mod[0] == name:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def load_module(target, name):
|
def load_module(target, name):
|
||||||
global moduleList
|
global moduleList
|
||||||
for mod in moduleList:
|
for mod in moduleList:
|
||||||
|
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import threading
|
import threading
|
||||||
@@ -8,11 +16,21 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
import lutinTools
|
import lutinTools
|
||||||
import lutinEnv
|
import lutinEnv
|
||||||
|
import shlex
|
||||||
|
|
||||||
queueLock = threading.Lock()
|
queueLock = threading.Lock()
|
||||||
workQueue = Queue.Queue()
|
workQueue = Queue.Queue()
|
||||||
currentThreadWorking = 0
|
currentThreadWorking = 0
|
||||||
threads = []
|
threads = []
|
||||||
|
# To know the first error arrive in the pool ==> to display all the time the same error file when multiple compilation
|
||||||
|
currentIdExecution = 0
|
||||||
|
errorExecution = {
|
||||||
|
"id":-1,
|
||||||
|
"cmd":"",
|
||||||
|
"return":0,
|
||||||
|
"err":"",
|
||||||
|
"out":"",
|
||||||
|
}
|
||||||
|
|
||||||
exitFlag = False # resuest stop of the thread
|
exitFlag = False # resuest stop of the thread
|
||||||
isinit = False # the thread are initialized
|
isinit = False # the thread are initialized
|
||||||
@@ -24,7 +42,6 @@ def store_command(cmdLine, file):
|
|||||||
if file != "" \
|
if file != "" \
|
||||||
and file != None:
|
and file != None:
|
||||||
# Create directory:
|
# Create directory:
|
||||||
debug.warning("lklk " + file)
|
|
||||||
lutinTools.create_directory_of_file(file)
|
lutinTools.create_directory_of_file(file)
|
||||||
# Store the command Line:
|
# Store the command Line:
|
||||||
file2 = open(file, "w")
|
file2 = open(file, "w")
|
||||||
@@ -32,28 +49,86 @@ def store_command(cmdLine, file):
|
|||||||
file2.flush()
|
file2.flush()
|
||||||
file2.close()
|
file2.close()
|
||||||
|
|
||||||
|
##
|
||||||
def run_command(cmdLine, storeCmdLine=""):
|
## @brief Execute the command and ruturn generate data
|
||||||
debug.debug(lutinEnv.print_pretty(cmdLine))
|
##
|
||||||
|
def run_command_direct(cmdLine):
|
||||||
|
# prepare command line:
|
||||||
|
args = shlex.split(cmdLine)
|
||||||
|
debug.verbose("cmd = " + str(args))
|
||||||
try:
|
try:
|
||||||
retcode = subprocess.call(cmdLine, shell=True)
|
# create the subprocess
|
||||||
except OSError as e:
|
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
print >>sys.stderr, "Execution failed:", e
|
except subprocess.CalledProcessError as e:
|
||||||
|
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||||
if retcode != 0:
|
# launch the subprocess:
|
||||||
global errorOccured
|
output, err = p.communicate()
|
||||||
|
# Check error :
|
||||||
|
if p.returncode == 0:
|
||||||
|
if output == None:
|
||||||
|
return err[:-1];
|
||||||
|
return output[:-1];
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def run_command(cmdLine, storeCmdLine="", buildId=-1, file=""):
|
||||||
|
global errorOccured
|
||||||
|
global exitFlag
|
||||||
|
global currentIdExecution
|
||||||
|
# prepare command line:
|
||||||
|
args = shlex.split(cmdLine)
|
||||||
|
debug.verbose("cmd = " + str(args))
|
||||||
|
try:
|
||||||
|
# create the subprocess
|
||||||
|
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
debug.error("subprocess.CalledProcessError : TODO ...")
|
||||||
|
# launch the subprocess:
|
||||||
|
output, err = p.communicate()
|
||||||
|
# Check error :
|
||||||
|
if p.returncode == 0:
|
||||||
|
debug.debug(lutinEnv.print_pretty(cmdLine))
|
||||||
|
queueLock.acquire()
|
||||||
|
# TODO : Print the output all the time .... ==> to show warnings ...
|
||||||
|
if buildId >= 0 and (output != "" or err != ""):
|
||||||
|
debug.warning("output in subprocess compiling: '" + file + "'")
|
||||||
|
if output != "":
|
||||||
|
debug.print_compilator(output)
|
||||||
|
if err != "":
|
||||||
|
debug.print_compilator(err)
|
||||||
|
queueLock.release()
|
||||||
|
else:
|
||||||
errorOccured = True
|
errorOccured = True
|
||||||
global exitFlag
|
|
||||||
exitFlag = True
|
exitFlag = True
|
||||||
if retcode == 2:
|
# if No ID : Not in a multiprocess mode ==> just stop here
|
||||||
debug.error("can not compile file ... [keyboard interrrupt]")
|
if buildId < 0:
|
||||||
|
debug.debug(lutinEnv.print_pretty(cmdLine), force=True)
|
||||||
|
debug.print_compilator(output)
|
||||||
|
debug.print_compilator(err)
|
||||||
|
if p.returncode == 2:
|
||||||
|
debug.error("can not compile file ... [keyboard interrrupt]")
|
||||||
|
else:
|
||||||
|
debug.error("can not compile file ... ret : " + str(p.returncode))
|
||||||
else:
|
else:
|
||||||
debug.error("can not compile file ... ret : " + str(retcode))
|
# in multiprocess interface
|
||||||
|
queueLock.acquire()
|
||||||
|
# if an other write an error before, check if the current process is started before ==> then is the first error
|
||||||
|
if errorExecution["id"] >= buildId:
|
||||||
|
# nothing to do ...
|
||||||
|
queueLock.release()
|
||||||
|
return;
|
||||||
|
errorExecution["id"] = buildId
|
||||||
|
errorExecution["cmd"] = cmdLine
|
||||||
|
errorExecution["return"] = p.returncode
|
||||||
|
errorExecution["err"] = err,
|
||||||
|
errorExecution["out"] = output,
|
||||||
|
queueLock.release()
|
||||||
|
# not write the command file...
|
||||||
return
|
return
|
||||||
|
debug.verbose("done 3")
|
||||||
# write cmd line only after to prevent errors ...
|
# write cmd line only after to prevent errors ...
|
||||||
store_command(cmdLine, storeCmdLine)
|
store_command(cmdLine, storeCmdLine)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -69,7 +144,7 @@ class myThread(threading.Thread):
|
|||||||
global exitFlag
|
global exitFlag
|
||||||
global currentThreadWorking
|
global currentThreadWorking
|
||||||
workingSet = False
|
workingSet = False
|
||||||
while False==exitFlag:
|
while exitFlag == False:
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
if not self.queue.empty():
|
if not self.queue.empty():
|
||||||
if workingSet==False:
|
if workingSet==False:
|
||||||
@@ -82,8 +157,8 @@ class myThread(threading.Thread):
|
|||||||
comment = data[2]
|
comment = data[2]
|
||||||
cmdLine = data[1]
|
cmdLine = data[1]
|
||||||
cmdStoreFile = data[3]
|
cmdStoreFile = data[3]
|
||||||
debug.print_element( "[" + str(self.threadID) + "] " + comment[0], comment[1], comment[2], comment[3])
|
debug.print_element( "[" + str(data[4]) + "][" + str(self.threadID) + "] " + comment[0], comment[1], comment[2], comment[3])
|
||||||
run_command(cmdLine, cmdStoreFile)
|
run_command(cmdLine, cmdStoreFile, buildId=data[4], file=comment[3])
|
||||||
else:
|
else:
|
||||||
debug.warning("unknow request command : " + data[0])
|
debug.warning("unknow request command : " + data[0])
|
||||||
else:
|
else:
|
||||||
@@ -139,21 +214,24 @@ def un_init():
|
|||||||
|
|
||||||
|
|
||||||
def run_in_pool(cmdLine, comment, storeCmdLine=""):
|
def run_in_pool(cmdLine, comment, storeCmdLine=""):
|
||||||
|
global currentIdExecution
|
||||||
if processorAvaillable <= 1:
|
if processorAvaillable <= 1:
|
||||||
debug.print_element(comment[0], comment[1], comment[2], comment[3])
|
debug.print_element(comment[0], comment[1], comment[2], comment[3])
|
||||||
run_command(cmdLine, storeCmdLine)
|
run_command(cmdLine, storeCmdLine, file=comment[3])
|
||||||
return
|
return
|
||||||
# multithreaded mode
|
# multithreaded mode
|
||||||
init()
|
init()
|
||||||
# Fill the queue
|
# Fill the queue
|
||||||
queueLock.acquire()
|
queueLock.acquire()
|
||||||
debug.verbose("add : in pool cmdLine")
|
debug.verbose("add : in pool cmdLine")
|
||||||
workQueue.put(["cmdLine", cmdLine, comment, storeCmdLine])
|
workQueue.put(["cmdLine", cmdLine, comment, storeCmdLine, currentIdExecution])
|
||||||
|
currentIdExecution +=1;
|
||||||
queueLock.release()
|
queueLock.release()
|
||||||
|
|
||||||
|
|
||||||
def pool_synchrosize():
|
def pool_synchrosize():
|
||||||
global errorOccured
|
global errorOccured
|
||||||
|
global errorExecution
|
||||||
if processorAvaillable <= 1:
|
if processorAvaillable <= 1:
|
||||||
#in this case : nothing to synchronise
|
#in this case : nothing to synchronise
|
||||||
return
|
return
|
||||||
@@ -172,7 +250,17 @@ def pool_synchrosize():
|
|||||||
if False==errorOccured:
|
if False==errorOccured:
|
||||||
debug.verbose("queue is empty")
|
debug.verbose("queue is empty")
|
||||||
else:
|
else:
|
||||||
debug.debug("Thread return with error ... ==> stop all the pool")
|
|
||||||
un_init()
|
un_init()
|
||||||
debug.error("Pool error occured ...")
|
debug.debug("Thread return with error ... ==> stop all the pool")
|
||||||
|
if errorExecution["id"] == -1:
|
||||||
|
debug.error("Pool error occured ... (No return information on Pool)")
|
||||||
|
return
|
||||||
|
debug.error("Error in an pool element : [" + str(errorExecution["id"]) + "]", crash=False)
|
||||||
|
debug.debug(lutinEnv.print_pretty(errorExecution["cmd"]), force=True)
|
||||||
|
debug.print_compilator(str(errorExecution["out"][0]))
|
||||||
|
debug.print_compilator(str(errorExecution["err"][0]))
|
||||||
|
if errorExecution["return"] == 2:
|
||||||
|
debug.error("can not compile file ... [keyboard interrrupt]")
|
||||||
|
else:
|
||||||
|
debug.error("can not compile file ... return value : " + str(errorExecution["return"]))
|
||||||
|
|
||||||
|
163
lutinSystem.py
Normal file
163
lutinSystem.py
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import inspect
|
||||||
|
import fnmatch
|
||||||
|
import lutinDebug as debug
|
||||||
|
import datetime
|
||||||
|
import lutinTools
|
||||||
|
import lutinModule as module
|
||||||
|
import lutinImage
|
||||||
|
import lutinHost
|
||||||
|
|
||||||
|
class System:
|
||||||
|
def __init__(self):
|
||||||
|
self.valid=False;
|
||||||
|
self.help="";
|
||||||
|
self.include_cc=[]
|
||||||
|
self.export_flags_cc=[]
|
||||||
|
self.export_flags_xx=[]
|
||||||
|
self.export_flags_mm=[]
|
||||||
|
self.export_flags_m=[]
|
||||||
|
self.export_flags_ar=[]
|
||||||
|
self.export_flags_ld=[]
|
||||||
|
self.export_flags_ld_shared=[]
|
||||||
|
self.export_libs_ld=[]
|
||||||
|
self.export_libs_ld_shared=[]
|
||||||
|
|
||||||
|
def append_and_check(self, listout, newElement, order):
|
||||||
|
for element in listout:
|
||||||
|
if element==newElement:
|
||||||
|
return
|
||||||
|
listout.append(newElement)
|
||||||
|
if True==order:
|
||||||
|
listout.sort()
|
||||||
|
|
||||||
|
def append_to_internalList(self, listout, list, order=False):
|
||||||
|
if type(list) == type(str()):
|
||||||
|
self.append_and_check(listout, list, order)
|
||||||
|
else:
|
||||||
|
# mulyiple imput in the list ...
|
||||||
|
for elem in list:
|
||||||
|
self.append_and_check(listout, elem, order)
|
||||||
|
|
||||||
|
def add_export_flag_LD(self, list):
|
||||||
|
self.append_to_internalList(self.export_flags_ld, list)
|
||||||
|
|
||||||
|
def add_export_flag_CC(self, list):
|
||||||
|
self.append_to_internalList(self.export_flags_cc, list)
|
||||||
|
|
||||||
|
def add_export_flag_XX(self, list):
|
||||||
|
self.append_to_internalList(self.export_flags_xx, list)
|
||||||
|
|
||||||
|
def add_export_flag_M(self, list):
|
||||||
|
self.append_to_internalList(self.export_flags_m, list)
|
||||||
|
|
||||||
|
def add_export_flag_MM(self, list):
|
||||||
|
self.append_to_internalList(self.export_flags_mm, list)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def createModuleFromSystem(target, dict):
|
||||||
|
myModule = module.Module(dict["path"], dict["name"], 'PREBUILD')
|
||||||
|
|
||||||
|
myModule.add_export_flag_CC(dict["system"].export_flags_cc)
|
||||||
|
myModule.add_export_flag_LD(dict["system"].export_flags_ld)
|
||||||
|
myModule.add_export_flag_XX(dict["system"].export_flags_xx)
|
||||||
|
myModule.add_export_flag_M(dict["system"].export_flags_m)
|
||||||
|
myModule.add_export_flag_MM(dict["system"].export_flags_mm)
|
||||||
|
# add the currrent module at the
|
||||||
|
return myModule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Dictionnaire of Target name
|
||||||
|
# inside table of ["Name of the lib", "path of the lib", boolean loaded, module loaded]
|
||||||
|
systemList={}
|
||||||
|
__startSystemName="lutinSystem_"
|
||||||
|
|
||||||
|
|
||||||
|
def import_path(path):
|
||||||
|
global targetList
|
||||||
|
matches = []
|
||||||
|
debug.debug('Start find sub File : "%s"' %path)
|
||||||
|
for root, dirnames, filenames in os.walk(path):
|
||||||
|
tmpList = fnmatch.filter(filenames, __startSystemName + "*.py")
|
||||||
|
# Import the module :
|
||||||
|
for filename in tmpList:
|
||||||
|
debug.verbose(' Find a file : "%s"' %os.path.join(root, filename))
|
||||||
|
sys.path.append(os.path.dirname(os.path.join(root, filename)) )
|
||||||
|
systemName = filename.replace('.py', '')
|
||||||
|
systemName = systemName.replace(__startSystemName, '')
|
||||||
|
targetType, systemName = systemName.split('_')
|
||||||
|
debug.debug("integrate system: '" + targetType + "':'" + systemName + "' from '" + os.path.join(root, filename) + "'")
|
||||||
|
if targetType in systemList:
|
||||||
|
systemList[targetType].append({"name":systemName,
|
||||||
|
"path":os.path.join(root, filename),
|
||||||
|
"system":None,
|
||||||
|
"loaded":False,
|
||||||
|
"exist":False,
|
||||||
|
"module":None})
|
||||||
|
else:
|
||||||
|
systemList[targetType] = [{"name":systemName,
|
||||||
|
"path":os.path.join(root, filename),
|
||||||
|
"system":None,
|
||||||
|
"loaded":False,
|
||||||
|
"exist":False,
|
||||||
|
"module":None}]
|
||||||
|
|
||||||
|
def display():
|
||||||
|
global systemList
|
||||||
|
for elementName in systemList:
|
||||||
|
debug.info("integrate system: '" + elementName +"'")
|
||||||
|
for data in systemList[elementName]:
|
||||||
|
debug.info(" '" + data["name"] +"' in " + data["path"])
|
||||||
|
|
||||||
|
|
||||||
|
def exist(lib_name, target_name) :
|
||||||
|
global systemList
|
||||||
|
if target_name not in systemList:
|
||||||
|
return False
|
||||||
|
for data in systemList[target_name]:
|
||||||
|
if data["name"] == lib_name:
|
||||||
|
# we find it in the List ==> need to check if it is present in the system :
|
||||||
|
if data["loaded"] == False:
|
||||||
|
debug.verbose("add to path: '" + os.path.dirname(data["path"]) + "'")
|
||||||
|
sys.path.append(os.path.dirname(data["path"]))
|
||||||
|
debug.verbose("import system : '" + data["name"] + "'")
|
||||||
|
theSystem = __import__(__startSystemName + target_name + "_" + data["name"])
|
||||||
|
#create the system module
|
||||||
|
try:
|
||||||
|
data["system"] = theSystem.System()
|
||||||
|
data["exist"] = data["system"].valid
|
||||||
|
except:
|
||||||
|
debug.debug("Not find: '" + data["name"] + "'")
|
||||||
|
return data["exist"]
|
||||||
|
return False
|
||||||
|
|
||||||
|
def load(target, lib_name, target_name):
|
||||||
|
global systemList
|
||||||
|
if target_name not in systemList:
|
||||||
|
debug.error("you must call this function after checking of the system exist() !1!")
|
||||||
|
for data in systemList[target_name]:
|
||||||
|
if data["name"] == lib_name:
|
||||||
|
if data["exist"] == False:
|
||||||
|
debug.error("you must call this function after checking of the system exist() !2!")
|
||||||
|
if data["module"] == None:
|
||||||
|
# create a module from the system interface...
|
||||||
|
data["module"] = createModuleFromSystem(target, data)
|
||||||
|
data["loaded"] = True
|
||||||
|
target.add_module(data["module"])
|
||||||
|
return
|
||||||
|
|
346
lutinTarget.py
346
lutinTarget.py
@@ -1,50 +1,69 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import inspect
|
||||||
|
import fnmatch
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
|
import lutinHeritage as heritage
|
||||||
import datetime
|
import datetime
|
||||||
import lutinTools
|
import lutinTools
|
||||||
import lutinModule
|
import lutinModule
|
||||||
|
import lutinSystem
|
||||||
import lutinImage
|
import lutinImage
|
||||||
|
import lutinHost
|
||||||
|
import lutinMultiprocess as multiprocess
|
||||||
|
|
||||||
class Target:
|
class Target:
|
||||||
def __init__(self, name, typeCompilator, debugMode, generatePackage, arch, cross, sumulator=False):
|
def __init__(self, name, config, arch):
|
||||||
|
self.config = config
|
||||||
|
|
||||||
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
self.selectArch = config["arch"]; # TODO : Remove THIS ...
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
self.selectBus = config["bus-size"]; # TODO : Remove THIS ...
|
||||||
|
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
debug.error("system error ==> must generate the default 'bus-size' config")
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
debug.error("system error ==> must generate the default 'bus-size' config")
|
||||||
|
|
||||||
|
debug.debug("config=" + str(config))
|
||||||
if arch != "":
|
if arch != "":
|
||||||
self.arch = "-arch " + arch
|
self.arch = "-arch " + arch
|
||||||
else:
|
else:
|
||||||
self.arch = ""
|
self.arch = ""
|
||||||
self.sumulator = sumulator
|
|
||||||
self.cross = cross
|
# todo : remove this :
|
||||||
|
self.sumulator = config["simulation"]
|
||||||
self.name=name
|
self.name=name
|
||||||
self.endGeneratePackage = generatePackage
|
self.endGeneratePackage = config["generate-package"]
|
||||||
debug.info("=================================");
|
debug.info("=================================");
|
||||||
debug.info("== Target='" + self.name + "'");
|
debug.info("== Target='" + self.name + "' " + config["bus-size"] + " bits for arch '" + config["arch"] + "'");
|
||||||
debug.info("=================================");
|
debug.info("=================================");
|
||||||
self.ar=self.cross + "ar"
|
|
||||||
self.ranlib=self.cross + "ranlib"
|
self.set_cross_base()
|
||||||
if typeCompilator == "clang":
|
|
||||||
self.cc=self.cross + "clang"
|
|
||||||
self.xx=self.cross + "clang++"
|
|
||||||
#self.ar=self.cross + "llvm-ar"
|
|
||||||
#self.ranlib="ls"
|
|
||||||
else:
|
|
||||||
self.cc=self.cross + "gcc"
|
|
||||||
self.xx=self.cross + "g++"
|
|
||||||
#self.ar=self.cross + "ar"
|
|
||||||
#self.ranlib=self.cross + "ranlib"
|
|
||||||
self.ld=self.cross + "ld"
|
|
||||||
self.nm=self.cross + "nm"
|
|
||||||
self.strip=self.cross + "strip"
|
|
||||||
self.dlltool=self.cross + "dlltool"
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Target global variables.
|
# Target global variables.
|
||||||
###############################################################################
|
###############################################################################
|
||||||
self.global_include_cc=[]
|
self.global_include_cc=[]
|
||||||
self.global_flags_cc=['-D__TARGET_OS__'+self.name,
|
self.global_flags_cc=['-D__TARGET_OS__'+self.name,
|
||||||
|
'-D__TARGET_ARCH__'+self.selectArch,
|
||||||
|
'-D__TARGET_ADDR__'+self.selectBus + 'BITS',
|
||||||
'-D_REENTRANT']
|
'-D_REENTRANT']
|
||||||
if self.name != "Windows":
|
|
||||||
self.global_flags_xx=['-std=c++11']
|
self.global_flags_xx=[]
|
||||||
self.global_flags_mm=['-std=c++11']
|
self.global_flags_mm=[]
|
||||||
else:
|
if self.name == "Windows":
|
||||||
self.global_flags_xx=['-static-libgcc', '-static-libstdc++', '-L', '-std=c++11']
|
self.global_flags_xx=['-static-libgcc', '-static-libstdc++']
|
||||||
self.global_flags_mm=[]
|
self.global_flags_mm=[]
|
||||||
self.global_flags_m=[]
|
self.global_flags_m=[]
|
||||||
self.global_flags_ar=['rcs']
|
self.global_flags_ar=['rcs']
|
||||||
@@ -65,19 +84,22 @@ class Target:
|
|||||||
|
|
||||||
self.folder_arch="/" + self.name
|
self.folder_arch="/" + self.name
|
||||||
|
|
||||||
if "debug" == debugMode:
|
if "debug" == self.config["mode"]:
|
||||||
self.buildMode = "debug"
|
|
||||||
self.global_flags_cc.append("-g")
|
self.global_flags_cc.append("-g")
|
||||||
self.global_flags_cc.append("-DDEBUG")
|
self.global_flags_cc.append("-DDEBUG")
|
||||||
self.global_flags_cc.append("-O0")
|
self.global_flags_cc.append("-O0")
|
||||||
else:
|
else:
|
||||||
self.buildMode = "release"
|
|
||||||
self.global_flags_cc.append("-DNDEBUG")
|
self.global_flags_cc.append("-DNDEBUG")
|
||||||
self.global_flags_cc.append("-O3")
|
self.global_flags_cc.append("-O3")
|
||||||
self.folder_out="/out" + self.folder_arch + "/" + self.buildMode
|
|
||||||
self.folder_final="/final/" + typeCompilator
|
## To add code coverate on build result system
|
||||||
self.folder_staging="/staging/" + typeCompilator
|
if self.config["gcov"] == True:
|
||||||
self.folder_build="/build/" + typeCompilator
|
self.global_flags_cc.append("-fprofile-arcs")
|
||||||
|
self.global_flags_cc.append("-ftest-coverage")
|
||||||
|
self.global_flags_ld.append("-fprofile-arcs")
|
||||||
|
self.global_flags_ld.append("-ftest-coverage")
|
||||||
|
|
||||||
|
self.update_folder_tree()
|
||||||
self.folder_bin="/usr/bin"
|
self.folder_bin="/usr/bin"
|
||||||
self.folder_lib="/usr/lib"
|
self.folder_lib="/usr/lib"
|
||||||
self.folder_data="/usr/share"
|
self.folder_data="/usr/share"
|
||||||
@@ -89,19 +111,54 @@ class Target:
|
|||||||
self.listFinalFile=[]
|
self.listFinalFile=[]
|
||||||
|
|
||||||
self.sysroot=""
|
self.sysroot=""
|
||||||
|
|
||||||
self.externProjectManager = None
|
|
||||||
|
|
||||||
def set_use_of_extern_build_tool(self, mode):
|
def update_folder_tree(self):
|
||||||
if mode == True:
|
self.folder_out="/out/" + self.name + "_" + self.config["arch"] + "_" + self.config["bus-size"] + "/" + self.config["mode"]
|
||||||
if self.externProjectManager == None:
|
self.folder_final="/final/" + self.config["compilator"]
|
||||||
debug.error("This target does not support extern tool")
|
self.folder_staging="/staging/" + self.config["compilator"]
|
||||||
|
self.folder_build="/build/" + self.config["compilator"]
|
||||||
|
|
||||||
|
def create_number_from_version_string(self, data):
|
||||||
|
list = data.split(".")
|
||||||
|
out = 0;
|
||||||
|
offset = 1000**(len(list)-1)
|
||||||
|
for elem in list:
|
||||||
|
out += offset*int(elem)
|
||||||
|
debug.verbose("get : " + str(int(elem)) + " tmp" + str(out))
|
||||||
|
offset /= 1000
|
||||||
|
return out
|
||||||
|
|
||||||
|
def set_cross_base(self, cross=""):
|
||||||
|
self.cross = cross
|
||||||
|
debug.debug("== Target='" + self.cross + "'");
|
||||||
|
self.ar = self.cross + "ar"
|
||||||
|
self.ranlib = self.cross + "ranlib"
|
||||||
|
if self.config["compilator"] == "clang":
|
||||||
|
self.cc = self.cross + "clang"
|
||||||
|
self.xx = self.cross + "clang++"
|
||||||
|
#self.ar=self.cross + "llvm-ar"
|
||||||
|
#self.ranlib="ls"
|
||||||
else:
|
else:
|
||||||
# remove extern tool generator...
|
self.cc = self.cross + "gcc"
|
||||||
self.externProjectManager = None
|
self.xx = self.cross + "g++"
|
||||||
|
#self.ar=self.cross + "ar"
|
||||||
|
#self.ranlib=self.cross + "ranlib"
|
||||||
|
|
||||||
|
#get g++ compilation version :
|
||||||
|
ret = multiprocess.run_command_direct(self.xx + " -dumpversion");
|
||||||
|
if ret == False:
|
||||||
|
debug.error("Can not get the g++/clang++ version ...")
|
||||||
|
self.xx_version = self.create_number_from_version_string(ret)
|
||||||
|
debug.debug(self.config["compilator"] + "++ version=" + str(ret) + " number=" + str(self.xx_version))
|
||||||
|
|
||||||
|
self.ld = self.cross + "ld"
|
||||||
|
self.nm = self.cross + "nm"
|
||||||
|
self.strip = self.cross + "strip"
|
||||||
|
self.dlltool = self.cross + "dlltool"
|
||||||
|
self.update_folder_tree()
|
||||||
|
|
||||||
def get_build_mode(self):
|
def get_build_mode(self):
|
||||||
return self.buildMode
|
return self.config["mode"]
|
||||||
|
|
||||||
def add_image_staging(self, inputFile, outputFile, sizeX, sizeY, cmdFile=None):
|
def add_image_staging(self, inputFile, outputFile, sizeX, sizeY, cmdFile=None):
|
||||||
for source, dst, x, y, cmdFile2 in self.listFinalFile:
|
for source, dst, x, y, cmdFile2 in self.listFinalFile:
|
||||||
@@ -209,7 +266,7 @@ class Target:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def add_module(self, newModule):
|
def add_module(self, newModule):
|
||||||
debug.debug("Import nodule for Taget : " + newModule.name)
|
debug.debug("Add nodule for Taget : " + newModule.name)
|
||||||
self.moduleList.append(newModule)
|
self.moduleList.append(newModule)
|
||||||
|
|
||||||
|
|
||||||
@@ -236,11 +293,27 @@ class Target:
|
|||||||
return
|
return
|
||||||
debug.error("request to clean an un-existant module name : '" + name + "'")
|
debug.error("request to clean an un-existant module name : '" + name + "'")
|
||||||
|
|
||||||
def load_if_needed(self, name):
|
def load_if_needed(self, name, optionnal=False):
|
||||||
for elem in self.moduleList:
|
for elem in self.moduleList:
|
||||||
if elem.name == name:
|
if elem.name == name:
|
||||||
return
|
return True
|
||||||
lutinModule.load_module(self, name)
|
if optionnal == False:
|
||||||
|
lutinModule.load_module(self, name)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
# TODO : Check internal module and system module ...
|
||||||
|
# need to import the module (or the system module ...)
|
||||||
|
exist = lutinSystem.exist(name, self.name)
|
||||||
|
if exist == True:
|
||||||
|
lutinSystem.load(self, name, self.name)
|
||||||
|
return True;
|
||||||
|
# try to find in the local Modules:
|
||||||
|
exist = lutinModule.exist(self, name)
|
||||||
|
if exist == True:
|
||||||
|
lutinModule.load_module(self, name)
|
||||||
|
return True;
|
||||||
|
else:
|
||||||
|
return False;
|
||||||
|
|
||||||
def load_all(self):
|
def load_all(self):
|
||||||
listOfAllTheModule = lutinModule.list_all_module()
|
listOfAllTheModule = lutinModule.list_all_module()
|
||||||
@@ -253,81 +326,128 @@ class Target:
|
|||||||
module.ext_project_add_module(self, projectMng, addedModule)
|
module.ext_project_add_module(self, projectMng, addedModule)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def build_optionnal(self, moduleName, packagesName=None):
|
||||||
|
present = self.load_if_needed(moduleName, optionnal=True)
|
||||||
|
if present == False:
|
||||||
|
return [heritage.HeritageList(), False]
|
||||||
|
# clean requested
|
||||||
|
for mod in self.moduleList:
|
||||||
|
if mod.name == moduleName:
|
||||||
|
debug.debug("build module '" + moduleName + "'")
|
||||||
|
return [mod.build(self, None), True]
|
||||||
|
debug.warning("not know module name : '" + moduleName + "' to '" + "build" + "' it")
|
||||||
|
return [heritage.HeritageList(), False]
|
||||||
|
|
||||||
def build(self, name, packagesName=None):
|
def build(self, name, packagesName=None):
|
||||||
if name == "dump":
|
if name == "dump":
|
||||||
debug.info("dump all")
|
debug.info("dump all")
|
||||||
self.load_all()
|
self.load_all()
|
||||||
for mod in self.moduleList:
|
for mod in self.moduleList:
|
||||||
mod.display(self)
|
mod.display(self)
|
||||||
elif self.externProjectManager != None:
|
return
|
||||||
# TODO : Do it only if needed:
|
if name == "all":
|
||||||
debug.debug("generate project")
|
debug.info("build all")
|
||||||
# TODO : Set an option to force Regeneration of the project or the oposite....
|
|
||||||
self.load_all()
|
self.load_all()
|
||||||
for mod in self.moduleList:
|
for mod in self.moduleList:
|
||||||
if mod.name != "edn":
|
if self.name=="Android":
|
||||||
continue
|
if mod.type == "PACKAGE":
|
||||||
if mod.type == "PACKAGE":
|
mod.build(self, None)
|
||||||
mod.create_project(self, self.externProjectManager)
|
|
||||||
# TODO : Run project or do something else ...
|
|
||||||
debug.error("stop here ...")
|
|
||||||
else:
|
|
||||||
if name == "all":
|
|
||||||
debug.info("build all")
|
|
||||||
self.load_all()
|
|
||||||
for mod in self.moduleList:
|
|
||||||
if self.name=="Android":
|
|
||||||
if mod.type == "PACKAGE":
|
|
||||||
mod.build(self, None)
|
|
||||||
else:
|
|
||||||
if mod.type == "BINARY" \
|
|
||||||
or mod.type == "PACKAGE":
|
|
||||||
mod.build(self, None)
|
|
||||||
elif name == "clean":
|
|
||||||
debug.info("clean all")
|
|
||||||
self.load_all()
|
|
||||||
for mod in self.moduleList:
|
|
||||||
mod.clean(self)
|
|
||||||
else:
|
|
||||||
# get the action an the module ....
|
|
||||||
gettedElement = name.split("-")
|
|
||||||
moduleName = gettedElement[0]
|
|
||||||
if len(gettedElement)>=2:
|
|
||||||
actionName = gettedElement[1]
|
|
||||||
else :
|
|
||||||
actionName = "build"
|
|
||||||
debug.verbose("requested : " + moduleName + "-" + actionName)
|
|
||||||
if actionName == "install":
|
|
||||||
self.build(moduleName + "-build")
|
|
||||||
self.install_package(moduleName)
|
|
||||||
elif actionName == "uninstall":
|
|
||||||
self.un_install_package(moduleName)
|
|
||||||
elif actionName == "log":
|
|
||||||
self.Log(moduleName)
|
|
||||||
else:
|
else:
|
||||||
self.load_if_needed(moduleName)
|
if mod.type == "BINARY" \
|
||||||
# clean requested
|
or mod.type == "PACKAGE":
|
||||||
for mod in self.moduleList:
|
mod.build(self, None)
|
||||||
if mod.name == moduleName:
|
elif name == "clean":
|
||||||
if actionName == "dump":
|
debug.info("clean all")
|
||||||
debug.info("dump module '" + moduleName + "'")
|
self.load_all()
|
||||||
return mod.display(self)
|
for mod in self.moduleList:
|
||||||
elif actionName == "clean":
|
mod.clean(self)
|
||||||
debug.info("clean module '" + moduleName + "'")
|
else:
|
||||||
return mod.clean(self)
|
# get the action an the module ....
|
||||||
elif actionName == "build":
|
gettedElement = name.split("-")
|
||||||
debug.debug("build module '" + moduleName + "'")
|
moduleName = gettedElement[0]
|
||||||
return mod.build(self, None)
|
if len(gettedElement)>=2:
|
||||||
debug.error("not know module name : '" + moduleName + "' to '" + actionName + "' it")
|
actionName = gettedElement[1]
|
||||||
|
else :
|
||||||
|
actionName = "build"
|
||||||
|
debug.verbose("requested : " + moduleName + "-" + actionName)
|
||||||
|
if actionName == "install":
|
||||||
|
self.build(moduleName + "-build")
|
||||||
|
self.install_package(moduleName)
|
||||||
|
elif actionName == "uninstall":
|
||||||
|
self.un_install_package(moduleName)
|
||||||
|
elif actionName == "log":
|
||||||
|
self.Log(moduleName)
|
||||||
|
else:
|
||||||
|
self.load_if_needed(moduleName)
|
||||||
|
# clean requested
|
||||||
|
for mod in self.moduleList:
|
||||||
|
if mod.name == moduleName:
|
||||||
|
if actionName == "dump":
|
||||||
|
debug.info("dump module '" + moduleName + "'")
|
||||||
|
return mod.display(self)
|
||||||
|
elif actionName == "clean":
|
||||||
|
debug.info("clean module '" + moduleName + "'")
|
||||||
|
return mod.clean(self)
|
||||||
|
elif actionName == "build":
|
||||||
|
debug.debug("build module '" + moduleName + "'")
|
||||||
|
return mod.build(self, None)
|
||||||
|
debug.error("not know module name : '" + moduleName + "' to '" + actionName + "' it")
|
||||||
|
|
||||||
__startTargetName="lutinTarget"
|
|
||||||
|
|
||||||
def target_load(targetName, compilator, mode, generatePackage, externBuild, simulationMode):
|
targetList=[]
|
||||||
theTarget = __import__(__startTargetName + targetName)
|
__startTargetName="lutinTarget_"
|
||||||
#try:
|
|
||||||
tmpTarget = theTarget.Target(compilator, mode, generatePackage, simulationMode)
|
|
||||||
tmpTarget.set_use_of_extern_build_tool(externBuild)
|
def import_path(path):
|
||||||
return tmpTarget
|
global targetList
|
||||||
#except:
|
matches = []
|
||||||
# debug.error("Can not create the Target : '" + targetName + "'")
|
debug.debug('Start find sub File : "%s"' %path)
|
||||||
|
for root, dirnames, filenames in os.walk(path):
|
||||||
|
tmpList = fnmatch.filter(filenames, __startTargetName + "*.py")
|
||||||
|
# Import the module :
|
||||||
|
for filename in tmpList:
|
||||||
|
debug.debug(' Find a file : "%s"' %os.path.join(root, filename))
|
||||||
|
#matches.append(os.path.join(root, filename))
|
||||||
|
sys.path.append(os.path.dirname(os.path.join(root, filename)) )
|
||||||
|
targetName = filename.replace('.py', '')
|
||||||
|
targetName = targetName.replace(__startTargetName, '')
|
||||||
|
debug.debug("integrate module: '" + targetName + "' from '" + os.path.join(root, filename) + "'")
|
||||||
|
targetList.append([targetName,os.path.join(root, filename)])
|
||||||
|
|
||||||
|
|
||||||
|
def load_target(name, config):
|
||||||
|
global targetList
|
||||||
|
debug.debug("load target: " + name)
|
||||||
|
if len(targetList) == 0:
|
||||||
|
debug.error("No target to compile !!!")
|
||||||
|
debug.debug("list target: " + str(targetList))
|
||||||
|
for mod in targetList:
|
||||||
|
if mod[0] == name:
|
||||||
|
debug.verbose("add to path: '" + os.path.dirname(mod[1]) + "'")
|
||||||
|
sys.path.append(os.path.dirname(mod[1]))
|
||||||
|
debug.verbose("import target : '" + __startTargetName + name + "'")
|
||||||
|
theTarget = __import__(__startTargetName + name)
|
||||||
|
#create the target
|
||||||
|
tmpTarget = theTarget.Target(config)
|
||||||
|
return tmpTarget
|
||||||
|
|
||||||
|
def list_all_target():
|
||||||
|
global targetList
|
||||||
|
tmpListName = []
|
||||||
|
for mod in targetList:
|
||||||
|
tmpListName.append(mod[0])
|
||||||
|
return tmpListName
|
||||||
|
|
||||||
|
def list_all_target_with_desc():
|
||||||
|
global targetList
|
||||||
|
tmpList = []
|
||||||
|
for mod in targetList:
|
||||||
|
sys.path.append(os.path.dirname(mod[1]))
|
||||||
|
theTarget = __import__(__startTargetName + mod[0])
|
||||||
|
try:
|
||||||
|
tmpdesc = theTarget.get_desc()
|
||||||
|
tmpList.append([mod[0], tmpdesc])
|
||||||
|
except:
|
||||||
|
debug.warning("has no name : " + mod[0])
|
||||||
|
tmpList.append([mod[0], ""])
|
||||||
|
return tmpList
|
||||||
|
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import errno
|
import errno
|
||||||
@@ -27,6 +35,11 @@ def create_directory_of_file(file):
|
|||||||
except:
|
except:
|
||||||
os.makedirs(folder)
|
os.makedirs(folder)
|
||||||
|
|
||||||
|
def get_list_sub_folder(path):
|
||||||
|
# TODO : os.listdir(path)
|
||||||
|
for dirname, dirnames, filenames in os.walk(path):
|
||||||
|
return dirnames
|
||||||
|
return []
|
||||||
|
|
||||||
def remove_folder_and_sub_folder(path):
|
def remove_folder_and_sub_folder(path):
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
@@ -97,25 +110,34 @@ def copy_anything(src, dst):
|
|||||||
tmpPath = os.path.dirname(os.path.realpath(src))
|
tmpPath = os.path.dirname(os.path.realpath(src))
|
||||||
tmpRule = os.path.basename(src)
|
tmpRule = os.path.basename(src)
|
||||||
for root, dirnames, filenames in os.walk(tmpPath):
|
for root, dirnames, filenames in os.walk(tmpPath):
|
||||||
|
debug.verbose(" root='" + str(root) + "' dir='" + str(dirnames) + "' filenames=" + str(filenames))
|
||||||
tmpList = filenames
|
tmpList = filenames
|
||||||
if len(tmpRule)>0:
|
if len(tmpRule)>0:
|
||||||
tmpList = fnmatch.filter(filenames, tmpRule)
|
tmpList = fnmatch.filter(filenames, tmpRule)
|
||||||
# Import the module :
|
# Import the module :
|
||||||
for cycleFile in tmpList:
|
for cycleFile in tmpList:
|
||||||
#for cycleFile in filenames:
|
#for cycleFile in filenames:
|
||||||
#debug.info("Might copy : '" + tmpPath+cycleFile + "' ==> '" + dst + "'")
|
debug.verbose("Might copy : '" + tmpPath+cycleFile + "' ==> '" + dst + "'")
|
||||||
copy_file(tmpPath+"/"+cycleFile,dst+"/"+cycleFile)
|
copy_file(tmpPath+"/"+cycleFile, dst+"/"+cycleFile)
|
||||||
|
|
||||||
|
|
||||||
def copy_anything_target(target, src, dst):
|
def copy_anything_target(target, src, dst):
|
||||||
tmpPath = os.path.dirname(os.path.realpath(src))
|
tmpPath = os.path.dirname(os.path.realpath(src))
|
||||||
tmpRule = os.path.basename(src)
|
tmpRule = os.path.basename(src)
|
||||||
for root, dirnames, filenames in os.walk(tmpPath):
|
for root, dirnames, filenames in os.walk(tmpPath):
|
||||||
|
debug.verbose(" root='" + str(root) + "' dir='" + str(dirnames) + "' filenames=" + str(filenames))
|
||||||
tmpList = filenames
|
tmpList = filenames
|
||||||
if len(tmpRule)>0:
|
if len(tmpRule)>0:
|
||||||
tmpList = fnmatch.filter(filenames, tmpRule)
|
tmpList = fnmatch.filter(filenames, tmpRule)
|
||||||
# Import the module :
|
# Import the module :
|
||||||
for cycleFile in tmpList:
|
for cycleFile in tmpList:
|
||||||
#for cycleFile in filenames:
|
#for cycleFile in filenames:
|
||||||
#debug.info("Might copy : '" + tmpPath+cycleFile + "' ==> '" + dst + "'")
|
newDst = dst
|
||||||
target.add_file_staging(tmpPath+"/"+cycleFile,dst+"/"+cycleFile)
|
if len(newDst) != 0 and newDst[-1] != "/":
|
||||||
|
newDst += "/"
|
||||||
|
if root[len(src)-1:] != "":
|
||||||
|
newDst += root[len(src)-1:]
|
||||||
|
if len(newDst) != 0 and newDst[-1] != "/":
|
||||||
|
newDst += "/"
|
||||||
|
debug.verbose("Might copy : '" + root+"/"+cycleFile + "' ==> '" + newDst+cycleFile + "'" )
|
||||||
|
target.add_file_staging(root+"/"+cycleFile, newDst+cycleFile)
|
||||||
|
25
system/lutinSystem_IOs_CoreAudio.py
Normal file
25
system/lutinSystem_IOs_CoreAudio.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="CoreAudio : Ios interface for audio (all time present, just system interface)"
|
||||||
|
self.valid = True
|
||||||
|
# todo : create a searcher of the presence of the library:
|
||||||
|
self.add_export_flag_LD("-framework CoreAudio")
|
||||||
|
self.add_export_flag_LD("-framework AudioToolbox")
|
||||||
|
|
||||||
|
|
29
system/lutinSystem_Linux_alsa.py
Normal file
29
system/lutinSystem_Linux_alsa.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="ALSA : Advanced Linux Sound Architecture\n Can be install with the package:\n - libasound2-dev"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/include/alsa/asoundlib.h") \
|
||||||
|
and not os.path.isfile("/usr/include/dssi/alsa/asoundlib.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_LD("-lasound")
|
||||||
|
|
||||||
|
|
33
system/lutinSystem_Linux_boost.py
Normal file
33
system/lutinSystem_Linux_boost.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="BOOST : Boost interface (need when we have not all c++ feature\n Can be install with the package:\n - libboost-all-dev"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/include/boost/chrono.hpp"):
|
||||||
|
# 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_LD([
|
||||||
|
"-lboost_system",
|
||||||
|
"-lboost_thread",
|
||||||
|
"-lboost_chrono"
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
28
system/lutinSystem_Linux_jack.py
Normal file
28
system/lutinSystem_Linux_jack.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="JACK : Jack Low-Latency Audio Server\n Can be install with the package:\n - libjack-jackd2-dev (new)\n - libjack-dev (old)"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/include/jack/jack.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_LD("-ljack")
|
||||||
|
|
||||||
|
|
30
system/lutinSystem_Linux_oss.py
Normal file
30
system/lutinSystem_Linux_oss.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="OSS : Linux Open Sound System\n Can be install with the package:\n - ... TODO ..."
|
||||||
|
# check if the library exist:
|
||||||
|
"""
|
||||||
|
if not os.path.isfile("/usr/include/jack/jack.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_CC("-ljack")
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
28
system/lutinSystem_Linux_pulse.py
Normal file
28
system/lutinSystem_Linux_pulse.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="PULSE : The Linux PulseAudio\n Can be install with the package:\n - libpulse-dev"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/include/pulse/pulseaudio.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_LD(["-lpulse-simple", "-lpulse"])
|
||||||
|
|
||||||
|
|
28
system/lutinSystem_Linux_z.py
Normal file
28
system/lutinSystem_Linux_z.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="Z : z library \n Can be install with the package:\n - zlib1g-dev"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/include/zlib.h"):
|
||||||
|
# we did not find the library reqiested (just return) (automaticly set at false)
|
||||||
|
return;
|
||||||
|
self.valid = True
|
||||||
|
# todo : create a searcher of the presence of the library:
|
||||||
|
self.add_export_flag_LD(["-lz"])
|
||||||
|
|
||||||
|
|
24
system/lutinSystem_MacOs_CoreAudio.py
Normal file
24
system/lutinSystem_MacOs_CoreAudio.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="CoreAudio : MacOs interface for audio (all time present, just system interface)"
|
||||||
|
self.valid = True
|
||||||
|
# todo : create a searcher of the presence of the library:
|
||||||
|
self.add_export_flag_LD("-framework CoreAudio")
|
||||||
|
self.add_export_flag_LD("-framework CoreFoundation")
|
||||||
|
|
0
system/lutinSystem_Windows_asio.py
Normal file
0
system/lutinSystem_Windows_asio.py
Normal file
31
system/lutinSystem_Windows_ds.py
Normal file
31
system/lutinSystem_Windows_ds.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
import lutinDebug as debug
|
||||||
|
import lutinSystem
|
||||||
|
import lutinTools as tools
|
||||||
|
import os
|
||||||
|
|
||||||
|
class System(lutinSystem.System):
|
||||||
|
def __init__(self):
|
||||||
|
lutinSystem.System.__init__(self)
|
||||||
|
# create some HELP:
|
||||||
|
self.help="DirectSound : Direct sound API for windows audio interface"
|
||||||
|
# check if the library exist:
|
||||||
|
if not os.path.isfile("/usr/i686-w64-mingw32/include/dsound.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_LD(["-ldsound",
|
||||||
|
"-lwinmm",
|
||||||
|
"-lole32"
|
||||||
|
])
|
||||||
|
|
||||||
|
|
@@ -1,16 +1,34 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
import lutinTools
|
import lutinTools as tools
|
||||||
import lutinHost
|
import lutinHost
|
||||||
import lutinImage
|
import lutinImage
|
||||||
import lutinMultiprocess
|
import lutinMultiprocess
|
||||||
|
import lutinHost
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
class Target(lutinTarget.Target):
|
class Target(lutinTarget.Target):
|
||||||
def __init__(self, typeCompilator, debugMode, generatePackage, sumulator=False):
|
def __init__(self, config):
|
||||||
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
config["arch"] = "arm"
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
config["bus-size"] = "32"
|
||||||
|
|
||||||
|
arch = ""#"ARMv7"
|
||||||
|
lutinTarget.Target.__init__(self, "Android", config, arch)
|
||||||
|
|
||||||
self.folder_ndk = os.getenv('PROJECT_NDK', "AUTO")
|
self.folder_ndk = os.getenv('PROJECT_NDK', "AUTO")
|
||||||
self.folder_sdk = os.getenv('PROJECT_SDK', "AUTO")
|
self.folder_sdk = os.getenv('PROJECT_SDK', "AUTO")
|
||||||
@@ -21,7 +39,7 @@ class Target(lutinTarget.Target):
|
|||||||
if folder=="android":
|
if folder=="android":
|
||||||
self.folder_ndk = folder + "/ndk"
|
self.folder_ndk = folder + "/ndk"
|
||||||
if self.folder_ndk == "AUTO":
|
if self.folder_ndk == "AUTO":
|
||||||
self.folder_ndk = lutinTools.get_run_folder() + "/../android/ndk"
|
self.folder_ndk = tools.get_run_folder() + "/../android/ndk"
|
||||||
# auto search SDK
|
# auto search SDK
|
||||||
if self.folder_sdk == "AUTO":
|
if self.folder_sdk == "AUTO":
|
||||||
for folder in os.listdir("."):
|
for folder in os.listdir("."):
|
||||||
@@ -29,28 +47,32 @@ class Target(lutinTarget.Target):
|
|||||||
if folder=="android":
|
if folder=="android":
|
||||||
self.folder_sdk = folder + "/sdk"
|
self.folder_sdk = folder + "/sdk"
|
||||||
if self.folder_sdk == "AUTO":
|
if self.folder_sdk == "AUTO":
|
||||||
self.folder_sdk = lutinTools.get_run_folder() + "/../android/sdk"
|
self.folder_sdk = tools.get_run_folder() + "/../android/sdk"
|
||||||
|
|
||||||
|
if not os.path.isdir(self.folder_ndk):
|
||||||
|
debug.error("NDK path not set !!! set env : PROJECT_NDK on the NDK path")
|
||||||
|
if not os.path.isdir(self.folder_sdk):
|
||||||
|
debug.error("SDK path not set !!! set env : PROJECT_SDK on the SDK path")
|
||||||
|
|
||||||
|
|
||||||
arch = ""#"ARMv7"
|
|
||||||
tmpOsVal = "64"
|
tmpOsVal = "64"
|
||||||
gccVersion = "4.8"
|
gccVersion = "4.8"
|
||||||
if lutinHost.OS64BITS==True:
|
if lutinHost.BUS_SIZE==64:
|
||||||
tmpOsVal = "_64"
|
tmpOsVal = "_64"
|
||||||
if typeCompilator == "clang":
|
if self.config["compilator"] == "clang":
|
||||||
cross = self.folder_ndk + "/toolchains/llvm-3.3/prebuilt/linux-x86_64/bin/"
|
self.set_cross_base(self.folder_ndk + "/toolchains/llvm-3.3/prebuilt/linux-x86_64/bin/")
|
||||||
else:
|
else:
|
||||||
baseFolderArm = self.folder_ndk + "/toolchains/arm-linux-androideabi-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
baseFolderArm = self.folder_ndk + "/toolchains/arm-linux-androideabi-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
||||||
baseFolderMips = self.folder_ndk + "/toolchains/mipsel-linux-android-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
baseFolderMips = self.folder_ndk + "/toolchains/mipsel-linux-android-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
||||||
baseFolderX86 = self.folder_ndk + "/toolchains/x86-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
baseFolderX86 = self.folder_ndk + "/toolchains/x86-" + gccVersion + "/prebuilt/linux-x86" + tmpOsVal + "/bin/"
|
||||||
cross = baseFolderArm + "arm-linux-androideabi-"
|
self.set_cross_base(baseFolderArm + "arm-linux-androideabi-")
|
||||||
if not os.path.isdir(baseFolderArm):
|
if not os.path.isdir(baseFolderArm):
|
||||||
debug.error("Gcc Arm pah does not exist !!!")
|
debug.error("Gcc Arm path does not exist !!!")
|
||||||
if not os.path.isdir(baseFolderMips):
|
if not os.path.isdir(baseFolderMips):
|
||||||
debug.info("Gcc Mips pah does not exist !!!")
|
debug.info("Gcc Mips path does not exist !!!")
|
||||||
if not os.path.isdir(baseFolderX86):
|
if not os.path.isdir(baseFolderX86):
|
||||||
debug.info("Gcc x86 pah does not exist !!!")
|
debug.info("Gcc x86 path does not exist !!!")
|
||||||
|
|
||||||
lutinTarget.Target.__init__(self, "Android", typeCompilator, debugMode, generatePackage, arch, cross, sumulator)
|
|
||||||
arch = "ARMv7"
|
arch = "ARMv7"
|
||||||
# for gcc :
|
# for gcc :
|
||||||
|
|
||||||
@@ -73,7 +95,7 @@ class Target(lutinTarget.Target):
|
|||||||
self.global_include_cc.append("-I" + self.folder_ndk +"/platforms/android-" + str(self.boardId) + "/arch-x86/usr/include/")
|
self.global_include_cc.append("-I" + self.folder_ndk +"/platforms/android-" + str(self.boardId) + "/arch-x86/usr/include/")
|
||||||
|
|
||||||
if True:
|
if True:
|
||||||
if typeCompilator == "clang":
|
if self.config["compilator"] == "clang":
|
||||||
self.global_include_cc.append("-I" + self.folder_ndk +"/sources/cxx-stl/llvm-libc++/libcxx/include/")
|
self.global_include_cc.append("-I" + self.folder_ndk +"/sources/cxx-stl/llvm-libc++/libcxx/include/")
|
||||||
if arch == "ARMv5":
|
if arch == "ARMv5":
|
||||||
stdCppBasePath = self.folder_ndk +"/sources/cxx-stl/llvm-libc++/libcxx/libs/armeabi/"
|
stdCppBasePath = self.folder_ndk +"/sources/cxx-stl/llvm-libc++/libcxx/libs/armeabi/"
|
||||||
@@ -177,7 +199,7 @@ class Target(lutinTarget.Target):
|
|||||||
debug.info("Generate package '" + pkgName + "'")
|
debug.info("Generate package '" + pkgName + "'")
|
||||||
debug.debug("------------------------------------------------------------------------")
|
debug.debug("------------------------------------------------------------------------")
|
||||||
pkgNameApplicationName = pkgName
|
pkgNameApplicationName = pkgName
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
pkgNameApplicationName += "debug"
|
pkgNameApplicationName += "debug"
|
||||||
# FINAL_FOLDER_JAVA_PROJECT
|
# FINAL_FOLDER_JAVA_PROJECT
|
||||||
self.folder_javaProject= self.get_staging_folder(pkgName) \
|
self.folder_javaProject= self.get_staging_folder(pkgName) \
|
||||||
@@ -197,14 +219,14 @@ class Target(lutinTarget.Target):
|
|||||||
|
|
||||||
debug.print_element("pkg", "absractionFile", "<==", "dynamic file")
|
debug.print_element("pkg", "absractionFile", "<==", "dynamic file")
|
||||||
# Create folder :
|
# Create folder :
|
||||||
lutinTools.create_directory_of_file(self.file_finalAbstraction)
|
tools.create_directory_of_file(self.file_finalAbstraction)
|
||||||
# Create file :
|
# Create file :
|
||||||
tmpFile = open(self.file_finalAbstraction, 'w')
|
tmpFile = open(self.file_finalAbstraction, 'w')
|
||||||
if pkgProperties["ANDROID_APPL_TYPE"]=="APPL":
|
if pkgProperties["ANDROID_APPL_TYPE"]=="APPL":
|
||||||
tmpFile.write( "/**\n")
|
tmpFile.write( "/**\n")
|
||||||
tmpFile.write( " * @author Edouard DUPIN, Kevin BILLONNEAU\n")
|
tmpFile.write( " * @author Edouard DUPIN, Kevin BILLONNEAU\n")
|
||||||
tmpFile.write( " * @copyright 2011, Edouard DUPIN, all right reserved\n")
|
tmpFile.write( " * @copyright 2011, Edouard DUPIN, all right reserved\n")
|
||||||
tmpFile.write( " * @license BSD v3 (see license file)\n")
|
tmpFile.write( " * @license APACHE v2.0 (see license file)\n")
|
||||||
tmpFile.write( " * @note This file is autogenerate ==> see documantation to generate your own\n")
|
tmpFile.write( " * @note This file is autogenerate ==> see documantation to generate your own\n")
|
||||||
tmpFile.write( " */\n")
|
tmpFile.write( " */\n")
|
||||||
tmpFile.write( "package "+ compleatePackageName + ";\n")
|
tmpFile.write( "package "+ compleatePackageName + ";\n")
|
||||||
@@ -293,7 +315,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.write( "/**\n")
|
tmpFile.write( "/**\n")
|
||||||
tmpFile.write( " * @author Edouard DUPIN, Kevin BILLONNEAU\n")
|
tmpFile.write( " * @author Edouard DUPIN, Kevin BILLONNEAU\n")
|
||||||
tmpFile.write( " * @copyright 2011, Edouard DUPIN, all right reserved\n")
|
tmpFile.write( " * @copyright 2011, Edouard DUPIN, all right reserved\n")
|
||||||
tmpFile.write( " * @license BSD v3 (see license file)\n")
|
tmpFile.write( " * @license APACHE v2.0 (see license file)\n")
|
||||||
tmpFile.write( " * @note This file is autogenerate ==> see documantation to generate your own\n")
|
tmpFile.write( " * @note This file is autogenerate ==> see documantation to generate your own\n")
|
||||||
tmpFile.write( " */\n")
|
tmpFile.write( " */\n")
|
||||||
tmpFile.write( "package "+ compleatePackageName + ";\n")
|
tmpFile.write( "package "+ compleatePackageName + ";\n")
|
||||||
@@ -309,7 +331,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.flush()
|
tmpFile.flush()
|
||||||
tmpFile.close()
|
tmpFile.close()
|
||||||
|
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/drawable/icon.png");
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/drawable/icon.png");
|
||||||
if "ICON" in pkgProperties.keys() \
|
if "ICON" in pkgProperties.keys() \
|
||||||
and pkgProperties["ICON"] != "":
|
and pkgProperties["ICON"] != "":
|
||||||
lutinImage.resize(pkgProperties["ICON"], self.get_staging_folder(pkgName) + "/res/drawable/icon.png", 256, 256)
|
lutinImage.resize(pkgProperties["ICON"], self.get_staging_folder(pkgName) + "/res/drawable/icon.png", 256, 256)
|
||||||
@@ -322,7 +344,7 @@ class Target(lutinTarget.Target):
|
|||||||
|
|
||||||
if pkgProperties["ANDROID_MANIFEST"]!="":
|
if pkgProperties["ANDROID_MANIFEST"]!="":
|
||||||
debug.print_element("pkg", "AndroidManifest.xml", "<==", pkgProperties["ANDROID_MANIFEST"])
|
debug.print_element("pkg", "AndroidManifest.xml", "<==", pkgProperties["ANDROID_MANIFEST"])
|
||||||
lutinTools.copy_file(pkgProperties["ANDROID_MANIFEST"], self.get_staging_folder(pkgName) + "/AndroidManifest.xml", force=True)
|
tools.copy_file(pkgProperties["ANDROID_MANIFEST"], self.get_staging_folder(pkgName) + "/AndroidManifest.xml", force=True)
|
||||||
else:
|
else:
|
||||||
if "VERSION_CODE" not in pkgProperties:
|
if "VERSION_CODE" not in pkgProperties:
|
||||||
pkgProperties["VERSION_CODE"] = "1"
|
pkgProperties["VERSION_CODE"] = "1"
|
||||||
@@ -341,7 +363,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.write( ' <application android:label="' + pkgNameApplicationName + '" \n')
|
tmpFile.write( ' <application android:label="' + pkgNameApplicationName + '" \n')
|
||||||
if "ICON" in pkgProperties.keys():
|
if "ICON" in pkgProperties.keys():
|
||||||
tmpFile.write( ' android:icon="@drawable/icon" \n')
|
tmpFile.write( ' android:icon="@drawable/icon" \n')
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
tmpFile.write( ' android:debuggable="true" \n')
|
tmpFile.write( ' android:debuggable="true" \n')
|
||||||
tmpFile.write( ' >\n')
|
tmpFile.write( ' >\n')
|
||||||
if "ADMOD_ID" in pkgProperties:
|
if "ADMOD_ID" in pkgProperties:
|
||||||
@@ -350,7 +372,7 @@ class Target(lutinTarget.Target):
|
|||||||
|
|
||||||
tmpFile.write( ' <activity android:name=".' + pkgNameApplicationName + '" \n')
|
tmpFile.write( ' <activity android:name=".' + pkgNameApplicationName + '" \n')
|
||||||
tmpFile.write( ' android:label="' + pkgProperties['NAME'])
|
tmpFile.write( ' android:label="' + pkgProperties['NAME'])
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
tmpFile.write("-debug")
|
tmpFile.write("-debug")
|
||||||
tmpFile.write( '"\n')
|
tmpFile.write( '"\n')
|
||||||
if "ICON" in pkgProperties.keys():
|
if "ICON" in pkgProperties.keys():
|
||||||
@@ -375,7 +397,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.write( ' >\n')
|
tmpFile.write( ' >\n')
|
||||||
tmpFile.write( ' <service android:name=".' + pkgNameApplicationName + '" \n')
|
tmpFile.write( ' <service android:name=".' + pkgNameApplicationName + '" \n')
|
||||||
tmpFile.write( ' android:label="' + pkgProperties['NAME'])
|
tmpFile.write( ' android:label="' + pkgProperties['NAME'])
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
tmpFile.write("-debug")
|
tmpFile.write("-debug")
|
||||||
tmpFile.write( '"\n')
|
tmpFile.write( '"\n')
|
||||||
if "ICON" in pkgProperties.keys():
|
if "ICON" in pkgProperties.keys():
|
||||||
@@ -448,7 +470,7 @@ class Target(lutinTarget.Target):
|
|||||||
if pkgProperties["ANDROID_APPL_TYPE"]!="APPL":
|
if pkgProperties["ANDROID_APPL_TYPE"]!="APPL":
|
||||||
#create the Wallpaper sub files : (main element for the application
|
#create the Wallpaper sub files : (main element for the application
|
||||||
debug.print_element("pkg", pkgNameApplicationName + "_resource.xml", "<==", "package configurations")
|
debug.print_element("pkg", pkgNameApplicationName + "_resource.xml", "<==", "package configurations")
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_resource.xml")
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_resource.xml")
|
||||||
tmpFile = open(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_resource.xml", 'w')
|
tmpFile = open(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_resource.xml", 'w')
|
||||||
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
||||||
tmpFile.write( "<wallpaper xmlns:android=\"http://schemas.android.com/apk/res/android\"\n")
|
tmpFile.write( "<wallpaper xmlns:android=\"http://schemas.android.com/apk/res/android\"\n")
|
||||||
@@ -461,7 +483,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.close()
|
tmpFile.close()
|
||||||
# create wallpaper setting if needed (class and config file)
|
# create wallpaper setting if needed (class and config file)
|
||||||
if len(pkgProperties["ANDROID_WALLPAPER_PROPERTIES"])!=0:
|
if len(pkgProperties["ANDROID_WALLPAPER_PROPERTIES"])!=0:
|
||||||
lutinTools.create_directory_of_file(self.folder_javaProject + pkgNameApplicationName + "Settings.java")
|
tools.create_directory_of_file(self.folder_javaProject + pkgNameApplicationName + "Settings.java")
|
||||||
debug.print_element("pkg", self.folder_javaProject + pkgNameApplicationName + "Settings.java", "<==", "package configurations")
|
debug.print_element("pkg", self.folder_javaProject + pkgNameApplicationName + "Settings.java", "<==", "package configurations")
|
||||||
tmpFile = open(self.folder_javaProject + pkgNameApplicationName + "Settings.java", 'w');
|
tmpFile = open(self.folder_javaProject + pkgNameApplicationName + "Settings.java", 'w');
|
||||||
tmpFile.write( "package " + compleatePackageName + ";\n")
|
tmpFile.write( "package " + compleatePackageName + ";\n")
|
||||||
@@ -493,7 +515,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.close()
|
tmpFile.close()
|
||||||
|
|
||||||
debug.print_element("pkg", self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml", "<==", "package configurations")
|
debug.print_element("pkg", self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml", "<==", "package configurations")
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml")
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml")
|
||||||
tmpFile = open(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml", 'w');
|
tmpFile = open(self.get_staging_folder(pkgName) + "/res/xml/" + pkgNameApplicationName + "_settings.xml", 'w');
|
||||||
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
||||||
tmpFile.write( "<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n")
|
tmpFile.write( "<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n")
|
||||||
@@ -524,7 +546,7 @@ class Target(lutinTarget.Target):
|
|||||||
for WALL_type, WALL_key, WALL_title, WALL_summary, WALL_other in pkgProperties["ANDROID_WALLPAPER_PROPERTIES"]:
|
for WALL_type, WALL_key, WALL_title, WALL_summary, WALL_other in pkgProperties["ANDROID_WALLPAPER_PROPERTIES"]:
|
||||||
if WALL_type == "list":
|
if WALL_type == "list":
|
||||||
debug.print_element("pkg", self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml", "<==", "package configurations")
|
debug.print_element("pkg", self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml", "<==", "package configurations")
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml")
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml")
|
||||||
tmpFile = open(self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml", 'w');
|
tmpFile = open(self.get_staging_folder(pkgName) + "/res/values/" + WALL_key + ".xml", 'w');
|
||||||
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
||||||
tmpFile.write( "<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">\n")
|
tmpFile.write( "<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">\n")
|
||||||
@@ -550,14 +572,20 @@ class Target(lutinTarget.Target):
|
|||||||
for res_source, res_dest in pkgProperties["ANDROID_RESOURCES"]:
|
for res_source, res_dest in pkgProperties["ANDROID_RESOURCES"]:
|
||||||
if res_source == "":
|
if res_source == "":
|
||||||
continue
|
continue
|
||||||
lutinTools.copy_file(res_source , self.get_staging_folder(pkgName) + "/res/" + res_dest + "/" + os.path.basename(res_source), force=True)
|
tools.copy_file(res_source , self.get_staging_folder(pkgName) + "/res/" + res_dest + "/" + os.path.basename(res_source), force=True)
|
||||||
|
|
||||||
|
|
||||||
# Doc :
|
# Doc :
|
||||||
# http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/
|
# http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/
|
||||||
debug.print_element("pkg", "R.java", "<==", "Resources files")
|
debug.print_element("pkg", "R.java", "<==", "Resources files")
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/src/noFile")
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/src/noFile")
|
||||||
androidToolPath = self.folder_sdk + "/build-tools/19.0.3/"
|
androidToolPath = self.folder_sdk + "/build-tools/"
|
||||||
|
# find android tool version
|
||||||
|
dirnames = tools.get_list_sub_folder(androidToolPath)
|
||||||
|
if len(dirnames) != 1:
|
||||||
|
debug.error("an error occured when getting the tools for android")
|
||||||
|
androidToolPath += dirnames[0] + "/"
|
||||||
|
|
||||||
adModResouceFolder = ""
|
adModResouceFolder = ""
|
||||||
if "ADMOD_ID" in pkgProperties:
|
if "ADMOD_ID" in pkgProperties:
|
||||||
adModResouceFolder = " -S " + self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ "
|
adModResouceFolder = " -S " + self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ "
|
||||||
@@ -572,7 +600,7 @@ class Target(lutinTarget.Target):
|
|||||||
#aapt package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library}
|
#aapt package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library}
|
||||||
# -S ${android-resource-directory} [-m -J ${folder.to.output.the.R.java}]
|
# -S ${android-resource-directory} [-m -J ${folder.to.output.the.R.java}]
|
||||||
|
|
||||||
lutinTools.create_directory_of_file(self.get_staging_folder(pkgName) + "/build/classes/noFile")
|
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/build/classes/noFile")
|
||||||
debug.print_element("pkg", "*.class", "<==", "*.java")
|
debug.print_element("pkg", "*.class", "<==", "*.java")
|
||||||
# more information with : -Xlint
|
# more information with : -Xlint
|
||||||
# + self.file_finalAbstraction + " "\ # this generate ex: out/Android/debug/staging/tethys/src/com/edouarddupin/tethys/edn.java
|
# + self.file_finalAbstraction + " "\ # this generate ex: out/Android/debug/staging/tethys/src/com/edouarddupin/tethys/edn.java
|
||||||
@@ -642,7 +670,7 @@ class Target(lutinTarget.Target):
|
|||||||
# http://developer.android.com/tools/publishing/app-signing.html
|
# http://developer.android.com/tools/publishing/app-signing.html
|
||||||
# Create a key for signing your application:
|
# Create a key for signing your application:
|
||||||
# keytool -genkeypair -v -keystore AndroidKey.jks -storepass Pass__AndroidDebugKey -alias alias__AndroidDebugKey -keypass PassKey__AndroidDebugKey -keyalg RSA -validity 36500
|
# keytool -genkeypair -v -keystore AndroidKey.jks -storepass Pass__AndroidDebugKey -alias alias__AndroidDebugKey -keypass PassKey__AndroidDebugKey -keyalg RSA -validity 36500
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
tmpFile = open("tmpPass.boo", 'w')
|
tmpFile = open("tmpPass.boo", 'w')
|
||||||
tmpFile.write("Pass__AndroidDebugKey\n")
|
tmpFile.write("Pass__AndroidDebugKey\n")
|
||||||
tmpFile.write("PassKey__AndroidDebugKey\n")
|
tmpFile.write("PassKey__AndroidDebugKey\n")
|
||||||
@@ -654,7 +682,7 @@ class Target(lutinTarget.Target):
|
|||||||
debugOption = ""
|
debugOption = ""
|
||||||
cmdLine = "jarsigner " \
|
cmdLine = "jarsigner " \
|
||||||
+ debugOption \
|
+ debugOption \
|
||||||
+ "-keystore " + lutinTools.get_current_path(__file__) + "/AndroidDebugKey.jks " \
|
+ "-keystore " + tools.get_current_path(__file__) + "/AndroidDebugKey.jks " \
|
||||||
+ " -sigalg SHA1withRSA -digestalg SHA1 " \
|
+ " -sigalg SHA1withRSA -digestalg SHA1 " \
|
||||||
+ self.get_staging_folder(pkgName) + "/build/" + pkgNameApplicationName + "-unalligned.apk " \
|
+ self.get_staging_folder(pkgName) + "/build/" + pkgNameApplicationName + "-unalligned.apk " \
|
||||||
+ " alias__AndroidDebugKey < tmpPass.boo"
|
+ " alias__AndroidDebugKey < tmpPass.boo"
|
||||||
@@ -679,24 +707,24 @@ class Target(lutinTarget.Target):
|
|||||||
lutinMultiprocess.run_command(cmdLine)
|
lutinMultiprocess.run_command(cmdLine)
|
||||||
|
|
||||||
debug.print_element("pkg", ".apk(aligned)", "<==", ".apk (not aligned)")
|
debug.print_element("pkg", ".apk(aligned)", "<==", ".apk (not aligned)")
|
||||||
lutinTools.remove_file(self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk")
|
tools.remove_file(self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk")
|
||||||
# verbose mode : -v
|
# verbose mode : -v
|
||||||
cmdLine = self.folder_sdk + "/tools/zipalign 4 " \
|
cmdLine = androidToolPath + "zipalign 4 " \
|
||||||
+ self.get_staging_folder(pkgName) + "/build/" + pkgNameApplicationName + "-unalligned.apk " \
|
+ self.get_staging_folder(pkgName) + "/build/" + pkgNameApplicationName + "-unalligned.apk " \
|
||||||
+ self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk "
|
+ self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk "
|
||||||
lutinMultiprocess.run_command(cmdLine)
|
lutinMultiprocess.run_command(cmdLine)
|
||||||
|
|
||||||
# copy file in the final stage :
|
# copy file in the final stage :
|
||||||
lutinTools.copy_file(self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk",
|
tools.copy_file(self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk",
|
||||||
self.get_final_folder() + "/" + pkgNameApplicationName + ".apk",
|
self.get_final_folder() + "/" + pkgNameApplicationName + ".apk",
|
||||||
force=True)
|
force=True)
|
||||||
|
|
||||||
def install_package(self, pkgName):
|
def install_package(self, pkgName):
|
||||||
debug.debug("------------------------------------------------------------------------")
|
debug.debug("------------------------------------------------------------------------")
|
||||||
debug.info("Install package '" + pkgName + "'")
|
debug.info("Install package '" + pkgName + "'")
|
||||||
debug.debug("------------------------------------------------------------------------")
|
debug.debug("------------------------------------------------------------------------")
|
||||||
pkgNameApplicationName = pkgName
|
pkgNameApplicationName = pkgName
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
pkgNameApplicationName += "debug"
|
pkgNameApplicationName += "debug"
|
||||||
cmdLine = self.folder_sdk + "/platform-tools/adb install -r " \
|
cmdLine = self.folder_sdk + "/platform-tools/adb install -r " \
|
||||||
+ self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk "
|
+ self.get_staging_folder(pkgName) + "/" + pkgNameApplicationName + ".apk "
|
||||||
@@ -707,7 +735,7 @@ class Target(lutinTarget.Target):
|
|||||||
debug.info("Un-Install package '" + pkgName + "'")
|
debug.info("Un-Install package '" + pkgName + "'")
|
||||||
debug.debug("------------------------------------------------------------------------")
|
debug.debug("------------------------------------------------------------------------")
|
||||||
pkgNameApplicationName = pkgName
|
pkgNameApplicationName = pkgName
|
||||||
if "debug"==self.buildMode:
|
if self.config["mode"] == "debug":
|
||||||
pkgNameApplicationName += "debug"
|
pkgNameApplicationName += "debug"
|
||||||
cmdLine = self.folder_sdk + "/platform-tools/adb uninstall " + pkgNameApplicationName
|
cmdLine = self.folder_sdk + "/platform-tools/adb uninstall " + pkgNameApplicationName
|
||||||
RlutinMultiprocess.unCommand(cmdLine)
|
RlutinMultiprocess.unCommand(cmdLine)
|
@@ -1,30 +1,47 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
import lutinTools
|
import lutinTools
|
||||||
import lutinImage
|
import lutinImage
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
import lutinExtProjectGeneratorXCode
|
|
||||||
import lutinMultiprocess
|
import lutinMultiprocess
|
||||||
|
import lutinHost
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
|
||||||
class Target(lutinTarget.Target):
|
class Target(lutinTarget.Target):
|
||||||
def __init__(self, typeCompilator, debugMode, generatePackage, sumulator=False):
|
def __init__(self, config):
|
||||||
if typeCompilator == "gcc":
|
if config["compilator"] == "gcc":
|
||||||
debug.info("compile only with clang for IOs");
|
debug.info("compile only with clang for IOs");
|
||||||
typeCompilator = "clang"
|
config["compilator"] = "clang"
|
||||||
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
config["arch"] = "arm"
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
config["bus-size"] = "64"
|
||||||
|
|
||||||
# http://biolpc22.york.ac.uk/pub/linux-mac-cross/
|
# http://biolpc22.york.ac.uk/pub/linux-mac-cross/
|
||||||
# http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
|
# http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
|
||||||
if sumulator == True:
|
if config["simulation"] == True:
|
||||||
arch = "i386"
|
arch = "i386"
|
||||||
cross = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
|
|
||||||
else:
|
else:
|
||||||
arch="arm64" # for ipad air
|
arch="arm64" # for ipad air
|
||||||
#arch="armv7" # for Iphone 4
|
#arch="armv7" # for Iphone 4
|
||||||
cross = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
|
lutinTarget.Target.__init__(self, "IOs", config, arch)
|
||||||
lutinTarget.Target.__init__(self, "IOs", typeCompilator, debugMode, generatePackage, arch, cross, sumulator)
|
if self.config["simulation"] == True:
|
||||||
|
self.set_cross_base("/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/")
|
||||||
|
else:
|
||||||
|
self.set_cross_base("/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/")
|
||||||
|
|
||||||
# remove unneeded ranlib ...
|
# remove unneeded ranlib ...
|
||||||
self.ranlib=""
|
self.ranlib=""
|
||||||
@@ -37,13 +54,13 @@ class Target(lutinTarget.Target):
|
|||||||
self.suffix_binary=''
|
self.suffix_binary=''
|
||||||
self.suffix_package=''
|
self.suffix_package=''
|
||||||
if self.sumulator == True:
|
if self.sumulator == True:
|
||||||
self.sysroot = "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk"
|
self.sysroot = "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk"
|
||||||
self.global_flags_ld.append("-mios-simulator-version-min=7.0")
|
self.global_flags_ld.append("-mios-simulator-version-min=8.0")
|
||||||
self.global_flags_cc.append("-mios-simulator-version-min=7.0")
|
self.global_flags_cc.append("-mios-simulator-version-min=8.0")
|
||||||
else:
|
else:
|
||||||
self.sysroot = "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk"
|
self.sysroot = "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk"
|
||||||
self.global_flags_ld.append("-miphoneos-version-min=7.0")
|
self.global_flags_ld.append("-miphoneos-version-min=8.0")
|
||||||
self.global_flags_cc.append("-miphoneos-version-min=7.0")
|
self.global_flags_cc.append("-miphoneos-version-min=8.0")
|
||||||
|
|
||||||
self.global_flags_ld.append([
|
self.global_flags_ld.append([
|
||||||
"-Xlinker",
|
"-Xlinker",
|
||||||
@@ -57,9 +74,6 @@ class Target(lutinTarget.Target):
|
|||||||
|
|
||||||
self.global_flags_m.append("-fobjc-arc")
|
self.global_flags_m.append("-fobjc-arc")
|
||||||
#self.global_flags_m.append("-fmodules")
|
#self.global_flags_m.append("-fmodules")
|
||||||
|
|
||||||
#add a project generator:
|
|
||||||
self.externProjectManager = lutinExtProjectGeneratorXCode.ExtProjectGeneratorXCode()
|
|
||||||
|
|
||||||
def get_staging_folder(self, binaryName):
|
def get_staging_folder(self, binaryName):
|
||||||
return lutinTools.get_run_folder() + self.folder_out + self.folder_staging + "/" + binaryName + ".app/"
|
return lutinTools.get_run_folder() + self.folder_out + self.folder_staging + "/" + binaryName + ".app/"
|
@@ -1,4 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
import lutinTools as tools
|
import lutinTools as tools
|
||||||
@@ -6,10 +14,25 @@ import os
|
|||||||
import stat
|
import stat
|
||||||
import re
|
import re
|
||||||
import lutinMultiprocess
|
import lutinMultiprocess
|
||||||
|
import lutinHost
|
||||||
|
|
||||||
class Target(lutinTarget.Target):
|
class Target(lutinTarget.Target):
|
||||||
def __init__(self, typeCompilator, debugMode, generatePackage, sumulator=False):
|
def __init__(self, config):
|
||||||
lutinTarget.Target.__init__(self, "Linux", typeCompilator, debugMode, generatePackage, "", "")
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
config["arch"] = "x86"
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
config["bus-size"] = str(lutinHost.BUS_SIZE)
|
||||||
|
lutinTarget.Target.__init__(self, "Linux", config, "")
|
||||||
|
if self.config["bus-size"] == "64":
|
||||||
|
# 64 bits
|
||||||
|
if lutinHost.BUS_SIZE != 64:
|
||||||
|
self.global_flags_cc.append("-m64")
|
||||||
|
else:
|
||||||
|
# 32 bits
|
||||||
|
if lutinHost.BUS_SIZE != 32:
|
||||||
|
self.global_flags_cc.append("-m32")
|
||||||
|
|
||||||
def generate_list_separate_coma(self, list):
|
def generate_list_separate_coma(self, list):
|
||||||
result = ""
|
result = ""
|
@@ -1,17 +1,30 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
import lutinTools
|
import lutinTools
|
||||||
|
import lutinHost
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
|
|
||||||
class Target(lutinTarget.Target):
|
class Target(lutinTarget.Target):
|
||||||
def __init__(self, typeCompilator, debugMode, generatePackage, sumulator=False):
|
def __init__(self, config):
|
||||||
cross = ""
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
config["arch"] = "x86"
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
config["bus-size"] = str(lutinHost.BUS_SIZE)
|
||||||
# http://biolpc22.york.ac.uk/pub/linux-mac-cross/
|
# http://biolpc22.york.ac.uk/pub/linux-mac-cross/
|
||||||
# http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
|
# http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
|
||||||
lutinTarget.Target.__init__(self, "MacOs", typeCompilator, debugMode, generatePackage, "", cross)
|
lutinTarget.Target.__init__(self, "MacOs", config, "")
|
||||||
|
|
||||||
self.folder_bin="/MacOS"
|
self.folder_bin="/MacOS"
|
||||||
self.folder_lib="/lib"
|
self.folder_lib="/lib"
|
||||||
@@ -37,7 +50,7 @@ class Target(lutinTarget.Target):
|
|||||||
|
|
||||||
if "ICON" in pkgProperties.keys() \
|
if "ICON" in pkgProperties.keys() \
|
||||||
and pkgProperties["ICON"] != "":
|
and pkgProperties["ICON"] != "":
|
||||||
lutinTools.copy_file(pkgProperties["ICON"], self.get_staging_folder_data(pkgName) + "/icon.icns", True)
|
lutinTools.copy_file(pkgProperties["ICON"], self.get_staging_folder_data(pkgName) + "/icon.icns", force=True)
|
||||||
|
|
||||||
# http://www.sandroid.org/imcross/#Deployment
|
# http://www.sandroid.org/imcross/#Deployment
|
||||||
infoFile=self.get_staging_folder(pkgName) + "/Info.plist"
|
infoFile=self.get_staging_folder(pkgName) + "/Info.plist"
|
||||||
@@ -53,7 +66,7 @@ class Target(lutinTarget.Target):
|
|||||||
tmpFile.write(" <string>"+pkgName+"</string>\n")
|
tmpFile.write(" <string>"+pkgName+"</string>\n")
|
||||||
tmpFile.write(" <key>CFBundleIdentifier</key>\n")
|
tmpFile.write(" <key>CFBundleIdentifier</key>\n")
|
||||||
tmpFile.write(" <string>" + pkgProperties["COMPAGNY_TYPE"] + "." + pkgProperties["COMPAGNY_NAME2"] + "." + pkgName + "</string>\n")
|
tmpFile.write(" <string>" + pkgProperties["COMPAGNY_TYPE"] + "." + pkgProperties["COMPAGNY_NAME2"] + "." + pkgName + "</string>\n")
|
||||||
tmpFile.write(" <key>CFBundleSignature</key>\n")
|
tmpFile.write(" <key>CFBundleSignature</key>\n")
|
||||||
tmpFile.write(" <string>????</string>\n")
|
tmpFile.write(" <string>????</string>\n")
|
||||||
tmpFile.write(" <key>CFBundleIconFile</key>\n")
|
tmpFile.write(" <key>CFBundleIconFile</key>\n")
|
||||||
tmpFile.write(" <string>icon.icns</string>\n")
|
tmpFile.write(" <string>icon.icns</string>\n")
|
@@ -1,30 +1,53 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
##
|
||||||
|
## @author Edouard DUPIN
|
||||||
|
##
|
||||||
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||||
|
##
|
||||||
|
## @license APACHE v2.0 (see license file)
|
||||||
|
##
|
||||||
|
|
||||||
import lutinDebug as debug
|
import lutinDebug as debug
|
||||||
import lutinTarget
|
import lutinTarget
|
||||||
import lutinTools
|
import lutinTools
|
||||||
|
import lutinHost
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
import lutinHost
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
class Target(lutinTarget.Target):
|
class Target(lutinTarget.Target):
|
||||||
def __init__(self, typeCompilator, debugMode, generatePackage, sumulator=False):
|
def __init__(self, config):
|
||||||
|
if config["compilator"] != "gcc":
|
||||||
|
debug.error("Windows does not support '" + config["compilator"] + "' compilator ... availlable : [gcc]")
|
||||||
|
config["compilator"] = "gcc"
|
||||||
|
|
||||||
|
#processor type selection (auto/arm/ppc/x86)
|
||||||
|
if config["arch"] == "auto":
|
||||||
|
config["arch"] = "x86"
|
||||||
|
#bus size selection (auto/32/64)
|
||||||
|
if config["bus-size"] == "auto":
|
||||||
|
config["bus-size"] = str(lutinHost.BUS_SIZE)
|
||||||
|
|
||||||
|
lutinTarget.Target.__init__(self, "Windows", config, "")
|
||||||
|
|
||||||
# on windows board the basic path is not correct
|
# on windows board the basic path is not correct
|
||||||
# TODO : get external PATH for the minGW path
|
# TODO : get external PATH for the minGW path
|
||||||
# TODO : Set the cyngwin path ...
|
# TODO : Set the cyngwin path ...
|
||||||
if lutinHost.OS == "Windows":
|
if lutinHost.OS == "Windows":
|
||||||
cross = "c:\\MinGW\\bin\\"
|
self.set_cross_base("c:\\MinGW\\bin\\")
|
||||||
sys.path.append("c:\\MinGW\\bin" )
|
sys.path.append("c:\\MinGW\\bin" )
|
||||||
os.environ['PATH'] += ";c:\\MinGW\\bin\\"
|
os.environ['PATH'] += ";c:\\MinGW\\bin\\"
|
||||||
else:
|
else:
|
||||||
#cross = "i586-mingw32msvc-"
|
if self.config["bus-size"] == "64":
|
||||||
cross = "x86_64-w64-mingw32-"
|
# 64 bits
|
||||||
#cross = "i686-w64-mingw32-"
|
self.set_cross_base("x86_64-w64-mingw32-")
|
||||||
|
else:
|
||||||
if typeCompilator!="gcc":
|
# 32 bits
|
||||||
debug.error("Android does not support '" + typeCompilator + "' compilator ... availlable : [gcc]")
|
self.set_cross_base("i686-w64-mingw32-")
|
||||||
|
# force static link to prenvent many errors ...
|
||||||
lutinTarget.Target.__init__(self, "Windows", typeCompilator, debugMode, generatePackage, "", cross)
|
self.global_flags_ld.append(["-static-libgcc",
|
||||||
|
"-static-libstdc++",
|
||||||
|
"-static"])
|
||||||
|
|
||||||
self.folder_bin=""
|
self.folder_bin=""
|
||||||
self.folder_lib="/lib"
|
self.folder_lib="/lib"
|
1403
xcodeprojExporter.py
1403
xcodeprojExporter.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user