14576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#!/usr/bin/env python 24576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 34576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangimport glob 44576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangimport os 54576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangimport re 64576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangimport sys 74576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 84576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 9d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Blockdef main(): 10cad810f21b803229eb11403f9209855525a25d57Steve Block # It's fragile to rely on the location of this script to find the top-level 11cad810f21b803229eb11403f9209855525a25d57Steve Block # source directory. 12cad810f21b803229eb11403f9209855525a25d57Steve Block top_level_directory = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) 134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 14f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch vsprops_directory = os.path.join(top_level_directory, 'WebKitLibraries', 'win', 'tools', 'vsprops') 15f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch vsprops_files = glob.glob(os.path.join(vsprops_directory, '*.vsprops')) 16f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch assert len(vsprops_files), "Couldn't find any .vsprops files in %s" % vsprops_directory 17f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch newest_vsprops_time = max(map(os.path.getmtime, vsprops_files)) 18f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 19cad810f21b803229eb11403f9209855525a25d57Steve Block obj_directory = os.path.join(os.environ['CONFIGURATIONBUILDDIR'], 'obj') 2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # Visual Studio isn't smart enough to figure out it needs to rebuild these file types when 2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # .vsprops files change (even if we touch wtf/Platform.h below), so we delete them to force them 2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # to be rebuilt. 242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for extension in ('dep', 'manifest', 'pch', 'res'): 2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for filepath in glob.iglob(os.path.join(obj_directory, '*', '*.%s' % extension)): 2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch delete_if_older_than(filepath, newest_vsprops_time) 274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch # Touch wtf/Platform.h so all files will be recompiled. This is necessary 29f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch # to pick up changes to preprocessor macros (e.g., ENABLE_*). 30cad810f21b803229eb11403f9209855525a25d57Steve Block wtf_platform_h = os.path.join(top_level_directory, 'Source', 'JavaScriptCore', 'wtf', 'Platform.h') 31f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if os.path.getmtime(wtf_platform_h) < newest_vsprops_time: 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch print 'Touching wtf/Platform.h' 33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch os.utime(wtf_platform_h, None) 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 362fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockdef delete_if_older_than(path, reference_time): 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if os.path.getmtime(path) < reference_time: 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block print 'Deleting %s' % path 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block os.remove(path) 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangif __name__ == '__main__': 434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang sys.exit(main()) 44