src/wscript
changeset 11634 99173c0ad09b
parent 11521 b23ca9ee0050
child 11660 47325a00bda8
equal deleted inserted replaced
11633:6b74df04cf44 11634:99173c0ad09b
     1 
     1 
     2 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
     2 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
     3 
     3 from __future__ import print_function
     4 import os, os.path
     4 import os, os.path
     5 import sys
     5 import sys
     6 import shutil
     6 import shutil
     7 import types
     7 import types
     8 import warnings
     8 import warnings
   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