mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-11 01:32:08 +10:00
137 lines
5.2 KiB
Python
137 lines
5.2 KiB
Python
#!/usr/bin/env python
|
|
# ........................................................................... #
|
|
#
|
|
# IzPack - Copyright 2007, 2010 Julien Ponge, All Rights Reserved.
|
|
#
|
|
# http://izpack.org/
|
|
# http://izpack.codehaus.org/
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
# ........................................................................... #
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import shutil
|
|
import optparse
|
|
|
|
def parse_options():
|
|
parser = optparse.OptionParser()
|
|
parser.add_option("--file", action="append", dest="file",
|
|
help="The installer JAR file / files")
|
|
parser.add_option("--output", action="store", dest="output",
|
|
default="setup.exe",
|
|
help="The executable file")
|
|
parser.add_option("--with-jdk", action="store", dest="with_jre", default="",
|
|
help="The bundled JRE to run the exe independently of the system resources. ") # choosen JDK that may came with the package
|
|
parser.add_option("--with-7z", action="store", dest="p7z",
|
|
default="7za",
|
|
help="Path to the 7-Zip executable")
|
|
parser.add_option("--with-upx", action="store", dest="upx",
|
|
default="upx",
|
|
help="Path to the UPX executable")
|
|
parser.add_option("--no-upx", action="store_true", dest="no_upx",
|
|
default=False,
|
|
help="Do not use UPX to further compress the output")
|
|
parser.add_option("--launch-file", action="store", dest="launch",
|
|
default="",
|
|
help="File to launch after extract")
|
|
parser.add_option("--launch-args", action="store", dest="launchargs",
|
|
default="",
|
|
help="Arguments for file to launch after extract")
|
|
parser.add_option("--name", action="store", dest="name",
|
|
default="IzPack",
|
|
help="Name of package for title bar and prompts")
|
|
parser.add_option("--prompt", action="store_true", dest="prompt",
|
|
default=False,
|
|
help="Prompt the user before extraction?")
|
|
(options, args) = parser.parse_args()
|
|
if (options.file is None):
|
|
parser.error("no installer file has been given")
|
|
return options
|
|
|
|
def create_exe(settings):
|
|
if len(settings.file) > 0:
|
|
filename = os.path.basename(settings.file[0])
|
|
else:
|
|
filename = ''
|
|
|
|
if len(settings.with_jre) > 0:
|
|
jdk = os.path.basename(settings.with_jre) #inside the jdk/jre that was given, there must be a bin/java.exe file
|
|
jdk = jdk + "\\bin\\javaw.exe"
|
|
print(jdk)
|
|
settings.file.append(settings.with_jre) #jdk/jre is going in the package
|
|
else:
|
|
jdk = 'javaw' #java is added somehow to the PATH
|
|
|
|
if settings.p7z == '7za':
|
|
p7z = os.path.join(os.path.dirname(sys.argv[0]), '7za')
|
|
else:
|
|
p7z = settings.p7z
|
|
|
|
use_shell = sys.platform != 'win32'
|
|
|
|
if (os.access('installer.7z', os.F_OK)):
|
|
os.remove('installer.7z')
|
|
files = '" "'.join(settings.file)
|
|
p7zcmd = '"%s" a -mmt -t7z -mx=9 installer.7z "%s"' % (p7z, files)
|
|
subprocess.call(p7zcmd, shell=use_shell)
|
|
|
|
config = open('config.txt', 'w')
|
|
config.write(';!@Install@!UTF-8!\n')
|
|
config.write('Title="%s"\n' % settings.name)
|
|
if settings.prompt:
|
|
config.write('BeginPrompt="Install %s?"\n' % settings.name)
|
|
config.write('Progress="yes"\n')
|
|
|
|
if settings.launch == '':
|
|
config.write('ExecuteFile="' + jdk +'"\n') # who is going to run my installer.jar?
|
|
config.write('ExecuteParameters="-jar \\\"%s\\\"' % filename)
|
|
if settings.launchargs != '':
|
|
config.write(' %s"\n' % settings.launchargs)
|
|
else:
|
|
config.write('"\n')
|
|
else:
|
|
config.write('ExecuteFile="%s"\n' % settings.launch)
|
|
if settings.launchargs != '':
|
|
config.write('ExecuteParameters="%s"\n' % settings.launchargs)
|
|
|
|
config.write(';!@InstallEnd@!\n')
|
|
config.close()
|
|
|
|
sfx = os.path.join(os.path.dirname(p7z), '7zS.sfx')
|
|
files = [sfx, 'config.txt', 'installer.7z']
|
|
|
|
output = open(settings.output, 'wb')
|
|
for f in files:
|
|
in_file = open(f, 'rb')
|
|
shutil.copyfileobj(in_file, output, 2048)
|
|
in_file.close()
|
|
output.close()
|
|
|
|
if (not settings.no_upx):
|
|
if settings.upx == 'upx':
|
|
upx = os.path.join(os.path.dirname(sys.argv[0]), 'upx')
|
|
else:
|
|
upx = settings.upx
|
|
upx = '"%s" --ultra-brute "%s"' % (upx, settings.output)
|
|
subprocess.call(upx, shell=use_shell)
|
|
|
|
os.remove('config.txt')
|
|
os.remove('installer.7z')
|
|
|
|
def main():
|
|
create_exe(parse_options())
|
|
|
|
if __name__ == "__main__":
|
|
main()
|