@@ -1007,6 +1007,30 @@ def format_key_value(v):
10071007 return v [0 ] if len (v ) == 1 else f"{ v [0 ]} ={ v [1 ]} "
10081008 return v
10091009
1010+ def get_dependencies (file , env , exts , headers , sources , others ):
1011+ for child in file .children ():
1012+ if isinstance (child , str ):
1013+ child = env .File (x )
1014+ fname = ""
1015+ try :
1016+ fname = child .path
1017+ except AttributeError :
1018+ # It's not a file.
1019+ pass
1020+
1021+ if fname :
1022+ parts = os .path .splitext (fname )
1023+ if len (parts ) > 1 :
1024+ ext = parts [1 ].lower ()
1025+ if ext in exts ["sources" ]:
1026+ sources += [fname ]
1027+ elif ext in exts ["headers" ]:
1028+ headers += [fname ]
1029+ elif ext in exts ["others" ]:
1030+ others += [fname ]
1031+
1032+ get_dependencies (child , env , exts , headers , sources , others )
1033+
10101034 filtered_args = original_args .copy ()
10111035
10121036 # Ignore the "vsproj" option to not regenerate the VS project on every build
@@ -1068,26 +1092,28 @@ def format_key_value(v):
10681092 sys .path .remove (tmppath )
10691093 sys .modules .pop ("msvs" )
10701094
1095+ extensions = {}
1096+ extensions ["headers" ] = [".h" , ".hh" , ".hpp" , ".hxx" , ".inc" ]
1097+ extensions ["sources" ] = [".c" , ".cc" , ".cpp" , ".cxx" , ".m" , ".mm" , ".java" ]
1098+ extensions ["others" ] = [".natvis" , ".glsl" , ".rc" ]
1099+
10711100 headers = []
10721101 headers_dirs = []
1073- for file in glob_recursive_2 ("*.h" , headers_dirs ):
1074- headers .append (str (file ).replace ("/" , "\\ " ))
1075- for file in glob_recursive_2 ("*.hpp" , headers_dirs ):
1076- headers .append (str (file ).replace ("/" , "\\ " ))
1102+ for ext in extensions ["headers" ]:
1103+ for file in glob_recursive_2 ("*" + ext , headers_dirs ):
1104+ headers .append (str (file ).replace ("/" , "\\ " ))
10771105
10781106 sources = []
10791107 sources_dirs = []
1080- for file in glob_recursive_2 ("*.cpp" , sources_dirs ):
1081- sources .append (str (file ).replace ("/" , "\\ " ))
1082- for file in glob_recursive_2 ("*.c" , sources_dirs ):
1083- sources .append (str (file ).replace ("/" , "\\ " ))
1108+ for ext in extensions ["sources" ]:
1109+ for file in glob_recursive_2 ("*" + ext , sources_dirs ):
1110+ sources .append (str (file ).replace ("/" , "\\ " ))
10841111
10851112 others = []
10861113 others_dirs = []
1087- for file in glob_recursive_2 ("*.natvis" , others_dirs ):
1088- others .append (str (file ).replace ("/" , "\\ " ))
1089- for file in glob_recursive_2 ("*.glsl" , others_dirs ):
1090- others .append (str (file ).replace ("/" , "\\ " ))
1114+ for ext in extensions ["others" ]:
1115+ for file in glob_recursive_2 ("*" + ext , others_dirs ):
1116+ others .append (str (file ).replace ("/" , "\\ " ))
10911117
10921118 skip_filters = False
10931119 import hashlib
@@ -1151,58 +1177,13 @@ def format_key_value(v):
11511177 with open (f"{ project_name } .vcxproj.filters" , "w" , encoding = "utf-8" , newline = "\r \n " ) as f :
11521178 f .write (filters_template )
11531179
1154- envsources = []
1155-
1156- envsources += env .core_sources
1157- envsources += env .drivers_sources
1158- envsources += env .main_sources
1159- envsources += env .modules_sources
1160- envsources += env .scene_sources
1161- envsources += env .servers_sources
1162- if env .editor_build :
1163- envsources += env .editor_sources
1164- envsources += env .platform_sources
1165-
11661180 headers_active = []
11671181 sources_active = []
11681182 others_active = []
1169- for x in envsources :
1170- fname = ""
1171- if isinstance (x , str ):
1172- fname = env .File (x ).path
1173- else :
1174- # Some object files might get added directly as a File object and not a list.
1175- try :
1176- fname = env .File (x )[0 ].path
1177- except Exception :
1178- fname = x .path
1179- pass
11801183
1181- if fname :
1182- fname = fname .replace ("\\ \\ " , "/" )
1183- parts = os .path .splitext (fname )
1184- basename = parts [0 ]
1185- ext = parts [1 ]
1186- idx = fname .find (env ["OBJSUFFIX" ])
1187- if ext in [".h" , ".hpp" ]:
1188- headers_active += [fname ]
1189- elif ext in [".c" , ".cpp" ]:
1190- sources_active += [fname ]
1191- elif idx > 0 :
1192- basename = fname [:idx ]
1193- if os .path .isfile (basename + ".h" ):
1194- headers_active += [basename + ".h" ]
1195- elif os .path .isfile (basename + ".hpp" ):
1196- headers_active += [basename + ".hpp" ]
1197- elif basename .endswith (".gen" ) and os .path .isfile (basename [:- 4 ] + ".h" ):
1198- headers_active += [basename [:- 4 ] + ".h" ]
1199- if os .path .isfile (basename + ".c" ):
1200- sources_active += [basename + ".c" ]
1201- elif os .path .isfile (basename + ".cpp" ):
1202- sources_active += [basename + ".cpp" ]
1203- else :
1204- fname = os .path .relpath (os .path .abspath (fname ), env .Dir ("" ).abspath )
1205- others_active += [fname ]
1184+ get_dependencies (
1185+ env .File (f"#bin/godot{ env ['PROGSUFFIX' ]} " ), env , extensions , headers_active , sources_active , others_active
1186+ )
12061187
12071188 all_items = []
12081189 properties = []
0 commit comments