Esempio n. 1
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()
Esempio n. 2
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()