summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelliott_c <ocielliottc@users.noreply.github.com>2006-01-25 15:05:21 +0000
committerelliott_c <ocielliottc@users.noreply.github.com>2006-01-25 15:05:21 +0000
commit325b75d00a804b4906b94b65069fa6d34148b741 (patch)
treeb9fe567aceed9a0e0ea6951f2df43787e5a26f95
parent4e3f8b85909ff7af8f8596790974fa98ca529c9d (diff)
downloadMPC-325b75d00a804b4906b94b65069fa6d34148b741.tar.gz
ChangeLogTag: Wed Jan 25 09:02:34 2006 Chad Elliott <elliott_c@ociweb.com>
-rw-r--r--ChangeLog17
-rw-r--r--modules/DirectoryManager.pm14
-rw-r--r--modules/TemplateParser.pm85
-rw-r--r--modules/WinProjectBase.pm11
-rw-r--r--templates/nmake.mpd37
5 files changed, 120 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index efd337fb..2c141e0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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%>