diff options
-rw-r--r-- | base/base_lib.scons | 307 | ||||
-rw-r--r-- | base/base_sln.scons | 2 | ||||
-rw-r--r-- | base/base_unittests.scons | 128 | ||||
-rw-r--r-- | base/debug_message.scons | 51 | ||||
-rw-r--r-- | base/gfx/base_gfx.scons | 65 | ||||
-rw-r--r-- | build/SConscript.main | 2 | ||||
-rw-r--r-- | chrome/chrome_sln.scons | 2 | ||||
-rw-r--r-- | net/net_sln.scons | 2 | ||||
-rw-r--r-- | sandbox/sandbox_sln.scons | 2 | ||||
-rw-r--r-- | site_scons/site_tools/_Node_MSVS.py | 684 | ||||
-rw-r--r-- | site_scons/site_tools/chromium_builders.py | 136 | ||||
-rw-r--r-- | skia/SConscript | 565 | ||||
-rw-r--r-- | testing/SConscript.gtest | 58 | ||||
-rw-r--r-- | third_party/libpng/libpng.scons | 73 | ||||
-rw-r--r-- | third_party/scons/scons-local/SCons/Node/FS.py | 2 | ||||
-rw-r--r-- | third_party/zlib/zlib.scons | 47 | ||||
-rw-r--r-- | webkit/webkit_sln.scons | 2 |
17 files changed, 1812 insertions, 316 deletions
diff --git a/base/base_lib.scons b/base/base_lib.scons index 197832e..e7a83fd 100644 --- a/base/base_lib.scons +++ b/base/base_lib.scons @@ -21,93 +21,246 @@ if env.Bit('windows'): ], ) +# Add object files David M Gay's dtoa and g_fmt third party lib. We +# compile these separately so we can disable warnings. +env_dmg_fp = env.Clone() +if env_dmg_fp.Bit('windows'): + env_dmg_fp.Append( + CCFLAGS = [ + '/wd4018', + '/wd4102', + '/wd4244', + '/wd4554', + ], + ) +elif env_dmg_fp.Bit('posix'): + for var in ['CCFLAGS', 'CXXFLAGS']: + if '-Wall' in env_dmg_fp[var]: + env_dmg_fp[var].remove('-Wall') + env_dmg_fp[var].append('-Wno-write-strings') + +dtoa_cc = env_dmg_fp.ChromeObject('third_party/dmg_fp/dtoa.cc') + +g_fmt_cc = env_dmg_fp.ChromeObject('third_party/dmg_fp/g_fmt.cc') + # Some files from this list are not yet ported. They are removed from # the list, see code below. -input_files = [ +input_files = ChromeFileList([ 'at_exit.cc', + 'at_exit.h', + 'atomic_ref_count.h', + 'atomic_sequence_num.h', + 'atomicops.h', + 'atomicops_internals_x86_msvc.h', + 'base_drag_source.cc', + 'base_drag_source.h', + 'base_drop_target.cc', + 'base_drop_target.h', 'base_paths.cc', + 'base_paths.h', + 'base_paths_win.cc', + 'base_paths_win.h', 'base_switches.cc', + 'base_switches.h', + 'basictypes.h', + 'third_party/nss/blapi.h', + 'third_party/nss/blapit.h', + '../build/build_config.h', 'bzip2_error_handler.cc', 'clipboard.cc', + 'clipboard.h', 'clipboard_util.cc', + 'clipboard_util.h', + 'clipboard_win.cc', 'command_line.cc', + 'command_line.h', + 'compiler_specific.h', + 'condition_variable.h', + 'condition_variable_win.cc', + 'cpu.cc', + 'cpu.h', + 'debug_on_start.cc', + 'debug_on_start.h', 'debug_util.cc', + 'debug_util.h', + 'debug_util_win.cc', + 'directory_watcher.h', + 'directory_watcher_win.cc', + 'third_party/dmg_fp/dmg_fp.h', + dtoa_cc, 'event_recorder.cc', + 'event_recorder.h', 'field_trial.cc', + 'field_trial.h', 'file_path.cc', + 'file_path.h', 'file_util.cc', + 'file_util.h', + 'file_util_win.cc', 'file_version_info.cc', + 'file_version_info.h', + 'fix_wp64.h', + 'float_util.h', + g_fmt_cc, + 'hash_tables.h', 'histogram.cc', + 'histogram.h', + 'hmac.h', + 'hmac_win.cc', + 'iat_patch.cc', + 'iat_patch.h', 'icu_util.cc', + 'icu_util.h', + 'id_map.h', 'idle_timer.cc', + 'idle_timer.h', + 'image_util.cc', + 'image_util.h', 'json_reader.cc', + 'json_reader.h', 'json_writer.cc', + 'json_writer.h', 'lazy_instance.cc', + 'lazy_instance.h', + 'linked_ptr.h', 'lock.cc', + 'lock.h', + 'lock_impl.h', + 'lock_impl_win.cc', 'logging.cc', + 'logging.h', 'md5.cc', + 'md5.h', 'memory_debug.cc', + 'memory_debug.h', 'message_loop.cc', + 'message_loop.h', + 'message_pump.h', 'message_pump_default.cc', + 'message_pump_default.h', + 'message_pump_win.cc', + 'message_pump_win.h', 'non_thread_safe.cc', + 'non_thread_safe.h', 'object_watcher.cc', + 'object_watcher.h', + 'observer_list.h', + 'observer_list_threadsafe.h', 'path_service.cc', + 'path_service.h', + 'pe_image.cc', + 'pe_image.h', 'pickle.cc', + 'pickle.h', + 'platform_file.h', + 'platform_file_win.cc', + 'platform_thread.h', + 'platform_thread_win.cc', + 'port.h', + 'third_party/nspr/prcpucfg.h', + 'third_party/nspr/prcpucfg_win.h', + 'process.h', + 'process_util.h', + 'process_util_win.cc', + 'process_win.cc', + 'third_party/nspr/prtime.cc', + 'third_party/nspr/prtime.h', + 'third_party/nspr/prtypes.h', + 'third_party/purify/pure.h', + 'third_party/purify/pure_api.c', 'rand_util.cc', + 'rand_util.h', + 'rand_util_win.cc', 'ref_counted.cc', + 'ref_counted.h', + 'registry.cc', + 'registry.h', 'resource_util.cc', + 'resource_util.h', 'revocable_store.cc', + 'revocable_store.h', 'scoped_clipboard_writer.cc', + 'scoped_clipboard_writer.h', + 'scoped_handle.h', + 'scoped_nsautorelease_pool.h', + 'scoped_ptr.h', 'sha2.cc', + 'sha2.h', + 'third_party/nss/sha256.h', + 'third_party/nss/sha512.cc', + 'shared_memory.h', + 'shared_memory_win.cc', 'simple_thread.cc', + 'simple_thread.h', + 'singleton.h', + 'spin_wait.h', + 'stack_container.h', + 'stats_counters.h', 'stats_table.cc', + 'stats_table.h', + 'string16.h', 'string_escape.cc', + 'string_escape.h', 'string_piece.cc', + 'string_piece.h', + 'string_tokenizer.h', 'string_util.cc', + 'string_util.h', 'string_util_icu.cc', + 'string_util_win.h', + 'sys_info.h', + 'sys_info_win.cc', + 'sys_string_conversions.h', + 'sys_string_conversions_win.cc', 'system_monitor.cc', - 'third_party/nspr/prtime.cc', - 'third_party/nss/sha512.cc', + 'system_monitor.h', + 'system_monitor_win.cc', + 'task.h', + 'test_file_util_win.cc', + 'test_file_util.h', 'thread.cc', + 'thread.h', 'thread_collision_warner.cc', + 'thread_collision_warner.h', + 'thread_local.h', + 'thread_local_storage.h', + 'thread_local_storage_win.cc', + 'thread_local_win.cc', 'time.cc', + 'time.h', 'time_format.cc', + 'time_format.h', + 'time_win.cc', 'timer.cc', + 'timer.h', 'trace_event.cc', + 'trace_event.h', 'tracked.cc', + 'tracked.h', 'tracked_objects.cc', + 'tracked_objects.h', + 'tuple.h', 'values.cc', + 'values.h', + 'waitable_event.h', + 'waitable_event_win.cc', 'watchdog.cc', + 'watchdog.h', + 'win_util.cc', + 'win_util.h', + 'windows_message_list.h', + 'wmi_util.cc', + 'wmi_util.h', 'word_iterator.cc', -] - -# Add object files David M Gay's dtoa and g_fmt third party lib. We -# compile these separately so we can disable warnings. -env_dmg_fp = env.Clone() -if env_dmg_fp.Bit('windows'): - env_dmg_fp.Append( - CCFLAGS = [ - '/wd4018', - '/wd4102', - '/wd4244', - '/wd4554', - ], - ) -elif env_dmg_fp.Bit('posix'): - for var in ['CCFLAGS', 'CXXFLAGS']: - if '-Wall' in env_dmg_fp[var]: - env_dmg_fp[var].remove('-Wall') - env_dmg_fp[var].append('-Wno-write-strings') - -input_files.extend([ - env_dmg_fp.Object('third_party/dmg_fp/dtoa.cc'), - env_dmg_fp.Object('third_party/dmg_fp/g_fmt.cc'), + 'word_iterator.h', + 'worker_pool.cc', + 'worker_pool.h', ]) if env.Bit('posix'): # Remove files that still need to be ported from the input_files list. # TODO(port): delete files from this list as they get ported. - to_be_ported_files = [ + input_files.Remove( 'clipboard_util.cc', 'event_recorder.cc', 'file_version_info.cc', @@ -119,12 +272,16 @@ if env.Bit('posix'): 'object_watcher.cc', 'resource_util.cc', # Uses HMODULE, but may be abstractable. - ] - for remove in to_be_ported_files: - input_files.remove(remove) + ) -if env.Bit('windows'): - input_files.extend([ +if not env.Bit('windows'): + # Remove windows-specific files on non-Windows platforms. + # TODO(sgk): + # Remove the windows-specific files from the input_files list above + # and turn this back in to an add-on-Windows list (like we used to) + # once we're comfortable re-ordering the files in the generated + # .vcproj file(s). + input_files.Remove( 'base_drag_source.cc', 'base_drop_target.cc', 'base_paths_win.cc', @@ -160,10 +317,10 @@ if env.Bit('windows'): 'win_util.cc', 'wmi_util.cc', 'worker_pool.cc', - ]) + ) if env.Bit('posix'): - input_files.extend([ + input_files.Extend([ 'condition_variable_posix.cc', 'debug_util_posix.cc', 'file_util_posix.cc', @@ -183,7 +340,7 @@ if env.Bit('posix'): ]) if env.Bit('mac'): - input_files.extend([ + input_files.Extend([ 'base_paths_mac.mm', 'clipboard_mac.mm', 'file_util_mac.mm', @@ -199,7 +356,7 @@ if env.Bit('mac'): ]) if env.Bit('linux'): - input_files.extend([ + input_files.Extend([ 'atomicops_internals_x86_gcc.cc', 'base_paths_linux.cc', 'clipboard_linux.cc', @@ -217,8 +374,76 @@ if env.Bit('linux'): env.ChromeStaticLibrary('base', input_files) -env.ChromeMSVSProject('$BASE_DIR/build/base.vcproj', - dependencies = [ - '$BASE_DIR/build/debug_message.vcproj', - ], - guid='{1832A374-8A74-4F9E-B536-69A699B3E165}') +p = env.ChromeMSVSProject('build/base.vcproj', + guid='{1832A374-8A74-4F9E-B536-69A699B3E165}', + dependencies=[ + 'build/debug_message.vcproj', + ], + files=input_files, + tools=[ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + 'VCCLCompilerTool', + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + 'VCLibrarianTool', + 'VCALinkTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/debug.vsprops', + './base.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/release.vsprops', + './base.vsprops', + ]) + +p.AddFileConfig( + 'third_party/dmg_fp/dtoa.cc', + 'Debug|Win32', + tools=[ + MSVSTool('VCCLCompilerTool', + DisableSpecificWarnings='4244;4554;4018;4102'), + ]) + +p.AddFileConfig( + 'third_party/dmg_fp/dtoa.cc', + 'Release|Win32', + tools=[ + MSVSTool('VCCLCompilerTool', + DisableSpecificWarnings='4244;4554;4018;4102'), + ]) + +p.AddFileConfig( + 'third_party/dmg_fp/g_fmt.cc', + 'Debug|Win32', + tools=[ + MSVSTool('VCCLCompilerTool', DisableSpecificWarnings='4102'), + ]) + +p.AddFileConfig( + 'third_party/dmg_fp/g_fmt.cc', + 'Release|Win32', + tools=[ + MSVSTool('VCCLCompilerTool', DisableSpecificWarnings='4102'), + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/base/build/base.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/base/base_sln.scons b/base/base_sln.scons index c81f7e3..f86666c 100644 --- a/base/base_sln.scons +++ b/base/base_sln.scons @@ -48,4 +48,4 @@ env.AlwaysBuild(solution) i = env.Command('$CHROME_SRC_DIR/base/base.sln', solution, Copy('$TARGET', '$SOURCE')) -Alias('solutions', i) +Alias('msvs', i) diff --git a/base/base_unittests.scons b/base/base_unittests.scons index b14291c..66be1f3 100644 --- a/base/base_unittests.scons +++ b/base/base_unittests.scons @@ -41,17 +41,30 @@ if env.Bit('linux'): ], ) -# These test files work on *all* platforms; tests that don't work -# cross-platform live below. -input_files = [ +input_files = ChromeFileList([ + # TODO(sgk): + # We're deliberately mis-indenting the MSVSFilter() calls here + # so we don't have to re-indent the file name entries when the + # MSVSFilter() calls go away in (favor of automated generation + # of the heirarchy). + MSVSFilter('support', [ + 'multiprocess_test.h', + 'no_windows2000_unittest.h', + 'run_all_unittests.cc', + 'test_suite.h', + ]), + + MSVSFilter('base_tests', [ 'at_exit_unittest.cc', 'atomicops_unittest.cc', 'clipboard_unittest.cc', 'command_line_unittest.cc', 'condition_variable_unittest.cc', + 'directory_watcher_unittest.cc', 'field_trial_unittest.cc', 'file_path_unittest.cc', 'file_util_unittest.cc', + 'file_version_info_unittest.cc', 'histogram_unittest.cc', 'hmac_unittest.cc', 'idletimer_unittest.cc', @@ -60,14 +73,17 @@ input_files = [ 'lazy_instance_unittest.cc', 'linked_ptr_unittest.cc', 'message_loop_unittest.cc', + 'gfx/native_theme_unittest.cc', + 'object_watcher_unittest.cc', 'observer_list_unittest.cc', 'path_service_unittest.cc', + 'pe_image_unittest.cc', 'pickle_unittest.cc', 'pr_time_unittest.cc', 'process_util_unittest.cc', 'rand_util_unittest.cc', + 'gfx/rect_unittest.cc', 'ref_counted_unittest.cc', - 'run_all_unittests.cc', 'scoped_ptr_unittest.cc', 'sha2_unittest.cc', 'shared_memory_unittest.cc', @@ -80,81 +96,127 @@ input_files = [ 'string_tokenizer_unittest.cc', 'string_util_unittest.cc', 'sys_info_unittest.cc', + 'sys_string_conversions_unittest.cc', + 'system_monitor_unittest.cc', 'thread_collision_warner_unittest.cc', 'thread_local_storage_unittest.cc', 'thread_local_unittest.cc', 'thread_unittest.cc', 'time_unittest.cc', + 'time_unittest_win.cc', 'timer_unittest.cc', 'tracked_objects_unittest.cc', 'tuple_unittest.cc', 'values_unittest.cc', 'waitable_event_unittest.cc', 'watchdog_unittest.cc', + 'win_util_unittest.cc', + 'wmi_util_unittest.cc', 'word_iterator_unittest.cc', - 'worker_pool_unittest.cc', - - 'gfx/native_theme_unittest.cc', + ]), + + MSVSFilter('gfx_tests', [ 'gfx/png_codec_unittest.cc', - 'gfx/rect_unittest.cc', -] + ]), +]) if env.Bit('posix'): # Remove files that still need to be ported from the input_files list. # TODO(port): delete files from this list as they get ported. - to_be_ported_files = [ + input_files.Remove( # We have an implementation of idle_timer, but it's unclear if we want it # yet, so it's commented out for now. Leave this 'unported'. 'idletimer_unittest.cc', 'gfx/native_theme_unittest.cc', - ] - for remove in to_be_ported_files: - input_files.remove(remove) + ) if env.Bit('mac'): # Remove files that still need to be ported from the input_files list. # TODO(port): delete files from this list as they get ported. - to_be_ported_files = [ + input_files.Remove( 'process_util_unittest.cc', 'stats_table_unittest.cc', - ] - for remove in to_be_ported_files: - input_files.remove(remove) + ) -if env.Bit('windows'): - # Windows-specific tests. - input_files.extend([ +if not env.Bit('windows'): + # Remove Windows-specific tests. + input_files.Remove( 'directory_watcher_unittest.cc', 'file_version_info_unittest.cc', 'object_watcher_unittest.cc', 'pe_image_unittest.cc', + 'system_monitor_unittest.cc', 'sys_string_conversions_unittest.cc', 'time_unittest_win.cc', 'win_util_unittest.cc', 'wmi_util_unittest.cc', - ]) + ) if env.Bit('mac'): # Mac-specific tests. - input_files.extend([ + input_files.Extend([ 'mac_util_unittest.cc', ]) env.ChromeTestProgram('base_unittests', input_files) -env.ChromeMSVSProject('$BASE_DIR/build/base_unittests.vcproj', - dependencies = [ - '$BASE_DIR/build/base.vcproj', - '$ZLIB_DIR/zlib.vcproj', - '$ICU38_DIR/build/icu.vcproj', - '$BASE_DIR/build/base_gfx.vcproj', - '$TESTING_DIR/gtest.vcproj', - '$LIBPNG_DIR/libpng.vcproj', - '$SKIA_DIR/skia.vcproj', - ], - guid='{27A30967-4BBA-48D1-8522-CDE95F7B1CEC}') +p = env.ChromeMSVSProject('build/base_unittests.vcproj', + guid='{27A30967-4BBA-48D1-8522-CDE95F7B1CEC}', + dependencies=[ + '$BASE_DIR/build/base.vcproj', + '$ZLIB_DIR/zlib.vcproj', + '$ICU38_DIR/build/icu.vcproj', + '$BASE_DIR/build/base_gfx.vcproj', + '$TESTING_DIR/gtest.vcproj', + '$LIBPNG_DIR/libpng.vcproj', + '$SKIA_DIR/skia.vcproj', + ], + files=input_files, + tools = [ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + MSVSTool('VCCLCompilerTool', + PreprocessorDefinitions='UNIT_TEST'), + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + 'VCLinkerTool', + 'VCALinkTool', + 'VCManifestTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCAppVerifierTool', + 'VCWebDeploymentTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '1', + InheritedPropertySheets = [ + '$(SolutionDir)../build/debug.vsprops', + './base_unittests.vsprops', + '$(SolutionDir)../testing/using_gtest.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '1', + InheritedPropertySheets = [ + '$(SolutionDir)../build/release.vsprops', + './base_unittests.vsprops', + '$(SolutionDir)../testing/using_gtest.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/base/build/base_unittests.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) # TODO(sgk) should this be moved into base.lib like everything else? This will # require updating a bunch of other SConscripts which link directly against diff --git a/base/debug_message.scons b/base/debug_message.scons index e21aaf2..5ae6f24 100644 --- a/base/debug_message.scons +++ b/base/debug_message.scons @@ -18,11 +18,60 @@ if env.Bit('windows'): ], ) +input_files = ChromeFileList([ + 'debug_message.cc', +]) + if env.Bit('windows'): # TODO(port): port this if it's needed on non-Windows systems, # or remove this comment (and merge with the above block?) # if it's really Windows-specific. - env.ChromeProgram('debug_message', ['debug_message.cc']) + env.ChromeProgram('debug_message', input_files) env.ChromeMSVSProject('$BASE_DIR/build/debug_message.vcproj', guid='{0E5474AC-5996-4B13-87C0-4AE931EE0815}') + +p = env.ChromeMSVSProject('build/debug_message.vcproj', + guid='{0E5474AC-5996-4B13-87C0-4AE931EE0815}', + files=input_files, + root_namespace='DebugMessage', + tools = [ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + 'VCCLCompilerTool', + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + MSVSTool('VCLinkerTool', SubSystem='2'), + 'VCALinkTool', + 'VCManifestTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCAppVerifierTool', + 'VCWebDeploymentTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '1', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/debug.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '1', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/release.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/base/build/debug_message.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/base/gfx/base_gfx.scons b/base/gfx/base_gfx.scons index b9c2e2d..bcffedc 100644 --- a/base/gfx/base_gfx.scons +++ b/base/gfx/base_gfx.scons @@ -24,34 +24,79 @@ if env.Bit('windows'): ], ) -input_files = [ +input_files = ChromeFileList([ 'gdi_util.cc', + 'gdi_util.h', 'native_theme.cc', + 'native_theme.h', 'png_decoder.cc', + 'png_decoder.h', 'png_encoder.cc', + 'png_encoder.h', 'point.cc', + 'point.h', 'rect.cc', + 'rect.h', 'size.cc', -] + 'size.h', +]) if env.Bit('posix'): # Remove files that still need to be ported from the input_files list. # TODO(port): delete files from this list as they get ported. - to_be_ported_files = [ + input_files.Remove( 'gdi_util.cc', 'native_theme.cc', - ] - for remove in to_be_ported_files: - input_files.remove(remove) + ) if env.Bit('windows'): - input_files.extend([ + input_files.Extend([ ]) elif env.Bit('linux'): - input_files.extend([ + input_files.Extend([ ]) env.ChromeStaticLibrary('base_gfx', input_files) -env.ChromeMSVSProject('$BASE_DIR/build/base_gfx.vcproj', - guid='{A508ADD3-CECE-4E0F-8448-2F5E454DF551}') +p = env.ChromeMSVSProject('../build/base_gfx.vcproj', + guid='{A508ADD3-CECE-4E0F-8448-2F5E454DF551}', + files=input_files, + tools=[ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + 'VCCLCompilerTool', + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + 'VCLibrarianTool', + 'VCALinkTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/debug.vsprops', + './base_gfx.vsprops', + '../../skia/using_skia.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/release.vsprops', + './base_gfx.vsprops', + '../../skia/using_skia.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/base/build/base_gfx.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/build/SConscript.main b/build/SConscript.main index 07d01ad3..5e6bfb1 100644 --- a/build/SConscript.main +++ b/build/SConscript.main @@ -746,7 +746,7 @@ if set(modes) - set(['msvs', 'xcode']): if 'msvs' in modes: # We're in --mode=msvs, so add its Alias(es) to the default targets. - Default(Alias('solutions')) + Default(Alias('msvs')) # ------------------------------------------------------------------------- diff --git a/chrome/chrome_sln.scons b/chrome/chrome_sln.scons index b95d6cd..03220ef 100644 --- a/chrome/chrome_sln.scons +++ b/chrome/chrome_sln.scons @@ -541,4 +541,4 @@ env.AlwaysBuild(solution) i = env.Command('$CHROME_SRC_DIR/chrome/chrome.sln', solution, Copy('$TARGET', '$SOURCE')) -Alias('solutions', i) +Alias('msvs', i) diff --git a/net/net_sln.scons b/net/net_sln.scons index 7823d8d..b262b60 100644 --- a/net/net_sln.scons +++ b/net/net_sln.scons @@ -71,4 +71,4 @@ env.AlwaysBuild(solution) i = env.Command('$CHROME_SRC_DIR/net/net.sln', solution, Copy('$TARGET', '$SOURCE')) -Alias('solutions', i) +Alias('msvs', i) diff --git a/sandbox/sandbox_sln.scons b/sandbox/sandbox_sln.scons index 9739155..243a8de 100644 --- a/sandbox/sandbox_sln.scons +++ b/sandbox/sandbox_sln.scons @@ -139,4 +139,4 @@ env.AlwaysBuild(solution) i = env.Command('$CHROME_SRC_DIR/sandbox/sandbox.sln', solution, Copy('$TARGET', '$SOURCE')) -Alias('solutions', i) +Alias('msvs', i) diff --git a/site_scons/site_tools/_Node_MSVS.py b/site_scons/site_tools/_Node_MSVS.py index 7cdfd82..d394d28 100644 --- a/site_scons/site_tools/_Node_MSVS.py +++ b/site_scons/site_tools/_Node_MSVS.py @@ -1,21 +1,43 @@ -#!/usr/bin/python2.4 -# Copyright 2008, Google Inc. -# All rights reserved. +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" __doc__ = """SCons.Node.MSVS -Microsoft Visual Studio nodes. +New implementation of Visual Studio project generation for SCons. """ -import SCons.Node.FS -import SCons.Script - - -"""New implementation of Visual Studio project generation for SCons.""" - import md5 import os import random +import re +import UserList +import xml.dom +import xml.dom.minidom + +import SCons.Node.FS +import SCons.Script # Initialize random number generator @@ -122,13 +144,81 @@ def LookupCreate(klass, item, *args, **kw): #------------------------------------------------------------------------------ -class _MSVSFolder(SCons.Node.Node): - """Folder in a Visual Studio project or solution.""" +class FileList(object): + def __init__(self, entries=None): + if isinstance(entries, FileList): + entries = entries.entries + self.entries = entries or [] + def __getitem__(self, i): + return self.entries[i] + def __setitem__(self, i, item): + self.entries[i] = item + def __delitem__(self, i): + del self.entries[i] + def __add__(self, other): + if isinstance(other, FileList): + return self.__class__(self.entries + other.entries) + elif isinstance(other, type(self.entries)): + return self.__class__(self.entries + other) + else: + return self.__class__(self.entries + list(other)) + def __radd__(self, other): + if isinstance(other, FileList): + return self.__class__(other.entries + self.entries) + elif isinstance(other, type(self.entries)): + return self.__class__(other + self.entries) + else: + return self.__class__(list(other) + self.entries) + def __iadd__(self, other): + if isinstance(other, FileList): + self.entries += other.entries + elif isinstance(other, type(self.entries)): + self.entries += other + else: + self.entries += list(other) + return self + def append(self, item): + return self.entries.append(item) + def extend(self, item): + return self.entries.extend(item) + def index(self, item, *args): + return self.entries.index(item, *args) + def remove(self, item): + return self.entries.remove(item) + +def FileListWalk(top, topdown=True, onerror=None): + """ + """ + try: + entries = top.entries + except AttributeError, err: + if onerror is not None: + onerror(err) + return + + dirs, nondirs = [], [] + for entry in entries: + if hasattr(entry, 'entries'): + dirs.append(entry) + else: + nondirs.append(entry) + + if topdown: + yield top, dirs, nondirs + for entry in dirs: + for x in FileListWalk(entry, topdown, onerror): + yield x + if not topdown: + yield top, dirs, nondirs + +#------------------------------------------------------------------------------ + +class _MSVSFolder(FileList): + """Folder in a Visual Studio solution.""" entry_type_guid = '{2150E333-8FDC-42A3-9474-1A3956D46DE8}' - def initialize(self, path, name = None, entries = None, guid = None, - items = None): + def initialize(self, path, name = None, entries = None, guid = None, items = None): """Initializes the folder. Args: @@ -143,6 +233,8 @@ class _MSVSFolder(SCons.Node.Node): items: List of solution items to include in the folder project. May be None, if the folder does not directly contain items. """ + super(_MSVSFolder, self).__init__(entries) + # For folder entries, the path is the same as the name self.msvs_path = path self.msvs_name = name or path @@ -150,7 +242,6 @@ class _MSVSFolder(SCons.Node.Node): self.guid = guid # Copy passed lists (or set to empty lists) - self.entries = list(entries or []) self.items = list(items or []) def get_guid(self): @@ -171,13 +262,183 @@ def MSVSFolder(env, item, *args, **kw): #------------------------------------------------------------------------------ +class MSVSConfig(object): + """Visual Studio configuration.""" + def __init__(self, Name, config_type, tools=[], **attrs): + """Initializes the configuration. + + Args: + **attrs: Configuration attributes. + """ + # Special handling for attributes that we want to make more + # convenient for the user. + ips = attrs.get('InheritedPropertySheets') + if ips: + if isinstance(ips, list): + ips = ';'.join(ips) + attrs['InheritedPropertySheets'] = ips.replace('/', '\\') + + tools = tools or [] + if not SCons.Util.is_List(tools): + tools = [tools] + tool_objects = [] + for t in tools: + if not isinstance(t, MSVSTool): + t = MSVSTool(t) + tool_objects.append(t) + + self.Name = Name + self.config_type = config_type + self.tools = tool_objects + self.attrs = attrs + + def CreateElement(self, doc): + """Creates an element for the configuration. + + Args: + doc: xml.dom.Document object to use for node creation. + + Returns: + A new xml.dom.Element for the configuration. + """ + node = doc.createElement(self.config_type) + node.setAttribute('Name', self.Name) + for k, v in self.attrs.items(): + node.setAttribute(k, v) + for t in self.tools: + node.appendChild(t.CreateElement(doc)) + return node + + +class MSVSFileListBase(FileList): + """Base class for a file list in a Visual Studio project file.""" + + def CreateElement(self, doc, node_func=lambda x: x): + """Creates an element for an MSVSFileListBase subclass. + + Args: + doc: xml.dom.Document object to use for node creation. + node_func: Function to use to return Nodes for objects that + don't have a CreateElement() method of their own. + + Returns: + A new xml.dom.Element for the MSVSFileListBase object. + """ + node = doc.createElement(self.element_name) + for entry in self.entries: + if hasattr(entry, 'CreateElement'): + n = entry.CreateElement(doc, node_func) + else: + n = node_func(entry) + node.appendChild(n) + return node + + +class MSVSFiles(MSVSFileListBase): + """Files list in a Visual Studio project file.""" + element_name = 'Files' + + +class MSVSFilter(MSVSFileListBase): + """Filter (that is, a virtual folder) in a Visual Studio project file.""" + + element_name = 'Filter' + + def __init__(self, Name, entries=None): + """Initializes the folder. + + Args: + Name: Filter (folder) name. + entries: List of filenames and/or Filter objects contained. + """ + super(MSVSFilter, self).__init__(entries) + self.Name = Name + + def CreateElement(self, doc, node_func=lambda x: x): + """Creates an element for the Filter. + + Args: + doc: xml.dom.Document object to use for node creation. + node_func: Function to use to return Nodes for objects that + don't have a CreateElement() method of their own. + + Returns: + A new xml.dom.Element for the filter. + """ + node = super(MSVSFilter, self).CreateElement(doc, node_func) + node.setAttribute('Name', self.Name) + return node + + +class MSVSTool(object): + """Visual Studio tool.""" + + def __init__(self, Name, **attrs): + """Initializes the tool. + + Args: + Name: Tool name. + **attrs: Tool attributes. + """ + self.Name = Name + self.attrs = attrs + + def CreateElement(self, doc): + """Creates an element for the tool. + + Args: + doc: xml.dom.Document object to use for node creation. + + Returns: + A new xml.dom.Element for the tool. + """ + node = doc.createElement('Tool') + node.setAttribute('Name', self.Name) + for k, v in self.attrs.items(): + node.setAttribute(k, v) + return node + + +class MSVSToolFile(object): + """Visual Studio tool file specification.""" + + def __init__(self, node, **attrs): + """Initializes the tool. + + Args: + node: Node for the Tool File + **attrs: Tool File attributes. + """ + self.node = node + + def CreateElement(self, doc, project): + result = doc.createElement('ToolFile') + result.setAttribute('RelativePath', project.get_rel_path(self.node)) + return result + + +#------------------------------------------------------------------------------ + +def MSVSAction(target, source, env): + target[0].Write(env) + +MSVSProjectAction = SCons.Script.Action(MSVSAction, + "Generating Visual Studio project `$TARGET' ...") class _MSVSProject(SCons.Node.FS.File): """Visual Studio project.""" entry_type_guid = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}' - def initialize(self, path, name = None, dependencies = None, guid = None): + def initialize(self, env, path, name = None, + dependencies = None, + guid = None, + buildtargets = [], + files = [], + root_namespace = None, + relative_path_prefix = '', + tools = None, + configurations = None): """Initializes the project. Args: @@ -187,14 +448,87 @@ class _MSVSProject(SCons.Node.FS.File): dependencies: List of other Project objects this project is dependent upon, if not None. guid: GUID to use for project, if not None. + buildtargets: List of target(s) being built by this project. + files: List of source files for the project. This will be + supplemented by any source files of buildtargets. + root_namespace: The value of the RootNamespace attribute of the + project, if not None. The default is to use the same + string as the name. + relative_path_prefix: A prefix to be appended to the beginning of + every file name in the list. The canonical use is to specify + './' to make files explicitly relative to the local directory. + tools: A list of MSVSTool objects or strings representing + tools to be used to build this project. This will be used + for any configurations that don't provide their own + per-configuration tool list. + configurations: A list of MSVSConfig objects representing + configurations built by this project. """ self.msvs_path = path - self.msvs_name = name or os.path.splitext(os.path.basename(self.name))[0] - + self.msvs_node = env.File(path) + if name is None: + if buildtargets: + name = os.path.splitext(buildtargets[0].name)[0] + else: + name = os.path.splitext(os.path.basename(path))[0] + self.msvs_name = name + self.root_namespace = root_namespace or self.msvs_name + self.buildtargets = buildtargets + self.relative_path_prefix = relative_path_prefix + self.tools = tools + + self.env = env self.guid = guid - # Copy passed lists (or set to empty lists) self.dependencies = list(dependencies or []) + self.configurations = list(configurations or []) + self.file_configurations = {} + self.tool_files = [] + + if not isinstance(files, MSVSFiles): + files = MSVSFiles(self.args2nodes(files)) + self.files = files + + env.Command(self, [], MSVSSolutionAction) + + def args2nodes(self, entries): + result = [] + for entry in entries: + if SCons.Util.is_String(entry): + entry = self.env.File(entry) + result.append(entry) + elif hasattr(entry, 'entries'): + entry.entries = self.args2nodes(entry.entries) + result.append(entry) + elif isinstance(entry, (list, UserList.UserList)): + result.extend(self.args2nodes(entry)) + elif hasattr(entry, 'sources') and entry.sources: + result.extend(entry.sources) + else: + result.append(entry) + return result + + def FindFile(self, node): + try: + flat_file_dict = self.flat_file_dict + except AttributeError: + flat_file_dict = {} + file_list = self.files[:] + while file_list: + entry = file_list.pop(0) + if not isinstance(entry, (list, UserList.UserList)): + entry = [entry] + for f in entry: + if hasattr(f, 'entries'): + file_list.extend(f.entries) + else: + flat_file_dict[f] = True + if hasattr(f, 'sources'): + for s in f.sources: + flat_file_dict[s] = True + self.flat_file_dict = flat_file_dict + + return flat_file_dict.get(node) def get_guid(self): if self.guid is None: @@ -220,28 +554,321 @@ class _MSVSProject(SCons.Node.FS.File): def get_msvs_path(self, sln): return sln.rel_path(self).replace('/', '\\') + def get_rel_path(self, node): + result = self.relative_path_prefix + self.msvs_node.rel_path(node) + return result.replace('/', '\\') + + def AddConfig(self, Name, tools=None, **attrs): + """Adds a configuration to the parent node. + + Args: + Name: The name of the configuration. + tools: List of tools (strings or Tool objects); may be None. + **attrs: Configuration attributes. + """ + if tools is None: + # No tool list specifically for this configuration, + # use the Project's as a default. + tools = self.tools + c = MSVSConfig(Name, 'Configuration', tools=tools, **attrs) + self.configurations.append(c) + + def AddFiles(self, files): + """Adds files to the project. + + Args: + files: A list of Filter objects and/or relative paths to files. + + This makes a copy of the file/filter tree at the time of this call. If you + later add files to a Filter object which was passed into a previous call + to AddFiles(), it will not be reflected in this project. + """ + # TODO(rspangler) This also doesn't handle adding files to an existing + # filter. That is, it doesn't merge the trees. + self.files.extend(self.args2nodes(files)) + + def AddFileConfig(self, path, Name, tools=None, **attrs): + """Adds a configuration to a file. + + Args: + path: Relative path to the file. + Name: Name of configuration to add. + tools: List of tools (strings or MSVSTool objects); may be None. + **attrs: Configuration attributes. + + Raises: + ValueError: Relative path does not match any file added via AddFiles(). + """ + node = self.env.File(path) + if not self.FindFile(node): + raise ValueError('AddFileConfig: file "%s" not in project' % path) + c = MSVSConfig(Name, 'FileConfiguration', tools=tools, **attrs) + config_list = self.file_configurations.get(node) + if config_list is None: + config_list = [] + self.file_configurations[node] = config_list + config_list.append(c) + + def AddToolFile(self, path): + """Adds a tool file to the project. + + Args: + path: Relative path from project to tool file. + """ + tf = MSVSToolFile(self.env.File(path)) + self.tool_files.append(tf) + + def Create(self): + """Creates the project document. + + Args: + name: Name of the project. + guid: GUID to use for project, if not None. + """ + # Create XML doc + xml_impl = xml.dom.getDOMImplementation() + self.doc = xml_impl.createDocument(None, 'VisualStudioProject', None) + + # Add attributes to root element + root = self.doc.documentElement + root.setAttribute('ProjectType', 'Visual C++') + root.setAttribute('Version', '8.00') + root.setAttribute('Name', self.msvs_name) + root.setAttribute('ProjectGUID', self.get_guid()) + root.setAttribute('RootNamespace', self.root_namespace) + root.setAttribute('Keyword', 'Win32Proj') + + # Add platform list + platforms = self.doc.createElement('Platforms') + root.appendChild(platforms) + n = self.doc.createElement('Platform') + n.setAttribute('Name', 'Win32') + platforms.appendChild(n) + + # Add tool files section + tool_files = self.doc.createElement('ToolFiles') + root.appendChild(tool_files) + for tf in self.tool_files: + tool_files.appendChild(tf.CreateElement(self.doc, self)) + + # Add configurations section + configs = self.doc.createElement('Configurations') + root.appendChild(configs) + for c in self.configurations: + configs.appendChild(c.CreateElement(self.doc)) + + # Add empty References section + root.appendChild(self.doc.createElement('References')) + + # Add files section + root.appendChild(self.files.CreateElement(self.doc, self.CreateFileElement)) + + # Add empty Globals section + root.appendChild(self.doc.createElement('Globals')) + + def CreateFileElement(self, file): + """Create a DOM node for the specified file. + + Args: + file: The file Node being considered. + + Returns: + A DOM Node for the File, with a relative path to the current + project object, and any file configurations attached to the + project. + """ + + node = self.doc.createElement('File') + node.setAttribute('RelativePath', self.get_rel_path(file)) + for c in self.file_configurations.get(file, []): + node.appendChild(c.CreateElement(self.doc)) + return node + + def _AddFileConfigurationDifferences(self, target, source, base_env, file_env): + """Adds a per-file configuration. + + Args: + target: The target being built from the source. + source: The source to which the file configuration is being added. + base_env: The base construction environment for the project. + Differences from this will go into the FileConfiguration + in the project file. + file_env: The construction environment for the target, containing + the per-target settings. + """ + pass + + def _AddFileConfigurations(self, env): + """Adds per-file configurations for the buildtarget's sources. + + Args: + env: The base construction environment for the project. + """ + if not self.buildtargets: + return + + bt = self.buildtargets[0] + additional_files = [] + for t in bt.sources: + e = t.get_build_env() + for s in t.sources: + s = env.arg2nodes([s])[0] + if not self.FindFile(s): + additional_files.append(s) + if not env is e: + self._AddFileConfigurationDifferences(t, s, env, e) + self.AddFiles(additional_files) + + def Write(self, env): + """Writes the project file.""" + self._AddFileConfigurations(env) + + self.Create() + + f = open(str(self.msvs_node), 'wt') + f.write(self.formatMSVSProjectXML(self.doc)) + f.close() + + # Methods for formatting XML as nearly identically to Microsoft's + # .vcproj output as we can practically make it. + # + # The general design here is copied from: + # + # Bruce Eckels' MindView, Inc: 12-09-04 XML Oddyssey + # http://www.mindview.net/WebLog/log-0068 + # + # Eckels' implementation broke up long tag definitions for readability, + # in much the same way that .vcproj does, but we've modified things + # for .vcproj quirks (like some tags *always* terminating with </Tag>, + # even when empty). + + encoding = 'Windows-1252' + + def formatMSVSProjectXML(self, xmldoc): + xmldoc = xmldoc.toprettyxml("", "\n", encoding=self.encoding) + # Remove trailing whitespace from each line: + xmldoc = "\n".join( + [line.rstrip() for line in xmldoc.split("\n")]) + # Remove all empty lines before opening '<': + while xmldoc.find("\n\n<") != -1: + xmldoc = xmldoc.replace("\n\n<", "\n<") + dom = xml.dom.minidom.parseString(xmldoc) + xmldoc = dom.toprettyxml("\t", "", encoding=self.encoding) + xmldoc = xmldoc.replace('?><', '?>\n<') + xmldoc = self.reformatLines(xmldoc) + return xmldoc + + def reformatLines(self, xmldoc): + result = [] + for line in [line.rstrip() for line in xmldoc.split("\n")]: + if line.lstrip().startswith("<"): + result.append(self.reformatLine(line) + "\n") + else: + result.append(line + "\n") + return ''.join(result) + + # Keyword order for specific tags. + # + # Listed keywords will come first and in the specified order. + # Any unlisted keywords come after, in whatever order they appear + # in the input config. In theory this means we would only *have* to + # list the keywords that we care about, but in practice we'll probably + # want to nail down Visual Studio's order to make sure we match them + # as nearly as possible. + + order = { + 'Configuration' : [ + 'Name', + 'ConfigurationType', + 'InheritedPropertySheets', + ], + 'FileConfiguration' : [ + 'Name', + 'ExcludedFromBuild', + ], + 'Tool' : [ + 'Name', + 'DisableSpecificWarnings', + ], + 'VisualStudioProject' : [ + 'ProjectType', + 'Version', + 'Name', + 'ProjectGUID', + 'RootNamespace', + 'Keyword', + ], + } + + force_closing_tag = [ + 'File', + 'Globals', + 'References', + 'ToolFiles' + ] + + oneLiner = re.compile("(\s*)<(\w+)(.*)>") + keyValuePair = re.compile('\w+="[^"]*?"') + def reformatLine(self, line): + """Reformat an xml tag to put each key-value + element on a single indented line, for readability""" + matchobj = self.oneLiner.match(line.rstrip()) + if not matchobj: + return line + baseIndent, tag, rest = matchobj.groups() + slash = '' + if rest[-1:] == '/': + slash = '/' + rest = rest[:-1] + result = [baseIndent + '<' + tag] + indent = baseIndent + "\t" + pairs = self.keyValuePair.findall(rest) + for key in self.order.get(tag, []): + for p in [ p for p in pairs if p.startswith(key+'=') ]: + result.append("\n" + indent + p) + pairs.remove(p) + for pair in pairs: + result.append("\n" + indent + pair) + result = [''.join(result).rstrip()] + + if tag in self.force_closing_tag: + # These force termination with </Tag>, so translate slash. + if rest: + result.append("\n") + result.append(indent) + result.append(">") + if slash: + result.append("\n") + result.append(baseIndent + "</" + tag + ">") + else: + if rest: + result.append("\n") + if slash: + result.append(baseIndent) + else: + result.append(indent) + result.append(slash + ">") + + return ''.join(result) + def MSVSProject(env, item, *args, **kw): if not SCons.Util.is_String(item): return item item = env.subst(item) result = env.fs._lookup(item, None, _MSVSProject, create=1) - result.initialize(item, *args, **kw) + result.initialize(env, item, *args, **kw) LookupAdd(item, result) return result #------------------------------------------------------------------------------ -def MSVSAction(target, source, env): - target[0].Write(env) - MSVSSolutionAction = SCons.Script.Action(MSVSAction, "Generating Visual Studio solution `$TARGET' ...") class _MSVSSolution(SCons.Node.FS.File): """Visual Studio solution.""" - def initialize(self, env, path, entries = None, variants = None, - websiteProperties = True): + def initialize(self, env, path, entries = None, variants = None, websiteProperties = True): """Initializes the solution. Args: @@ -432,3 +1059,10 @@ def MSVSSolution(env, item, *args, **kw): result.initialize(env, item, *args, **kw) LookupAdd(item, result) return result + +import __builtin__ + +__builtin__.MSVSFilter = MSVSFilter +__builtin__.MSVSProject = MSVSProject +__builtin__.MSVSSolution = MSVSSolution +__builtin__.MSVSTool = MSVSTool diff --git a/site_scons/site_tools/chromium_builders.py b/site_scons/site_tools/chromium_builders.py index 01b8fcc..24b35f1 100644 --- a/site_scons/site_tools/chromium_builders.py +++ b/site_scons/site_tools/chromium_builders.py @@ -8,54 +8,110 @@ wrappers around Hammer builders. This gives us a central place for any customization we need to make to the different things we build. """ +import SCons.Node +import _Node_MSVS as MSVS + +class Null(object): + def __new__(cls, *args, **kwargs): + if '_inst' not in vars(cls): + cls._inst = super(type, cls).__new__(cls, *args, **kwargs) + return cls._inst + def __init__(self, *args, **kwargs): pass + def __call__(self, *args, **kwargs): return self + def __repr__(self): return "Null()" + def __nonzero__(self): return False + def __getattr__(self, name): return self + def __setattr__(self, name, val): return self + def __delattr__(self, name): return self + def __getitem__(self, name): return self + +class ChromeFileList(MSVS.FileList): + def Append(self, *args): + for element in args: + self.append(element) + def Extend(self, *args): + for element in args: + self.extend(element) + def Remove(self, *args): + for top, lists, nonlists in MSVS.FileListWalk(self, topdown=False): + for element in args: + try: + top.remove(element) + except ValueError: + pass + def Replace(self, old, new): + for top, lists, nonlists in MSVS.FileListWalk(self, topdown=False): + try: + i = top.index(old) + except ValueError: + pass + else: + top[i] = new + +import __builtin__ +__builtin__.ChromeFileList = ChromeFileList + +def compilable_files(sources): + if not hasattr(sources, 'entries'): + return [x for x in sources if not str(x).endswith('.h')] + result = [] + for top, folders, nonfolders in MSVS.FileListWalk(sources): + result.extend([x for x in nonfolders if not str(x).endswith('.h')]) + return result + +def ChromeProgram(env, target, source, *args, **kw): + source = compilable_files(source) + result = env.ComponentProgram(target, source, *args, **kw) + if env.get('INCREMENTAL'): + env.Precious(result) + return result + +def ChromeTestProgram(env, target, source, *args, **kw): + source = compilable_files(source) + result = env.ComponentTestProgram(target, source, *args, **kw) + if env.get('INCREMENTAL'): + env.Precious(*result) + return result + +def ChromeStaticLibrary(env, target, source, *args, **kw): + source = compilable_files(source) + kw['COMPONENT_STATIC'] = True + return env.ComponentLibrary(target, source, *args, **kw) + +def ChromeSharedLibrary(env, target, source, *args, **kw): + source = compilable_files(source) + kw['COMPONENT_STATIC'] = False + result = [env.ComponentLibrary(target, source, *args, **kw)[0]] + if env.get('INCREMENTAL'): + env.Precious(result) + return result + +def ChromeObject(env, *args, **kw): + return env.ComponentObject(*args, **kw) + +def ChromeMSVSFolder(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSFolder(*args, **kw) + +def ChromeMSVSProject(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSProject(*args, **kw) + +def ChromeMSVSSolution(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSSolution(*args, **kw) + def generate(env): - def ChromeProgram(env, *args, **kw): - result = env.ComponentProgram(*args, **kw) - if env.get('INCREMENTAL'): - env.Precious(result) - return result env.AddMethod(ChromeProgram) - - def ChromeTestProgram(env, *args, **kw): - result = env.ComponentTestProgram(*args, **kw) - if env.get('INCREMENTAL'): - env.Precious(*result) - return result env.AddMethod(ChromeTestProgram) - - def ChromeStaticLibrary(env, *args, **kw): - kw['COMPONENT_STATIC'] = True - return env.ComponentLibrary(*args, **kw) env.AddMethod(ChromeStaticLibrary) - - def ChromeSharedLibrary(env, *args, **kw): - kw['COMPONENT_STATIC'] = False - result = [env.ComponentLibrary(*args, **kw)[0]] - if env.get('INCREMENTAL'): - env.Precious(result) - return result env.AddMethod(ChromeSharedLibrary) - - def ChromeObject(env, *args, **kw): - return env.ComponentObject(*args, **kw) env.AddMethod(ChromeObject) - - def ChromeMSVSFolder(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSFolder(*args, **kw) - return [] env.AddMethod(ChromeMSVSFolder) - - def ChromeMSVSProject(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSProject(*args, **kw) - return [] env.AddMethod(ChromeMSVSProject) - - def ChromeMSVSSolution(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSSolution(*args, **kw) - return [] env.AddMethod(ChromeMSVSSolution) def exists(env): diff --git a/skia/SConscript b/skia/SConscript index 7401474..776da05 100644 --- a/skia/SConscript +++ b/skia/SConscript @@ -39,125 +39,362 @@ if env.Bit('windows'): elif env.Bit('posix'): env.Append(CCFLAGS = ['-Wno-unused']) -input_files = [ - 'animator/SkTime.cpp', - 'corecg/Sk64.cpp', - 'corecg/SkBuffer.cpp', - 'corecg/SkChunkAlloc.cpp', - 'corecg/SkCordic.cpp', - 'corecg/SkDebug.cpp', - 'corecg/SkDebug_stdio.cpp', - 'corecg/SkFloat.cpp', - 'corecg/SkFloatBits.cpp', - 'corecg/SkInterpolator.cpp', - 'corecg/SkMath.cpp', - 'corecg/SkMatrix.cpp', - 'corecg/SkMemory_stdlib.cpp', - 'corecg/SkPageFlipper.cpp', - 'corecg/SkPoint.cpp', - 'corecg/SkRect.cpp', - 'corecg/SkRegion.cpp', - 'effects/Sk1DPathEffect.cpp', - 'effects/Sk2DPathEffect.cpp', - 'effects/SkAvoidXfermode.cpp', - 'effects/SkBlurDrawLooper.cpp', - 'effects/SkBlurMask.cpp', - 'effects/SkBlurMaskFilter.cpp', - 'effects/SkCamera.cpp', - 'effects/SkColorFilters.cpp', - 'effects/SkColorMatrix.cpp', - 'effects/SkColorMatrixFilter.cpp', - 'effects/SkCornerPathEffect.cpp', - 'effects/SkCullPoints.cpp', - 'effects/SkDashPathEffect.cpp', - 'effects/SkDiscretePathEffect.cpp', - 'effects/SkEmbossMask.cpp', - 'effects/SkEmbossMaskFilter.cpp', - 'effects/SkGradientShader.cpp', - 'effects/SkKernel33MaskFilter.cpp', - 'effects/SkLayerRasterizer.cpp', - 'effects/SkPaintFlagsDrawFilter.cpp', - 'effects/SkPixelXorXfermode.cpp', - 'effects/SkShaderExtras.cpp', - 'effects/SkTransparentShader.cpp', - 'effects/SkUnitMappers.cpp', - 'ext/image_operations.cc', - 'ext/convolver.cc', - 'ext/skia_utils.cc', - 'images/SkImageDecoder.cpp', - 'images/SkImageRef.cpp', - 'images/SkStream.cpp', - 'picture/SkPathHeap.cpp', - 'picture/SkPicture.cpp', - 'picture/SkPictureFlat.cpp', - 'picture/SkPicturePlayback.cpp', - 'picture/SkPictureRecord.cpp', - 'ports/SkFontHost_none.cpp', - 'ports/SkGlobals_global.cpp', - 'ports/SkImageDecoder_Factory.cpp', - 'ports/SkOSFile_stdio.cpp', - 'sgl/SkAlphaRuns.cpp', - 'sgl/SkBitmap.cpp', - 'sgl/SkBitmapProcShader.cpp', - 'sgl/SkBitmapProcState.cpp', - 'sgl/SkBitmapProcState_matrixProcs.cpp', - 'sgl/SkBitmapSampler.cpp', - 'sgl/SkBitmapShader.cpp', - 'sgl/SkBlitRow_D16.cpp', - 'sgl/SkBlitRow_D4444.cpp', - 'sgl/SkBlitter.cpp', - 'sgl/SkBlitter_4444.cpp', - 'sgl/SkBlitter_A1.cpp', - 'sgl/SkBlitter_A8.cpp', - 'sgl/SkBlitter_ARGB32.cpp', - 'sgl/SkBlitter_RGB16.cpp', - 'sgl/SkBlitter_Sprite.cpp', - 'sgl/SkCanvas.cpp', - 'sgl/SkColor.cpp', - 'sgl/SkColorFilter.cpp', - 'sgl/SkColorTable.cpp', - 'sgl/SkDeque.cpp', - 'sgl/SkDevice.cpp', - 'sgl/SkDither.cpp', - 'sgl/SkDraw.cpp', - 'sgl/SkEdge.cpp', - 'sgl/SkFilterProc.cpp', - 'sgl/SkFlattenable.cpp', - 'sgl/SkGeometry.cpp', - 'sgl/SkGlobals.cpp', - 'sgl/SkGlyphCache.cpp', - 'sgl/SkGraphics.cpp', - 'sgl/SkMask.cpp', - 'sgl/SkMaskFilter.cpp', - 'sgl/SkPackBits.cpp', - 'sgl/SkPaint.cpp', - 'sgl/SkPath.cpp', - 'sgl/SkPathEffect.cpp', - 'sgl/SkPathMeasure.cpp', - 'sgl/SkPixelRef.cpp', - 'sgl/SkProcSpriteBlitter.cpp', - 'sgl/SkPtrRecorder.cpp', - 'sgl/SkRasterizer.cpp', - 'sgl/SkRefCnt.cpp', - 'sgl/SkRegion_path.cpp', - 'sgl/SkScalerContext.cpp', - 'sgl/SkScan.cpp', - 'sgl/SkScan_Antihair.cpp', - 'sgl/SkScan_AntiPath.cpp', - 'sgl/SkScan_Hairline.cpp', - 'sgl/SkScan_Path.cpp', - 'sgl/SkShader.cpp', - 'sgl/SkSpriteBlitter_ARGB32.cpp', - 'sgl/SkSpriteBlitter_RGB16.cpp', - 'sgl/SkString.cpp', - 'sgl/SkStroke.cpp', - 'sgl/SkStrokerPriv.cpp', - 'sgl/SkTSearch.cpp', - 'sgl/SkTypeface_fake.cpp', - 'sgl/SkUtils.cpp', - 'sgl/SkWriter32.cpp', - 'sgl/SkXfermode.cpp', -] +input_files = ChromeFileList([ + # TODO(sgk): + # We're deliberately mis-indenting the MSVSFilter() calls here + # so we don't have to re-indent the file name entries when the + # MSVSFilter() calls go away in (favor of automated generation + # of the heirarchy). + MSVSFilter('Header files', [ + 'include/Sk1DPathEffect.h', + 'include/Sk2DPathEffect.h', + 'include/corecg/Sk64.h', + 'include/SkAnimator.h', + 'include/SkAnimatorView.h', + 'include/SkApplication.h', + 'include/SkAvoidXfermode.h', + 'include/SkBGViewArtist.h', + 'include/SkBitmap.h', + 'include/SkBlurDrawLooper.h', + 'include/SkBlurMaskFilter.h', + 'include/SkBML_WXMLParser.h', + 'include/SkBML_XMLParser.h', + 'include/SkBorderView.h', + 'include/SkBounder.h', + 'include/corecg/SkBuffer.h', + 'include/SkCamera.h', + 'include/SkCanvas.h', + 'include/corecg/SkChunkAlloc.h', + 'include/SkColor.h', + 'include/SkColorFilter.h', + 'include/SkColorMatrix.h', + 'include/SkColorPriv.h', + 'include/SkColorShader.h', + 'include/SkCornerPathEffect.h', + 'include/SkCullPoints.h', + 'include/SkDashPathEffect.h', + 'include/SkDeque.h', + 'include/SkDescriptor.h', + 'include/SkDevice.h', + 'include/SkDiscretePathEffect.h', + 'include/SkDither.h', + 'include/SkDOM.h', + 'include/SkDraw.h', + 'include/SkDrawExtraPathEffect.h', + 'include/SkDrawFilter.h', + 'include/SkDrawLooper.h', + 'include/SkEmbossMaskFilter.h', + 'include/corecg/SkEndian.h', + 'include/SkEvent.h', + 'include/SkEventSink.h', + 'include/corecg/SkFDot6.h', + 'include/corecg/SkFixed.h', + 'include/SkFlattenable.h', + 'include/SkFlipPixelRef.h', + 'include/corecg/SkFloatBits.h', + 'include/corecg/SkFloatingPoint.h', + 'include/SkFontCodec.h', + 'include/SkFontHost.h', + 'include/SkGlobals.h', + 'include/SkGradientShader.h', + 'include/SkGraphics.h', + 'include/SkImageDecoder.h', + 'include/SkImageRef.h', + 'include/SkImageView.h', + 'include/corecg/SkInterpolator.h', + 'include/SkJS.h', + 'include/SkKernel33MaskFilter.h', + 'include/SkKey.h', + 'include/SkLayerDrawLooper.h', + 'include/SkLayerRasterizer.h', + 'include/SkMallocPixelRef.h', + 'include/SkMask.h', + 'include/SkMaskFilter.h', + 'include/corecg/SkMath.h', + 'include/corecg/SkMatrix.h', + 'include/SkMetaData.h', + 'include/SkMMapStream.h', + 'include/SkMovie.h', + 'include/SkNinePatch.h', + 'include/SkOSFile.h', + 'include/SkOSMenu.h', + 'include/SkOSSound.h', + 'include/SkOSWindow_Mac.h', + 'include/SkOSWindow_Unix.h', + 'include/SkOSWindow_Win.h', + 'include/SkOSWindow_wxwidgets.h', + 'include/SkPackBits.h', + 'include/corecg/SkPageFlipper.h', + 'include/SkPaint.h', + 'include/SkPaintFlagsDrawFilter.h', + 'include/SkParse.h', + 'include/SkParsePaint.h', + 'include/SkPath.h', + 'include/SkPathEffect.h', + 'include/SkPathMeasure.h', + 'include/corecg/SkPerspIter.h', + 'include/SkPicture.h', + 'include/SkPixelRef.h', + 'include/SkPixelXorXfermode.h', + 'include/corecg/SkPoint.h', + 'include/SkPorterDuff.h', + 'include/corecg/SkPostConfig.h', + 'include/corecg/SkPreConfig.h', + 'include/SkProgressBarView.h', + 'include/SkPtrRecorder.h', + 'include/corecg/SkRandom.h', + 'include/SkRasterizer.h', + 'include/SkReader32.h', + 'include/corecg/SkRect.h', + 'include/SkRefCnt.h', + 'include/corecg/SkRegion.h', + 'include/corecg/SkScalar.h', + 'include/corecg/SkScalarCompare.h', + 'include/SkScalerContext.h', + 'include/SkScrollBarView.h', + 'include/SkShader.h', + 'include/SkShaderExtras.h', + 'include/SkStackViewLayout.h', + 'include/SkStream.h', + 'include/SkStream_Win.h', + 'include/SkString.h', + 'include/SkStroke.h', + 'include/SkSVGAttribute.h', + 'include/SkSVGBase.h', + 'include/SkSVGPaintState.h', + 'include/SkSVGParser.h', + 'include/SkSVGTypes.h', + 'include/SkSystemEventTypes.h', + 'include/SkTDArray.h', + 'include/SkTDict.h', + 'include/SkTDStack.h', + 'include/corecg/SkTemplates.h', + 'include/SkTextBox.h', + 'include/corecg/SkThread.h', + 'include/corecg/SkThread_platform.h', + 'include/SkTime.h', + 'include/SkTransparentShader.h', + 'include/corecg/SkTSearch.h', + 'include/SkTypeface.h', + 'include/corecg/SkTypes.h', + 'include/SkUnitMapper.h', + 'include/SkUnitMappers.h', + 'include/SkUnPreMultiply.h', + 'include/corecg/SkUserConfig.h', + 'include/SkUtils.h', + 'include/SkView.h', + 'include/SkViewInflate.h', + 'include/SkWidget.h', + 'include/SkWidgetViews.h', + 'include/SkWindow.h', + 'include/SkWriter32.h', + 'include/SkXfermode.h', + 'include/SkXMLParser.h', + 'include/SkXMLWriter.h', + ]), + + MSVSFilter('corecg', [ + 'corecg/Sk64.cpp', + 'corecg/SkBuffer.cpp', + 'corecg/SkChunkAlloc.cpp', + 'corecg/SkCordic.cpp', + 'corecg/SkCordic.h', + 'corecg/SkDebug.cpp', + 'corecg/SkDebug_stdio.cpp', + 'corecg/SkFloat.cpp', + 'corecg/SkFloat.h', + 'corecg/SkFloatBits.cpp', + 'corecg/SkInterpolator.cpp', + 'corecg/SkMath.cpp', + 'corecg/SkMatrix.cpp', + 'corecg/SkMemory_stdlib.cpp', + 'corecg/SkPageFlipper.cpp', + 'corecg/SkPoint.cpp', + 'corecg/SkRect.cpp', + 'corecg/SkRegion.cpp', + 'corecg/SkRegionPriv.h', + 'corecg/SkSinTable.h', + 'corecg/SkTSort.h', + ]), + + MSVSFilter('sgl', [ + 'sgl/SkAlphaRuns.cpp', + 'sgl/SkAntiRun.h', + 'sgl/SkAutoKern.h', + 'sgl/SkBitmap.cpp', + 'sgl/SkBitmapProcShader.cpp', + 'sgl/SkBitmapProcShader.h', + 'sgl/SkBitmapProcState.cpp', + 'sgl/SkBitmapProcState.h', + 'sgl/SkBitmapProcState_matrix.h', + 'sgl/SkBitmapProcState_matrixProcs.cpp', + 'sgl/SkBitmapSampler.cpp', + 'sgl/SkBitmapSampler.h', + 'sgl/SkBitmapSamplerTemplate.h', + 'sgl/SkBitmapShader.cpp', + 'sgl/SkBitmapShader.h', + 'sgl/SkBitmapShader16BilerpTemplate.h', + 'sgl/SkBitmapShaderTemplate.h', + 'sgl/SkBlitBWMaskTemplate.h', + 'sgl/SkBlitRow.h', + 'sgl/SkBlitRow_D16.cpp', + 'sgl/SkBlitRow_D4444.cpp', + 'sgl/SkBlitter.cpp', + 'sgl/SkBlitter.h', + 'sgl/SkBlitter_4444.cpp', + 'sgl/SkBlitter_A1.cpp', + 'sgl/SkBlitter_A8.cpp', + 'sgl/SkBlitter_ARGB32.cpp', + 'sgl/SkBlitter_RGB16.cpp', + 'sgl/SkBlitter_Sprite.cpp', + 'sgl/SkCanvas.cpp', + 'sgl/SkColor.cpp', + 'sgl/SkColorFilter.cpp', + 'sgl/SkColorTable.cpp', + 'sgl/SkCoreBlitters.h', + 'sgl/SkDeque.cpp', + 'sgl/SkDevice.cpp', + 'sgl/SkDither.cpp', + 'sgl/SkDraw.cpp', + 'sgl/SkDraw.h', + 'sgl/SkEdge.cpp', + 'sgl/SkEdge.h', + 'sgl/SkFilterProc.cpp', + 'sgl/SkFilterProc.h', + 'sgl/SkFlattenable.cpp', + 'sgl/SkFP.h', + 'sgl/SkGeometry.cpp', + 'sgl/SkGeometry.h', + 'sgl/SkGlobals.cpp', + 'sgl/SkGlyphCache.cpp', + 'sgl/SkGlyphCache.h', + 'sgl/SkGraphics.cpp', + 'sgl/SkMask.cpp', + 'sgl/SkMaskFilter.cpp', + 'sgl/SkPackBits.cpp', + 'sgl/SkPaint.cpp', + 'sgl/SkPath.cpp', + 'sgl/SkPathEffect.cpp', + 'sgl/SkPathMeasure.cpp', + 'sgl/SkPixelRef.cpp', + 'sgl/SkProcSpriteBlitter.cpp', + 'sgl/SkPtrRecorder.cpp', + 'sgl/SkRasterizer.cpp', + 'sgl/SkRefCnt.cpp', + 'sgl/SkRegion_path.cpp', + 'sgl/SkScalerContext.cpp', + 'sgl/SkScan.cpp', + 'sgl/SkScan.h', + 'sgl/SkScan_Antihair.cpp', + 'sgl/SkScan_AntiPath.cpp', + 'sgl/SkScan_Hairline.cpp', + 'sgl/SkScan_Path.cpp', + 'sgl/SkScanPriv.h', + 'sgl/SkShader.cpp', + 'sgl/SkSpriteBlitter.h', + 'sgl/SkSpriteBlitter_ARGB32.cpp', + 'sgl/SkSpriteBlitter_RGB16.cpp', + 'sgl/SkSpriteBlitterTemplate.h', + 'sgl/SkString.cpp', + 'sgl/SkStroke.cpp', + 'sgl/SkStrokerPriv.cpp', + 'sgl/SkStrokerPriv.h', + 'sgl/SkTemplatesPriv.h', + 'sgl/SkTSearch.cpp', + 'sgl/SkTSort.h', + 'sgl/SkTypeface_fake.cpp', + 'sgl/SkUtils.cpp', + 'sgl/SkWriter32.cpp', + 'sgl/SkXfermode.cpp', + ]), + + MSVSFilter('ports', [ + 'ports/sk_predefined_gamma.h', + 'ports/SkFontHost_none.cpp', + 'ports/SkGlobals_global.cpp', + 'ports/SkImageDecoder_Factory.cpp', + 'ports/SkOSFile_stdio.cpp', + 'ports/SkThread_win.cpp', + ]), + + MSVSFilter('images', [ + 'images/SkImageDecoder.cpp', + 'images/SkImageRef.cpp', + 'images/SkScaledBitmapSampler.h', + 'images/SkStream.cpp', + ]), + + MSVSFilter('effects', [ + 'effects/Sk1DPathEffect.cpp', + 'effects/Sk2DPathEffect.cpp', + 'effects/SkAvoidXfermode.cpp', + 'effects/SkBlurDrawLooper.cpp', + 'effects/SkBlurMask.cpp', + 'effects/SkBlurMaskFilter.cpp', + 'effects/SkCamera.cpp', + 'effects/SkColorFilters.cpp', + 'effects/SkColorMatrix.cpp', + 'effects/SkColorMatrixFilter.cpp', + 'effects/SkCornerPathEffect.cpp', + 'effects/SkCullPoints.cpp', + 'effects/SkDashPathEffect.cpp', + 'effects/SkDiscretePathEffect.cpp', + 'effects/SkEmbossMask.cpp', + 'effects/SkEmbossMaskFilter.cpp', + 'effects/SkGradientShader.cpp', + 'effects/SkKernel33MaskFilter.cpp', + 'effects/SkLayerRasterizer.cpp', + 'effects/SkPaintFlagsDrawFilter.cpp', + 'effects/SkPixelXorXfermode.cpp', + 'effects/SkRadialGradient_Table.h', + 'effects/SkShaderExtras.cpp', + 'effects/SkTransparentShader.cpp', + 'effects/SkUnitMappers.cpp', + ]), + + MSVSFilter('animator', [ + 'animator/SkTime.cpp', + ]), + + MSVSFilter('picture', [ + 'picture/SkPathHeap.cpp', + 'picture/SkPathHeap.h', + 'picture/SkPicture.cpp', + 'picture/SkPictureFlat.cpp', + 'picture/SkPictureFlat.h', + 'picture/SkPicturePlayback.cpp', + 'picture/SkPicturePlayback.h', + 'picture/SkPictureRecord.cpp', + 'picture/SkPictureRecord.h', + ]), + + MSVSFilter('ext', [ + 'ext/convolver.cc', + 'ext/convolver.h', + 'ext/bitmap_platform_device.h', + 'ext/bitmap_platform_device_win.cc', + 'ext/bitmap_platform_device_win.h', + 'ext/image_operations.cc', + 'ext/image_operations.h', + 'ext/platform_canvas.h', + 'ext/platform_canvas_win.cc', + 'ext/platform_canvas_win.h', + 'ext/platform_device.h', + 'ext/platform_device_win.cc', + 'ext/platform_device_win.h', + 'ext/skia_utils.cc', + 'ext/skia_utils.h', + 'ext/skia_utils_win.cc', + 'ext/skia_utils_win.h', + 'ext/vector_canvas.cc', + 'ext/vector_canvas.h', + 'ext/vector_device.cc', + 'ext/vector_device.h', + + ]), + + 'precompiled.cc', +]) if env.Bit('linux'): input_files.append('ext/bitmap_platform_device_linux.cc') @@ -165,8 +402,8 @@ if env.Bit('linux'): input_files.append('ext/platform_device_linux.cc') # On Linux we use Skia to render fonts with FreeType and fontconfig - input_files.remove('sgl/SkTypeface_fake.cpp') - input_files.remove('ports/SkFontHost_none.cpp') + input_files.Remove('sgl/SkTypeface_fake.cpp') + input_files.Remove('ports/SkFontHost_none.cpp') input_files.append('sgl/SkTypeface.cpp') input_files.append('ports/SkFontHost_FreeType.cpp') input_files.append('ports/SkFontHost_TrueType_Tables.cpp') @@ -184,16 +421,25 @@ if env.Bit('mac'): input_files.append('ext/platform_canvas_mac.cc') input_files.append('ext/platform_device_mac.cc') -if env.Bit('windows'): - input_files.append('ext/bitmap_platform_device_win.cc') - input_files.append('ext/platform_canvas_win.cc') - input_files.append('ext/platform_device_win.cc') - input_files.append('ext/skia_utils_win.cc') - input_files.append('ext/vector_canvas.cc') - input_files.append('ext/vector_device.cc') +if not env.Bit('windows'): + input_files.Remove( + 'ext/bitmap_platform_device_win.cc', + 'ext/bitmap_platform_device_win.h', + 'ext/platform_canvas_win.cc', + 'ext/platform_canvas_win.h', + 'ext/platform_device_win.cc', + 'ext/platform_device_win.h', + 'ext/skia_utils_win.cc', + 'ext/skia_utils_win.h', + 'ext/vector_canvas.cc', + 'ext/vector_canvas.h', + 'ext/vector_device.cc', + 'ext/vector_device.h', - input_files.append('ports/SkThread_win.cpp') + 'ports/SkThread_win.cpp', + ) +if env.Bit('windows'): env_p = env.Clone( PCHSTOP = 'SkTypes.h', PDB = 'vc80.pdb', @@ -207,9 +453,64 @@ if env.Bit('windows'): # IncrediBuild installed on the build machine? pch, obj = env_p.PCH(['skia.pch', 'precompiled.obj'], 'precompiled.cc') env_p['PCH'] = pch - input_files += [obj] + input_files.Replace('precompiled.cc', obj) env.ChromeStaticLibrary('skia', input_files) -env.ChromeMSVSProject('$SKIA_DIR/skia.vcproj', - guid='{CD9CA56E-4E94-444C-87D4-58CA1E6F300D}') +p = env.ChromeMSVSProject('skia.vcproj', + guid='{CD9CA56E-4E94-444C-87D4-58CA1E6F300D}', + files=input_files, + relative_path_prefix=r'./', + tools = [ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + 'VCCLCompilerTool', + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + 'VCLibrarianTool', + 'VCALinkTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/debug.vsprops', + './skia.vsprops', + './precompiled.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/release.vsprops', + './skia.vsprops', + ]) + +p.AddFileConfig( + 'precompiled.cc', + 'Debug|Win32', + tools=[ + MSVSTool('VCCLCompilerTool', UsePrecompiledHeader='1'), + ]) + +p.AddFileConfig( + 'precompiled.cc', + 'Release|Win32', + ExcludedFromBuild='true', + tools=[ + MSVSTool('VCCLCompilerTool'), + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/skia/skia.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/testing/SConscript.gtest b/testing/SConscript.gtest index c54b4c4..8df8d65 100644 --- a/testing/SConscript.gtest +++ b/testing/SConscript.gtest @@ -23,15 +23,65 @@ if env.Bit('windows'): ], ) -input_files = [ +input_files = ChromeFileList([ + 'gtest/include/gtest/internal/gtest-death-test-internal.h', 'gtest/src/gtest-death-test.cc', + 'gtest/include/gtest/gtest-death-test.h', 'gtest/src/gtest-filepath.cc', + 'gtest/include/gtest/internal/gtest-filepath.h', + 'gtest/src/gtest-internal-inl.h', + 'gtest/include/gtest/internal/gtest-internal.h', + 'gtest/include/gtest/gtest-message.h', 'gtest/src/gtest-port.cc', + 'gtest/include/gtest/internal/gtest-port.h', + 'gtest/include/gtest/gtest-spi.h', + 'gtest/include/gtest/internal/gtest-string.h', 'gtest/src/gtest.cc', + 'gtest/include/gtest/gtest.h', + 'gtest/include/gtest/gtest_pred_impl.h', + 'gtest/include/gtest/gtest_prod.h', 'multiprocess_func_list.cc', -] +]) env.ChromeStaticLibrary('gtest', input_files) -env.ChromeMSVSProject('$TESTING_DIR/gtest.vcproj', - guid='{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}') +p = env.ChromeMSVSProject('gtest.vcproj', + guid='{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}', + files=input_files, + tools = [ + 'VCPreBuildEventTool', + 'VCCustomBuildTool', + 'VCXMLDataGeneratorTool', + 'VCWebServiceProxyGeneratorTool', + 'VCMIDLTool', + 'VCCLCompilerTool', + 'VCManagedResourceCompilerTool', + 'VCResourceCompilerTool', + 'VCPreLinkEventTool', + 'VCLibrarianTool', + 'VCALinkTool', + 'VCXDCMakeTool', + 'VCBscMakeTool', + 'VCFxCopTool', + 'VCPostBuildEventTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/debug.vsprops', + './using_gtest.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/release.vsprops', + './using_gtest.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/testing/gtest.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/third_party/libpng/libpng.scons b/third_party/libpng/libpng.scons index 8b14dcf..8716157 100644 --- a/third_party/libpng/libpng.scons +++ b/third_party/libpng/libpng.scons @@ -39,27 +39,62 @@ env.Append( ], ) -input_files = [ +input_files = ChromeFileList([ 'png.c', - 'pngwutil.c', - 'pngwtran.c', - 'pngwrite.c', - 'pngwio.c', - 'pngvcrd.c', - 'pngtrans.c', - 'pngset.c', - 'pngrutil.c', - 'pngrtran.c', - 'pngrio.c', - 'pngread.c', - 'pngpread.c', - 'pngmem.c', - 'pngget.c', - 'pnggccrd.c', + 'png.h', + 'pngconf.h', 'pngerror.c', -] + 'pnggccrd.c', + 'pngget.c', + 'pngmem.c', + 'pngpread.c', + 'pngread.c', + 'pngrio.c', + 'pngrtran.c', + 'pngrutil.c', + 'pngset.c', + 'pngtrans.c', + 'pngusr.h', + 'pngvcrd.c', + 'pngwio.c', + 'pngwrite.c', + 'pngwtran.c', + 'pngwutil.c', +]) env.ChromeStaticLibrary('libpng', input_files) -env.ChromeMSVSProject('$LIBPNG_DIR/libpng.vcproj', - guid='{C564F145-9172-42C3-BFCB-6014CA97DBCD}') +p = env.ChromeMSVSProject('libpng.vcproj', + guid='{C564F145-9172-42C3-BFCB-6014CA97DBCD}', + files=input_files, + relative_path_prefix='./', + tools = [ + 'VCLibrarianTool', + 'VCCLCompilerTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/debug.vsprops', + '$(SolutionDir)../third_party/zlib/using_zlib.vsprops', + '$(SolutionDir)../build/external_code.vsprops', + '$(SolutionDir)../third_party/libpng/using_libpng.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/release.vsprops', + '$(SolutionDir)../third_party/zlib/using_zlib.vsprops', + '$(SolutionDir)../build/external_code.vsprops', + '$(SolutionDir)../third_party/libpng/using_libpng.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/third_party/libpng/libpng.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/third_party/scons/scons-local/SCons/Node/FS.py b/third_party/scons/scons-local/SCons/Node/FS.py index 6bb6f59e..ec7fd5e 100644 --- a/third_party/scons/scons-local/SCons/Node/FS.py +++ b/third_party/scons/scons-local/SCons/Node/FS.py @@ -554,7 +554,7 @@ class Base(SCons.Node.Node): This node, which already existed, is being looked up as the specified klass. Raise an exception if it isn't. """ - if self.__class__ is klass or klass is Entry: + if isinstance(self, klass) or klass is Entry: return raise TypeError, "Tried to lookup %s '%s' as a %s." %\ (self.__class__.__name__, self.path, klass.__name__) diff --git a/third_party/zlib/zlib.scons b/third_party/zlib/zlib.scons index a33834f..91c19ae 100644 --- a/third_party/zlib/zlib.scons +++ b/third_party/zlib/zlib.scons @@ -26,22 +26,61 @@ if env.Bit('windows'): ], ) -input_files = [ +input_files = ChromeFileList([ 'adler32.c', 'compress.c', 'crc32.c', + 'crc32.h', 'deflate.c', + 'deflate.h', 'gzio.c', 'infback.c', 'inffast.c', + 'inffast.h', + 'inffixed.h', 'inflate.c', + 'inflate.h', 'inftrees.c', + 'inftrees.h', + 'mozzconf.h', 'trees.c', + 'trees.h', 'uncompr.c', + 'zconf.h', + 'zlib.h', 'zutil.c', -] + 'zutil.h', +]) env.ChromeStaticLibrary('zlib', input_files) -env.ChromeMSVSProject('$ZLIB_DIR/zlib.vcproj', - guid='{8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}') +p = env.ChromeMSVSProject('zlib.vcproj', + guid='{8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}', + files=input_files, + relative_path_prefix=r'./', + tools = [ + 'VCLibrarianTool', + 'VCCLCompilerTool', + ]) + +p.AddConfig('Debug|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/debug.vsprops', + '$(SolutionDir)../build/external_code.vsprops', + ]) + +p.AddConfig('Release|Win32', + ConfigurationType = '4', + InheritedPropertySheets = [ + '$(SolutionDir)../build/common.vsprops', + '$(SolutionDir)../build/release.vsprops', + '$(SolutionDir)../build/external_code.vsprops', + ]) + +env.AlwaysBuild(p) + +i = env.Command('$CHROME_SRC_DIR/third_party/zlib/zlib.vcproj', p, + Copy('$TARGET', '$SOURCE')) +Alias('msvs', i) diff --git a/webkit/webkit_sln.scons b/webkit/webkit_sln.scons index 402c889..c186837 100644 --- a/webkit/webkit_sln.scons +++ b/webkit/webkit_sln.scons @@ -165,4 +165,4 @@ env.AlwaysBuild(solution) i = env.Command('$CHROME_SRC_DIR/webkit/webkit.sln', solution, Copy('$TARGET', '$SOURCE')) -Alias('solutions', i) +Alias('msvs', i) |