@@ -48,7 +48,7 @@ def modified_recipes(branch='origin/master'):
48
48
return recipes
49
49
50
50
51
- def build (target_python , requirements ):
51
+ def build (target_python , target_bootstrap , requirements ):
52
52
"""
53
53
Builds an APK given a target Python and a set of requirements.
54
54
"""
@@ -65,34 +65,64 @@ def build(target_python, requirements):
65
65
with current_directory ('testapps/' ):
66
66
# iterates to stream the output
67
67
for line in sh .python (
68
- testapp , 'apk' , '--sdk-dir' , android_sdk_home ,
69
- '--ndk-dir' , android_ndk_home , '--bootstrap' , 'sdl2' , '--requirements' ,
70
- requirements , _err_to_out = True , _iter = True ):
68
+ testapp , 'apk' ,
69
+ '--sdk-dir' , android_sdk_home ,
70
+ '--ndk-dir' , android_ndk_home ,
71
+ '--bootstrap' , target_bootstrap ,
72
+ '--requirements' , requirements ,
73
+ _err_to_out = True , _iter = True ):
71
74
print (line )
72
75
73
76
74
- def main ():
75
- target_python = TargetPython .python3
76
- recipes = modified_recipes ()
77
- logger .info ('recipes modified: {}' .format (recipes ))
78
- recipes -= CORE_RECIPES
79
- logger .info ('recipes to build: {}' .format (recipes ))
77
+ def get_bootstrap (recipes_and_target ):
78
+ """
79
+ Finds the right bootstrap given a set of requirements with a defined
80
+ target python recipe inside this set.
81
+ """
80
82
context = Context ()
81
- # forces the default target
82
- recipes_and_target = recipes | set ([target_python .name ])
83
+ bootstrap = None
83
84
try :
84
85
build_order , python_modules , bs = get_recipe_order_and_bootstrap (
85
86
context , recipes_and_target , None )
87
+ bootstrap = bs .name
86
88
except BuildInterruptingException :
87
- # fallback to python2 if default target is not compatible
88
- logger .info ('incompatible with {}' .format (target_python .name ))
89
- target_python = TargetPython .python2
90
- logger .info ('falling back to {}' .format (target_python .name ))
89
+ pass
90
+ return bootstrap
91
+
92
+
93
+ def main ():
94
+ target_python_priorities = [
95
+ TargetPython .python3 ,
96
+ TargetPython .python2
97
+ ]
98
+
99
+ recipes = modified_recipes ()
100
+ logger .info ('recipes modified: {}' .format (recipes ))
101
+ recipes -= CORE_RECIPES
102
+ logger .info ('recipes to build: {}' .format (recipes ))
103
+
104
+ # iterate over `target_python_priorities` in order to find the
105
+ # python version that is compatible with the modified recipes
106
+ bootstrap = None
107
+ target_python = None
108
+ for target_python in target_python_priorities :
109
+ logger .info ('trying to get a bootstrap forcing target python: {}' .
110
+ format (target_python .name ))
111
+ bootstrap = get_bootstrap (recipes | {target_python .name })
112
+ if bootstrap :
113
+ break
114
+ if not bootstrap :
115
+ logger .warning ("we didn't find any valid combination of bootstrap and "
116
+ "target python...rebuild updated recipes cancelled."
117
+ "The recipes we couldn't rebuild are:\n \t -{}" .format (
118
+ "\n \t -" .join (recipes )))
119
+ exit (1 )
120
+
91
121
# removing the known broken recipe for the given target
92
122
broken_recipes = BROKEN_RECIPES [target_python ]
93
123
recipes -= broken_recipes
94
124
logger .info ('recipes to build (no broken): {}' .format (recipes ))
95
- build (target_python , recipes )
125
+ build (target_python , bootstrap , recipes )
96
126
97
127
98
128
if __name__ == '__main__' :
0 commit comments