    def should_run(self):
        """Does CSS need to run?"""
        css_targets = [pjoin(static, 'css', 'style.min.css')]
        css_maps = [t + '.map' for t in css_targets]
        targets = css_targets + css_maps
        earliest_target_mtime = float('inf')
        earliest_target_name = ''
        for t in targets:
            if not os.path.exists(t):
                print(f"Need to build css target: {t}")
                return True
            target_mtime = mtime(t)
            if target_mtime < earliest_target_mtime:
                earliest_target_name = t
                earliest_target_mtime = target_mtime

        # check if any .scss files are newer than the generated targets
        for dirpath, dirnames, filenames in os.walk(static):
            for f in filenames:
                if f.endswith('.scss'):
                    path = pjoin(static, dirpath, f)
                    timestamp = mtime(path)
                    if timestamp > earliest_target_mtime:
                        print(
                            f"mtime for {path} > {earliest_target_name}, needs update"
                        )
                        return True

        return False
Does CSS need to run?
setup.py