make_distrib improvements:

- Windows: Change the directory and build structure to match other platforms.
- Windows: Create archives of both Debug and Release symbols.
- Windows: Create a separate archive for documentation.
- Add a new "client" mode flag that creates a distribution of cefclient.
- Add "no-docs" and "no-archive" flags.
- Break README.txt files into separate components that can be shared between platforms and distribution modes.

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1212 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2013-04-11 23:07:43 +00:00
parent 35c03f7b5a
commit b18edbac6f
18 changed files with 696 additions and 540 deletions

View File

@ -127,6 +127,18 @@ parser.add_option('--minimal-distrib',
parser.add_option('--minimal-distrib-only',
action='store_true', dest='minimaldistribonly', default=False,
help='create a minimal CEF binary distribution only')
parser.add_option('--client-distrib',
action='store_true', dest='clientdistrib', default=False,
help='create a client CEF binary distribution')
parser.add_option('--client-distrib-only',
action='store_true', dest='clientdistribonly', default=False,
help='create a client CEF binary distribution only')
parser.add_option('--no-distrib-docs',
action='store_true', dest='nodistribdocs', default=False,
help="don't create CEF documentation")
parser.add_option('--no-distrib-archive',
action='store_true', dest='nodistribarchive', default=False,
help="don't create archives for output directories")
parser.add_option('--ninja-build',
action='store_true', dest='ninjabuild', default=False,
help="build using ninja")
@ -140,7 +152,9 @@ if options.downloaddir is None:
parser.print_help(sys.stderr)
sys.exit()
if options.noreleasebuild and (options.minimaldistrib or options.minimaldistribonly):
if (options.noreleasebuild and (options.minimaldistrib or options.minimaldistribonly or \
options.clientdistrib or options.clientdistribonly)) or \
(options.minimaldistribonly and options.clientdistribonly):
print 'Invalid combination of options'
parser.print_help(sys.stderr)
sys.exit()
@ -424,22 +438,43 @@ if any_changed or options.forcebuild:
run(path+' Release', cef_tools_dir, depot_tools_dir)
if (any_changed or options.forcedistrib) and not options.nodistrib:
# make a CEF binary distribution
make_minimal = options.minimaldistrib or options.minimaldistribonly
path = os.path.join(cef_tools_dir, 'make_distrib'+script_ext)
if options.ninjabuild:
path = path + ' --ninja-build'
if options.nodebugbuild or options.noreleasebuild or make_minimal:
path = path + ' --allow-partial'
# determine the requested distribution types
distrib_types = []
if options.minimaldistribonly:
distrib_types.append('minimal')
elif options.clientdistribonly:
distrib_types.append('client')
else:
distrib_types.append('standard')
if options.minimaldistrib:
distrib_types.append('minimal')
if options.clientdistrib:
distrib_types.append('client')
if not options.minimaldistribonly:
# create the full distribution
run(path, cef_tools_dir, depot_tools_dir)
first_type = True
if make_minimal:
# create the minimial distribution
path = path + ' --minimal'
if not options.minimaldistribonly:
# don't create the symbol archive twice
path = path + ' --no-symbols'
# create the requested distribution types
for type in distrib_types:
path = os.path.join(cef_tools_dir, 'make_distrib'+script_ext)
if options.nodebugbuild or options.noreleasebuild or type != 'standard':
path = path + ' --allow-partial'
if options.ninjabuild:
path = path + ' --ninja-build'
if type == 'minimal':
path = path + ' --minimal'
elif type == 'client':
path = path + ' --client'
if first_type:
if options.nodistribdocs:
path = path + ' --no-docs'
if options.nodistribarchive:
path = path + ' --no-archive'
first_type = False
else:
# don't create the symbol archives or documentation more than once
path = path + ' --no-symbols --no-docs'
# create the distribution
run(path, cef_tools_dir, depot_tools_dir)

View File

@ -0,0 +1,12 @@
CONTENTS
--------
Release Contains a release build of the cefclient sample application.
USAGE
-----
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -0,0 +1,8 @@
LICENSING
---------
The CEF project is BSD licensed. Please read the LICENSE.txt file included with
this binary distribution for licensing terms and conditions. Other software
included in this distribution is provided under other licenses. Please visit
"about:credits" in a CEF-based application for complete Chromium and third-party
licensing information.

View File

@ -0,0 +1,12 @@
Chromium Embedded Framework (CEF) $DISTRIB_TYPE$ Binary Distribution for $PLATFORM$
-------------------------------------------------------------------------------
Date: $DATE$
CEF Version: $CEF_VER$
CEF URL: $CEF_URL$@$CEF_REV$
Chromium Verison: $CHROMIUM_VER$
Chromium URL: $CHROMIUM_URL$@$CHROMIUM_REV$
$DISTRIB_DESC$

View File

@ -59,6 +59,34 @@
},
'conditions': [
['OS=="win"', {
'actions': [
{
'action_name': 'copy_resources',
'msvs_cygwin_shell': 0,
'inputs': [],
'outputs': [
'<(PRODUCT_DIR)/copy_resources.stamp',
],
'action': [
'xcopy /efy',
'Resources\*',
'$(OutDir)',
],
},
{
'action_name': 'copy_libraries',
'msvs_cygwin_shell': 0,
'inputs': [],
'outputs': [
'<(PRODUCT_DIR)/copy_resources.stamp',
],
'action': [
'xcopy /efy',
'$(ConfigurationName)\*.dll',
'$(OutDir)',
],
},
],
'msvs_settings': {
'VCLinkerTool': {
# Set /SUBSYSTEM:WINDOWS.
@ -73,7 +101,7 @@
'-lrpcrt4.lib',
'-lopengl32.lib',
'-lglu32.lib',
'-llib/$(ConfigurationName)/libcef.lib'
'-l$(ConfigurationName)/libcef.lib'
],
},
'sources': [

View File

@ -0,0 +1,17 @@
CONTENTS
--------
Release Contains libcef.so and other components required to run the release
version of CEF-based applications. By default these files should be
placed in the same directory as the executable.
Resources Contains resources required by libcef.so. By default these files
should be placed in the same directory as libcef.so.
USAGE
-----
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -0,0 +1,31 @@
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.so
Optional components:
* Localized resources
locales/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the value of environment variables which are read
with the following precedence order: LANGUAGE, LC_ALL, LC_MESSAGES and LANG.
Only configured locales need to be distributed. If no locale is configured the
default locale of "en-US" will be used. Locale file loading can be disabled
completely using CefSettings.pack_loading_disabled. The locales folder path
can be customized using CefSettings.locales_dir_path.
* Other resources
cef.pak
devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.

View File

@ -0,0 +1,34 @@
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.so and other components required to run the debug
version of CEF-based applications. By default these files should be
placed in the same directory as the executable and will be copied
there as part of the build process.
include Contains all required CEF header files.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.so and other components required to run the release
version of CEF-based applications. By default these files should be
placed in the same directory as the executable and will be copied
there as part of the build process.
Resources Contains resources required by libcef.so. By default these files
should be placed in the same directory as libcef.so and will be
copied there as part of the build process.
USAGE
-----
Run 'build.sh Debug' to build the cefclient target in Debug mode.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -1,96 +0,0 @@
Chromium Embedded Framework (CEF) Binary Distribution
-------------------------------------------------------------------------------
Date: $DATE$
CEF Version: $CEF_VER$
CEF URL: $CEF_URL$@$CEF_REV$
Chromium Verison: $CHROMIUM_VER$
Chromium URL: $CHROMIUM_URL$@$CHROMIUM_REV$
This distribution contains all components necessary to build and distribute an
application using CEF. Please see the LICENSING section of this document for
licensing terms and conditions.
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.so and other components required to run the debug
version of CEF-based applications. By default these files should be
placed in the same directory as the executable and will be copied
there as part of the build process.
docs Contains C++ API documentation generated from the CEF header files.
include Contains all required CEF header files.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.so and other components required to run the release
version of CEF-based applications. By default these files should be
placed in the same directory as the executable and will be copied
there as part of the build process.
Resources Contains resources required by libcef.so. By default these files
should be placed in the same directory as libcef.so and will be
copied there as part of the build process.
USAGE
-----
Run 'build.sh Debug' to build the cefclient target in Debug mode.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.so
Optional components:
* Localized resources
locales/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the value of environment variables which are read
with the following precedence order: LANGUAGE, LC_ALL, LC_MESSAGES and LANG.
Only configured locales need to be distributed. If no locale is configured the
default locale of "en-US" will be used. Locale file loading can be disabled
completely using CefSettings.pack_loading_disabled. The locales folder path
can be customized using CefSettings.locales_dir_path.
* Other resources
cef.pak
devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
LICENSING
---------
The CEF project is BSD licensed. Please read the LICENSE.txt file included with
this binary distribution for licensing terms and conditions. Other software
included in this distribution is provided under other licenses. Please visit
"about:credits" in a CEF-based application for complete Chromium and third-party
licensing information.

View File

@ -0,0 +1,17 @@
CONTENTS
--------
Release Contains libcef.dylib and other components required to run the
release version of CEF-based applications.
Resources Contains images and resources required by applications using CEF.
The contents of this folder should be transferred to the
Contents/Resources folder in the app bundle.
USAGE
-----
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -0,0 +1,37 @@
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.dylib
* Cursor resources
Resources/*.png
Resources/*.tiff
Optional components:
* Localized resources
Resources/*.lproj/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the CefSettings.locale value. Only configured
locales need to be distributed. If no locale is configured the default locale
of "en" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled.
* Other resources
Resources/cef.pak
Resources/devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
* FFmpeg audio and video support
ffmpegsumo.so
Note: Without this component HTML5 audio and video will not function.

View File

@ -0,0 +1,36 @@
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.dylib and other components required to run the debug
version of CEF-based applications.
include Contains all required CEF header files.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.dylib and other components required to run the
release version of CEF-based applications.
Resources Contains images and resources required by applications using CEF.
The contents of this folder should be transferred to the
Contents/Resources folder in the app bundle.
tools Scripts that perform post-processing on Mac release targets.
USAGE
-----
Xcode 3 and 4: Open the cefclient.xcodeproj project and build.
When using Xcode 4.2 or newer you will need to change the "Compiler for
C/C++/Objective-C" setting to "LLVM GCC 4.2" under "Build Settings" for
each target.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -1,104 +0,0 @@
Chromium Embedded Framework (CEF) Binary Distribution
-------------------------------------------------------------------------------
Date: $DATE$
CEF Version: $CEF_VER$
CEF URL: $CEF_URL$@$CEF_REV$
Chromium Verison: $CHROMIUM_VER$
Chromium URL: $CHROMIUM_URL$@$CHROMIUM_REV$
This distribution contains all components necessary to build and distribute an
application using CEF. Please see the LICENSING section of this document for
licensing terms and conditions.
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.dylib and other components required to run the debug
version of CEF-based applications.
docs Contains C++ API documentation generated from the CEF header files.
include Contains all required CEF header files.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.dylib and other components required to run the
release version of CEF-based applications.
Resources Contains images and resources required by applications using CEF.
The contents of this folder should be transferred to the
Contents/Resources folder in the app bundle.
tools Scripts that perform post-processing on Mac release targets.
USAGE
-----
Xcode 3 and 4: Open the cefclient.xcodeproj project and build.
When using Xcode 4.2 or newer you will need to change the "Compiler for
C/C++/Objective-C" setting to "LLVM GCC 4.2" under "Build Settings" for
each target.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.dylib
* Cursor resources
Resources/*.png
Resources/*.tiff
Optional components:
* Localized resources
Resources/*.lproj/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the CefSettings.locale value. Only configured
locales need to be distributed. If no locale is configured the default locale
of "en" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled.
* Other resources
Resources/cef.pak
Resources/devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
* FFmpeg audio and video support
ffmpegsumo.so
Note: Without this component HTML5 audio and video will not function.
LICENSING
---------
The CEF project is BSD licensed. Please read the LICENSE.txt file included with
this binary distribution for licensing terms and conditions. Other software
included in this distribution is provided under other licenses. Please visit
"about:credits" in a CEF-based application for complete Chromium and third-party
licensing information.

View File

@ -0,0 +1,19 @@
CONTENTS
--------
Release Contains libcef.dll, libcef.lib and other components required to
build and run the release version of CEF-based applications. By
default these files should be placed in the same directory as the
executable.
Resources Contains resources required by libcef.dll. By default these files
should be placed in the same directory as libcef.dll. By default
these files should be placed in the same directory as libcef.dll.
USAGE
-----
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -0,0 +1,45 @@
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.dll
* Unicode support
icudt.dll
Optional components:
* Localized resources
locales/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the CefSettings.locale value. Only configured
locales need to be distributed. If no locale is configured the default locale
of "en-US" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled. The locales folder path can be customized
using CefSettings.locales_dir_path.
* Other resources
cef.pak
devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
* FFmpeg audio and video support
ffmpegsumo.dll
Note: Without this component HTML5 audio and video will not function.
* Angle and Direct3D support
d3dcompiler_43.dll (required for Windows XP)
d3dcompiler_46.dll (required for Windows Vista and newer)
libEGL.dll
libGLESv2.dll
Note: Without these components HTML5 accelerated content like 2D canvas, 3D
CSS and WebGL will not function.

View File

@ -0,0 +1,46 @@
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.dll, libcef.lib and other components required to
build and run the debug version of CEF-based applications. By
default these files should be placed in the same directory as the
executable and will be copied there as part of the build process.
include Contains all required CEF header files.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.dll, libcef.lib and other components required to
build and run the release version of CEF-based applications. By
default these files should be placed in the same directory as the
executable and will be copied there as part of the build process.
Resources Contains resources required by libcef.dll. By default these files
should be placed in the same directory as libcef.dll. By default
these files should be placed in the same directory as libcef.dll
and will be copied there as part of the build process.
USAGE
-----
Visual Studio 2012 and Visual Studio 2010:
Open the cefclient2010.sln solution in Visual Studio and build.
Visual Studio 2008:
Open the cefclient2008.sln solution in Visual Studio and build.
Visual Studio 2005:
1. Open the cefclient.vcproj and libcef_dll_wrapper.vcproj files in a text
editor. Change Version="9.00" to Version="8.00".
2. Open the cefclient2005.sln file in a text editor. Change "Version 9.00" to
"Version 8.00".
3. Open the cefclient2005.sln solution in Visual Studio and build.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded

View File

@ -1,118 +0,0 @@
Chromium Embedded Framework (CEF) Binary Distribution
-------------------------------------------------------------------------------
Date: $DATE$
CEF Version: $CEF_VER$
CEF URL: $CEF_URL$@$CEF_REV$
Chromium Verison: $CHROMIUM_VER$
Chromium URL: $CHROMIUM_URL$@$CHROMIUM_REV$
This distribution contains all components necessary to build and distribute an
application using CEF. Please see the LICENSING section of this document for
licensing terms and conditions.
CONTENTS
--------
cefclient Contains the cefclient sample application configured to build
using the files in this distribution.
Debug Contains libcef.dll and other components required to run the debug
version of CEF-based applications. Also acts as the build target for
the Debug build of cefclient.
docs Contains C++ API documentation generated from the CEF header files.
include Contains all required CEF header files.
lib Contains Debug and Release versions of the libcef.lib library file
that all CEF-based applications must link against.
libcef_dll Contains the source code for the libcef_dll_wrapper static library
that all applications using the CEF C++ API must link against.
Release Contains libcef.dll and other components required to run the release
version of CEF-based applications. Also acts as the build target for
the Release build of cefclient.
USAGE
-----
Visual Studio 2012 and Visual Studio 2010:
Open the cefclient2010.sln solution in Visual Studio and build.
Visual Studio 2008:
Open the cefclient2008.sln solution in Visual Studio and build.
Visual Studio 2005:
1. Open the cefclient.vcproj and libcef_dll_wrapper.vcproj files in a text
editor. Change Version="9.00" to Version="8.00".
2. Open the cefclient2005.sln file in a text editor. Change "Version 9.00" to
"Version 8.00".
3. Open the cefclient2005.sln solution in Visual Studio and build.
Please visit the CEF Website for additional usage information.
http://code.google.com/p/chromiumembedded
REDISTRIBUTION
--------------
This binary distribution contains the below components. Components listed under
the "required" section must be redistributed with all applications using CEF.
Components listed under the "optional" section may be excluded if the related
features will not be used.
Required components:
* CEF core library
libcef.dll
* Unicode support
icudt.dll
Optional components:
* Localized resources
locales/
Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
from this folder based on the CefSettings.locale value. Only configured
locales need to be distributed. If no locale is configured the default locale
of "en-US" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled. The locales folder path can be customized
using CefSettings.locales_dir_path.
* Other resources
cef.pak
devtools_resources.pak
Note: Contains WebKit image and inspector resources. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
* FFmpeg audio and video support
ffmpegsumo.dll
Note: Without this component HTML5 audio and video will not function.
* Angle and Direct3D support
d3dcompiler_43.dll (required for Windows XP)
d3dcompiler_46.dll (required for Windows Vista and newer)
libEGL.dll
libGLESv2.dll
Note: Without these components HTML5 accelerated content like 2D canvas, 3D
CSS and WebGL will not function.
LICENSING
---------
The CEF project is BSD licensed. Please read the LICENSE.txt file included with
this binary distribution for licensing terms and conditions. Other software
included in this distribution is provided under other licenses. Please visit
"about:credits" in a CEF-based application for complete Chromium and third-party
licensing information.

View File

@ -28,10 +28,47 @@ def create_archive(input_dir, zip_file):
addDir(input_dir)
zf.close()
def create_readme(src, output_dir, cef_url, cef_rev, cef_ver, chromium_url, \
chromium_rev, chromium_ver, date):
def create_output_dir(name, parent_dir):
""" Creates an output directory and adds the path to the archive list. """
output_dir = os.path.abspath(os.path.join(parent_dir, name))
remove_dir(output_dir, options.quiet)
make_dir(output_dir, options.quiet)
archive_dirs.append(output_dir)
return output_dir
def get_readme_component(name):
""" Loads a README file component. """
paths = []
# platform directory
if platform == 'windows':
platform_cmp = 'win'
elif platmform == 'macosx':
platform_cmp = 'mac'
elif platform == 'linux':
platform_cmp = 'linux'
paths.append(os.path.join(script_dir, 'distrib', platform_cmp))
# shared directory
paths.append(os.path.join(script_dir, 'distrib'))
# load the file if it exists
for path in paths:
file = os.path.join(path, 'README.' +name + '.txt')
if path_exists(file):
return read_file(file)
raise Exception('Readme component not found: ' + name)
def create_readme():
""" Creates the README.TXT file. """
data = read_file(src)
# gather the components
header_data = get_readme_component('header')
mode_data = get_readme_component(mode)
redistrib_data = get_readme_component('redistrib')
footer_data = get_readme_component('footer')
# format the file
data = header_data + '\n\n' + mode_data + '\n\n' + redistrib_data + '\n\n' + footer_data
data = data.replace('$CEF_URL$', cef_url)
data = data.replace('$CEF_REV$', cef_rev)
data = data.replace('$CEF_VER$', cef_ver)
@ -39,6 +76,35 @@ def create_readme(src, output_dir, cef_url, cef_rev, cef_ver, chromium_url, \
data = data.replace('$CHROMIUM_REV$', chromium_rev)
data = data.replace('$CHROMIUM_VER$', chromium_ver)
data = data.replace('$DATE$', date)
if platform == 'windows':
platform_str = 'Windows'
elif platmform == 'macosx':
platform_str = 'Mac OS-X'
elif platform == 'linux':
platform_str = 'Linux'
data = data.replace('$PLATFORM$', platform_str)
if mode == 'standard':
distrib_type = 'Standard'
distrib_desc = 'This distribution contains all components necessary to build and distribute an\n' \
'application using CEF on the ' + platform_str + ' platform. Please see the LICENSING\n' \
'section of this document for licensing terms and conditions.'
elif mode == 'minimal':
distrib_type = 'Minimal'
distrib_desc = 'This distribution contains only the components required to distribute an\n' \
'application using CEF on the ' + platform_str + ' platform. Please see the LICENSING\n' \
'section of this document for licensing terms and conditions.'
elif mode == 'client':
distrib_type = 'Client'
distrib_desc = 'This distribution contains a release build of the cefclient sample application\n' \
'for the ' + platform_str + ' platform. Please see the LICENSING section of this document for\n' \
'licensing terms and conditions.'
data = data.replace('$DISTRIB_TYPE$', distrib_type)
data = data.replace('$DISTRIB_DESC$', distrib_desc)
write_file(os.path.join(output_dir, 'README.txt'), data)
if not options.quiet:
sys.stdout.write('Creating README.TXT file.\n')
@ -108,8 +174,13 @@ def generate_msvs_projects(version):
move_file(os.path.relpath(os.path.join(output_dir, 'cefclient.sln')), \
os.path.relpath(os.path.join(output_dir, 'cefclient'+version+'.sln')))
def fix_msvs_projects():
""" Fix the output directory path in all .vcproj and .vcxproj files. """
def create_msvs_projects():
""" Create MSVS project files. """
generate_msvs_projects('2005');
generate_msvs_projects('2008');
generate_msvs_projects('2010');
# Fix the output directory path in all .vcproj and .vcxproj files.
files = []
for file in get_files(os.path.join(output_dir, '*.vcproj')):
files.append(file)
@ -117,12 +188,52 @@ def fix_msvs_projects():
files.append(file)
for file in files:
data = read_file(file)
data = data.replace('../../..\\build\\', '')
data = data.replace('..\\..\\..\\build\\', '')
# fix the build directory path
data = data.replace('../../..\\build\\', 'out\\')
data = data.replace('..\\..\\..\\build\\', 'out\\')
# fix xcopy arguments
data = data.replace('xcopy \\', 'xcopy /')
write_file(file, data)
def fix_make_projects():
""" Fix the output directory path in Makefile all .mk files. """
def create_xcode_projects():
""" Create Xcode project files. """
sys.stdout.write('Generating Xcode project files...')
os.environ['GYP_GENERATORS'] = 'xcode'
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper);
# Post-process the Xcode project to fix file paths
src_file = os.path.join(output_dir, 'cefclient.xcodeproj/project.pbxproj')
data = read_file(src_file)
data = data.replace('../../../build/mac/', 'tools/')
data = data.replace('../../../build', 'build')
data = data.replace('../../../xcodebuild', 'xcodebuild')
write_file(src_file, data)
def create_make_projects():
""" Create make project files. """
makefile = os.path.join(src_dir, 'Makefile')
makefile_tmp = ''
if path_exists(makefile):
# Back up the existing Makefile
makefile_tmp = makefile + '.cef_bak'
copy_file(makefile, makefile_tmp, options.quiet)
# Generate make project files
sys.stdout.write('Generating make project files...')
os.environ['GYP_GENERATORS'] = 'make'
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper);
# Copy the resulting Makefile to the destination directory
copy_file(makefile, output_dir, options.quiet)
remove_file(makefile, options.quiet)
if makefile_tmp != '':
# Restore the original Makefile
move_file(makefile_tmp, makefile, options.quiet)
# Fix the output directory path in Makefile all .mk files.
find = os.path.relpath(output_dir, src_dir)
files = [os.path.join(output_dir, 'Makefile')]
for file in get_files(os.path.join(output_dir, '*.mk')):
@ -165,13 +276,22 @@ parser.add_option('--allow-partial',
help='allow creation of partial distributions')
parser.add_option('--no-symbols',
action='store_true', dest='nosymbols', default=False,
help='do not create symbol files')
help='don\'t create symbol files')
parser.add_option('--no-docs',
action='store_true', dest='nodocs', default=False,
help='don\'t create documentation')
parser.add_option('--no-archive',
action='store_true', dest='noarchive', default=False,
help='don\'t create archives for output directories')
parser.add_option('--ninja-build',
action='store_true', dest='ninjabuild', default=False,
help='build was created using ninja')
parser.add_option('--minimal',
action='store_true', dest='minimal', default=False,
help='include only release build binary files')
parser.add_option('--client',
action='store_true', dest='client', default=False,
help='include only the cefclient application')
parser.add_option('-q', '--quiet',
action='store_true', dest='quiet', default=False,
help='do not output detailed status information')
@ -179,7 +299,12 @@ parser.add_option('-q', '--quiet',
# the outputdir option is required
if options.outputdir is None:
parser.print_help(sys.stdout)
parser.print_help(sys.stderr)
sys.exit()
if options.minimal and options.client:
print 'Invalid combination of options'
parser.print_help(sys.stderr)
sys.exit()
# script directory
@ -217,20 +342,26 @@ elif sys.platform == 'darwin':
elif sys.platform.startswith('linux'):
platform = 'linux'
# output directory
output_dir_name = 'cef_binary_'+cef_ver+'_'+platform
if options.minimal:
output_dir_name = output_dir_name + '_minimal'
output_dir = os.path.abspath(os.path.join(options.outputdir, output_dir_name))
remove_dir(output_dir, options.quiet)
make_dir(output_dir, options.quiet)
# list of output directories to be archived
archive_dirs = []
if not options.nosymbols:
# symbol directory
symbol_dir_name = output_dir_name + '_symbols'
symbol_dir = os.path.abspath(os.path.join(options.outputdir, symbol_dir_name))
remove_dir(symbol_dir, options.quiet)
make_dir(symbol_dir, options.quiet)
# output directory
output_dir_base = 'cef_binary_' + cef_ver
output_dir_name = output_dir_base + '_' + platform
if options.minimal:
mode = 'minimal'
output_dir_name = output_dir_name + '_minimal'
elif options.client:
mode = 'client'
output_dir_name = output_dir_name + '_client'
else:
mode = 'standard'
output_dir = create_output_dir(output_dir_name, options.outputdir)
# create the README.TXT file
create_readme()
# transfer the LICENSE.txt file
copy_file(os.path.join(cef_dir, 'LICENSE.txt'), output_dir, options.quiet)
@ -243,7 +374,7 @@ cef_paths = cef_paths['variables']
cef_paths2 = eval_file(os.path.join(cef_dir, 'cef_paths2.gypi'))
cef_paths2 = cef_paths2['variables']
if not options.minimal:
if mode == 'standard':
# create the include directory
include_dir = os.path.join(output_dir, 'include')
make_dir(include_dir, options.quiet)
@ -294,11 +425,71 @@ if not options.minimal:
output_dir, options.quiet)
if platform == 'windows':
# create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/win/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
if options.ninjabuild:
out_dir = os.path.join(src_dir, 'out')
libcef_dll_file = 'libcef.dll.lib'
else:
out_dir = os.path.join(src_dir, 'build')
libcef_dll_file = 'lib/libcef.lib'
if not options.minimal:
valid_build_dir = None
if mode == 'standard':
# transfer Debug files
build_dir = os.path.join(out_dir, 'Debug');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(build_dir, '*.dll'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \
options.quiet)
if not options.nosymbols:
# create the symbol output directory
symbol_output_dir = create_output_dir(output_dir_name + '_debug_symbols', options.outputdir)
# transfer contents
copy_file(os.path.join(build_dir, 'libcef.dll.pdb'), symbol_output_dir, options.quiet)
else:
sys.stderr.write("No Debug build files.\n")
# transfer Release files
build_dir = os.path.join(out_dir, 'Release');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(build_dir, '*.dll'), dst_dir, options.quiet)
if mode != 'client':
copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \
options.quiet)
else:
copy_file(os.path.join(build_dir, 'cefclient.exe'), dst_dir, options.quiet)
if not options.nosymbols:
# create the symbol output directory
symbol_output_dir = create_output_dir(output_dir_name + '_release_symbols', options.outputdir)
# transfer contents
copy_file(os.path.join(build_dir, 'libcef.dll.pdb'), symbol_output_dir, options.quiet)
else:
sys.stderr.write("No Release build files.\n")
if not valid_build_dir is None:
# transfer resource files
build_dir = valid_build_dir
if mode == 'client':
dst_dir = os.path.join(output_dir, 'Release')
else:
dst_dir = os.path.join(output_dir, 'Resources')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'cef.pak'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), options.quiet)
if mode == 'standard':
# transfer include files
transfer_gypi_files(cef_dir, cef_paths2['includes_win'], \
'include/', include_dir, options.quiet)
@ -307,87 +498,74 @@ if platform == 'windows':
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_win'], \
'tests/cefclient/', cefclient_dir, options.quiet)
if options.ninjabuild:
out_dir = os.path.join(src_dir, 'out')
libcef_dll_file = 'libcef.dll.lib'
else:
out_dir = os.path.join(src_dir, 'build')
libcef_dll_file = 'lib/libcef.lib'
if not options.minimal:
# transfer build/Debug files
build_dir = os.path.join(out_dir, 'Debug');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')):
dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(build_dir, '*.dll'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'cefclient.exe'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'cef.pak'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), \
options.quiet)
# transfer lib/Debug files
dst_dir = os.path.join(output_dir, 'lib/Debug')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \
options.quiet)
else:
sys.stderr.write("No Debug build files.\n")
# transfer build/Release files
build_dir = os.path.join(out_dir, 'Release');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')):
dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(build_dir, '*.dll'), dst_dir, options.quiet)
if not options.minimal:
copy_file(os.path.join(build_dir, 'cefclient.exe'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'cef.pak'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), \
options.quiet)
# transfer lib/Release files
dst_dir = os.path.join(output_dir, 'lib/Release')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \
options.quiet)
if not options.nosymbols:
# transfer symbols
copy_file(os.path.join(build_dir, 'libcef.dll.pdb'), symbol_dir, options.quiet)
else:
sys.stderr.write("No Release build files.\n")
if not options.minimal:
# generate doc files
os.popen('make_cppdocs.bat '+cef_rev)
# transfer docs files
dst_dir = os.path.join(output_dir, 'docs')
src_dir = os.path.join(cef_dir, 'docs')
if path_exists(src_dir):
copy_dir(src_dir, dst_dir, options.quiet)
# transfer additional files, if any
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/win/transfer.cfg'), \
output_dir, options.quiet)
# generate the project files
generate_msvs_projects('2005');
generate_msvs_projects('2008');
generate_msvs_projects('2010');
fix_msvs_projects();
create_msvs_projects()
if not options.nodocs:
# generate doc files
os.popen('make_cppdocs.bat '+cef_rev)
src_dir = os.path.join(cef_dir, 'docs')
if path_exists(src_dir):
# create the docs output directory
docs_output_dir = create_output_dir(output_dir_base + '_docs', options.outputdir)
# transfer contents
copy_dir(src_dir, docs_output_dir, options.quiet)
elif platform == 'macosx':
# create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/mac/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
if options.ninjabuild:
out_dir = os.path.join(src_dir, 'out')
else:
out_dir = os.path.join(src_dir, 'xcodebuild')
if not options.minimal:
valid_build_dir = None
if mode == 'standard':
# transfer Debug files
build_dir = os.path.join(out_dir, 'Debug')
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libplugin_carbon_interpose.dylib'), dst_dir, options.quiet)
# transfer Release files
build_dir = os.path.join(out_dir, 'Release')
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet)
if mode != 'client':
copy_file(os.path.join(build_dir, 'ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libplugin_carbon_interpose.dylib'), dst_dir, options.quiet)
else:
copy_dir(os.path.join(build_dir, 'cefclient.app'), os.path.join(dst_dir, 'cefclient.app'), options.quiet)
if not options.nosymbols:
# create the symbol output directory
symbol_output_dir = create_output_dir(output_dir_name + '_release_symbols', options.outputdir)
# create the real dSYM file from the "fake" dSYM file
sys.stdout.write("Creating the real dSYM file...\n")
src_path = os.path.join(build_dir, 'libcef.dylib.dSYM/Contents/Resources/DWARF/libcef.dylib')
dst_path = os.path.join(symbol_output_dir, 'libcef.dylib.dSYM')
run('dsymutil '+src_path+' -o '+dst_path, cef_dir)
if not valid_build_dir is None and mode != 'client':
# transfer resource files
build_dir = valid_build_dir
dst_dir = os.path.join(output_dir, 'Resources')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(build_dir, 'cefclient.app/Contents/Frameworks/Chromium Embedded Framework.framework/Resources/*.*'), \
dst_dir, options.quiet)
if mode == 'standard':
# transfer include files
transfer_gypi_files(cef_dir, cef_paths2['includes_mac'], \
'include/', include_dir, options.quiet)
@ -404,73 +582,13 @@ elif platform == 'macosx':
copy_dir(os.path.join(cef_dir, 'tests/cefclient/mac/'), os.path.join(output_dir, 'cefclient/mac/'), \
options.quiet)
if options.ninjabuild:
out_dir = os.path.join(src_dir, 'out')
else:
out_dir = os.path.join(src_dir, 'xcodebuild')
valid_build_dir = None
if not options.minimal:
# transfer xcodebuild/Debug files
build_dir = os.path.join(out_dir, 'Debug')
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libplugin_carbon_interpose.dylib'), dst_dir, options.quiet)
# transfer xcodebuild/Release files
build_dir = os.path.join(out_dir, 'Release')
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'libplugin_carbon_interpose.dylib'), dst_dir, options.quiet)
if not options.nosymbols:
# create the real dSYM file from the "fake" dSYM file
sys.stdout.write("Creating the real dSYM file...\n")
src_path = os.path.join(build_dir, 'libcef.dylib.dSYM/Contents/Resources/DWARF/libcef.dylib')
dst_path = os.path.join(symbol_dir, 'libcef.dylib.dSYM')
run('dsymutil '+src_path+' -o '+dst_path, cef_dir)
if not valid_build_dir is None:
# transfer resource files
build_dir = valid_build_dir
dst_dir = os.path.join(output_dir, 'Resources')
make_dir(dst_dir, options.quiet)
copy_files(os.path.join(build_dir, 'cefclient.app/Contents/Frameworks/Chromium Embedded Framework.framework/Resources/*.*'), \
dst_dir, options.quiet)
if not options.minimal:
# transfer additional files, if any
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/mac/transfer.cfg'), \
output_dir, options.quiet)
# Generate Xcode project files
sys.stdout.write('Generating Xcode project files...')
os.environ['GYP_GENERATORS'] = 'xcode'
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper);
# Post-process the Xcode project to fix file paths
src_file = os.path.join(output_dir, 'cefclient.xcodeproj/project.pbxproj')
data = read_file(src_file)
data = data.replace('../../../build/mac/', 'tools/')
data = data.replace('../../../build', 'build')
data = data.replace('../../../xcodebuild', 'xcodebuild')
write_file(src_file, data)
create_xcode_projects()
elif platform == 'linux':
# create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/linux/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
out_dir = os.path.join(src_dir, 'out')
if options.ninjabuild:
lib_dir_name = 'lib'
@ -479,8 +597,8 @@ elif platform == 'linux':
valid_build_dir = None
if not options.minimal:
# transfer out/Debug files
if mode == 'standard':
# transfer Debug files
build_dir = os.path.join(out_dir, 'Debug');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient')):
valid_build_dir = build_dir
@ -490,26 +608,32 @@ elif platform == 'linux':
else:
sys.stderr.write("No Debug build files.\n")
# transfer out/Release files
# transfer Release files
build_dir = os.path.join(out_dir, 'Release');
if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient')):
valid_build_dir = build_dir
dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, lib_dir_name, 'libcef.so'), dst_dir, options.quiet)
if mode == 'client':
copy_file(os.path.join(build_dir, 'cefclient'), dst_dir, options.quiet)
else:
sys.stderr.write("No Release build files.\n")
if not valid_build_dir is None:
# transfer resource files
build_dir = valid_build_dir
dst_dir = os.path.join(output_dir, 'Resources')
if mode == 'client':
dst_dir = os.path.join(output_dir, 'Release')
else:
dst_dir = os.path.join(output_dir, 'Resources')
make_dir(dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'cef.pak'), dst_dir, options.quiet)
copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), options.quiet)
if not options.minimal:
if mode == 'standard':
# transfer include files
transfer_gypi_files(cef_dir, cef_paths2['includes_linux'], \
'include/', include_dir, options.quiet)
@ -525,39 +649,12 @@ elif platform == 'linux':
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/linux/transfer.cfg'), \
output_dir, options.quiet)
makefile = os.path.join(src_dir, 'Makefile')
makefile_tmp = ''
if path_exists(makefile):
# Back up the existing Makefile
makefile_tmp = makefile + '.cef_bak'
copy_file(makefile, makefile_tmp, options.quiet)
create_make_projects()
# Generate make project files
sys.stdout.write('Generating make project files...')
os.environ['GYP_GENERATORS'] = 'make'
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper);
# Copy the resulting Makefile to the destination directory
copy_file(makefile, output_dir, options.quiet)
remove_file(makefile, options.quiet)
if makefile_tmp != '':
# Restore the original Makefile
move_file(makefile_tmp, makefile, options.quiet)
# Post-process the make files
fix_make_projects()
# Create an archive of the output directory
zip_file = output_dir_name + '.zip'
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n")
create_archive(output_dir, os.path.join(output_dir, os.pardir, zip_file))
if not options.nosymbols:
# Create an archive of the symbol directory
zip_file = symbol_dir_name + '.zip'
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n")
create_archive(symbol_dir, os.path.join(symbol_dir, os.pardir, zip_file))
if not options.noarchive:
# create an archive for each output directory
for dir in archive_dirs:
zip_file = os.path.split(dir)[1] + '.zip'
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n")
create_archive(dir, os.path.join(dir, os.pardir, zip_file))