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