[DEV] try to create generic package

This commit is contained in:
Edouard DUPIN 2015-09-08 22:19:18 +02:00
parent ca67cb4c26
commit 10c0f98cef
3 changed files with 147 additions and 6 deletions

View File

@ -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=[]

View File

@ -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):

View File

@ -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")