diff options
author | elliott_c <ocielliottc@users.noreply.github.com> | 2006-01-25 15:05:21 +0000 |
---|---|---|
committer | elliott_c <ocielliottc@users.noreply.github.com> | 2006-01-25 15:05:21 +0000 |
commit | 325b75d00a804b4906b94b65069fa6d34148b741 (patch) | |
tree | b9fe567aceed9a0e0ea6951f2df43787e5a26f95 | |
parent | 4e3f8b85909ff7af8f8596790974fa98ca529c9d (diff) | |
download | MPC-325b75d00a804b4906b94b65069fa6d34148b741.tar.gz |
ChangeLogTag: Wed Jan 25 09:02:34 2006 Chad Elliott <elliott_c@ociweb.com>
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | modules/DirectoryManager.pm | 14 | ||||
-rw-r--r-- | modules/TemplateParser.pm | 85 | ||||
-rw-r--r-- | modules/WinProjectBase.pm | 11 | ||||
-rw-r--r-- | templates/nmake.mpd | 37 |
5 files changed, 120 insertions, 44 deletions
@@ -1,3 +1,20 @@ +Wed Jan 25 09:02:34 2006 Chad Elliott <elliott_c@ociweb.com> + + * modules/DirectoryManager.pm: + * modules/TemplateParser.pm: + * modules/WinProjectBase.pm: + + Added a new template function called transdir which will translate + a directory portion of a filename into a "usable" object file + directory. It entails changing .. into the word 'dotdot' and for + windows based projects it will also change drive letters and $() + variables. + + * templates/nmake.mpd: + + Use the new transdir function to deal with relative directories + and other problematic directory names. + Mon Jan 23 13:05:12 2006 Chad Elliott <elliott_c@ociweb.com> * templates/nmake.mpd: diff --git a/modules/DirectoryManager.pm b/modules/DirectoryManager.pm index 5e378e92..38ee6db5 100644 --- a/modules/DirectoryManager.pm +++ b/modules/DirectoryManager.pm @@ -148,6 +148,20 @@ sub mpc_glob { # Virtual Methods To Be Overridden # ************************************************************ +sub translate_directory { + my($self) = shift; + my($dir) = shift; + my($dd) = 'dotdot'; + + if ($dir =~ /\.\./) { + $dir =~ s/^\.\.([\/\\])/$dd$1/; + $dir =~ s/([\/\\])\.\.$/$1$dd/; + $dir =~ s/([\/\\])\.\.([\/\\])/$1$dd$2/g; + } + return $dir; +} + + sub convert_slashes { #my($self) = shift; return 0; diff --git a/modules/TemplateParser.pm b/modules/TemplateParser.pm index 1f37d410..b37edb8e 100644 --- a/modules/TemplateParser.pm +++ b/modules/TemplateParser.pm @@ -58,6 +58,7 @@ my(%keywords) = ('if' => 0, 'contains' => 5, 'compares' => 5, 'duplicate_index' => 5, + 'transdir' => 5, ); my(%target_type_vars) = ('type_is_static' => 1, @@ -127,7 +128,7 @@ sub basename { } -sub tp_dirname { +sub validated_dirname { my($self) = shift; my($file) = shift; my($index) = rindex($file, ($self->{'cslashes'} ? '\\' : '/')); @@ -141,6 +142,20 @@ sub tp_dirname { } +sub tp_dirname { + my($self) = shift; + my($file) = shift; + my($index) = rindex($file, ($self->{'cslashes'} ? '\\' : '/')); + + if ($index >= 0) { + return substr($file, 0, $index); + } + else { + return '.'; + } +} + + sub strip_line { #my($self) = shift; #my($line) = shift; @@ -663,10 +678,9 @@ sub get_flag_overrides { sub get_multiple { my($self) = shift; my($name) = shift; - my($value) = $self->get_value_with_default($name); - return (defined $value ? - $self->doif_multiple($self->create_array($value)) : - undef); + return $self->doif_multiple( + $self->create_array( + $self->get_value_with_default($name))); } @@ -1217,9 +1231,7 @@ sub handle_noextension { sub get_dirname { my($self) = shift; my($name) = shift; - my($value) = $self->get_value_with_default($name); - return (defined $value ? - $self->doif_dirname($value) : undef); + return $self->doif_dirname($self->get_value_with_default($name)); } @@ -1228,7 +1240,7 @@ sub doif_dirname { my($value) = shift; if (defined $value) { - $value = $self->tp_dirname($value); + $value = $self->validated_dirname($value); return ($value ne '.'); } return undef; @@ -1239,10 +1251,8 @@ sub handle_dirname { my($self) = shift; my($name) = shift; - if (!$self->{'if_skip'}) { - $self->append_current( - $self->tp_dirname($self->get_value_with_default($name))); - } + $self->append_current( + $self->validated_dirname($self->get_value_with_default($name))); } @@ -1250,10 +1260,8 @@ sub handle_basename { my($self) = shift; my($name) = shift; - if (!$self->{'if_skip'}) { - $self->append_current( - $self->basename($self->get_value_with_default($name))); - } + $self->append_current( + $self->basename($self->get_value_with_default($name))); } @@ -1339,7 +1347,7 @@ sub doif_duplicate_index { if (defined $value) { my($base) = lc($self->basename($value)); - my($path) = $self->tp_dirname($value); + my($path) = $self->validated_dirname($value); if (!defined $self->{'dupfiles'}->{$base}) { $self->{'dupfiles'}->{$base} = [$path]; @@ -1366,12 +1374,41 @@ sub handle_duplicate_index { my($self) = shift; my($name) = shift; - if (!$self->{'if_skip'}) { - my($value) = $self->doif_duplicate_index( - $self->get_value_with_default($name)); - if (defined $value) { - $self->append_current($value); - } + my($value) = $self->doif_duplicate_index( + $self->get_value_with_default($name)); + if (defined $value) { + $self->append_current($value); + } +} + + +sub get_transdir { + my($self) = shift; + my($name) = shift; + return $self->doif_transdir($self->get_value_with_default($name)); +} + + +sub doif_transdir { + my($self) = shift; + my($value) = shift; + + if ($value =~ /([\/\\])/) { + return $self->{'prjc'}->translate_directory( + $self->tp_dirname($value)) . $1; + } + + return undef; +} + + +sub handle_transdir { + my($self) = shift; + my($name) = shift; + my($value) = $self->doif_transdir($self->get_value_with_default($name)); + + if (defined $value) { + $self->append_current($value); } } diff --git a/modules/WinProjectBase.pm b/modules/WinProjectBase.pm index 96eb032e..43b3ead0 100644 --- a/modules/WinProjectBase.pm +++ b/modules/WinProjectBase.pm @@ -28,6 +28,17 @@ sub case_insensitive { } +sub translate_directory { + my($self) = shift; + my($dir) = shift; + + $dir = $self->DirectoryManager::translate_directory($dir); + $dir =~ s/^([A-Z]):/$1/i; + $dir =~ s/\$\(([^\)]+)\)/$1/g; + return $dir; +} + + sub validated_directory { my($self) = shift; my($dir) = shift; diff --git a/templates/nmake.mpd b/templates/nmake.mpd index 1b1c16ec..11860b37 100644 --- a/templates/nmake.mpd +++ b/templates/nmake.mpd @@ -128,7 +128,7 @@ REALCLEAN : CLEAN if not exist "$(INTDIR)\$(NULL)" mkdir "$(INTDIR)" CPP=<%cc("cl.exe")%> -CPP_COMMON=/nologo <%if(add_compile)%><%add_compile%> <%endif%><%if(optimize)%><%optimize_flags("/O2")%><%else%><%debug_flags("/Ob0")%><%endif%> <%compile_flags%><%if(pdbc)%> /Fd"<%if(type_is_static)%><%libout%>\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%>.pdb<%else%>$(INTDIR)/<%endif%>"<%endif%> <%foreach(includes)%>/I "<%include%>" <%endfor%><%foreach(defines cpu_defines common_defines macros)%>/D <%define%> <%endfor%><%if(unicode)%>/D UNICODE /D _UNICODE <%endif%><%if(type_is_dynamic)%><%foreach(dynamicflags)%>/D <%dynamicflag%> <%endfor%><%endif%><%if(need_staticflags)%><%foreach(staticflags)%>/D <%staticflag%> <%endfor%><%endif%><%if(pch_header)%><%foreach(pch_defines)%>/D <%pch_define%> <%endfor%><%if(pch_source)%>/Yu<%else%>/YX<%endif%>"<%pch_header%>" /Fp"$(INTDIR)\<%noextension(pch_header)%>.pch" <%endif%>/FD /c +CPP_COMMON=/nologo <%if(add_compile)%><%add_compile%> <%endif%><%if(optimize)%><%optimize_flags("/O2")%><%else%><%debug_flags("/Ob0")%><%endif%> <%compile_flags%><%if(pdbc)%> /Fd"<%if(type_is_static)%><%libout%>\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%>.pdb<%else%>$(INTDIR)/<%endif%>"<%endif%> <%foreach(includes)%>/I "<%include%>" <%endfor%><%foreach(defines cpu_defines common_defines macros)%>/D <%define%> <%endfor%><%if(unicode)%>/D UNICODE /D _UNICODE <%endif%><%if(type_is_dynamic)%><%foreach(dynamicflags)%>/D <%dynamicflag%> <%endfor%><%endif%><%if(need_staticflags)%><%foreach(staticflags)%>/D <%staticflag%> <%endfor%><%endif%><%if(pch_header)%><%foreach(pch_defines)%>/D <%pch_define%> <%endfor%><%if(pch_source)%>/Yu<%else%>/YX<%endif%>"<%pch_header%>" /Fp"$(INTDIR)\<%transdir(pch_header)%><%basenoextension(pch_header)%>.pch" <%endif%>/FD /c CPP_PROJ=$(CPP_COMMON) /Fo"<%fo_flag("$(INTDIR)\\\\")%>" <%if(!type_is_static)%> @@ -147,14 +147,14 @@ LINK32_FLAGS=/nologo /machine:<%machine("I386")%><%if(link_options)%> <%link_opt LINK32_OBJS= \ <%if(!type_is_static)%> <%foreach(resource_files)%> - "$(INTDIR)\<%noextension(resource_file)%>.res" \ + "$(INTDIR)\<%transdir(resource_file)%><%basenoextension(resource_file)%>.res" \ <%endfor%> <%endif%> <%if(pch_source)%> - "$(INTDIR)\<%noextension(pch_source)%>.obj" \ + "$(INTDIR)\<%transdir(pch_source)%><%basenoextension(pch_source)%>.obj" \ <%endif%> <%foreach(source_files)%> - "$(INTDIR)\<%noextension(source_file)%>.obj"<%fornotlast(" \\")%> + "$(INTDIR)\<%transdir(source_file)%><%basenoextension(source_file)%>.obj"<%fornotlast(" \\")%> <%endfor%> "<%if(type_is_dynamic)%><%if(dllout)%><%dllout%><%else%><%libout%><%endif%>\<%libname_prefix%><%if(sharedname)%><%sharedname%><%else%><%staticname%><%endif%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%dll_ext%><%endif%><%if(type_is_static)%>$(OUTDIR)\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%lib_ext%><%endif%><%if(exename)%>$(INSTALLDIR)\<%exename%><%if(use_exe_modifier)%><%lib_modifier%><%endif%><%exe_ext%><%endif%>" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) @@ -229,14 +229,14 @@ SOURCE="<%pch_source%>" <%foreach(configurations)%> !<%fornotfirst("ELSE")%>IF "$(CFG)" == "<%platform%> <%configuration%>" -CPP_SWITCHES=/nologo <%if(add_compile)%><%add_compile%> <%endif%><%if(optimize)%><%optimize_flags%><%else%><%debug_flags%><%endif%> <%compile_flags%><%if(pdbc)%> /Fd"<%if(type_is_static)%><%libout%>\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%>.pdb<%else%>$(INTDIR)/<%endif%>"<%endif%> <%foreach(includes)%>/I "<%include%>" <%endfor%><%foreach(defines cpu_defines common_defines macros)%>/D <%define%> <%endfor%><%if(unicode)%>/D UNICODE /D _UNICODE <%endif%><%if(type_is_dynamic)%><%foreach(dynamicflags)%>/D <%dynamicflag%> <%endfor%><%endif%><%if(need_staticflags)%><%foreach(staticflags)%>/D <%staticflag%> <%endfor%><%endif%><%if(pch_header)%><%foreach(pch_defines)%>/D <%pch_define%> <%endfor%>/Fp"$(INTDIR)\<%noextension(pch_header)%>.pch" /Yc"<%pch_header%>" <%endif%>/FD /c +CPP_SWITCHES=/nologo <%if(add_compile)%><%add_compile%> <%endif%><%if(optimize)%><%optimize_flags%><%else%><%debug_flags%><%endif%> <%compile_flags%><%if(pdbc)%> /Fd"<%if(type_is_static)%><%libout%>\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%>.pdb<%else%>$(INTDIR)/<%endif%>"<%endif%> <%foreach(includes)%>/I "<%include%>" <%endfor%><%foreach(defines cpu_defines common_defines macros)%>/D <%define%> <%endfor%><%if(unicode)%>/D UNICODE /D _UNICODE <%endif%><%if(type_is_dynamic)%><%foreach(dynamicflags)%>/D <%dynamicflag%> <%endfor%><%endif%><%if(need_staticflags)%><%foreach(staticflags)%>/D <%staticflag%> <%endfor%><%endif%><%if(pch_header)%><%foreach(pch_defines)%>/D <%pch_define%> <%endfor%>/Fp"$(INTDIR)\<%transdir(pch_header)%><%basenoextension(pch_header)%>.pch" /Yc"<%pch_header%>" <%endif%>/FD /c -"$(INTDIR)\<%noextension(pch_source)%>.obj" "$(INTDIR)\<%noextension(pch_header)%>.pch" : $(SOURCE) "$(INTDIR)" -<%if(dirname(pch_source))%> - @if not exist "$(INTDIR)\<%dirname(pch_source)%>\$(NULL)" mkdir "$(INTDIR)\<%dirname(pch_source)%>" +"$(INTDIR)\<%transdir(pch_source)%><%basenoextension(pch_source)%>.obj" "$(INTDIR)\<%transdir(pch_header)%><%basenoextension(pch_header)%>.pch" : $(SOURCE) "$(INTDIR)" +<%if(transdir(pch_source))%> + @if not exist "$(INTDIR)\<%transdir(pch_source)%>$(NULL)" mkdir "$(INTDIR)\<%transdir(pch_source)%>" <%endif%> $(CPP) @<< - $(CPP_SWITCHES) /Fo"$(INTDIR)\<%noextension(pch_source)%>.obj" $(SOURCE) + $(CPP_SWITCHES) /Fo"$(INTDIR)\<%transdir(pch_source)%><%basenoextension(pch_source)%>.obj" $(SOURCE) << <%endfor%> @@ -247,14 +247,11 @@ CPP_SWITCHES=/nologo <%if(add_compile)%><%add_compile%> <%endif%><%if(optimize)% <%foreach(source_files)%> SOURCE="<%source_file%>" -<%if(dirname(source_file))%> -"$(INTDIR)\<%noextension(source_file)%>.obj" : $(SOURCE) "$(INTDIR)" - @if not exist "$(INTDIR)\<%dirname(source_file)%>\$(NULL)" mkdir "$(INTDIR)\<%dirname(source_file)%>" - $(CPP) $(CPP_COMMON) /Fo"$(INTDIR)\<%noextension(source_file)%>.obj" $(SOURCE) -<%else%> -"$(INTDIR)\<%basenoextension(source_file)%>.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) $(CPP_COMMON) /Fo"$(INTDIR)\<%basenoextension(source_file)%>.obj" $(SOURCE) +"$(INTDIR)\<%transdir(source_file)%><%basenoextension(source_file)%>.obj" : $(SOURCE) "$(INTDIR)" +<%if(transdir(source_file))%> + @if not exist "$(INTDIR)\<%transdir(source_file)%>$(NULL)" mkdir "$(INTDIR)\<%transdir(source_file)%>" <%endif%> + $(CPP) $(CPP_COMMON) /Fo"$(INTDIR)\<%transdir(source_file)%><%basenoextension(source_file)%>.obj" $(SOURCE) <%endfor%> <%endif%> @@ -304,11 +301,11 @@ InputPath=<%custom_type->input_file%> <%foreach(resource_files)%> SOURCE="<%resource_file%>" -"$(INTDIR)\<%noextension(resource_file)%>.res" : $(SOURCE) "$(INTDIR)" -<%if(dirname(resource_file))%> - @if not exist "$(INTDIR)\<%dirname(resource_file)%>\$(NULL)" mkdir "$(INTDIR)\<%dirname(resource_file)%>" +"$(INTDIR)\<%transdir(resource_file)%><%basenoextension(resource_file)%>.res" : $(SOURCE) "$(INTDIR)" +<%if(transdir(resource_file))%> + @if not exist "$(INTDIR)\<%transdir(resource_file)%>$(NULL)" mkdir "$(INTDIR)\<%transdir(resource_file)%>" <%endif%> - $(RSC) /l 0x409 /fo"$(INTDIR)\<%noextension(resource_file)%>.res"<%foreach(defines cpu_defines macros)%> /d <%define%><%endfor%><%if(unicode)%> /d UNICODE /d _UNICODE<%endif%><%foreach(includes)%> /i "<%include%>"<%endfor%> $(SOURCE) + $(RSC) /l 0x409 /fo"$(INTDIR)\<%transdir(resource_file)%><%basenoextension(resource_file)%>.res"<%foreach(defines cpu_defines macros)%> /d <%define%><%endfor%><%if(unicode)%> /d UNICODE /d _UNICODE<%endif%><%foreach(includes)%> /i "<%include%>"<%endfor%> $(SOURCE) <%endfor%> |