404 cflags = cflags + self._cflags(dep) + self._cxxflags(dep) + \ |
404 cflags = cflags + self._cflags(dep) + self._cxxflags(dep) + \ |
405 self._defines(dep) + self._includes(dep) |
405 self._defines(dep) + self._includes(dep) |
406 if dep.startswith('ns3-'): |
406 if dep.startswith('ns3-'): |
407 dep_name = dep[4:] |
407 dep_name = dep[4:] |
408 requires.append("libns%s-%s%s" % (wutils.VERSION, dep_name, env.BUILD_SUFFIX)) |
408 requires.append("libns%s-%s%s" % (wutils.VERSION, dep_name, env.BUILD_SUFFIX)) |
409 print >> outfile, """\ |
409 print("""\ |
410 prefix=%s |
410 prefix=%s |
411 libdir=%s |
411 libdir=%s |
412 includedir=%s |
412 includedir=%s |
413 |
413 |
414 Name: lib%s |
414 Name: lib%s |
416 Version: %s |
416 Version: %s |
417 Libs: %s |
417 Libs: %s |
418 Cflags: %s |
418 Cflags: %s |
419 Requires: %s\ |
419 Requires: %s\ |
420 """ % (prefix, libdir, includedir, |
420 """ % (prefix, libdir, includedir, |
421 name, name, wutils.VERSION, ' '.join(libs), ' '.join(cflags), ' '.join(requires)) |
421 name, name, wutils.VERSION, ' '.join(libs), ' '.join(cflags), ' '.join(requires)), file=outfile) |
422 outfile.close() |
422 outfile.close() |
423 |
423 |
424 def run(self): |
424 def run(self): |
425 output_filename = self.outputs[0].abspath() |
425 output_filename = self.outputs[0].abspath() |
426 self._generate_pcfile(self.module.name, |
426 self._generate_pcfile(self.module.name, |
490 except AttributeError: |
490 except AttributeError: |
491 m = Utils.md5() |
491 m = Utils.md5() |
492 up = m.update |
492 up = m.update |
493 up(self.__class__.__name__.encode()) |
493 up(self.__class__.__name__.encode()) |
494 for x in self.inputs + self.outputs: |
494 for x in self.inputs + self.outputs: |
495 up(x.abspath()) |
495 up(x.abspath().encode()) |
496 up(self.mode) |
496 up(self.mode.encode()) |
497 if self.mode == 'remove': |
497 if self.mode == 'remove': |
498 up(self.header_to_remove.abspath().encode()) |
498 up(self.header_to_remove.abspath().encode()) |
499 self.uid_ = m.digest() |
499 self.uid_ = m.digest() |
500 return self.uid_ |
500 return self.uid_ |
501 |
501 |
513 assert len(self.inputs) == len(self.outputs) |
513 assert len(self.inputs) == len(self.outputs) |
514 inputs = [node.abspath() for node in self.inputs] |
514 inputs = [node.abspath() for node in self.inputs] |
515 outputs = [node.abspath() for node in self.outputs] |
515 outputs = [node.abspath() for node in self.outputs] |
516 for src, dst in zip(inputs, outputs): |
516 for src, dst in zip(inputs, outputs): |
517 try: |
517 try: |
518 os.chmod(dst, 0600) |
518 os.chmod(dst, 0o600) |
519 except OSError: |
519 except OSError: |
520 pass |
520 pass |
521 shutil.copy2(src, dst) |
521 shutil.copy2(src, dst) |
522 ## make the headers in builddir read-only, to prevent |
522 ## make the headers in builddir read-only, to prevent |
523 ## accidental modification |
523 ## accidental modification |
524 os.chmod(dst, 0400) |
524 os.chmod(dst, 0o400) |
525 return 0 |
525 return 0 |
526 else: |
526 else: |
527 assert len(self.inputs) == 0 |
527 assert len(self.inputs) == 0 |
528 assert len(self.outputs) == 0 |
528 assert len(self.outputs) == 0 |
529 out_file_name = self.header_to_remove.abspath() |
529 out_file_name = self.header_to_remove.abspath() |
530 try: |
530 try: |
531 os.unlink(out_file_name) |
531 os.unlink(out_file_name) |
532 except OSError, ex: |
532 except OSError as ex: |
533 if ex.errno != 2: |
533 if ex.errno != 2: |
534 raise |
534 raise |
535 return 0 |
535 return 0 |
536 |
536 |
537 |
537 |
582 except AttributeError: |
582 except AttributeError: |
583 m = Utils.md5() |
583 m = Utils.md5() |
584 up = m.update |
584 up = m.update |
585 up(self.__class__.__name__.encode()) |
585 up(self.__class__.__name__.encode()) |
586 for x in self.inputs + self.outputs: |
586 for x in self.inputs + self.outputs: |
587 up(x.abspath()) |
587 up(x.abspath().encode()) |
588 up(self.mode) |
588 up(self.mode.encode()) |
589 if self.mode == 'remove': |
589 if self.mode == 'remove': |
590 up(self.header_to_remove.abspath().encode()) |
590 up(self.header_to_remove.abspath().encode()) |
591 self.uid_ = m.digest() |
591 self.uid_ = m.digest() |
592 return self.uid_ |
592 return self.uid_ |
593 |
593 |
605 assert len(self.inputs) == len(self.outputs) |
605 assert len(self.inputs) == len(self.outputs) |
606 inputs = [node.abspath() for node in self.inputs] |
606 inputs = [node.abspath() for node in self.inputs] |
607 outputs = [node.abspath() for node in self.outputs] |
607 outputs = [node.abspath() for node in self.outputs] |
608 for src, dst in zip(inputs, outputs): |
608 for src, dst in zip(inputs, outputs): |
609 try: |
609 try: |
610 os.chmod(dst, 0600) |
610 os.chmod(dst, 0o600) |
611 except OSError: |
611 except OSError: |
612 pass |
612 pass |
613 shutil.copy2(src, dst) |
613 shutil.copy2(src, dst) |
614 ## make the headers in builddir read-only, to prevent |
614 ## make the headers in builddir read-only, to prevent |
615 ## accidental modification |
615 ## accidental modification |
616 os.chmod(dst, 0400) |
616 os.chmod(dst, 0o400) |
617 return 0 |
617 return 0 |
618 else: |
618 else: |
619 assert len(self.inputs) == 0 |
619 assert len(self.inputs) == 0 |
620 assert len(self.outputs) == 0 |
620 assert len(self.outputs) == 0 |
621 out_file_name = self.header_to_remove.abspath() |
621 out_file_name = self.header_to_remove.abspath() |
622 try: |
622 try: |
623 os.unlink(out_file_name) |
623 os.unlink(out_file_name) |
624 except OSError, ex: |
624 except OSError as ex: |
625 if ex.errno != 2: |
625 if ex.errno != 2: |
626 raise |
626 raise |
627 return 0 |
627 return 0 |
628 |
628 |
629 |
629 |
657 assert len(self.inputs) == 0 |
657 assert len(self.inputs) == 0 |
658 assert len(self.outputs) == 0 |
658 assert len(self.outputs) == 0 |
659 out_file_name = self.header_to_remove.abspath() |
659 out_file_name = self.header_to_remove.abspath() |
660 try: |
660 try: |
661 os.unlink(out_file_name) |
661 os.unlink(out_file_name) |
662 except OSError, ex: |
662 except OSError as ex: |
663 if ex.errno != 2: |
663 if ex.errno != 2: |
664 raise |
664 raise |
665 return 0 |
665 return 0 |
666 assert len(self.outputs) == 1 |
666 assert len(self.outputs) == 1 |
667 out_file_name = self.outputs[0].get_bld().abspath()#self.env) |
667 out_file_name = self.outputs[0].get_bld().abspath()#self.env) |
668 header_files = [os.path.basename(node.abspath()) for node in self.inputs] |
668 header_files = [os.path.basename(node.abspath()) for node in self.inputs] |
669 outfile = file(out_file_name, "w") |
669 outfile = open(out_file_name, "w") |
670 header_files.sort() |
670 header_files.sort() |
671 |
671 |
672 print >> outfile, """ |
672 print(""" |
673 #ifdef NS3_MODULE_COMPILATION |
673 #ifdef NS3_MODULE_COMPILATION |
674 # error "Do not include ns3 module aggregator headers from other modules; these are meant only for end user scripts." |
674 # error "Do not include ns3 module aggregator headers from other modules; these are meant only for end user scripts." |
675 #endif |
675 #endif |
676 |
676 |
677 #ifndef NS3_MODULE_%s |
677 #ifndef NS3_MODULE_%s |
678 """ % (self.module.upper().replace('-', '_'),) |
678 """ % (self.module.upper().replace('-', '_'),), file=outfile) |
679 |
679 |
680 # if self.module_deps: |
680 # if self.module_deps: |
681 # print >> outfile, "// Module dependencies:" |
681 # print >> outfile, "// Module dependencies:" |
682 # for dep in self.module_deps: |
682 # for dep in self.module_deps: |
683 # print >> outfile, "#include \"%s-module.h\"" % dep |
683 # print >> outfile, "#include \"%s-module.h\"" % dep |
684 |
684 |
685 print >> outfile |
685 print(file=outfile) |
686 print >> outfile, "// Module headers:" |
686 print("// Module headers:", file=outfile) |
687 for header in header_files: |
687 for header in header_files: |
688 print >> outfile, "#include \"%s\"" % (header,) |
688 print("#include \"%s\"" % (header,), file=outfile) |
689 |
689 |
690 print >> outfile, "#endif" |
690 print("#endif", file=outfile) |
691 |
691 |
692 outfile.close() |
692 outfile.close() |
693 return 0 |
693 return 0 |
694 |
694 |
695 def sig_explicit_deps(self): |
695 def sig_explicit_deps(self): |
696 self.m.update('\n'.join([node.abspath() for node in self.inputs])) |
696 self.m.update('\n'.join([node.abspath() for node in self.inputs]).encode('utf-8')) |
697 return self.m.digest() |
697 return self.m.digest() |
698 |
698 |
699 def unique_id(self): |
699 def unique_id(self): |
700 try: |
700 try: |
701 return self.uid |
701 return self.uid |