From 10c0f98cef97f7fdb83dfd3cb7e886e3d4b5a3bf Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 8 Sep 2015 22:19:18 +0200 Subject: [PATCH] [DEV] try to create generic package --- lutin/target.py | 8 ++ lutin/tools.py | 22 +++-- lutin/z_target/lutinTarget_Linux.py | 123 +++++++++++++++++++++++++++- 3 files changed, 147 insertions(+), 6 deletions(-) diff --git a/lutin/target.py b/lutin/target.py index bf2b49e..0784d67 100644 --- a/lutin/target.py +++ b/lutin/target.py @@ -102,10 +102,18 @@ class Target: self.global_flags_ld.append("-ftest-coverage") self.update_folder_tree() + """ self.folder_bin="/usr/bin" self.folder_lib="/usr/lib" self.folder_data="/usr/share" self.folder_doc="/usr/share/doc" + """ + self.folder_bin="/bin" + self.folder_lib="/lib" + self.folder_data="/share" + self.folder_doc="/doc" + + self.build_done=[] self.build_tree_done=[] self.module_list=[] diff --git a/lutin/tools.py b/lutin/tools.py index 202b55e..0ab824f 100644 --- a/lutin/tools.py +++ b/lutin/tools.py @@ -11,6 +11,7 @@ import os import shutil import errno import fnmatch +import stat # Local import from . import debug from . import depend @@ -96,7 +97,7 @@ def add_prefix(prefix,list): result.append(prefix+elem) return result -def copy_file(src, dst, cmd_file=None, force=False): +def copy_file(src, dst, cmd_file=None, force=False, executable=False): if os.path.exists(src) == False: debug.error("Request a copy a file that does not existed : '" + src + "'") cmd_line = "copy \"" + src + "\" \"" + dst + "\"" @@ -106,22 +107,33 @@ def copy_file(src, dst, cmd_file=None, force=False): debug.print_element("copy file", src, "==>", dst) create_directory_of_file(dst) shutil.copyfile(src, dst) + if executable == True: + os.chmod(dst, stat.S_IRWXU + stat.S_IRGRP + stat.S_IXGRP + stat.S_IROTH + stat.S_IXOTH); store_command(cmd_line, cmd_file) -def copy_anything(src, dst): +def copy_anything(src, dst, recursive = False, executable=False): + debug.verbose(" copy anything : '" + str(src) + "'") + debug.verbose(" to : '" + str(dst) + "'") tmpPath = os.path.dirname(os.path.realpath(src)) tmpRule = os.path.basename(src) + debug.verbose(" " + str(tmpPath) + ":") for root, dirnames, filenames in os.walk(tmpPath): - debug.verbose(" root='" + str(root) + "' dir='" + str(dirnames) + "' filenames=" + str(filenames)) + deltaRoot = root[len(tmpPath):] + if recursive == False and deltaRoot != "": + return + debug.verbose(" root='" + str(deltaRoot) + "'") # dir='" + str(dirnames) + "' filenames=" + str(filenames)) tmpList = filenames if len(tmpRule)>0: tmpList = fnmatch.filter(filenames, tmpRule) # Import the module : for cycleFile in tmpList: #for cycleFile in filenames: - debug.verbose("Might copy : '" + tmpPath+cycleFile + "' ==> '" + dst + "'") - copy_file(tmpPath+"/"+cycleFile, dst+"/"+cycleFile) + debug.verbose(" '" + cycleFile + "'") + debug.extreme_verbose("Might copy : '" + tmpPath + "/" + deltaRoot + "/" + cycleFile + "' ==> '" + dst + "'") + copy_file(tmpPath + "/" + deltaRoot + "/" + cycleFile, + dst + "/" + deltaRoot + "/" + cycleFile, + executable=True) def copy_anything_target(target, src, dst): diff --git a/lutin/z_target/lutinTarget_Linux.py b/lutin/z_target/lutinTarget_Linux.py index 3a6139d..10ea0ed 100644 --- a/lutin/z_target/lutinTarget_Linux.py +++ b/lutin/z_target/lutinTarget_Linux.py @@ -14,6 +14,7 @@ import os import stat import re from lutin import host +from lutin import multiprocess class Target(target.Target): def __init__(self, config): @@ -46,7 +47,13 @@ class Target(target.Target): result += elem return result - def make_package(self, pkgName, pkgProperties, basePkgPath): + def make_package(self, pkgName, pkgProperties, basePkgPath, type="generic"): + if type == "debian": + self.make_package_debian(pkgName, pkgProperties, basePkgPath) + elif type == "generic": + self.make_package_generic(pkgName, pkgProperties, basePkgPath) + + def make_package_debian(self, pkgName, pkgProperties, basePkgPath): # http://alp.developpez.com/tutoriels/debian/creer-paquet/ debianPkgName = re.sub("_", "-", pkgName) debug.debug("------------------------------------------------------------------------") @@ -139,3 +146,117 @@ class Target(target.Target): debug.info("Un-Install package '" + pkgName + "'") debug.debug("------------------------------------------------------------------------") os.system("sudo dpkg -r " + self.get_final_folder() + "/" + pkgName + self.suffix_package) + + """ + .local/application + *--> applName -> applName.app/bin/applName + *--> applName.app + *--> appl_description.txt + *--> appl_name.txt + *--> changelog.txt + *--> copyright.txt + *--> readme.txt + *--> version.txt + *--> website.txt + *--> icon.png + *--> bin + * *--> applName + *--> doc + * *--> applName + *--> lib + * *--> XX.so + * *--> YY.so + *--> license + * *--> applName.txt + * *--> libXX.txt + * *--> libYY.txt + *--> man + *--> share + * *--> applName + * *--> XX + * *--> YY + *--> sources + """ + def make_package_generic(self, pkgName, pkgProperties, basePkgPath): + debianPkgName = re.sub("_", "-", pkgName) + debug.debug("------------------------------------------------------------------------") + debug.info("Generate generic '" + debianPkgName + "' v"+pkgProperties["VERSION"]) + debug.debug("------------------------------------------------------------------------") + targetOutFolder = self.get_staging_folder(pkgName) + "/edn.app/" + tools.create_directory_of_file(targetOutFolder) + ## Create version file + tmpFile = open(targetOutFolder + "/version.txt", 'w') + tmpFile.write(pkgProperties["VERSION"]) + tmpFile.flush() + tmpFile.close() + ## Create maintainer file + tmpFile = open(targetOutFolder + "/maintainer.txt", 'w') + tmpFile.write(self.generate_list_separate_coma(pkgProperties["MAINTAINER"])) + tmpFile.flush() + tmpFile.close() + ## Create appl_name file + tmpFile = open(targetOutFolder + "/appl_name.txt", 'w') + tmpFile.write("en_EN:" + pkgProperties["NAME"]) + tmpFile.flush() + tmpFile.close() + ## Create appl_description file + tmpFile = open(targetOutFolder + "/appl_description.txt", 'w') + tmpFile.write("en_EN:" + pkgProperties["DESCRIPTION"]) + tmpFile.flush() + tmpFile.close() + ## Create Readme file + readmeFileDest = targetOutFolder + "/readme.txt" + if os.path.exists(basePkgPath + "/os-Linux/README")==True: + tools.copy_file(basePkgPath + "/os-Linux/README", readmeFileDest) + elif os.path.exists(basePkgPath + "/README")==True: + tools.copy_file(basePkgPath + "/README", readmeFileDest) + elif os.path.exists(basePkgPath + "/README.md")==True: + tools.copy_file(basePkgPath + "/README.md", readmeFileDest) + else: + debug.info("no file 'README', 'README.md' or 'os-Linux/README' ==> generate an empty one") + tmpFile = open(readmeFileDest, 'w') + tmpFile.write("No documentation for " + pkgName + "\n") + tmpFile.flush() + tmpFile.close() + ## Create licence file + licenseFileDest = targetOutFolder + "/license/"+ debianPkgName + ".txt" + tools.create_directory_of_file(licenseFileDest) + if os.path.exists(basePkgPath + "/license.txt")==True: + tools.copy_file(basePkgPath + "/license.txt", licenseFileDest) + else: + debug.info("no file 'license.txt' ==> generate an empty one") + tmpFile = open(licenseFileDest, 'w') + tmpFile.write("No license define by the developper for " + pkgName + "\n") + tmpFile.flush() + tmpFile.close() + ## Create changeLog file + changeLogFileDest = targetOutFolder + "/changelog.txt" + if os.path.exists(basePkgPath + "/changelog") == True: + tools.copy_file(basePkgPath + "/changelog", changeLogFileDest) + else: + debug.info("no file 'changelog' ==> generate an empty one") + tmpFile = open(changeLogFileDest, 'w') + tmpFile.write("No changelog data " + pkgName + "\n") + tmpFile.flush() + tmpFile.close() + ## copy share folder + #debug.info("plop:" + self.get_staging_folder(pkgName) + self.folder_data) + if os.path.exists(self.get_staging_folder(pkgName) + self.folder_data) == True: + tools.copy_anything(self.get_staging_folder(pkgName) + self.folder_data + "/*", targetOutFolder + self.folder_data, recursive=True) + + ## Create binary folder: + bin_folder = targetOutFolder + self.folder_bin + #tools.create_directory_of_file(bin_folder) + tools.copy_anything(self.get_staging_folder(pkgName) + self.folder_bin + "/*", + bin_folder, + executable=True) + + ## create the package: + debug.debug("package : " + self.get_staging_folder(pkgName) + "/" + debianPkgName + ".app.pkg") + os.system("cd " + self.get_staging_folder(pkgName) + " ; tar -czf " + pkgName + ".app.tar.gz " + pkgName + ".app") + #multiprocess.run_command("cd " + self.get_staging_folder(pkgName) + " ; tar -czf " + pkgName + ".app.tar.gz " + pkgName + ".app") + tools.create_directory_of_file(self.get_final_folder()) + tools.copy_file(self.get_staging_folder(pkgName) + "/" + pkgName + ".app.tar.gz", self.get_final_folder() + "/" + pkgName + ".app.gpkg") + + +