diff --git a/lutinDepend.py b/lutinDepend.py
index 3343758..b5b8ddd 100644
--- a/lutinDepend.py
+++ b/lutinDepend.py
@@ -41,19 +41,21 @@ def NeedReBuild(dst, src, dependFile):
for curLine in file.readlines():
# normal file : end with : ": \\n"
curLine = curLine[:len(curLine)-1]
+ # removing last \ ...
+ if curLine[len(curLine)-1:] == '\\' :
+ curLine = curLine[len(curLine)-1:]
+ # remove white space :
+ curLine = curLine.strip()
+
testFile=""
- if curLine[len(curLine)-3:] == ': \\' \
- or curLine[len(curLine)-2:] == ': ' \
- or curLine[len(curLine)-1:] == ':':
+ if curLine[len(curLine)-1:] == ':':
debug.verbose(" Line (no check (already done) : '" + curLine + "'");
- elif curLine[len(curLine)-2:] == ' \\':
- testFile = curLine[1:len(curLine)-2]
- debug.verbose(" Line (might check1) : '" + testFile + "'");
- elif len(curLine) == 0:
+ elif len(curLine) == 0 \
+ or curLine == '\\':
debug.verbose(" Line (Not parsed) : '" + curLine + "'");
else:
- testFile = curLine[1:]
- debug.verbose(" Line (might check2) : '" + testFile + "'");
+ testFile = curLine
+ debug.verbose(" Line (might check) : '" + testFile + "'");
# really check files:
if testFile!="":
debug.verbose(" ==> test");
diff --git a/lutinEnv.py b/lutinEnv.py
index daa7350..b611fc6 100644
--- a/lutinEnv.py
+++ b/lutinEnv.py
@@ -1,6 +1,8 @@
#!/usr/bin/python
import lutinDebug as debug
+
+
forceMode=False
def SetForceMode(val):
diff --git a/lutinModule.py b/lutinModule.py
index ef1617f..d74abc3 100644
--- a/lutinModule.py
+++ b/lutinModule.py
@@ -82,12 +82,16 @@ class module:
self.packageProp = { "COMPAGNY_TYPE" : set(""),
"COMPAGNY_NAME" : set(""),
+ "COMPAGNY_NAME2" : set(""),
"MAINTAINER" : set([]),
"ICON" : set(""),
"SECTION" : set([]),
"PRIORITY" : set(""),
"DESCRIPTION" : set(""),
- "VERSION" : set("0.0.0")}
+ "VERSION" : set("0.0.0"),
+ "NAME" : set("no-name"), # name of the application
+ "RIGHT" : []
+ }
###############################################################################
@@ -557,6 +561,11 @@ class module:
self.packageProp[variable] = value
elif "COMPAGNY_NAME" == variable:
self.packageProp[variable] = value
+ val2 = value.lower()
+ val2 = val2.replace(' ', '')
+ val2 = val2.replace('-', '')
+ val2 = val2.replace('_', '')
+ self.packageProp["COMPAGNY_NAME2"] = val2
elif "ICON" == variable:
self.packageProp[variable] = value
elif "MAINTAINER" == variable:
@@ -588,9 +597,14 @@ class module:
self.packageProp[variable] = value
elif "VERSION" == variable:
self.packageProp[variable] = value
+ elif "NAME" == variable:
+ self.packageProp[variable] = value
else:
debug.error("not know pak element : '" + variable + "'")
+ def pkgAddRight(self, value):
+ self.packageProp["RIGHT"].append(value)
+
@@ -621,7 +635,10 @@ def LoadModule(target, name):
theModule = __import__(__startModuleName + name)
#try:
tmpElement = theModule.Create(target)
- target.AddModule(tmpElement)
+ if (tmpElement == None) :
+ debug.debug("Request load module '" + name + "' not define for this platform")
+ else:
+ target.AddModule(tmpElement)
#except:
# debug.error(" no function 'Create' in the module : " + mod[0] + " from:'" + mod[1] + "'")
diff --git a/lutinTarget.py b/lutinTarget.py
index 14de839..986d0d7 100644
--- a/lutinTarget.py
+++ b/lutinTarget.py
@@ -26,7 +26,7 @@ class Target:
# Target global variables.
###############################################################################
self.global_include_cc=[]
- self.global_flags_cc=['-D__TARGET_OS__'+self.name, "-DBUILD_TIME=\"\\\""+str(datetime.datetime.now())+"\\\"\""]
+ self.global_flags_cc=['-D__TARGET_OS__'+self.name]
self.global_flags_xx=[]
self.global_flags_mm=[]
self.global_flags_m=[]
@@ -63,6 +63,10 @@ class Target:
self.buildTreeDone=[]
self.moduleList=[]
+ # TODO : Remove this hack ... ==> really bad ... but usefull
+ def SetEwolFolder(self, folder):
+ self.folder_ewol = folder
+
"""
return a list of 3 elements :
0 : sources files (can be a list)
@@ -177,7 +181,17 @@ class Target:
mod.Clean(self)
else:
myLen = len(name)
- if name[myLen-5:] == "-dump":
+ if name[myLen-8:] == "-install":
+ tmpName = name[:myLen-8]
+ self.Build(tmpName + "-build")
+ self.InstallPackage(tmpName)
+ elif name[myLen-10:] == "-uninstall":
+ tmpName = name[:myLen-10]
+ self.UnInstallPackage(tmpName)
+ elif name[myLen-4:] == "-log":
+ tmpName = name[:myLen-4]
+ self.Log(tmpName)
+ elif name[myLen-5:] == "-dump":
tmpName = name[:myLen-5]
self.LoadIfNeeded(tmpName)
# clean requested
@@ -198,13 +212,16 @@ class Target:
return
debug.error("not know module name : '" + cleanName + "' to clean it")
else:
+ tmpName = name
+ if name[myLen-6:] == "-build":
+ tmpName = name[:myLen-6]
# Build requested
- self.LoadIfNeeded(name)
+ self.LoadIfNeeded(tmpName)
for mod in self.moduleList:
- if mod.name == name:
- debug.info("Build module '" + name + "'")
+ if mod.name == tmpName:
+ debug.info("Build module '" + tmpName + "'")
return mod.Build(self, None)
- debug.error("not know module name : '" + name + "' to build it")
+ debug.error("not know module name : '" + tmpName + "' to build it")
__startTargetName="lutinTarget"
diff --git a/lutinTargetAndroid.py b/lutinTargetAndroid.py
index 6d3bfe7..8966059 100644
--- a/lutinTargetAndroid.py
+++ b/lutinTargetAndroid.py
@@ -5,11 +5,22 @@ import lutinTarget
import lutinTools
import os
+def RunCommand(cmdLine):
+ debug.debug(cmdLine)
+ ret = os.system(cmdLine)
+ # TODO : Use "subprocess" instead ==> permit to pipline the renderings ...
+ if ret != 0:
+ if ret == 2:
+ debug.error("can not execute cmdLine ... [keyboard interrrupt]")
+ else:
+ debug.error("can not execute cmdLine ... ret : " + str(ret))
+
+
class Target(lutinTarget.Target):
def __init__(self, typeCompilator, debugMode):
self.folder_ndk = os.getenv('PROJECT_NDK', lutinTools.GetRunFolder() + "/../android/ndk/")
- self.folder_sdk = os.getenv('PROJECT_SDK', lutinTools.GetRunFolder() + "/../android/ndk/")
+ self.folder_sdk = os.getenv('PROJECT_SDK', lutinTools.GetRunFolder() + "/../android/sdk/")
arch = "ARMv7"
cross = self.folder_ndk + "/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-"
@@ -18,6 +29,14 @@ class Target(lutinTarget.Target):
lutinTarget.Target.__init__(self, "Android", "gcc", debugMode, arch, cross)
+
+ self.folder_bin="/mustNotCreateBinary"
+ self.folder_lib="/data/lib/armeabi"
+ self.folder_data="/data/assets"
+ self.folder_doc="/doc"
+ self.suffix_package='.pkg'
+
+ # board id at 14 is for android 4.0 and more ...
self.boardId = 14
self.global_include_cc.append("-I" + self.folder_ndk +"/platforms/android-" + str(self.boardId) + "/arch-arm/usr/include")
self.global_include_cc.append("-I" + self.folder_ndk +"/sources/cxx-stl/system/include/")
@@ -62,11 +81,234 @@ class Target(lutinTarget.Target):
self.global_flags_xx.append("-fno-rtti")
self.global_flags_xx.append("-Wa,--noexecstack")
+
+
+ def CheckRightPackage(self, pkgProperties, value):
+ for val in pkgProperties["RIGHT"]:
+ if value == val:
+ return True
+ return False
- def MakePackage(self, moduleName, pkgProperties):
- None # ...
-
-
+ def MakePackage(self, pkgName, pkgProperties):
+ # http://alp.developpez.com/tutoriels/debian/creer-paquet/
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Generate package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ # FINAL_FOLDER_JAVA_PROJECT
+ self.folder_javaProject= self.GetStagingFolder(pkgName) \
+ + "/src/" \
+ + pkgProperties["COMPAGNY_TYPE"] \
+ + "/" + pkgProperties["COMPAGNY_NAME2"] \
+ + "/" + pkgName + "/"
+ #FINAL_FILE_ABSTRACTION
+ self.file_finalAbstraction = self.folder_javaProject + "/" + pkgName + ".java"
+
+ lutinTools.CopyFile(self.folder_ewol + "/sources/android/PROJECT_NAME.java", self.file_finalAbstraction, True)
+
+ os.system("sed -i \"s|__PROJECT_ORG_TYPE__|"+pkgProperties["COMPAGNY_TYPE"]+"|\" " + self.file_finalAbstraction)
+ os.system("sed -i \"s|__PROJECT_VENDOR__|"+pkgProperties["COMPAGNY_NAME2"]+"|\" " + self.file_finalAbstraction)
+ os.system("sed -i \"s|__PROJECT_NAME__|" + pkgName + "|\" "+ self.file_finalAbstraction)
+ os.system("sed -i \"s|__PROJECT_PACKAGE__|" + pkgName + "|\" " + self.file_finalAbstraction)
+ os.system("sed -i \"s|__CONF_OGL_ES_V__|2|\" " + self.file_finalAbstraction)
+
+ lutinTools.CopyFile(pkgProperties["ICON"], self.GetStagingFolder(pkgName) + "/res/drawable/icon.png", True)
+
+ debug.printElement("pkg", "AndroidManifest.xml", "<==", "package configurations")
+ tmpFile = open(self.GetStagingFolder(pkgName) + "/AndroidManifest.xml", 'w')
+ tmpFile.write( "\n")
+ tmpFile.write( "\n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "WRITE_EXTERNAL_STORAGE"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "CAMERA"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "INTERNET"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "MODIFY_AUDIO_SETTINGS"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "READ_CALENDAR"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "READ_CONTACTS"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "READ_FRAME_BUFFER"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "READ_PROFILE"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "RECORD_AUDIO"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "SET_ORIENTATION"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "VIBRATE"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "ACCESS_COARSE_LOCATION"):
+ tmpFile.write( " \n")
+ if True==self.CheckRightPackage(pkgProperties, "ACCESS_FINE_LOCATION"):
+ tmpFile.write( " \n")
+ tmpFile.write( "\n\n")
+ tmpFile.flush()
+ tmpFile.close()
+
+ # 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/
+ debug.printElement("pkg", "R.java", "<==", "Resources files")
+ cmdLine = self.folder_sdk + "/platform-tools/aapt p -f " \
+ + "-M " + self.GetStagingFolder(pkgName) + "/AndroidManifest.xml " \
+ + "-F " + self.GetStagingFolder(pkgName) + "/resources.res " \
+ + "-I " + self.folder_sdk + "/platforms/android-" + str(self.boardId) + "/android.jar "\
+ + "-S " + self.GetStagingFolder(pkgName) + "/res/ " \
+ + "-J " + self.GetStagingFolder(pkgName) + "/src "
+ RunCommand(cmdLine)
+ #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}]
+
+ lutinTools.CreateDirectoryOfFile(self.GetStagingFolder(pkgName) + "/build/classes/noFile")
+ debug.printElement("pkg", "*.class", "<==", "*.java")
+ # more information with : -Xlint
+ cmdLine = "javac " \
+ + "-d " + self.GetStagingFolder(pkgName) + "/build/classes " \
+ + "-classpath " + self.folder_sdk + "/platforms/android-" + str(self.boardId) + "/android.jar " \
+ + self.file_finalAbstraction + " "\
+ + self.folder_ewol + "/sources/android/src/org/ewol/interfaceJNI.java " \
+ + self.folder_ewol + "/sources/android/src/org/ewol/interfaceOpenGL.java " \
+ + self.folder_ewol + "/sources/android/src/org/ewol/interfaceSurfaceView.java " \
+ + self.folder_ewol + "/sources/android/src/org/ewol/interfaceAudio.java " \
+ + self.GetStagingFolder(pkgName) + "/src/R.java "
+ RunCommand(cmdLine)
+
+ debug.printElement("pkg", ".dex", "<==", "*.class")
+ cmdLine = self.folder_sdk + "/platform-tools/dx " \
+ + "--dex --no-strict " \
+ + "--output=" + self.GetStagingFolder(pkgName) + "/build/" + pkgName + ".dex " \
+ + self.GetStagingFolder(pkgName) + "/build/classes/ "
+ RunCommand(cmdLine)
+
+ debug.printElement("pkg", ".apk", "<==", ".dex, assets, .so, res")
+ cmdLine = self.folder_sdk + "/tools/apkbuilder " \
+ + self.GetStagingFolder(pkgName) + "/build/" + pkgName + "-unalligned.apk " \
+ + "-u " \
+ + "-z " + self.GetStagingFolder(pkgName) + "/resources.res " \
+ + "-f " + self.GetStagingFolder(pkgName) + "/build/" + pkgName + ".dex " \
+ + "-rf " + self.GetStagingFolder(pkgName) + "/data "
+ RunCommand(cmdLine)
+
+ # doc :
+ # http://developer.android.com/tools/publishing/app-signing.html
+ if "debug"==self.buildMode:
+ # To create the debug Key ==> for all ...
+ #keytool -genkeypair -v -keystore $(BUILD_SYSTEM)/AndroidDebugKey.jks -storepass Pass__AndroidDebugKey -alias alias__AndroidDebugKey -keypass PassKey__AndroidDebugKey -keyalg RSA -validity 36500
+ # use default common generic debug key:
+ # generate the pass file (debug mode does not request to have a complicated key) :
+ tmpFile = open("tmpPass.boo", 'w')
+ tmpFile.write("Pass__AndroidDebugKey\n")
+ tmpFile.write("PassKey__AndroidDebugKey\n")
+ tmpFile.flush()
+ tmpFile.close()
+ # verbose mode : -verbose
+ cmdLine = "jarsigner " \
+ + "-keystore " + lutinTools.GetCurrentPath(__file__) + "/core/AndroidDebugKey.jks " \
+ + self.GetStagingFolder(pkgName) + "/build/" + pkgName + "-unalligned.apk " \
+ + " alias__AndroidDebugKey " \
+ + " < tmpPass.boo"
+ RunCommand(cmdLine)
+ print("")
+ else:
+ # keytool is situated in $(JAVA_HOME)/bin ...
+ #TODO : call the user the pass and the loggin he want ...
+ #$(if $(wildcard ./config/AndroidKey_$(PROJECT_NAME2).jks),$(empty), \
+ # $(Q)echo "./config/$(PROJECT_NAME2).jks <== dynamic key (NOTE : It might ask some question to generate the key for android)" ; \
+ # $(Q)keytool -genkeypair -v \
+ # -keystore ./config/$(PROJECT_NAME2).jks \
+ # -alias alias_$(PROJECT_NAME2) \
+ # -keyalg RSA \
+ # -validity 365 \
+ #)
+ # note we can add : -storepass Pass$(PROJECT_NAME2)
+ # note we can add : -keypass PassK$(PROJECT_NAME2)
+
+ # Question poser a ce moment, les automatiser ...
+ # Quels sont vos prenom et nom ?
+ # EdoGetRunFolderuard DUPIN
+ # [Unknown] : Quel est le nom de votre unite organisationnelle ?
+ # org
+ # [Unknown] : Quelle est le nom de votre organisation ?
+ # EWOL
+ # [Unknown] : Quel est le nom de votre ville de residence ?
+ # Paris
+ # [Unknown] : Quel est le nom de votre etat ou province ?
+ # France
+ # [Unknown] : Quel est le code de pays a deux lettres pour cette unite ?
+ # FR
+ # [Unknown] : Est-ce CN=Edouard DUPIN, OU=org, O=EWOL, L=Paris, ST=France, C=FR ?
+ # oui
+ # [non] :
+ # Generation d'une paire de clees RSA de a 024 bits et d'un certificat autosigne (SHA1withRSA) d'une validite de 365 jours
+ # pour : CN=Edouard DUPIN, OU=org, O=EWOL, L=Paris, ST=France, C=FR
+
+ # keytool is situated in $(JAVA_HOME)/bin ...
+ #echo "apk(Signed) <== apk"
+ # sign the application request loggin and password :
+ #jarsigner \
+ # -keystore ./config/AndroidKey_$(PROJECT_NAME2).jks \
+ # $(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
+ # alias_$(PROJECT_NAME2)
+ debug.warning("TODO ...")
+
+ debug.printElement("pkg", ".apk(aligned)", "<==", ".apk")
+ lutinTools.RemoveFile(self.GetStagingFolder(pkgName) + "/" + pkgName + ".apk")
+ # verbose mode : -v
+ cmdLine = self.folder_sdk + "/tools/zipalign 4 " \
+ + self.GetStagingFolder(pkgName) + "/build/" + pkgName + "-unalligned.apk " \
+ + self.GetStagingFolder(pkgName) + "/" + pkgName + ".apk "
+ RunCommand(cmdLine)
+
+ # copy file in the final stage :
+ lutinTools.CopyFile(self.GetStagingFolder(pkgName) + "/" + pkgName + ".apk",
+ self.GetFinalFolder() + "/" + pkgName + ".apk",
+ True)
+
+ def InstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ cmdLine = self.folder_sdk + "/platform-tools/adb install -r " \
+ + self.GetStagingFolder(pkgName) + "/" + pkgName + ".apk "
+ RunCommand(cmdLine)
+
+ def UnInstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Un-Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ cmdLine = self.folder_sdk + "/platform-tools/adb uninstall " + pkgName
+ RunCommand(cmdLine)
+
+ def Log(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("logcat of android board")
+ debug.debug("------------------------------------------------------------------------")
+ cmdLine = self.folder_sdk + "/platform-tools/adb shell logcat "
+ RunCommand(cmdLine)
diff --git a/lutinTargetLinux.py b/lutinTargetLinux.py
index d54ca19..e40fc90 100644
--- a/lutinTargetLinux.py
+++ b/lutinTargetLinux.py
@@ -43,7 +43,8 @@ class Target(lutinTarget.Target):
tmpFile.write("Maintainer: " + self.generateListSeparateComa(pkgProperties["MAINTAINER"]) + "\n")
tmpFile.write("Description: " + pkgProperties["DESCRIPTION"] + "\n")
tmpFile.write("\n")
- tmpFile.closed
+ tmpFile.flush()
+ tmpFile.close()
## Create the PostRm
tmpFile = open(finalFilepostRm, 'w')
tmpFile.write("#!/bin/bash\n")
@@ -51,7 +52,8 @@ class Target(lutinTarget.Target):
if pkgName != "":
tmpFile.write("rm -r ~/.local/" + pkgName + "\n")
tmpFile.write("\n")
- tmpFile.closed
+ tmpFile.flush()
+ tmpFile.close()
## Enable Execution in script
os.chmod(finalFilepostRm, stat.S_IRWXU + stat.S_IRGRP + stat.S_IXGRP + stat.S_IROTH + stat.S_IXOTH);
# copy licence and information :
@@ -61,16 +63,16 @@ class Target(lutinTarget.Target):
debug.debug("pachage : " + self.GetStagingFolder(pkgName) + "/" + pkgName + ".deb")
os.system("cd " + self.GetStagingFolder(pkgName) + " ; dpkg-deb --build " + pkgName)
lutinTools.CreateDirectoryOfFile(self.GetFinalFolder())
- lutinTools.CopyFile(self.GetStagingFolder(pkgName) + "/" + pkgName + ".deb", self.GetFinalFolder() + "/" + pkgName + ".deb")
+ lutinTools.CopyFile(self.GetStagingFolder(pkgName) + "/" + pkgName + self.suffix_package, self.GetFinalFolder() + "/" + pkgName + self.suffix_package)
def InstallPackage(self, pkgName):
debug.debug("------------------------------------------------------------------------")
debug.info("Install package '" + pkgName + "'")
debug.debug("------------------------------------------------------------------------")
- #sudo dpkg -i $(TARGET_OUT_FINAL)/$(PROJECT_NAME).deb
+ os.system("sudo dpkg -i " + self.GetFinalFolder() + "/" + pkgName + self.suffix_package)
- def InstallPackage(self, pkgName):
+ def UnInstallPackage(self, pkgName):
debug.debug("------------------------------------------------------------------------")
debug.info("Un-Install package '" + pkgName + "'")
debug.debug("------------------------------------------------------------------------")
- #sudo dpkg -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME).deb
+ os.system("sudo dpkg -r " + self.GetFinalFolder() + "/" + pkgName + self.suffix_package)
diff --git a/lutinTargetMacOs.py b/lutinTargetMacOs.py
index 013e4b7..83660fe 100644
--- a/lutinTargetMacOs.py
+++ b/lutinTargetMacOs.py
@@ -1 +1,76 @@
#!/usr/bin/python
+import lutinDebug as debug
+import lutinTarget
+import lutinTools
+import os
+import stat
+
+class Target(lutinTarget.Target):
+ def __init__(self, typeCompilator, debugMode):
+ cross = ""
+
+ # http://biolpc22.york.ac.uk/pub/linux-mac-cross/
+ # http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
+ lutinTarget.Target.__init__(self, "Windows", typeCompilator, debugMode, "", cross)
+
+ self.folder_bin="/MacOS"
+ self.folder_lib="/lib"
+ self.folder_data="/Resources"
+ self.folder_doc="/doc"
+
+ self.suffix_lib_static='.a'
+ self.suffix_lib_dynamic='.dll'
+ self.suffix_binary='.exe'
+ self.suffix_package=''
+
+
+ def GetStagingFolder(self, binaryName):
+ return lutinTools.GetRunFolder() + self.folder_out + self.folder_staging + "/" + binaryName + ".app/Contents/"
+
+ def MakePackage(self, pkgName, pkgProperties):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Generate package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ # http://www.sandroid.org/imcross/#Deployment
+ infoFile=self.GetStagingFolder(pkgName) + "/Info.plist"
+ # Create the info file
+ tmpFile = open(infoFile, 'w')
+ tmpFile.write("\n")
+ tmpFile.write("\n")
+ tmpFile.write("\n")
+ tmpFile.write(" \n")
+ tmpFile.write(" CFBundleExecutableFile\n")
+ tmpFile.write(" "+pkgName+"\n")
+ tmpFile.write(" CFBundleName\n")
+ tmpFile.write(" "+pkgName+"\n")
+ tmpFile.write(" CFBundleIdentifier\n")
+ tmpFile.write(" com."+pkgProperties["COMPAGNY_NAME2"]+"."+pkgName+"\n")
+ tmpFile.write(" CFBundleIconFile\n")
+ tmpFile.write(" "+pkgName+".icns\n")
+ tmpFile.write(" \n")
+ tmpFile.write("\n")
+ tmpFile.write("\n\n")
+ tmpFile.flush()
+ tmpFile.close()
+
+ # Must create the tarball of the application
+ #cd $(TARGET_OUT_FINAL)/; tar -cf $(PROJECT_NAME).tar $(PROJECT_NAME).app
+ #cd $(TARGET_OUT_FINAL)/; tar -czf $(PROJECT_NAME).tar.gz $(PROJECT_NAME).app
+
+ def InstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ debug.warning(" ==> TODO")
+ #sudo dpkg -i $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package
+
+ def UnInstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Un-Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ debug.warning(" ==> TODO")
+ #sudo dpkg -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package
+
+
+
+
diff --git a/lutinTargetWindows.py b/lutinTargetWindows.py
index 013e4b7..cc0976d 100644
--- a/lutinTargetWindows.py
+++ b/lutinTargetWindows.py
@@ -1 +1,47 @@
#!/usr/bin/python
+import lutinDebug as debug
+import lutinTarget
+import lutinTools
+import os
+import stat
+
+class Target(lutinTarget.Target):
+ def __init__(self, typeCompilator, debugMode):
+ cross = "i586-mingw32msvc-"
+
+ if typeCompilator!="gcc":
+ debug.error("Android does not support '" + typeCompilator + "' compilator ... availlable : [gcc]")
+
+ lutinTarget.Target.__init__(self, "Windows", typeCompilator, debugMode, "", cross)
+
+ self.folder_bin=""
+ self.folder_lib="/lib"
+ self.folder_data="/data"
+ self.folder_doc="/doc"
+
+ self.suffix_lib_static='.a'
+ self.suffix_lib_dynamic='.dll'
+ self.suffix_binary='.exe'
+ self.suffix_package=''
+
+
+ def MakePackage(self, pkgName, pkgProperties):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Generate package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ debug.warning(" ==> TODO")
+
+ def InstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ debug.warning(" ==> TODO")
+ #sudo dpkg -i $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package
+
+ def UnInstallPackage(self, pkgName):
+ debug.debug("------------------------------------------------------------------------")
+ debug.info("Un-Install package '" + pkgName + "'")
+ debug.debug("------------------------------------------------------------------------")
+ debug.warning(" ==> TODO")
+ #sudo dpkg -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package
+
diff --git a/lutinTools.py b/lutinTools.py
index ab93e92..6527109 100644
--- a/lutinTools.py
+++ b/lutinTools.py
@@ -31,6 +31,9 @@ def RemoveFolderAndSubFolder(path):
debug.verbose("remove folder : '" + path + "'")
shutil.rmtree(path)
+def RemoveFile(path):
+ if os.path.isfile(path):
+ os.remove(path)
def ListToStr(list):
@@ -57,9 +60,12 @@ def AddPrefix(prefix,list):
result.append(prefix+elem)
return result
-def CopyFile(src, dst):
+def CopyFile(src, dst, force=False):
+ if os.path.exists(src)==False:
+ debug.error("Request a copy a file that does not existed : '" + src + "'")
if os.path.exists(dst):
- if os.path.getmtime(dst) > os.path.getmtime(src):
+ if force==False \
+ and os.path.getmtime(dst) > os.path.getmtime(src):
return
debug.printElement("copy file", src, "==>", dst)
CreateDirectoryOfFile(dst)