[DEV] zip data for windows and create a zip package for final output

This commit is contained in:
Edouard DUPIN 2016-10-05 22:57:30 +02:00
parent 092843cd02
commit 71e0f242bf
7 changed files with 495 additions and 399 deletions

View File

@ -780,6 +780,7 @@ class Target:
## @param[in] static The package is build in static mode ## @param[in] static The package is build in static mode
## ##
def make_package(self, pkg_name, pkg_properties, base_pkg_path, heritage_list): def make_package(self, pkg_name, pkg_properties, base_pkg_path, heritage_list):
debug.debug("make_package [START]")
#The package generated depend of the type of the element: #The package generated depend of the type of the element:
end_point_module_name = heritage_list.list_heritage[-1].name end_point_module_name = heritage_list.list_heritage[-1].name
module = self.get_module(end_point_module_name) module = self.get_module(end_point_module_name)
@ -801,6 +802,7 @@ class Target:
if module.get_type() == 'PACKAGE': if module.get_type() == 'PACKAGE':
debug.info("Can not create package for package"); debug.info("Can not create package for package");
return return
debug.debug("make_package [STOP]")
return return
## ##
@ -813,6 +815,7 @@ class Target:
## @return False Nothing has been copied ## @return False Nothing has been copied
## ##
def make_package_binary_data(self, path_package, pkg_name, base_pkg_path, heritage_list, static): def make_package_binary_data(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
debug.debug("make_package_binary_data [START]")
target_shared_path = os.path.join(path_package, self.pkg_path_data) target_shared_path = os.path.join(path_package, self.pkg_path_data)
if static == True: if static == True:
path_package_data = os.path.join(target_shared_path, pkg_name) path_package_data = os.path.join(target_shared_path, pkg_name)
@ -847,6 +850,7 @@ class Target:
ret_copy = tools.copy_list(copy_list) ret_copy = tools.copy_list(copy_list)
# remove unneded files (NOT folder ...) # remove unneded files (NOT folder ...)
ret_remove = tools.clean_directory(target_shared_path, copy_list) ret_remove = tools.clean_directory(target_shared_path, copy_list)
debug.debug("make_package_binary_data [STOP]")
return ret_copy or ret_remove return ret_copy or ret_remove
## ##
@ -859,6 +863,7 @@ class Target:
## @return False Nothing has been copied ## @return False Nothing has been copied
## ##
def make_package_binary_bin(self, path_package, pkg_name, base_pkg_path, heritage_list, static): def make_package_binary_bin(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
debug.debug("make_package_binary_bin [START]")
copy_list={} copy_list={}
path_package_bin = os.path.join(path_package, self.pkg_path_bin) path_package_bin = os.path.join(path_package, self.pkg_path_bin)
tools.create_directory_of_file(path_package_bin) tools.create_directory_of_file(path_package_bin)
@ -874,6 +879,7 @@ class Target:
if self.pkg_path_bin != "": if self.pkg_path_bin != "":
# remove unneded files (NOT folder ...) # remove unneded files (NOT folder ...)
ret_remove = tools.clean_directory(path_package_bin, copy_list) ret_remove = tools.clean_directory(path_package_bin, copy_list)
debug.debug("make_package_binary_bin [STOP]")
return ret_copy or ret_remove return ret_copy or ret_remove
## ##
@ -886,6 +892,7 @@ class Target:
## @return False Nothing has been copied ## @return False Nothing has been copied
## ##
def make_package_binary_lib(self, path_package, pkg_name, base_pkg_path, heritage_list, static): def make_package_binary_lib(self, path_package, pkg_name, base_pkg_path, heritage_list, static):
debug.debug("make_package_binary_lib [START]")
copy_list={} copy_list={}
path_package_lib = os.path.join(path_package, self.pkg_path_lib) path_package_lib = os.path.join(path_package, self.pkg_path_lib)
if static == False: if static == False:
@ -909,10 +916,12 @@ class Target:
if self.pkg_path_lib != "": if self.pkg_path_lib != "":
# remove unneded files (NOT folder ...) # remove unneded files (NOT folder ...)
ret_remove = tools.clean_directory(path_package_lib, copy_list) ret_remove = tools.clean_directory(path_package_lib, copy_list)
debug.debug("make_package_binary_lib [STOP]")
return ret_copy or ret_remove return ret_copy or ret_remove
def make_package_generic_files(self, path_package, pkg_properties, pkg_name, base_pkg_path, heritage_list, static): def make_package_generic_files(self, path_package, pkg_properties, pkg_name, base_pkg_path, heritage_list, static):
debug.debug("make_package_generic_files [START]")
## Create version file: ## Create version file:
ret_version = tools.file_write_data(os.path.join(path_package, self.pkg_path_version_file), ret_version = tools.file_write_data(os.path.join(path_package, self.pkg_path_version_file),
tools.version_to_string(pkg_properties["VERSION"]), tools.version_to_string(pkg_properties["VERSION"]),
@ -973,6 +982,7 @@ class Target:
ret_changelog = tools.file_write_data(change_log_file_dest, ret_changelog = tools.file_write_data(change_log_file_dest,
"No changelog data " + pkg_name + "\n", "No changelog data " + pkg_name + "\n",
only_if_new=True) only_if_new=True)
debug.debug("make_package_generic_files [STOP]")
return ret_version \ return ret_version \
or ret_maintainer \ or ret_maintainer \
or ret_appl_name \ or ret_appl_name \

View File

@ -63,16 +63,28 @@ class Target(lutinTarget_Linux.Target):
tools.create_directory_of_file(target_outpath) tools.create_directory_of_file(target_outpath)
## Create share datas: ## Create share datas:
self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_share = self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## copy binary files: ## copy binary files:
self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_bin = self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create libraries: ## Create libraries:
self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files: ## Create generic files:
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## end of the package generation
build_package_path_done = os.path.join(self.get_build_path(pkg_name), "generatePackageDone.txt")
#Check date between the current file "list of action to generate package and the end of package generation
need_generate_package = depend.need_re_package(build_package_path_done, [__file__], True)
## create the package:
if ret_share \
or ret_bin \
or ret_lib \
or ret_file \
or need_generate_package:
""" """
## create the package: ## create the package:
debug.debug("package : " + self.get_staging_path(pkg_name) + "/" + pkg_name + ".app.pkg") debug.debug("package : " + self.get_staging_path(pkg_name) + "/" + pkg_name + ".app.pkg")
@ -158,6 +170,9 @@ class Target(lutinTarget_Linux.Target):
tools.create_directory_of_file(self.get_final_path()) tools.create_directory_of_file(self.get_final_path())
tools.copy_file(self.get_staging_path("") + "/" + pkg_name + self.suffix_package, self.get_final_path() + "/" + pkg_name + self.suffix_package) tools.copy_file(self.get_staging_path("") + "/" + pkg_name + self.suffix_package, self.get_final_path() + "/" + pkg_name + self.suffix_package)
# package is done corectly ...
tools.file_write_data(build_package_path_done, "done...")
def install_package(self, pkg_name): def install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Install package '" + pkg_name + "'") debug.info("Install package '" + pkg_name + "'")

View File

@ -105,17 +105,28 @@ class Target(target.Target):
tools.create_directory_of_file(target_outpath) tools.create_directory_of_file(target_outpath)
## Create share datas: ## Create share datas:
self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_share = self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## copy binary files: ## copy binary files:
self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_bin = self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create libraries: ## Create libraries:
self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files: ## Create generic files:
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## end of the package generation
build_package_path_done = os.path.join(self.get_build_path(pkg_name), "generatePackageDone.txt")
#Check date between the current file "list of action to generate package and the end of package generation
need_generate_package = depend.need_re_package(build_package_path_done, [__file__], True)
## create the package:
if ret_share \
or ret_bin \
or ret_lib \
or ret_file \
or need_generate_package:
## Create icon: ## Create icon:
if "ICON" in pkg_properties.keys() \ if "ICON" in pkg_properties.keys() \
and pkg_properties["ICON"] != "": and pkg_properties["ICON"] != "":
@ -362,6 +373,8 @@ class Target(target.Target):
cmdLine += ' --entitlements ' + os.path.join(self.get_build_path(pkg_name), pkg_name + ".xcent") cmdLine += ' --entitlements ' + os.path.join(self.get_build_path(pkg_name), pkg_name + ".xcent")
cmdLine += ' ' + os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app") cmdLine += ' ' + os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app")
multiprocess.run_command(cmdLine) multiprocess.run_command(cmdLine)
# package is done corectly ...
tools.file_write_data(build_package_path_done, "done...")
def create_random_number(self, len): def create_random_number(self, len):
out = "" out = ""

View File

@ -103,16 +103,24 @@ class Target(target.Target):
## Create generic files: ## Create generic files:
ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## end of the package generation
build_package_path_done = os.path.join(self.get_build_path(pkg_name), "generatePackageDone.txt")
#Check date between the current file "list of action to generate package and the end of package generation
need_generate_package = depend.need_re_package(build_package_path_done, [__file__], True)
## create the package: ## create the package:
if ret_share \ if ret_share \
or ret_bin \ or ret_bin \
or ret_lib \ or ret_lib \
or ret_file: or ret_file \
or need_generate_package:
debug.debug("package : " + os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.pkg")) debug.debug("package : " + os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.pkg"))
os.system("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app") os.system("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
#multiprocess.run_command("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app") #multiprocess.run_command("cd " + self.get_staging_path(pkg_name) + " ; tar -czf " + pkg_name + ".app.tar.gz " + pkg_name + ".app")
tools.create_directory_of_file(self.get_final_path()) tools.create_directory_of_file(self.get_final_path())
tools.copy_file(os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.tar.gz"), os.path.join(self.get_final_path(), pkg_name + ".app.gpkg")) tools.copy_file(os.path.join(self.get_staging_path(pkg_name), pkg_name + ".app.tar.gz"), os.path.join(self.get_final_path(), pkg_name + ".app.gpkg"))
# package is done corectly ...
tools.file_write_data(build_package_path_done, "done...")
def install_package(self, pkg_name): def install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")

View File

@ -71,16 +71,28 @@ class Target(target.Target):
tools.create_directory_of_file(target_outpath) tools.create_directory_of_file(target_outpath)
## Create share datas: ## Create share datas:
self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_share = self.make_package_binary_data(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## copy binary files: ## copy binary files:
self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_bin = self.make_package_binary_bin(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create libraries: ## Create libraries:
self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files: ## Create generic files:
self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
## end of the package generation
build_package_path_done = os.path.join(self.get_build_path(pkg_name), "generatePackageDone.txt")
#Check date between the current file "list of action to generate package and the end of package generation
need_generate_package = depend.need_re_package(build_package_path_done, [__file__], True)
## create the package:
if ret_share \
or ret_bin \
or ret_lib \
or ret_file \
or need_generate_package:
## Create icon (no convertion ==> TODO: must test if png is now supported): ## Create icon (no convertion ==> TODO: must test if png is now supported):
if "ICON" in pkg_properties.keys() \ if "ICON" in pkg_properties.keys() \
@ -138,6 +150,7 @@ class Target(target.Target):
## user information: ## user information:
#debug.info("You can have an shell interface by executing : ") #debug.info("You can have an shell interface by executing : ")
#debug.info(" sudo cp " + shell_file_name + " /usr/local/bin") #debug.info(" sudo cp " + shell_file_name + " /usr/local/bin")
tools.file_write_data(build_package_path_done, "done...")
def install_package(self, pkg_name): def install_package(self, pkg_name):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")

View File

@ -12,6 +12,7 @@ from lutin import debug
from lutin import target from lutin import target
from lutin import tools from lutin import tools
from lutin import host from lutin import host
from lutin import depend
import os import os
import stat import stat
import sys import sys
@ -71,8 +72,8 @@ class Target(target.Target):
self.support_dynamic_link = False self.support_dynamic_link = False
def get_staging_path_data(self, binary_name, heritage_list): def get_staging_path_data(self, binary_name):
return self.get_staging_path(binary_name) + self.path_data return os.path.join(self.get_staging_path(binary_name), binary_name + ".app", self.pkg_path_data)
def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static): def make_package_binary(self, pkg_name, pkg_properties, base_pkg_path, heritage_list, static):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
@ -92,14 +93,34 @@ class Target(target.Target):
ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static) ret_lib = self.make_package_binary_lib(target_outpath, pkg_name, base_pkg_path, heritage_list, static)
## Create generic files: ## Create generic files:
ret_file = self.make_package_generic_files(target_outpath, pkg_properties, pkg_name, base_pkg_path, heritage_list, static) ret_file = self.make_package_generic_files(target_outpath+"/pkg", pkg_properties, pkg_name, base_pkg_path, heritage_list, static)
build_package_path_done = os.path.join(self.get_build_path(pkg_name), "generatePackageDone.txt")
#Check date between the current file "list of action to generate package and the end of package generation
need_generate_package = depend.need_re_package(build_package_path_done, [__file__], True)
## create the package: ## create the package:
if ret_share \ if ret_share \
or ret_bin \ or ret_bin \
or ret_lib \ or ret_lib \
or ret_file: or ret_file \
debug.info("TODO: create a windows pkg ...") or need_generate_package:
# Zip the data
debug.print_element("zip", "data.zip", "<==", self.get_staging_path_data(pkg_name) + "/*")
zip_path = os.path.join(self.get_staging_path(pkg_name), "data.zip")
zip.create_zip([
self.get_staging_path_data(pkg_name),
target_outpath+"/pkg"
], zip_path)
zip_path_final = os.path.join(self.get_final_path(), pkg_name + ".zip")
# generate deployed zip (for user)
debug.print_element("zip", pkg_name + ".zip", "<==", self.get_staging_path(pkg_name))
zip.create_zip_file([
zip_path,
os.path.join(target_outpath, pkg_name + self.suffix_binary)
],
zip_path_final)
tools.file_write_data(build_package_path_done, "done...")
def make_package_single_file(self, pkg_name, pkg_properties, base_pkg_path, heritage_list): def make_package_single_file(self, pkg_name, pkg_properties, base_pkg_path, heritage_list):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")

View File

@ -18,15 +18,31 @@ from . import tools
def create_zip(path, outputFile): def create_zip(path, outputFile):
debug.debug("Create Zip : '" + outputFile + "'") debug.debug("Create Zip : '" + outputFile + "'")
debug.debug(" from '" + path + "'") tools.create_directory_of_file(outputFile)
basePathlen = len(path) debug.debug(" from '" + str(path) + "'")
if tools.get_type_string(path) == "string":
path = [path]
zf = zipfile.ZipFile(outputFile, mode='w') zf = zipfile.ZipFile(outputFile, mode='w')
for root, dirnames, filenames in os.walk(path): for elem in path:
basePathlen = len(elem)
for root, dirnames, filenames in os.walk(elem):
# List all files : # List all files :
for filename in filenames: for filename in filenames:
file = os.path.join(root, filename) file = os.path.join(root, filename)
debug.verbose(" ADD zip = " + str(file)) debug.verbose(" ADD zip = " + str(file) + " ==> " +file[basePathlen:])
zf.write(file, file[basePathlen:]) zf.write(file, file[basePathlen:])
zf.close() zf.close()
def create_zip_file(files, outputFile):
debug.debug("Create Zip : '" + outputFile + "'")
tools.create_directory_of_file(outputFile)
debug.debug(" from '" + str(files) + "'")
if tools.get_type_string(files) == "string":
files = [files]
zf = zipfile.ZipFile(outputFile, mode='w')
for elem in files:
debug.verbose(" ADD zip = " + str(elem) + " ==> " + elem[len(os.path.dirname(elem)):])
zf.write(elem, elem[len(os.path.dirname(elem)):])
zf.close()