Skip to content

Commit b4a2999

Browse files
committed
Merge pull request #106 from nozyh/feature/automatically_create_target_directory
Implement new feature of create_target_directory
2 parents 5e25dbf + 59374f7 commit b4a2999

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

maflib/core.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
import waflib.Build
4848
import waflib.Utils
4949
import waflib.Options
50-
from waflib.TaskGen import before_method, feature
50+
from waflib.TaskGen import before_method, after_method, feature
5151

5252
MAFVERSION = 'x'
5353
MAFREVISION = 'x'
@@ -734,6 +734,8 @@ def __init__(self, **kw):
734734
for key in ['source', 'target', 'features']:
735735
_let_element_to_be_list(self.__dict__, key)
736736

737+
self.__dict__['directory_target'] = map(lambda x: x[:-1], self.__dict__['target'])
738+
737739
for key in ['for_each', 'aggregate_by']:
738740
if hasattr(self, key):
739741
_let_element_to_be_list(self.__dict__, key)
@@ -745,6 +747,12 @@ def __init__(self, **kw):
745747
else:
746748
self.parameters = [Parameter(p) for p in self.parameters]
747749

750+
# preprocess to handle directory outputs
751+
directory_target = list(filter(lambda x: x[-1] == '/', self.__dict__['target']))
752+
if directory_target:
753+
self.__dict__['features'].append('create_target_directory')
754+
self.__dict__['directory_target'] = list(map(lambda x: x[:-1], directory_target))
755+
748756
# Some tests do not support the argument 'wscript'
749757
if 'wscript' in kw:
750758
relpath = self.wscript.parent.relpath()
@@ -1102,6 +1110,23 @@ class OldExperimentContext(ExperimentContext):
11021110
fun = 'experiment'
11031111
variant = 'experiment'
11041112

1113+
@feature('create_target_directory')
1114+
@after_method('process_rule')
1115+
def create_target_directory(self):
1116+
"""Create directory of target node if the output is directory.
1117+
1118+
The flag feature of this method (create_target_directory)
1119+
is set at constructor of CallObject.
1120+
1121+
"""
1122+
1123+
def meta_sig(target_node):
1124+
name = target_node.name
1125+
return name[name.find('-')+1:]
1126+
1127+
for target_node in self.target:
1128+
if meta_sig(target_node) in self.directory_target:
1129+
target_node.mkdir()
11051130

11061131
@feature('experiment')
11071132
@before_method('process_rule')

0 commit comments

Comments
 (0)