Example #1
0
def editDepend(infile, outfile, extraDependencies=''):
   file  = open(infile, 'r')
   lines = file.readlines()
   file.close()

   # Extract target from first line
   groups   = lines[0].split(":")
   target   = groups[0]
   lines[0] = groups[1]

   # Replace target by absolute path
   # (The gcc -M option yields only the target base name)
   dirname = os.path.dirname(infile)
   if (dirname != '.' and dirname != ''):
      dirname = os.path.abspath(dirname)
   else:
      dirname = os.getcwd()
   target = os.path.normpath(os.path.join(dirname, target))

   # Replace dependencies by absolute paths
   text = TextWrapper('\\\n', 8)
   for i in range(len(lines)):
       line = lines[i]
       if line[-1] == '\n':
           line = line[:-1]
       if line[-1] == '\\':
           line = line[:-1]
       lines[i] = line
       if i == 0:
           text.append(target + ': ')
       deps = line.split()
       for dep in deps:
           path = os.path.abspath(dep)
           text.append(path)

   # Process extraDependencies (if any)
   if extraDependencies:
       deps = extraDependencies.split()
       for dep in deps:
          path = os.path.abspath(dep)
          text.append(path)
      
   

   file  = open(outfile, 'w')
   file.write(str(text))
   file.close()
Example #2
0
def editDependLocal(pfile, dfile, blddir, srcroot, extraDependencies):
   file  = open(pfile, 'r')
   lines = file.readlines()
   file.close()

   # Extract target from first line
   groups   = lines[0].split(":")
   target   = groups[0]
   lines[0] = groups[1]

   # Replace target by file in build directory
   base = os.path.basename(target)
   target = os.path.normpath(os.path.join(blddir, base))

   # Replace local dependencies by absolute paths
   text = TextWrapper('\\\n', 8)
   for i in range(len(lines)):
       line = lines[i]
       if line[-1] == '\n':
           line = line[:-1]
       if line[-1] == '\\':
           line = line[:-1]
       lines[i] = line
       if i == 0:
           text.append(target + ': ')
       deps = line.split()
       for dep in deps:
           pair = [srcroot, dep]
           if (os.path.commonprefix(pair) == srcroot):
              path = os.path.abspath(dep)
              text.append(path)

   # Process extraDependencies (if any)
   if extraDependencies:
       deps = extraDependencies.split()
       for dep in deps:
          path = os.path.abspath(dep)
          text.append(path)

   file  = open(dfile, 'w')
   file.write(str(text))
   file.close()
Example #3
0
def editDepend(pfile, dfile, blddir, extraDependencies):
    file = open(pfile, "r")
    lines = file.readlines()
    file.close()

    # Extract target from first line
    groups = lines[0].split(":")
    target = groups[0]
    lines[0] = groups[1]

    # Replace target by file in build directory
    base = os.path.basename(target)
    target = os.path.normpath(os.path.join(blddir, base))

    # Replace dependencies by absolute paths
    text = TextWrapper("\\\n", 8)
    for i in range(len(lines)):
        line = lines[i]
        if line[-1] == "\n":
            line = line[:-1]
        if line[-1] == "\\":
            line = line[:-1]
        lines[i] = line
        if i == 0:
            text.append(target + ": ")
        deps = line.split()
        for dep in deps:
            path = os.path.abspath(dep)
            text.append(path)

    # Process extraDependencies (if any)
    if extraDependencies:
        deps = extraDependencies.split()
        for dep in deps:
            path = os.path.abspath(dep)
            text.append(path)

    file = open(dfile, "w")
    file.write(str(text))
    file.close()
Example #4
0
    def make(self):

        # Find all the source and header files in this directory
        self.find()

        # Recursively descend into subdirectories
        for dir in self.dirs:
            dir.make()

        # ---------------------------------------------------------------------
        # Open and write sources.mk file
        file = open_w(self.makePath('sources.mk'))

        # Include subdirectory sources.mk files
        if len(self.dirs) > 0:
            for dir in self.dirs:
                basename = os.path.basename(dir.path)
                if basename != 'tests':
                    varpath = basename + os.sep + 'sources.mk'
                    file.write(self.makeInclude(varpath))
            file.write('\n')

        # Construct prefix for aggregate names
        if self.dirname == 'SRC':
            prefix = ''
        else:
            prefix = self.dirname + '_'

        wrapper = TextWrapper('\\\n', 4)

        # Write aggregate definition for SRCS
        wrapper.clear()
        wrapper.append(prefix + 'SRCS=')
        for dir in self.dirs:
            basename = os.path.basename(dir.path)
            if basename != 'tests':
                wrapper.append('$(' + dir.dirname + '_SRCS) ')
        for base in self.srcs:
            name = '$(SRC_DIR)' + os.sep + self.makePathFromSrc(base)
            name += '.' + self.srcSuffix() + ' '
            wrapper.append(name)
        file.write(str(wrapper))
        file.write('\n\n')

        # Write aggregate definition for OBJS
        file.write(prefix + 'OBJS=$(')
        file.write(prefix + 'SRCS:.' + self.srcSuffix() + '=.o)')
        file.write('\n\n')
        #file.write(prefix + 'DEPS=$(')
        #file.write(prefix + 'SRCS:.' + self.srcSuffix() + '=.d)')
        #file.write('\n\n')

        # Add library target, if any
        if self.hasLib:
            file.write(self.libName + ': ' + self.libObjs + '\n')
            file.write('\t$(AR) rcs ' + self.libName + ' ' + self.libObjs +
                       '\n')
            file.write('\n')

        file.close()

        # --------------------------------------------------------------------
        # Write makefile

        file = open(self.makePath('makefile'), 'w')
        file.write('SRC_DIR_REL =' + self.pathToSrc + '\n\n')
        file.write(self.globalInclude)
        if self.isTest:
            file.write('include $(SRC_DIR_REL)/test/sources.mk\n')
            file.write('include sources.mk\n')
        file.write('\n')
        if self.dirname == 'SRC':
            objs = 'OBJS'
        else:
            objs = self.dirname + '_OBJS'
        targets = '$(' + objs + ')'
        deps = '$(' + objs + ':.o=.d)'
        if self.isTest:
            for base in self.srcs:
                targets += ' ' + base
        file.write('all: ' + targets)
        if self.hasLib:
            file.write(' ' + self.libName)
        file.write('\n\n')
        file.write('clean:\n\trm -f ' + targets + ' ' + deps)
        if self.hasLib:
            file.write(' ' + self.libName)
        file.write('\n\n')
        file.write('clean-deps:\n\trm -f ' + deps)
        file.write('\n\n')
        if self.isTest:
            for base in self.srcs:
                file.write(base + ': ' + base + '.o ' + self.linkObjs + '\n')
                file.write('\t$(CXX) $(LDFLAGS) $(INCLUDES) $(DEFINES)')
                file.write(' -o ' + base + ' ' + base + '.o \\\n')
                file.write('\t       ' + self.linkObjs + '\n\n')
        #file.write('-include $(' + objs + ':.o=.d)\n\n')
        file.write('-include ' + deps + '\n\n')
        file.close()
Example #5
0
   def make(self):

      # Find all the source and header files in this directory
      self.find()

      # Recursively descend into subdirectories
      for dir in self.dirs:
         dir.make()

      # ---------------------------------------------------------------------
      # Open and write sources.mk file
      file = open_w(self.makePath('sources.mk'))

      # Include subdirectory sources.mk files
      if len(self.dirs) > 0:
         for dir in self.dirs:
            basename = os.path.basename(dir.path)
            if basename != 'tests':
               varpath  = basename + os.sep + 'sources.mk'
               file.write(self.makeInclude(varpath))
         file.write('\n')

      # Construct prefix for aggregate names
      if self.dirname == 'SRC':
         prefix = ''
      else:
         prefix = self.dirname + '_'
      
      wrapper = TextWrapper('\\\n', 4)

      # Write aggregate definition for SRCS
      wrapper.clear()
      wrapper.append(prefix + 'SRCS=')
      for dir in self.dirs:
         basename = os.path.basename(dir.path)
         if basename != 'tests':
            wrapper.append('$(' + dir.dirname + '_SRCS) ')
      for base in self.srcs:
         name  = '$(SRC_DIR)' + os.sep + self.makePathFromSrc(base)
         name += '.' + self.srcSuffix() + ' '
         wrapper.append(name)
      file.write(str(wrapper))
      file.write('\n\n')

      # Write aggregate definition for OBJS
      file.write(prefix + 'OBJS=$(')
      file.write(prefix + 'SRCS:.' + self.srcSuffix() + '=.o)')
      file.write('\n\n')
      #file.write(prefix + 'DEPS=$(')
      #file.write(prefix + 'SRCS:.' + self.srcSuffix() + '=.d)')
      #file.write('\n\n')

      # Add library target, if any
      if self.hasLib:
         file.write(self.libName + ': ' + self.libObjs + '\n')
         file.write('\t$(AR) rcs ' + self.libName + ' ' + self.libObjs + '\n')
         file.write('\n')

      file.close()

      # --------------------------------------------------------------------
      # Write makefile

      file = open(self.makePath('makefile'), 'w')
      file.write('SRC_DIR_REL =' + self.pathToSrc + '\n\n')
      file.write(self.globalInclude) 
      if self.isTest:
         file.write('include $(SRC_DIR_REL)/test/sources.mk\n')
         file.write('include sources.mk\n')
      file.write('\n') 
      if self.dirname == 'SRC':
         objs = 'OBJS'
      else:
         objs = self.dirname + '_OBJS'
      targets = '$(' + objs + ')'
      deps = '$(' + objs + ':.o=.d)'
      if self.isTest:
         for base in self.srcs:
            targets += ' ' + base
      file.write('all: ' + targets)
      if self.hasLib:
          file.write(' ' + self.libName)
      file.write('\n\n')
      file.write('clean:\n\trm -f ' + targets + ' ' + deps)
      if self.hasLib:
          file.write(' ' + self.libName)
      file.write('\n\n')
      file.write('clean-deps:\n\trm -f ' + deps)
      file.write('\n\n')
      if self.isTest:
         for base in self.srcs:
            file.write(base + ': ' + base + '.o ' + self.linkObjs + '\n')
            file.write('\t$(CXX) $(LDFLAGS) $(INCLUDES) $(DEFINES)')
            file.write(' -o ' + base + ' ' + base + '.o \\\n')
            file.write('\t       ' + self.linkObjs + '\n\n')
      #file.write('-include $(' + objs + ':.o=.d)\n\n')
      file.write('-include ' + deps + '\n\n')
      file.close()