diff --git a/build/bakefiles/Bakefiles.bkgen b/build/bakefiles/Bakefiles.bkgen index fe3aed1634..f0bcd7141d 100644 --- a/build/bakefiles/Bakefiles.bkgen +++ b/build/bakefiles/Bakefiles.bkgen @@ -30,6 +30,12 @@ autoconf,borland,dmars_smake,dmars,mingw,msvc,msvc6prj,msevc4prj,msvs2003prj,msvs2005prj,msvs2008prj,watcom + + + msvs2003prj,msvs2005prj,msvs2008prj + + autoconf,msvc6prj,msevc4prj,msvs2003prj,msvs2005prj,msvs2008prj diff --git a/build/upmake b/build/upmake index 577acb1d48..86f1cc7b81 100755 --- a/build/upmake +++ b/build/upmake @@ -1348,53 +1348,51 @@ use Getopt::Long; use FindBin qw($Bin); -use Text::Upmake; -use Text::Upmake::Bakefile0; -use Text::Upmake::MSBuild; +use Makefile::Update; +use Makefile::Update::Bakefile0; +use Makefile::Update::MSBuild; +use Makefile::Update::VCProj; my $verbose = 0; my $quiet = 0; -my ($only_bkl, $only_msbuild, $only_project, $only_version); +my ($only_bkl, $only_msvs, $only_project, $only_version); GetOptions( 'verbose|v' => \$verbose, 'quiet|q' => \$quiet, 'only-bkl' => \$only_bkl, - 'only-project=s' => sub { $only_msbuild = 1; $only_project = $_[1] }, - 'only-version=i' => sub { $only_msbuild = 1; $only_version = $_[1] }, + 'only-project=s' => sub { $only_msvs = 1; $only_project = $_[1] }, + 'only-version=i' => sub { $only_msvs = 1; $only_version = $_[1] }, ) or die <] +Usage: $0 [--verbose] [--quiet] [--only-bkl] [--only-project=] [--only-version=] -Update the files used by bakefile and MSBuild projects from the master list +Update the files used by bakefile and MSVC projects from the master list of files in build/files. If --no-xxx option is specified, the corresponding outputs are not updated. By default everything is. + +The version argument of --only-version can be 7, 8, 9 or 10 with the latter +selecting the MSBuild projects. EOF ; -if ($only_bkl && $only_msbuild) { +if ($only_bkl && $only_msvs) { die qq{Options --only-bkl and --only-project or --only-version can't be used together.\n} } -sub log_upmake +sub call_upmake { my ($fname, @args) = @_; - if (upmake($fname, @args)) { - print qq{File "$fname" successfully updated.\n} unless $quiet; - return 1; - } else { - print qq{No changes in the file "$fname".\n} if $verbose; - return 0; - } + upmake({file => $fname, quiet => $quiet, verbose => $verbose}, @args) } open my $files, '<', "$Bin/files"; my $vars = read_files_list($files); -if (!$only_msbuild) { - if (log_upmake("$Bin/bakefiles/files.bkl", \&update_bakefile_0, $vars)) { +if (!$only_msvs) { + if (call_upmake("$Bin/bakefiles/files.bkl", \&update_bakefile_0, $vars)) { print qq{Don't forget to run "bakefile_gen -b wx.bkl".} if $verbose; } } @@ -1404,7 +1402,7 @@ if (!$only_bkl) { # projects. my $top_srcdir = '../../'; - # The base names of all our MSBuild projects with the list of variables + # The base names of all our projects with the list of variables # containing the files that should appear in them. my %projects_vars = ( adv => [qw(ADVANCED_CMN ADVANCED_MSW ADVANCED_MSW_DESKTOP ADVANCED_MSW_NATIVE)], @@ -1425,6 +1423,9 @@ if (!$only_bkl) { xrc => [qw(XRC)], ); + # The versions of non-MSBuild projects (MSBuild ones all use version "10"). + my @vcproj_versions = qw(7 8 9); + # Return the "filter" to use for the given file. sub filter_cb { @@ -1483,7 +1484,42 @@ if (!$only_bkl) { my @args = (\@sources, \@headers, \&filter_cb); - log_upmake("$Bin/msw/wx_${proj}.vcxproj", \&update_msbuild, @args); - log_upmake("$Bin/msw/wx_${proj}.vcxproj.filters", \&update_msbuild_filters, @args); + # First deal with MSBuild project, it's the simplest case. + if (!defined $only_version || $only_version == 10) { + call_upmake("$Bin/msw/wx_${proj}.vcxproj", \&update_msbuild, @args); + call_upmake("$Bin/msw/wx_${proj}.vcxproj.filters", \&update_msbuild_filters, @args); + } + + # Pre-MSBuild projects also put this header together with all the other + # ones, so it needs to be added (with MSBuild it's a + # element and so is completely separate from the real headers that use + # ). + push @headers, "${top_srcdir}include/wx/msw/genrcdefs.h"; + + # And core project also includes all GUI headers instead of just those + # it really uses. + if ($proj eq 'core') { + foreach my $gui_proj (grep { $_ ne 'base' && + $_ ne 'core' && + $_ ne 'net' && + $_ ne 'xml' } keys %projects_vars) { + foreach my $var (@{$projects_vars{$gui_proj}}) { + push @headers, "${top_srcdir}include/$_" for @{$vars->{"${var}_HDR"}}; + } + } + } + + # For compatibility with the existing bakefile-generated projects, + # don't include *.cpp files in the list of headers -- even these files + # are actually used as headers (i.e. they are #include'd). + if ($proj eq 'base') { + @headers = grep { $_ !~ /\.cpp$/ } @headers; + } + + foreach my $ver (@vcproj_versions) { + next if defined $only_version && $ver != $only_version; + + call_upmake("$Bin/msw/wx_vc${ver}_${proj}.vcproj", \&update_vcproj, @args); + } } } diff --git a/build/upmake_script.pl b/build/upmake_script.pl index edd0005ee6..8f06ac7dcb 100755 --- a/build/upmake_script.pl +++ b/build/upmake_script.pl @@ -15,14 +15,14 @@ use Makefile::Update::VCProj; my $verbose = 0; my $quiet = 0; -my ($only_bkl, $only_msbuild, $only_project, $only_version); +my ($only_bkl, $only_msvs, $only_project, $only_version); GetOptions( 'verbose|v' => \$verbose, 'quiet|q' => \$quiet, 'only-bkl' => \$only_bkl, - 'only-project=s' => sub { $only_msbuild = 1; $only_project = $_[1] }, - 'only-version=i' => sub { $only_msbuild = 1; $only_version = $_[1] }, + 'only-project=s' => sub { $only_msvs = 1; $only_project = $_[1] }, + 'only-version=i' => sub { $only_msvs = 1; $only_version = $_[1] }, ) or die <] [--only-version=] @@ -37,7 +37,7 @@ selecting the MSBuild projects. EOF ; -if ($only_bkl && $only_msbuild) { +if ($only_bkl && $only_msvs) { die qq{Options --only-bkl and --only-project or --only-version can't be used together.\n} } @@ -51,7 +51,7 @@ sub call_upmake open my $files, '<', "$Bin/files"; my $vars = read_files_list($files); -if (!$only_msbuild) { +if (!$only_msvs) { if (call_upmake("$Bin/bakefiles/files.bkl", \&update_bakefile_0, $vars)) { print qq{Don't forget to run "bakefile_gen -b wx.bkl".} if $verbose; }