From 8add7c477fd785668eaee4b5daccc821351e3fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Tue, 13 Jun 2006 17:39:17 +0000 Subject: [PATCH] Add files to project only if the "If" condition is true. svn path=/trunk/; revision=22342 --- reactos/tools/rbuild/backend/msvc/msvc.h | 1 + .../tools/rbuild/backend/msvc/vcprojmaker.cpp | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/reactos/tools/rbuild/backend/msvc/msvc.h b/reactos/tools/rbuild/backend/msvc/msvc.h index e8301840a53..af2b47626ed 100644 --- a/reactos/tools/rbuild/backend/msvc/msvc.h +++ b/reactos/tools/rbuild/backend/msvc/msvc.h @@ -116,6 +116,7 @@ class MSVCBackend : public Backend void _get_object_files ( const Module& module, std::vector& out ) const; void _install_files ( const std::string& vcdir, const std::string& config ); bool _copy_file ( const std::string& inputname, const std::string& targetname ) const; + const Property* _lookup_property ( const Module& module, const std::string& name ) const; }; #endif // __MSVC_H__ diff --git a/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp b/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp index 322350fa785..1b332a173a8 100644 --- a/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp +++ b/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp @@ -113,9 +113,15 @@ MSVCBackend::_generate_vcproj ( const Module& module ) { const IfableData& data = *ifs_list.back(); ifs_list.pop_back(); - // TODO FIXME - refactor needed - we're discarding if conditions for ( i = 0; i < data.ifs.size(); i++ ) - ifs_list.push_back ( &data.ifs[i]->data ); + { + const Property* property = _lookup_property( module, data.ifs[i]->property ); + if ( property != NULL ) + { + if ( data.ifs[i]->value == property->value || data.ifs[i]->negated ) + ifs_list.push_back ( &data.ifs[i]->data ); + } + } const vector& files = data.files; for ( i = 0; i < files.size(); i++ ) { @@ -732,3 +738,23 @@ MSVCBackend::_generate_sln ( FILE* OUT ) _generate_sln_footer ( OUT ); } +const Property* +MSVCBackend::_lookup_property ( const Module& module, const std::string& name ) const +{ + /* Check local values */ + for ( size_t i = 0; i < module.non_if_data.properties.size(); i++ ) + { + const Property& property = *module.non_if_data.properties[i]; + if ( property.name == name ) + return &property; + } + // TODO FIXME - should we check local if-ed properties? + for ( size_t i = 0; i < module.project.non_if_data.properties.size(); i++ ) + { + const Property& property = *module.project.non_if_data.properties[i]; + if ( property.name == name ) + return &property; + } + // TODO FIXME - should we check global if-ed properties? + return NULL; +}