1 package VSObjectFactory;
4 # Package that creates Visual Studio wrapper objects for msvc build
6 # src/tools/msvc/VSObjectFactory.pm
21 @EXPORT = qw(CreateSolution CreateProject DetermineVisualStudioVersion);
25 my $visualStudioVersion = shift;
27 if (!defined($visualStudioVersion))
29 $visualStudioVersion = DetermineVisualStudioVersion();
32 if ($visualStudioVersion eq '8.00')
34 return new VS2005Solution(@_);
36 elsif ($visualStudioVersion eq '9.00')
38 return new VS2008Solution(@_);
40 elsif ($visualStudioVersion eq '10.00')
42 return new VS2010Solution(@_);
46 croak "The requested Visual Studio version is not supported.";
52 my $visualStudioVersion = shift;
54 if (!defined($visualStudioVersion))
56 $visualStudioVersion = DetermineVisualStudioVersion();
59 if ($visualStudioVersion eq '8.00')
61 return new VC2005Project(@_);
63 elsif ($visualStudioVersion eq '9.00')
65 return new VC2008Project(@_);
67 elsif ($visualStudioVersion eq '10.00')
69 return new VC2010Project(@_);
73 croak "The requested Visual Studio version is not supported.";
77 sub DetermineVisualStudioVersion
79 my $nmakeVersion = shift;
81 if (!defined($nmakeVersion))
84 # Determine version of nmake command, to set proper version of visual studio
85 # we use nmake as it has existed for a long time and still exists in visual studio 2010
86 open(P, "nmake /? 2>&1 |")
88 "Unable to determine Visual Studio version: The nmake command wasn't found.";
92 if (/(\d+)\.(\d+)\.\d+(\.\d+)?$/)
94 return _GetVisualStudioVersion($1, $2);
99 elsif ($nmakeVersion =~ /(\d+)\.(\d+)\.\d+(\.\d+)?$/)
101 return _GetVisualStudioVersion($1, $2);
104 "Unable to determine Visual Studio version: The nmake version could not be determined.";
107 sub _GetVisualStudioVersion
109 my ($major, $minor) = @_;
113 "The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
119 "Unable to determine Visual Studio version: Visual Studio versions before 6.0 aren't supported.";
121 return "$major.$minor";