@@ -48,7 +48,7 @@ def modified_recipes(branch='origin/master'):
4848 return recipes
4949
5050
51- def build (target_python , requirements ):
51+ def build (target_python , target_bootstrap , requirements ):
5252 """
5353 Builds an APK given a target Python and a set of requirements.
5454 """
@@ -65,34 +65,65 @@ def build(target_python, requirements):
6565 with current_directory ('testapps/' ):
6666 # iterates to stream the output
6767 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 ):
7174 print (line )
7275
7376
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+ """
8082 context = Context ()
81- # forces the default target
82- recipes_and_target = recipes | set ([target_python .name ])
83+ bootstrap = None
8384 try :
8485 build_order , python_modules , bs = get_recipe_order_and_bootstrap (
8586 context , recipes_and_target , None )
87+ bootstrap = bs .name
8688 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+ TargetPython .python2legacy
98+ ]
99+
100+ recipes = modified_recipes ()
101+ logger .info ('recipes modified: {}' .format (recipes ))
102+ recipes -= CORE_RECIPES
103+ logger .info ('recipes to build: {}' .format (recipes ))
104+
105+ # iterate over `target_python_priorities` in order to find the
106+ # python version that is compatible with the modified recipes
107+ bootstrap = None
108+ target_python = None
109+ for target_python in target_python_priorities :
110+ logger .info ('trying to get a bootstrap forcing target python: {}' .
111+ format (target_python .name ))
112+ bootstrap = get_bootstrap (recipes | {target_python .name })
113+ if bootstrap :
114+ break
115+ if not bootstrap :
116+ logger .warning ("we didn't find any valid combination of bootstrap and "
117+ "target python...rebuild updated recipes cancelled."
118+ "The recipes we couldn't rebuild are:\n \t -{}" .format (
119+ "\n \t -" .join (recipes )))
120+ exit (1 )
121+
91122 # removing the known broken recipe for the given target
92123 broken_recipes = BROKEN_RECIPES [target_python ]
93124 recipes -= broken_recipes
94125 logger .info ('recipes to build (no broken): {}' .format (recipes ))
95- build (target_python , recipes )
126+ build (target_python , bootstrap , recipes )
96127
97128
98129if __name__ == '__main__' :
0 commit comments