@@ -1012,6 +1012,30 @@ def format_key_value(v):
10121012 return v [0 ] if len (v ) == 1 else f"{ v [0 ]} ={ v [1 ]} "
10131013 return v
10141014
1015+ def get_dependencies (file , env , exts , headers , sources , others ):
1016+ for child in file .children ():
1017+ if isinstance (child , str ):
1018+ child = env .File (x )
1019+ fname = ""
1020+ try :
1021+ fname = child .path
1022+ except AttributeError :
1023+ # It's not a file.
1024+ pass
1025+
1026+ if fname :
1027+ parts = os .path .splitext (fname )
1028+ if len (parts ) > 1 :
1029+ ext = parts [1 ].lower ()
1030+ if ext in exts ["sources" ]:
1031+ sources += [fname ]
1032+ elif ext in exts ["headers" ]:
1033+ headers += [fname ]
1034+ elif ext in exts ["others" ]:
1035+ others += [fname ]
1036+
1037+ get_dependencies (child , env , exts , headers , sources , others )
1038+
10151039 filtered_args = original_args .copy ()
10161040
10171041 # Ignore the "vsproj" option to not regenerate the VS project on every build
@@ -1073,26 +1097,28 @@ def format_key_value(v):
10731097 sys .path .remove (tmppath )
10741098 sys .modules .pop ("msvs" )
10751099
1100+ extensions = {}
1101+ extensions ["headers" ] = [".h" , ".hh" , ".hpp" , ".hxx" , ".inc" ]
1102+ extensions ["sources" ] = [".c" , ".cc" , ".cpp" , ".cxx" , ".m" , ".mm" , ".java" ]
1103+ extensions ["others" ] = [".natvis" , ".glsl" , ".rc" ]
1104+
10761105 headers = []
10771106 headers_dirs = []
1078- for file in glob_recursive_2 ("*.h" , headers_dirs ):
1079- headers .append (str (file ).replace ("/" , "\\ " ))
1080- for file in glob_recursive_2 ("*.hpp" , headers_dirs ):
1081- headers .append (str (file ).replace ("/" , "\\ " ))
1107+ for ext in extensions ["headers" ]:
1108+ for file in glob_recursive_2 ("*" + ext , headers_dirs ):
1109+ headers .append (str (file ).replace ("/" , "\\ " ))
10821110
10831111 sources = []
10841112 sources_dirs = []
1085- for file in glob_recursive_2 ("*.cpp" , sources_dirs ):
1086- sources .append (str (file ).replace ("/" , "\\ " ))
1087- for file in glob_recursive_2 ("*.c" , sources_dirs ):
1088- sources .append (str (file ).replace ("/" , "\\ " ))
1113+ for ext in extensions ["sources" ]:
1114+ for file in glob_recursive_2 ("*" + ext , sources_dirs ):
1115+ sources .append (str (file ).replace ("/" , "\\ " ))
10891116
10901117 others = []
10911118 others_dirs = []
1092- for file in glob_recursive_2 ("*.natvis" , others_dirs ):
1093- others .append (str (file ).replace ("/" , "\\ " ))
1094- for file in glob_recursive_2 ("*.glsl" , others_dirs ):
1095- others .append (str (file ).replace ("/" , "\\ " ))
1119+ for ext in extensions ["others" ]:
1120+ for file in glob_recursive_2 ("*" + ext , others_dirs ):
1121+ others .append (str (file ).replace ("/" , "\\ " ))
10961122
10971123 skip_filters = False
10981124 import hashlib
@@ -1156,58 +1182,13 @@ def format_key_value(v):
11561182 with open (f"{ project_name } .vcxproj.filters" , "w" , encoding = "utf-8" , newline = "\r \n " ) as f :
11571183 f .write (filters_template )
11581184
1159- envsources = []
1160-
1161- envsources += env .core_sources
1162- envsources += env .drivers_sources
1163- envsources += env .main_sources
1164- envsources += env .modules_sources
1165- envsources += env .scene_sources
1166- envsources += env .servers_sources
1167- if env .editor_build :
1168- envsources += env .editor_sources
1169- envsources += env .platform_sources
1170-
11711185 headers_active = []
11721186 sources_active = []
11731187 others_active = []
1174- for x in envsources :
1175- fname = ""
1176- if isinstance (x , str ):
1177- fname = env .File (x ).path
1178- else :
1179- # Some object files might get added directly as a File object and not a list.
1180- try :
1181- fname = env .File (x )[0 ].path
1182- except Exception :
1183- fname = x .path
1184- pass
11851188
1186- if fname :
1187- fname = fname .replace ("\\ \\ " , "/" )
1188- parts = os .path .splitext (fname )
1189- basename = parts [0 ]
1190- ext = parts [1 ]
1191- idx = fname .find (env ["OBJSUFFIX" ])
1192- if ext in [".h" , ".hpp" ]:
1193- headers_active += [fname ]
1194- elif ext in [".c" , ".cpp" ]:
1195- sources_active += [fname ]
1196- elif idx > 0 :
1197- basename = fname [:idx ]
1198- if os .path .isfile (basename + ".h" ):
1199- headers_active += [basename + ".h" ]
1200- elif os .path .isfile (basename + ".hpp" ):
1201- headers_active += [basename + ".hpp" ]
1202- elif basename .endswith (".gen" ) and os .path .isfile (basename [:- 4 ] + ".h" ):
1203- headers_active += [basename [:- 4 ] + ".h" ]
1204- if os .path .isfile (basename + ".c" ):
1205- sources_active += [basename + ".c" ]
1206- elif os .path .isfile (basename + ".cpp" ):
1207- sources_active += [basename + ".cpp" ]
1208- else :
1209- fname = os .path .relpath (os .path .abspath (fname ), env .Dir ("" ).abspath )
1210- others_active += [fname ]
1189+ get_dependencies (
1190+ env .File (f"#bin/godot{ env ['PROGSUFFIX' ]} " ), env , extensions , headers_active , sources_active , others_active
1191+ )
12111192
12121193 all_items = []
12131194 properties = []
0 commit comments