|
|
|
@ -27,39 +27,70 @@ class ShellGenerator(): |
|
|
|
|
self.environment = build.environment |
|
|
|
|
self.build_filename = 'compile.sh' |
|
|
|
|
self.test_filename = 'run_tests.sh' |
|
|
|
|
self.install_filename = 'install.sh' |
|
|
|
|
self.processed_targets = {} |
|
|
|
|
|
|
|
|
|
def generate(self): |
|
|
|
|
self.generate_compile_script() |
|
|
|
|
self.generate_test_script() |
|
|
|
|
self.generate_install_script() |
|
|
|
|
|
|
|
|
|
def generate_compile_script(self): |
|
|
|
|
outfilename = os.path.join(self.environment.get_build_dir(), self.build_filename) |
|
|
|
|
def create_shfile(self, outfilename, message): |
|
|
|
|
outfile = open(outfilename, 'w') |
|
|
|
|
outfile.write('#!/bin/sh\n\n') |
|
|
|
|
outfile.write('echo This is an autogenerated shell script build file for project \\"%s\\".\n' |
|
|
|
|
% self.build.get_project()) |
|
|
|
|
outfile.write('echo This is experimental and most likely will not work!\n') |
|
|
|
|
outfile.write(message) |
|
|
|
|
cdcmd = ['cd', self.environment.get_build_dir()] |
|
|
|
|
outfile.write(' '.join(shell_quote(cdcmd)) + '\n') |
|
|
|
|
self.generate_commands(outfile) |
|
|
|
|
outfile.close() |
|
|
|
|
os.chmod(outfilename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC |\ |
|
|
|
|
stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH) |
|
|
|
|
return outfile |
|
|
|
|
|
|
|
|
|
def generate_compile_script(self): |
|
|
|
|
outfilename = os.path.join(self.environment.get_build_dir(), self.build_filename) |
|
|
|
|
message = """echo This is an autogenerated shell script build file for project \\"%s\\" |
|
|
|
|
echo This is experimental and most likely will not work! |
|
|
|
|
""" % self.build.get_project() |
|
|
|
|
outfile = self.create_shfile(outfilename, message) |
|
|
|
|
self.generate_commands(outfile) |
|
|
|
|
outfile.close() |
|
|
|
|
|
|
|
|
|
def generate_test_script(self): |
|
|
|
|
outfilename = os.path.join(self.environment.get_build_dir(), self.test_filename) |
|
|
|
|
outfile = open(outfilename, 'w') |
|
|
|
|
outfile.write('#!/bin/sh\n\n') |
|
|
|
|
outfile.write('echo This is an autogenerated shell script test file for project \\"%s\\".\n' |
|
|
|
|
% self.build.get_project()) |
|
|
|
|
outfile.write('echo Run the compile script before this one or bad things will happen!\n') |
|
|
|
|
cdcmd = ['cd', self.environment.get_build_dir()] |
|
|
|
|
outfile.write(' '.join(shell_quote(cdcmd)) + '\n') |
|
|
|
|
message = """echo This is an autogenerated test script for project \\"%s\\" |
|
|
|
|
echo This is experimental and most likely will not work! |
|
|
|
|
echo Run compile.sh before this or bad things will happen. |
|
|
|
|
""" % self.build.get_project() |
|
|
|
|
outfile = self.create_shfile(outfilename, message) |
|
|
|
|
self.generate_tests(outfile) |
|
|
|
|
outfile.close() |
|
|
|
|
os.chmod(outfilename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC |\ |
|
|
|
|
stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH) |
|
|
|
|
|
|
|
|
|
def generate_install_script(self): |
|
|
|
|
outfilename = os.path.join(self.environment.get_build_dir(), self.install_filename) |
|
|
|
|
message = """echo This is an autogenerated install script for project \\"%s\\" |
|
|
|
|
echo This is experimental and most likely will not work! |
|
|
|
|
echo Run compile.sh before this or bad things will happen. |
|
|
|
|
""" % self.build.get_project() |
|
|
|
|
outfile = self.create_shfile(outfilename, message) |
|
|
|
|
self.generate_install(outfile) |
|
|
|
|
outfile.close() |
|
|
|
|
|
|
|
|
|
def generate_install(self, outfile): |
|
|
|
|
prefix = self.environment.get_prefix() |
|
|
|
|
libdir = os.path.join(prefix, self.environment.get_libdir()) |
|
|
|
|
bindir = os.path.join(prefix, self.environment.get_bindir()) |
|
|
|
|
outfile.write("mkdir -p '%s'\n" % libdir) |
|
|
|
|
outfile.write("mkdir -p '%s'\n" % bindir) |
|
|
|
|
for tmp in self.build.get_targets().items(): |
|
|
|
|
(name, t) = tmp |
|
|
|
|
if t.should_install(): |
|
|
|
|
if isinstance(t, interpreter.Executable): |
|
|
|
|
outdir = bindir |
|
|
|
|
else: |
|
|
|
|
outdir = libdir |
|
|
|
|
outfile.write('echo Installing "%s".\n' % name) |
|
|
|
|
cpcommand = ['cp', self.get_target_filename(t), outdir] |
|
|
|
|
cpcommand = ' '.join(shell_quote(cpcommand)) + '\n' |
|
|
|
|
outfile.write(cpcommand) |
|
|
|
|
|
|
|
|
|
def generate_tests(self, outfile): |
|
|
|
|
for t in self.build.get_tests(): |
|
|
|
|