Can install headers with Ninja.

pull/15/head
Jussi Pakkanen 12 years ago
parent cdf99fa3be
commit cd9b636fe1
  1. 15
      builder_install.py
  2. 38
      generators.py

@ -21,10 +21,25 @@ class InstallData():
self.targets = []
self.depfixer = depfixer
self.dep_prefix = dep_prefix
self.headers = []
def do_install(datafilename):
ifile = open(datafilename, 'rb')
d = pickle.load(ifile)
install_targets(d)
install_headers(d)
def install_headers(d):
for t in d.headers:
fullfilename = t[0]
outdir = t[1]
fname = os.path.split(fullfilename)[1]
outname = os.path.join(outdir, fname)
print('Installing %s to %s' % (fname, outdir))
os.makedirs(outdir, exist_ok=True)
shutil.copyfile(fullfilename, outname)
def install_targets(d):
for t in d.targets:
fullfilename = t[0]
outdir = t[1]

@ -165,21 +165,25 @@ class NinjaGenerator(Generator):
def generate_install(self, outfile):
script_root = self.get_script_root()
install_script = os.path.join(script_root, 'builder_install.py')
install_data = os.path.join(self.environment.get_scratch_dir(), 'install.dat')
outfile.write('build install: CUSTOM_COMMAND | all\n')
outfile.write(" COMMAND = '%s' '%s'\n\n" % (ninja_quote(install_script), ninja_quote(install_data)))
self.generate_install_data(outfile, install_data)
def generate_install_data(self, outfile, install_data_file):
install_data_file = os.path.join(self.environment.get_scratch_dir(), 'install.dat')
depfixer = os.path.join(self.get_script_root(), 'depfixer.py')
prefix = self.environment.get_prefix()
d = InstallData(depfixer, './') # Fixme
outfile.write('build install: CUSTOM_COMMAND | all\n')
outfile.write(" COMMAND = '%s' '%s'\n\n" % (ninja_quote(install_script), ninja_quote(install_data_file)))
self.generate_target_install(d)
self.generate_header_install(d)
#self.generate_man_install(outfile)
#self.generate_data_install(outfile)
ofile = open(install_data_file, 'wb')
pickle.dump(d, ofile)
def generate_target_install(self, d):
prefix = self.environment.get_prefix()
libdir = os.path.join(prefix, self.environment.get_libdir())
bindir = os.path.join(prefix, self.environment.get_bindir())
for tmp in self.build.get_targets().items():
(name, t) = tmp
for t in self.build.get_targets().values():
if t.should_install():
if isinstance(t, interpreter.Executable):
outdir = bindir
@ -187,8 +191,18 @@ class NinjaGenerator(Generator):
outdir = libdir
i = [os.path.join(self.environment.get_build_dir(), self.get_target_filename(t)), outdir]
d.targets.append(i)
ofile = open(install_data_file, 'wb')
pickle.dump(d, ofile)
def generate_header_install(self, d):
prefix = self.environment.get_prefix()
incroot = os.path.join(prefix, self.environment.get_includedir())
headers = self.build.get_headers()
for h in headers:
outdir = os.path.join(incroot, h.get_subdir())
for f in h.get_sources():
abspath = os.path.join(self.environment.get_source_dir(), f) # FIXME
i = [abspath, outdir]
d.headers.append(i)
def generate_tests(self, outfile):
script_root = self.get_script_root()

Loading…
Cancel
Save