summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Mitz <mitza-oci@users.noreply.github.com>2013-06-24 17:52:38 +0000
committerAdam Mitz <mitza-oci@users.noreply.github.com>2013-06-24 17:52:38 +0000
commit4ab97330787291ab6f16f211e8db472a9694cadd (patch)
treeafc85fc54a431912be0a255acad460b96f264765
parentf479c52c613a5fd054a1970c790832e52a85f70e (diff)
downloadMPC-4ab97330787291ab6f16f211e8db472a9694cadd.tar.gz
merged from trunk r1984 through r2138
-rw-r--r--ChangeLog689
-rwxr-xr-xclone_build_tree.pl53
-rw-r--r--config/coredx_ts_defaults.mpb17
-rw-r--r--config/coredxlib.mpb8
-rw-r--r--config/glib.mpb7
-rw-r--r--config/lzo1.mpb2
-rw-r--r--config/lzo2.mpb2
-rw-r--r--config/ndds_cck_ts_defaults.mpb6
-rw-r--r--config/ndds_example_ts_defaults.mpb6
-rw-r--r--config/ndds_ts_defaults.mpb5
-rw-r--r--config/nddsexe_with_idl.mpb5
-rw-r--r--config/nddslib_with_idl.mpb5
-rw-r--r--config/nddsmonitor.mpb2
-rw-r--r--config/openmp.mpb6
-rw-r--r--config/pintools_32bit.mpb47
-rw-r--r--config/portico.mpb18
-rw-r--r--config/tena_base.mpb8
-rw-r--r--config/tena_middleware.mpb11
-rw-r--r--config/udm.mpb17
-rw-r--r--docs/MPC.sgml26
-rw-r--r--docs/README7
-rw-r--r--docs/USAGE15
-rw-r--r--docs/html/MakeProjectCreator.css34
-rw-r--r--docs/html/MakeProjectCreator.html14137
-rw-r--r--docs/html/RpmSpec.html13
-rw-r--r--docs/templates/automake.txt2
-rw-r--r--docs/templates/bmake.txt2
-rw-r--r--docs/templates/cc.txt2
-rw-r--r--docs/templates/cdt6cproject.txt1
-rw-r--r--docs/templates/cdt6project.txt1
-rw-r--r--docs/templates/common.txt1
-rw-r--r--docs/templates/ghs.txt2
-rw-r--r--docs/templates/make.net.txt2
-rw-r--r--docs/templates/make.txt7
-rw-r--r--docs/templates/rpmspec.txt4
-rw-r--r--docs/templates/vc10.txt2
-rw-r--r--docs/templates/vc7.txt2
-rw-r--r--docs/templates/vc7csharp.txt2
-rw-r--r--docs/templates/vc7java.txt2
-rw-r--r--docs/templates/vc7vb.txt2
-rw-r--r--docs/templates/vc8.txt2
-rw-r--r--docs/templates/vc8csharp.txt3
-rw-r--r--docs/templates/vc8java.txt2
-rw-r--r--docs/templates/vc8vb.txt2
-rw-r--r--docs/templates/wb26.txt1
-rw-r--r--docs/templates/wb26wrmakefile.txt1
-rw-r--r--docs/templates/wb26wrproject.txt1
-rw-r--r--docs/templates/wix.txt2
-rw-r--r--modules/AutomakeProjectCreator.pm1
-rw-r--r--modules/AutomakeWorkspaceCreator.pm39
-rw-r--r--modules/BCB2007ProjectCreator.pm1
-rw-r--r--modules/BCB2007WorkspaceCreator.pm1
-rw-r--r--modules/BCB2009ProjectCreator.pm1
-rw-r--r--modules/BCB2009WorkspaceCreator.pm1
-rw-r--r--modules/BDS4ProjectCreator.pm1
-rw-r--r--modules/BDS4WorkspaceCreator.pm1
-rw-r--r--modules/BMakeProjectCreator.pm1
-rw-r--r--modules/BMakeWorkspaceCreator.pm1
-rw-r--r--modules/BorlandProjectBase.pm1
-rw-r--r--modules/BorlandPropertyBase.pm1
-rw-r--r--modules/CCProjectCreator.pm1
-rw-r--r--modules/CCWorkspaceCreator.pm1
-rw-r--r--modules/CDT6ProjectCreator.pm1
-rw-r--r--modules/CDT6WorkspaceCreator.pm1
-rw-r--r--modules/CDT7ProjectCreator.pm1
-rw-r--r--modules/CDT7WorkspaceCreator.pm1
-rw-r--r--modules/CommandHelper.pm1
-rw-r--r--modules/ConfigParser.pm1
-rw-r--r--modules/Creator.pm81
-rw-r--r--modules/Depgen/DependencyEditor.pm40
-rw-r--r--modules/Depgen/DependencyGenerator.pm1
-rw-r--r--modules/Depgen/DependencyWriter.pm1
-rw-r--r--modules/Depgen/DependencyWriterFactory.pm1
-rw-r--r--modules/Depgen/Driver.pm31
-rw-r--r--modules/Depgen/MakeDependencyWriter.pm1
-rw-r--r--modules/Depgen/MakeObjectGenerator.pm1
-rw-r--r--modules/Depgen/NMakeDependencyWriter.pm1
-rw-r--r--modules/Depgen/NMakeObjectGenerator.pm1
-rw-r--r--modules/Depgen/ObjectGenerator.pm1
-rw-r--r--modules/Depgen/ObjectGeneratorFactory.pm1
-rw-r--r--modules/Depgen/Preprocessor.pm8
-rw-r--r--modules/DirectoryManager.pm3
-rw-r--r--modules/Driver.pm23
-rw-r--r--modules/EM3ProjectCreator.pm1
-rw-r--r--modules/EM3WorkspaceCreator.pm1
-rw-r--r--modules/FeatureParser.pm1
-rw-r--r--modules/GHSProjectCreator.pm1
-rw-r--r--modules/GHSPropertyBase.pm1
-rw-r--r--modules/GHSWorkspaceCreator.pm1
-rw-r--r--modules/GUID.pm1
-rw-r--r--modules/HTMLProjectCreator.pm1
-rw-r--r--modules/HTMLWorkspaceCreator.pm1
-rw-r--r--modules/MPC.pm1
-rw-r--r--modules/MWC.pm1
-rw-r--r--modules/MakeProjectBase.pm1
-rw-r--r--modules/MakeProjectCreator.pm1
-rw-r--r--modules/MakePropertyBase.pm1
-rw-r--r--modules/MakeWorkspaceBase.pm1
-rw-r--r--modules/MakeWorkspaceCreator.pm3
-rw-r--r--modules/NMakeProjectCreator.pm1
-rw-r--r--modules/NMakeWorkspaceCreator.pm1
-rw-r--r--modules/Options.pm98
-rw-r--r--modules/OutputMessage.pm6
-rw-r--r--modules/Parser.pm31
-rw-r--r--modules/ProjectCreator.pm84
-rw-r--r--modules/RpmSpecProjectCreator.pm1
-rw-r--r--modules/RpmSpecWorkspaceCreator.pm11
-rw-r--r--modules/SLEProjectCreator.pm1
-rw-r--r--modules/SLEWorkspaceCreator.pm1
-rw-r--r--modules/StringProcessor.pm4
-rw-r--r--modules/TemplateInputReader.pm1
-rw-r--r--modules/TemplateParser.pm48
-rw-r--r--modules/VC10ProjectCreator.pm1
-rw-r--r--modules/VC10WorkspaceCreator.pm1
-rw-r--r--modules/VC11ProjectCreator.pm57
-rw-r--r--modules/VC11WorkspaceCreator.pm44
-rw-r--r--modules/VC6ProjectCreator.pm1
-rw-r--r--modules/VC6WorkspaceCreator.pm1
-rw-r--r--modules/VC71ProjectCreator.pm1
-rw-r--r--modules/VC71WorkspaceCreator.pm1
-rw-r--r--modules/VC7ProjectCreator.pm3
-rw-r--r--modules/VC7WorkspaceCreator.pm1
-rw-r--r--modules/VC8ProjectCreator.pm1
-rw-r--r--modules/VC8WorkspaceCreator.pm1
-rw-r--r--modules/VC9ProjectCreator.pm1
-rw-r--r--modules/VC9WorkspaceCreator.pm1
-rw-r--r--modules/VCProjectBase.pm1
-rw-r--r--modules/VCPropertyBase.pm1
-rw-r--r--modules/Version.pm1
-rw-r--r--modules/WB26ProjectCreator.pm1
-rw-r--r--modules/WB26WorkspaceCreator.pm1
-rw-r--r--modules/WB30ProjectCreator.pm1
-rw-r--r--modules/WB30WorkspaceCreator.pm1
-rw-r--r--modules/WinProjectBase.pm1
-rw-r--r--modules/WinPropertyBase.pm1
-rw-r--r--modules/WinVersionTranslator.pm1
-rw-r--r--modules/WinWorkspaceBase.pm1
-rw-r--r--modules/WixProjectCreator.pm1
-rw-r--r--modules/WixWorkspaceCreator.pm1
-rw-r--r--modules/WorkspaceCreator.pm1139
-rw-r--r--modules/WorkspaceHelper.pm1
-rw-r--r--modules/XMLProjectBase.pm1
-rw-r--r--modules/mpc_debug.pm1
-rwxr-xr-xprj_install.pl2
-rw-r--r--rpm/MPC.templ (renamed from rpm/MPC.spec)0
-rwxr-xr-xrpm/buildrpm.sh53
-rw-r--r--templates/make.mpd18
-rw-r--r--templates/makedll.mpt2
-rw-r--r--templates/vc10.mpd15
-rw-r--r--templates/vc10platforms.mpt35
-rw-r--r--templates/vc11dll.mpt75
-rw-r--r--templates/vc11exe.mpt81
-rw-r--r--templates/vc11lib.mpt77
-rw-r--r--templates/vc11libexe.mpt85
-rw-r--r--templates/vc11platforms.mpt24
-rw-r--r--templates/vc8csharp.mpd7
-rw-r--r--templates/vc8platforms.mpt35
-rw-r--r--templates/wix.mpd16
158 files changed, 11114 insertions, 6434 deletions
diff --git a/ChangeLog b/ChangeLog
index f9450b6e..f615d0a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,692 @@
+Thu Nov 22 09:19:24 UTC 2012 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * prj_install.pl:
+ Extended shared library installation for debian packaging
+
+Tue Nov 20 18:27:27 UTC 2012 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/lzo1.mpb:
+ * config/lzo2.mpb:
+ Fixed expand parts
+
+Fri Jul 6 16:46:47 UTC 2012 Chad Elliott <elliott_c@ociweb.com>
+
+ * modules/Creator.pm:
+ * modules/TemplateParser.pm:
+ * modules/WorkspaceCreator.pm:
+
+ Fixed "Useless use of hash element in void context" and "Use of
+ uninitialized value $_ in concatenation" warnings.
+
+Fri Jun 22 14:31:02 UTC 2012 Chad Elliott <elliott_c@ociweb.com>
+
+ * templates/vc10.mpd:
+
+ Modified to allow setting 'BasicRuntimeChecks' regardless of the
+ 'optimize' setting.
+
+Wed Jun 6 13:09:54 UTC 2012 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * modules/ProjectCreator.pm:
+ Handle tpp files as template files
+
+ * docs/README
+ Mention vc11
+
+Fri Apr 27 13:31:52 UTC 2012 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * templates/vc8platforms.mpt:
+ * templates/vc10platforms.mpt:
+ Updated WinCE platforms
+
+Fri Mar 30 13:45:44 UTC 2012 Adam Mitz <mitza@ociweb.com>
+
+ * modules/WorkspaceCreator.pm:
+ In topname(), recognize Windows drive-letter paths as absolute.
+
+Thu Mar 8 22:41:34 UTC 2012 Adam Mitz <mitza@ociweb.com>
+
+ * modules/Depgen/Preprocessor.pm:
+
+ Cached results of full path to #included files need to be
+ kept separately for each directory of input files.
+
+Thu Mar 8 06:50:28 UTC 2011 Martin Corino <mcorino@remedy.nl>
+
+ * modules/TemplateParser.pm:
+
+ Fix to solve problems with IDL projects using the combination of
+ setting 'gendir' and defining custom output files (in separate
+ directory/ies *not* equal to 'gendir').
+
+Wed Mar 7 19:24:02 UTC 2012 Brian Johnson <johnsonb@ociweb.com>
+
+ * clone_build_tree.pl:
+
+ Adding flag to allow linking files normally avoided, but not part of
+ -l flag operations.
+
+Mon Feb 27 21:33:06 UTC 2012 Adam Mitz <mitza@ociweb.com>
+
+ * docs/html/MakeProjectCreator.css:
+ * docs/html/MakeProjectCreator.html:
+
+ HTML documentation update from Kevin Stanley of OCI.
+
+Tue Feb 21 20:13:24 UTC 2012 Adam Mitz <mitza@ociweb.com>
+
+ * templates/vc10.mpd:
+
+ Support multiple source files with the same name (in different
+ directories) in a single project.
+
+Tue Jan 24 19:01:18 UTC 2012 Chip Jones <jonesc@ociweb.com>
+
+ * ChangeLog:
+ Added changelog entry for -workers options.
+
+Tue Jan 24 18:26:46 UTC 2012 Chip Jones <jonesc@ociweb.com>
+
+ * docs/MPC.sgml:
+ * docs/USAGE:
+ * docs/html/MakeProjectCreator.html:
+
+ Added documentation for -workers options.
+
+Mon Jan 16 22:01:41 UTC 2012 Chip Jones <jonesc@ociweb.com>
+
+ * modules/Creator.pm:
+
+ Modifications to support multiprocess MPC.
+
+ * modules/Depgen/DependencyEditor.pm:
+ * modules/Depgen/Driver.pm:
+
+ Modified dependency generator to support appending to existing
+ files and generating dependencies for IDL files.
+
+ * modules/Driver.pm:
+ * modules/Options.pm:
+ * modules/Parser.pm:
+ * modules/ProjectCreator.pm:
+ * modules/TemplateParser.pm:
+ * modules/WorkspaceCreator.pm:
+
+ Modified MPC to generate projects in separate processes.
+ This experimental feature is enabled with the
+ command-line option '-workers.' It's behavior can
+ be modified with the '-workers_dir' and '-workers_port'
+ directives.
+
+ This is a merge of work done in the 'mpc_performance' branch.
+
+Tue Dec 20 11:42:28 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * modules/VC11ProjectCreator.pm:
+ * modules/VC11WorkspaceCreator.pm:
+ * templates/vc11dll.mpt:
+ * templates/vc11exe.mpt:
+ * templates/vc11lib.mpt:
+ * templates/vc11libexe.mpt:
+ * templates/vc11platforms.mpt:
+ Extended support for vc11
+
+ * modules/VC7ProjectCreator.pm:
+ Fixed typo
+
+Mon Dec 19 14:55:30 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/udm.mpb:
+
+ Added support for Debug/Release configurations.
+
+Sat Dec 17 21:40:53 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * templates/wix.mpd:
+
+ Added support for using the use_lib_modifier setting for
+ the non-extended template.
+
+Sat Dec 17 21:11:08 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/udm.mpb:
+
+ Changes libs declaration to lit_libs since there is no
+ differentiation between debug and release import libraries.
+
+Fri Dec 16 17:06:05 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/portico.mpb:
+
+ Base project for Portico implementation of HLA.
+
+Thu Dec 15 04:21:11 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/makedll.mpt:
+
+ Cygwin doesn't use -fPIC, GCC warns if it's present.
+
+Tue Dec 13 21:04:44 UTC 20111 Trevor Fields <fields_t@ociweb.com>
+
+ * rpm/buildrpm.sh:
+
+ Removed potential of running the check-buildroot script.
+
+Mon Dec 12 19:03:08 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * modules/Options.pm:
+ * modules/VC11ProjectCreator.pm:
+ * modules/VC11WorkspaceCreator.pm:
+ Added vc11 type, looks like the project format is still the same
+ as with vc10, but this way we can use -type vc11 in some experimental
+ builds
+
+Wed Dec 7 23:47:24 UTC 2011 Trevor Fields <fields_t@ociweb.com>
+
+ * rpm/buildrpm.sh:
+ Fixes to build on systems where rpmbuild uses buildroot.
+
+Mon Dec 5 15:32:37 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * docs/USAGE:
+
+ Removed obsolete note about a default -type.
+
+Mon Dec 5 15:17:04 UTC 2011 Chad Elliott <elliott_c@ociweb.com>
+
+ * modules/Creator.pm:
+ * modules/TemplateParser.pm:
+
+ Fixed a bug where the inner-most template scope was usable at any
+ given point within a template. Thanks to Adam Mitz for helping me
+ debug this and to Holger Schönstedt for bringing this to my
+ attention.
+
+ * docs/templates/make.txt:
+ * templates/make.mpd:
+ * templates/makedll.mpt:
+
+ Added a 'ccflags' template variable to allow users to specify C++
+ compiler options and a 'notparallel' template variable to allow
+ users to control whether or not a .NOTPARALLEL is added to the
+ makefile.
+
+ * templates/wix.mpd:
+
+ Fixed whitespace.
+
+Wed Nov 30 21:33:46 UTC 2011 Trevor Fields <fields_t@ociweb.com>
+
+ * rpm/buildrpm.sh:
+
+ Fixes to correctly gather packager information.
+ Changes so rpm can be built by non root user.
+
+Mon Nov 7 15:37:29 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * docs/README:
+
+ Typo fix.
+
+Thu Nov 3 12:00:45 UTC 2011 Chad Elliott <elliott_c@ociweb.com>
+
+ * docs/html/MakeProjectCreator.html:
+
+ Corrected the list of options ignored by the workspace 'cmdline'
+ setting.
+
+Wed Nov 2 21:06:18 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * templates/wix.mpd:
+
+ Added support for processing projects with custom_only set.
+
+Wed Oct 19 19:11:50 UTC 2011 William R. Otte <wotte@dre.vanderbilt.edu>
+
+ * config/openmp.mpb:
+
+ Base project for openmp.
+
+Mon Oct 17 18:33:05 UTC 2011 Chad Elliott <elliott_c@ociweb.com>
+
+ * templates/make.mpd:
+ * docs/templates/make.txt:
+
+ Define CFLAGS, but only if the 'cflags' template variable has been
+ defined.
+
+Thu Oct 6 12:40:46 UTC 2011 Marcel Smit <msmit@remedy.nl>
+
+ * docs/README:
+ * docs/templates/automake.txt:
+ * docs/templates/bmake.txt:
+ * docs/templates/cc.txt:
+ * docs/templates/cdt6cproject.txt:
+ * docs/templates/cdt6project.txt:
+ * docs/templates/common.txt:
+ * docs/templates/ghs.txt:
+ * docs/templates/make.net.txt:
+ * docs/templates/make.txt:
+ * docs/templates/rpmspec.txt:
+ * docs/templates/vc10.txt:
+ * docs/templates/vc7.txt:
+ * docs/templates/vc7csharp.txt:
+ * docs/templates/vc7java.txt:
+ * docs/templates/vc7vb.txt:
+ * docs/templates/vc8.txt:
+ * docs/templates/vc8csharp.txt:
+ * docs/templates/vc8java.txt:
+ * docs/templates/vc8vb.txt:
+ * docs/templates/wb26.txt:
+ * docs/templates/wb26wrmakefile.txt:
+ * docs/templates/wb26wrproject.txt:
+ * docs/templates/wix.txt:
+ Fuzz: added missing $Id $ string.
+
+Thu Oct 6 12:27:57 UTC 2011 Marcel Smit <msmit@remedy.nl>
+
+ * modules/AutomakeProjectCreator.pm:
+ * modules/AutomakeWorkspaceCreator.pm:
+ * modules/BCB2007ProjectCreator.pm:
+ * modules/BCB2007WorkspaceCreator.pm:
+ * modules/BCB2009ProjectCreator.pm:
+ * modules/BCB2009WorkspaceCreator.pm:
+ * modules/BDS4ProjectCreator.pm:
+ * modules/BDS4WorkspaceCreator.pm:
+ * modules/BMakeProjectCreator.pm:
+ * modules/BMakeWorkspaceCreator.pm:
+ * modules/BorlandProjectBase.pm:
+ * modules/BorlandPropertyBase.pm:
+ * modules/CCProjectCreator.pm:
+ * modules/CCWorkspaceCreator.pm:
+ * modules/CDT6ProjectCreator.pm:
+ * modules/CDT6WorkspaceCreator.pm:
+ * modules/CDT7ProjectCreator.pm:
+ * modules/CDT7WorkspaceCreator.pm:
+ * modules/CommandHelper.pm:
+ * modules/ConfigParser.pm:
+ * modules/Creator.pm:
+ * modules/DirectoryManager.pm:
+ * modules/Driver.pm:
+ * modules/EM3ProjectCreator.pm:
+ * modules/EM3WorkspaceCreator.pm:
+ * modules/FeatureParser.pm:
+ * modules/GHSProjectCreator.pm:
+ * modules/GHSPropertyBase.pm:
+ * modules/GHSWorkspaceCreator.pm:
+ * modules/GUID.pm:
+ * modules/HTMLProjectCreator.pm:
+ * modules/HTMLWorkspaceCreator.pm:
+ * modules/MPC.pm:
+ * modules/MWC.pm:
+ * modules/MakeProjectBase.pm:
+ * modules/MakeProjectCreator.pm:
+ * modules/MakePropertyBase.pm:
+ * modules/MakeWorkspaceBase.pm:
+ * modules/MakeWorkspaceCreator.pm:
+ * modules/NMakeProjectCreator.pm:
+ * modules/NMakeWorkspaceCreator.pm:
+ * modules/Options.pm:
+ * modules/OutputMessage.pm:
+ * modules/Parser.pm:
+ * modules/ProjectCreator.pm:
+ * modules/RpmSpecProjectCreator.pm:
+ * modules/RpmSpecWorkspaceCreator.pm:
+ * modules/SLEProjectCreator.pm:
+ * modules/SLEWorkspaceCreator.pm:
+ * modules/StringProcessor.pm:
+ * modules/TemplateInputReader.pm:
+ * modules/TemplateParser.pm:
+ * modules/VC10ProjectCreator.pm:
+ * modules/VC10WorkspaceCreator.pm:
+ * modules/VC6ProjectCreator.pm:
+ * modules/VC6WorkspaceCreator.pm:
+ * modules/VC71ProjectCreator.pm:
+ * modules/VC71WorkspaceCreator.pm:
+ * modules/VC7ProjectCreator.pm:
+ * modules/VC7WorkspaceCreator.pm:
+ * modules/VC8ProjectCreator.pm:
+ * modules/VC8WorkspaceCreator.pm:
+ * modules/VC9ProjectCreator.pm:
+ * modules/VC9WorkspaceCreator.pm:
+ * modules/VCProjectBase.pm:
+ * modules/VCPropertyBase.pm:
+ * modules/Version.pm:
+ * modules/WB26ProjectCreator.pm:
+ * modules/WB26WorkspaceCreator.pm:
+ * modules/WB30ProjectCreator.pm:
+ * modules/WB30WorkspaceCreator.pm:
+ * modules/WinProjectBase.pm:
+ * modules/WinPropertyBase.pm:
+ * modules/WinVersionTranslator.pm:
+ * modules/WinWorkspaceBase.pm:
+ * modules/WixProjectCreator.pm:
+ * modules/WixWorkspaceCreator.pm:
+ * modules/WorkspaceCreator.pm:
+ * modules/WorkspaceHelper.pm:
+ * modules/XMLProjectBase.pm:
+ * modules/mpc_debug.pm:
+ Fuzz: added missing $Id $ string.
+
+Wed Sep 21 18:51:02 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * rpm/MPC.templ:
+ * rpm/buildrpm.sh:
+ * rpm/MPC.spec:
+ Renamed the MPC spec file template to .templ and update the script
+ to read the template and create MPC.spec. Within a source package
+ we can only have one spec file and MPC is also included in the A/T/C/D
+ source package which will result in two spec files
+
+Tue Sep 20 13:34:11 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/tena_middleware.mpb:
+
+ Fixed error in base project to support non-Windows environments.
+
+Wed Aug 10 02:32:49 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/pintools_32bit.mpb:
+
+ Fixed errors in the specification.
+
+Mon Aug 1 18:16:21 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/pintools_32bit.mpb:
+
+ New base project for building a Pintool. This base project
+ only supports 32-bit Linux and Windows operating systems.
+
+Thu Jun 30 06:58:25 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/ndds_example_ts_defaults.mpb:
+ New base project for ndds to generate example code
+
+Thu Jun 16 20:16:29 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/vc10.mpd:
+
+ When creating static libs, don't provide dependent libs as the
+ AdditionalDependencies for the lib tool. This change makes
+ static libs in vc10 work like vc9 (and -type make for that matter).
+ Before this, a library that depended on another would end up
+ including all of the dependent lib's object files.
+
+Fri Jun 10 14:51:32 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * modules/Options.pm:
+
+ Modification to previous commit: also handle duplicate slashes and
+ other path cleanup operations.
+
+ * templates/vc10.mpd:
+
+ Unlike previous versions, vc10 runs all custom build steps for the
+ project in the same cmd shell. Use setlocal/endlocal when adding
+ to the PATH to avoid redundant additions to PATH.
+
+Tue May 24 14:42:55 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * modules/Options.pm:
+
+ Trim any trailing slashes from input files (really directories)
+ provided on the command line. Leaving the trailing slash
+ can result in the wrong number of ".." components in relative
+ path expansions.
+
+Thu May 19 15:29:01 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * config/glib.mpb:
+
+ Allow customization of the include search path for GLib since
+ at least some 64-bit Linux distros use "lib64" in place of "lib".
+
+Tue May 17 15:32:48 UTC 2011 Chad Elliott <elliott_c@ociweb.com>
+
+ * modules/Driver.pm:
+ * modules/Options.pm:
+ * modules/OutputMessage.pm:
+
+ Added debug information about the possible base projects that are
+ available.
+
+ * modules/ProjectCreator.pm:
+
+ Fixed a bug where subtracting values that contain psuedo variables
+ failed because they were not evaluated before subtracting.
+
+Wed May 11 14:18:13 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/vc10.mpd:
+
+ Generate the msbuild LinkKeyFile element from the MPC template
+ variable keyfile. Thanks to Charles Calkins for the patch.
+
+Wed Apr 27 14:31:56 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * modules/MakeWorkspaceCreator.pm:
+
+ Due to the change below, the workspace makefile no longer needs
+ to explicitly invoke the "generated" target in the projects.
+
+Wed Apr 27 14:07:44 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/make.mpd:
+
+ In the custom-only case, make sure that "all" is the first target
+ listed, and also have the "generated" target invoke prebuild.
+
+Wed Apr 27 13:25:32 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * prj_install.pl:
+ Added fix for OSX, thanks to Paul Fitzpatrick
+ <paul at robotrebuilt dot com> for reporting this
+
+Thu Apr 14 11:53:22 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/coredx_ts_defaults.mpb:
+ Extended this file
+
+Mon Apr 11 12:25:37 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/ndds_cck_ts_defaults.mpb:
+ Added -enableEscapeChar
+
+Mon Apr 11 01:57:43 UTC 2011 James H. Hill <hillj at cs dot iupui dot edu>
+
+ * config/tena_base.mpb:
+
+ The base project for all TENA base projects. It defines
+ common properties and sets the 'tena' feature.
+
+ * config/tena_middleware.mpb:
+
+ Base project for linking against the TENA middleware library.
+
+Sun Apr 10 17:39:57 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/nddsexe_with_idl.mpb:
+ * config/nddslib_with_idl.mpb:
+ Removed these files, use nddslib/nddsexe with the needed ts_defaults
+ base project
+
+Sun Apr 10 12:07:15 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/ndds_ts_defaults.mpb:
+ Removed CCK related options, this way someone can use NDDS without
+ requiring him to use the CCK, if you need the cck support, use
+ ndds_cck_ts_defaults as new base
+
+Sat Apr 9 11:47:11 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/ndds_cck_ts_defaults.mpb:
+ New base project, ndds_ts_defaults will be changed soon for just RTI
+ DDS without the CCK support. If you want to use the CCK, derive
+ from this base project
+
+ * config/nddsmonitor.mpb:
+ Layout change
+
+Fri Apr 8 14:35:18 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/vc8csharp.mpd:
+
+ Added "UserControl" as a valid subtype setting for C#.
+
+Wed Apr 6 12:02:50 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * config/coredx_ts_defaults.mpb:
+ * config/coredxlib.mpb:
+ Starter files for CoreDX
+
+ * config/ndds_ts_defaults.mpb:
+ Layout change
+
+Tue Apr 5 19:25:02 UTC 2011 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * modules/Creator.pm:
+ * modules/WorkspaceCreator.pm:
+
+ Fuzz fix.
+
+Tue Apr 5 18:47:09 UTC 2011 Don Hudson <hudsond@ociweb.com>
+
+ * modules/WorkspaceCreator.pm:
+
+ Added default_verbose_ordering() that returns false
+ and used it to set verbose_ordering. This allows derived workspace
+ creators to override the default verbose ordering.
+
+ Fixed typo in comment.
+
+ Corrected Perl warning by replacing == with eq in an if statement.
+
+ Modified the verbose ordering warning message to include the name
+ of the project being processed.
+
+ * modules/Driver.pm:
+
+ Changed to set verbose ordering on the creator only if it's defined
+ in the config file.
+
+ * modules/RpmSpecWorkspaceCreator.pm:
+
+ Added default_verbose_ordering() that returns true so that
+ a warning is logged if there are missing dependencies when
+ generating an rpm spec file.
+
+Tue Apr 5 12:57:22 UTC 2011 Don Hudson <hudsond@ociweb.com>
+
+ * docs/html/MakeProjectCreator.html:
+
+ Added bracketed (multiline) assigments to documentation,
+ i.e., assignment of form:
+
+ keyword <operator> [optional flags] {
+ This is
+ a multiline assignment.
+ }
+
+ Optional flags are \s to retain leading white space and
+ \n to retain new lines. These flags are be combined.
+
+ * docs/templates/rpmspec.txt:
+
+ Added rpm_pre_cmd keyword for %pre section of the RPM spec file
+ and rpm_url for the URL tag in the RPM spec file.
+
+ * modules/AutomakeWorkspaceCreator.pm:
+
+ Changed to default to cacheok of false as some intermediate project
+ files are deleted must be regenerated if a project is regenerated.
+ This was causing an error, but the error was only being logged.
+
+ Changed to return an error code and message when workspace generation
+ fails in some cases where an error message was only logged.
+
+ * modules/Creator.pm:
+
+ Added parse_assignment() that pre-parses bracketed assigments
+ (see comment on docs/html/MakeProjectCreator.html) before
+ calling SUPER::parse_assignment(). This method takes an optional
+ file handle that must be used for bracketed assignment support.
+
+ * modules/DirectoryManager.pm:
+
+ Corrected typo in comment.
+
+ * modules/Parser.pm:
+
+ Added strip_comments(), strip_lt_whitespace(), and is_blank_line().
+
+ * modules/ProjectCreator.pm:
+
+ Added file handle parse_assignment and related method calls for
+ bracketed assignment support. See comment on modules/Creator.pm.
+
+ Added case sensitivity logic to already_added() similar to other places in code.
+
+ * modules/RpmSpecWorkspaceCreator.pm:
+
+ Changed write_and_compare_file() to return 1 instead of undef as method
+ must now return status.
+
+ Added %pre section and URL tag to RPM spec file generation.
+
+ * modules/StringProcessor.pm:
+
+ Changed parse_assignment() to not strip ending new line
+ as later parsing may need it.
+
+ * modules/WorkspaceCreator.pm:
+
+ Added file handle parse_assignment and related method calls for
+ bracketed assignment support. See comment on modules/Creator.pm.
+
+ Changed to return an error code and message when workspace generation
+ fails in some cases where an error message was only logged.
+
+ Added default_cacheok() which returns true and is used to set 'cacheok'
+ so this method can be overridden when 'cacheok' needs to be false.
+
+Fri Mar 18 15:07:53 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * docs/templates/vc8csharp.txt:
+ * templates/vc8csharp.mpd:
+
+ Added the "PlatformTarget" template variable for C#.
+
+Tue Mar 15 14:54:48 UTC 2011 Adam Mitz <mitza@ociweb.com>
+
+ * templates/vc10.mpd:
+ * docs/templates/vc10.txt:
+
+ Added the "PlatformToolset" template variable.
+
+ * modules/ProjectCreator.pm:
+ * docs/README:
+
+ Allow the "*" replacement for assignments to the libs keyword.
+
+Wed Mar 9 13:51:00 UTC 2011 William R. Otte <wotte@dre.vanderbilt.edu>
+
+ * config/ndds_ts_defaults.mpb:
+
+ Added PLATFORM_NDDS_ARGS at the suggestion of Johnny Willemsen.
+
+Thu Mar 3 18:51:23 UTC 2011 Chad Elliott <elliott_c@ociweb.com>
+
+ * docs/html/RpmSpec.html:
+
+ Fixed html errors and warnings.
+
+ * modules/WorkspaceCreator.pm:
+
+ Fixed a bug where a project added by an aggregated workspace
+ containing a relative path would not be recognized as a duplicate
+ if the same project were added by another workspace without a
+ relative path.
+
Tue Feb 15 16:02:17 UTC 2011 Adam Mitz <mitza@ociweb.com>
* MPC version 3.9.0 released.
diff --git a/clone_build_tree.pl b/clone_build_tree.pl
index 88e1f2da..1929dd36 100755
--- a/clone_build_tree.pl
+++ b/clone_build_tree.pl
@@ -37,6 +37,7 @@ my $exclude;
my @foundFiles;
my $verbose = 0;
my $lbuildf = 0;
+my $lnonbuildf = 0;
my $version = '1.16';
eval 'symlink("", "");';
@@ -61,28 +62,30 @@ sub findCallback {
);
if ($matches) {
- $matches &&= (! -l $_ &&
- ! ( -f $_ && /^core\z/s) &&
- ! /^.*\.rej\z/s &&
- ! /^.*\.state\z/s &&
- ! /^.*\.so\z/s &&
- ! /^.*\.[oa]\z/s &&
- ! /^.*\.dll\z/s &&
- ! /^.*\.lib\z/s &&
- ! /^.*\.obj\z/s &&
- ! /^.*~\z/s &&
- ! /^\.\z/s &&
- ! /^\.#.*\z/s &&
- ! /^.*\.ncb\z/s &&
- ! /^.*\.opt\z/s &&
- ! /^.*\.bak\z/s &&
- ! /^.*\.suo\z/s &&
- ! /^.*\.ilk\z/s &&
- ! /^.*\.pdb\z/s &&
- ! /^.*\.pch\z/s &&
- ! /^.*\.log\z/s &&
- ! ( -f $_ && /^.*\.d\z/s )
- );
+ if(!$lnonbuildf) {
+ $matches &&= (! -l $_ &&
+ ! ( -f $_ && /^core\z/s) &&
+ ! /^.*\.rej\z/s &&
+ ! /^.*\.state\z/s &&
+ ! /^.*\.so\z/s &&
+ ! /^.*\.[oa]\z/s &&
+ ! /^.*\.dll\z/s &&
+ ! /^.*\.lib\z/s &&
+ ! /^.*\.obj\z/s &&
+ ! /^.*~\z/s &&
+ ! /^\.\z/s &&
+ ! /^\.#.*\z/s &&
+ ! /^.*\.ncb\z/s &&
+ ! /^.*\.opt\z/s &&
+ ! /^.*\.bak\z/s &&
+ ! /^.*\.suo\z/s &&
+ ! /^.*\.ilk\z/s &&
+ ! /^.*\.pdb\z/s &&
+ ! /^.*\.pch\z/s &&
+ ! /^.*\.log\z/s &&
+ ! ( -f $_ && /^.*\.d\z/s )
+ );
+ }
if ($matches) {
if (!$lbuildf) {
@@ -424,7 +427,7 @@ sub usageAndExit {
"Create a tree identical in layout to the current directory\n",
"with the use of ", ($hasSymlink ? "symbolic links or " : ''),
"hard links.\n\n",
- "Usage: $base [-b <builddir>] [-d <dmode>] [-f] ",
+ "Usage: $base [-b <builddir>] [-d <dmode>] [-f] [-n]",
($hasSymlink ? "[-a] [-l] " : ''),
"[-v]\n",
$spc, "[build names...]\n\n",
@@ -435,6 +438,7 @@ sub usageAndExit {
"<current directory>/build.\n",
"-d Set the directory permissions mode.\n",
"-f Link build files (Makefile, .dsw, .sln, .etc).\n",
+ "-n Link non-build files normally avoided (.o,.so, etc.).\n",
"-s Set the start directory. It defaults to the ",
"<current directory>.\n",
"-v Enable verbose mode.\n";
@@ -492,6 +496,9 @@ for(my $i = 0; $i <= $#ARGV; ++$i) {
elsif ($ARGV[$i] eq '-l') {
$hardlink = 1;
}
+ elsif ($ARGV[$i] eq '-n') {
+ $lnonbuildf = 1;
+ }
elsif ($ARGV[$i] eq '-v') {
$verbose = 1;
}
diff --git a/config/coredx_ts_defaults.mpb b/config/coredx_ts_defaults.mpb
new file mode 100644
index 00000000..7ea08d1b
--- /dev/null
+++ b/config/coredx_ts_defaults.mpb
@@ -0,0 +1,17 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ Define_Custom(CoreDXTypeSupport) {
+ command = <%quote%>$(COREDX_TOP)/host/$(COREDX_HOST)/bin/coredx_ddl<%quote%>
+ commandflags = -l cpp -f
+ dependent = <%quote%>$(COREDX_TOP)/host/$(COREDX_HOST)/bin/coredx_ddl<%quote%>
+ source_pre_extension = , TypeSupport, DataReader, DataWriter
+ source_outputext = .cc
+ header_pre_extension = , TypeSupport, DataReader, DataWriter
+ header_outputext = .hh
+ keyword coredx_ts_flags = commandflags
+ }
+
+ requires += coredx
+}
diff --git a/config/coredxlib.mpb b/config/coredxlib.mpb
new file mode 100644
index 00000000..b0a2ea5c
--- /dev/null
+++ b/config/coredxlib.mpb
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ lit_libs += dds_cpp dds
+ libpaths += $(COREDX_TOP)/target/$(COREDX_TARGET)/lib
+ includes += $(COREDX_TOP)/target/include
+}
diff --git a/config/glib.mpb b/config/glib.mpb
index 794e00cd..4d76e2ea 100644
--- a/config/glib.mpb
+++ b/config/glib.mpb
@@ -9,8 +9,13 @@ project {
2.0
}
+ expand(GLIB_LIB_DIR) {
+ $GLIB_LIB_DIR
+ lib
+ }
+
includes += $(GLIB_ROOT)/include/glib-$(GLIB_VERSION) \
- $(GLIB_ROOT)/lib/glib-$(GLIB_VERSION)/include
+ $(GLIB_ROOT)/$(GLIB_LIB_DIR)/glib-$(GLIB_VERSION)/include
libpaths += $(GLIB_ROOT)/lib
lit_libs += glib-$(GLIB_VERSION)
diff --git a/config/lzo1.mpb b/config/lzo1.mpb
index 7f742e5a..81daec27 100644
--- a/config/lzo1.mpb
+++ b/config/lzo1.mpb
@@ -5,7 +5,7 @@ feature(lzo1) {
// If the include files for lzo1 are not relative to the root (for
// example, /usr/include/lzo), set the LZO1_INCDIR environment variable.
expand(LZO1_INCDIR) {
- LZO1_INCDIR
+ $LZO1_INCDIR
$(LZO1_ROOT)/include
}
includes += $(LZO1_INCDIR)
diff --git a/config/lzo2.mpb b/config/lzo2.mpb
index 1d503cd6..e9dfdccc 100644
--- a/config/lzo2.mpb
+++ b/config/lzo2.mpb
@@ -5,7 +5,7 @@ feature(lzo2) {
// If the include files for lzo2 are not relative to the root (for
// example, /usr/include/lzo), set the LZO2_INCDIR environment variable.
expand(LZO2_INCDIR) {
- LZO2_INCDIR
+ $LZO2_INCDIR
$(LZO2_ROOT)/include
}
includes += $(LZO2_INCDIR)
diff --git a/config/ndds_cck_ts_defaults.mpb b/config/ndds_cck_ts_defaults.mpb
new file mode 100644
index 00000000..a724b861
--- /dev/null
+++ b/config/ndds_cck_ts_defaults.mpb
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project : ndds_ts_defaults {
+ ndds_ts_flags += -corba <%input_noext%>C.h -orb ACE_TAO2.0 -enableEscapeChar -I$(TAO_ROOT) -I$(TAO_ROOT)/tao
+}
diff --git a/config/ndds_example_ts_defaults.mpb b/config/ndds_example_ts_defaults.mpb
new file mode 100644
index 00000000..5d3419c2
--- /dev/null
+++ b/config/ndds_example_ts_defaults.mpb
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project : ndds_ts_defaults {
+ ndds_ts_flags += -example $(NDDSARCHITECTURE)
+} \ No newline at end of file
diff --git a/config/ndds_ts_defaults.mpb b/config/ndds_ts_defaults.mpb
index cdf7b765..f8c80409 100644
--- a/config/ndds_ts_defaults.mpb
+++ b/config/ndds_ts_defaults.mpb
@@ -3,8 +3,8 @@
project {
Define_Custom(NDDSTypeSupport) {
- command = <%quote%>$(NDDSHOME)/scripts/rtiddsgen<%quote%> -corba <%input_noext%>C.h -orb ACE_TAO2.0
- commandflags = -language C++ -replace -namespace -I$(TAO_ROOT) -I$(TAO_ROOT)/tao
+ command = <%quote%>$(NDDSHOME)/scripts/rtiddsgen<%quote%>
+ commandflags = -language C++ -replace -namespace $(PLATFORM_NDDS_FLAGS)
dependent = <%quote%>$(NDDSHOME)/scripts/rtiddsgen<%bat%><%quote%>
@@ -21,5 +21,4 @@ project {
override no_hidden_visibility = 1
override no_strict_aliasing = 1
}
-
}
diff --git a/config/nddsexe_with_idl.mpb b/config/nddsexe_with_idl.mpb
deleted file mode 100644
index 74465130..00000000
--- a/config/nddsexe_with_idl.mpb
+++ /dev/null
@@ -1,5 +0,0 @@
-// -*- MPC -*-
-// $Id$
-
-project : nddsexe, ndds_ts_defaults {
-}
diff --git a/config/nddslib_with_idl.mpb b/config/nddslib_with_idl.mpb
deleted file mode 100644
index 73f96ba2..00000000
--- a/config/nddslib_with_idl.mpb
+++ /dev/null
@@ -1,5 +0,0 @@
-// -*- MPC -*-
-// $Id$
-
-project : nddslib, ndds_ts_defaults {
-}
diff --git a/config/nddsmonitor.mpb b/config/nddsmonitor.mpb
index ce029b00..7e01fbfa 100644
--- a/config/nddsmonitor.mpb
+++ b/config/nddsmonitor.mpb
@@ -1,7 +1,7 @@
// -*- MPC -*-
// $Id$
-feature (nddsmonitor) :nddslib {
+feature (nddsmonitor) : nddslib {
libs += rtimonitoring
}
diff --git a/config/openmp.mpb b/config/openmp.mpb
new file mode 100644
index 00000000..c5c9e7a9
--- /dev/null
+++ b/config/openmp.mpb
@@ -0,0 +1,6 @@
+// $Id$
+feature(openmp) {
+ verbatim(gnuace, top) {
+ openmp ?= 1
+ }
+} \ No newline at end of file
diff --git a/config/pintools_32bit.mpb b/config/pintools_32bit.mpb
new file mode 100644
index 00000000..416c08e7
--- /dev/null
+++ b/config/pintools_32bit.mpb
@@ -0,0 +1,47 @@
+// $Id$
+
+project {
+ specific (prop:windows) {
+ macros += BIGARRAY_MULTIPLIER=1 TARGET_IA32 HOST_IA32 TARGET_WINDOWS USING_XED _SECURE_SCL=0
+
+ // Hack to ensure libraries are linked in the correct order
+ // since MPC does not honor the order in the list below!! ;-)
+ pure_libs += "ntdll-32.lib libxed.lib pin.lib pinvm.lib libcmt.lib libcpmt.lib"
+
+ runtime_library = 0
+ DisableSpecificWarning += 4530
+ IgnoreAllDefaultLibraries = true
+ link_options += /EXPORT:main /ENTRY:Ptrace_DllMainCRTStartup@12
+ } else {
+ macros += BIGARRAY_MULTIPLIER=1 TARGET_IA32 HOST_IA32 TARGET_LINUX USING_XED _SECURE_SCL=0
+ compile_flags += -fomit-frame-pointer -fno-strict-aliasing
+
+ libs += pin xed dwarf elf
+ linkflags += -Wl,--hash-style=sysv -Wl,-Bsymbolic -Wl,--version-script=$(PIN_ROOT)/source/include/pintool.ver
+ }
+
+ includes += $(PIN_ROOT)/extras/components/include \
+ $(PIN_ROOT)/extras/xed2-ia32/include \
+ $(PIN_ROOT)/source/include/gen \
+ $(PIN_ROOT)/source/include
+
+
+ libpaths += $(PIN_ROOT)/ia32/lib \
+ $(PIN_ROOT)/ia32/lib-ext \
+ $(PIN_ROOT)/extras/xed2-ia32/lib
+
+ verbatim (gnuace, top) {
+ // We have to disable hidden symbols since we are
+ // not manually exporting the main() function.
+ no_hidden_visibility = 1
+ }
+
+ verbatim (make, top) {
+ // We have to disable hidden symbols since we are
+ // not manually exporting the main() function.
+ no_hidden_visibility = 1
+ }
+}
+
+
+
diff --git a/config/portico.mpb b/config/portico.mpb
new file mode 100644
index 00000000..99e6de8f
--- /dev/null
+++ b/config/portico.mpb
@@ -0,0 +1,18 @@
+// $Id$
+
+project {
+ requires += portico
+
+ includes += $(RTI_HOME)/include/ng6
+ libpaths += $(RTI_HOME)/lib
+
+ macros += RTI_USES_STD_FSTREAM
+
+ specific (prop:windows) {
+ lit_libs += libRTI-NG libFedTime
+
+ DisableSpecificWarnings += 4996
+ } else {
+ libs += RTI-NG
+ }
+}
diff --git a/config/tena_base.mpb b/config/tena_base.mpb
new file mode 100644
index 00000000..6d91deb7
--- /dev/null
+++ b/config/tena_base.mpb
@@ -0,0 +1,8 @@
+// $Id$
+
+project {
+ requires += tena
+
+ includes += $(TENA_HOME)/$(TENA_VERSION)/include
+ libpaths += $(TENA_HOME)/lib
+}
diff --git a/config/tena_middleware.mpb b/config/tena_middleware.mpb
new file mode 100644
index 00000000..1c2029b7
--- /dev/null
+++ b/config/tena_middleware.mpb
@@ -0,0 +1,11 @@
+// $Id$
+
+project : tena_base {
+ macros += TENA_PLATFORM=$(TENA_PLATFORM)
+
+ specific (prop:windows) {
+ lit_libs += libTENA_Middleware-$(TENA_PLATFORM)-v$(TENA_VERSION)
+ } else {
+ libs += TENA_Middleware-$(TENA_PLATFORM)-v$(TENA_VERSION)
+ }
+}
diff --git a/config/udm.mpb b/config/udm.mpb
index 3389dbd3..703437e5 100644
--- a/config/udm.mpb
+++ b/config/udm.mpb
@@ -2,13 +2,20 @@
// $Id$
project : xerces {
- libs += UdmDll zlib
- includes += $(GME_ROOT)/SDK/BON/Common $(GME_ROOT)/SDK/BON $(UDM_PATH)/include .
- libpaths += $(UDM_PATH)/lib $(UDM_3RDPARTY_PATH)/zlib
+ includes += . \
+ $(GME_ROOT)/SDK/BON/Common \
+ $(UDM_PATH)/include \
+ $(GME_ROOT)/SDK/BON
+
+ libpaths += $(UDM_PATH)/lib \
+ $(UDM_3RDPARTY_PATH)/zlib
specific {
- midl_flags += /server none /client none
- midl_includes += $(GME_ROOT) $(GME_ROOT)/Interfaces .
+ midl_flags += /server none /client none
+ midl_includes += $(GME_ROOT) $(GME_ROOT)/Interfaces .
+
+ Release::lit_libs += UdmDll
+ Debug::lit_libs += UdmDllD
}
specific(prop:microsoft) {
diff --git a/docs/MPC.sgml b/docs/MPC.sgml
index c6a8765b..8f814514 100644
--- a/docs/MPC.sgml
+++ b/docs/MPC.sgml
@@ -362,6 +362,32 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><parameter>-workers</parameter></term>
+ <listitem>
+ <para>
+ Specifies number of child processes to use to generate projects.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>-workers_dir</parameter></term>
+ <listitem>
+ <para>
+ The directory for storing temporary output files from the child processes.
+ The default is '/tmp/mpc' If neither -workers_dir nor -workers_port is used,
+ -workers_dir is assumed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>-workers_port</parameter></term>
+ <listitem>
+ <para>
+ The port number for the parent listener.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><parameter>-version</parameter></term>
<listitem>
<para>
diff --git a/docs/README b/docs/README
index 5178103e..9ee671d6 100644
--- a/docs/README
+++ b/docs/README
@@ -1,3 +1,5 @@
+$Id$
+
.:: 3/13/2002 ::.
The Makefile, Project and Workspace Creator.
@@ -181,7 +183,7 @@ Example.mpc, then the modified project name would be Example_Client.
If the value set for exename contains an asterisk then the asterisk portion
of the name will be replaced with the current project name. The same logic
-applies to sharedname and staticname.
+applies to sharedname, staticname, after and libs.
If multiple projects are going to be contained within a single workspace
(using mwc.pl), there can be no duplication of project names. This is
@@ -316,7 +318,7 @@ specific This scope allows assignments that are specific to a
lit_libs += c
...
} else {
- list_libs += c_other
+ lit_libs += c_other
...
}
@@ -351,6 +353,7 @@ specific This scope allows assignments that are specific to a
vc8 | | | X | X |
vc9 | | | X | X |
vc10 | | | X | X |
+ vc11 | | | X | X |
wix | | | | X |
? - indicates that this is controled by the MPC_GHS_UNIX
diff --git a/docs/USAGE b/docs/USAGE
index b7935918..84b43bc3 100644
--- a/docs/USAGE
+++ b/docs/USAGE
@@ -20,6 +20,7 @@ Usage: mwc.pl [-global <file>] [-include <directory>] [-recurse]
[-exclude <directories>] [-name_modifier <pattern>]
[-apply_project] [-version] [-into <directory>]
[-gfeature_file <file name>] [-nocomments] [-for_eclipse]
+ [-workers <#>] [-workers_dir <dir> | -workers_port <#>]
[-relative_file <file name>]
[-language <cplusplus | csharp | java | vb>]
[-type <automake | bcb2007 | bcb2009 | bds4 | bmake | cc | cdt6 |
@@ -84,6 +85,15 @@ Usage: mwc.pl [-global <file>] [-include <directory>] [-recurse]
-static Specifies that only static projects will be generated.
By default, only dynamic projects are generated.
-template Specifies the template name (with no extension).
+ -workers Specifies number of child processes to use to generate
+ projects.
+ -workers_dir The directory for storing temporary output files
+ from the child processes. The default is '/tmp/mpc'
+ If neither -workers_dir nor -workers_port is used,
+ -workers_dir is assumed.
+ -workers_port The port number for the parent listener. If neither
+ -workers_dir nor -workers_port is used, -workers_dir
+ is assumed.
-ti Specifies the template input file (with no extension)
for the specific type (ex. -ti dll_exe:vc8exe).
-type Specifies the type of project file to generate. This
@@ -185,9 +195,8 @@ those directories will be excluded when searching for project or workspace
files.
The -type option can be used multiple times on the same command line to
-generate projects of different types per mpc file. The default type for
-this version of MPC is 'make'. NOTE: The -ti option overrides the template
-input file for all types specified.
+generate projects of different types per mpc file. NOTE: The -ti option
+overrides the template input file for all types specified.
The -feature_file specifies a file to be read that enables or disables
features. These feature names can be anything, but they should correspond
diff --git a/docs/html/MakeProjectCreator.css b/docs/html/MakeProjectCreator.css
index c9a9a84f..df10d52a 100644
--- a/docs/html/MakeProjectCreator.css
+++ b/docs/html/MakeProjectCreator.css
@@ -95,6 +95,40 @@ LI.BodyNoLead {
text-transform: none;
font-family: "Times New Roman";
}
+P.Body {
+ display: block;
+ text-align: left;
+ text-indent: 0.000000pt;
+ margin-top: 5.000000pt;
+ margin-bottom: 0.000000pt;
+ margin-right: 0.000000pt;
+ margin-left: 10.000000pt;
+ font-size: 11.000000pt;
+ font-weight: medium;
+ font-style: Regular;
+ color: #000000;
+ text-decoration: none;
+ vertical-align: baseline;
+ text-transform: none;
+ font-family: "Times New Roman";
+}
+P.BodyNoLead {
+ display: block;
+ text-align: left;
+ text-indent: 0.000000pt;
+ margin-top: 2.000000pt;
+ margin-bottom: 0.000000pt;
+ margin-right: 0.000000pt;
+ margin-left: 10.000000pt;
+ font-size: 11.000000pt;
+ font-weight: medium;
+ font-style: Regular;
+ color: #000000;
+ text-decoration: none;
+ vertical-align: baseline;
+ text-transform: none;
+ font-family: "Times New Roman";
+}
LI.Bullet1 {
display: block;
text-align: left;
diff --git a/docs/html/MakeProjectCreator.html b/docs/html/MakeProjectCreator.html
index fd586e56..47921b4b 100644
--- a/docs/html/MakeProjectCreator.html
+++ b/docs/html/MakeProjectCreator.html
@@ -1,4089 +1,6991 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
-<head>
- <meta name="generator" content=
+ <head>
+ <meta name="generator" content=
"HTML Tidy for Linux (vers 1 September 2005), see www.w3.org">
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
- <meta http-equiv="Content-Style-Type" content="text/css">
- <meta name="id" content=
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <meta http-equiv="Content-Style-Type" content="text/css">
+ <meta name="id" content=
"$Id$">
- <link rel="STYLESHEET" href="MakeProjectCreator.css" charset="ISO-8859-1"
- type="text/css">
+ <link rel="STYLESHEET" href="MakeProjectCreator.css" charset="ISO-8859-1"
+ type="text/css">
- <title>MPC</title>
-</head>
-
-<body bgcolor="#FFFFFF">
- <div>
- <h2 class="ChapterNum">&nbsp;</h2>
- </div>
-
- <div>
- <h1 class="Head1">The Makefile, Project, and Workspace Creator (MPC)</h1>
+ <title>MPC</title>
+ </head>
+ <body bgcolor="#FFFFFF">
<div>
- <h3 class="Head2">Introduction</h3>
- <hr>
-
- <ul>
- <li class="Body">Maintaining multiple build tool files for a
- multi-platform project can be quite a challenge, especially when the
- project structure and platforms are constantly changing and evolving.
- A project may support Makefiles, Visual C++ project files, Borland
- Makefiles, and many others. Adding files, deleting files, changing
- project options or even changing the name of the target within your
- project will require you to expend time updating each build tool
- file. What you need instead is a single location to store project
- specific information to avoid repetitious, tedious modifications to
- multiple build tool files. This is where Makefile Project Creator
- (MPC) comes into the picture.</li>
-
- <li class="Body">MPC can be used to generate build tool specific
- project files from a generic mpc file. The MPC project file is a
- collection of source files that make up a single build target. MPC
- uses platform specific input along with mpc files and generates build
- tool specific files like makefiles, Visual C++ workspace and project
- files, Visual Studio solution and project files, etc.</li>
-
- <li class="Body">MPC provides many advantages over the build tool
- files it replaces. It provides mechanisms for minimizing maintenance
- of project build files. It does this through support for project
- inheritance and defaults for all aspects of a project, and the syntax
- is simple and easy to use and maintain. These and other features will
- be discussed in detail in the following sections. A complete example
- of the use of MPC is shown in the <a href=
- "MakeProjectCreator.html#ExampleMPCFile" class="XRef">Example MPC
- File</a> section.</li>
- </ul>
+ <h2 class="ChapterNum">&nbsp;</h2>
</div>
<div>
- <h3 class="Head2">Using MPC</h3>
- <hr>
-
- <ul>
- <li class="Body">An MPC project is a set of parameters that describe
- an individual build target (such as a library or executable). These
- parameters include the target name, include paths, source files,
- header files, etc. One or more projects can be defined within a
- single mpc file. An MPC workspace is just an arbitrary collection of
- projects.</li>
-
- <li class="Body">Projects can be generated (without workspaces) by
- using the mpc.pl script. Multiple mpc files can be passed to this
- script. If no mpc files are passed to the script, it will search for
- project-related files (such as source files, header files, etc.) and
- incorporate them into a default project.</li>
-
- <li class="Body"><a name="Figure 1-2"></a>This diagram shows a
- high-level view of project file generation using mpc.pl.</li>
-
- <li style="list-style: none">
- <h6 class="FigTitle">Generating projects with mpc.pl</h6>
-
- <table border="1" summary="Generating projects with mpc.pl">
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
+ <h1 class="Head1">The Makefile, Project, and Workspace Creator (MPC)</h1>
- <div>
- <img src="images/mpc.gif" alt=
- "Generating projects with mpc.pl">
- </div>
- </td>
- </tr>
- </table>
- </li>
+ <div>
+ <h3 class="Head2">Introduction</h3>
+ <hr>
+
+ <p class="Body">
+ Maintaining multiple build tool files for a
+ multi-platform project can be quite a challenge, especially when the
+ project structure and platforms are constantly changing and evolving.
+ A project may support Makefiles, Visual C++ project files, Borland
+ Makefiles, and many others. Adding files, deleting files, changing
+ project options or even changing the name of the target within your
+ project will require you to expend time updating each build tool
+ file. What you need instead is a single location to store project
+ specific information to avoid repetitious, tedious modifications to
+ multiple build tool files. This is where Makefile Project Creator
+ (MPC) comes into the picture.
+ </p>
+
+ <p class="Body">
+ MPC can be used to generate build tool specific
+ project files from a generic mpc file. The MPC project file is a
+ collection of source files that make up a single build target. MPC
+ uses platform specific input along with mpc files and generates build
+ tool specific files like makefiles, Visual C++ workspace and project
+ files, Visual Studio solution and project files, etc.
+ </p>
+
+ <p class="Body">
+ MPC provides many advantages over the build tool
+ files it replaces. It provides mechanisms for minimizing maintenance
+ of project build files. It does this through support for project
+ inheritance and defaults for all aspects of a project, and the syntax
+ is simple and easy to use and maintain. These and other features will
+ be discussed in detail in the following sections. The structure and
+ syntax of the MPC files are descrbed in the
+ <a href="#Writing_MPC_Files">Writing MPC and MWC Files</a> section.
+ In addition, a complete example of the use of MPC is shown in the <a href=
+ "MakeProjectCreator.html#ExampleMPCFile" class="XRef">
+ Example MPC
+ File
+ </a> section.
+ </p>
+ </div>
- <li class="Body">To generate workspaces, you must run <em class=
- "Code">mwc.pl</em>. This script will generate projects from mpc files
- and create a workspace based on those mpc files. If no mwc files are
- passed to the script, it will search in the current directory and its
- subdirectories for all mpc files and incorporate them into a single
- workspace.</li>
+ <div>
+ <h3 class="Head2">Using MPC</h3>
+ <hr>
+
+ <p class="Body">
+ An MPC project is a set of parameters that describe
+ an individual build target (such as a library or executable). These
+ parameters include the target name, include paths, source files,
+ header files, etc. One or more projects can be defined within a
+ single mpc file. An MPC workspace is just an arbitrary collection of
+ projects.
+ </p>
+
+ <p class="Body">
+ Projects can be generated (without workspaces) by
+ using the mpc.pl script. Multiple mpc files can be passed to this
+ script. If no mpc files are passed to the script, it will search for
+ project-related files (such as source files, header files, etc.) and
+ incorporate them into a default project.
+ </p>
+
+ <p class="Body">
+ <a name="Figure_1-2"></a>This diagram shows a
+ high-level view of project file generation using mpc.pl.
+ </p>
+
+ <p class="Body">
+ <h6 class="FigTitle">Generating projects with mpc.pl</h6>
+
+ <table border="1" summary="Generating projects with mpc.pl">
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
- <li class="Body">For make based project types (make, gnuace, bmake,
- nmake), a workspace is just a top-level makefile. But, for graphical
- interfaces such as Visual Studio, a workspace is the top-level file
- that groups all of the project files together.</li>
+ <div>
+ <img src="images/mpc.gif" alt=
+ "Generating projects with mpc.pl">
+ </div>
+ </td>
+ </tr>
+ </table>
+ </p>
- <li class="Body">The following diagram shows a high-level view of
- workspace file generation using mwc.pl.</li>
+ <p class="Body">
+ To generate workspaces, you must run <em class=
+ "Code">mwc.pl</em>. This script will generate projects from mpc files
+ and create a workspace based on those mpc files. If no mwc files are
+ passed to the script, it will search in the current directory and its
+ subdirectories for all mpc files and incorporate them into a single
+ workspace.
+ </p>
+
+ <p class="Body">
+ For make based project types (make, gnuace, bmake,
+ nmake), a workspace is just a top-level makefile. But, for graphical
+ interfaces such as Visual Studio, a workspace is the top-level file
+ that groups all of the project files together.
+ </p>
+
+ <p class="Body">
+ The following diagram shows a high-level view of
+ workspace file generation using mwc.pl.
+ </p>
- <li style="list-style: none">
<h6 class="FigTitle">Generating workspaces with mwc.pl</h6>
- <table border="1" summary="Generating workspaces with mwc.pl">
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
+ <p class="Body">
+ <table border="1" summary="Generating workspaces with mwc.pl">
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
- <div>
- <img src="images/mwc.gif" alt=
+ <div>
+ <img src="images/mwc.gif" alt=
"Generating workspaces with mwc.pl">
- </div>
- </td>
- </tr>
- </table>
- </li>
- </ul>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </p>
- <div>
- <h4 class="Head3">Supported Build Tools</h4>
- <ul>
- <li class="Body">MPC generates workspaces and projects for use with
- many build tools. This table lists the MPC types (used with
- mpc&rsquo;s <em class="Code">-type</em> option) and their
- associated build tools.</li>
- <li style="list-style: none">
+ <div>
+ <h4 class="Head3">Supported Build Tools</h4>
+
+
+ <p class="BodyNoLead">
+ MPC generates workspaces and projects for use with
+ many build tools. This table lists the MPC types (used with
+ mpc&rsquo;s <em class="Code">-type</em> option) and their
+ associated build tools.
+ </p>
+
+
<h6 class="NumberedTableTitle">MPC Types</h6>
- <table border="1" summary="MPC Types">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Type</p>
- </th>
+ <p class="Body">
+ <table border="1" summary="MPC Types">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Type</p>
+ </th>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Build Tool</p>
- </th>
- </tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Build Tool</p>
+ </th>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">automake</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">automake</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">GNU Automake.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">GNU Automake.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">bcb2007</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">bcb2007</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Borland C++ Builder 2007.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Borland C++ Builder 2007.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">bcb2009</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">bcb2009</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">CodeGear C++ Builder 2009.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">CodeGear C++ Builder 2009.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">bds4</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">bds4</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Support for Borland Developer Studio 4
- is incomplete.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Support for Borland Developer Studio 4
+ is incomplete.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">bmake</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">bmake</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Borland Make.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Borland Make.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">cc</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">cc</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Code Composer Studio 2.0</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Code Composer Studio 2.0</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">
- <a href="CDT6.html">cdt6</a></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">
+ <a href="CDT6.html">cdt6</a>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Eclipse CDT 6 (for Eclipse "Galileo" 3.5)
- </p></td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Eclipse CDT 6 (for Eclipse "Galileo" 3.5)
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">
- <a href="CDT6.html"><!--CDT6.html describes cdt7 as well
- -->cdt7</a></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">
+ <a href="CDT6.html">
+ <!--CDT6.html describes cdt7 as well
+ -->cdt7
+ </a>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Eclipse CDT 7 (for Eclipse "Helios" 3.6)
- </p></td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Eclipse CDT 7 (for Eclipse "Helios" 3.6)
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">em3</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">em3</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">eMbedded Visual C++ 3.00 and 4.00.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">eMbedded Visual C++ 3.00 and 4.00.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">ghs</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">ghs</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Green Hills C++ Builder.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Green Hills C++ Builder.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">gnuace</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">gnuace</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">GNU Make for ACE/TAO/CIAO only
- (ACE/TAO/CIAO extension).</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ GNU Make for ACE/TAO/CIAO only
+ (ACE/TAO/CIAO extension).
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">html</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">html</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">html pages are generated for
- visualization of project information.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ html pages are generated for
+ visualization of project information.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">make</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">make</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Generic make. The makefiles generated
- by this project type can be used with any version of make.
- However, due to configuration issues, it should not be used
- with ACE or TAO.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Generic make. The makefiles generated
+ by this project type can be used with any version of make.
+ However, due to configuration issues, it should not be used
+ with ACE or TAO.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">nmake</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">nmake</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Microsoft NMake.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Microsoft NMake.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">
- <a href="RpmSpec.html">rpmspec</a></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">
+ <a href="RpmSpec.html">rpmspec</a>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">RPM packaging .spec files.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">RPM packaging .spec files.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">sle</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">sle</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Support for Visual SlickEdit is
- incomplete.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Support for Visual SlickEdit is
+ incomplete.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc6</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc6</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual C++ 6.0.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual C++ 6.0.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc7</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc7</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual Studio .NET 2002.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio .NET 2002.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc71</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc71</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual Studio .NET 2003.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio .NET 2003.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc8</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc8</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual Studio 2005.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2005.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc9</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc9</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual Studio 2008.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2008.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode">vc10</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">vc10</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Visual Studio 2010.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2010.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode"><a href="WB26.html">
- wb26</a></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">
+ <a href="WB26.html">
+ wb26
+ </a>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Wind River Workbench 2.6.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Wind River Workbench 2.6.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="TblCode"><em class="TableCode"><a href="WB30.html">
- wb30</a></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class="TableCode">
+ <a href="WB30.html">
+ wb30
+ </a>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Wind River Workbench 3.0.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Wind River Workbench 3.0.</p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">wix</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">wix</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Wix toolset for .msi creation.</p>
- </td>
- </tr>
- </table>
- </li>
- </ul>
- </div>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Wix toolset for .msi creation.</p>
+ </td>
+ </tr>
+ </table>
+ </p>
- <div>
- <h4 class="Head3">Command Line</h4>
-
- <ul>
- <li class="BodyNoLead">The command line options for the workspace
- creator (<em class="Code">mwc.pl</em>) and the project creator
- (<em class="Code">mpc.pl</em>) are exactly the same. The project
- creator is used to generate one or more separate projects by
- passing mpc files to it on the command line. The workspace creator
- is used to generate one or more workspaces and the projects related
- to those workspaces.</li>
-
- <li class="Body">The table below describes each option with the
- more commonly used options in bold and project specific options in
- italics.</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle"><a name=
- "Command Line Options"></a>Command Line Options</h6>
-
- <table border="1" summary="Command Line Options">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Option</p>
- </th>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
+ </div>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-base</em></p>
- </td>
+ <div>
+ <h4 class="Head3">Command Line</h4>
+
+ <p class="BodyNoLead">
+ The command line options for the workspace
+ creator (<em class="Code">mwc.pl</em>) and the project creator
+ (<em class="Code">mpc.pl</em>) are exactly the same. The project
+ creator is used to generate one or more separate projects by
+ passing mpc files to it on the command line. The workspace creator
+ is used to generate one or more workspaces and the projects related
+ to those workspaces.
+ </p>
+
+ <p class="Body">
+ The table below describes each option with the
+ more commonly used options in bold and project specific options in
+ italics.
+ </p>
+
+ <p class="Body">
+ <h6 class="NumberedTableTitle">
+ <a name=
+ "Command%20Line%20Options"></a>Command Line Options
+ </h6>
+ </p>
+ <p class="Body">
+ <table border="1" summary="Command Line Options">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Option</p>
+ </th>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option allows the user to force
- every project to inherit from a specified base project. This
- option can be used multiple times to force multiple
- inheritance upon a project.</p>
- </td>
- </tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-complete</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-base</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This hidden option can be used to
- generate a tcsh <em class="TableCode">complete</em> command
- that allows a user of the tcsh shell to complete on options
- as well as file names.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option allows the user to force
+ every project to inherit from a specified <a href="#Base_Project">base project</a>. This
+ option can be used multiple times to force multiple
+ inheritance upon a project.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-exclude</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-complete</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this option is used with <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This hidden option can be used to
+ generate a tcsh <em class="TableCode">complete</em> command
+ that allows a user of the tcsh shell to complete on options
+ as well as file names.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-exclude</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this option is used with <em class=
"Code">mwc.pl</em> , the directories or mwc files provided
- in a comma separated list will be excluded when searching
- for mpc files. Each element provided for exclusion should
- be relative to the starting directory. This option has no
- effect when used with <em class="Code">mpc.pl</em>.</p>
- </td>
- </tr>
+ in a comma separated list will be excluded when searching
+ for mpc files. Each element provided for exclusion should
+ be relative to the starting directory. This option has no
+ effect when used with <em class="Code">mpc.pl</em>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-expand_vars</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-expand_vars</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option instructs MPC to perform
- direct replacement of $() variables with the values from
- the environment (if the <em class="Code">-use_env</em>
- option is used) or the values specified by the <em class=
- "Code">-relative</em> option.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option instructs MPC to perform
+ direct replacement of $() variables with the values from
+ the environment (if the <em class="Code">-use_env</em>
+ option is used) or the values specified by the <em class=
+ "Code">-relative</em> option.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-feature_file</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-feature_file</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option allows the user to override
- the default feature file (<em class="Code">MPC/config/</em>
- <em class="Code">default.features</em> or <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option allows the user to override
+ the default feature file (<em class="Code">MPC/config/</em>
+ <em class="Code">default.features</em> or <em class=
"Code">ACE_wrappers/bin/MakeProjectCreator/config/default.features</em>
- ) which may or may not exist. This file can be used to
- override feature values specified in the <em class=
+ ) which may or may not exist. This file can be used to
+ override feature values specified in the <em class=
"Code">global.features</em> file located in the <em class=
"Code">config</em> directory. Feature files are described
- in the <a href="MakeProjectCreator.html#TheFeatureFile"
- class="XRef">Feature File</a> section.</p>
- </td>
- </tr>
+ in the <a href="MakeProjectCreator.html#TheFeatureFile"
+ class="XRef">Feature File</a> section.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-features</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-features</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies the feature list to set
- before processing. This is a comma separated list and
- should contain no spaces. The -features option can be
- used multiple times on the same command line, the
- effect is the same as if the parameters had been
- specified with a single -features options, with the
- parameters joined by commas.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies the feature list to set
+ before processing. This is a comma separated list and
+ should contain no spaces. The -features option can be
+ used multiple times on the same command line, the
+ effect is the same as if the parameters had been
+ specified with a single -features options, with the
+ parameters joined by commas.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-for_eclipse</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-for_eclipse</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Allows generated makefiles to be used
- with Eclipse.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Allows generated makefiles to be used
+ with Eclipse.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-gendot</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-gendot</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">A .dot file, for use with Graphviz,
- will be created for each workspace processed.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A .dot file, for use with Graphviz,
+ will be created for each workspace processed.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-genins</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-genins</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option instructs MPC to generate
- an &ldquo;install&rdquo; file after processing each
- project. These &ldquo;install&rdquo; files can be used with
- the prj_install.pl script which will copy portions of the
- project related files into a user specified location.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option instructs MPC to generate
+ an &ldquo;install&rdquo; file after processing each
+ project. These &ldquo;install&rdquo; files can be used with
+ the prj_install.pl script which will copy portions of the
+ project related files into a user specified location.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-gfeature_file</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-gfeature_file</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies the global feature file. The
- default global feature file is <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies the global feature file. The
+ default global feature file is <em class=
"Code">global.features</em> found in the <em class=
- "Code">config</em> directory.</p>
- </td>
- </tr>
+ "Code">config</em> directory.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-global</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-global</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option specifies the global input
- file. Values stored within this base project are applied to
- all generated projects. The default value is <em class=
- "Code">ACE_wrappers/bin/MakeProjectCreator/global.mpb or
- MPC/config/global.mpb</em>.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option specifies the global input
+ file. Values stored within this <a href="#Base_Project">base project</a> are applied to
+ all generated projects. The default value is <em class=
+ "Code">
+ ACE_wrappers/bin/MakeProjectCreator/global.mpb or
+ MPC/config/global.mpb
+ </em>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-hierarchy</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-hierarchy</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this option is used with <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this option is used with <em class=
"Code">mwc.pl</em> , it will generate a workspace at each
- directory between the directory in which it is run and the
- location of a processed mpc file. This option has no effect
- when used with <em class="Code">mpc.pl</em> and is the
- default for &ldquo;make&rdquo; based workspace types.</p>
- </td>
- </tr>
+ directory between the directory in which it is run and the
+ location of a processed mpc file. This option has no effect
+ when used with <em class="Code">mpc.pl</em> and is the
+ default for &ldquo;make&rdquo; based workspace types.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">-include</em></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">-include</em>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Include search directories are added
- with this option. These search directories are used when
- locating base projects, template input files and templates.
- It can be used multiple times on the same command line.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Include search directories are added
+ with this option. These search directories are used when
+ locating base projects, template input files and templates.
+ It can be used multiple times on the same command line.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-into</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-into</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option specifies that all
- generated project files will be placed in a mirrored
- directory structure. If any project within the
- workspace is referenced via a full path, use of this
- option is likely to cause problems.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option specifies that all
+ generated project files will be placed in a mirrored
+ directory structure. If any project within the
+ workspace is referenced via a full path, use of this
+ option is likely to cause problems.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-language</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-language</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option is used to specify which
- language to assume when generating projects. The default
- language is <em class="Code">cplusplus</em>, but <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option is used to specify which
+ language to assume when generating projects. The default
+ language is <em class="Code">cplusplus</em>, but <em class=
"Code">csharp</em>, <em class="Code">java</em> and
- <em class="Code">vb</em> are also supported.</p>
- </td>
- </tr>
+ <em class="Code">vb</em> are also supported.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-make_coexistence</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-make_coexistence</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Make based project types that normally
- name the workspace <em class="Code">Makefile</em>
- (<em class="Code">bmake</em> or <em class="Code">nmake</em>
- ) will name the generated output files such that they can
- coexist within the same directory. In essence, the
- <em class="Code">bmake</em> and <em class="Code">nmake</em>
- workspace names will not be <em class="Code">Makefile</em>,
- but the name of the workspace followed by the project type
- (<em class="Code">.bmake</em> or <em class=
- "Code">.nmake</em> ).</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Make based project types that normally
+ name the workspace <em class="Code">Makefile</em>
+ (<em class="Code">bmake</em> or <em class="Code">nmake</em>
+ ) will name the generated output files such that they can
+ coexist within the same directory. In essence, the
+ <em class="Code">bmake</em> and <em class="Code">nmake</em>
+ workspace names will not be <em class="Code">Makefile</em>,
+ but the name of the workspace followed by the project type
+ (<em class="Code">.bmake</em> or <em class=
+ "Code">.nmake</em> ).
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-name_modifier</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-name_modifier</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option allows the user to modify
- the output names of projects and workspaces. These are
- usually determined by either the mpc or mwc file, but can
- be modified using a pattern replacement. The parameter
- passed to this option will be used as the pattern and any
- asterisks (*) found in the pattern will be replaced with
- the project or workspace name depending on which type of
- file is being created.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option allows the user to modify
+ the output names of projects and workspaces. These are
+ usually determined by either the mpc or mwc file, but can
+ be modified using a pattern replacement. The parameter
+ passed to this option will be used as the pattern and any
+ asterisks (*) found in the pattern will be replaced with
+ the project or workspace name depending on which type of
+ file is being created.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-apply_project</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-apply_project</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option is only useful with the
- <em class="Code">-name_modifier</em> option. When used in
- conjunction with <em class="Code">-name_modifier</em>, the
- pattern will be applied to the project name in addition to
- the project or workspace name.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option is only useful with the
+ <em class="Code">-name_modifier</em> option. When used in
+ conjunction with <em class="Code">-name_modifier</em>, the
+ pattern will be applied to the project name in addition to
+ the project or workspace name.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-nocomments</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-nocomments</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Comments will not be placed in the
- generated workspace files.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Comments will not be placed in the
+ generated workspace files.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-noreldefs</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-noreldefs</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option specifies that the default
- relative definitions should not be generated. See the
- <em class="TableCode">-relative</em> option below.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option specifies that the default
+ relative definitions should not be generated. See the
+ <em class="TableCode">-relative</em> option below.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-notoplevel</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-notoplevel</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option tells <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option tells <em class=
"TableCode">mwc.pl</em> to generate all workspace related
- project files, but do not generate the associated
- workspace. This option tells <em class=
+ project files, but do not generate the associated
+ workspace. This option tells <em class=
"TableCode">mpc.pl</em> to process all mpc files passed in,
- but it will not generate any project files.</p>
- </td>
- </tr>
+ but it will not generate any project files.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-recurse</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-recurse</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Search from the current directory for
- any input files and process them from the directory in
- which they are located.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Search from the current directory for
+ any input files and process them from the directory in
+ which they are located.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">-relative</em></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">-relative</em>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Relative paths are used to replace
- variables enclosed with <em class="TableCode">$()</em>. By
- default, any environment variable that ends in <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Relative paths are used to replace
+ variables enclosed with <em class="TableCode">$()</em>. By
+ default, any environment variable that ends in <em class=
"TableCode">_ROOT</em> will be automatically used as a
- relative path replacement. For more information see
- <a href="MakeProjectCreator.html#Additional%20-relative%20information"
- class="XRef">the -relative Option.</a>.</p>
- </td>
- </tr>
+ relative path replacement. For more information see
+ <a href="MakeProjectCreator.html#Additional-relative_information"
+ class="XRef">the -relative Option</a>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-relative_file</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-relative_file</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option allows you to override the
- default relative definitions file, which is default.rel
- under the MPC config directory..</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option allows you to override the
+ default relative definitions file, which is default.rel
+ under the MPC config directory.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-static</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-static</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies that static project files
- will be generated from the MPC projects. The default is to
- generate dynamic project files.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies that static project files
+ will be generated from the MPC projects. The default is to
+ generate dynamic project files.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-template</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-template</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option allows a user to specify an
- alternate template. Each project type has its own template
- and this option allows a user to override the default
- template.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option allows a user to specify an
+ alternate template. Each project type has its own template
+ and this option allows a user to override the default
+ template.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-ti</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-ti</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Each project type has a set of template
- input files. With this option the default template input
- file can be overridden for a particular project type. For
- more information see <a href=
- "MakeProjectCreator.html#Additional%20-ti%20information"
- class="XRef">the -ti Option.</a>.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Each project type has a set of template
+ input files. With this option the default template input
+ file can be overridden for a particular project type. For
+ more information see <a href=
+ "MakeProjectCreator.html#Additional-ti_information"
+ class="XRef">the -ti Option</a>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">-type</em></em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">-type</em>
+ </em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option specifies the type of
- project or workspace to be generated. It can be specified
- multiple times to generate different project types for a
- single set of input files.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option specifies the type of
+ project or workspace to be generated. It can be specified
+ multiple times to generate different project types for a
+ single set of input files.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-use_env</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-use_env</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option instructs MPC to replace
- all <em class="TableCode">$()</em> instances with the
- corresponding environment variable value instead of using
- values provided by the -relative option.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option instructs MPC to replace
+ all <em class="TableCode">$()</em> instances with the
+ corresponding environment variable value instead of using
+ values provided by the -relative option.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-value_project</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-value_project</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Use this option to override an mpc
- project assignment from the command line. This can be used
- to introduce new name value pairs to a project. However, it
- must be a valid project assignment. For more information
- see <a href=
- "MakeProjectCreator.html#Additional%20-value_project%20information"
- class="XRef">the -value_project Option.</a>.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Use this option to override an mpc
+ project assignment from the command line. This can be used
+ to introduce new name value pairs to a project. However, it
+ must be a valid project assignment. For more information
+ see <a href=
+ "MakeProjectCreator.html#Additional-value_project_information"
+ class="XRef">the -value_project Option</a>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">-value_template</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">-value_template</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This option can be used to override
- existing template input variable values from the command
- line. It can not be used to introduce new template input
- name value pairs. For more information see <a href=
- "MakeProjectCreator.html#Additional%20-value_template%20information"
- class="XRef">the -value_template Option.</a>.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This option can be used to override
+ existing template input variable values from the command
+ line. It can not be used to introduce new template input
+ name value pairs. For more information see <a href=
+ "MakeProjectCreator.html#Additional-value_template_information"
+ class="XRef">the -value_template Option</a>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">-version</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-workers</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The MPC version is printed and no files
- are processed.</p>
- </td>
- </tr>
- </table>
- </li>
- </ul>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies number of child processes to
+ use to generate projects. For more information see <a href=
+ "MakeProjectCreator.html#Additional-workers_information"
+ class="XRef">the -workers Option</a>.
+ </p>
+ </td>
+ </tr>
- <div>
- <h5 class="Head4">Additional Option Descriptions</h5>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-workers_dir</em>
+ </p>
+ </td>
- <ul>
- <li class="BodyNoLead">Some of the options in <a href=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The directory for storing temporary
+ output files from the child processes. The default is
+ '/tmp/mpc' on Unix systems and %TEMP% on Windows. If
+ neither -workers_dir nor -workers_port is used,
+ -workers_dir is assumed. For more information see <a href=
+ "MakeProjectCreator.html#Additional-workers_dir_information"
+ class="XRef">the -workers_dir Option</a>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-workers_port</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The port number for the parent listener.
+ If neither -workers_dir nor -workers_port is used,
+ -workers_dir is assumed. For more information see <a href=
+ "MakeProjectCreator.html#Additional-workers_port_information"
+ class="XRef">the -workers_port Option</a>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">-version</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The MPC version is printed and no files
+ are processed.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+
+ <div>
+ <h5 class="Head4">Additional Option Descriptions</h5>
+
+
+ <p class="BodyNoLead">
+ Some of the options in <a href=
"MakeProjectCreator.html#Command%20Line%20Options" class=
"XRef">Command Line Options</a> require an expanded explanation.
- You will find more information on the <em class=
+ You will find more information on the <em class=
"Code">-relative</em>, <em class="Code">-ti</em>, <em class=
- "Code">-value_project</em> and <em class=
- "Code">-value_template</em> options below.</li>
- </ul>
+ "Code">-value_project</em>, <em class=
+ "Code">-value_template</em>, <em class=
+ "Code">-workers</em>, <em class=
+ "Code">-workers_dir</em> and <em class=
+ "Code">-workers_port</em> options below.
+ </p>
- <div>
- <h6 class="Head5"><a name=
- "Additional -relative information"></a>The -relative Option.</h6>
-
- <ul>
- <li class="BodyNoLead">Some project types do not (completely)
- support the idea of accessing environment variables through the
- use of <em class="Code">$()</em>, and therefore MPC must ensure
- that generated projects are usable in these cases. In order to
- avoid the existence of <em class="Code">$()</em> variables
- within the generated project files, relative paths are put in
- place of those (where possible).</li>
-
- <li class="Body">The <em class="Code">-relative</em> option
- takes a single parameter of a name value pair, for
- example:</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
- <p class="Code">mwc.pl -relative
- PROJ_TOP=/usr/projects/top</p>
+ <div>
+ <h6 class="Head5">
+ <a name=
+ "Additional-relative_information"></a>The -relative Option.
+ </h6>
+
+
+ <p class="BodyNoLead">
+ Some project types do not (completely)
+ support the idea of accessing environment variables through the
+ use of <em class="Code">$()</em>, and therefore MPC must ensure
+ that generated projects are usable in these cases. In order to
+ avoid the existence of <em class="Code">$()</em> variables
+ within the generated project files, relative paths are put in
+ place of those (where possible).
+ </p>
+
+ <p class="Body">
+ The <em class="Code">-relative</em> option
+ takes a single parameter of a name value pair, for
+ example:
+ </p>
+
+ <blockquote>
- <p class="Code">&nbsp;</p>
- </li>
- <li class="Body">In above example, if the text <em class=
+ <p class="Code">
+ mwc.pl -relative
+ PROJ_TOP=/usr/projects/top
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ In above example, if the text <em class=
"Code">"$(PROJ_TOP)</em> " is found as a value for any mpb,
- mpc, mpd, or mpt variable then it is replaced by a path that is
- relative to <em class="Code">/usr/projects/top</em>. For
- example, if an mpc file located under <em class=
- "Code">/usr/projects/top/dir</em> contained the following:</li>
+ mpc, mpd, or mpt variable then it is replaced by a path that is
+ relative to <em class="Code">/usr/projects/top</em>. For
+ example, if an mpc file located under <em class=
+ "Code">/usr/projects/top/dir</em> contained the following:
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">project {</p>
- <p class="Code">&nbsp;&nbsp;includes += $(PROJ_TOP)</p>
- <p class="Code">}</p>
+ <p class="Code">project {</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;includes += $(PROJ_TOP)</p>
- <li class="Body">The generated project file would contain text
- similar to:</li>
+ <p class="Code">}</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
- <p class="Code">CPPFLAGS += -I..</p>
+ </blockquote>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Body">
+ The generated project file would contain text
+ similar to:
+ </p>
- <li class="Body">The <em class="Code">$(PROJ_TOP)</em> string
- was replaced with a directory value that is relative to the
- directory in which the mpc file is located.</li>
- </ul>
- </div>
+ <blockquote>
+ <p class="Code">CPPFLAGS += -I..</p>
+ </blockquote>
- <div>
- <a name="Additional -ti information"></a>
-
- <h6 class="Head5">The -ti Option.</h6>
-
- <ul>
- <li class="BodyNoLead">The <em class="Code">-ti</em> option
- allows you to identify different template input files based on
- the type of target being built. Template input files correspond
- to four different categories: <em class="Code">dll</em>,
- <em class="Code">lib</em>, <em class="Code">dll_exe</em>, and
- <em class="Code">lib_exe</em>. Not all project types
- distinguish between the different categories, but the templates
- for various project types will be combined with different
- template input files, depending on the build target type, to
- generate different output.</li>
-
- <li class="Body">To override the default template input file
- names, a <em class="Code">-ti</em> option is provided. The
- <em class="Code">-ti</em> option takes a single parameter of
- the form <em class="Code">type:file</em>. The <em class=
- "Code">type</em> is one of the four categories stated above and
- the <em class="Code">file</em> is the base name of an mpt file
- located somewhere in the include search paths.</li>
+ <p class="Body">
+ The <em class="Code">$(PROJ_TOP)</em> string
+ was replaced with a directory value that is relative to the
+ directory in which the mpc file is located.</li>
- <li class="Body">The following example shows a usage of the -ti
- option. It says that when generating a static project (lib),
- use the <em class="Code">vc7lib</em> template input file and
- when generating a dynamic project (dll), use the <em class=
- "Code">vc7dll</em> template input file:</li>
+ </div>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <div>
+ <a name="Additional-ti_information"></a>
+
+ <h6 class="Head5">The -ti Option.</h6>
+
+
+ <p class="BodyNoLead">
+ The <em class="Code">-ti</em> option
+ allows you to identify different template input files based on
+ the type of target being built. Template input files correspond
+ to four different categories: <em class="Code">dll</em>,
+ <em class="Code">lib</em>, <em class="Code">dll_exe</em>, and
+ <em class="Code">lib_exe</em>. Not all project types
+ distinguish between the different categories, but the templates
+ for various project types will be combined with different
+ template input files, depending on the build target type, to
+ generate different output.
+ </p>
+
+ <p class="Body">
+ To override the default template input file
+ names, a <em class="Code">-ti</em> option is provided. The
+ <em class="Code">-ti</em> option takes a single parameter of
+ the form <em class="Code">type:file</em>. The <em class=
+ "Code">type</em> is one of the four categories stated above and
+ the <em class="Code">file</em> is the base name of an mpt file
+ located somewhere in the include search paths.
+ </p>
+
+ <p class="Body">
+ The following example shows a usage of the -ti
+ option. It says that when generating a static project (lib),
+ use the <em class="Code">vc7lib</em> template input file and
+ when generating a dynamic project (dll), use the <em class=
+ "Code">vc7dll</em> template input file:
+ </p>
+
+ <blockquote>
+ <p class="Code">
+ mpc.pl -type vc71 -ti lib:vc7dsplib -ti
+ dll:vc7dspdll
+ </p>
- <p class="Code">mpc.pl -type vc71 -ti lib:vc7dsplib -ti
- dll:vc7dspdll</p>
+ </blockquote>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Body">
+ These happen to be the default values for the
+ <em class="Code">vc71</em> type, but it illustrates that a
+ different template input can be specified for each
+ category.
+ </p>
- <li class="Body">These happen to be the default values for the
- <em class="Code">vc71</em> type, but it illustrates that a
- different template input can be specified for each
- category.</li>
- </ul>
- </div>
+ </div>
- <div>
- <a name="Additional -value_project information"></a>
+ <div>
+ <a name="Additional-value_project_information"></a>
- <h6 class="Head5">The -value_project Option.</h6>
+ <h6 class="Head5">The -value_project Option.</h6>
- <ul>
- <li class="BodyNoLead">The <em class="Code">-value_project</em>
- option can be useful when the need arises to modify the value
- of an MPC variable across one or more mpc files. For example,
- if you wanted to generate all of your projects with an
- additional include search path you would run the following
- command:</li>
+ <p class="BodyNoLead">
+ The <em class="Code">-value_project</em>
+ option can be useful when the need arises to modify the value
+ of an MPC variable across one or more mpc files. For example,
+ if you wanted to generate all of your projects with an
+ additional include search path you would run the following
+ command:
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">mwc.pl -value_project
- includes+=/include/path</p>
+ <p class="Code">
+ mwc.pl -value_project
+ includes+=/include/path
+ </p>
- <p class="Code">&nbsp;</p>
- </li>
+ </blockquote>
- <li class="Body">In the above example, an additional include
- search path of <em class="Code">/include/path</em> would be
- placed in all generated projects.</li>
- </ul>
- </div>
+ <p class="Body">
+ In the above example, an additional include
+ search path of <em class="Code">/include/path</em> would be
+ placed in all generated projects.
+ </p>
- <div>
- <a name="Additional -value_template information"></a>
+ </div>
- <h6 class="Head5">The -value_template Option.</h6>
+ <div>
+ <a name="Additional-value_template_information"></a>
- <ul>
- <li class="BodyNoLead">This option modifies existing or adds
- new template input name/value pairs. For example, if you wanted
- to generate dynamic <em class="Code">vc71</em> projects with
- only <em class="Code">Release</em> targets, you would run the
- following command:</li>
+ <h6 class="Head5">The -value_template Option.</h6>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="BodyNoLead">
+ This option modifies existing or adds
+ new template input name/value pairs. For example, if you wanted
+ to generate dynamic <em class="Code">vc71</em> projects with
+ only <em class="Code">Release</em> targets, you would run the
+ following command:
+ </p>
- <p class="Code">mwc.pl -type vc71 -value_template
- configurations=Release</p>
+ <blockquote>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">
+ mwc.pl -type vc71 -value_template
+ configurations=Release
+ </p>
+
+ </blockquote>
- <li class="Body">To find out what template input variables are
- defined, see the individual mpd file of interest (<em class=
+ <p class="Body">
+ To find out what template input variables are
+ defined, see the individual mpd file of interest (<em class=
"Code">$ACE_ROOT/bin/MakeProjectCreator/templates/*.mpd</em>
- and <em class="Code">$MPC_ROOT/templates/*.mpd</em> ) and
- search for names used within <em class="Code">&lt;%</em> and
- <em class="Code">%&gt;</em> or use the <em class=
+ and <em class="Code">$MPC_ROOT/templates/*.mpd</em> ) and
+ search for names used within <em class="Code">&lt;%</em> and
+ <em class="Code">%&gt;</em> or use the <em class=
"Code">document_template.pl</em> script described in the
- <a href="#Document%20Template%20Script">Template Variable
- Documentation</a> section. Names that are not listed as project
- keywords (see <a href="MakeProjectCreator.html#82186" class=
- "XRef">Assignment Keywords</a>) are template variables.</li>
- </ul>
+ <a href="#Document_Template_Script">
+ Template Variable
+ Documentation
+ </a> section. Names that are not listed as project
+ keywords (see <a href="MakeProjectCreator.html#82186" class=
+ "XRef">Assignment Keywords</a>) are template variables.
+ </p>
+
+ </div>
+
+ <div>
+ <a name="Additional-workers_information"></a>
+
+ <h6 class="Head5">The -workers Option.</h6>
+
+ <p class="BodyNoLead">
+ This option specifies the number of
+ child process to use to generate projects. Using multiple
+ workers can decrease project generation time significantly
+ on multiprocessor systems. For example, if you wanted to
+ distribute projects among four worker processes, you
+ would run the following command:
+ </p>
+
+ <blockquote>
+
+ <p class="Code">mwc.pl -type gnuace -workers 4</p>
+
+ </blockquote>
+
+ <p class="Body">
+ In multi-process MPC, each child has
+ to pass intermediate project info back to the parent. This
+ is done using temporary files or using a socket. The temp
+ file implementation, <a href=
+"MakeProjectCreator.html#Additional-workers_dir_information"
+class="XRef">the -workers_dir option</a>,
+ forks a new child for each project and ensures there are
+ never more children running than requested. The socket
+ listener implementation, <a href=
+"MakeProjectCreator.html#Additional-workers_port_information"
+class="XRef">the -workers_port option</a>,
+ pre-forks N children and distributes jobs to them.
+ </p>
+
+ </div>
+
+ <div>
+ <a name="Additional-workers_dir_information"></a>
+
+ <h6 class="Head5">The -workers_dir Option.</h6>
+
+
+ <p class="Body">
+ This option specifies the directory for
+ storing temporary output files from the child processes.
+ The default is '/tmp/mpc' on Unix-like systems and %TEMP%
+ on Windows. If neither <em class="Code">-workers_dir</em>
+ nor <em class="Code">-workers_port</em> is
+ used, <em class="Code">-workers_dir</em> is assumed. For
+ example, if you wanted to use 4 workers and '/tmp/mydir' for
+ temporary filess, you would run the following command:
+ </p>
+
+ <blockquote>
+
+
+ <p class="Code">mwc.pl -type gnuace -workers 4 -workers_dir /tmp/mydir</p>
+
+
+ </blockquote>
+
+ </div>
+
+ <div>
+ <a name="Additional-workers_port_information"></a>
+
+ <h6 class="Head5">The -workers_port Option.</h6>
+
+
+ <p class="BodyNoLead">
+ This option specifies the port number
+ where the parent listens for project information from the
+ children. If you wanted to receive information from 2 workers
+ on port 9876, you would run the following command:
+ </p>
+
+ <blockquote>
+
+
+ <p class="Code">mwc.pl -type gnuace -workers 2 -workers_port 9876</p>
+
+ </blockquote>
+
+
+ </div>
+ </div>
</div>
- </div>
- </div>
- <div>
- <h4 class="Head3">Configuration Files</h4>
+ <div>
+ <h4 class="Head3">Configuration Files</h4>
+
+
+
+ <h6 class="Head5">Codebase Configuration File (base.cfg)</h6>
+
+
+ <p class="BodyNoLead">
+ This configuration file can be used to
+ specify alternate locations for the MPC Configuration File
+ (discussed below). If a <em class="Code">base.cfg</em> is found
+ underneath the <em class="Code">config</em> directory in the MPC
+ root directory, it will be read to determine the location of
+ MPC.cfg based on the directory in which MPC was started.
+ </p>
- <ul>
- <li class="BodyNoLead">
- <h6 class="Head5">Codebase Configuration File</h6>
- </li>
- <li class="BodyNoLead">This configuration file can be used to
- specify alternate locations for the MPC Configuration File
- (discussed below). If a <em class="Code">base.cfg</em> is found
- underneath the <em class="Code">config</em> directory in the MPC
- root directory, it will be read to determine the location of
- MPC.cfg based on the directory in which MPC was started.</li>
+ <p class="Body">
+ The <em class="Code">base.cfg</em> file allows you to specify which MPC.cfg
+ file to use with the syntax: &lt;execution_path_root&gt = &lt;mpc_config_path&gt;.
+ &nbsp;For a base.cfg file containing the following:
+ </p>
- <li class="Body">For example, if <em class=
+ <blockquote>
+
+ <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p>
+
+ </blockquote>
+
+ <p class ="Body">
+ Meaning that when $MPC_ROOT/mwc.pl is run in a directory below <em class="Code">/foo/bar_root</em>, it will
+ search for <em class="Code">MPC.cfg</em> in the directory <em class="Code">/foo/bar_root/MPC/config</em>.
+ </p>
+ <p class="Body">
+ For example, if <em class=
"Code">$MPC_ROOT/mwc.pl</em> is run under <em class=
- "Code">/foo/bar_root/src</em> and <em class=
- "Code">$MPC_ROOT/config/base.cfg</em> contained:</li>
-
- <li class="Body">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">MPC would attempt to open and read <em class=
- "Code">/foo/bar_root/MPC/config/MPC.cfg</em> as the MPC
- Configuration File. If the base configuration file is not present,
- MPC will try to use <em class="Code">$MPC_ROOT/config/MPC.cfg</em>
- as the MPC Configuration File.</li>
-
- <li class="Body">You may reference environment variables, accessed
- via the dollar sign (e.g., <em class="Code">$NAME</em>), on either
- side of the equals sign. In either this file or the MPC
- Configuration File (see below), an alternate form of environment
- variable reference may be used for variables which are not expected
- to be defined in all scenarios. These variables use the syntax
- <em class="Code">$?NAME</em> instead of <em class="Code">$NAME</em>.
- With this syntax, if the environment variable
- <em class="Code">NAME</em> is not defined, no error or warning is
- printed by MPC, and the substring starting with
- <em class="Code">$?NAME</em> until the next whitespace is expanded
- to the empty string.</li>
- </ul>
-
- <ul>
- <li class="BodyNoLead">
+ "Code">
+ <strong>/foo/bar_root/</strong>src
+ </em>, MPC would attempt to open and read <em class=
+ "Code">
+ <strong>/foo/bar_root/MPC/config/</strong>MPC.cfg
+ </em> as the MPC
+ Configuration File. If the base configuration file is not present,
+ MPC will try to use <em class="Code">$MPC_ROOT/config/MPC.cfg</em>
+ as the MPC Configuration File.
+ </p>
+
+ <p class="Body">
+ You may reference environment variables, accessed
+ via the dollar sign (e.g., <em class="Code">$NAME</em>), on either
+ side of the equals sign. In either this file or the MPC
+ Configuration File (see below), an alternate form of environment
+ variable reference may be used for variables which are not expected
+ to be defined in all scenarios. These variables use the syntax
+ <em class="Code">$?NAME</em> instead of <em class="Code">$NAME</em>.
+ With this syntax, if the environment variable
+ <em class="Code">NAME</em> is not defined, no error or warning is
+ printed by MPC, and the substring starting with
+ <em class="Code">$?NAME</em> until the next whitespace is expanded
+ to the empty string.
+ </p>
+
+
+
+
<h6 class="Head5">MPC Configuration File</h6>
- </li>
- <li class="BodyNoLead">In an effort to move away from the use of
- environment variables, a configuration file has been introduced.
- The configuration file (<em class="Code">MPC.cfg</em>) can contain
- settings to provide command line options, control logging and
- direct MPC to dynamic project types.</li>
- <li class="Body">The following keywords are allowed in the
- configuration file.</li>
+ <p class="BodyNoLead">
+ In an effort to move away from the use of
+ environment variables, a configuration file has been introduced.
+ The configuration file (<em class="Code">MPC.cfg</em>) can contain
+ settings to provide command line options, control logging and
+ direct MPC to dynamic project types.
+ </p>
- <li class="Body">
- <table border="1" summary="Configuration File Keywords">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Keyword</p>
- </th>
+ <p class="Body">
+ The following keywords are allowed in the
+ configuration file.
+ </p>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
+ <p class="Body">
+ <table border="1" summary="Configuration File Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command_line</em></p>
- </td>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Provide additional command line options
- to MPC. The value of this setting will be prepended to the
- options passed to <em class="Code">mwc.pl</em> or
- <em class="Code">mpc.pl</em>.</p>
- </td>
- </tr>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command_line</em>
+ </p>
+ </td>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">default_type</em></p>
- </td>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Provide additional command line options
+ to MPC. The value of this setting will be prepended to the
+ options passed to <em class="Code">mwc.pl</em> or
+ <em class="Code">mpc.pl</em>.
+ </p>
+ </td>
+ </tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Provide a single project type (as
- specified by the <em class="Code">-type</em> option) as the
- default project type.</p>
- </td>
- </tr>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">default_type</em>
+ </p>
+ </td>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dynamic_types</em></p>
- </td>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Provide a single project type (as
+ specified by the <em class="Code">-type</em> option) as the
+ default project type.
+ </p>
+ </td>
+ </tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This comma separated list points to
- directories in which MPC will search for Perl modules to
- implement additional MPC project types, base projects or
- template files. This setting can be used to augment or
- replace functionality in MPC. For each suitable directory
- found, it will add a <em class="Code">modules</em> include
- path for Perl to find modules, add a <em class=
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dynamic_types</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This comma separated list points to
+ directories in which MPC will search for Perl modules to
+ implement additional MPC project types, base projects or
+ template files. This setting can be used to augment or
+ replace functionality in MPC. For each suitable directory
+ found, it will add a <em class="Code">modules</em> include
+ path for Perl to find modules, add a <em class=
"Code">config</em> include path to locate base projects and
- a <em class="Code">template</em> include path to find MPC
- templates.</p>
- </td>
- </tr>
+ a <em class="Code">template</em> include path to find MPC
+ templates.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">includes</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">includes</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Similar to the <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Similar to the <em class=
"Code">-include</em> command line option, it adds the list
- of comma separated paths to the MPC include search
- paths.</p>
- </td>
- </tr>
+ of comma separated paths to the MPC include search
+ paths.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">logging</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">logging</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this setting contains <em class=
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this setting contains <em class=
"Code">info=1</em>, informational messages will be printed.
- If it contains <em class="Code">warn=1</em>, warning
- messages will be printed. If it contains <em class=
+ If it contains <em class="Code">warn=1</em>, warning
+ messages will be printed. If it contains <em class=
"Code">diag=1</em>, diagnostic messages will be printed. If
- it contains <em class="Code">debug=1</em>, debug message
- will be printed. And lastly, if it contains <em class=
+ it contains <em class="Code">debug=1</em>, debug message
+ will be printed. And lastly, if it contains <em class=
"Code">detail=1</em>, detail messages will be printed. If
- it contains none of these, MPC will not print out any
- information or warnings when processing projects or
- workspaces. Errors are always printed if any are
- encountered. The default value is <em class="Code">warn=1,
- diag=1, detail=1</em>.</p>
- </td>
- </tr>
+ it contains none of these, MPC will not print out any
+ information or warnings when processing projects or
+ workspaces. Errors are always printed if any are
+ encountered. The default value is <em class="Code">
+ warn=1,
+ diag=1, detail=1
+ </em>.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">main_functions</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">main_functions</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Provide additional main functions to be
- recognized in conjunction with automatic executable project
- recognition. The value assigned should be of the form
- <em class="Code">&lt;language&gt;:&lt;func name&gt;[,
- &lt;language&gt;:&lt;func name&gt;]*</em>. A function can
- be specified for all languages by only providing the
- function name.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Provide additional main functions to be
+ recognized in conjunction with automatic executable project
+ recognition. The value assigned should be of the form
+ <em class="Code">
+ &lt;language&gt;:&lt;func name&gt;[,
+ &lt;language&gt;:&lt;func name&gt;]*
+ </em>. A function can
+ be specified for all languages by only providing the
+ function name.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">verbose_ordering</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">verbose_ordering</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is set, mwc.pl will warn the
- user about references to projects in the <em class=
- "Code">after</em> keyword that have not been processed.</p>
- </td>
- </tr>
- </table>
- </li>
- </ul>
- </div>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is set, mwc.pl will warn the
+ user about references to projects in the <em class=
+ "Code">after</em> keyword that have not been processed.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
- <div>
- <h4 class="Head3">Environment Variables</h4>
+ </div>
+
+ <div>
+ <h4 class="Head3">Environment Variables</h4>
- <ul>
- <li class="BodyNoLead">MPC recognizes a few environment variables
- that alter the way it performs certain tasks. The sections below
- describe each one and the effect it has on MPC.</li>
- <li class="Body">The <em class=
+ <p class="BodyNoLead">
+ MPC recognizes a few environment variables
+ that alter the way it performs certain tasks. The sections below
+ describe each one and the effect it has on MPC.
+ </p>
+
+ <p class="Body">
+ The <em class=
"Code">MPC_DEPENDENCY_COMBINED_STATIC_LIBRARY</em> environment
- variable only affects the way workspace dependencies are created
- for <em class="Emphasis">static</em> projects with the <em class=
+ variable only affects the way workspace dependencies are created
+ for <em class="Emphasis">static</em> projects with the <em class=
"Code">em3</em>, <em class="Code">vc6</em>, <em class=
"Code">vc7</em>, <em class="Code">vc71</em>, vc8, vc9 and
- <em class="Code">vc10</em> project types. If this environment
- variable is set, MPC will generate inter-project dependencies for
- libraries within a single workspace. This is usually not desired
- since adding these dependencies in a static workspace has the side
- effect of including dependee libraries into the dependent
- library.</li>
-
- <li class="Body">The <em class="Code">MPC_GHS_UNIX</em> environment
- variable is only meaningful when generating the ghs project files.
- By default, the ghs type assumes that it is for Windows. Set this
- environment variable prior to running MPC if this is not the
- case.</li>
-
- <li class="Body">The <em class="Code">MPC_USE_WIN_COMMANDS</em>
- environment variable causes the Windows related pseudo template
- variables to be used regardless of the type of project being
- generated.</li>
- </ul>
- </div>
- </div>
+ <em class="Code">vc10</em> project types. If this environment
+ variable is set, MPC will generate inter-project dependencies for
+ libraries within a single workspace. This is usually not desired
+ since adding these dependencies in a static workspace has the side
+ effect of including dependee libraries into the dependent
+ library.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">MPC_GHS_UNIX</em> environment
+ variable is only meaningful when generating the ghs project files.
+ By default, the ghs type assumes that it is for Windows. Set this
+ environment variable prior to running MPC if this is not the
+ case.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">MPC_USE_WIN_COMMANDS</em>
+ environment variable causes the Windows related pseudo template
+ variables to be used regardless of the type of project being
+ generated.
+ </p>
- <div>
- <h3 class="Head2">Writing MPC and MWC Files</h3>
- <hr>
-
- <ul>
- <li class="Body">You may want to familiarize yourself with the
- various input files for MPC. The input file types and the syntax of
- each are discussed in the sections below.</li>
- </ul>
+ </div>
+ </div>
<div>
- <h4 class="Head3">Input Files</h4>
+ <a name="Writing_MPC_Files"></a>
+ <h3 class="Head2">Writing MPC and MWC Files</h3>
+ <hr>
+
+
+ <p class="Body">
+ You may want to familiarize yourself with the
+ various input files for MPC. The input file types and the syntax of
+ each are discussed in the sections below.
+ </p>
+
+
+ <div>
+ <h4 class="Head3">Input Files</h4>
+
+ <p class="BodyNoLead">
+ There are four different input files
+ associated with MPC. For most users of MPC, the main files of
+ concern are mpc and mwc files.
+ </p>
- <ul>
- <li class="BodyNoLead">There are four different input files
- associated with MPC. For most users of MPC, the main files of
- concern are mpc and mwc files.</li>
- </ul>
- <div>
- <h5 class="Head4">Project Files (mpc)</h5>
+ <div>
+ <h5 class="Head4">Project Files (mpc)</h5>
- <ul>
- <li class="BodyNoLead">Project files, those with the <em class=
+ <p class="Body">
+ Project files, those with the <em class=
"Code">mpc</em> extension, contain such things as include paths,
- library paths, source files and inter-project dependencies. An
- mpc file can contain one or more &ldquo;projects&rdquo; each of
- which needs to be uniquely named to avoid project generation
- errors. Projects represent build targets such as libraries and
- executables.</li>
- </ul>
- </div>
+ library paths, source files and inter-project dependencies. An
+ mpc file can contain one or more &ldquo;projects&rdquo; each of
+ which needs to be uniquely named to avoid project generation
+ errors. Projects represent build targets such as libraries and
+ executables.
+ </p>
- <div>
- <h5 class="Head4">Workspace Files (mwc)</h5>
-
- <ul>
- <li class="BodyNoLead">Workspaces are defined by providing a list
- of mpc files, directories or other mwc files in a single mwc
- file. For each mpc file, the Workspace Creator calls upon the
- Project Creator to generate the project. After all of the
- projects are successfully generated, the tool-specific workspace
- is generated containing the projects and any defined
- inter-project dependency information (if supported by the build
- tool). An mwc file can contain one or more
- &ldquo;workspaces,&rdquo; each of which needs to be uniquely
- named. If no workspace files are provided to the workspace
- creator, the current directory is traversed and any mpc files
- located will be part of the workspace that is generated.</li>
- </ul>
- </div>
+ </div>
- <div>
- <h5 class="Head4">Base Project Files (mpb)</h5>
-
- <ul>
- <li class="BodyNoLead">One of the many unique and useful features
- of MPC is that the project definition files can use inheritance.
- Project inheritance allows a user to set up a base project (mpb
- file) that can contain information that is applicable to all
- derived projects. Common project attributes, such as include
- paths, library paths, and inter-project dependencies, could be
- described in this base project and any project that inherits from
- it would contain this information as well.</li>
- </ul>
- </div>
+ <div>
+ <h5 class="Head4">Workspace Files (mwc)</h5>
+
+
+ <p class="Body">
+ Workspaces are defined by providing a list
+ of mpc files, directories or other mwc files in a single mwc
+ file. For each mpc file, the Workspace Creator calls upon the
+ Project Creator to generate the project. After all of the
+ projects are successfully generated, the tool-specific workspace
+ is generated containing the projects and any defined
+ inter-project dependency information (if supported by the build
+ tool). An mwc file can contain one or more
+ &ldquo;workspaces,&rdquo; each of which needs to be uniquely
+ named. If no workspace files are provided to the workspace
+ creator, the current directory is traversed and any mpc files
+ located will be part of the workspace that is generated.
+ </p>
- <div>
- <h5 class="Head4">Base Workspace Files (mwb)</h5>
+ </div>
- <ul>
- <li class="BodyNoLead">As with projects, workspaces can also
- inherit from other workspaces. A base workspace can provide
- workspace information that may be common to other
- workspaces.</li>
- </ul>
- </div>
- </div>
+ <div>
- <div>
- <h4 class="Head3">General Input File Syntax</h4>
+ <h5 class="Head4">Base Project Files (mpb)</h5>
+
+
+ <p class="Body">
+ One of the many unique and useful features
+ of MPC is that the project definition files can use inheritance.
+ Project inheritance allows a user to set up a base project (mpb
+ file) that can contain information that is applicable to all
+ derived projects. Common project attributes, such as include
+ paths, library paths, and inter-project dependencies, could be
+ described in this base project and any project that inherits from
+ it would contain this information as well.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Base Workspace Files (mwb)</h5>
+
+
+ <p class="Body">
+ As with projects, workspaces can also
+ inherit from other workspaces. A base workspace can provide
+ workspace information that may be common to other
+ workspaces.
+ </p>
+
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">General Input File Syntax</h4>
- <ul>
- <li class="BodyNoLead">In this section we discuss the syntax of the
- various files. We also describe some of the default values that go
- along with these files.</li>
- </ul>
- <div>
- <h5 class="Head4">mwc and mwb</h5>
+ <p class="BodyNoLead">
+ In this section we discuss the syntax of the
+ various files. We also describe some of the default values that go
+ along with these files.
+ </p>
- <ul>
- <li class="BodyNoLead">Workspaces can contain individual mpc
- files or directories. There can be one or more workspaces defined
- within a single mwc file.</li>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <div>
+ <h5 class="Head4">mwc and mwb files</h5>
- <p class="Code">workspace(optional name):
- optional_base_workspace {</p>
- <p class="Code">&nbsp;&nbsp;file.mpc</p>
+ <p class="Body">
+ Workspaces can contain individual mpc
+ files or directories. There can be one or more workspaces defined
+ within a single mwc file.
+ </p>
- <p class="Code">&nbsp;&nbsp;directory</p>
+ <blockquote>
- <p class="Code">&nbsp;&nbsp;other.mwc</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ workspace(optional name):
+ optional_base_workspace {
+ </p>
- <p class="Code">&nbsp;&nbsp;exclude(vc6, vc7, vc71, vc8, vc9,
- vc10, nmake) {</p>
+ <p class="Code">&nbsp;&nbsp;file.mpc</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;this_directory</p>
+ <p class="Code">&nbsp;&nbsp;directory</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;other.mwc</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;exclude(prop:microsoft) {</p>
+ <p class="Code">
+ &nbsp;&nbsp;exclude(vc6, vc7, vc71, vc8, vc9,
+ vc10, nmake) {
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;non_microsoft</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;this_directory</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;specific(rpmspec) {</p>
+ <p class="Code">&nbsp;&nbsp;exclude(prop:microsoft) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;rpm_version = 1.0</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;non_microsoft</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;specific(rpmspec) {</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;rpm_version = 1.0</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
- <li class="BodyNoLead">A workspace can be given a name. This is
- the value given in the parentheses after the keyword <em class=
+ <p class="Code">}</p>
+
+
+ </blockquote>
+
+ <p class="BodyNoLead">
+ A workspace can be given a name. This is
+ the value given in the parentheses after the keyword <em class=
"Code">workspace</em>. If the workspace is not given a name, the
- workspace name is taken from the name of the mwc file without the
- extension.</li>
+ workspace name is taken from the name of the mwc file without the
+ extension.
+ </p>
- <li class="Body">Workspaces can also inherit from other
- workspaces. In the above example, <em class=
+ <p class="Body">
+ Workspaces can also inherit from other
+ workspaces. In the above example, <em class=
"Code">optional_base_workspace</em> would be the base name of an
- mwb file with no extension that contains workspace information.
- This information would then be included in each workspace that
- inherits from it.</li>
-
- <li class="Body">The lines between the curly braces
- contain assignments, mpc files, directories, other
- workspace files or exclusion sections. For each listed item,
- <ul>
- <li>an mpc file will be included in the workspace</li>
-
- <li>a directory recursively traversed and any mpc files
- found will be included</li>
- <li><a name="AggregatedWorkspace"></a>a workspace file will be aggregated into the main workspace.</li>
- </ul>
-
- <li class="Body">A workspace can have assignments interspersed
- within the directories and mpc files. These assignments modify
- the way projects are generated.</li>
-
- <li class="Body">The <em class="Code">cmdline</em> setting can be
- used to provide command line options that would normally be
- passed to <em class="Code">mwc.pl</em> (see <a href=
+ mwb file with no extension that contains workspace information.
+ This information would then be included in each workspace that
+ inherits from it.
+ </p>
+
+ <p class="Body">
+ The lines between the curly braces
+ contain assignments, mpc files, directories, other
+ workspace files or exclusion sections. For each listed item,
+ <ul>
+ <li>an mpc file will be included in the workspace,</li>
+
+ <li>
+ a directory recursively traversed and any mpc files
+ found will be included,
+ </li>
+ <li>
+ <a name="AggregatedWorkspace"></a>a workspace file will be aggregated into the main workspace.
+ </li>
+ </ul>
+
+ <p class="Body">
+ A workspace can have assignments interspersed
+ within the directories and mpc files. These assignments modify
+ the way projects are generated.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">cmdline</em> setting can be
+ used to provide command line options that would normally be
+ passed to <em class="Code">mwc.pl</em> (see <a href=
"MakeProjectCreator.html#Command%20Line%20Options" class=
"XRef">Command Line Options</a>). However, the <em class=
- "Code">-type</em>, <em class="Code">-recurse</em> , <em class=
- "Code">-noreldefs</em> , <em class="Code">-make_coexistence</em>,
- <em class="Code">-genins</em>, <em class="Code">-into</em> and
- <em class="Code">-language</em> options as well as input files
- are ignored. Environment variables may be accessed through
- <em class="Code">$NAME</em>, where <em class="Code">NAME</em> is
- the environment variable name. The <em class="Code">cmdline</em>
- assignment may be useful for workspaces that require specific
- <em class="Code">mwc.pl</em> options in order to process
- correctly.</li>
-
- <li class="Body">The only other setting supported by mwc.pl is
- <em class="Code">implicit</em>. If <em class="Code">implicit</em>
- is set to <em class="Code">1</em> then default project files are
- generated in each directory where no mpc file exists. The
- <em class="Code">implicit</em> keyword can also be set to the
- name of a base project. In this case, the implicitly generated
- project will inherit from the base project specified in the
- assignment. Either way, if the directory does not contain files
- that can be used within a project, no project is created. Setting
- <em class="Code">implicit</em> can be useful when you want to
- define specific workspaces, but the MPC defaults are sufficient
- for the directories involved within the workspace.</li>
-
- <li class="Body"><a name="workspaceSpecific"></a>Workspaces
- support a <em class="Code">specific</em> clause
- conceptually and syntactically similar to <a
- href="#projectSpecific">the project <em
- class="Code">specific</em> clause.</a> Any variables
- assigned within the clause are only available to
- workspaces, not to projects. Two sorts of assignments are
- possible: first are assignments to the keywords
- <em class="Code">cmdline</em> and <em class="Code">implicit</em>
- and the second are type-specific variables. Consult the
- documentation for the type for details on type-specific variables.
- Keyword assignments impact the entire workspace, not just the
- <em class="Code">specific</em> scope.</li>
-
- <li class="Body">Scoped assignments are assignments that are
- associated with specific mpc files or directories listed with the
- scope of the assignment. The following example shows a scoped
- assignment of <em class="Code">cmdline</em> that only applies to
- <em class="Code">one of the mpc files listed in the
- workspace</em>. In this example, <em class=
+ "Code">-exclude</em>, <em class="Code">-for_eclipse</em>,
+ <em class="Code">-gendot</em>, <em class="Code">-gfeature_file</em>,
+ <em class="Code">-into</em>, <em class="Code">-make_coexistence</em>,
+ <em class="Code">-recurse</em>, <em class="Code">-reldefs</em>,
+ and <em class="Code">-type</em> options as well as input files
+ are ignored. Environment variables may be accessed through
+ <em class="Code">$NAME</em>, where <em class="Code">NAME</em> is
+ the environment variable name. The <em class="Code">cmdline</em>
+ assignment may be useful for workspaces that require specific
+ <em class="Code">mwc.pl</em> options in order to process
+ correctly.
+ </p>
+
+ <p class="Body">
+ The only other setting supported by mwc.pl is
+ <em class="Code">implicit</em>. If <em class="Code">implicit</em>
+ is set to <em class="Code">1</em> then default project files are
+ generated in each directory where no mpc file exists. The
+ <em class="Code">implicit</em> keyword can also be set to the
+ name of a base project. In this case, the implicitly generated
+ project will inherit from the base project specified in the
+ assignment. Either way, if the directory does not contain files
+ that can be used within a project, no project is created. Setting
+ <em class="Code">implicit</em> can be useful when you want to
+ define specific workspaces, but the MPC defaults are sufficient
+ for the directories involved within the workspace.
+ </p>
+
+ <p class="Body">
+ <a name="workspaceSpecific"></a>Workspaces
+ support a <em class="Code">specific</em> clause
+ conceptually and syntactically similar to <a
+ href="#projectSpecific">
+ the project <em
+class="Code">specific</em> clause.
+ </a> Any variables
+ assigned within the clause are only available to
+ workspaces, not to projects. Two sorts of assignments are
+ possible: first are assignments to the keywords
+ <em class="Code">cmdline</em> and <em class="Code">implicit</em>
+ and the second are type-specific variables. Consult the
+ documentation for the type for details on type-specific variables.
+ Keyword assignments impact the entire workspace, not just the
+ <em class="Code">specific</em> scope.
+ </p>
+
+ <p class="Body">
+ Scoped assignments are assignments that are
+ associated with specific mpc files or directories listed with the
+ scope of the assignment. The following example shows a scoped
+ assignment of <em class="Code">cmdline</em> that only applies to
+ <em class="Code">
+ one of the mpc files listed in the
+ workspace
+ </em>. In this example, <em class=
"Code">directory/foo.mpc</em> would be processed as if the
- <em class="Code">-static</em> option had been passed on the
- command line whereas other directories and mpc files would
- not.</li>
+ <em class="Code">-static</em> option had been passed on the
+ command line whereas other directories and mpc files would
+ not.
+ </p>
+
+ <blockquote>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
- <p class="Code">workspace {</p>
+ <p class="Code">workspace {</p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <p class="Code">&nbsp;&nbsp;...</p>
- <p class="Code">&nbsp;&nbsp;static {</p>
+ <p class="Code">&nbsp;&nbsp;static {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;cmdline += -static</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;cmdline += -static</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;directory/foo.mpc</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;directory/foo.mpc</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;exclude(gnuace, make) {</p>
+ <p class="Code">&nbsp;&nbsp;exclude(gnuace, make) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;some.mpc</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;some.mpc</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;// Associate the name "other" with
- dir3</p>
+ <p class="Code">
+ &nbsp;&nbsp;// Associate the name "other" with
+ dir3
+ </p>
- <p class="Code">&nbsp;&nbsp;associate(other) {</p>
+ <p class="Code">&nbsp;&nbsp;associate(other) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;dir3</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;dir3</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ </blockquote>
- <li class="Body">Exclusion sections are used to prevent
- directories and mpc files from being processed. These excluded
- directories and mpc files will be skipped when generating project
- files and workspaces. The <em class="Code">exclude</em> keyword
- accepts project types as well as properties (see <a href=
+ <p class="Body">
+ Exclusion sections are used to prevent
+ directories and mpc files from being processed. These excluded
+ directories and mpc files will be skipped when generating project
+ files and workspaces. The <em class="Code">exclude</em> keyword
+ accepts project types as well as properties (see <a href=
"MakeProjectCreator.html#properties" class="XRef">Properties</a>)
- within the parentheses (as above), which will cause the workspace
- creator to only exclude the listing for particular types. If no
- types are provided, exclusion will take place for all project
- types.</li>
-
- <li class="Body">The <em class="Code">associate</em> scope
- associates a name with one or more directories. This does not add
- directories to a workspace, it only makes an association. This
- may or may not have an effect on the generated workspace; it
- depends solely upon whether the project type supports
- associations. Currently <em class="Code">automake</em> is the
- only project type that supports associations. Each directory
- listed under an association is grouped together and built
- conditionally based on the association name.</li>
-
- <li class="Body">Comments are similar to the C++ style comments.
- Any text after a double slash (<em class="Code">//</em> ) is
- considered a comment.</li>
- </ul>
- </div>
+ within the parentheses (as above), which will cause the workspace
+ creator to only exclude the listing for particular types. If no
+ types are provided, exclusion will take place for all project
+ types.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">associate</em> scope
+ associates a name with one or more directories. This does not add
+ directories to a workspace, it only makes an association. This
+ may or may not have an effect on the generated workspace; it
+ depends solely upon whether the project type supports
+ associations. Currently <em class="Code">automake</em> is the
+ only project type that supports associations. Each directory
+ listed under an association is grouped together and built
+ conditionally based on the association name.
+ </p>
+
+ <p class="Body">
+ Comments are similar to the C++ style comments.
+ Any text after a double slash (<em class="Code">//</em> ) is
+ considered a comment.
+ </p>
+
+ </div>
- <div>
- <h5 class="Head4">mpc and mpb</h5>
+ <div>
+ <h5 class="Head4">mpc and mpb files</h5>
- <div>
- <h6 class="Head5">Project Declarations</h6>
+ <div>
+ <a name="Base_Project"></a>
+ <h6 class="Head5">Project Declarations</h6>
- <ul>
- <li class="BodyNoLead">Project declarations are similar to
- workspace declarations, but are a bit more complex. An mpc file
- can contain one or more &ldquo;projects&rdquo; and each project
- can inherit from base projects.</li>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Body">
+ Project declarations are similar to
+ workspace declarations, but are a bit more complex. An mpc file
+ can contain one or more &ldquo;projects&rdquo; and each project
+ can inherit from base projects.
+ </p>
- <p class="Code">project(optional name): base_project,
- another_base_project {</p>
+ <blockquote>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;exename = client</p>
+ <p class="Code">
+ project(optional name): base_project,
+ another_base_project {
+ </p>
- <p class="Code">&nbsp;&nbsp;includes += directory_name
- other_directory</p>
+ <p class="Code">&nbsp;&nbsp;exename = client</p>
- <p class="Code">&nbsp;&nbsp;libpaths += /usr/X11R6/lib</p>
+ <p class="Code">
+ &nbsp;&nbsp;includes += directory_name
+ other_directory
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;libpaths += /usr/X11R6/lib</p>
- <p class="Code">&nbsp;&nbsp;Header_Files {</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.h</p>
+ <p class="Code">&nbsp;&nbsp;Header_Files {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.h</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.h</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.h</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.h</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.h</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.cpp</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.cpp</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">}</p>
- <li class="BodyNoLead">If the optional project name is not
- given, then the project name is taken from the name of the mpc
- file without the extension. Therefore, if your mpc file is
- going to contain multiple projects, it is important to provide
- project names to prevent each generated project from
- overwriting the other. MPC will issue an error and stop if
- duplicate project names are detected.</li>
- </ul>
- </div>
+ </blockquote>
- <div>
- <h6 class="Head5">Base Projects</h6>
+ <p class="BodyNoLead">
+ If the optional project name is not
+ given, then the project name is taken from the name of the mpc
+ file without the extension. Therefore, if your mpc file is
+ going to contain multiple projects, it is important to provide
+ project names to prevent each generated project from
+ overwriting the other. MPC will issue an error and stop if
+ duplicate project names are detected.
+ </p>
- <ul>
- <li class="BodyNoLead">Base projects can be of the extension
- <em class="Code">mpb</em> and <em class="Code">mpc</em>. If a
- file with the name of the base project with an <em class=
- "Code">mpb</em> or <em class="Code">mpc</em> extension cannot
- be found within the mpc include search path, a fatal error is
- issued and processing halts.</li>
- </ul>
- </div>
+ </div>
- <div>
- <h6 class="Head5">Assignment Keywords</h6>
-
- <ul>
- <li class="BodyNoLead">This table shows the keywords that can
- be used in an assignment (i.e., <em class="Code">=</em>,
- <em class="Code">+=</em> or <em class="Code">-=</em> ) within
- an mpc file. The most commonly used keywords are shown in bold
- face.</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle"><a name="82186"></a>Assignment
- Keywords</h6>
-
- <table border="1" summary="Assignment Keywords">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Keyword</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">after</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies that this project must be
- built after 1 or more project names listed.</p>
- <p class="Tbl-Body">An extended syntax is available
- in order to associate name-value pairs with a
- dependency: <em class="Code">&lt;project
- name[:name=value]&gt;</em><br>
+ <div>
+ <h6 class="Head5">Base Projects</h6>
+
+
+ <p class="BodyNoLead">
+ Base projects can be of the extension
+ <em class="Code">mpb</em> and <em class="Code">mpc</em>. If a
+ file with the name of the base project with an <em class=
+ "Code">mpb</em> or <em class="Code">mpc</em> extension cannot
+ be found within the mpc include search path, a fatal error is
+ issued and processing halts.
+ </p>
+ </div>
+
+ <div>
+ <h6 class="Head5">Assignment Keywords</h6>
+
+
+ <p class="Body">
+ This table shows the keywords that can
+ be used in an assignment (i.e., <em class="Code">=</em>,
+ <em class="Code">+=</em> or <em class="Code">-=</em> ) within
+ an mpc file. The most commonly used keywords are shown in bold
+ face.
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ <a name="82186"></a>Assignment
+ Keywords
+ </h6>
+
+ <p class="Body">
+ <table border="1" summary="Assignment Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">after</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies that this project must be
+ built after 1 or more project names listed.
+ </p>
+ <p class="Tbl-Body">
+ An extended syntax is available
+ in order to associate name-value pairs with a
+ dependency: <em class="Code">
+ &lt;project
+ name[:name=value]&gt;
+ </em><br>
These name-value pairs may be used in the creation
- of the dependencies of the project.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">avoids</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies which features should be
- disabled in order to generate the project file. Under
- the GNUACE type, it also specifies which make macros
- should not be set to build the target.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">custom_only</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This setting instructs MPC to
- create projects that only contain custom generation
- targets. Any files included in the projects will be
- provided by custom component lists defined through the
- use of <em class="Code">Define_Custom</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dependent_upon</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This keyword can only be used
- as a header component scoped setting (ie. inside
- the scope of Header_Files). It determines which
- file the header file is dependent upon for vc8,
- and vc9 only.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dllout</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If defined, specifies where the
- dynamic libraries will be placed. This overrides libout
- in the dynamic case.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">dynamicflags</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies preprocessor flags passed
- to the compiler when building a dynamic library.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">exename</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Determines that the project will be
- an executable and the name of the executable
- target.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">exeout</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies where executables will be
- placed.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">includes</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies one or more directories
- to supply to the compiler for use as include search
- paths.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">libout</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies where the dynamic and
- static libraries will be placed.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">libpaths</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies one or more directories
- to supply to the compiler for use as library search
- paths.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">libs</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies one or more libraries to
- link into the target. Library modifiers may be added
- when being processed in the template file. For example,
- library modifiers are added when using the vc6 project
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">lit_libs</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as libs except
- that a library modifier will not be added.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">macros</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Values supplied here will be passed
- directly to the compiler as command line defined
- macros.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">managed</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies that the source files
- should be compiled as managed C++. This is only
- supported by the <em class="Code">nmake</em>,
- <em class="Code">vc7</em>, <em class="Code">vc71</em>,
- <em class="Code">vc8</em>, <em class="Code">vc9</em>,
- and <em class="Code">vc10</em> project types.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">no_pch</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">It specifies that precompiled
- headers should not be used for the source files listed
- within the scope of it&rsquo;s setting. This keyword
- can only be used as a source component scoped setting
- (i.e., inside the scope of Source_Files).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pch_header</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The name of the precompiled header
- file. See the discussion below this table for more
- information.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pch_source</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The name of the precompiled source
- file. See the discussion below this table for more
- information.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">postbuild</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is defined in the project,
- the value will be interpreted as commands to run after
- the project has been successfully built. The <em class=
+ of the dependencies of the project.
+
+
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">avoids</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies which features should be
+ disabled in order to generate the project file. Under
+ the GNUACE type, it also specifies which make macros
+ should not be set to build the target.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">custom_only</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This setting instructs MPC to
+ create projects that only contain custom generation
+ targets. Any files included in the projects will be
+ provided by custom component lists defined through the
+ use of <em class="Code">Define_Custom</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dependent_upon</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This keyword can only be used
+ as a header component scoped setting (ie. inside
+ the scope of Header_Files). It determines which
+ file the header file is dependent upon for vc8,
+ and vc9 only.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dllout</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If defined, specifies where the
+ dynamic libraries will be placed. This overrides libout
+ in the dynamic case.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">dynamicflags</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies preprocessor flags passed
+ to the compiler when building a dynamic library.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">exename</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Determines that the project will be
+ an executable and the name of the executable
+ target.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">exeout</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies where executables will be
+ placed.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">includes</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies one or more directories
+ to supply to the compiler for use as include search
+ paths.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">libout</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies where the dynamic and
+ static libraries will be placed.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">libpaths</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies one or more directories
+ to supply to the compiler for use as library search
+ paths.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">libs</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies one or more libraries to
+ link into the target. Library modifiers may be added
+ when being processed in the template file. For example,
+ library modifiers are added when using the vc6 project
+ type.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">lit_libs</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as libs except
+ that a library modifier will not be added.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">macros</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Values supplied here will be passed
+ directly to the compiler as command line defined
+ macros.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">managed</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies that the source files
+ should be compiled as managed C++. This is only
+ supported by the <em class="Code">nmake</em>,
+ <em class="Code">vc7</em>, <em class="Code">vc71</em>,
+ <em class="Code">vc8</em>, <em class="Code">vc9</em>,
+ and <em class="Code">vc10</em> project types.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">no_pch</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ It specifies that precompiled
+ headers should not be used for the source files listed
+ within the scope of it&rsquo;s setting. This keyword
+ can only be used as a source component scoped setting
+ (i.e., inside the scope of Source_Files).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pch_header</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The name of the precompiled header
+ file. See the discussion below this table for more
+ information.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pch_source</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The name of the precompiled source
+ file. See the discussion below this table for more
+ information.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">postbuild</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is defined in the project,
+ the value will be interpreted as commands to run after
+ the project has been successfully built. The <em class=
"Code">&lt;% %&gt;</em> construct (see <a href=
- "MakeProjectCreator.html#MPD%20Syntax" class=
+ "MakeProjectCreator.html#MPD_Syntax" class=
"XRef">Template Files</a>) can be used within this
- value to access template variables and functions of the
- template parser. See <a href=
- "#Common%20Pseudo%20Variables" class="XRef">Common
- Pseudo Variables</a> for a list of pseudo variables
- that are also available.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">postclean</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is defined in the project,
- the value will be interpreted as commands to run after
- the project has been cleaned. It should be noted that
- this setting is not supported by all project types. As
- with <em class="Code">postbuild</em>, the <em class=
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common_Pseudo_Variables" class="XRef">
+ Common
+ Pseudo Variables
+ </a> for a list of pseudo variables
+ that are also available.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">postclean</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is defined in the project,
+ the value will be interpreted as commands to run after
+ the project has been cleaned. It should be noted that
+ this setting is not supported by all project types. As
+ with <em class="Code">postbuild</em>, the <em class=
"Code">&lt;% %&gt;</em> construct (see <a href=
- "MakeProjectCreator.html#MPD%20Syntax" class=
+ "MakeProjectCreator.html#MPD_Syntax" class=
"XRef">Template Files</a>) can be used within this
- value to access template variables and functions of the
- template parser. See <a href=
- "#Common%20Pseudo%20Variables" class="XRef">Common
- Pseudo Variables</a> for a list of pseudo variables
- that are also available.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">prebuild</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is defined in the project,
- the value will be interpreted as commands to run before
- the project has been built. As with <em class=
- "Code">postbuild</em>, the <em class="Code">&lt;%
- %&gt;</em> construct (see <a href=
- "MakeProjectCreator.html#MPD%20Syntax" class=
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common_Pseudo_Variables" class="XRef">
+ Common
+ Pseudo Variables
+ </a> for a list of pseudo variables
+ that are also available.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">prebuild</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is defined in the project,
+ the value will be interpreted as commands to run before
+ the project has been built. As with <em class=
+ "Code">postbuild</em>, the <em class="Code">
+ &lt;%
+ %&gt;
+ </em> construct (see <a href=
+ "MakeProjectCreator.html#MPD_Syntax" class=
"XRef">Template Files</a>) can be used within this
- value to access template variables and functions of the
- template parser. See <a href=
- "#Common%20Pseudo%20Variables" class="XRef">Common
- Pseudo Variables</a> for a list of pseudo variables
- that are also available.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pure_libs</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is similar to <em class=
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common_Pseudo_Variables" class="XRef">
+ Common
+ Pseudo Variables
+ </a> for a list of pseudo variables
+ that are also available.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pure_libs</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is similar to <em class=
"Code">lit_libs</em> except that no prefix or extension
- is added to the names specified.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">recurse</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If set to 1, MPC will recurse into
- directories listed under component listings (such as
- Source_Files, Header_Files, etc.) and add any component
- corresponding files to the list. This keyword can be
- used as a global project setting or a component scoped
- setting.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">recursive_includes</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is similar to <em class=
+ is added to the names specified.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">recurse</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If set to 1, MPC will recurse into
+ directories listed under component listings (such as
+ Source_Files, Header_Files, etc.) and add any component
+ corresponding files to the list. This keyword can be
+ used as a global project setting or a component scoped
+ setting.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">recursive_includes</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is similar to <em class=
"Code">includes</em> in that it provides include paths
- to the compiler. However, each path supplied will be
- recursively searched for sub-directories which will
- also be provided as include paths to the compiler.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">recursive_libpaths</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is similar to <em class=
+ to the compiler. However, each path supplied will be
+ recursively searched for sub-directories which will
+ also be provided as include paths to the compiler.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">recursive_libpaths</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is similar to <em class=
"Code">libpaths</em> in that it provides library search
- paths to the linker. However, each path supplied will
- be recursively searched for sub-directories which will
- also be provided as library search paths to the
- linker.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">requires</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies which features should be
- enabled in order to generate the project file. Under
- the GNUACE type, it also specifies which make macros
- should be set to build the target.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">sharedname</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Determines that the project will be
- a library and the name of the dynamic library target.
- See the discussion below this table for more
- information.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">staticflags</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies preprocessor flags passed
- to the compiler when building a static library.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="Bold"><em class=
- "TableCode">staticname</em></em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Determines that the project will be
- a library and the name of the static library
- target.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">tagchecks</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">For GNUACE Make only, specifies one
- or more names to search for in the macros specified by
- tagname.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">tagname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies the GNUACE Make macro to
- check before building the target.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">version</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Specifies the version number for
- the library or executable.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">webapp</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Determines whether the project is a
- Web Application. A web application project will have no
- project file written but the information will be
- included in the workspace if web applications are
- supported by the project type.</p>
- </td>
- </tr>
- </table>
- </li>
-
- <li class="BodyNoLead">Assignments can also use the <em class=
+ paths to the linker. However, each path supplied will
+ be recursively searched for sub-directories which will
+ also be provided as library search paths to the
+ linker.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">requires</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies which features should be
+ enabled in order to generate the project file. Under
+ the GNUACE type, it also specifies which make macros
+ should be set to build the target.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">sharedname</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Determines that the project will be
+ a library and the name of the dynamic library target.
+ See the discussion below this table for more
+ information.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">staticflags</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies preprocessor flags passed
+ to the compiler when building a static library.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="Bold">
+ <em class=
+ "TableCode">staticname</em>
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Determines that the project will be
+ a library and the name of the static library
+ target.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">tagchecks</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ For GNUACE Make only, specifies one
+ or more names to search for in the macros specified by
+ tagname.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">tagname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies the GNUACE Make macro to
+ check before building the target.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">version</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Specifies the version number for
+ the library or executable.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">webapp</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Determines whether the project is a
+ Web Application. A web application project will have no
+ project file written but the information will be
+ included in the workspace if web applications are
+ supported by the project type.
+ </p>
+ </td>
+ </tr>
+ </table>
+
+ </p>
+
+ <p class="Body">
+ Assignments can also use the <em class=
"Code">+=</em> and <em class="Code">-=</em> operators to add
- and subtract values from keyword values.</li>
-
- <li class="Body">If a <em class="Code">sharedname</em> is
- specified in the mpc file and <em class="Code">staticname</em>
- is not used, then <em class="Code">staticname</em> is assumed
- to be the same as <em class="Code">sharedname</em>. This also
- applies in the opposite direction.</li>
-
- <li class="Body">If neither exename, sharedname nor staticname
- is specified, MPC will search the source files for a <em class=
+ and subtract values from keyword values.
+ </p>
+
+ <p class="Body">
+ Assignments can be bracketed by curly braces
+ so they can span multiple lines. The opening curly brace must
+ be the last thing on the same line as the operator and the closing
+ brace must be on its own line (but can have leading white space).
+ Optionally, \n, \s, or \ns can be included after the operator. These
+ indicate that new lines should be retained (\n) and leading white space
+ should be retained (\s).
+ </p>
+
+ <blockquote>
+
+ <p class="Code">specific(rpmspec) {</p>
+ <p class="Code">&nbsp;rpm_description = \ns {</p>
+ <p class="Code">This description</p>
+ <p class="Code">spans multiple lines.</p>
+ <p class="Code">&nbsp;}</p>
+ <p class="Code">}</p>
+
+ </blockquote>
+
+ <p class="Body">
+ If a <em class="Code">sharedname</em> is
+ specified in the mpc file and <em class="Code">staticname</em>
+ is not used, then <em class="Code">staticname</em> is assumed
+ to be the same as <em class="Code">sharedname</em>. This also
+ applies in the opposite direction.
+ </p>
+
+ <p class="Body">
+ If neither exename, sharedname nor staticname
+ is specified, MPC will search the source files for a <em class=
"Code">main</em> function. If a <em class="Code">main</em> is
- found, the exename will be set to the name of the file, minus
- the extension, that contained the <em class="Code">main</em>
- function. Otherwise, sharedname and staticname will be set to
- the project name.</li>
-
- <li class="Body">If the project name, exename, sharedname or
- staticname contain an asterisk it instructs MPC to dynamically
- determine a portion of the name based on certain defaults. If
- the project name contains an asterisk, then the asterisk will
- be replaced with the default project name. If exename,
- sharedname or staticname contains an asterisk, then the
- asterisk will be replaced with the project name.</li>
-
- <li class="Body">If the <em class="Code">pch_header</em>
- keyword is not used and a file exists, in the directory in
- which the mpc file is located, that matches <em class=
+ found, the exename will be set to the name of the file, minus
+ the extension, that contained the <em class="Code">main</em>
+ function. Otherwise, sharedname and staticname will be set to
+ the project name.
+ </p>
+
+ <p class="Body">
+ If the project name, exename, sharedname or
+ staticname contain an asterisk it instructs MPC to dynamically
+ determine a portion of the name based on certain defaults. If
+ the project name contains an asterisk, then the asterisk will
+ be replaced with the default project name. If exename,
+ sharedname or staticname contains an asterisk, then the
+ asterisk will be replaced with the project name.
+ </p>
+
+ <p class="Body">
+ If the <em class="Code">pch_header</em>
+ keyword is not used and a file exists, in the directory in
+ which the mpc file is located, that matches <em class=
"Code">*_pch.h</em> it is assumed to be the precompiled header
- for that directory. If there are multiple pch files in the
- directory, then the precompiled header that closely matches the
- project name will be chosen. Similar logic applies for the
- <em class="Code">pch_source</em> keyword.</li>
- </ul>
- </div>
+ for that directory. If there are multiple pch files in the
+ directory, then the precompiled header that closely matches the
+ project name will be chosen. Similar logic applies for the
+ <em class="Code">pch_source</em> keyword.
+ </p>
- <div>
- <a name="16907"></a>
+ </div>
+
+ <div>
+ <a name="16907"></a>
- <h6 class="Head5">Components</h6>
+ <h6 class="Head5">Components</h6>
- <ul>
- <li class="BodyNoLead">An mpc file can also specify the files
- to be included in the generated &ldquo;project&rdquo; file.
- These files are specified using the component names shown in
- the following table. However, most of the time users will want
- to allow MPC to provide the default values for project
- files.</li>
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Component Names and Default
- Values</h6>
+ <p class="BodyNoLead">
+ An mpc file can also specify the files
+ to be included in the generated &ldquo;project&rdquo; file.
+ These files are specified using the component names shown in
+ the following table. However, most of the time users will want
+ to allow MPC to provide the default values for project
+ files.
+ </p>
- <table border="1" summary=
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ Component Names and Default
+ Values
+ </h6>
+
+ <table border="1" summary=
"Component Names and Default Values">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Name</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Default Value</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Source_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that have the following extensions:
- <em class="Code">cpp</em>, <em class="Code">cxx</em>,
- <em class="Code">cc</em>, <em class="Code">c</em>, and
- <em class="Code">C</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Header_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that have the following extensions:
- <em class="Code">h</em>, hpp, <em class=
- "Code">hxx</em>, and <em class="Code">hh</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Inline_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that have the following extensions:
- <em class="Code">i</em> and <em class=
- "Code">inl</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Template_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that end in the following: <em class=
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Name</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Default Value</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Source_Files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">cpp</em>, <em class="Code">cxx</em>,
+ <em class="Code">cc</em>, <em class="Code">c</em>, and
+ <em class="Code">C</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Header_Files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">h</em>, hpp, <em class=
+ "Code">hxx</em>, and <em class="Code">hh</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Inline_Files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">i</em> and <em class=
+ "Code">inl</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Template_Files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that end in the following: <em class=
"Code">_T.cpp</em>, <em class="Code">_T.cxx</em>,
- <em class="Code">_T.cc</em>, <em class=
- "Code">_T.c</em>, and <em class="Code">_T.C</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Documentation_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that match the following: <em class=
+ <em class="Code">_T.cc</em>, <em class=
+ "Code">_T.c</em>, and <em class="Code">_T.C</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Documentation_Files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that match the following: <em class=
"Code">README</em>, <em class="Code">readme</em>,
- <em class="Code">.doc</em>, <em class="Code">.html</em>
- and <em class="Code">.txt</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">Resource_Files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Defaults to all files in the
- directory that match the project name and have an
- <em class="Code">rc</em> extension.</p>
- </td>
- </tr>
- </table>
- </li>
+ <em class="Code">.doc</em>, <em class="Code">.html</em>
+ and <em class="Code">.txt</em>.
+ </p>
+ </td>
+ </tr>
- <li class="Body">If a component is not specified in the mpc
- file, the default value will be used. To disallow a particular
- set of files that may exist in the directory, you must declare
- an empty set of the particular component type.</li>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">Resource_Files</em>
+ </p>
+ </td>
- <li class="Body">Each component name accepts two forms. The
- first form is a simple list of files within the construct.</li>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Defaults to all files in the
+ directory that match the project name and have an
+ <em class="Code">rc</em> extension.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Body">
+ If a component is not specified in the mpc
+ file, the default value will be used. To disallow a particular
+ set of files that may exist in the directory, you must declare
+ an empty set of the particular component type.
+ </p>
- <p class="Code">Source_Files {</p>
+ <p class="Body">
+ Each component name accepts two forms. The
+ first form is a simple list of files within the construct.
+ </p>
- <p class="Code">&nbsp;&nbsp;file1.cpp</p>
+ <blockquote>
- <p class="Code">&nbsp;&nbsp;file2.cpp</p>
- <p class="Code">}</p>
+ <p class="Code">Source_Files {</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;file1.cpp</p>
- <li class="Body">The second form is a complex list of files
- within named blocks.</li>
+ <p class="Code">&nbsp;&nbsp;file2.cpp</p>
- <li style="list-style: none">
- <a name="MPC grouping example"></a>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- <p class="Code">Source_Files(MACRO_NAME) {</p>
+ </blockquote>
- <p class="Code">&nbsp;&nbsp;BlockA {</p>
+ <p class="Body">
+ The second form is a complex list of files
+ within named blocks.
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
+ <blockquote>
+ <a name="MPC grouping example"></a>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
- <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;BlockB {</p>
+ <p class="Code">Source_Files(MACRO_NAME) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file3.cpp</p>
+ <p class="Code">&nbsp;&nbsp;BlockA {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file4.cpp</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;BlockB {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file3.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file4.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
- <li class="Body">The second form allows the user to logically
- group the files to make future maintenance easier. Using this
- form has the effect of visually grouping files in the generated
- project file for the <em class="Code">em3</em>, <em class=
+ <p class="Code">}</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ The second form allows the user to logically
+ group the files to make future maintenance easier. Using this
+ form has the effect of visually grouping files in the generated
+ project file for the <em class="Code">em3</em>, <em class=
"Code">gnuace</em>, <em class="Code">vc6</em>, <em class=
"Code">vc7</em>, <em class="Code">vc71</em>, vc8, vc9 and
- <em class="Code">vc10</em> project types.</li>
+ <em class="Code">vc10</em> project types.
+ </p>
- <li class="Body">If a file is listed in the <em class=
+ <p class="Body">
+ If a file is listed in the <em class=
"Code">Source_Files</em> component list and a corresponding
- header or inline file exists in the directory, it is added to
- the corresponding component list unless it is already
- listed.</li>
- </ul>
- </div>
+ header or inline file exists in the directory, it is added to
+ the corresponding component list unless it is already
+ listed.
+ </p>
- <div>
- <h6 class="Head5">Verbatim Clause</h6>
+ </div>
- <ul>
- <li class="BodyNoLead">The <em class="Code">verbatim</em>
- construct can be used to place text into a generated project
- file verbatim. The <em class="Code">verbatim</em> syntax is as
- follows:</li>
+ <div>
+ <h6 class="Head5">Verbatim Clause</h6>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
- <p class="Code">verbatim(&lt;project type&gt;,
- &lt;location&gt;) {</p>
+ <p class="BodyNoLead">
+ The <em class="Code">verbatim</em>
+ construct can be used to place text into a generated project
+ file verbatim. The <em class="Code">verbatim</em> syntax is as
+ follows:
+ </p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <blockquote>
- <p class="Code">}</p>
+ <p class="Code">
+ verbatim(&lt;project type&gt;,
+ &lt;location&gt;) {
+ </p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">}</p>
- <li class="Body">When MPC is generating a project of type
- <em class="Code">&lt;project type&gt;</em> and encounters a
- <em class="Code">marker</em> in the template file (see <a href=
- "MakeProjectCreator.html#38037" class="XRef">Template File
- Keywords</a>) that matches the <em class=
+
+ </blockquote>
+
+ <p class="Body">
+ When MPC is generating a project of type
+ <em class="Code">&lt;project type&gt;</em> and encounters a
+ <em class="Code">marker</em> in the template file (see <a href=
+ "MakeProjectCreator.html#38037" class="XRef">
+ Template File
+ Keywords
+ </a>) that matches the <em class=
"Code">&lt;location&gt;</em> name, it will place the text found
- inside the construct directly into the generated project. If
- the text inside the construct requires that white space be
- preserved, each line must be enclosed in double quotes. The
- following <em class="Code">verbatim</em> example would result
- in <em class="Code">gnuace</em> generated projects having a
- rule at the bottom of the GNUmakefile where the <em class=
+ inside the construct directly into the generated project. If
+ the text inside the construct requires that white space be
+ preserved, each line must be enclosed in double quotes. The
+ following <em class="Code">verbatim</em> example would result
+ in <em class="Code">gnuace</em> generated projects having a
+ rule at the bottom of the GNUmakefile where the <em class=
"Code">all:</em> target depends on <em class=
- "Code">foo</em>.</li>
+ "Code">foo</em>.
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
+
+ <p class="Code">verbatim(gnuace, bottom) {</p>
- <p class="Code">verbatim(gnuace, bottom) {</p>
+ <p class="Code">&nbsp;&nbsp;all: foo</p>
- <p class="Code">&nbsp;&nbsp;all: foo</p>
+ <p class="Code">}</p>
+ </blockquote>
+
+ </div>
+
+ <div>
+ <h6 class="Head5">Expand Clause</h6>
+
+
+ <p class="BodyNoLead">
+ The <em class="Code">expand</em> keyword
+ can be used to provide values for variable names enclosed
+ within <em class="Code">$()</em>. In the example below, we see
+ the name <em class="Code">VAR_NAME</em> inside the parenthesis.
+ Whenever MPC sees <em class="Code">$(VAR_NAME)</em> it will
+ attempt to replace it with values from the expansion list. MPC
+ will first try to replace it with the value of the environment
+ variable named <em class="Code">ENV_VAR</em>. If that
+ environment variable has a value, it will be used. Otherwise,
+ it will continue down the list until a suitable value is found.
+ In this example, the text <em class=
+ "Code">last_resort_value</em> will be used. MPC will leave the
+ <em class="Code">$()</em> value as it was in the event that no
+ value is found.
+ </p>
- <p class="Code">}</p>
- </li>
- </ul>
- </div>
+ <blockquote>
+
+ <p class="Code">expand(VAR_NAME) {</p>
- <div>
- <h6 class="Head5">Expand Clause</h6>
-
- <ul>
- <li class="BodyNoLead">The <em class="Code">expand</em> keyword
- can be used to provide values for variable names enclosed
- within <em class="Code">$()</em>. In the example below, we see
- the name <em class="Code">VAR_NAME</em> inside the parenthesis.
- Whenever MPC sees <em class="Code">$(VAR_NAME)</em> it will
- attempt to replace it with values from the expansion list. MPC
- will first try to replace it with the value of the environment
- variable named <em class="Code">ENV_VAR</em>. If that
- environment variable has a value, it will be used. Otherwise,
- it will continue down the list until a suitable value is found.
- In this example, the text <em class=
- "Code">last_resort_value</em> will be used. MPC will leave the
- <em class="Code">$()</em> value as it was in the event that no
- value is found.</li>
+ <p class="Code">&nbsp;&nbsp;$ENV_VAR</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;last_resort_value</p>
- <p class="Code">expand(VAR_NAME) {</p>
+ <p class="Code">}</p>
+ </blockquote>
- <p class="Code">&nbsp;&nbsp;$ENV_VAR</p>
+ </div>
- <p class="Code">&nbsp;&nbsp;last_resort_value</p>
+ <div>
+ <h6 class="Head5">
+ <a name="projectSpecific">Specific Clause</a>
+ </h6>
- <p class="Code">}</p>
- </li>
- </ul>
- </div>
- <div>
- <h6 class="Head5"><a name="projectSpecific">Specific Clause</a></h6>
-
- <ul>
- <li class="BodyNoLead">The <em class="Code">specific</em>
- keyword can be used to define assignments that are specific to
- a particular project type or property specified in the
- parenthesis. This will allow platform or OS-specific values to
- be placed into a project. For example, on one platform you may
- want to link in a library named <em class="Code">qt-mt</em>,
- but on another you need to link in <em class=
- "Code">qt-mt230nc</em>.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="BodyNoLead">
+ The <em class="Code">specific</em>
+ keyword can be used to define assignments that are specific to
+ a particular project type or property specified in the
+ parenthesis. This will allow platform or OS-specific values to
+ be placed into a project. For example, on one platform you may
+ want to link in a library named <em class="Code">qt-mt</em>,
+ but on another you need to link in <em class=
+ "Code">qt-mt230nc</em>.
+ </p>
- <p class="Code">specific(prop:windows) {</p>
+ <blockquote>
- <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt230nc</p>
- <p class="Code">} else {</p>
+ <p class="Code">specific(prop:windows) {</p>
- <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt</p>
+ <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt230nc</p>
- <p class="Code">}</p>
+ <p class="Code">} else {</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt</p>
+
+ <p class="Code">}</p>
+
+
+ </blockquote>
- <li class="Body">If an else clause is provided, it is required
- to be on the same line as the closing curly brace. You may also
- negate the project type or property (using &rsquo;!&rsquo;)
- which will cause the specific to be evaluated for all types
- except the type specified.</li>
+ <p class="Body">
+ If an else clause is provided, it is required
+ to be on the same line as the closing curly brace. You may also
+ negate the project type or property (using &rsquo;!&rsquo;)
+ which will cause the specific to be evaluated for all types
+ except the type specified.
+ </p>
- <li class="Body">If a keyword used within a <em class=
+ <p class="Body">
+ If a keyword used within a <em class=
"Code">specific</em> section is not recognized as a valid MPC
- keyword, it is interpreted to be template value modifier. In
- this situation, this construct works exactly the same way as
- the <em class="Code">-value_template</em> command line option
- (see <a href="MakeProjectCreator.html#Command%20Line%20Options"
- class="XRef">Command Line Options</a>).</li>
-
- <a name="properties">
- <li class="Body">The following table shows which properties
- apply to which project types. The <em class="Code">static</em>
- property (not represented in the table) is set if the -static
- option is supplied when processing the project files.
- Additionally, a property that corresponds to the language
- will be set (e.g., cplusplus, csharp, java, vb).</li>
-
- <li class="Body">
- <h6 class="NumberedTableTitle"><a name=
- "Property Table"></a>Property Table</h6>
-
- <table border="1" summary="Property Table">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Project Type</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">borland</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">make</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">microsoft</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">windows</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">automake</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">bcb2007</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">bcb2009</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">bds4</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">bmake</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">cc</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">em3</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">ghs</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Depends</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">make</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">nmake</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc6</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc7</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc71</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc8</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc9</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vc10</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">wix</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">&nbsp;</p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Yes</p>
- </td>
- </tr>
- </table>
- </li>
+ keyword, it is interpreted to be template value modifier. In
+ this situation, this construct works exactly the same way as
+ the <em class="Code">-value_template</em> command line option
+ (see <a href="MakeProjectCreator.html#Command%20Line%20Options"
+ class="XRef">Command Line Options</a>).
+ </p>
+
+ <a name="properties">
+ <p class="Body">
+ The following table shows which properties
+ apply to which project types. The <em class="Code">static</em>
+ property (not represented in the table) is set if the -static
+ option is supplied when processing the project files.
+ Additionally, a property that corresponds to the language
+ will be set (e.g., cplusplus, csharp, java, vb).
+ </p>
+
+ <p class="Body">
+ <h6 class="NumberedTableTitle">
+ <a name=
+ "Property_Table"></a>Property Table
+ </h6>
+
+ <p class="Body">
+ <table border="1" summary="Property Table">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Project Type</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">borland</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">make</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">microsoft</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">windows</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">automake</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">bcb2007</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">bcb2009</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">bds4</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">bmake</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">cc</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">em3</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">ghs</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Depends</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">make</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">nmake</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc6</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc7</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc71</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc8</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc9</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vc10</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">wix</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+ </table>
+ </p>
+ </p>
+
+ <p class="Body">
+ The ghs project type can be used on both
+ Windows and UNIX. The windows property will be active if the
+ <em class="Code">MPC_GHS_UNIX</em> environment variable is not
+ set during project generation.
+ </p>
- <li class="Body">The ghs project type can be used on both
- Windows and UNIX. The windows property will be active if the
- <em class="Code">MPC_GHS_UNIX</em> environment variable is not
- set during project generation.</li>
- </ul>
- </div>
+ </div>
- <div>
- <h6 class="Head5">Conditional Clause</h6>
+ <div>
+ <h6 class="Head5">Conditional Clause</h6>
- <ul>
- <li class="Body">This scope allows addition of source files
- conditionally based on a particular project type or property
- (see the <a href="#Property%20Table" class="XRef">property
- table</a>). The syntax is as follows:</li>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Body">
+ This scope allows addition of source files
+ conditionally based on a particular project type or property
+ (see the <a href="#Property_Table" class="XRef">
+ property
+ table
+ </a>). The syntax is as follows:
+ </p>
- <p class="Code">conditional(&lt;project type|property&gt; [,
- &lt;project type|property&gt; ...]) {</p>
+ <blockquote>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;source1.cpp</p>
+ <p class="Code">
+ conditional(&lt;project type|property&gt; [,
+ &lt;project type|property&gt; ...]) {
+ </p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <p class="Code">&nbsp;&nbsp;source1.cpp</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;...</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">}</p>
- <p class="Code">conditional(&lt;project type|property&gt; [,
- &lt;project type|property&gt; ...]) {</p>
- <p class="Code">&nbsp;&nbsp;source1.cpp</p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <p class="Code">
+ conditional(&lt;project type|property&gt; [,
+ &lt;project type|property&gt; ...]) {
+ </p>
- <p class="Code">} else {</p>
+ <p class="Code">&nbsp;&nbsp;source1.cpp</p>
- <p class="Code">&nbsp;&nbsp;source2.cpp</p>
+ <p class="Code">&nbsp;&nbsp;...</p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <p class="Code">} else {</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;source2.cpp</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;...</p>
- <li class="Body">If the else is provided, it is required to be
- on the same line as the closing curly brace. You may also
- negate the project type (using &rsquo;!&rsquo;) which will
- cause the conditional to be evaluated for all types except the
- type specified.</li>
- </ul>
- </div>
+ <p class="Code">}</p>
- <div>
- <a name="Custom Types and Build Rules"></a>
- <h6 class="Head5">Custom Types and Build Rules</h6>
+ </blockquote>
- <ul>
- <li class="BodyNoLead">MPC allows you to define your own custom
- file types to support a variety of custom build rules. Below is
- an example of a custom definition.</li>
+ <p class="Body">
+ If the else is provided, it is required to be
+ on the same line as the closing curly brace. You may also
+ negate the project type (using &rsquo;!&rsquo;) which will
+ cause the conditional to be evaluated for all types except the
+ type specified.
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ </div>
- <p class="Code">project {</p>
+ <div>
+ <a name="Custom_Types_and_Build_Rules"></a>
- <p class="Code">&nbsp;&nbsp;Define_Custom(MOC) {</p>
+ <h6 class="Head5">Custom Types and Build Rules</h6>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;automatic = 0</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;command =
- $(QTDIR)/bin/moc</p>
+ <p class="Body">
+ MPC allows you to define your own custom
+ file types to support a variety of custom build rules. Below is
+ an example of a custom definition.
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;output_option =
- -o</p>
+ <blockquote>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inputext = .h</p>
+ <p class="Code">project {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;pre_extension =
- _moc</p>
+ <p class="Code">&nbsp;&nbsp;Define_Custom(MOC) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;source_outputext =
- .cpp</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;automatic = 0</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;keyword mocflags =
- commandflags</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;command =
+ $(QTDIR)/bin/moc
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;output_option =
+ -o
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inputext = .h</p>
- <p class="Code">&nbsp;&nbsp;// Custom Component</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;pre_extension =
+ _moc
+ </p>
- <p class="Code">&nbsp;&nbsp;MOC_Files {</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;source_outputext =
+ .cpp
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor.h</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;keyword mocflags =
+ commandflags
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+ <p class="Code">&nbsp;&nbsp;// Custom Component</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor_moc.cpp</p>
+ <p class="Code">&nbsp;&nbsp;MOC_Files {</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor.h</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
- <li class="Body">The above example defines a custom file type,
- &ldquo;<em class="Code">MOC</em> &rdquo;, that describes basic
- information about how to process the input files and what
- output files are created. Once the custom file type is defined,
- <em class="Code">MOC_Files</em> can be used to specify the
- input files for this new file type.</li>
-
- <li class="Body">Define_Custom definitions may use single
- inheritance. This is useful for creating aliased names:
- <p class="Code">Define_Custom(QtMOC) : MOC {</p>
- <p class="Code">}</p>
- </li>
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor_moc.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
- <li class="Body">The following table contains the keywords that
- can be used within the scope of <em class=
- "Code">Define_Custom</em>.</li>
-
- <li style="list-style: none">
- <a name="32899"></a>
-
- <h6 class="NumberedTableTitle">Define_Custom Keywords</h6>
-
- <table border="1" summary="Define_Custom Keywords">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Keyword</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">automatic_in</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If set to 1, then attempt to
- automatically determine which files belong to the set
- of input files for the custom type. If set to 0, then
- no files are automatically added to the input
- files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">automatic_out</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If set to 1, then attempt to
- automatically determine which generated files belong to
- the set of components (<em class=
+ <p class="Code">&nbsp;</p>
+ </blockquote>
+
+ <p class="Body">
+ The above example defines a custom file type,
+ &ldquo;<em class="Code">MOC</em> &rdquo;, that describes basic
+ information about how to process the input files and what
+ output files are created. Once the custom file type is defined,
+ <em class="Code">MOC_Files</em> can be used to specify the
+ input files for this new file type.
+ </p>
+
+ <p class="Body">
+ Define_Custom definitions may use single
+ inheritance. This is useful for creating aliased names:
+ </p>
+ <blockquote>
+ <p class="Code">Define_Custom(QtMOC) : MOC {</p>
+ <p class="Code">}</p>
+ </blockquote>
+
+ <p class="Body">
+ The following table contains the keywords that
+ can be used within the scope of <em class=
+ "Code">Define_Custom</em>.
+ </p>
+
+ <p style="list-style: none">
+ <a name="32899"></a>
+
+ <h6 class="NumberedTableTitle">Define_Custom Keywords</h6>
+
+ <p class="Body">
+ <table border="1" summary="Define_Custom Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">automatic_in</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If set to 1, then attempt to
+ automatically determine which files belong to the set
+ of input files for the custom type. If set to 0, then
+ no files are automatically added to the input
+ files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">automatic_out</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If set to 1, then attempt to
+ automatically determine which generated files belong to
+ the set of components (<em class=
"Code">Source_Files</em>, <em class=
"Code">Inline_Files</em> , <em class=
"Code">Header_Files</em>, <em class=
"Code">Template_Files</em>, <em class=
"Code">Resource_Files</em> and <em class=
"Code">Documentation_Files</em>) based on type files
- that the command generates. If omitted, then
- automatic_out is assumed to be 1.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The name of the command that should
- be used to process the input files for the custom
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">commandflags</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Any options that should be passed
- to the command.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dependent</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is given a value, then a
- dependency upon that value will be given to all of the
- generated files. The default for this is unset and no
- dependency will be generated.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dependent_libs</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is given a value, then a dependency upon that
- library value will be given to all of the generated files.
- The format for this entry should be the basename for the
- library (no library prefix, postfix, or extension)
- preceded by any relative or absolute path to the library.
- The typical use for this would be so that a project is
- rebuilt when a library needs to be rebuilt for its
- dependent executable. The default for this is unset and no
- dependency will be generated.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- input file extensions that belong to the command.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">keyword
- &lt;name&gt;</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a special assignment that
- allows the user to map &lt;name&gt; into the project
- level namespace. The value (if any) that is assigned to
- this construct must be one of the keywords that can be
- used within a Define_Custom clause. The result of this
- assignment is the ability modify the value of keywords
- that are normally only accessible within the scope of a
- custom component (e.g. <em class="Code">command</em>,
- <em class="Code">commandflags</em>, etc.).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">libpath</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If the command requires a library
- that is not in the normal library search path, this
- keyword can be used to ensure that the command is able
- to find the library that it needs to run.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">output_option</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If the command takes an option to
- specify a single file output name, then set it here.
- Otherwise, this should be omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">output_follows_input</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This setting defaults to 1 and
- indicates that output files from the custom command
- will end up in the same directory as the input files.
- If this is set to 0, it is assumed that the output
- files will go into the same directory as the .mpc
- file.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pch_postrule</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If this is set to 1, then a rule
- will be added to the custom rule that will modify the
- source output files to include the precompiled header
- file.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">postcommand</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This allows users to create
- arbitrary commands that will be run after the main
- command is run to process the custom input files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If the command produces multiple
- files of the same extension, this comma separated list
- can be used to specify them. For example, <em class=
+ that the command generates. If omitted, then
+ automatic_out is assumed to be 1.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The name of the command that should
+ be used to process the input files for the custom
+ type.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">commandflags</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Any options that should be passed
+ to the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dependent</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is given a value, then a
+ dependency upon that value will be given to all of the
+ generated files. The default for this is unset and no
+ dependency will be generated.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dependent_libs</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is given a value, then a dependency upon that
+ library value will be given to all of the generated files.
+ The format for this entry should be the basename for the
+ library (no library prefix, postfix, or extension)
+ preceded by any relative or absolute path to the library.
+ The typical use for this would be so that a project is
+ rebuilt when a library needs to be rebuilt for its
+ dependent executable. The default for this is unset and no
+ dependency will be generated.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ input file extensions that belong to the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">
+ keyword
+ &lt;name&gt;
+ </em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a special assignment that
+ allows the user to map &lt;name&gt; into the project
+ level namespace. The value (if any) that is assigned to
+ this construct must be one of the keywords that can be
+ used within a Define_Custom clause. The result of this
+ assignment is the ability modify the value of keywords
+ that are normally only accessible within the scope of a
+ custom component (e.g. <em class="Code">command</em>,
+ <em class="Code">commandflags</em>, etc.).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">libpath</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If the command requires a library
+ that is not in the normal library search path, this
+ keyword can be used to ensure that the command is able
+ to find the library that it needs to run.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">output_option</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If the command takes an option to
+ specify a single file output name, then set it here.
+ Otherwise, this should be omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">output_follows_input</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This setting defaults to 1 and
+ indicates that output files from the custom command
+ will end up in the same directory as the input files.
+ If this is set to 0, it is assumed that the output
+ files will go into the same directory as the .mpc
+ file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pch_postrule</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If this is set to 1, then a rule
+ will be added to the custom rule that will modify the
+ source output files to include the precompiled header
+ file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">postcommand</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This allows users to create
+ arbitrary commands that will be run after the main
+ command is run to process the custom input files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If the command produces multiple
+ files of the same extension, this comma separated list
+ can be used to specify them. For example, <em class=
"Code">tao_idl</em> creates two types of files per
- extension (<em class="Code">C.h</em>, <em class=
+ extension (<em class="Code">C.h</em>, <em class=
"Code">S.h</em>, <em class="Code">C.cpp</em>,
- <em class="Code">S.cpp</em>, etc.) This applies to all
- extension types.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to source files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inline_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to inline files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">header_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to header files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">template_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to template files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">resource_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to resource files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">documentation_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to documentation files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">generic_pre_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_extension
- except that it only applies to generic files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The syntax for this is the same as
- <em class="Code">pre_extension</em>, but the values
- specified are prepended to the file name instead of the
- extension. This applies to all extension types.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to source files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inline_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to inline files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">header_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to header files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">template_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to template files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">resource_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to resource files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">documentation_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to documentation files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">generic_pre_filename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_filename
- except that it only applies to generic files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The syntax for this is the same as
- <em class="Code">pre_filename</em>, but the value
- specified is prepended to the directory portion of the
- file name instead of the file name itself. If a
- separate directory is desired, the <em class=
+ <em class="Code">S.cpp</em>, etc.) This applies to all
+ extension types.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to source files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inline_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to inline files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">header_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to header files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">template_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to template files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">resource_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to resource files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">documentation_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to documentation files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">generic_pre_extension</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_extension
+ except that it only applies to generic files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The syntax for this is the same as
+ <em class="Code">pre_extension</em>, but the values
+ specified are prepended to the file name instead of the
+ extension. This applies to all extension types.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to source files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inline_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to inline files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">header_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to header files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">template_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to template files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">resource_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to resource files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">documentation_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to documentation files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">generic_pre_filename</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_filename
+ except that it only applies to generic files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The syntax for this is the same as
+ <em class="Code">pre_filename</em>, but the value
+ specified is prepended to the directory portion of the
+ file name instead of the file name itself. If a
+ separate directory is desired, the <em class=
"Code">pre_dirname</em> setting should end in a
- slash.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to source files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inline_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to inline files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">header_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to header files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">template_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to template files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">resource_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to resource files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">documentation_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to documentation files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">generic_pre_dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is the same as pre_dirname
- except that it only applies to generic files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible source file output extensions. If the command
- does not produce source files, then this can be
- omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inline_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible inline file output extensions. If the command
- does not produce inline files, then this can be
- omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">header_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible header file output extensions. If the command
- does not produce header files, then this can be
- omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">template_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible template file output extensions. If the
- command does not produce template files, then this can
- be omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">resource_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible resource file output extensions. If the
- command does not produce resource files, then this can
- be omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">documentation_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is a comma separated list of
- possible documentation file output extensions. If the
- command does not produce documentation files, then this
- can be omitted.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">generic_outputext</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">If the command does not generate
- any of the other output types listed above, then the
- extensions should be listed under this.</p>
- </td>
- </tr>
- </table>
- </li>
-
- <li class="Body">There is a special interaction between custom
- components and the source, header and inline components. If a
- <em class="Code">custom</em> definition is set to be
- &ldquo;automatic&rdquo; and custom component files are present
- but not specified, the default custom generated names are added
- to the source, header and inline component lists unless those
- names are already listed (or partially listed) in those
- component lists. See <a href=
- "MakeProjectCreator.html#Custom%20Types%20and%20Build%20Rules"
+ slash.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to source files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inline_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to inline files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">header_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to header files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">template_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to template files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">resource_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to resource files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">documentation_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to documentation files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">generic_pre_dirname</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is the same as pre_dirname
+ except that it only applies to generic files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible source file output extensions. If the command
+ does not produce source files, then this can be
+ omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inline_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible inline file output extensions. If the command
+ does not produce inline files, then this can be
+ omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">header_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible header file output extensions. If the command
+ does not produce header files, then this can be
+ omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">template_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible template file output extensions. If the
+ command does not produce template files, then this can
+ be omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">resource_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible resource file output extensions. If the
+ command does not produce resource files, then this can
+ be omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">documentation_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This is a comma separated list of
+ possible documentation file output extensions. If the
+ command does not produce documentation files, then this
+ can be omitted.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">generic_outputext</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ If the command does not generate
+ any of the other output types listed above, then the
+ extensions should be listed under this.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+ </p>
+
+ <p class="Body">
+ There is a special interaction between custom
+ components and the source, header and inline components. If a
+ <em class="Code">custom</em> definition is set to be
+ &ldquo;automatic&rdquo; and custom component files are present
+ but not specified, the default custom generated names are added
+ to the source, header and inline component lists unless those
+ names are already listed (or partially listed) in those
+ component lists. See <a href=
+ "MakeProjectCreator.html#Custom_Types_and_Build_Rules"
class="XRef">Custom Types and Build Rules</a> for more
- information about defining your own custom type.</li>
-
- <li class="Body">Particular output extensions for custom build
- types are not required. However, at least one output extension
- type is required for MPC to generate a target. Your command
- does not necessarily have to generate output, but an extension
- type is required if you want the input file to be processed
- during the project compilation.</li>
-
- <li class="Body">If the custom output can not be represented
- with the above output extension keywords (*_outputext) and you
- have knowledge of the output files <em class="Emphasis">a
- priori</em>, you can represent them with the <em class=
- "Code">&gt;&gt;</em> construct.</li>
-
- <li class="Body">Below is an example that demonstrates the use
- of <em class="Code">&gt;&gt;</em>. The command takes an input
- file name of foo.prp and produces two files that have
- completely unrelated filenames, <em class="Code">hello.h</em>
- and <em class="Code">hello.cpp</em>.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">project {</p>
+ information about defining your own custom type.
+ </p>
+
+ <p class="Body">
+ Particular output extensions for custom build
+ types are not required. However, at least one output extension
+ type is required for MPC to generate a target. Your command
+ does not necessarily have to generate output, but an extension
+ type is required if you want the input file to be processed
+ during the project compilation.
+ </p>
+
+ <p class="Body">
+ If the custom output can not be represented
+ with the above output extension keywords (*_outputext) and you
+ have knowledge of the output files <em class="Emphasis">
+ a
+ priori
+ </em>, you can represent them with the <em class=
+ "Code">&gt;&gt;</em> construct.
+ </p>
+
+ <p class="Body">
+ Below is an example that demonstrates the use
+ of <em class="Code">&gt;&gt;</em>. The command takes an input
+ file name of foo.prp and produces two files that have
+ completely unrelated filenames, <em class="Code">hello.h</em>
+ and <em class="Code">hello.cpp</em>.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">project {</p>
+
+ <p class="Code">&nbsp;&nbsp;Define_Custom(Quogen) {</p>
+
+ <p class="Code">&nbsp;&nbsp;automatic = 0</p>
+
+ <p class="Code">&nbsp;&nbsp;command = perl quogen.pl</p>
- <p class="Code">&nbsp;&nbsp;Define_Custom(Quogen) {</p>
-
- <p class="Code">&nbsp;&nbsp;automatic = 0</p>
-
- <p class="Code">&nbsp;&nbsp;command = perl quogen.pl</p>
-
- <p class="Code">&nbsp;&nbsp;commandflags = --debuglevel=1
- --language=c++ \</p>
+ <p class="Code">
+ &nbsp;&nbsp;commandflags = --debuglevel=1
+ --language=c++ \
+ </p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--kernel_language=c++</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--kernel_language=c++
+ </p>
- <p class="Code">&nbsp;&nbsp;inputext = .prp</p>
+ <p class="Code">&nbsp;&nbsp;inputext = .prp</p>
- <p class="Code">&nbsp;&nbsp;keyword quogenflags =
- commandflags</p>
+ <p class="Code">
+ &nbsp;&nbsp;keyword quogenflags =
+ commandflags
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;Quogen_Files {</p>
+ <p class="Code">&nbsp;&nbsp;Quogen_Files {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;foo.prp &gt;&gt;
- hello.h hello.cpp</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;foo.prp &gt;&gt;
+ hello.h hello.cpp
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;hello.cpp</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;hello.cpp</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <li class="Body">You can use the <em class="Code">&lt;&lt;</em>
- construct to represent dependencies for specific custom input
- file. For instance, in the above example, assume that foo.prp
- depends upon foo.in, we would represent this by adding
- <em class="Code">&lt;&lt;</em> foo.in as shown below.</li>
+ <p class="Body">
+ You can use the <em class="Code">&lt;&lt;</em>
+ construct to represent dependencies for specific custom input
+ file. For instance, in the above example, assume that foo.prp
+ depends upon foo.in, we would represent this by adding
+ <em class="Code">&lt;&lt;</em> foo.in as shown below.
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">Quogen_Files {</p>
+ <p class="Code">Quogen_Files {</p>
- <p class="Code">&nbsp;&nbsp;foo.prp &gt;&gt; hello.h
- hello.cpp &lt;&lt; foo.in</p>
+ <p class="Code">
+ &nbsp;&nbsp;foo.prp &gt;&gt; hello.h
+ hello.cpp &lt;&lt; foo.in
+ </p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <li class="Body">An additional construct can be used within the
- scope of a <em class="Code">Define_Custom</em>. This construct
- is called <em class="Code">optional</em>, and can be used to
- represent optional custom command output that is dependent upon
- particular command line parameters passed to the custom
- command.</li>
+ <p class="Body">
+ An additional construct can be used within the
+ scope of a <em class="Code">Define_Custom</em>. This construct
+ is called <em class="Code">optional</em>, and can be used to
+ represent optional custom command output that is dependent upon
+ particular command line parameters passed to the custom
+ command.
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">project {</p>
+ <p class="Code">project {</p>
- <p class="Code">&nbsp;&nbsp;Define_Custom(TEST) {</p>
+ <p class="Code">&nbsp;&nbsp;Define_Custom(TEST) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;optional(keyword)
- {</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;optional(keyword)
+ {
+ </p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag_keyword(option) +=
- value [, value]</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag_keyword(option) +=
+ value [, value]
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">}</p>
- </li>
+ <p class="Code">}</p>
+ </blockquote>
- <li class="Body">In the above fragment, <em class=
+ <p class="Body">
+ In the above fragment, <em class=
"Code">keyword</em> can be any of the <em class=
"Code">pre_extension</em>, <em class="Code">pre_filename</em>
- keywords or any of the keywords that end in <em class=
+ keywords or any of the keywords that end in <em class=
"Code">_outputext</em>. The <em class="Code">flag_keyword</em>
- can be any of the custom definition keywords, however only
- <em class="Code">commandflags</em> has any functional value.
- The <em class="Code">flag_keyword</em> value is searched for
- the <em class="Code">option</em> value contained inside the
- parenthesis. If it is found the <em class="Code">value</em> or
- <em class="Code">values</em> after the += are added to the list
- specified by <em class="Code">keyword</em>. This can also be
- negated by prefixing the <em class="Code">option</em> with an
- exclamation point (!).</li>
-
- <li class="Body">The example below shows how the <em class=
+ can be any of the custom definition keywords, however only
+ <em class="Code">commandflags</em> has any functional value.
+ The <em class="Code">flag_keyword</em> value is searched for
+ the <em class="Code">option</em> value contained inside the
+ parenthesis. If it is found the <em class="Code">value</em> or
+ <em class="Code">values</em> after the += are added to the list
+ specified by <em class="Code">keyword</em>. This can also be
+ negated by prefixing the <em class="Code">option</em> with an
+ exclamation point (!).
+ </p>
+
+ <p class="Body">
+ The example below shows how the <em class=
"Code">optional</em> construct is used by the custom definition
- for the <em class="Code">tao_idl</em> command (see <em class=
+ for the <em class="Code">tao_idl</em> command (see <em class=
"Code">ACE_wrappers/TAO/MPC/config/taoidldefaults.mpb</em> ).
- The <em class="Code">-GA</em> option causes <em class=
+ The <em class="Code">-GA</em> option causes <em class=
"Code">tao_idl</em> to generate an additional source file
- (based on the idl file name) with an <em class=
+ (based on the idl file name) with an <em class=
"Code">A.cpp</em> extension. The <em class="Code">-Sc</em>
- option causes <em class="Code">tao_idl</em> to suppress the
- generation of <em class="Code">S_T</em> related files.</li>
+ option causes <em class="Code">tao_idl</em> to suppress the
+ generation of <em class="Code">S_T</em> related files.
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">Define_Custom(IDL) {</p>
+ <p class="Code">Define_Custom(IDL) {</p>
- <p class="Code">&nbsp;&nbsp;...</p>
+ <p class="Code">&nbsp;&nbsp;...</p>
- <p class="Code">&nbsp;&nbsp;inputext = .idl</p>
+ <p class="Code">&nbsp;&nbsp;inputext = .idl</p>
- <p class="Code">&nbsp;&nbsp;source_pre_extension = C, S</p>
+ <p class="Code">&nbsp;&nbsp;source_pre_extension = C, S</p>
- <p class="Code">&nbsp;&nbsp;header_pre_extension = C, S</p>
+ <p class="Code">&nbsp;&nbsp;header_pre_extension = C, S</p>
- <p class="Code">&nbsp;&nbsp;inline_pre_extension = C, S</p>
+ <p class="Code">&nbsp;&nbsp;inline_pre_extension = C, S</p>
- <p class="Code">&nbsp;&nbsp;source_outputext = .cpp, .cxx,
- .cc, .C</p>
+ <p class="Code">
+ &nbsp;&nbsp;source_outputext = .cpp, .cxx,
+ .cc, .C
+ </p>
- <p class="Code">&nbsp;&nbsp;header_outputext = .h, .hpp,
- .hxx, .hh</p>
+ <p class="Code">
+ &nbsp;&nbsp;header_outputext = .h, .hpp,
+ .hxx, .hh
+ </p>
- <p class="Code">&nbsp;&nbsp;inline_outputext = .inl, .i</p>
+ <p class="Code">&nbsp;&nbsp;inline_outputext = .inl, .i</p>
- <p class="Code">&nbsp;&nbsp;keyword idlflags =
- commandflags</p>
+ <p class="Code">
+ &nbsp;&nbsp;keyword idlflags =
+ commandflags
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;optional(source_pre_extension)
- {</p>
+ <p class="Code">
+ &nbsp;&nbsp;optional(source_pre_extension)
+ {
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(-GA) +=
- A</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;commandflags(-GA) +=
+ A
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;optional(template_outputext)
- {</p>
+ <p class="Code">
+ &nbsp;&nbsp;optional(template_outputext)
+ {
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
- S_T.cpp, S_T.cxx, S_T.cc, S_T.C</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T.cpp, S_T.cxx, S_T.cc, S_T.C
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;optional(header_pre_extension)
- {</p>
+ <p class="Code">
+ &nbsp;&nbsp;optional(header_pre_extension)
+ {
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
- S_T</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;optional(inline_pre_extension)
- {</p>
+ <p class="Code">
+ &nbsp;&nbsp;optional(inline_pre_extension)
+ {
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
- S_T</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <li class="Body">For custom file types, there are a few
- keywords that can be used within the custom file type component
- lists: <em class="Code">command</em>, <em class=
+ <p class="Body">
+ For custom file types, there are a few
+ keywords that can be used within the custom file type component
+ lists: <em class="Code">command</em>, <em class=
"Code">commandflags</em>, <em class="Code">dependent</em>,
- <em class="Code">dependent_libs</em>, <em class="Code">gendir</em>,
- <em class="Code">postcommand</em>, and <em class=
- "Code">recurse</em>.</li>
-
- <li class="Body">The <em class="Code">recurse</em> keyword
- works as described in <a href="MakeProjectCreator.html#82186"
- class="XRef">Assignment Keywords</a>.</li>
-
- <li class="Body">The <em class="Code">command</em>, <em class=
+ <em class="Code">dependent_libs</em>, <em class="Code">gendir</em>,
+ <em class="Code">postcommand</em>, and <em class=
+ "Code">recurse</em>.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">recurse</em> keyword
+ works as described in <a href="MakeProjectCreator.html#82186"
+ class="XRef">Assignment Keywords</a>.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">command</em>, <em class=
"Code">commandflags</em>, <em class="Code">dependent</em>,
- <em class="Code">dependent_libs</em> and
- <em class="Code">postcommand</em> keywords can be used to
- augment or override the value defined in the <em class=
- "Code">Define_Custom</em> section.</li>
+ <em class="Code">dependent_libs</em> and
+ <em class="Code">postcommand</em> keywords can be used to
+ augment or override the value defined in the <em class=
+ "Code">Define_Custom</em> section.
+ </p>
- <li class="Body">The <em class="Code">gendir</em> keyword can
- be used (only if <em class="Code">output_option</em> is set in
- <em class="Code">Define_Custom</em> ) to specify the directory
- in which the generated output will go. Here is an example:</li>
+ <p class="Body">
+ The <em class="Code">gendir</em> keyword can
+ be used (only if <em class="Code">output_option</em> is set in
+ <em class="Code">Define_Custom</em> ) to specify the directory
+ in which the generated output will go. Here is an example:
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">MOC_Files {</p>
+ <p class="Code">MOC_Files {</p>
- <p class="Code">&nbsp;&nbsp;commandflags += -nw</p>
+ <p class="Code">&nbsp;&nbsp;commandflags += -nw</p>
- <p class="Code">&nbsp;&nbsp;gendir = moc_generated</p>
+ <p class="Code">&nbsp;&nbsp;gendir = moc_generated</p>
- <p class="Code">&nbsp;&nbsp;QtReactor.h</p>
+ <p class="Code">&nbsp;&nbsp;QtReactor.h</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">Source_Files {</p>
+ <p class="Code">Source_Files {</p>
- <p class="Code">
- &nbsp;&nbsp;moc_generated/QtReactor_moc.cpp</p>
+ <p class="Code">
+ &nbsp;&nbsp;moc_generated/QtReactor_moc.cpp
+ </p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
- </li>
- <li class="Body">In the above example, the <em class=
+ </blockquote>
+
+ <p class="Body">
+ In the above example, the <em class=
"Code">-nw</em> option is added to <em class=
"Code">commandflags</em> and the generated file (<em class=
"Code">QtReactor_moc.cpp</em> ) is placed in the <em class=
"Code">moc_generated</em> directory. If the <em class=
"Code">MOC</em> custom definition did not have an <em class=
"Code">output_option</em> setting, then options would need to
- be added to <em class="Code">commandflags</em> or a <em class=
+ be added to <em class="Code">commandflags</em> or a <em class=
"Code">postcommand</em> would need to be defined to ensure that
- the output actually went into the <em class=
- "Code">moc_generated</em> directory.</li>
- </ul>
+ the output actually went into the <em class=
+ "Code">moc_generated</em> directory.
+ </p>
- <div>
- <h6 class="Head6">Modify_Custom</h6>
- <ul>
- <li class="Body">An existing <em class=
+ <div>
+ <h6 class="Head6">Modify_Custom</h6>
+
+
+ <p class="Body">
+ An existing <em class=
"Code">Define_Custom</em> section can be modified by using
- <em class="Code">Modify_Custom</em>. The syntax of the body
- is identical to that of a <em class=
+ <em class="Code">Modify_Custom</em>. The syntax of the body
+ is identical to that of a <em class=
"Code">Define_Custom</em>. The example below shows a
- modification to the TAO IDL defaults found in <em class=
+ modification to the TAO IDL defaults found in <em class=
"Code">taoidldefaults.mpb</em> of the TAO+ACE distribution.
- Everything provided by the <em class=
+ Everything provided by the <em class=
"Code">Define_Custom(IDL)</em> remains unchanged except for
- the values set within the <em class=
- "Code">Modify_Custom(IDL).</em></li>
+ the values set within the <em class=
+ "Code">Modify_Custom(IDL).</em>
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">project: taoidldefaults {</p>
+ <p class="Code">project: taoidldefaults {</p>
- <p class="Code">&nbsp;&nbsp;specific(!automake) {</p>
+ <p class="Code">&nbsp;&nbsp;specific(!automake) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;tao_idlflags += -Sc
- -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;tao_idlflags += -Sc
+ -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;// This allows "make idl_stubs"
- to work</p>
+ <p class="Code">
+ &nbsp;&nbsp;// This allows "make idl_stubs"
+ to work
+ </p>
- <p class="Code">&nbsp;&nbsp;verbatim(gnuace, macros) {</p>
+ <p class="Code">&nbsp;&nbsp;verbatim(gnuace, macros) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_HDR_EXT
- ?= .h</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_HDR_EXT
+ ?= .h
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_INL_EXT
- ?= .i</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_INL_EXT
+ ?= .i
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_SRC_EXT
- ?= .cpp</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_SRC_EXT
+ ?= .cpp
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_HDR_EXT
- ?= _s.h</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_HDR_EXT
+ ?= _s.h
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_INL_EXT
- ?= _s.i</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_INL_EXT
+ ?= _s.i
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_SRC_EXT
- ?= _s.cpp</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_SRC_EXT
+ ?= _s.cpp
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Modify_Custom(IDL) {</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;source_pre_extension = , _s
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;header_pre_extension = , _s
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;inline_pre_extension = , _s
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;inline_outputext
+ &nbsp;&nbsp;&nbsp;&nbsp;= .i
+ </p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+ <blockquote>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head6">Custom Post Command</h6>
+
+
+ <p class="BodyNoLead">
+ When defining a <em class=
+ "Code">postcommand</em> as part of a <em class=
+ "Code">Define_Custom</em>, a few pseudo template variables
+ are available to provide some flexibility. The following
+ table shows the pseudo template variables that can be
+ accessed only from the <em class="Code">postcommand</em>.
+ Please note that <em class="Code">&lt;%</em> and <em class=
+ "Code">%&gt;</em> are part of the syntax.
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ Post Command Pseudo
+ Variables
+ </h6>
+
+ <table border="1" summary="Post Command Pseudo Variables">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Variable</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The input file to the
+ command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input_basename%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The basename of the input file to
+ the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input_dirname%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The directory name of the input
+ file to the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The input file to the command
+ with the extension stripped off.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input_ext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This gives the file extension of
+ the input file (if there is one).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file created by the
+ original command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output_basename%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The basename of the output file
+ to the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output_dirname%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The directory name of the output
+ file to the command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file created by the
+ original command with the extension stripped off.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output_ext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This gives the file extension of
+ the output file (if there is one).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">
+ The output file can be referenced
+ as a generic output file, or it can be referenced as
+ a component file using one of the following
+ variables. If it does not match the specific type the
+ value will be empty.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%documentation_file%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it is a
+ documentation file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%header_file%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it has a
+ header file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%inline_file%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it has an
+ inline file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%resource_file%&gt;</em> (<em class=
+ "TableCode">&lt;%resx_file%&gt;</em> for C# and
+ VB)
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it has a
+ resource file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%source_file%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it has a
+ source file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%template_file%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file if it is a
+ template file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%documentation_file_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it is a documentation file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%header_file_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it has a header file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%inline_file_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it has an inline file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%resource_file_noext%&gt;</em>
+ (<em class="TableCode">&lt;%resx_file_noext%&gt;</em>
+ for C# and VB)
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it has a resource file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%source_file_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it has a source file extension.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%template_file_noext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output file without an
+ extension if it is a template file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">
+ The extensions of the input and
+ output files are also available as pseudo
+ variables.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%input_ext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The extension of the input file
+ (if it has one).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%output_ext%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The extension of the output file
+ (if it has one).
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+
+
+ <p class="Body">
+ The following table describes the pseudo
+ template variables that can be used in the <em class=
+ "Code">command</em>, <em class="Code">commandflags</em>,
+ <em class="Code">dependent</em>, <em class=
+ "Code">output_option</em> and <em class=
+ "Code">postcommand</em> settings.
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ <a name=
+ "Common_Pseudo_Variables"></a>Common Pseudo Variables
+ </h6>
+
+ <table border="1" summary="Common Pseudo Variables">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Variable</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%and%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform and project
+ non-specific representation of a command conditional
+ and.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%cat%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to print a file to the terminal.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%cmdsep%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A project and platform
+ non-specific command separator which always runs
+ right-hand side of the command. For example, in the
+ following psuedo commmand string, both the <em class=
+ "Code">&lt;%cat%&gt;</em> and <em class=
+ "Code">&lt;%mv%&gt;</em> commands would be run.
+ <em class="Code">
+ &lt;%cat%&gt; &lt;%source_file%&gt;
+ &lt;%gt%&gt; foo &lt;%cmdsep%&gt; &lt;%mv%&gt; foo
+ other_dir
+ </em>
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%cmp%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to compare two files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%cp%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to copy a file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%crlf%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific line
+ ending.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%equote%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A project non-specific escaped
+ double quote.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%gendir%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output directory specified by
+ the <em class="Code">gendir</em> setting. This
+ variable is not available to <em class=
+ "Code">postbuild</em>, <em class=
+ "Code">postclean</em>, or<em class=
+ "Code">prebuild.</em>
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%gt%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform and project
+ non-specific representation of a greater than
+ sign.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%lt%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform and project
+ non-specific representation of a less than sign.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%mkdir%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to make a directory.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%mv%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to move a file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%nul%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific null
+ device.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%pathsep%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific path
+ separator (; or :).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%or%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform and project
+ non-specific representation of a command conditional
+ or.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%os%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Returns either win32 or unix.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%prj_type%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The project type as supplied
+ by the -type command line option.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%quote%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A project non-specific
+ representation of a double quote.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%rm%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific command
+ to delete a file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%rmdir%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific recursive
+ directory delete command.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%slash%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A platform non-specific directory
+ separator.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%temporary%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ A temporary file name. The
+ generated temporary file name contains no directory
+ portion and is the same for each use within the same
+ variable setting.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">
+ The following variables will
+ be set to the known extension for Windows based
+ project types and empty on non-Windows based
+ project types.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%bat%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The extension for batch
+ files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%cmd%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The extension for command
+ files.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">
+ <em class=
+ "TableCode">&lt;%exe%&gt;</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The extension for executable
+ files.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+ </div>
+ </div>
+ </div>
+
+ <div>
+ <a name="TheFeatureFile" id="TheFeatureFile"></a>
+
+ <h5 class="Head4">The Feature File</h5>
- <p class="Code">&nbsp;&nbsp;Modify_Custom(IDL) {</p>
+
+ <p class="BodyNoLead">
+ The term feature, as used by MPC,
+ describes different concepts or external software that a project
+ may require in order to build properly. The feature file
+ determines which features are enabled or disabled which has a
+ direct effect on whether or not MPC generates a project.
+ </p>
+
+ <p class="Body">
+ It supports the standard comment (<em class=
+ "Code">//</em> ) and assignment of numbers to feature names.
+ These feature names will correspond to values given to the
+ <em class="Code">requires</em> and <em class="Code">avoids</em>
+ keywords in mpc files.
+ </p>
+
+ <p class="Body">
+ If a feature is not listed in the feature file
+ or is listed with a boolean value of true (1), that feature is
+ enabled. If a feature is listed and has a boolean value of false
+ (0), that feature is disabled.
+ </p>
+
+ <p class="Body">
+ If a feature name is listed in the <em class=
+ "Code">requires</em> value for a particular project and that
+ feature is enabled, that project will be generated. If the
+ feature is not enabled, the project will not be generated.
+ </p>
+
+ <p class="Body">
+ The opposite holds true for the <em class=
+ "Code">avoids</em> keyword. If a feature name is listed in the
+ <em class="Code">avoids</em> value for a project and the feature
+ is disabled, that project will be generated. If the feature is
+ enabled, the project will not be generated.
+ </p>
+
+ <p class="Body">
+ The global feature file for MPC contains the
+ following values.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">boost = 0</p>
+
+ <p class="Code">bzip2 = 0</p>
+
+ <p class="Code">java = 0</p>
+
+ <p class="Code">mfc = 0</p>
+
+ <p class="Code">python = 0</p>
+
+ <p class="Code">qt = 0</p>
+
+ <p class="Code">rpc = 0</p>
+
+ <p class="Code">swig_java = 0</p>
+
+ <p class="Code">swig_perl = 0</p>
+
+ <p class="Code">swig_php = 0</p>
+
+ <p class="Code">swig_python = 0</p>
+
+ <p class="Code">swig_ruby = 0</p>
+
+ <p class="Code">swig_tcl = 0</p>
+
+ <p class="Code">uses_wchar = 0</p>
+
+ <p class="Code">xalan = 0</p>
+
+ <p class="Code">xerces = 0</p>
+
+ <p class="Code">xerces2 = 0</p>
+
+ <p class="Code">xerces3 = 0</p>
+
+ <p class="Code">ziparchive = 0</p>
+
+ <p class="Code">zlib = 0</p>
+
+ <p class="Code">zzip = 0</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ In the above contents, all of these features are
+ disabled for each project generated. If these values do not suit
+ your needs, then you must do one of the following:
+ </p>
+
+ <p class="BodyNoLead">
+ <ul>
+ <li>
+ Create a project specific feature file in the <em class=
+ "Code">config</em> directory (ex., <em class=
+ "Code">make.features</em> for the <em class="Code">make</em>
+ project type) to set features for a particular project
+ type.
+ </li>
+
+ <li>
+ Create a <em class="Code">default.features</em> file in
+ the <em class="Code">config</em> directory that contains the
+ feature set you need. These will be applied to all project
+ types.
+ </li>
+
+ <li>
+ Create a feature file anywhere you like with the features
+ you want and use the <em class="Code">-feature_file</em>
+ option to specify the location.
+ </li>
+
+ <li>
+ Use the <em class="Code">-features</em> option to
+ dynamically modify the feature settings.
+ </li>
+ </ul>
+ </p>
+
+ <p class="Body">
+ Generated projects will have a combination of
+ features specified in the <em class="Code">global.features</em>
+ file as well as in your feature file. Therefore, if a feature is
+ disabled in the global file and you want to enable it, you must
+ explicitly enable it in your feature file.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Feature Projects</h5>
+
+
+ <p class="Body">
+ A feature project contains information as
+ a project would, but can only be a base project and will only be
+ added to a sub project if the features that it requires are
+ enabled or the features that it avoids are disabled.
+ </p>
+
+ <p class="Body">
+ A feature definition requires at least one
+ feature name. A name by itself specifies that the feature must be
+ enabled. A &rsquo;!&rsquo; in front of the feature name indicates
+ that the feature must be disabled. There may be more than one
+ comma separated feature listed between the parenthesis.
+ </p>
+
+ <p class="Body">
+ The following example show how to declare a
+ feature project.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">// ziparchive.mpb</p>
+
+ <p class="Code">feature(ziparchive) {</p>
+
+ <p class="Code">&nbsp;&nbsp;includes += $(ZIPARCHIVEROOT)</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;libpaths +=
+ $(ZIPARCHIVEROOT)/lib
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;libs &nbsp;&nbsp;&nbsp;&nbsp;+=
+ ziparch
+ </p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </blockquote>
+
+ <p class="Body">
+ With this example, any project that inherits
+ from the <em class="Code">ziparchive</em> base feature project
+ will contain the project information only if the <em class=
+ "Code">ziparchive</em> feature is enabled.
+ </p>
+
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">Defaults</h4>
+
+
+ <p class="BodyNoLead">
+ MPC has been designed to minimize the amount
+ of maintenance that goes into keeping build tool files up-to-date
+ with the project. If your source code is organized <em class=
+ "Emphasis">properly</em>, the maintenance of your mpc files should
+ be minimal.
+ </p>
+
+ <p class="Body">
+ With the use of inheritance and proper code
+ arrangement, an mpc file for a TAO related project may be as simple
+ as:
+ </li>
+
+ <blockquote>
+
+ <p class="Code">project: taoserver {</p>
+
+ <p class="Code">}</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ This project definition could be used to generate
+ a project for a TAO server with multiple idl, header and source
+ files.
+ </p>
+
+ <p class="Body">
+ The idea of <em class="Emphasis">proper</em>
+ source layout is basically summarized as <em class="Emphasis">
+ one
+ directory per binary target.
+ </em> If only the files that pertain to
+ a single target are located in the directory with the mpc file,
+ then the MPC defaults will satisfy most project needs.
+ </p>
+
+ <p class="Body">
+ Of course, it will not always be possible or
+ desirable to organize your project code in this fashion, so all
+ defaulting behavior can be overridden. The next sections describe
+ the default behaviors of MPC and how to override them.
+ </p>
+
+
+ <div>
+ <h5 class="Head4">Source Files</h5>
+
+ <p class="BodyNoLead">
+ New source files are added and others are
+ removed quite often in a developing project. If the <em class=
+ "Code">Source_Files</em> component is left out of an mpc file,
+ then MPC will assume that any file matching one of the <em class=
+ "Emphasis">source</em> extensions is to be included in the
+ project. For most project types, the source extensions are:
+ <em class="Code">.cpp</em>, <em class="Code">.cxx</em>,
+ <em class="Code">.cc</em>, <em class="Code">.c</em> and
+ <em class="Code">.C</em>. Only the following extensions are
+ considered source extensions: <em class="Code">.cpp</em>,
+ <em class="Code">.cxx</em> and <em class="Code">.c</em> for the
+ <em class="Code">em3</em> and <em class="Code">vc6</em> project
+ types as eMbedded Visual C++ and Visual C++ 6.0 do not understand
+ files with the <em class="Code">.cc</em> or <em class=
+ "Code">.C</em> extension.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Template Files</h5>
+
+
+ <p class="BodyNoLead">
+ MPC assumes that any file matching one of
+ the <em class="Emphasis">template</em> extensions is to be
+ included in the project if the <em class=
+ "Code">Template_Files</em> component is left out of an mpc file.
+ For most project types, the template extensions are: <em class=
+ "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>, <em class=
+ "Code">_T.cc</em>, <em class="Code">_T.c</em>, and <em class=
+ "Code">_T.C</em>. However, only the <em class="Code">_T.cpp</em>
+ and <em class="Code">_T.cxx</em> extensions are considered
+ template extensions for the <em class="Code">em3</em> and
+ <em class="Code">vc6</em> project types.
+ </p>
+
+ <p class="Body">
+ If the <em class="Code">Source_Files</em>
+ component is defaulted, and a file is explicitly listed in the
+ Template_Files section that happens to appear to MPC as a source
+ file (i.e., has a source file extension, but does not have
+ <em class="Code">_T</em> directly before it), MPC will
+ automatically exclude it from the <em class=
+ "Code">Source_Files</em> component.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Inline Files</h5>
+
+ <p class="BodyNoLead">
+ As with source files, the <em class=
+ "Code">Inline_Files</em> component can be left out of an mpc file
+ to allow it to generate defaults. Files that match the <em class=
+ "Code">.i</em> and <em class="Code">.inl</em> extensions are
+ considered inline files.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">Inline_Files</em> component
+ has a special interaction with the <em class=
+ "Code">Source_Files</em> component. If the <em class=
+ "Code">Source_Files</em> component has files listed and the
+ <em class="Code">Inline_Files</em> component is omitted, then
+ each source file is <em class="Emphasis">matched</em> to an
+ inline file. If the matching inline file is found or would be
+ generated from a custom command, it is added to the <em class=
+ "Code">Inline_Files</em> component list.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Header Files</h5>
+
+ <p class="BodyNoLead">
+ As with source files, the <em class=
+ "Code">Header_Files</em> component can be left out of an mpc file
+ to allow it to generate defaults. Files that match the <em class=
+ "Code">.h</em>, <em class="Code">.hpp</em>, <em class=
+ "Code">.hxx</em>, and <em class="Code">.hh</em> extensions are
+ considered header files.
+ </p>
+
+ <p class="Body">
+ The <em class="Code">Header_Files</em> component
+ has a special interaction with the <em class=
+ "Code">Source_Files</em> component. If the <em class=
+ "Code">Source_Files</em> component has files listed and the
+ <em class="Code">Header_Files</em> component is omitted, then
+ each source file is <em class="Emphasis">matched</em> to a header
+ file. If the matching header file is found or would be generated
+ from a custom command, then it is added to the <em class=
+ "Code">Header_Files</em> component list.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Documentation Files</h5>
+
+ <p class="BodyNoLead">
+ The <em class=
+ "Code">Documentation_Files</em> component, if omitted, will
+ default to all files that end in the following: <em class=
+ "Code">README</em>, <em class="Code">readme</em>, <em class=
+ "Code">.doc</em>, <em class="Code">.html</em> and <em class=
+ "Code">.txt</em>.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Resource Files</h5>
+
+
+ <p class="BodyNoLead">
+ The <em class="Code">Resource_Files</em>
+ component, if omitted, will default to only the files that end in
+ <em class="Code">.rc</em> and are similar to the name of the
+ project. For example, if a directory contains three <em class=
+ "Code">.rc</em> files and the project name is <em class=
+ "Code">foo</em>, only the <em class="Code">.rc</em> files that
+ contain the word <em class="Code">foo</em> will automatically be
+ added to the <em class="Code">Resource_Files</em> component
+ list.
+ </p>
+
+ </div>
+
+ <div>
+ <h5 class="Head4">Custom Defined Files</h5>
+
+
+ <p class="BodyNoLead">
+ The <em class="Code">
+ Custom Defined
+ Files
+ </em> components have a special interaction with the
+ <em class="Code">Source_Files</em> component. If the custom
+ command generates source files and has the <em class=
+ "Code">automatic_out</em> setting set to 1, they will
+ automatically be added to the <em class="Code">Source_Files</em>
+ component list. If any of the files listed in the <em class=
+ "Code">Source_Files</em> components list match any of the
+ generated source file names, then none of the generated source
+ file names will be automatically added to the <em class=
+ "Code">Source_Files</em> components list.
+ </p>
+
+ </div>
+
+ <div>
+ <a name="ExampleMPCFile" id="ExampleMPCFile"></a>
+
+ <h5 class="Head4">Example MPC File</h5>
+
+ <p class="BodyNoLead">
+ The example below uses the directory
+ contents of <em class=
+ "Code">$TAO_ROOT/orbsvcs/performance-tests/RTEvent/lib</em> to
+ illustrate the simplicity of mpc files:
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ Auto_Disconnect.cpp Loopback_Supplier.h
+ RTEC_Initializer.cpp
+ </p>
<p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;source_pre_extension = , _s</p>
+ Auto_Disconnect.h Low_Priority_Setup.cpp
+ RTEC_Initializer.h
+ </p>
<p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;header_pre_extension = , _s</p>
+ Auto_Disconnect.inl Low_Priority_Setup.h
+ rtec_perf_export.h
+ </p>
<p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;inline_pre_extension = , _s</p>
+ Auto_Functor.cpp Low_Priority_Setup.inl
+ RTEC_Perf.mpc
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inline_outputext
- &nbsp;&nbsp;&nbsp;&nbsp;= .i</p>
+ <p class="Code">Auto_Functor.h Makefile RTPOA_Setup.cpp</p>
+
+ <p class="Code">
+ Auto_Functor.inl ORB_Holder.cpp
+ RTPOA_Setup.h
+ </p>
+
+ <p class="Code">
+ Client_Group.cpp ORB_Holder.h
+ RTPOA_Setup.inl
+ </p>
+
+ <p class="Code">
+ Client_Group.h ORB_Holder.inl
+ RTServer_Setup.cpp
+ </p>
+
+ <p class="Code">
+ Client_Group.inl ORB_Shutdown.cpp
+ RTServer_Setup.h
+ </p>
+
+ <p class="Code">
+ Client_Options.cpp ORB_Shutdown.h
+ RTServer_Setup.inl
+ </p>
+
+ <p class="Code">
+ Client_Options.h ORB_Shutdown.inl
+ Send_Task.cpp
+ </p>
+
+ <p class="Code">
+ Client_Pair.cpp ORB_Task_Activator.cpp
+ Send_Task.h
+ </p>
+
+ <p class="Code">
+ Client_Pair.h ORB_Task_Activator.h
+ Send_Task_Stopper.cpp
+ </p>
+
+ <p class="Code">
+ Client_Pair.inl ORB_Task_Activator.inl
+ Send_Task_Stopper.h
+ </p>
+
+ <p class="Code">
+ Consumer.cpp ORB_Task.cpp
+ Send_Task_Stopper.inl
+ </p>
+
+ <p class="Code">Consumer.h ORB_Task.h Servant_var.cpp</p>
+
+ <p class="Code">Control.cpp ORB_Task.inl Servant_var.h</p>
+
+ <p class="Code">Control.h Peer_Base.cpp Servant_var.inl</p>
+
+ <p class="Code">EC_Destroyer.cpp Peer_Base.h Shutdown.cpp</p>
+
+ <p class="Code">
+ EC_Destroyer.h PriorityBand_Setup.cpp
+ Shutdown.h
+ </p>
+
+ <p class="Code">
+ EC_Destroyer.inl PriorityBand_Setup.h
+ Shutdown.inl
+ </p>
+
+ <p class="Code">
+ Federated_Test.idl PriorityBand_Setup.inl
+ Supplier.cpp
+ </p>
+
+ <p class="Code">
+ Implicit_Deactivator.cpp RIR_Narrow.cpp
+ Supplier.h
+ </p>
+
+ <p class="Code">
+ Implicit_Deactivator.h RIR_Narrow.h
+ SyncScope_Setup.cpp
+ </p>
+
+ <p class="Code">
+ Implicit_Deactivator.inl RT_Class.cpp
+ SyncScope_Setup.h
+ </p>
+
+ <p class="Code">
+ Loopback_Consumer.cpp RT_Class.h
+ SyncScope_Setup.inl
+ </p>
+
+ <p class="Code">
+ Loopback_Consumer.h RT_Class.inl
+ TAO_RTEC_Perf.dsp
+ </p>
+
+ <p class="Code">
+ Loopback.cpp RTClient_Setup.cpp
+ TAO_RTEC_Perf.dsw
+ </p>
+
+ <p class="Code">
+ Loopback.h RTClient_Setup.h
+ Task_Activator.cpp
+ </p>
+
+ <p class="Code">
+ Loopback_Pair.cpp RTClient_Setup.inl
+ Task_Activator.h
+ </p>
+
+ <p class="Code">
+ Loopback_Pair.h RTCORBA_Setup.cpp
+ Task_Activator.inl
+ </p>
+
+ <p class="Code">Loopback_Pair.inl RTCORBA_Setup.h</p>
+
+ <p class="Code">Loopback_Supplier.cpp RTCORBA_Setup.inl</p>
+
+ </blockquote>
+
+ <p class="Body">
+ The following mpc file (<em class=
+ "Code">RTEC_Perf.mpc</em> ) shows the simple and small number of
+ lines required to generate usable build tool project files.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ project(RTEC_Perf): strategies, rtcorbaevent,
+ minimum_corba {
+ </p>
+
+ <p class="Code">&nbsp;&nbsp;sharedname = TAO_RTEC_Perf</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;idlflags +=
+ -Wb,export_macro=TAO_RTEC_Perf_Export \
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Wb,export_include=rtec_perf_export.h
+ </p>
+
+ <p class="Code">
+ &nbsp;&nbsp;dllflags +=
+ TAO_RTEC_PERF_BUILD_DLL
+ </p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Template_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Disconnect.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Functor.cpp</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;Low_Priority_Setup.cpp
+ </p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;RIR_Narrow.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Servant_var.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Shutdown.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Task_Activator.cpp</p>
<p class="Code">&nbsp;&nbsp;}</p>
<p class="Code">}</p>
- </li>
- </ul>
+
+
+ </blockquote>
+
+ <p class="Body">
+ A line-by-line explanation of the example mpc
+ file is listed below.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ project(RTEC_Perf): strategies, rtcorbaevent,
+ minimum_corba {
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ The first line declares a project named
+ <em class="Code">RTEC_Perf</em> that inherits from the base
+ projects listed after the colon.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">sharedname = TAO_RTEC_Perf</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Line two determines that the project is a
+ library and the library name is <em class=
+ "Code">TAO_RTEC_Perf</em>.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ idlflags +=
+ -Wb,export_macro=TAO_RTEC_Perf_Export \
+ </p>
+
+ <p class="Code">-Wb,export_include=rtec_perf_export.h</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Lines three and four add to the flags passed to
+ the IDL compiler when processing the idl files.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Line five adds <em class=
+ "Code">TAO_RTEC_PERF_BUILD_DLL</em> to the <em class=
+ "Code">dllflags</em>, which defines a macro that is used by the
+ <em class="Code">rtec_perf_export.h</em> header file.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">Template_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;Auto_Disconnect.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Auto_Functor.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Low_Priority_Setup.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;RIR_Narrow.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Servant_var.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Shutdown.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Task_Activator.cpp</p>
+
+ <p class="Code">}</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Lines 7 through 15 name the listed cpp files as
+ part of the <em class="Code">Template_Files</em>. <br/><strong>Note:</strong>
+ This usage of Template_Files refers to files containing C++ template declaration and
+ definition source code and should not be confused with MPC <a href ="#MPD_Syntax">template files</a>
+ which are used to define the structure of generated project files.
+ </p>
+
+ <p class="Body">
+ You may have noticed that there isn&rsquo;t much
+ to the file above. With the default behaviors that are built into
+ MPC, there does not need to be. We rely on the defaults to
+ determine the values of <em class="Code">IDL_Files</em>,
+ <em class="Code">Source_Files</em>, <em class=
+ "Code">Inline_Files</em> , and <em class=
+ "Code">Header_Files</em>. Since the template files in this example C++ project
+ do not follow the naming convention assumed by the MPC built-in defaults
+ (_T.cpp, _T.cxx, _T.cc, _T.C),
+ we must explicitly list them. We also
+ rely on inheritance to get many of the TAO-related options.
+ </p>
+
+
+ </div>
</div>
+ </div>
+
+ <div>
+ <h3 class="Head2">Adding a New Type</h3>
+ <hr>
+
+ <p class="Body">
+ If MPC does not support a particular build tool, you
+ may want to consider adding a new project type. For instance, support
+ could be added to MPC for Boost Jam, Xcode and many others. To do so
+ will require knowledge of the MPC input files, as well as Object
+ Oriented Perl.
+ </p>
+
+
+ <div>
+ <h4 class="Head3">Input File Syntax</h4>
+
+ <p class="BodyNoLead">
+ This section describes the syntax of the
+ files that are used during project generation.
+ </p>
+
<div>
- <h6 class="Head6">Custom Post Command</h6>
+ <h5 class="Head4">
+ <a name="MPD_Syntax"></a>Template Files
+ (mpd)
+ </h5>
+
+ <p class ="Body">
+ Template files make up the bulk of what
+ MPC puts into each generated project file. They provide the plain
+ text and the layout of the data provided by the mpc files, using
+ various template directives.
+ </p>
+
+ <p class="Body">
+ Template directives are declared using a
+ <em class="Code">&lt;% %&gt;</em> construct. This construct is
+ used to create if statements, for loops and to access variables.
+ One thing to note is that any text, including white space, that
+ is not enclosed within <em class="Code">&lt;% %&gt;</em> is left
+ untouched and is passed directly into the generated project
+ file.
+ </p>
+
+ <p class="Body">
+ An <em class="Code">if</em> statement can appear
+ on a single line or it can span multiple lines. For example, the
+ following line:
+ </p>
+
+ <blockquote>
- <ul>
- <li class="BodyNoLead">When defining a <em class=
- "Code">postcommand</em> as part of a <em class=
- "Code">Define_Custom</em>, a few pseudo template variables
- are available to provide some flexibility. The following
- table shows the pseudo template variables that can be
- accessed only from the <em class="Code">postcommand</em>.
- Please note that <em class="Code">&lt;%</em> and <em class=
- "Code">%&gt;</em> are part of the syntax.</li>
+ <p class="Code">
+ &lt;%if(exename)%&gt;BIN =
+ &lt;%exename%&gt;&lt;%else%&gt;LIB =
+ &lt;%sharedname%&gt;&lt;%endif%&gt;
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ is equivalent to:</li>
+
+ <blockquote>
+
+ <p class="Code">&lt;%if(exename)%&gt;</p>
+
+ <p class="Code">BIN = &lt;%exename%&gt;</p>
+
+ <p class="Code">&lt;%else%&gt;</p>
+
+ <p class="Code">LIB = &lt;%sharedname%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ <a name="foreach_syntax"></a> A <em class=
+ "Code">foreach</em> statement can also appear on a single line or
+ can span multiple lines. As described below in the keywords
+ section, the <em class="Code">foreach</em> statement evaluates
+ the variable in a space-separated list context.
+ </p>
+
+ <p class="Body">
+ There are a couple of ways to write a <em class=
+ "Code">foreach</em> loop. The first and preferred way is to name
+ the loop variable and then list each variable to be
+ evaluated.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ FILES=&lt;%foreach(fvar, idl_files source_files
+ header_files)%&gt; &lt;%fvar%&gt;&lt;%endfor%&gt;
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ The second way is to let the <em class=
+ "Code">foreach</em> statement determine the loop variable. With
+ this style, each value can be accessed via the first variable
+ name passed to the <em class="Code">foreach</em> with the
+ trailing &rsquo;<em class="Code">s</em> &rsquo; removed.
+ </p>
+
+ <blockquote>
+
+ <p class="Code">
+ FILES=&lt;%foreach(idl_files source_files
+ header_files)%&gt; &lt;%idl_file%&gt;&lt;%endfor%&gt;
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Note that the <em class=
+ "Code">&lt;%idl_file%&gt;</em> variable will contain each
+ individual value of the <em class="Code">idl_files</em>,
+ <em class="Code">source_files</em> and <em class=
+ "Code">header_files</em> list. If the variable in the <em class=
+ "Code">foreach</em> does not end in &rsquo;<em class=
+ "Code">s</em> &rsquo;, the variable of the same name within the
+ <em class="Code">foreach</em> will contain each individual value,
+ e.g.,
+ </p>
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Post Command Pseudo
- Variables</h6>
+ <blockquote>
- <table border="1" summary="Post Command Pseudo Variables">
+ <p class="Code">
+ &lt;%foreach(filelist)%&gt;
+ &lt;%filelist%&gt;&lt;%endfor%&gt;
+ </p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ The following table lists keywords that can
+ appear in template files.
+ </p>
+
+ <p class ="Body">
+ <a name="38037"></a>
+
+ <h6 class="NumberedTableTitle">Template File Keywords</h6>
+
+ <table border="1" summary="Template File Keywords">
<tr>
<th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Variable</p>
+ <p class="Tbl-Heading">Keyword</p>
</th>
<th rowspan="1" colspan="1">
@@ -4093,3360 +6995,2391 @@
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">basename</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The input file to the
- command.</p>
+ <p class="Tbl-Body">
+ Evaluates the variable name and
+ removes the directory portion from that value.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input_basename%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">basenoextension</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The basename of the input file to
- the command.</p>
+ <p class="Tbl-Body">
+ This is similar to <em class=
+ "Code">basename</em> except that the extension is also
+ removed from the variable name value.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input_dirname%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">comment</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The directory name of the input
- file to the command.</p>
+ <p class="Tbl-Body">
+ The value passed to comment is
+ ignored and can be any set of characters, except a new
+ line or a closing parenthesis.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">compares</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The input file to the command
- with the extension stripped off.</p>
+ <p class="Tbl-Body">
+ This function returns true if the
+ variable value (first parameter) is equal to the string
+ value (second parameter).
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input_ext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">contains</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">This gives the file extension of
- the input file (if there is one).</p>
+ <p class="Tbl-Body">
+ This function returns true if the
+ variable value (first parameter) contains the regular
+ expression (second parameter).
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">deref</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file created by the
- original command.</p>
+ <p class="Tbl-Body">
+ Dereference the variable passed as
+ a parameter, treating its value as another variable
+ name and returning that variable's value.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output_basename%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dirname</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The basename of the output file
- to the command.</p>
+ <p class="Tbl-Body">
+ Evaluates the variable name and
+ removes the <em class="Code">basename</em> from that
+ value.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output_dirname%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">duplicate_index</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The directory name of the output
- file to the command.</p>
+ <p class="Tbl-Body">
+ This function returns a number based
+ on the number of times a file with the same name (but
+ different directory) is seen within a project. The
+ function returns false upon the first occurrence of a
+ file.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">else</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file created by the
- original command with the extension stripped off.</p>
+ <p class="Tbl-Body">
+ Used with the <em class=
+ "Code">if</em> statement. An <em class="Code">else</em>
+ block will be evaluated if the statement does not
+ evaluate to true.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output_ext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">endfor</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">This gives the file extension of
- the output file (if there is one).</p>
+ <p class="Tbl-Body">
+ Used with <em class=
+ "Code">foreach</em>. This ends <em class=
+ "Code">foreach</em> block.
+ </p>
</td>
</tr>
<tr>
- <td rowspan="1" colspan="2">
- <p class="TblCode">The output file can be referenced
- as a generic output file, or it can be referenced as
- a component file using one of the following
- variables. If it does not match the specific type the
- value will be empty.</p>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">endif</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Used with the <em class=
+ "Code">if</em> statement. This ends an <em class=
+ "Code">if</em> or <em class="Code">if/else</em>
+ block.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%documentation_file%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">ends_with</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it is a
- documentation file.</p>
+ <p class="Tbl-Body">
+ This function returns true if the
+ variable value (first parameter) ends with the regular
+ expression (second parameter).
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%header_file%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">eval</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it has a
- header file extension.</p>
+ <p class="Tbl-Body">
+ This is similar to eval in perl. The
+ template variable passed to this function will be
+ evaluated within the context of the current template.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%inline_file%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">extensions</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it has an
- inline file extension.</p>
+ <p class="Tbl-Body">
+ Returns a list of extensions based on
+ the component name parameter (e.g., source_files,
+ header_files, etc.)
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%resource_file%&gt;</em> (<em class=
- "TableCode">&lt;%resx_file%&gt;</em> for C# and
- VB)</p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">flag_overrides</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it has a
- resource file extension.</p>
+ <p class="Tbl-Body">
+ This is directly related to
+ overriding the project-wide settings in an mpc file. It
+ takes two variable names that are comma separated. The
+ first corresponds to a file name and the second is any
+ variable name.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%source_file%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">foreach</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it has a
- source file extension.</p>
+ <p class="Tbl-Body">
+ The given variable names are
+ evaluated in a list context which is space separated.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%template_file%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">forfirst</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file if it is a
- template file.</p>
+ <p class="Tbl-Body">
+ Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">forfirst</em> will be placed on the
+ first iteration of <em class="Code">foreach</em>.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%documentation_file_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">forlast</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it is a documentation file.</p>
+ <p class="Tbl-Body">
+ Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">forlast</em> will be placed on the last
+ iteration of <em class="Code">foreach</em>.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%header_file_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">fornotfirst</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it has a header file extension.</p>
+ <p class="Tbl-Body">
+ Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">fornotfirst</em> will be placed on each
+ iteration of <em class="Code">foreach</em> except for the
+ first.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%inline_file_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">fornotlast</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it has an inline file extension.</p>
+ <p class="Tbl-Body">
+ Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">fornotlast</em> will be placed on each
+ iteration of <em class="Code">foreach</em> except for the
+ last.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%resource_file_noext%&gt;</em>
- (<em class="TableCode">&lt;%resx_file_noext%&gt;</em>
- for C# and VB)</p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">full_path</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it has a resource file extension.</p>
+ <p class="Tbl-Body">
+ Returns full path of the value of the
+ variable name passed a the parameter.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%source_file_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">has_extension</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it has a source file extension.</p>
+ <p class="Tbl-Body">
+ Returns true is the variable value
+ has a file extension.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%template_file_noext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">if</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output file without an
- extension if it is a template file.</p>
+ <p class="Tbl-Body">
+ Used to determine if a variable is
+ defined. The not operator (<em class="Code">!</em> ) can
+ be used to invert the if check. This construct will only
+ check for values defined within an mpc or mpt file.
+ Default values (even those implemented by the project
+ creators) are not considered in the <em class=
+ "Code">if</em> statement.
+ </p>
</td>
</tr>
<tr>
- <td rowspan="1" colspan="2">
- <p class="TblCode">The extensions of the input and
- output files are also available as pseudo
- variables.</p>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">keyname_used</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This function is used to associate a
+ key with a variable value. If the key has been associated
+ with a variable value more than once, either through
+ physical repetition of the key in the template or through
+ evaluation of a foreach context, the count of association
+ will be appended to the output.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%input_ext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">lc</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The extension of the input file
- (if it has one).</p>
+ <p class="Tbl-Body">
+ Return the given variable value in
+ all lower case characters.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%output_ext%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">marker</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The extension of the output file
- (if it has one).</p>
+ <p class="Tbl-Body">
+ This is directly related to the
+ <em class="Code">verbatim</em> keyword from the mpc
+ syntax. This can be used to designate markers within a
+ template. Ex. <em class=
+ "Code">&lt;%marker(local)%&gt;</em>.
+ </p>
</td>
</tr>
- </table>
- </li>
-
- <li class="Body">&nbsp;</li>
-
- <li class="Body">The following table describes the pseudo
- template variables that can be used in the <em class=
- "Code">command</em>, <em class="Code">commandflags</em>,
- <em class="Code">dependent</em>, <em class=
- "Code">output_option</em> and <em class=
- "Code">postcommand</em> settings.</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle"><a name=
- "Common Pseudo Variables"></a>Common Pseudo Variables</h6>
- <table border="1" summary="Common Pseudo Variables">
<tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Variable</p>
- </th>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">multiple</em>
+ </p>
+ </td>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This function returns true if the
+ array parameter contains multiple values.
+ </p>
+ </td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%and%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">noextension</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform and project
- non-specific representation of a command conditional
- and.</p>
+ <p class="Tbl-Body">
+ Evaluates the variable name value as
+ a file name and removes the extension from that value
+ including the period.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%cat%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">normalize</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to print a file to the terminal.</p>
+ <p class="Tbl-Body">
+ Convert spaces, dashes, slashes,
+ dollar signs, parenthesis and dots in the given variable
+ value to underscores.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%cmdsep%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">remove_from</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A project and platform
- non-specific command separator which always runs
- right-hand side of the command. For example, in the
- following psuedo commmand string, both the <em class=
- "Code">&lt;%cat%&gt;</em> and <em class=
- "Code">&lt;%mv%&gt;</em> commands would be run.
- <em class="Code">&lt;%cat%&gt; &lt;%source_file%&gt;
- &lt;%gt%&gt; foo &lt;%cmdsep%&gt; &lt;%mv%&gt; foo
- other_dir</em></p>
+ <p class="Tbl-Body">
+ This function will remove a file in a
+ component list. It requires three parameters. The first
+ parameter is a component name (e.g., Source_Files), the
+ second parameter is a regular expression pattern and
+ the third parameter is a project or template variable
+ name. The fourth and optional parameter allows you to
+ alter the project or template variable value by
+ removing the end matching portion. If the value of
+ the project or template variable (i.e., parameter
+ three) after being modified by parameter four and
+ having the regular expression pattern (i.e.,
+ parameter two) appended to it matches any value
+ within the compent list (named by parameter one), it
+ will be removed from that component list and passed
+ back.
+ any
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%cmp%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">reverse</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to compare two files.</p>
+ <p class="Tbl-Body">
+ This function reverses the order of
+ the array parameter values.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%cp%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">scope</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to copy a file.</p>
+ <p class="Tbl-Body">
+ This is used to set the scope of
+ execution of a function that will operate on the template
+ output. A scope is begun by passing "enter" as the first
+ parameter and a function name as the second parameter.
+ Currently, the only function name supported is "escape".
+ The third parameter specifies a string on which the
+ function will operate. Any template text that matches the
+ string parameter while within this scope will be
+ transformed by the function parameter. A scope is then
+ ended by passing "leave".
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%crlf%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">set</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific line
- ending.</p>
+ <p class="Tbl-Body">
+ This function is used to set or
+ create a template variable. This function takes two
+ parameters; the first is the template variable name
+ and the second is the variable value.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%equote%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">sort</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A project non-specific escaped
- double quote.</p>
+ <p class="Tbl-Body">
+ This function sorts the array
+ parameter values.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%gendir%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">starts_with</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output directory specified by
- the <em class="Code">gendir</em> setting. This
- variable is not available to <em class=
- "Code">postbuild</em>, <em class=
- "Code">postclean</em>, or<em class=
- "Code">prebuild.</em></p>
+ <p class="Tbl-Body">
+ This function returns true if the
+ variable value (first parameter) starts with the regular
+ expression (second parameter).
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%gt%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">transdir</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform and project
- non-specific representation of a greater than
- sign.</p>
+ <p class="Tbl-Body">
+ Replaces values within the directory
+ portion of a variable value with something that can be
+ used as a relative path. The current working directory is
+ removed and ".." is replaced with "dotdot".
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%lt%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">translate_vars</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform and project
- non-specific representation of a less than sign.</p>
+ <p class="Tbl-Body">
+ The first parameter to this function
+ is the name of a variable. The second, optional,
+ parameter is the operating system for which the
+ project is being generated (e.g., linux, solaris,
+ win32, etc.) It replaces $(...) found within the
+ value of the variable with the equivalent environment
+ variable reference based on the operating system.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%mkdir%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">uc</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to make a directory.</p>
+ <p class="Tbl-Body">
+ Return the given variable value in
+ all upper case characters.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%mv%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">ucw</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to move a file.</p>
+ <p class="Tbl-Body">
+ Return the given variable value with
+ the first letter of each word in upper case. Words are
+ separated by spaces or underscores.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%nul%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">uniq</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific null
- device.</p>
+ <p class="Tbl-Body">
+ This function returns the unique set
+ of the array parameter values.
+ </p>
</td>
</tr>
+ </table>
+ </p>
+
+ <p class="Body">
+ The following table lists special names that can
+ be used as variables in some template files. The variables listed
+ in the <a href=
+ "MakeProjectCreator.html#Common_Pseudo_Variables" class=
+ "XRef">Common_Pseudo_Variables</a> table can be used as well
+ (except for <em class="Code">&lt;%temporary%&gt;</em>).
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ Special Values used in Template
+ Files
+ </h6>
+
+ <table border="1" summary=
+ "Special Values used in Template Files">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Value</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%pathsep%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">am_version</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific path
- separator (; or :).</p>
+ <p class="Tbl-Body">
+ Implemented by the Automake project
+ creator module, converts the <em class=
+ "Code">version</em> setting into a suitable value for
+ automake.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%or%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">ciao</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform and project
- non-specific representation of a command conditional
- or.</p>
+ <p class="Tbl-Body">
+ Implemented by the GNUACE project
+ creator module, specifies that the project uses CIAO.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%os%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">compilers</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">Returns either win32 or unix.</p>
+ <p class="Tbl-Body">
+ Implemented by the Make project
+ creator module, provides the compiler name based on the
+ current project language.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%prj_type%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">cppdir</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The project type as supplied
- by the -type command line option.</p>
+ <p class="Tbl-Body">
+ This value is implemented by the
+ BMake project creator module. It returns a semicolon
+ separated list of directories taken from each value in
+ the <em class="Code">Source_Files</em> list.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%quote%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">custom_types</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A project non-specific
- representation of a double quote.</p>
+ <p class="Tbl-Body">
+ Contains a list of the custom build
+ types. See <a href=
+ "MakeProjectCreator.html#Custom_Types" class=
+ "XRef">Custom Types</a> for more details.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%rm%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">cwd</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific command
- to delete a file.</p>
+ <p class="Tbl-Body">
+ The full current working
+ directory.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%rmdir%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">forcount</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific recursive
- directory delete command.</p>
+ <p class="Tbl-Body">
+ This only has a value within the
+ context of a <em class="Code">foreach</em> and provides a
+ 1 based count, by default, of the index of the elements
+ in <em class="Code">foreach</em>.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%slash%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">guid</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A platform non-specific directory
- separator.</p>
+ <p class="Tbl-Body">
+ This value is implemented by the VC7
+ and WIX project creator modules. It returns a <em class=
+ "Code">guid</em> value based on the project that is
+ usable within VC7, VC71, VC8, VC9, VC10 and WIX project
+ files.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%temporary%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">language</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">A temporary file name. The
- generated temporary file name contains no directory
- portion and is the same for each use within the same
- variable setting.</p>
+ <p class="Tbl-Body">
+ This value is implemented by the VC7
+ and Make project creator modules. It returns the current
+ language setting for the project.
+ </p>
</td>
</tr>
<tr>
- <td rowspan="1" colspan="2">
- <p class="TblCode">The following variables will
- be set to the known extension for Windows based
- project types and empty on non-Windows based
- project types.</p>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">make_file_name</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This value is implemented by the VC6
+ and EM3 project creator modules. It returns the project
+ name with the make file extension that corresponds to the
+ particular project type.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%bat%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">project_file</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The extension for batch
- files.</p>
+ <p class="Tbl-Body">
+ This variable contains the name of
+ the output file for the current project being
+ generated.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%cmd%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">project_name</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The extension for command
- files.</p>
+ <p class="Tbl-Body">
+ This variable contains the name of
+ the current project being generated.
+ </p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
- <p class="TblCode"><em class=
- "TableCode">&lt;%exe%&gt;</em></p>
+ <p class="Tbl-Body">
+ <em class="TableCode">rcdir</em>
+ </p>
</td>
<td rowspan="1" colspan="1">
- <p class="Tbl-Body">The extension for executable
- files.</p>
+ <p class="Tbl-Body">
+ This value is implemented by the
+ BMake project creator module. It returns a semicolon
+ separated list of directories taken from each value in
+ the <em class="Code">Resource_Files</em> list.
+ </p>
</td>
</tr>
- </table>
- </li>
- </ul>
- </div>
- </div>
- </div>
-
- <div>
- <a name="TheFeatureFile" id="TheFeatureFile"></a>
-
- <h5 class="Head4">The Feature File</h5>
-
- <ul>
- <li class="BodyNoLead">The term feature, as used by MPC,
- describes different concepts or external software that a project
- may require in order to build properly. The feature file
- determines which features are enabled or disabled which has a
- direct effect on whether or not MPC generates a project.</li>
-
- <li class="Body">It supports the standard comment (<em class=
- "Code">//</em> ) and assignment of numbers to feature names.
- These feature names will correspond to values given to the
- <em class="Code">requires</em> and <em class="Code">avoids</em>
- keywords in mpc files.</li>
-
- <li class="Body">If a feature is not listed in the feature file
- or is listed with a boolean value of true (1), that feature is
- enabled. If a feature is listed and has a boolean value of false
- (0), that feature is disabled.</li>
-
- <li class="Body">If a feature name is listed in the <em class=
- "Code">requires</em> value for a particular project and that
- feature is enabled, that project will be generated. If the
- feature is not enabled, the project will not be generated.</li>
-
- <li class="Body">The opposite holds true for the <em class=
- "Code">avoids</em> keyword. If a feature name is listed in the
- <em class="Code">avoids</em> value for a project and the feature
- is disabled, that project will be generated. If the feature is
- enabled, the project will not be generated.</li>
-
- <li class="Body">The global feature file for MPC contains the
- following values.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">boost = 0</p>
-
- <p class="Code">bzip2 = 0</p>
-
- <p class="Code">java = 0</p>
-
- <p class="Code">mfc = 0</p>
-
- <p class="Code">python = 0</p>
-
- <p class="Code">qt = 0</p>
-
- <p class="Code">rpc = 0</p>
-
- <p class="Code">swig_java = 0</p>
-
- <p class="Code">swig_perl = 0</p>
-
- <p class="Code">swig_php = 0</p>
-
- <p class="Code">swig_python = 0</p>
-
- <p class="Code">swig_ruby = 0</p>
-
- <p class="Code">swig_tcl = 0</p>
-
- <p class="Code">uses_wchar = 0</p>
-
- <p class="Code">xalan = 0</p>
-
- <p class="Code">xerces = 0</p>
-
- <p class="Code">xerces2 = 0</p>
-
- <p class="Code">xerces3 = 0</p>
-
- <p class="Code">ziparchive = 0</p>
-
- <p class="Code">zlib = 0</p>
-
- <p class="Code">zzip = 0</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">In the above contents, all of these features are
- disabled for each project generated. If these values do not suit
- your needs, then you must do one of the following:</li>
-
- <li class="BodyNoLead">
- <ul>
- <li>Create a project specific feature file in the <em class=
- "Code">config</em> directory (ex., <em class=
- "Code">make.features</em> for the <em class="Code">make</em>
- project type) to set features for a particular project
- type.</li>
-
- <li>Create a <em class="Code">default.features</em> file in
- the <em class="Code">config</em> directory that contains the
- feature set you need. These will be applied to all project
- types.</li>
-
- <li>Create a feature file anywhere you like with the features
- you want and use the <em class="Code">-feature_file</em>
- option to specify the location.</li>
-
- <li>Use the <em class="Code">-features</em> option to
- dynamically modify the feature settings.</li>
- </ul>
- </li>
-
- <li class="Body">Generated projects will have a combination of
- features specified in the <em class="Code">global.features</em>
- file as well as in your feature file. Therefore, if a feature is
- disabled in the global file and you want to enable it, you must
- explicitly enable it in your feature file.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Feature Projects</h5>
-
- <ul>
- <li class="BodyNoLead">A feature project contains information as
- a project would, but can only be a base project and will only be
- added to a sub project if the features that it requires are
- enabled or the features that it avoids are disabled.</li>
-
- <li class="Body">A feature definition requires at least one
- feature name. A name by itself specifies that the feature must be
- enabled. A &rsquo;!&rsquo; in front of the feature name indicates
- that the feature must be disabled. There may be more than one
- comma separated feature listed between the parenthesis.</li>
-
- <li class="Body">The following example show how to declare a
- feature project.</li>
-
- <li class="Body">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">// ziparchive.mpb</p>
-
- <p class="Code">feature(ziparchive) {</p>
-
- <p class="Code">&nbsp;&nbsp;includes += $(ZIPARCHIVEROOT)</p>
-
- <p class="Code">&nbsp;&nbsp;libpaths +=
- $(ZIPARCHIVEROOT)/lib</p>
-
- <p class="Code">&nbsp;&nbsp;libs &nbsp;&nbsp;&nbsp;&nbsp;+=
- ziparch</p>
-
- <p class="Code">}</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">With this example, any project that inherits
- from the <em class="Code">ziparchive</em> base feature project
- will contain the project information only if the <em class=
- "Code">ziparchive</em> feature is enabled.</li>
- </ul>
- </div>
- </div>
-
- <div>
- <h4 class="Head3">Defaults</h4>
-
- <ul>
- <li class="BodyNoLead">MPC has been designed to minimize the amount
- of maintenance that goes into keeping build tool files up-to-date
- with the project. If your source code is organized <em class=
- "Emphasis">properly</em>, the maintenance of your mpc files should
- be minimal.</li>
-
- <li class="Body">With the use of inheritance and proper code
- arrangement, an mpc file for a TAO related project may be as simple
- as:</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">project: taoserver {</p>
-
- <p class="Code">}</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">This project definition could be used to generate
- a project for a TAO server with multiple idl, header and source
- files.</li>
-
- <li class="Body">The idea of <em class="Emphasis">proper</em>
- source layout is basically summarized as <em class="Emphasis">one
- directory per binary target.</em> If only the files that pertain to
- a single target are located in the directory with the mpc file,
- then the MPC defaults will satisfy most project needs.</li>
-
- <li class="Body">Of course, it will not always be possible or
- desirable to organize your project code in this fashion, so all
- defaulting behavior can be overridden. The next sections describe
- the default behaviors of MPC and how to override them.</li>
- </ul>
-
- <div>
- <h5 class="Head4">Source Files</h5>
-
- <ul>
- <li class="BodyNoLead">New source files are added and others are
- removed quite often in a developing project. If the <em class=
- "Code">Source_Files</em> component is left out of an mpc file,
- then MPC will assume that any file matching one of the <em class=
- "Emphasis">source</em> extensions is to be included in the
- project. For most project types, the source extensions are:
- <em class="Code">.cpp</em>, <em class="Code">.cxx</em>,
- <em class="Code">.cc</em>, <em class="Code">.c</em> and
- <em class="Code">.C</em>. Only the following extensions are
- considered source extensions: <em class="Code">.cpp</em>,
- <em class="Code">.cxx</em> and <em class="Code">.c</em> for the
- <em class="Code">em3</em> and <em class="Code">vc6</em> project
- types as eMbedded Visual C++ and Visual C++ 6.0 do not understand
- files with the <em class="Code">.cc</em> or <em class=
- "Code">.C</em> extension.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Template Files</h5>
-
- <ul>
- <li class="BodyNoLead">MPC assumes that any file matching one of
- the <em class="Emphasis">template</em> extensions is to be
- included in the project if the <em class=
- "Code">Template_Files</em> component is left out of an mpc file.
- For most project types, the template extensions are: <em class=
- "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>, <em class=
- "Code">_T.cc</em>, <em class="Code">_T.c</em>, and <em class=
- "Code">_T.C</em>. However, only the <em class="Code">_T.cpp</em>
- and <em class="Code">_T.cxx</em> extensions are considered
- template extensions for the <em class="Code">em3</em> and
- <em class="Code">vc6</em> project types.</li>
-
- <li class="Body">If the <em class="Code">Source_Files</em>
- component is defaulted, and a file is explicitly listed in the
- Template_Files section that happens to appear to MPC as a source
- file (i.e., has a source file extension, but does not have
- <em class="Code">_T</em> directly before it), MPC will
- automatically exclude it from the <em class=
- "Code">Source_Files</em> component.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Inline Files</h5>
-
- <ul>
- <li class="BodyNoLead">As with source files, the <em class=
- "Code">Inline_Files</em> component can be left out of an mpc file
- to allow it to generate defaults. Files that match the <em class=
- "Code">.i</em> and <em class="Code">.inl</em> extensions are
- considered inline files.</li>
-
- <li class="Body">The <em class="Code">Inline_Files</em> component
- has a special interaction with the <em class=
- "Code">Source_Files</em> component. If the <em class=
- "Code">Source_Files</em> component has files listed and the
- <em class="Code">Inline_Files</em> component is omitted, then
- each source file is <em class="Emphasis">matched</em> to an
- inline file. If the matching inline file is found or would be
- generated from a custom command, it is added to the <em class=
- "Code">Inline_Files</em> component list.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Header Files</h5>
-
- <ul>
- <li class="BodyNoLead">As with source files, the <em class=
- "Code">Header_Files</em> component can be left out of an mpc file
- to allow it to generate defaults. Files that match the <em class=
- "Code">.h</em>, <em class="Code">.hpp</em>, <em class=
- "Code">.hxx</em>, and <em class="Code">.hh</em> extensions are
- considered header files.</li>
-
- <li class="Body">The <em class="Code">Header_Files</em> component
- has a special interaction with the <em class=
- "Code">Source_Files</em> component. If the <em class=
- "Code">Source_Files</em> component has files listed and the
- <em class="Code">Header_Files</em> component is omitted, then
- each source file is <em class="Emphasis">matched</em> to a header
- file. If the matching header file is found or would be generated
- from a custom command, then it is added to the <em class=
- "Code">Header_Files</em> component list.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Documentation Files</h5>
-
- <ul>
- <li class="BodyNoLead">The <em class=
- "Code">Documentation_Files</em> component, if omitted, will
- default to all files that end in the following: <em class=
- "Code">README</em>, <em class="Code">readme</em>, <em class=
- "Code">.doc</em>, <em class="Code">.html</em> and <em class=
- "Code">.txt</em>.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Resource Files</h5>
-
- <ul>
- <li class="BodyNoLead">The <em class="Code">Resource_Files</em>
- component, if omitted, will default to only the files that end in
- <em class="Code">.rc</em> and are similar to the name of the
- project. For example, if a directory contains three <em class=
- "Code">.rc</em> files and the project name is <em class=
- "Code">foo</em>, only the <em class="Code">.rc</em> files that
- contain the word <em class="Code">foo</em> will automatically be
- added to the <em class="Code">Resource_Files</em> component
- list.</li>
- </ul>
- </div>
-
- <div>
- <h5 class="Head4">Custom Defined Files</h5>
-
- <ul>
- <li class="BodyNoLead">The <em class="Code">Custom Defined
- Files</em> components have a special interaction with the
- <em class="Code">Source_Files</em> component. If the custom
- command generates source files and has the <em class=
- "Code">automatic_out</em> setting set to 1, they will
- automatically be added to the <em class="Code">Source_Files</em>
- component list. If any of the files listed in the <em class=
- "Code">Source_Files</em> components list match any of the
- generated source file names, then none of the generated source
- file names will be automatically added to the <em class=
- "Code">Source_Files</em> components list.</li>
- </ul>
- </div>
-
- <div>
- <a name="ExampleMPCFile" id="ExampleMPCFile"></a>
-
- <h5 class="Head4">Example MPC File</h5>
-
- <ul>
- <li class="BodyNoLead">The example below uses the directory
- contents of <em class=
- "Code">$TAO_ROOT/orbsvcs/performance-tests/RTEvent/lib</em> to
- illustrate the simplicity of mpc files:</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">Auto_Disconnect.cpp Loopback_Supplier.h
- RTEC_Initializer.cpp</p>
-
- <p class="Code">Auto_Disconnect.h Low_Priority_Setup.cpp
- RTEC_Initializer.h</p>
-
- <p class="Code">Auto_Disconnect.inl Low_Priority_Setup.h
- rtec_perf_export.h</p>
-
- <p class="Code">Auto_Functor.cpp Low_Priority_Setup.inl
- RTEC_Perf.mpc</p>
-
- <p class="Code">Auto_Functor.h Makefile RTPOA_Setup.cpp</p>
-
- <p class="Code">Auto_Functor.inl ORB_Holder.cpp
- RTPOA_Setup.h</p>
-
- <p class="Code">Client_Group.cpp ORB_Holder.h
- RTPOA_Setup.inl</p>
-
- <p class="Code">Client_Group.h ORB_Holder.inl
- RTServer_Setup.cpp</p>
-
- <p class="Code">Client_Group.inl ORB_Shutdown.cpp
- RTServer_Setup.h</p>
-
- <p class="Code">Client_Options.cpp ORB_Shutdown.h
- RTServer_Setup.inl</p>
-
- <p class="Code">Client_Options.h ORB_Shutdown.inl
- Send_Task.cpp</p>
-
- <p class="Code">Client_Pair.cpp ORB_Task_Activator.cpp
- Send_Task.h</p>
-
- <p class="Code">Client_Pair.h ORB_Task_Activator.h
- Send_Task_Stopper.cpp</p>
-
- <p class="Code">Client_Pair.inl ORB_Task_Activator.inl
- Send_Task_Stopper.h</p>
-
- <p class="Code">Consumer.cpp ORB_Task.cpp
- Send_Task_Stopper.inl</p>
-
- <p class="Code">Consumer.h ORB_Task.h Servant_var.cpp</p>
-
- <p class="Code">Control.cpp ORB_Task.inl Servant_var.h</p>
-
- <p class="Code">Control.h Peer_Base.cpp Servant_var.inl</p>
-
- <p class="Code">EC_Destroyer.cpp Peer_Base.h Shutdown.cpp</p>
-
- <p class="Code">EC_Destroyer.h PriorityBand_Setup.cpp
- Shutdown.h</p>
-
- <p class="Code">EC_Destroyer.inl PriorityBand_Setup.h
- Shutdown.inl</p>
-
- <p class="Code">Federated_Test.idl PriorityBand_Setup.inl
- Supplier.cpp</p>
-
- <p class="Code">Implicit_Deactivator.cpp RIR_Narrow.cpp
- Supplier.h</p>
-
- <p class="Code">Implicit_Deactivator.h RIR_Narrow.h
- SyncScope_Setup.cpp</p>
-
- <p class="Code">Implicit_Deactivator.inl RT_Class.cpp
- SyncScope_Setup.h</p>
-
- <p class="Code">Loopback_Consumer.cpp RT_Class.h
- SyncScope_Setup.inl</p>
-
- <p class="Code">Loopback_Consumer.h RT_Class.inl
- TAO_RTEC_Perf.dsp</p>
-
- <p class="Code">Loopback.cpp RTClient_Setup.cpp
- TAO_RTEC_Perf.dsw</p>
-
- <p class="Code">Loopback.h RTClient_Setup.h
- Task_Activator.cpp</p>
-
- <p class="Code">Loopback_Pair.cpp RTClient_Setup.inl
- Task_Activator.h</p>
-
- <p class="Code">Loopback_Pair.h RTCORBA_Setup.cpp
- Task_Activator.inl</p>
-
- <p class="Code">Loopback_Pair.inl RTCORBA_Setup.h</p>
-
- <p class="Code">Loopback_Supplier.cpp RTCORBA_Setup.inl</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">The following mpc file (<em class=
- "Code">RTEC_Perf.mpc</em> ) shows the simple and small number of
- lines required to generate usable build tool project files.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent,
- minimum_corba {</p>
-
- <p class="Code">&nbsp;&nbsp;sharedname = TAO_RTEC_Perf</p>
-
- <p class="Code">&nbsp;&nbsp;idlflags +=
- -Wb,export_macro=TAO_RTEC_Perf_Export \</p>
-
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Wb,export_include=rtec_perf_export.h</p>
-
- <p class="Code">&nbsp;&nbsp;dllflags +=
- TAO_RTEC_PERF_BUILD_DLL</p>
-
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&nbsp;&nbsp;Template_Files {</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Disconnect.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Functor.cpp</p>
-
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;Low_Priority_Setup.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;RIR_Narrow.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Servant_var.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Shutdown.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Task_Activator.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;}</p>
-
- <p class="Code">}</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">A line-by-line explanation of the example mpc
- file is listed below.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent,
- minimum_corba {</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">The first line declares a project named
- <em class="Code">RTEC_Perf</em> that inherits from the base
- projects listed after the colon.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">sharedname = TAO_RTEC_Perf</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Line two determines that the project is a
- library and the library name is <em class=
- "Code">TAO_RTEC_Perf</em>.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">idlflags +=
- -Wb,export_macro=TAO_RTEC_Perf_Export \</p>
-
- <p class="Code">-Wb,export_include=rtec_perf_export.h</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Lines three and four add to the flags passed to
- the IDL compiler when processing the idl files.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Line five adds <em class=
- "Code">TAO_RTEC_PERF_BUILD_DLL</em> to the <em class=
- "Code">dllflags</em>, which defines a macro that is used by the
- <em class="Code">rtec_perf_export.h</em> header file.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">Template_Files {</p>
-
- <p class="Code">&nbsp;&nbsp;Auto_Disconnect.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;Auto_Functor.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;Low_Priority_Setup.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;RIR_Narrow.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;Servant_var.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;Shutdown.cpp</p>
-
- <p class="Code">&nbsp;&nbsp;Task_Activator.cpp</p>
-
- <p class="Code">}</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Lines 7 through 15 name the listed cpp files as
- part of the <em class="Code">Template_Files</em>.</li>
-
- <li class="Body">You may have noticed that there isn&rsquo;t much
- to the file above. With the default behaviors that are built into
- MPC, there does not need to be. We rely on the defaults to
- determine the values of <em class="Code">IDL_Files</em>,
- <em class="Code">Source_Files</em>, <em class=
- "Code">Inline_Files</em> , and <em class=
- "Code">Header_Files</em>. Since the template files do not match
- the MPC built-in defaults, we must explicitly list them. We also
- rely on inheritance to get many of the TAO-related options.</li>
- </ul>
- </div>
- </div>
- </div>
-
- <div>
- <h3 class="Head2">Adding a New Type</h3>
- <hr>
-
- <ul>
- <li class="Body">If MPC does not support a particular build tool, you
- may want to consider adding a new project type. For instance, support
- could be added to MPC for Boost Jam, Xcode and many others. To do so
- will require knowledge of the MPC input files, as well as Object
- Oriented Perl.</li>
- </ul>
-
- <div>
- <h4 class="Head3">Input File Syntax</h4>
-
- <ul>
- <li class="BodyNoLead">This section describes the syntax of the
- files that are used during project generation.</li>
- </ul>
-
- <div>
- <h5 class="Head4"><a name="MPD Syntax"></a>Template Files
- (mpd)</h5>
-
- <ul>
- <li class="BodyNoLead">Template files make up the bulk of what
- MPC puts into each generated project file. They provide the plain
- text and the layout of the data provided by the mpc files, using
- various template directives.</li>
-
- <li class="Body">Template directives are declared using a
- <em class="Code">&lt;% %&gt;</em> construct. This construct is
- used to create if statements, for loops and to access variables.
- One thing to note is that any text, including white space, that
- is not enclosed within <em class="Code">&lt;% %&gt;</em> is left
- untouched and is passed directly into the generated project
- file.</li>
-
- <li class="Body">An <em class="Code">if</em> statement can appear
- on a single line or it can span multiple lines. For example, the
- following line:</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&lt;%if(exename)%&gt;BIN =
- &lt;%exename%&gt;&lt;%else%&gt;LIB =
- &lt;%sharedname%&gt;&lt;%endif%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">is equivalent to:</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&lt;%if(exename)%&gt;</p>
-
- <p class="Code">BIN = &lt;%exename%&gt;</p>
-
- <p class="Code">&lt;%else%&gt;</p>
-
- <p class="Code">LIB = &lt;%sharedname%&gt;</p>
-
- <p class="Code">&lt;%endif%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body"><a name="foreach syntax"></a> A <em class=
- "Code">foreach</em> statement can also appear on a single line or
- can span multiple lines. As described below in the keywords
- section, the <em class="Code">foreach</em> statement evaluates
- the variable in a space-separated list context.</li>
-
- <li class="Body">There are a couple of ways to write a <em class=
- "Code">foreach</em> loop. The first and preferred way is to name
- the loop variable and then list each variable to be
- evaluated.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">FILES=&lt;%foreach(fvar, idl_files source_files
- header_files)%&gt; &lt;%fvar%&gt;&lt;%endfor%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">The second way is to let the <em class=
- "Code">foreach</em> statement determine the loop variable. With
- this style, each value can be accessed via the first variable
- name passed to the <em class="Code">foreach</em> with the
- trailing &rsquo;<em class="Code">s</em> &rsquo; removed.</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">FILES=&lt;%foreach(idl_files source_files
- header_files)%&gt; &lt;%idl_file%&gt;&lt;%endfor%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Note that the <em class=
- "Code">&lt;%idl_file%&gt;</em> variable will contain each
- individual value of the <em class="Code">idl_files</em>,
- <em class="Code">source_files</em> and <em class=
- "Code">header_files</em> list. If the variable in the <em class=
- "Code">foreach</em> does not end in &rsquo;<em class=
- "Code">s</em> &rsquo;, the variable of the same name within the
- <em class="Code">foreach</em> will contain each individual value,
- e.g.,</li>
-
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&lt;%foreach(filelist)%&gt;
- &lt;%filelist%&gt;&lt;%endfor%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">The following table lists keywords that can
- appear in template files.</li>
-
- <li style="list-style: none">
- <a name="38037"></a>
-
- <h6 class="NumberedTableTitle">Template File Keywords</h6>
-
- <table border="1" summary="Template File Keywords">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Keyword</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">basename</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Evaluates the variable name and
- removes the directory portion from that value.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">basenoextension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is similar to <em class=
- "Code">basename</em> except that the extension is also
- removed from the variable name value.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">comment</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The value passed to comment is
- ignored and can be any set of characters, except a new
- line or a closing parenthesis.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">compares</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns true if the
- variable value (first parameter) is equal to the string
- value (second parameter).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">contains</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns true if the
- variable value (first parameter) contains the regular
- expression (second parameter).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">deref</em></p>
- </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Dereference the variable passed as
- a parameter, treating its value as another variable
- name and returning that variable's value.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dirname</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Evaluates the variable name and
- removes the <em class="Code">basename</em> from that
- value.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">duplicate_index</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns a number based
- on the number of times a file with the same name (but
- different directory) is seen within a project. The
- function returns false upon the first occurrence of a
- file.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">else</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with the <em class=
- "Code">if</em> statement. An <em class="Code">else</em>
- block will be evaluated if the statement does not
- evaluate to true.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">endfor</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with <em class=
- "Code">foreach</em>. This ends <em class=
- "Code">foreach</em> block.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">endif</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with the <em class=
- "Code">if</em> statement. This ends an <em class=
- "Code">if</em> or <em class="Code">if/else</em>
- block.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">ends_with</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns true if the
- variable value (first parameter) ends with the regular
- expression (second parameter).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">eval</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is similar to eval in perl. The
- template variable passed to this function will be
- evaluated within the context of the current template.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">extensions</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Returns a list of extensions based on
- the component name parameter (e.g., source_files,
- header_files, etc.)</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">flag_overrides</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is directly related to
- overriding the project-wide settings in an mpc file. It
- takes two variable names that are comma separated. The
- first corresponds to a file name and the second is any
- variable name.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">foreach</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The given variable names are
- evaluated in a list context which is space separated.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">forfirst</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with <em class=
- "Code">foreach</em>. The literal value passed to
- <em class="Code">forfirst</em> will be placed on the
- first iteration of <em class="Code">foreach</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">forlast</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with <em class=
- "Code">foreach</em>. The literal value passed to
- <em class="Code">forlast</em> will be placed on the last
- iteration of <em class="Code">foreach</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">fornotfirst</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with <em class=
- "Code">foreach</em>. The literal value passed to
- <em class="Code">fornotfirst</em> will be placed on each
- iteration of <em class="Code">foreach</em> except for the
- first.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">fornotlast</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used with <em class=
- "Code">foreach</em>. The literal value passed to
- <em class="Code">fornotlast</em> will be placed on each
- iteration of <em class="Code">foreach</em> except for the
- last.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">full_path</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Returns full path of the value of the
- variable name passed a the parameter.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">has_extension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Returns true is the variable value
- has a file extension.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">if</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Used to determine if a variable is
- defined. The not operator (<em class="Code">!</em> ) can
- be used to invert the if check. This construct will only
- check for values defined within an mpc or mpt file.
- Default values (even those implemented by the project
- creators) are not considered in the <em class=
- "Code">if</em> statement.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">keyname_used</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function is used to associate a
- key with a variable value. If the key has been associated
- with a variable value more than once, either through
- physical repetition of the key in the template or through
- evaluation of a foreach context, the count of association
- will be appended to the output.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">lc</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Return the given variable value in
- all lower case characters.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">marker</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is directly related to the
- <em class="Code">verbatim</em> keyword from the mpc
- syntax. This can be used to designate markers within a
- template. Ex. <em class=
- "Code">&lt;%marker(local)%&gt;</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">multiple</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns true if the
- array parameter contains multiple values.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">noextension</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Evaluates the variable name value as
- a file name and removes the extension from that value
- including the period.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">normalize</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Convert spaces, dashes, slashes,
- dollar signs, parenthesis and dots in the given variable
- value to underscores.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">remove_from</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function will remove a file in a
- component list. It requires three parameters. The first
- parameter is a component name (e.g., Source_Files), the
- second parameter is a regular expression pattern and
- the third parameter is a project or template variable
- name. The fourth and optional parameter allows you to
- alter the project or template variable value by
- removing the end matching portion. If the value of
- the project or template variable (i.e., parameter
- three) after being modified by parameter four and
- having the regular expression pattern (i.e.,
- parameter two) appended to it matches any value
- within the compent list (named by parameter one), it
- will be removed from that component list and passed
- back.
- any </p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">reverse</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function reverses the order of
- the array parameter values.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">scope</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This is used to set the scope of
- execution of a function that will operate on the template
- output. A scope is begun by passing "enter" as the first
- parameter and a function name as the second parameter.
- Currently, the only function name supported is "escape".
- The third parameter specifies a string on which the
- function will operate. Any template text that matches the
- string parameter while within this scope will be
- transformed by the function parameter. A scope is then
- ended by passing "leave".</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">set</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function is used to set or
- create a template variable. This function takes two
- parameters; the first is the template variable name
- and the second is the variable value.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">sort</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function sorts the array
- parameter values.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">starts_with</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns true if the
- variable value (first parameter) starts with the regular
- expression (second parameter).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">transdir</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Replaces values within the directory
- portion of a variable value with something that can be
- used as a relative path. The current working directory is
- removed and ".." is replaced with "dotdot".</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">translate_vars</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The first parameter to this function
- is the name of a variable. The second, optional,
- parameter is the operating system for which the
- project is being generated (e.g., linux, solaris,
- win32, etc.) It replaces $(...) found within the
- value of the variable with the equivalent environment
- variable reference based on the operating system.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">uc</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Return the given variable value in
- all upper case characters.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">ucw</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Return the given variable value with
- the first letter of each word in upper case. Words are
- separated by spaces or underscores.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">uniq</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This function returns the unique set
- of the array parameter values.</p>
- </td>
- </tr>
- </table>
- </li>
-
- <li class="Body">The following table lists special names that can
- be used as variables in some template files. The variables listed
- in the <a href=
- "MakeProjectCreator.html#Common%20Pseudo%20Variables" class=
- "XRef">Common Pseudo Variables</a> table can be used as well
- (except for <em class="Code">&lt;%temporary%&gt;</em>).</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Special Values used in Template
- Files</h6>
-
- <table border="1" summary=
- "Special Values used in Template Files">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Value</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">am_version</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Implemented by the Automake project
- creator module, converts the <em class=
- "Code">version</em> setting into a suitable value for
- automake.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">ciao</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Implemented by the GNUACE project
- creator module, specifies that the project uses CIAO.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">compilers</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Implemented by the Make project
- creator module, provides the compiler name based on the
- current project language.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">cppdir</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the
- BMake project creator module. It returns a semicolon
- separated list of directories taken from each value in
- the <em class="Code">Source_Files</em> list.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">custom_types</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Contains a list of the custom build
- types. See <a href=
- "MakeProjectCreator.html#Custom%20Types" class=
- "XRef">Custom Types</a> for more details.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">cwd</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The full current working
- directory.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">forcount</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This only has a value within the
- context of a <em class="Code">foreach</em> and provides a
- 1 based count, by default, of the index of the elements
- in <em class="Code">foreach</em>.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">guid</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the VC7
- and WIX project creator modules. It returns a <em class=
- "Code">guid</em> value based on the project that is
- usable within VC7, VC71, VC8, VC9, VC10 and WIX project
- files.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">language</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the VC7
- and Make project creator modules. It returns the current
- language setting for the project.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">make_file_name</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the VC6
- and EM3 project creator modules. It returns the project
- name with the make file extension that corresponds to the
- particular project type.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">project_file</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This variable contains the name of
- the output file for the current project being
- generated.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">project_name</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_directory</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This variable contains the name of
- the current project being generated.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This value is implemented by the WIX
+ project creator module. It converts the variable portion
+ of the binary output directory (either <em class=
+ "Code">exeout</em>, <em class="Code">dllout</em>, or
+ <em class="Code">libout</em>) to a suitable value for
+ WIX.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">rcdir</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">tao</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the
- BMake project creator module. It returns a semicolon
- separated list of directories taken from each value in
- the <em class="Code">Resource_Files</em> list.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ Implemented by the GNUACE project
+ creator module, specifies that the project uses TAO.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_directory</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">vcversion</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the WIX
- project creator module. It converts the variable portion
- of the binary output directory (either <em class=
- "Code">exeout</em>, <em class="Code">dllout</em>, or
- <em class="Code">libout</em>) to a suitable value for
- WIX.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This value is implemented by the
+ VC7ProjectCreator. It returns the version number of the
+ type of project being generated. 7.00 is return for vc7,
+ 7.10 is return for vc71 and 8.00 is returned for vc8,
+ 9.00 is returned for vc9, 10.00 is returned for vc10.
+ </p>
+ </td>
+ </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">tao</em></p>
- </td>
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class="TableCode">vpath</em>
+ </p>
+ </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">Implemented by the GNUACE project
- creator module, specifies that the project uses TAO.</p>
- </td>
- </tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ This value is implemented by the
+ GNUACEProjectCreator. It returns a value, based on the
+ location of the source files, that specifies the
+ <em class="Code">VPATH</em> setting for GNU Make.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">vcversion</em></p>
- </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the
- VC7ProjectCreator. It returns the version number of the
- type of project being generated. 7.00 is return for vc7,
- 7.10 is return for vc71 and 8.00 is returned for vc8,
- 9.00 is returned for vc9, 10.00 is returned for vc10.</p>
- </td>
- </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class="TableCode">vpath</em></p>
- </td>
+ <p class="Body">
+ <h6 class="Head5">
+ <a name="Document_Template_Script"></a>
+ Template Variable Documentation
+ </h6>
+ </p>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">This value is implemented by the
- GNUACEProjectCreator. It returns a value, based on the
- location of the source files, that specifies the
- <em class="Code">VPATH</em> setting for GNU Make.</p>
- </td>
- </tr>
- </table>
- </li>
- </ul>
-
- <ul>
- <li class="Body">
- <h6 class="Head5"><a name="Document Template Script"></a>
- Template Variable Documentation</h6>
- </li>
-
- <li class="Body">Template variables used within the MPC templates
- are numerous and vary from template to template; there are far
- too many to include in this document. However, you can generate
- an HTML document containing all of the template variables used
- within a template using the <em class=
+ <p class="Body">
+ Template variables used within the MPC templates
+ are numerous and vary from template to template; there are far
+ too many to include in this document. However, you can generate
+ an HTML document containing all of the template variables used
+ within a template using the <em class=
"Code">document_template.pl</em> script found in the <em class=
"Code">devtools</em> directory under the MPC root directory. You
- may find that some templates and individual template variables
- are well documented and, unfortunately, some are not.</li>
+ may find that some templates and individual template variables
+ are well documented and, unfortunately, some are not.
+ </p>
- <li class="Body">The script will generate documentation for an
- individual template file. The usage is as follows:</li>
+ <p class="Body">
+ The script will generate documentation for an
+ individual template file. The usage is as follows:
+ </p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">document_template.pl v1.3</p>
+ <p class="Code">document_template.pl v1.3</p>
+
+ <p class="Code">
+ Usage: document_template.pl &lt;template&gt;
+ [&lt;html output&gt; [language]]
+ </p>
- <p class="Code">Usage: document_template.pl &lt;template&gt;
- [&lt;html output&gt; [language]]</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ html output - This defaults to the name of the
+ template file with the .mpd
+ </p>
- <p class="Code">html output - This defaults to the name of the
- template file with the .mpd</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extension replaced with
+ .html.
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extension replaced with
- .html.</p>
+ <p class="Code">
+ language &nbsp;&nbsp;&nbsp;- This defaults to
+ the language for which the template is designed.
+ </p>
- <p class="Code">language &nbsp;&nbsp;&nbsp;- This defaults to
- the language for which the template is designed.</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It can be any of the valid
+ language settings for MPC:
+ </p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It can be any of the valid
- language settings for MPC:</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cplusplus csharp java
+ vb
+ </p>
+ </blockquote>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cplusplus csharp java
- vb</p>
- </li>
- </ul>
- <div>
- <a name="Custom Types"></a>
+ <div>
+ <a name="Custom_Types"></a>
- <h6 class="Head5">Custom Types</h6>
+ <h6 class="Head5">Custom Types</h6>
- <ul>
- <li class="BodyNoLead">To support multiple custom build types,
- a special keyword was introduced. The <em class=
+ <p class="BodyNoLead">
+ To support multiple custom build types,
+ a special keyword was introduced. The <em class=
"Code">custom_types</em> keyword is used to access the list of
- custom types defined by the user. In a <em class=
+ custom types defined by the user. In a <em class=
"Code">foreach</em> context, each custom type can be accessed
- through the <em class="Code">custom_type</em> keyword.</li>
+ through the <em class="Code">custom_type</em> keyword.
+ </p>
- <li class="Body">A variety of information is available from
- each <em class="Code">custom_type</em> through the <em class=
+ <p class="Body">
+ A variety of information is available from
+ each <em class="Code">custom_type</em> through the <em class=
"Code">-&gt;</em> operator. The input files, input extensions,
- command, command output option, command flags, and output file
- directory are all accessible through the field names that
- correspond to the particular type.</li>
-
- <li class="Body">The input files associated with the custom
- type are accessed through <em class=
+ command, command output option, command flags, and output file
+ directory are all accessible through the field names that
+ correspond to the particular type.
+ </p>
+
+ <p class="Body">
+ The input files associated with the custom
+ type are accessed through <em class=
"Code">custom_type-&gt;input_files</em>. Each input file has a
- set of output files associated with it which can be accessed in
- a <em class="Code">foreach</em> context through c<em class=
+ set of output files associated with it which can be accessed in
+ a <em class="Code">foreach</em> context through c<em class=
"Code">ustom_type-&gt;input_file-&gt;output_files</em>. The
- custom type fields are those listed in the <a href=
- "MakeProjectCreator.html#32899" class="XRef">Define_Custom
- Keywords</a> table as well as those listed in the following
- table.</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Custom Type Fields</h6>
-
- <table border="1" summary="Custom Type Fields">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Value</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">dependencies</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The files on which the processing
- of the custom input file depends.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">gendir</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The output directory associated
- with a particular input file. This field has no meaning
- when accessed directly through the <em class=
+ custom type fields are those listed in the <a href=
+ "MakeProjectCreator.html#32899" class="XRef">
+ Define_Custom
+ Keywords
+ </a> table as well as those listed in the following
+ table.
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">Custom Type Fields</h6>
+
+ <table border="1" summary="Custom Type Fields">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Value</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">dependencies</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The files on which the processing
+ of the custom input file depends.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">gendir</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The output directory associated
+ with a particular input file. This field has no meaning
+ when accessed directly through the <em class=
"Code">custom_type</em>. It should always be used
- within the context of a <em class=
+ within the context of a <em class=
"Code">flag_overrides</em> (see <a href=
- "MakeProjectCreator.html#38037" class="XRef">Template
- File Keywords</a>).</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">input_files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The input files associated with the
- custom type.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">inputexts</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The input file extensions
- associated with the custom type.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">non_source_output_files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">All output files generated from the
- custom input file that are not considered source code
- files by MPC.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">output_files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">All output files generated from the
- custom input file.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">source_output_files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">All output files generated from the
- custom input file that are considered source code files
- by MPC.</p>
- </td>
- </tr>
- </table>
- </li>
-
- <li class="Body">The example below, which creates generic
- makefile rules for building custom input files, shows basic use
- of the custom type and the various fields that can be accessed.
- The main limitation with the <em class="Code">custom_types</em>
- keyword, as can be seen below, is that the <em class=
+ "MakeProjectCreator.html#38037" class="XRef">
+ Template
+ File Keywords
+ </a>).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">input_files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The input files associated with the
+ custom type.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">inputexts</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The input file extensions
+ associated with the custom type.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">non_source_output_files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ All output files generated from the
+ custom input file that are not considered source code
+ files by MPC.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">output_files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ All output files generated from the
+ custom input file.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">source_output_files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ All output files generated from the
+ custom input file that are considered source code files
+ by MPC.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+ <p class="Body">
+ The example below, which creates generic
+ makefile rules for building custom input files, shows basic use
+ of the custom type and the various fields that can be accessed.
+ The main limitation with the <em class="Code">custom_types</em>
+ keyword, as can be seen below, is that the <em class=
"Code">foreach</em> variable cannot be named as stated <a href=
- "MakeProjectCreator.html#foreach%20syntax" class=
- "XRef">previously</a>.</li>
+ "MakeProjectCreator.html#foreach_syntax" class=
+ "XRef">previously</a>.
+ </lpi>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&lt;%if(custom_types)%&gt;</p>
-
- <p class="Code">&lt;%foreach(custom_types)%&gt;</p>
-
- <p class="Code">
- &lt;%foreach(custom_type-&gt;input_files)%&gt;</p>
+ <blockquote>
- <p class="Code">
- &lt;%foreach(custom_type-&gt;input_file-&gt;output_files)%&gt;</p>
+ <p class="Code">&lt;%if(custom_types)%&gt;</p>
- <p class="Code">
- &lt;%custom_type-&gt;input_file-&gt;output_file%&gt;:
- &lt;%custom_type-&gt;input_file%&gt;</p>
+ <p class="Code">&lt;%foreach(custom_types)%&gt;</p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%custom_type-&gt;command%&gt;
- &lt;%custom_type-&gt;commandflags%&gt; $@</p>
-
- <p class="Code">&nbsp;</p>
-
- <p class="Code">&lt;%endfor%&gt;</p>
-
- <p class="Code">&lt;%endfor%&gt;</p>
-
- <p class="Code">&lt;%endfor%&gt;</p>
-
- <p class="Code">&lt;%endif%&gt;</p>
-
- <p class="Code">&nbsp;</p>
- </li>
-
- <li class="Body">Certain project types don't support the same
- input file used by multiple custom types (current examples of
- this are vc10, cdt6, and cdt7). To accomodate these types, MPC
- has a capability called "combined custom". With this capability
- enabled in the specific ProjectCreator, MPC will "fold together"
- the multiple custom steps so that the target tool (Visual Studio
- or Eclipse CDT) sees it as a single custom step that happens to
- run two or more commands. When "combined custom" is enabled,
- the template needs to be written for it by checking if
- <em class="Code">custom_type-&gt;input_file-&gt;commands</em> is
- non-empty. If it isn't empty, the values in it can be iterated
- over with a <em class="Code">&lt;%foreach%&gt;</em>. During that
- iteration, the following values can be obtained by the template.
- Each one would appear in the template preceeded by
- <em class="Code">custom_type-&gt;input_file-&gt;</em></li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Custom Type Fields for Combined
- Custom</h6>
- <table border="1"
- summary="Custom Type Fields for Combined Custom">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Value</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The effective command, taking into
- account the <em class="TableCode">flag_overrides</em>.
+ <p class="Code">
+ &lt;%foreach(custom_type-&gt;input_files)%&gt;
</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command-&gt;outopt</em></p>
- </td>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The <em class=
- "TableCode">output_option</em> for this particular
- command, taking into account the
- <em class="TableCode">flag_overrides</em>.
- </p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command-&gt;outfile</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The first output file for this
- particular command (for use with
- <em class="TableCode">outopt</em>).
+ <p class="Code">
+ &lt;%foreach(custom_type-&gt;input_file-&gt;output_files)%&gt;
</p>
- </td>
- </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command-&gt;flags</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The <em class=
- "TableCode">commandflags</em> for this particular
- command, taking into account the
- <em class="TableCode">flag_overrides</em>.
+ <p class="Code">
+ &lt;%custom_type-&gt;input_file-&gt;output_file%&gt;:
+ &lt;%custom_type-&gt;input_file%&gt;
</p>
- </td>
- </tr>
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">command-&gt;gdir</em></p>
- </td>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%custom_type-&gt;command%&gt;
+ &lt;%custom_type-&gt;commandflags%&gt; $@
+ </p>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The <em class=
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+
+ </blockquote>
+
+ <p class="Body">
+ Certain project types don't support the same
+ input file used by multiple custom types (current examples of
+ this are vc10, cdt6, and cdt7). To accomodate these types, MPC
+ has a capability called "combined custom". With this capability
+ enabled in the specific ProjectCreator, MPC will "fold together"
+ the multiple custom steps so that the target tool (Visual Studio
+ or Eclipse CDT) sees it as a single custom step that happens to
+ run two or more commands. When "combined custom" is enabled,
+ the template needs to be written for it by checking if
+ <em class="Code">custom_type-&gt;input_file-&gt;commands</em> is
+ non-empty. If it isn't empty, the values in it can be iterated
+ over with a <em class="Code">&lt;%foreach%&gt;</em>. During that
+ iteration, the following values can be obtained by the template.
+ Each one would appear in the template preceeded by
+ <em class="Code">custom_type-&gt;input_file-&gt;</em>
+ </p>
+
+ <p style="list-style: none">
+ <h6 class="NumberedTableTitle">
+ Custom Type Fields for Combined
+ Custom
+ </h6>
+ <table border="1"
+ summary="Custom Type Fields for Combined Custom">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Value</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The effective command, taking into
+ account the <em class="TableCode">flag_overrides</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command-&gt;outopt</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The <em class=
+ "TableCode">output_option</em> for this particular
+ command, taking into account the
+ <em class="TableCode">flag_overrides</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command-&gt;outfile</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The first output file for this
+ particular command (for use with
+ <em class="TableCode">outopt</em>).
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command-&gt;flags</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The <em class=
+ "TableCode">commandflags</em> for this particular
+ command, taking into account the
+ <em class="TableCode">flag_overrides</em>.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">command-&gt;gdir</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The <em class=
"TableCode">gendir</em> for this particular
- command.
- </p>
- </td>
- </tr>
+ command.
+ </p>
+ </td>
+ </tr>
- </table>
- </li>
+ </table>
+ </p>
- </ul>
- </div>
- <div>
- <h6 class="Head5">Grouped Files</h6>
+ </div>
+
+ <div>
+ <h6 class="Head5">Grouped Files</h6>
- <ul>
- <li class="BodyNoLead">File grouping is part of the syntax of
- mpc files. If a set of files are grouped within the mpc file,
- they can be accessed as a group within the mpd file.</li>
+ <p class="Body">
+ File grouping is part of the syntax of
+ mpc files. If a set of files are grouped within the mpc file,
+ they can be accessed as a group within the mpd file.
+ </p>
- <li class="Body">Files (such as <em class=
+ <p class="Body">
+ Files (such as <em class=
"Code">Source_Files</em>, <em class="Code">Header_Files</em> )
- can be grouped together as shown <a href=
+ can be grouped together as shown <a href=
"MakeProjectCreator.html#MPC%20grouping%20example" class=
"XRef">here</a>. Within the mpd file, the different components
- can be accessed by prepending <em class="Code">grouped_</em> to
- the component (<em class="Code">grouped_source_files</em>,
- <em class="Code">grouped_header_files</em>, etc.)</li>
-
- <li style="list-style: none">
- <h6 class="NumberedTableTitle">Grouped Files Field Names</h6>
-
- <table border="1" summary="Grouped Files Field Names">
- <tr>
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Field Name</p>
- </th>
-
- <th rowspan="1" colspan="1">
- <p class="Tbl-Heading">Description</p>
- </th>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">files</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The input files associated with the
- group.</p>
- </td>
- </tr>
-
- <tr>
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body"><em class=
- "TableCode">component_name</em></p>
- </td>
-
- <td rowspan="1" colspan="1">
- <p class="Tbl-Body">The name of the set of multiple
- groups of files.</p>
- </td>
- </tr>
- </table>
- </li>
-
- <li class="Body">The example below, which creates make macros
- for each file group, shows basic use of grouping and the fields
- that can be accessed. The main limitation with file grouping,
- as can be seen below, is that the <em class="Code">foreach</em>
- variable cannot be named as stated <a href=
- "MakeProjectCreator.html#foreach%20syntax" class=
+ can be accessed by prepending <em class="Code">grouped_</em> to
+ the component (<em class="Code">grouped_source_files</em>,
+ <em class="Code">grouped_header_files</em>, etc.)
+ </p>
+
+ <p class="Body">
+ <h6 class="NumberedTableTitle">Grouped Files Field Names</h6>
+
+ <table border="1" summary="Grouped Files Field Names">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Field Name</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">files</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The input files associated with the
+ group.
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ <em class=
+ "TableCode">component_name</em>
+ </p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">
+ The name of the set of multiple
+ groups of files.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+ <p class="Body">
+ The example below, which creates make macros
+ for each file group, shows basic use of grouping and the fields
+ that can be accessed. The main limitation with file grouping,
+ as can be seen below, is that the <em class="Code">foreach</em>
+ variable cannot be named as stated <a href=
+ "MakeProjectCreator.html#foreach_syntax" class=
"XRef">previously</a>. The following example involves source
- files, but any of the <a href="MakeProjectCreator.html#16907"
+ files, but any of the <a href="MakeProjectCreator.html#16907"
class="XRef">components</a> listed in the mpc and mpb section
- can be used.</li>
+ can be used.
+ </li>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <blockquote>
- <p class="Code">&lt;%if(grouped_source_files)%&gt;</p>
+ <p class="Code">&lt;%if(grouped_source_files)%&gt;</p>
- <p class="Code">&lt;%comment(Get back each set of grouped
- files)%&gt;</p>
+ <p class="Code">
+ &lt;%comment(Get back each set of grouped
+ files)%&gt;
+ </p>
- <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
+ <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
- <p class="Code">&lt;%comment(This will provide the name of
- the group)%&gt;</p>
+ <p class="Code">
+ &lt;%comment(This will provide the name of
+ the group)%&gt;
+ </p>
- <p class="Code">&lt;%grouped_source_file%&gt; = \</p>
+ <p class="Code">&lt;%grouped_source_file%&gt; = \</p>
- <p class="Code">&lt;%comment(Get all the source files in a
- single group)%&gt;</p>
+ <p class="Code">
+ &lt;%comment(Get all the source files in a
+ single group)%&gt;
+ </p>
- <p class="Code">
- &lt;%foreach(grouped_source_file-&gt;files)%&gt;</p>
+ <p class="Code">
+ &lt;%foreach(grouped_source_file-&gt;files)%&gt;
+ </p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file-&gt;file)%&gt;&lt;%fornotlast("
- \\")%&gt;</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file-&gt;file)%&gt;&lt;%fornotlast("
+ \\")%&gt;
+ </p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">ifndef
- &lt;%grouped_source_files-&gt;component_name%&gt;</p>
+ <p class="Code">
+ ifndef
+ &lt;%grouped_source_files-&gt;component_name%&gt;
+ </p>
- <p class="Code">
- &lt;%grouped_source_files-&gt;component_name%&gt; = \</p>
+ <p class="Code">
+ &lt;%grouped_source_files-&gt;component_name%&gt; = \
+ </p>
- <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
+ <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file%&gt;&lt;%fornotlast("
- \\")%&gt;</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file%&gt;&lt;%fornotlast("
+ \\")%&gt;
+ </p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">endif</p>
+ <p class="Code">endif</p>
- <p class="Code">&lt;%endif%&gt;</p>
+ <p class="Code">&lt;%endif%&gt;</p>
- <p class="Code">&nbsp;</p>
- </li>
- </ul>
- </div>
- </div>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
+
+ </div>
+ </div>
- <div>
- <h5 class="Head4">Template Input Files (mpt)</h5>
-
- <ul>
- <li class="BodyNoLead">Template input files provide build tool
- specific information that is common to all projects, such as
- compiler switches, intermediate directories, compiler macros,
- etc. Each project type can provide template input files for
- dynamic libraries, static libraries, dynamic executables and
- static executables. However, none of these are actually required
- by MPC.</li>
-
- <li class="Body">The template input files are more free-form than
- the other MPC file types. It is similar to the mpc syntax except
- that there is no project definition and there is only one
- keyword. The keyword, <em class="Code">conditional_include</em>,
- is used to include other mpt files if they can be found in the
- MPC include search path. If the name listed in double quotes
- after <em class="Code">conditional_include</em> is not found, it
- is ignored and no warning is produced. The <em class=
+ <div>
+ <h5 class="Head4">Template Input Files (mpt)</h5>
+
+ <p class="BodyNoLead">
+ Template input files provide build tool
+ specific information that is common to all projects, such as
+ compiler switches, intermediate directories, compiler macros,
+ etc. Each project type can provide template input files for
+ dynamic libraries, static libraries, dynamic executables and
+ static executables. However, none of these are actually required
+ by MPC.
+ </p>
+
+ <p class="Body">
+ The template input files are more free-form than
+ the other MPC file types. It is similar to the mpc syntax except
+ that there is no project definition and there is only one
+ keyword. The keyword, <em class="Code">conditional_include</em>,
+ is used to include other mpt files if they can be found in the
+ MPC include search path. If the name listed in double quotes
+ after <em class="Code">conditional_include</em> is not found, it
+ is ignored and no warning is produced. The <em class=
"Code">mpt</em> extension is automatically added to the name
- provided.</li>
+ provided.
+ </p>
+
+ <p class="Body">
+ The template input files contain variable
+ assignments and collections of variable assignments. A variable
+ assignment is of the form:
+ </p>
+
+ <blockquote>
- <li class="Body">The template input files contain variable
- assignments and collections of variable assignments. A variable
- assignment is of the form:</li>
+ <p class="Code">variable_name = value1 "value 2"</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Code">variable_name += another_value</p>
+
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <p class="Code">variable_name = value1 "value 2"</p>
+ <p class="Body">
+ This variable can then be used within the
+ corresponding mpd file.
+ </p>
- <p class="Code">variable_name += another_value</p>
+ <p class="Body">
+ Variable assignments can be grouped together and
+ named within the mpt file and used as scoped variables within the
+ mpd file. The following example shows the use of collections of
+ variable assignments.
+ </p>
- <p class="Code">&nbsp;</p>
- </li>
+ <blockquote>
- <li class="Body">This variable can then be used within the
- corresponding mpd file.</li>
+ <p class="Code">// mpt file</p>
- <li class="Body">Variable assignments can be grouped together and
- named within the mpt file and used as scoped variables within the
- mpd file. The following example shows the use of collections of
- variable assignments.</li>
+ <p class="Code">configurations = Release Debug</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Code">common_defines = WIN32 _CONSOLE</p>
- <p class="Code">// mpt file</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">configurations = Release Debug</p>
+ <p class="Code">Release {</p>
- <p class="Code">common_defines = WIN32 _CONSOLE</p>
+ <p class="Code">
+ &nbsp;&nbsp;compile_flags = /W3 /GX /O2 /MD
+ /GR
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;defines = NDEBUG</p>
- <p class="Code">Release {</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;&nbsp;compile_flags = /W3 /GX /O2 /MD
- /GR</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;defines = NDEBUG</p>
+ <p class="Code">Debug {</p>
- <p class="Code">}</p>
+ <p class="Code">
+ &nbsp;&nbsp;compile_flags = /W3 /Gm /GX /Zi /Od
+ /MDd /GR /Gy
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;&nbsp;defines = _DEBUG</p>
- <p class="Code">Debug {</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;&nbsp;compile_flags = /W3 /Gm /GX /Zi /Od
- /MDd /GR /Gy</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;defines = _DEBUG</p>
+ <p class="Code">conditional_include "vcfullmacros"</p>
- <p class="Code">}</p>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <p class="Code">&nbsp;</p>
+ <p class="Body">
+ Below is the portion of the mpd file that would
+ use the information provided in the mpt file above.
+ </p>
- <p class="Code">conditional_include "vcfullmacros"</p>
+ <blockquote>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&lt;%foreach(configurations)%&gt;</p>
- <li class="Body">Below is the portion of the mpd file that would
- use the information provided in the mpt file above.</li>
+ <p class="Code">Name = &lt;%configuration%&gt;</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ &lt;%compile_flags%&gt;&lt;%foreach(defines
+ common_defines)%&gt; /D &lt;%define%&gt;=1&lt;%endfor%&gt;
+ </p>
- <p class="Code">&lt;%foreach(configurations)%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">Name = &lt;%configuration%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%compile_flags%&gt;&lt;%foreach(defines
- common_defines)%&gt; /D &lt;%define%&gt;=1&lt;%endfor%&gt;</p>
- <p class="Code">&nbsp;</p>
+ </blockquote>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Body">
+ The following output is generated from the above
+ example:
+ </p>
- <p class="Code">&nbsp;</p>
- </li>
+ <blockquote>
- <li class="Body">The following output is generated from the above
- example:</li>
+ <p class="Code">Name = Release</p>
- <li style="list-style: none">
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ /W3 /GX /O2 /MD /GR /D NDEBUG=1 /D WIN32=1 /D
+ _CONSOLE=1
+ </p>
- <p class="Code">Name = Release</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">/W3 /GX /O2 /MD /GR /D NDEBUG=1 /D WIN32=1 /D
- _CONSOLE=1</p>
+ <p class="Code">Name = Debug</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ /W3 /Gm /GX /Zi /Od /MDd /GR /Gy /D _DEBUG=1 /D
+ WIN32=1 /D _CONSOLE=1
+ </p>
- <p class="Code">Name = Debug</p>
- <p class="Code">/W3 /Gm /GX /Zi /Od /MDd /GR /Gy /D _DEBUG=1 /D
- WIN32=1 /D _CONSOLE=1</p>
+ </blockquote>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Body">
+ If a <em class="Code">foreach</em> variable
+ value corresponds to a variable group name, that variable group
+ is available within the scope of that <em class=
+ "Code">foreach</em>.
+ </p>
- <li class="Body">If a <em class="Code">foreach</em> variable
- value corresponds to a variable group name, that variable group
- is available within the scope of that <em class=
- "Code">foreach</em>.</li>
+ <p class="Body">
+ &nbsp;</li>
- <li class="Body">&nbsp;</li>
- </ul>
- </div>
- </div>
+ </div>
+ </div>
- <div>
- <h4 class="Head3">A Simple Example</h4>
+ <div>
+ <h4 class="Head3">A Simple Example</h4>
- <ul>
- <li class="BodyNoLead">We will discuss what it would take to add
- support for a fictional build tool throughout this section. The
- <a href="MakeProjectCreator.html#Figure%201-2" class=
+ <p class="BodyNoLead">
+ We will discuss what it would take to add
+ support for a fictional build tool throughout this section. The
+ <a href="MakeProjectCreator.html#Figure_1-2" class=
"XRef">Generating projects with mpc.pl diagram</a> shows the
- relationship between the template and project creator discussed
- below.</li>
- </ul>
+ relationship between the template and project creator discussed
+ below.
+ </p>
- <div>
- <h5 class="Head4">Template</h5>
- <ul>
- <li class="BodyNoLead">The best thing to do is to start with the
- template. The template is the most important piece when adding a
- new project type. It basically tells MPC how to lay out all of
- the information it gathers while processing an mpc file. The
- template file will have a mixture of plain text and the mpd
- syntax described in the <a href=
- "MakeProjectCreator.html#MPD%20Syntax" class="XRef">Template
- Files</a> section. Here is our sample <em class=
- "Code">fictional.mpd</em>.</li>
+ <div>
+ <h5 class="Head4">Template</h5>
+
+ <p class="BodyNoLead">
+ The best thing to do is to start with the
+ template. The template is the most important piece when adding a
+ new project type. It basically tells MPC how to lay out all of
+ the information it gathers while processing an mpc file. The
+ template file will have a mixture of plain text and the mpd
+ syntax described in the <a href=
+ "MakeProjectCreator.html#MPD_Syntax" class="XRef">
+ Template
+ Files
+ </a> section. Here is our sample <em class=
+ "Code">fictional.mpd</em>.
+ </p>
+
+ <blockquote>
+ <p class="Code">
+ //=======================================================================
+ </p>
- <li style="list-style: none">
- <p class="Code">
- //=======================================================================</p>
+ <p class="Code">// This project has been generated by MPC.</p>
- <p class="Code">// This project has been generated by MPC.</p>
+ <p class="Code">
+ // CAUTION! Hand edit only if you know what you
+ are doing!
+ </p>
- <p class="Code">// CAUTION! Hand edit only if you know what you
- are doing!</p>
+ <p class="Code">
+ //=======================================================================
+ </p>
- <p class="Code">
- //=======================================================================</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 1 - PROJECT OPTIONS</p>
- <p class="Code">// Section 1 - PROJECT OPTIONS</p>
+ <p class="Code">ctags:*</p>
- <p class="Code">ctags:*</p>
+ <p class="Code">debugSwitches:-nw</p>
- <p class="Code">debugSwitches:-nw</p>
+ <p class="Code">//end-proj-opts</p>
- <p class="Code">//end-proj-opts</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 2 - MAKEFILE</p>
- <p class="Code">// Section 2 - MAKEFILE</p>
+ <p class="Code">Makefile.&lt;%project_name%&gt;</p>
- <p class="Code">Makefile.&lt;%project_name%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 3 - OPTIONS</p>
- <p class="Code">// Section 3 - OPTIONS</p>
+ <p class="Code">//end-options</p>
- <p class="Code">//end-options</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 4 - TARGET FILE</p>
- <p class="Code">// Section 4 - TARGET FILE</p>
+ <p class="Code">&lt;%if(exename)%&gt;</p>
- <p class="Code">&lt;%if(exename)%&gt;</p>
+ <p class="Code">&lt;%exename%&gt;</p>
- <p class="Code">&lt;%exename%&gt;</p>
+ <p class="Code">&lt;%else%&gt;</p>
- <p class="Code">&lt;%else%&gt;</p>
+ <p class="Code">&lt;%if(sharedname)%&gt;</p>
- <p class="Code">&lt;%if(sharedname)%&gt;</p>
+ <p class="Code">&lt;%sharedname%&gt;</p>
- <p class="Code">&lt;%sharedname%&gt;</p>
+ <p class="Code">&lt;%else%&gt;</p>
- <p class="Code">&lt;%else%&gt;</p>
+ <p class="Code">&lt;%if(staticname)%&gt;</p>
- <p class="Code">&lt;%if(staticname)%&gt;</p>
+ <p class="Code">&lt;%staticname%&gt;</p>
- <p class="Code">&lt;%staticname%&gt;</p>
+ <p class="Code">&lt;%endif%&gt;</p>
- <p class="Code">&lt;%endif%&gt;</p>
+ <p class="Code">&lt;%endif%&gt;</p>
- <p class="Code">&lt;%endif%&gt;</p>
+ <p class="Code">&lt;%endif%&gt;</p>
- <p class="Code">&lt;%endif%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 5 - SOURCE FILES</p>
- <p class="Code">// Section 5 - SOURCE FILES</p>
+ <p class="Code">&lt;%foreach(source_files)%&gt;</p>
- <p class="Code">&lt;%foreach(source_files)%&gt;</p>
+ <p class="Code">&lt;%source_file%&gt;</p>
- <p class="Code">&lt;%source_file%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">//end-srcfiles</p>
- <p class="Code">//end-srcfiles</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p>
- <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p>
+ <p class="Code">&lt;%foreach(includes)%&gt;</p>
- <p class="Code">&lt;%foreach(includes)%&gt;</p>
+ <p class="Code">&lt;%include%&gt;</p>
- <p class="Code">&lt;%include%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">//end-include-dirs</p>
- <p class="Code">//end-include-dirs</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p>
- <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p>
+ <p class="Code">&lt;%foreach(libpaths)%&gt;</p>
- <p class="Code">&lt;%foreach(libpaths)%&gt;</p>
+ <p class="Code">&lt;%libpath%&gt;</p>
- <p class="Code">&lt;%libpath%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">//end-library-dirs</p>
- <p class="Code">//end-library-dirs</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 8 - DEFINITIONS</p>
- <p class="Code">// Section 8 - DEFINITIONS</p>
+ <p class="Code">&lt;%foreach(macros defines)%&gt;</p>
- <p class="Code">&lt;%foreach(macros defines)%&gt;</p>
+ <p class="Code">-D&lt;%macro%&gt;</p>
- <p class="Code">-D&lt;%macro%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">&lt;%if(pch_header)%&gt;</p>
- <p class="Code">&lt;%if(pch_header)%&gt;</p>
+ <p class="Code">&lt;%foreach(pch_defines)%&gt;</p>
- <p class="Code">&lt;%foreach(pch_defines)%&gt;</p>
+ <p class="Code">-D&lt;%pch_define%&gt;</p>
- <p class="Code">-D&lt;%pch_define%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">&lt;%endif%&gt;</p>
- <p class="Code">&lt;%endif%&gt;</p>
+ <p class="Code">//end-defs</p>
- <p class="Code">//end-defs</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 9 - C FLAGS</p>
- <p class="Code">// Section 9 - C FLAGS</p>
+ <p class="Code">&lt;%cflags("-g")%&gt;</p>
- <p class="Code">&lt;%cflags("-g")%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 10 - LIBRARY FLAGS</p>
- <p class="Code">// Section 10 - LIBRARY FLAGS</p>
+ <p class="Code">&lt;%libflags%&gt;</p>
- <p class="Code">&lt;%libflags%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 11 - SRC DIRECTORY</p>
- <p class="Code">// Section 11 - SRC DIRECTORY</p>
+ <p class="Code">.</p>
- <p class="Code">.</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 12 - OBJ DIRECTORY</p>
- <p class="Code">// Section 12 - OBJ DIRECTORY</p>
+ <p class="Code">&lt;%objdir(".")%&gt;</p>
- <p class="Code">&lt;%objdir(".")%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 13 - BIN DIRECTORY</p>
- <p class="Code">// Section 13 - BIN DIRECTORY</p>
+ <p class="Code">
+ &lt;%if(exeout)%&gt;&lt;%exeout%&gt;&lt;%else%&gt;.&lt;%endif%&gt;
+ </p>
- <p class="Code">
- &lt;%if(exeout)%&gt;&lt;%exeout%&gt;&lt;%else%&gt;.&lt;%endif%&gt;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">
+ // User targets section. Following lines will
+ be
+ </p>
- <p class="Code">// User targets section. Following lines will
- be</p>
+ <p class="Code">
+ // inserted into Makefile right after the
+ generated cleanall target.
+ </p>
- <p class="Code">// inserted into Makefile right after the
- generated cleanall target.</p>
+ <p class="Code">
+ // The Project File editor does not edit these
+ lines - edit the .vpj
+ </p>
- <p class="Code">// The Project File editor does not edit these
- lines - edit the .vpj</p>
+ <p class="Code">
+ // directly. You should know what you are
+ doing.
+ </p>
- <p class="Code">// directly. You should know what you are
- doing.</p>
+ <p class="Code">// Section 14 - USER TARGETS</p>
- <p class="Code">// Section 14 - USER TARGETS</p>
+ <p class="Code">&lt;%marker(top)%&gt;</p>
- <p class="Code">&lt;%marker(top)%&gt;</p>
+ <p class="Code">&lt;%marker(macros)%&gt;</p>
- <p class="Code">&lt;%marker(macros)%&gt;</p>
+ <p class="Code">&lt;%marker(local)%&gt;</p>
- <p class="Code">&lt;%marker(local)%&gt;</p>
+ <p class="Code">&lt;%marker(bottom)%&gt;</p>
- <p class="Code">&lt;%marker(bottom)%&gt;</p>
+ <p class="Code">//end-user-targets</p>
- <p class="Code">//end-user-targets</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">// Section 15 - LIBRARY FILES</p>
- <p class="Code">// Section 15 - LIBRARY FILES</p>
+ <p class="Code">&lt;%foreach(libs lit_libs pure_libs)%&gt;</p>
- <p class="Code">&lt;%foreach(libs lit_libs pure_libs)%&gt;</p>
+ <p class="Code">&lt;%lib%&gt;</p>
- <p class="Code">&lt;%lib%&gt;</p>
+ <p class="Code">&lt;%endfor%&gt;</p>
- <p class="Code">&lt;%endfor%&gt;</p>
+ <p class="Code">//end-library-files</p>
- <p class="Code">//end-library-files</p>
- <p class="Code">&nbsp;</p>
- </li>
+ </blockquote>
- <li class="Body">Note that output is generated differently
- depending upon whether <em class="Code">&lt;%exename%&gt;</em>,
- <em class="Code">&lt;%sharedname%&gt;</em> or <em class=
+ <p class="Body">
+ Note that output is generated differently
+ depending upon whether <em class="Code">&lt;%exename%&gt;</em>,
+ <em class="Code">&lt;%sharedname%&gt;</em> or <em class=
"Code">&lt;%staticname%&gt;</em> is defined due to the if
- statements that were used with relation these variable names.
- Also, certain portions of the project file are only generated if
- particular variables are set.</li>
- </ul>
- </div>
+ statements that were used with relation these variable names.
+ Also, certain portions of the project file are only generated if
+ particular variables are set.
+ </p>
- <div>
- <h5 class="Head4">Project Creator</h5>
+ </div>
- <ul>
- <li class="BodyNoLead">Next, you would write the <em class=
+ <div>
+ <h5 class="Head4">Project Creator</h5>
+
+ <p class="BodyNoLead">
+ Next, you would write the <em class=
"Code">FictionalProjectCreator.pm</em>. It may be best to start
- with a copy of the <em class="Code">MakeProjectCreator.pm</em>
- and edit it. Change the package name to <em class=
+ with a copy of the <em class="Code">MakeProjectCreator.pm</em>
+ and edit it. Change the package name to <em class=
"Code">FictionalProjectCreator</em> and have it inherit from
- <em class="Code">MakeProjectBase</em> and <em class=
+ <em class="Code">MakeProjectBase</em> and <em class=
"Code">ProjectCreator</em>. Then, override the methods that are
- needed for this particular type.</li>
+ needed for this particular type.
+ </p>
- <li style="list-style: none">
- <p class="Code">package FictionalProjectCreator;</p>
+ <blockquote>
+ <p class="Code">package FictionalProjectCreator;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Description : A Fictional Project Creator</p>
+ <p class="Code"># Description : A Fictional Project Creator</p>
- <p class="Code"># Author : Chad Elliott</p>
+ <p class="Code"># Author : Chad Elliott</p>
- <p class="Code"># Create Date : 10/01/2004</p>
+ <p class="Code"># Create Date : 10/01/2004</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Pragmas</p>
+ <p class="Code"># Pragmas</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use strict;</p>
+ <p class="Code">use strict;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use MakeProjectBase;</p>
+ <p class="Code">use MakeProjectBase;</p>
- <p class="Code">use ProjectCreator;</p>
+ <p class="Code">use ProjectCreator;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use vars qw(@ISA);</p>
+ <p class="Code">use vars qw(@ISA);</p>
- <p class="Code">@ISA = qw(MakeProjectBase ProjectCreator);</p>
+ <p class="Code">@ISA = qw(MakeProjectBase ProjectCreator);</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Subroutine Section</p>
+ <p class="Code"># Subroutine Section</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub convert_slashes {</p>
+ <p class="Code">sub convert_slashes {</p>
- <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return 0;</p>
+ <p class="Code">&nbsp;&nbsp;return 0;</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub project_file_extension {</p>
+ <p class="Code">sub project_file_extension {</p>
- <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return '.fic';</p>
+ <p class="Code">&nbsp;&nbsp;return '.fic';</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub get_dll_exe_template_input_file {</p>
+ <p class="Code">sub get_dll_exe_template_input_file {</p>
- <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return 'fictionalexe';</p>
+ <p class="Code">&nbsp;&nbsp;return 'fictionalexe';</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub get_dll_template_input_file {</p>
+ <p class="Code">sub get_dll_template_input_file {</p>
- <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return 'fictionaldll';</p>
+ <p class="Code">&nbsp;&nbsp;return 'fictionaldll';</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub get_template {</p>
+ <p class="Code">sub get_template {</p>
- <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return 'fictional';</p>
+ <p class="Code">&nbsp;&nbsp;return 'fictional';</p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">1;</p>
+ <p class="Code">1;</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <li class="Body">In our example, we inherit from the
- MakeProjectBase which provides some methods that are common to
- all &ldquo;make&rdquo; based project creators.</li>
+ <p class="Body">
+ In our example, we inherit from the
+ MakeProjectBase which provides some methods that are common to
+ all &ldquo;make&rdquo; based project creators.
+ </p>
- <li class="Body">We override the <em class=
+ <p class="Body">
+ We override the <em class=
"Code">convert_slashes</em> method to return 0. A zero return
- value tells MPC not to convert slashes to back slashes
- (converting slashes is useful for Windows related build
- tools).</li>
+ value tells MPC not to convert slashes to back slashes
+ (converting slashes is useful for Windows related build
+ tools).
+ </p>
- <li class="Body">We then override the <em class=
+ <p class="Body">
+ We then override the <em class=
"Code">project_file_extension</em> method to return the project
- file extension which is used by a method defined in the
- MakeProjectBase module.</li>
+ file extension which is used by a method defined in the
+ MakeProjectBase module.
+ </p>
- <li class="Body">Next, we override the <em class=
+ <p class="Body">
+ Next, we override the <em class=
"Code">get_dll_exe_template_input_file</em> and <em class=
"Code">get_dll_template_input_file</em> methods. Those methods
- return the specific template input file names for a dynamic
- executable and dynamic library, respectively.</li>
+ return the specific template input file names for a dynamic
+ executable and dynamic library, respectively.
+ </p>
- <li class="Body">Lastly, we override the <em class=
+ <p class="Body">
+ Lastly, we override the <em class=
"Code">get_template</em> method to return the template file name
- for our new project type. In our case, the method returns
- <em class="Code">fictional</em> which corresponds to the name of
- the template file we created earlier.</li>
-
- <li class="Body">There are many other methods that can be
- overridden to change the way MPC generates output. For a complete
- list, see the &ldquo;Virtual Methods To Be Overridden&rdquo;
- section of the <em class="Code">Creator.pm</em> and <em class=
- "Code">ProjectCreator.pm</em>.</li>
- </ul>
- </div>
+ for our new project type. In our case, the method returns
+ <em class="Code">fictional</em> which corresponds to the name of
+ the template file we created earlier.
+ </p>
+
+ <p class="Body">
+ There are many other methods that can be
+ overridden to change the way MPC generates output. For a complete
+ list, see the &ldquo;Virtual Methods To Be Overridden&rdquo;
+ section of the <em class="Code">Creator.pm</em> and <em class=
+ "Code">ProjectCreator.pm</em>.
+ </p>
+
+ </div>
- <div>
- <h5 class="Head4">Workspace Creator</h5>
+ <div>
+ <h5 class="Head4">Workspace Creator</h5>
- <ul>
- <li class="BodyNoLead">The last part that you would need to write
- is the <em class="Code">FictionalWorkspaceCreator.pm</em>. This
- module is usually more code-intensive than its Project Creator
- counterpart.</li>
+ <p class="BodyNoLead">
+ The last part that you would need to write
+ is the <em class="Code">FictionalWorkspaceCreator.pm</em>. This
+ module is usually more code-intensive than its Project Creator
+ counterpart.
+ </p>
- <li style="list-style: none">
- <p class="Code">package FictionalWorkspaceCreator;</p>
+ <blockquote>
+ <p class="Code">package FictionalWorkspaceCreator;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Description : A Fictional Workspace
- Creator</p>
+ <p class="Code">
+ # Description : A Fictional Workspace
+ Creator
+ </p>
- <p class="Code"># Author : Chad Elliott</p>
+ <p class="Code"># Author : Chad Elliott</p>
- <p class="Code"># Create Date : 10/01/2004</p>
+ <p class="Code"># Create Date : 10/01/2004</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Pragmas</p>
+ <p class="Code"># Pragmas</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use strict;</p>
+ <p class="Code">use strict;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use FictionalProjectCreator;</p>
+ <p class="Code">use FictionalProjectCreator;</p>
- <p class="Code">use WorkspaceCreator;</p>
+ <p class="Code">use WorkspaceCreator;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">use vars qw(@ISA);</p>
+ <p class="Code">use vars qw(@ISA);</p>
- <p class="Code">@ISA = qw(WorkspaceCreator);</p>
+ <p class="Code">@ISA = qw(WorkspaceCreator);</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code"># Subroutine Section</p>
+ <p class="Code"># Subroutine Section</p>
- <p class="Code">#
- ************************************************************</p>
+ <p class="Code">
+ #
+ ************************************************************
+ </p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub workspace_file_name {</p>
+ <p class="Code">sub workspace_file_name {</p>
- <p class="Code">&nbsp;&nbsp;my $self = shift;</p>
+ <p class="Code">&nbsp;&nbsp;my $self = shift;</p>
- <p class="Code">&nbsp;&nbsp;return
- $self-&gt;get_modified_workspace_name($self-&gt;get_workspace_name(),
- '.fws');</p>
+ <p class="Code">
+ &nbsp;&nbsp;return
+ $self-&gt;get_modified_workspace_name($self-&gt;get_workspace_name(),
+ '.fws');
+ </p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub pre_workspace {</p>
+ <p class="Code">sub pre_workspace {</p>
- <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
+ <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
- <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
+ <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;print $fh '&lt;?xml version="1.0"
- encoding="UTF-8"?&gt;', $crlf,</p>
+ <p class="Code">
+ &nbsp;&nbsp;print $fh '&lt;?xml version="1.0"
+ encoding="UTF-8"?&gt;', $crlf,
+ </p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;!--
- MPC Command --&gt;', $crlf,</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;!--
+ MPC Command --&gt;', $crlf,
+ </p>
- <p class="Code">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&lt;!--
- $0 @ARGV --&gt;", $crlf;</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&lt;!--
+ $0 @ARGV --&gt;", $crlf;
+ </p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">sub write_comps {</p>
+ <p class="Code">sub write_comps {</p>
- <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
+ <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
- <p class="Code">&nbsp;&nbsp;my $projects =
- $self-&gt;get_projects();</p>
+ <p class="Code">
+ &nbsp;&nbsp;my $projects =
+ $self-&gt;get_projects();
+ </p>
- <p class="Code">&nbsp;&nbsp;my @list =
- $self-&gt;sort_dependencies($projects);</p>
+ <p class="Code">
+ &nbsp;&nbsp;my @list =
+ $self-&gt;sort_dependencies($projects);
+ </p>
- <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
+ <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;&nbsp;print $fh '&lt;projects&gt;',
- $crlf;</p>
+ <p class="Code">
+ &nbsp;&nbsp;print $fh '&lt;projects&gt;',
+ $crlf;
+ </p>
- <p class="Code">&nbsp;&nbsp;foreach my $project (@list) {</p>
+ <p class="Code">&nbsp;&nbsp;foreach my $project (@list) {</p>
- <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;print $fh " &lt;project
- path=\"$project\"/&gt;$crlf";</p>
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;print $fh " &lt;project
+ path=\"$project\"/&gt;$crlf";
+ </p>
- <p class="Code">&nbsp;&nbsp;}</p>
+ <p class="Code">&nbsp;&nbsp;}</p>
- <p class="Code">&nbsp;&nbsp;print $fh
- "&lt;/projects&gt;$crlf";</p>
+ <p class="Code">
+ &nbsp;&nbsp;print $fh
+ "&lt;/projects&gt;$crlf";
+ </p>
- <p class="Code">}</p>
+ <p class="Code">}</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">1;</p>
+ <p class="Code">1;</p>
- <p class="Code">&nbsp;</p>
+ <p class="Code">&nbsp;</p>
- <p class="Code">&nbsp;</p>
- </li>
+ <p class="Code">&nbsp;</p>
+ </blockquote>
- <li class="Body">The first method we override from
- WorkspaceCreator.pm is the <em class=
+ <p class="Body">
+ The first method we override from
+ WorkspaceCreator.pm is the <em class=
"Code">workspace_file_name</em> method. It is used to determine
- the output file for the generated workspace.</li>
+ the output file for the generated workspace.
+ </p>
- <li class="Body">Second, we override the <em class=
+ <p class="Body">
+ Second, we override the <em class=
"Code">pre_workspace</em> method, which we use to print out the
- generic unchanging section of our generated workspace.</li>
+ generic unchanging section of our generated workspace.
+ </p>
- <li class="Body">Lastly, we override the <em class=
+ <p class="Body">
+ Lastly, we override the <em class=
"Code">write_comps</em> method. This method is where the bulk of
- the work is done in our workspace creator. A workspace creator
- has many sets of data available. A reference to the list of
- project file names can be obtained through the <em class=
+ the work is done in our workspace creator. A workspace creator
+ has many sets of data available. A reference to the list of
+ project file names can be obtained through the <em class=
"Code">get_projects</em> method; project-specific information can
- be obtained through the <em class="Code">get_project_info</em>
- method which returns an array reference where each array element
- is an array containing the project name, project dependencies and
- a project guid (if applicable).</li>
- </ul>
+ be obtained through the <em class="Code">get_project_info</em>
+ method which returns an array reference where each array element
+ is an array containing the project name, project dependencies and
+ a project guid (if applicable).
+ </p>
+
+ </div>
+ </div>
</div>
- </div>
</div>
- </div>
-</body>
+ </body>
</html>
diff --git a/docs/html/RpmSpec.html b/docs/html/RpmSpec.html
index 355f806c..514f3ef6 100644
--- a/docs/html/RpmSpec.html
+++ b/docs/html/RpmSpec.html
@@ -18,6 +18,7 @@
<div>
<h3 class="Head2">Background/Abstract</h3>
+ <ul>
<li class="body">The <em>RpmSpec Type</em> generates
<samp>.spec</samp> files suitable for use by the <samp><a
href="http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-rpmbuild.html">rpmbuild</a></samp>
@@ -38,7 +39,7 @@
work on platforms for which an RPM port exists, but such success
would be coincidental and neither intended, tested, nor
guaranteed.</li>
-
+ </ul>
</div>
<div>
@@ -91,7 +92,7 @@
<div>
<h3 class="Head2">Adapting/Writing Projects for Packaging</h3>
- <h4><a name-"mwcnotes"></a>Creating Workspaces</h4>
+ <h4><a name="mwcnotes"></a>Creating Workspaces</h4>
<p>The RpmSpec type uses <a
href="MakeProjectCreator.html#AggregatedWorkspace">aggregate
workspaces</a> to define the scope of a package. In other words,
@@ -118,8 +119,8 @@ workspace {
}
</pre>
Details on the variables allowed in the <samp>specific</samp>
- clause can be found in <a href="../templates/rpmspec.txt">the
- <samp>$MPC_ROOT/docs/templates/rpmspec.txt</samp> file.</a>
+ clause can be found in the <a href="../templates/rpmspec.txt">
+ <samp>$MPC_ROOT/docs/templates/rpmspec.txt</samp></a> file.
<p>If you use workspaces as a part of
building right now, you may wish to write additional
@@ -144,6 +145,7 @@ workspace {
developer can augment or replace MPC's guesses using
<samp>Install*_Files</samp> groupings. See the documentation on
the <samp>gnuace</samp> installation feature for details.
+ </div>
</div>
<div>
@@ -195,6 +197,5 @@ workspace {
<hr>
-<address></address>
-<!-- hhmts start --> Last modified: Fri Dec 24 09:28:45 CST 2010 <!-- hhmts end -->
+<!-- hhmts start --> Last modified: Fri Jan 14 09:09:04 CST 2011 <!-- hhmts end -->
</body> </html>
diff --git a/docs/templates/automake.txt b/docs/templates/automake.txt
index 751c764d..2302561c 100644
--- a/docs/templates/automake.txt
+++ b/docs/templates/automake.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 2/2/2007
// This defines the role of all the template variables specific to the
// 'automake' project type.
diff --git a/docs/templates/bmake.txt b/docs/templates/bmake.txt
index 7fbb4997..9fca31b3 100644
--- a/docs/templates/bmake.txt
+++ b/docs/templates/bmake.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 9/25/2006
// This defines the role of all the template variables specific to the
// 'bmake' project type.
diff --git a/docs/templates/cc.txt b/docs/templates/cc.txt
index ef55abb0..3bd50f4d 100644
--- a/docs/templates/cc.txt
+++ b/docs/templates/cc.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 9/26/2006
// This defines the role of all the template variables specific to the
// 'cc' project type.
diff --git a/docs/templates/cdt6cproject.txt b/docs/templates/cdt6cproject.txt
index 80e448fd..0351a825 100644
--- a/docs/templates/cdt6cproject.txt
+++ b/docs/templates/cdt6cproject.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates/cdt6cproject.mpd.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/cdt6project.txt b/docs/templates/cdt6project.txt
index 8f3f3912..bcb67b68 100644
--- a/docs/templates/cdt6project.txt
+++ b/docs/templates/cdt6project.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates/cdt6project.mpd.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/common.txt b/docs/templates/common.txt
index 6aa8c516..de8cb7b1 100644
--- a/docs/templates/common.txt
+++ b/docs/templates/common.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables that are common to all or most templates.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/ghs.txt b/docs/templates/ghs.txt
index 0fd8d3eb..63a232ad 100644
--- a/docs/templates/ghs.txt
+++ b/docs/templates/ghs.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
bsp = If a bsp is necessary, this variable should be set to the bsp name.
exceptions = This controls whether exceptions are used or not. It is on by default.
libext = Similar to the common lib_ext except that this one is normally left to the default.
diff --git a/docs/templates/make.net.txt b/docs/templates/make.net.txt
index 062f59c2..85123ffe 100644
--- a/docs/templates/make.net.txt
+++ b/docs/templates/make.net.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 8/5/2009 - Happy Birthday Molly!
// This defines the role of all the template variables specific to the
// 'make' project type using the csharp language.
diff --git a/docs/templates/make.txt b/docs/templates/make.txt
index 54953287..2facfbff 100644
--- a/docs/templates/make.txt
+++ b/docs/templates/make.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 1/14/2010
// This defines the role of all the template variables specific to the
// 'make' project type.
@@ -9,6 +11,8 @@ arflags = Flags passed to the static library creation tool.
arflags64 = The 64-bit version of flags passed to the static library creation tool.
build64bit = Determine whether this project is built in 64-bit mode.
cc = Holds the C compiler.
+cflags = A set of flags that are only passed to the C compiler.
+ccflags = A set of flags that are only passed to the C++ compiler.
checkopt = Compiler specific options to signify syntax checking only.
chmod = A utility to change permissions on a file.
clean = Additional files or directories to be "cleaned" when the clean target is invoked.
@@ -18,6 +22,7 @@ compilerflags64 = The 64-bit specific options passed to a particular compiler.
compilers = Although it is plural, it holds only a single compiler which is used to determine specific flags and default platform.
copy = A utility to copy a file.
coverage = Set this to enable code coverage compile flags (if supported).
+covopt = The compiler options used to enable coverage testing.
cpu = This can be used with the Wind River specific compilers to specify the CPU macro.
cputype = This can be used with the Wind River specific compilers to specify the CPU type.
cxx = Holds the C++ compiler.
@@ -46,6 +51,7 @@ make_include = This allows users to "include" arbitrary files into the generated
makedir = A utility to make a directory.
move = A utility to move a file.
nm = A utility to generate a symbol listing of an object file or executable.
+notparallel = Should the .NOTPARALLEL be place in the makefile when it has generated targets?
obj_dir = If specified, object files will be place in this directory. It should always end in a slash.
obj_ext = The object file extension.
output_dir_ext = An optional extension for output directories.
@@ -61,6 +67,7 @@ postlinkbinary = If specified, the command will be executed at the end of linkin
prelinktarget = Specific to VxWorks, this indicates a file that is compiled prior to linking a shared object library or executable.
prelinktargetobj = Specific to VxWork, this indicates the object file that is needed prior to linking a shared object library or executable.
profile = Set this to enable profiling compile flags (if supported).
+profopt = The compiler options to enable profiling.
ranlib = A boolean setting to determine if ranlib is needed or not.
rc = The name of the resource file compiler.
res_ext = The extension for compiled resource files.
diff --git a/docs/templates/rpmspec.txt b/docs/templates/rpmspec.txt
index 3d7d20a1..26773d3a 100644
--- a/docs/templates/rpmspec.txt
+++ b/docs/templates/rpmspec.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
//
// Document template variables for -type rpmspec
// Please try to keep this alphabetically sorted.
@@ -20,10 +22,12 @@ rpm_name = Do not provide a value, it is filled in by the RpmSpecWorkspaceCreato
rpm_post_cmd = Sets the content of the %post section of the RPM spec file.
rpm_postun_cmd = Sets the content of the %postun section of the RPM spec file.
rpm_prefix = Sets the RPM spec Prefix tag.
+rpm_pre_cmd = Sets the content of the %pre section of the RPM spec file.
rpm_preun_cmd = Sets the content of the %preun section of the RPM spec file.
rpm_provides = Optional. Sets the RPM spec Provides tag.
rpm_releasenumber = Required. Sets the RPM spec Release tag.
rpm_requires = Optional. Sets the RPM spec Requires tag. These values will be used in addition to dependencies that MPC already knows due to the 'after' assignments.
rpm_source_base = Sets the URL or path base of the RPM spec Source tag. The RPM tarball name will be appended so it should end with a slash.
rpm_summary = Required. Sets the RPM spec Summary tag.
+rpm_url = Optional. Sets the URL of the application.
rpm_version = Required. Sets the RPM spec Version tag.
diff --git a/docs/templates/vc10.txt b/docs/templates/vc10.txt
index 16000b53..6455d1ad 100644
--- a/docs/templates/vc10.txt
+++ b/docs/templates/vc10.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates\vc10.mpd.
// Please try to keep this alphabetically sorted.
@@ -117,6 +118,7 @@ pdbl = If this boolean template variable is set, the Linker Debugging property
peruserredirection = When Register Output is enabled, Per-user redirection forces registry writes to HKEY_CLASSES_ROOT to be redirected to HKEY_CURRENT_USER.
platform = Specifies the target platform.
platform_defines = Macros that are specific to a particular platform.
+platformtoolset = Use an alternate toolset, for example from vc9 or a different Windows SDK release (PlatformToolset in the vcxproj file).
preprocesskeepcomments = Suppresses comment strip from source code; requires that one of the 'Preprocessing' options be set.
preprocesssuppresslinenumbers = Preprocess without #line directives.
preprocesstofile = Preprocesses C and C++ source files and writes the preprocessed output to a file. This option suppresses compilation, thus it does not produce an .obj file.
diff --git a/docs/templates/vc7.txt b/docs/templates/vc7.txt
index a2690408..8eefa127 100644
--- a/docs/templates/vc7.txt
+++ b/docs/templates/vc7.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 3/23/2010
// This defines the role of all the template variables specific to the
// 'vc7' and 'vc71' project types.
diff --git a/docs/templates/vc7csharp.txt b/docs/templates/vc7csharp.txt
index 0be6b878..f4631080 100644
--- a/docs/templates/vc7csharp.txt
+++ b/docs/templates/vc7csharp.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 10/26/2006
// This defines the role of all the template variables specific to the
// 'vc7' and 'vc71' project types with the csharp language.
diff --git a/docs/templates/vc7java.txt b/docs/templates/vc7java.txt
index 445240f2..2399ec27 100644
--- a/docs/templates/vc7java.txt
+++ b/docs/templates/vc7java.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 11/15/2007
// This defines the role of all the template variables specific to the
// 'vc7' and 'vc71' project types with the java language.
diff --git a/docs/templates/vc7vb.txt b/docs/templates/vc7vb.txt
index 49faae08..e1998aa2 100644
--- a/docs/templates/vc7vb.txt
+++ b/docs/templates/vc7vb.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 10/26/2006
// This defines the role of all the template variables specific to the
// 'vc7' and 'vc71' project types with the vb language.
diff --git a/docs/templates/vc8.txt b/docs/templates/vc8.txt
index 5d886386..8a7a0dd9 100644
--- a/docs/templates/vc8.txt
+++ b/docs/templates/vc8.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 5/30/2008
// This defines the role of all the template variables specific to the
// 'vc8' project type.
diff --git a/docs/templates/vc8csharp.txt b/docs/templates/vc8csharp.txt
index b62cfb26..9eba6283 100644
--- a/docs/templates/vc8csharp.txt
+++ b/docs/templates/vc8csharp.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 10/26/2006
// This defines the role of all the template variables specific to the
// 'vc8' project type with the csharp language.
@@ -11,6 +13,7 @@ defines = Macros that are specific to a particular configuration.
disablespecificwarnings = A space separated list of warning numbers to be disabled.
guid = The value for this variable is generated during project generation.
keyfile = Indicate the keyfile to use when signing the assembly.
+platformtarget = Set the Platform Target, for example x86 to force a 32-bit .NET framework.
prversion = This setting specifies the ProductVersion in the generated .csproj file.
registerforcominterop = This setting corresponds to the Build Output property "Register for COM interop". The boolean values true and false correspond to enabling or disabling the feature in the IDE.
schemaversion = This setting specifies the SchemaVersion in the generated .csproj file.
diff --git a/docs/templates/vc8java.txt b/docs/templates/vc8java.txt
index d6b6a3ea..38b0d324 100644
--- a/docs/templates/vc8java.txt
+++ b/docs/templates/vc8java.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 3/05/2007
// This defines the role of all the template variables specific to the
// 'vc8' project type with the java language.
diff --git a/docs/templates/vc8vb.txt b/docs/templates/vc8vb.txt
index 1eff924e..824ff894 100644
--- a/docs/templates/vc8vb.txt
+++ b/docs/templates/vc8vb.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 10/26/2006
// This defines the role of all the template variables specific to the
// 'vc8' project type with the vb language.
diff --git a/docs/templates/wb26.txt b/docs/templates/wb26.txt
index 2f62ef23..5a07cbfd 100644
--- a/docs/templates/wb26.txt
+++ b/docs/templates/wb26.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates/wb26.mpd.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/wb26wrmakefile.txt b/docs/templates/wb26wrmakefile.txt
index 0d138fae..57d7da27 100644
--- a/docs/templates/wb26wrmakefile.txt
+++ b/docs/templates/wb26wrmakefile.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates/wb26wrmakefile.mpd.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/wb26wrproject.txt b/docs/templates/wb26wrproject.txt
index 6bb3eb19..a26e71bd 100644
--- a/docs/templates/wb26wrproject.txt
+++ b/docs/templates/wb26wrproject.txt
@@ -1,3 +1,4 @@
+// $Id$
//
// Document template variables for templates templates/wb26wrproject.mpd.
// Please try to keep this alphabetically sorted.
diff --git a/docs/templates/wix.txt b/docs/templates/wix.txt
index 6ae25765..0efb3654 100644
--- a/docs/templates/wix.txt
+++ b/docs/templates/wix.txt
@@ -1,3 +1,5 @@
+// $Id$
+//
// Current as of 8/10/2009
// This defines the role of all the template variables specific to the
// 'wix' project type.
diff --git a/modules/AutomakeProjectCreator.pm b/modules/AutomakeProjectCreator.pm
index 2be84c51..aef552e9 100644
--- a/modules/AutomakeProjectCreator.pm
+++ b/modules/AutomakeProjectCreator.pm
@@ -4,6 +4,7 @@ package AutomakeProjectCreator;
# Description : A Automake Project Creator
# Author : J.T. Conklin & Chad Elliott
# Create Date : 2/26/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/AutomakeWorkspaceCreator.pm b/modules/AutomakeWorkspaceCreator.pm
index af6074d6..ff321d97 100644
--- a/modules/AutomakeWorkspaceCreator.pm
+++ b/modules/AutomakeWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package AutomakeWorkspaceCreator;
# Description : A Automake Workspace (Makefile) creator
# Author : J.T. Conklin & Steve Huston
# Create Date : 5/13/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -36,6 +37,11 @@ sub compare_output {
return 1;
}
+## Can't cache as some intermediate project files are deleted
+## and must be regenerated if a project is regenerated.
+sub default_cacheok {
+ return 0;
+}
sub files_are_different {
my($self, $old, $new) = @_;
@@ -253,6 +259,8 @@ sub write_comps {
my $installable_pkgconfig;
my $includedir;
my $project_name;
+ my $status = 1;
+ my $errorString;
## To avoid unnecessarily emitting blank assignments, rip through the
## Makefile.<project>.am files and check for conditions.
@@ -306,7 +314,9 @@ sub write_comps {
$in_condition = 0;
}
else {
- $self->error("Unable to open $local for reading.");
+ $errorString = "Unable to open $local for reading.";
+ $status = 0;
+ last;
}
}
}
@@ -319,8 +329,8 @@ sub write_comps {
## Print out the Makefile.am.
my $wsHelper = WorkspaceHelper::get($self);
my $convert_header_name;
- if ((!defined $includedir && $installable_headers)
- || $installable_pkgconfig) {
+ if ($status && ((!defined $includedir && $installable_headers)
+ || $installable_pkgconfig)) {
if (!defined $includedir && $installable_headers) {
my $incdir = $wsHelper->modify_value('includedir',
$self->get_includedir());
@@ -336,16 +346,13 @@ sub write_comps {
print $fh $crlf;
}
- if (@locals) {
- my($status, $error) = $wsHelper->write_settings($self, $fh, @locals);
- if (!$status) {
- $self->error($error);
- }
+ if ($status && @locals) {
+ ($status, $errorString) = $wsHelper->write_settings($self, $fh, @locals);
}
## Create the SUBDIRS setting. If there are associated projects, then
## we will also set up conditionals for it as well.
- if ($have_subdirs == 1) {
+ if ($status && $have_subdirs == 1) {
my $assoc = $self->get_associated_projects();
my @aorder;
my %afiles;
@@ -398,7 +405,7 @@ sub write_comps {
## Now, for each target used in a conditional, emit a blank assignment
## and mark that we've seen that target to avoid changing the += to =
## as the individual files are pulled in.
- if (%conditional_targets) {
+ if ($status && %conditional_targets) {
my $primary;
my $count;
@@ -416,7 +423,7 @@ sub write_comps {
## Take the local Makefile.<project>.am files and insert each one here,
## then delete it.
- if (@locals) {
+ if ($status && @locals) {
my $pfh = new FileHandle();
my $liblocs = $self->get_lib_locations();
my $here = $self->getcwd();
@@ -560,7 +567,9 @@ sub write_comps {
print $fh $crlf;
}
else {
- $self->error("Unable to open $local for reading.");
+ $errorString = "Unable to open $local for reading.";
+ $status = 0;
+ last;
}
}
}
@@ -569,7 +578,7 @@ sub write_comps {
## autoconf/automake flags down the tree when running autoconf.
## *** This may be too closely tied to how we have things set up in ACE,
## even though it's recommended practice. ***
- if ($toplevel) {
+ if ($status && $toplevel) {
my $m4inc = '-I m4';
print $fh $crlf,
'ACLOCAL = @ACLOCAL@', $crlf,
@@ -582,7 +591,7 @@ sub write_comps {
}
## Finish up with the cleanup specs.
- if (@locals) {
+ if ($status && @locals) {
## There is no reason to emit this if there are no local targets.
## An argument could be made that it shouldn't be emitted in any
## case because it could be handled by CLEANFILES or a verbatim
@@ -597,6 +606,8 @@ sub write_comps {
"\t-rm -rf templateregistry ir.out", $crlf,
"\t-rm -rf ptrepository SunWS_cache Templates.DB", $crlf;
}
+
+ return $status, $errorString;
}
diff --git a/modules/BCB2007ProjectCreator.pm b/modules/BCB2007ProjectCreator.pm
index e6e81e13..0a2c47c1 100644
--- a/modules/BCB2007ProjectCreator.pm
+++ b/modules/BCB2007ProjectCreator.pm
@@ -4,6 +4,7 @@ package BCB2007ProjectCreator;
# Description : The Borland C++ Builder 2007 Project Creator
# Author : Johnny Willemsen
# Create Date : 14/12/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BCB2007WorkspaceCreator.pm b/modules/BCB2007WorkspaceCreator.pm
index b751988f..e934bab4 100644
--- a/modules/BCB2007WorkspaceCreator.pm
+++ b/modules/BCB2007WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package BCB2007WorkspaceCreator;
# Description : A BCB2007 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 14/12/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BCB2009ProjectCreator.pm b/modules/BCB2009ProjectCreator.pm
index ee2970d2..f3322db0 100644
--- a/modules/BCB2009ProjectCreator.pm
+++ b/modules/BCB2009ProjectCreator.pm
@@ -4,6 +4,7 @@ package BCB2009ProjectCreator;
# Description : The Borland C++ Builder 2009 Project Creator
# Author : Johnny Willemsen
# Create Date : 17/10/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BCB2009WorkspaceCreator.pm b/modules/BCB2009WorkspaceCreator.pm
index 2c6c69d8..9804972a 100644
--- a/modules/BCB2009WorkspaceCreator.pm
+++ b/modules/BCB2009WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package BCB2009WorkspaceCreator;
# Description : A BCB2009 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 17/10/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BDS4ProjectCreator.pm b/modules/BDS4ProjectCreator.pm
index da9755bf..b2a5d51d 100644
--- a/modules/BDS4ProjectCreator.pm
+++ b/modules/BDS4ProjectCreator.pm
@@ -4,6 +4,7 @@ package BDS4ProjectCreator;
# Description : The Borland Developer Studio 4 Project Creator
# Author : Johnny Willemsen
# Create Date : 14/12/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BDS4WorkspaceCreator.pm b/modules/BDS4WorkspaceCreator.pm
index c0c10f7b..c37d588e 100644
--- a/modules/BDS4WorkspaceCreator.pm
+++ b/modules/BDS4WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package BDS4WorkspaceCreator;
# Description : A BDS 4 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 14/12/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BMakeProjectCreator.pm b/modules/BMakeProjectCreator.pm
index 6ef1e7f1..ce7c9c91 100644
--- a/modules/BMakeProjectCreator.pm
+++ b/modules/BMakeProjectCreator.pm
@@ -4,6 +4,7 @@ package BMakeProjectCreator;
# Description : A BMake Project Creator
# Author : Chad Elliott
# Create Date : 2/03/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BMakeWorkspaceCreator.pm b/modules/BMakeWorkspaceCreator.pm
index de3f05f1..dc77bca4 100644
--- a/modules/BMakeWorkspaceCreator.pm
+++ b/modules/BMakeWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package BMakeWorkspaceCreator;
# Description : A Borland Make Workspace (Makefile) creator
# Author : Chad Elliott
# Create Date : 2/03/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BorlandProjectBase.pm b/modules/BorlandProjectBase.pm
index 7b0df4be..d98b41d7 100644
--- a/modules/BorlandProjectBase.pm
+++ b/modules/BorlandProjectBase.pm
@@ -4,6 +4,7 @@ package BorlandProjectBase;
# Description : A Borland base module for Borland Project Creators
# Author : Chad Elliott
# Create Date : 5/5/2009
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/BorlandPropertyBase.pm b/modules/BorlandPropertyBase.pm
index 294a72ba..3a16b0e7 100644
--- a/modules/BorlandPropertyBase.pm
+++ b/modules/BorlandPropertyBase.pm
@@ -4,6 +4,7 @@ package BorlandPropertyBase;
# Description : A Borland base module for properties.
# Author : Chad Elliott
# Create Date : 5/5/2009
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CCProjectCreator.pm b/modules/CCProjectCreator.pm
index f154ca46..9a64b2af 100644
--- a/modules/CCProjectCreator.pm
+++ b/modules/CCProjectCreator.pm
@@ -4,6 +4,7 @@ package CCProjectCreator;
# Description : A Code Composer Project Creator
# Author : Chad Elliott
# Create Date : 9/18/2006
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CCWorkspaceCreator.pm b/modules/CCWorkspaceCreator.pm
index 5cb7bf72..c2b1c8de 100644
--- a/modules/CCWorkspaceCreator.pm
+++ b/modules/CCWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package CCWorkspaceCreator;
# Description : A Code Composer Workspace creator
# Author : Chad Elliott
# Create Date : 9/18/2006
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CDT6ProjectCreator.pm b/modules/CDT6ProjectCreator.pm
index 77eaece8..23bc4a9b 100644
--- a/modules/CDT6ProjectCreator.pm
+++ b/modules/CDT6ProjectCreator.pm
@@ -4,6 +4,7 @@ package CDT6ProjectCreator;
# Description : Eclipse CDT 6 generator
# Author : Chris Cleeland, Object Computing, Inc.
# Create Date : 23-Apr-2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CDT6WorkspaceCreator.pm b/modules/CDT6WorkspaceCreator.pm
index 5e577dfc..b3683522 100644
--- a/modules/CDT6WorkspaceCreator.pm
+++ b/modules/CDT6WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package CDT6WorkspaceCreator;
# Description : Eclipse CDT 6 generator
# Author : Chris Cleeland, Object Computing, Inc.
# Create Date : 23-Apr-2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CDT7ProjectCreator.pm b/modules/CDT7ProjectCreator.pm
index 21adf776..cfc19bcf 100644
--- a/modules/CDT7ProjectCreator.pm
+++ b/modules/CDT7ProjectCreator.pm
@@ -4,6 +4,7 @@ package CDT7ProjectCreator;
# Description : A CDT7 Project Creator (Eclipse 3.6)
# Author : Adam Mitz, Object Computing, Inc.
# Create Date : 10/04/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CDT7WorkspaceCreator.pm b/modules/CDT7WorkspaceCreator.pm
index 75183fc6..4cea27b8 100644
--- a/modules/CDT7WorkspaceCreator.pm
+++ b/modules/CDT7WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package CDT7WorkspaceCreator;
# Description : A CDT7 Workspace Creator (Eclipse 3.6)
# Author : Adam Mitz, Object Computing, Inc.
# Create Date : 10/04/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/CommandHelper.pm b/modules/CommandHelper.pm
index 801a01c1..2d1600e1 100644
--- a/modules/CommandHelper.pm
+++ b/modules/CommandHelper.pm
@@ -12,6 +12,7 @@ package CommandHelper;
#
# Author : Chad Elliott
# Create Date : 6/30/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/ConfigParser.pm b/modules/ConfigParser.pm
index a01b34be..c15ddff2 100644
--- a/modules/ConfigParser.pm
+++ b/modules/ConfigParser.pm
@@ -4,6 +4,7 @@ package ConfigParser;
# Description : Reads a generic config file and store the values
# Author : Chad Elliott
# Create Date : 6/12/2006
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Creator.pm b/modules/Creator.pm
index 803db3c1..1db6f588 100644
--- a/modules/Creator.pm
+++ b/modules/Creator.pm
@@ -4,6 +4,7 @@ package Creator;
# Description : Base class for workspace and project creators
# Author : Chad Elliott
# Create Date : 5/13/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -65,7 +66,14 @@ my $onVMS = DirectoryManager::onVMS();
# ************************************************************
sub new {
- my($class, $global, $inc, $template, $ti, $dynamic, $static, $relative, $addtemp, $addproj, $progress, $toplevel, $baseprojs, $feature, $features, $hierarchy, $nmodifier, $applypj, $into, $language, $use_env, $expandvars, $type) = @_;
+ my($class, $global, $inc, $template,
+ $ti, $dynamic, $static, $relative,
+ $addtemp, $addproj, $progress,
+ $toplevel, $baseprojs, $feature,
+ $features, $hierarchy, $nmodifier,
+ $applypj, $into, $language, $use_env,
+ $expandvars, $type) = @_;
+
my $self = Parser::new($class, $inc);
$self->{'relative'} = $relative;
@@ -104,7 +112,6 @@ sub new {
return $self;
}
-
sub preprocess_line {
my($self, $fh, $line) = @_;
@@ -194,7 +201,6 @@ sub generate {
return $status;
}
-
# split an inheritance list like ": a,b, c" into components
sub parse_parents {
my($parents, $errorStringRef, $statusRef) = @_;
@@ -215,7 +221,7 @@ sub parse_parents {
sub parse_known {
- my($self, $line) = @_;
+ my($self, $line, $fh) = @_;
my $status = 1;
my $errorString;
my $type = $self->{'grammar_type'};
@@ -263,7 +269,7 @@ sub parse_known {
$errorString = "No $type was defined";
$status = 0;
}
- elsif ($self->parse_assignment($line, \@values)) {
+ elsif ($self->parse_assignment($line, \@values, $fh)) {
## If this returns true, then we've found an assignment
}
elsif ($line =~ /^(\w+)\s*(\([^\)]+\))?\s*(:.*)?\s*{$/) {
@@ -289,6 +295,51 @@ sub parse_known {
return $status, $errorString, @values;
}
+## Parse an assignment that is bracketed by curly braces so it can span multiple lines.
+## This method parses the bracketed assignment into a regular assignment
+## and then calls SUPER::parse_assigment.
+##
+## A bracketed assigment has the form of:
+##
+## keyword <operator> [optional flags] {
+## This spans
+## multiple lines
+## }
+##
+## Optional flags are \s to retain leading white space and
+## \n to retain new lines. These flags are be combined.
+sub parse_assignment {
+ my($self, $line, $values, $fh) = @_;
+
+ if ($line =~ /^(\w+)\s*([\-+]?=)\s*(\\[sn]{1,2})?\s*{$/) {
+ my $comp = lc($1);
+ my $op = $2;
+ my $keep_leading_whitespace = ($3 eq "\\s" || $3 eq "\\ns" || $3 eq "\\sn");
+ my $keep_new_lines = ($3 eq "\\n" || $3 eq "\\ns" || $3 eq "\\sn");
+
+ my $bracketed_assignment;
+ while(<$fh>) {
+ ## This is not an error,
+ ## this is the end of the bracketed assignment.
+ last if ($_ =~ /^\s*}\s*$/);
+
+ ## Strip comments.
+ my $current_line = $self->strip_comments($_);
+ ## Skip blank lines unless we're keeping new lines.
+ next if (!$keep_new_lines && $self->is_blank_line($current_line));
+
+ $bracketed_assignment .= "\n" if defined $bracketed_assignment && $keep_new_lines;
+
+ $bracketed_assignment .= $self->strip_lt_whitespace($current_line, $keep_leading_whitespace);
+ }
+
+ if (defined $bracketed_assignment) {
+ $line = $comp . $op . $bracketed_assignment;
+ }
+ }
+
+ return $self->SUPER::parse_assignment($line, \@$values);
+}
sub parse_scope {
my($self, $fh, $name, $type, $validNames, $flags, $elseflags) = @_;
@@ -332,7 +383,7 @@ sub parse_scope {
}
else {
my @values;
- if (defined $validNames && $self->parse_assignment($line, \@values)) {
+ if (defined $validNames && $self->parse_assignment($line, \@values, $fh)) {
if (defined $$validNames{$values[1]}) {
## If $type is not defined, we don't even need to bother with
## processing the assignment as we will be throwing the value
@@ -978,7 +1029,7 @@ sub get_outdir {
sub expand_variables {
- my($self, $value, $rel, $expand_template, $scope, $expand, $warn) = @_;
+ my($self, $value, $rel, $expand_template, $scopes, $expand, $warn) = @_;
my $cwd = $self->getcwd();
my $start = 0;
my $forward_slashes = $self->{'convert_slashes'} ||
@@ -1064,8 +1115,12 @@ sub expand_variables {
$self->expand_variables_from_template_values()) {
my $ti = $self->get_template_input();
my $val = (defined $ti ? $ti->get_value($name) : undef);
- my $sname = (defined $scope ? $scope . "::$name" : undef);
- my $arr = $self->adjust_value([$sname, $name],
+ my @snames;
+ if (defined $scopes) {
+ @snames = map { defined $_ ? $_ . '::' . $name : $name } @$scopes;
+ }
+ push(@snames, $name);
+ my $arr = $self->adjust_value(\@snames,
(defined $val ? $val : []));
if (UNIVERSAL::isa($arr, 'HASH')) {
$self->warning("$name conflicts with a template variable scope");
@@ -1136,13 +1191,13 @@ sub replace_env_vars {
sub relative {
- my($self, $value, $expand_template, $scope) = @_;
+ my($self, $value, $expand_template, $scopes) = @_;
if (defined $value) {
if (UNIVERSAL::isa($value, 'ARRAY')) {
my @built;
foreach my $val (@$value) {
- my $rel = $self->relative($val, $expand_template, $scope);
+ my $rel = $self->relative($val, $expand_template, $scopes);
if (UNIVERSAL::isa($rel, 'ARRAY')) {
push(@built, @$rel);
}
@@ -1161,12 +1216,12 @@ sub relative {
my $ovalue = $value;
my($rel, $how) = $self->get_initial_relative_values();
$value = $self->expand_variables($value, $rel,
- $expand_template, $scope, $how);
+ $expand_template, $scopes, $how, 0);
if ($ovalue eq $value || index($value, '$') >= 0) {
($rel, $how) = $self->get_secondary_relative_values();
$value = $self->expand_variables($value, $rel,
- $expand_template, $scope,
+ $expand_template, $scopes,
$how, 1);
}
}
diff --git a/modules/Depgen/DependencyEditor.pm b/modules/Depgen/DependencyEditor.pm
index 6f551d64..9fd45f63 100644
--- a/modules/Depgen/DependencyEditor.pm
+++ b/modules/Depgen/DependencyEditor.pm
@@ -4,6 +4,7 @@ package DependencyEditor;
# Description : Edits existing dependencies.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -26,13 +27,14 @@ sub new {
sub process {
my($self, $output, $type, $noinline, $macros,
- $ipaths, $replace, $exclude, $files) = @_;
+ $ipaths, $replace, $exclude, $files,
+ $append) = @_;
## Back up the original file and receive the contents
my $contents;
if (-s $output) {
$contents = [];
- if (!$self->backup($output, $contents)) {
+ if (!$self->backup($output, $contents, $append)) {
print STDERR "ERROR: Unable to backup $output\n";
return 1;
}
@@ -47,13 +49,24 @@ sub process {
}
}
- ## Write out the new dependency marker
- print $fh "# DO NOT DELETE THIS LINE -- depgen.pl uses it.\n",
- "# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.\n\n";
+ if (!$append) {
+ ## Write out the new dependency marker
+ print $fh "# DO NOT DELETE THIS LINE -- depgen.pl uses it.\n",
+ "# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.\n\n";
+ }
+ else {
+ ## Write start append comment
+ print $fh "# DO NOT DELETE THIS LINE -- depgen.pl appended ",
+ "the following.\n",
+ "# APPENDED DEPENDENCY RULES " ,
+ "by depgen.pl.\n\n";
+ }
## Generate the new dependencies and write them to the file
my $dep = new DependencyGenerator($macros, $ipaths, $replace,
- $type, $noinline, $exclude);
+ $type, $noinline,
+ $exclude);
+
## Sort the files so the dependencies are reproducible
foreach my $file (sort @$files) {
## In some situations we may be passed a directory as part of an
@@ -76,13 +89,22 @@ sub process {
sub backup {
- my($self, $source, $contents) = @_;
+ my($self, $source, $contents, $append) = @_;
my $status;
my $fh = new FileHandle();
my $backup = "$source.bak";
## Back up the file. While doing so, keep track of the contents of the
- ## file and keep everything except the old dependencies.
+ ## file and keep everything except the old dependencies or keep
+ ## everything if appending.
+ my $search_string;
+ if (!$append) {
+ $search_string = 'DO NOT DELETE';
+ }
+ else {
+ $search_string = 'IF YOU PUT ANYTHING HERE IT WILL GO AWAY';
+ }
+
if (open($fh, $source)) {
my $oh = new FileHandle();
if (open($oh, ">$backup")) {
@@ -91,7 +113,7 @@ sub backup {
while(<$fh>) {
print $oh $_;
if ($record) {
- if (index($_, 'DO NOT DELETE') >= 0) {
+ if (index($_, $search_string) >= 0) {
$record = undef;
}
else {
diff --git a/modules/Depgen/DependencyGenerator.pm b/modules/Depgen/DependencyGenerator.pm
index 77c0eee8..a462cc6b 100644
--- a/modules/Depgen/DependencyGenerator.pm
+++ b/modules/Depgen/DependencyGenerator.pm
@@ -4,6 +4,7 @@ package DependencyGenerator;
# Description : Runs the correct dependency generator on the file.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/DependencyWriter.pm b/modules/Depgen/DependencyWriter.pm
index 0f2cc573..ece487b9 100644
--- a/modules/Depgen/DependencyWriter.pm
+++ b/modules/Depgen/DependencyWriter.pm
@@ -4,6 +4,7 @@ package DependencyWriter;
# Description : Base class for all Dependency Writers.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/DependencyWriterFactory.pm b/modules/Depgen/DependencyWriterFactory.pm
index 558793ea..296a99bc 100644
--- a/modules/Depgen/DependencyWriterFactory.pm
+++ b/modules/Depgen/DependencyWriterFactory.pm
@@ -4,6 +4,7 @@ package DependencyWriterFactory;
# Description : Create DependencyWriter objects.
# Author : Chad Elliott
# Create Date : 5/23/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/Driver.pm b/modules/Depgen/Driver.pm
index 8aac67ca..a5e715aa 100644
--- a/modules/Depgen/Driver.pm
+++ b/modules/Depgen/Driver.pm
@@ -4,6 +4,7 @@ package Driver;
# Description : Generate dependencies for Make and NMake.
# Author : Chad Elliott
# Create Date : 3/21/2007
+# $Id$
# ************************************************************
# ************************************************************
@@ -110,6 +111,7 @@ sub usageAndExit {
print "-D This option sets a macro to an optional value.\n" .
"-I The -I option adds an include directory.\n" .
"-R Replace \$VARNAME paths with \$(VARNAME).\n" .
+ "-a Append to existing dependencies. Useful with -t gnuidl.\n" .
"-e Exclude dependencies generated by <file>, but not <file> " .
"itself.\n" .
"-f Specifies the output file. This file will be edited if it " .
@@ -156,7 +158,7 @@ sub run {
my $type = $defaults{$os};
my $output = '-';
my $needsrc = 1;
- my($noinline, @files, %macros, @ipaths, %replace, %exclude);
+ my($noinline, @files, %macros, @ipaths, %replace, %exclude, $append);
for(my $i = 0; $i < $argc; ++$i) {
my $arg = $$args[$i];
@@ -164,7 +166,25 @@ sub run {
$macros{$1} = $3;
}
elsif ($arg =~ /^\-I(.*)/) {
- push(@ipaths, File::Spec->canonpath($1));
+ # support '-Idir' and '-I dir'
+ if ('' ne $1) {
+ push(@ipaths, File::Spec->canonpath($1));
+ }
+ else {
+ # get next arg
+ if (++$i < $argc) {
+ $arg = $$args[$i];
+ if ($arg =~ /^\-/) {
+ $self->usageAndExit('Invalid use of -I');
+ }
+
+ push(@ipaths, File::Spec->canonpath($arg));
+
+ }
+ else {
+ $self->usageAndExit('Invalid use of -I');
+ }
+ }
}
elsif ($arg eq '-A') {
foreach my $auto (@{$self->{'automatic'}}) {
@@ -204,6 +224,9 @@ sub run {
$self->usageAndExit('Invalid use of -f');
}
}
+ elsif ($arg eq '-a') {
+ $append = 1;
+ }
elsif ($arg eq '-i') {
$needsrc = undef;
}
@@ -239,6 +262,6 @@ sub run {
}
my $editor = new DependencyEditor();
- return $editor->process($output, $type, $noinline, \%macros,
- \@ipaths, \%replace, \%exclude, \@files);
+ return $editor->process($output, $type, $noinline, \%macros, \@ipaths,
+ \%replace, \%exclude, \@files, $append);
}
diff --git a/modules/Depgen/MakeDependencyWriter.pm b/modules/Depgen/MakeDependencyWriter.pm
index a10d0619..1dde2019 100644
--- a/modules/Depgen/MakeDependencyWriter.pm
+++ b/modules/Depgen/MakeDependencyWriter.pm
@@ -4,6 +4,7 @@ package MakeDependencyWriter;
# Description : Generates generic Makefile dependencies.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/MakeObjectGenerator.pm b/modules/Depgen/MakeObjectGenerator.pm
index 397c6a01..84306324 100644
--- a/modules/Depgen/MakeObjectGenerator.pm
+++ b/modules/Depgen/MakeObjectGenerator.pm
@@ -4,6 +4,7 @@ package MakeObjectGenerator;
# Description : Generates object files for generic Makefiles.
# Author : Chad Elliott
# Create Date : 5/23/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/NMakeDependencyWriter.pm b/modules/Depgen/NMakeDependencyWriter.pm
index 0428a55c..2b951d65 100644
--- a/modules/Depgen/NMakeDependencyWriter.pm
+++ b/modules/Depgen/NMakeDependencyWriter.pm
@@ -4,6 +4,7 @@ package NMakeDependencyWriter;
# Description : Generates NMake dependencies.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/NMakeObjectGenerator.pm b/modules/Depgen/NMakeObjectGenerator.pm
index e718fa34..54e2b258 100644
--- a/modules/Depgen/NMakeObjectGenerator.pm
+++ b/modules/Depgen/NMakeObjectGenerator.pm
@@ -2,6 +2,7 @@
# Description : Generates object files for NMake Makefiles.
# Author : Chad Elliott
# Create Date : 5/23/2003
+# $Id$
# ************************************************************
package WinProjectBaseEx;
diff --git a/modules/Depgen/ObjectGenerator.pm b/modules/Depgen/ObjectGenerator.pm
index 1935a5f3..10637206 100644
--- a/modules/Depgen/ObjectGenerator.pm
+++ b/modules/Depgen/ObjectGenerator.pm
@@ -4,6 +4,7 @@ package ObjectGenerator;
# Description : Base class for all Object Generators.
# Author : Chad Elliott
# Create Date : 5/23/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/ObjectGeneratorFactory.pm b/modules/Depgen/ObjectGeneratorFactory.pm
index 6f2834a8..0232e008 100644
--- a/modules/Depgen/ObjectGeneratorFactory.pm
+++ b/modules/Depgen/ObjectGeneratorFactory.pm
@@ -4,6 +4,7 @@ package ObjectGeneratorFactory;
# Description : Create ObjectGenerator objects.
# Author : Chad Elliott
# Create Date : 5/23/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Depgen/Preprocessor.pm b/modules/Depgen/Preprocessor.pm
index 4dea2fc4..bb6f650a 100644
--- a/modules/Depgen/Preprocessor.pm
+++ b/modules/Depgen/Preprocessor.pm
@@ -4,6 +4,7 @@ package Preprocessor;
# Description : Preprocesses the supplied file.
# Author : Chad Elliott
# Create Date : 2/10/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -77,8 +78,9 @@ sub process {
/^\s*#\s*include\s+[<"]([^">]+)[">]/o) {
## Locate the include file
my $inc;
- if (exists $self->{'ifound'}->{$1}) {
- $inc = $self->{'ifound'}->{$1};
+ if (exists $self->{'ifound'}->{$dir} &&
+ exists $self->{'ifound'}->{$dir}->{$1}) {
+ $inc = $self->{'ifound'}->{$dir}->{$1};
}
else {
foreach my $dirp (@{$self->{'ipaths'}}) {
@@ -96,7 +98,7 @@ sub process {
$inc = "$dir/$1";
}
}
- $self->{'ifound'}->{$1} = $inc;
+ $self->{'ifound'}->{$dir}->{$1} = $inc;
}
## If we've found the include file, then process it too.
diff --git a/modules/DirectoryManager.pm b/modules/DirectoryManager.pm
index 93c95458..28578c00 100644
--- a/modules/DirectoryManager.pm
+++ b/modules/DirectoryManager.pm
@@ -4,6 +4,7 @@ package DirectoryManager;
# Description : This module provides directory related methods
# Author : Chad Elliott
# Create Date : 5/13/2004
+# $Id$
# ************************************************************
# ************************************************************
@@ -63,7 +64,7 @@ sub cd {
}
}
elsif ($onVMS) {
- ## On VMS, we nee to get the UNIX style path and remove the
+ ## On VMS, we need to get the UNIX style path and remove the
## trailing slash.
$cwd = VMS::Filespec::unixify($cwd);
$cwd =~ s!/$!!g;
diff --git a/modules/Driver.pm b/modules/Driver.pm
index b96ad603..b3ddc0f1 100644
--- a/modules/Driver.pm
+++ b/modules/Driver.pm
@@ -4,6 +4,7 @@ package Driver;
# Description : Functionality to call a workspace or project creator
# Author : Chad Elliott
# Create Date : 5/28/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -285,7 +286,9 @@ sub run {
OutputMessage::set_levels($cfg->get_value('logging'));
}
- $self->debug("CMD: $0 @ARGV");
+ ## Assembling a string from an array can be time consuming. If we're
+ ## not debugging, then skip it.
+ $self->debug("CMD: $0 @ARGV") if ($self->get_debug_level());
## After we read the config file, see if the user has provided
## dynamic types
@@ -425,8 +428,13 @@ sub run {
push(@{$options->{'include'}}, $self->{'basepath'} . '/config',
$self->{'basepath'} . '/templates');
- ## All includes (except the current directory) have been added by this time
- $self->debug("INCLUDES: @{$options->{'include'}}");
+ ## All includes (except the current directory) have been added by this
+ ## time. Both of the following can be time consuming, so we'll only do
+ ## it if we know we're debugging.
+ if ($self->get_debug_level()) {
+ $self->debug("INCLUDES: @{$options->{'include'}}");
+ $self->dump_base_projects($options->{'include'});
+ }
## Set the global feature file
my $global_feature_file = (defined $options->{'gfeature_file'} &&
@@ -573,11 +581,16 @@ sub run {
$options->{'expand_vars'},
$options->{'gendot'},
$options->{'comments'},
- $options->{'for_eclipse'});
+ $options->{'for_eclipse'},
+ $options->{'workers'},
+ $options->{'workers_dir'},
+ $options->{'workers_port'});
+
mpc_debug::chkpnt_post_creator_create($name);
## Update settings based on the configuration file
- $creator->set_verbose_ordering($cfg->get_value('verbose_ordering'));
+ my $verbose_ordering = $cfg->get_value('verbose_ordering');
+ $creator->set_verbose_ordering($verbose_ordering) if defined $verbose_ordering;
if ($base ne $file) {
my $dir = ($base eq '' ? $file : $self->mpc_dirname($file));
diff --git a/modules/EM3ProjectCreator.pm b/modules/EM3ProjectCreator.pm
index 280f4cb4..8e483ece 100644
--- a/modules/EM3ProjectCreator.pm
+++ b/modules/EM3ProjectCreator.pm
@@ -4,6 +4,7 @@ package EM3ProjectCreator;
# Description : An eMbedded Visual C++ 3.00 Project Creator
# Author : Chad Elliott
# Create Date : 7/3/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/EM3WorkspaceCreator.pm b/modules/EM3WorkspaceCreator.pm
index 09e20fdf..c35e295c 100644
--- a/modules/EM3WorkspaceCreator.pm
+++ b/modules/EM3WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package EM3WorkspaceCreator;
# Description : An eMbedded v3 Workspace Creator
# Author : Chad Elliott
# Create Date : 7/3/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/FeatureParser.pm b/modules/FeatureParser.pm
index e0a5ced6..4224ba15 100644
--- a/modules/FeatureParser.pm
+++ b/modules/FeatureParser.pm
@@ -4,6 +4,7 @@ package FeatureParser;
# Description : Reads the feature files and store the values
# Author : Chad Elliott
# Create Date : 5/21/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/GHSProjectCreator.pm b/modules/GHSProjectCreator.pm
index 296c3d9e..a7c57a69 100644
--- a/modules/GHSProjectCreator.pm
+++ b/modules/GHSProjectCreator.pm
@@ -7,6 +7,7 @@ package GHSProjectCreator;
# set the MPC_GHS_UNIX environment variable.
# Author : Chad Elliott
# Create Date : 4/19/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/GHSPropertyBase.pm b/modules/GHSPropertyBase.pm
index 7c624e8a..089e235a 100644
--- a/modules/GHSPropertyBase.pm
+++ b/modules/GHSPropertyBase.pm
@@ -4,6 +4,7 @@ package GHSPropertyBase;
# Description : A GHS property base module.
# Author : Chad Elliott
# Create Date : 3/9/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/GHSWorkspaceCreator.pm b/modules/GHSWorkspaceCreator.pm
index 4cc9dd2a..0ef5a825 100644
--- a/modules/GHSWorkspaceCreator.pm
+++ b/modules/GHSWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package GHSWorkspaceCreator;
# Description : A GHS Workspace creator for version 4.x
# Author : Chad Elliott
# Create Date : 7/3/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/GUID.pm b/modules/GUID.pm
index 0f4a29b7..bad07ea1 100644
--- a/modules/GUID.pm
+++ b/modules/GUID.pm
@@ -4,6 +4,7 @@ package GUID;
# Description : Generate GUID's for VC7 projects and workspaces
# Author : Chad Elliott
# Create Date : 5/14/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/HTMLProjectCreator.pm b/modules/HTMLProjectCreator.pm
index 00e49087..82bc376a 100644
--- a/modules/HTMLProjectCreator.pm
+++ b/modules/HTMLProjectCreator.pm
@@ -4,6 +4,7 @@ package HTMLProjectCreator;
# Description : An HTML project creator to display all settings
# Author : Justin Michel & Chad Elliott
# Create Date : 8/25/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/HTMLWorkspaceCreator.pm b/modules/HTMLWorkspaceCreator.pm
index 16453428..74be00f7 100644
--- a/modules/HTMLWorkspaceCreator.pm
+++ b/modules/HTMLWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package HTMLWorkspaceCreator;
# Description : An html workspace creator
# Author : Justin Michel
# Create Date : 8/25/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/MPC.pm b/modules/MPC.pm
index 7a994981..ce8e36f0 100644
--- a/modules/MPC.pm
+++ b/modules/MPC.pm
@@ -5,6 +5,7 @@ package MPC;
# maintain backward compatibility.
# Author : Chad Elliott
# Create Date : 1/30/2004
+# $Id$
# ******************************************************************
# ******************************************************************
diff --git a/modules/MWC.pm b/modules/MWC.pm
index 85d589b9..225e1fba 100644
--- a/modules/MWC.pm
+++ b/modules/MWC.pm
@@ -5,6 +5,7 @@ package MWC;
# maintain backward compatibility.
# Author : Chad Elliott
# Create Date : 1/30/2004
+# $Id$
# ******************************************************************
# ******************************************************************
diff --git a/modules/MakeProjectBase.pm b/modules/MakeProjectBase.pm
index 13bfebb9..3814e601 100644
--- a/modules/MakeProjectBase.pm
+++ b/modules/MakeProjectBase.pm
@@ -4,6 +4,7 @@ package MakeProjectBase;
# Description : A Make Project base module
# Author : Chad Elliott
# Create Date : 1/4/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/MakeProjectCreator.pm b/modules/MakeProjectCreator.pm
index e90addb0..24024f0f 100644
--- a/modules/MakeProjectCreator.pm
+++ b/modules/MakeProjectCreator.pm
@@ -4,6 +4,7 @@ package MakeProjectCreator;
# Description : A Generic Make Project Creator
# Author : Chad Elliott
# Create Date : 2/18/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/MakePropertyBase.pm b/modules/MakePropertyBase.pm
index 34ffaaf3..cdb93c43 100644
--- a/modules/MakePropertyBase.pm
+++ b/modules/MakePropertyBase.pm
@@ -4,6 +4,7 @@ package MakePropertyBase;
# Description : A Make property base module
# Author : Chad Elliott
# Create Date : 3/9/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/MakeWorkspaceBase.pm b/modules/MakeWorkspaceBase.pm
index 5384fff9..5e58c29f 100644
--- a/modules/MakeWorkspaceBase.pm
+++ b/modules/MakeWorkspaceBase.pm
@@ -4,6 +4,7 @@ package MakeWorkspaceBase;
# Description : A Make Workspace base module
# Author : Chad Elliott
# Create Date : 11/21/2006
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/MakeWorkspaceCreator.pm b/modules/MakeWorkspaceCreator.pm
index 2e839a40..389bbf3c 100644
--- a/modules/MakeWorkspaceCreator.pm
+++ b/modules/MakeWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package MakeWorkspaceCreator;
# Description : A Generic Workspace (Makefile) creator
# Author : Chad Elliott
# Create Date : 2/18/2003
+# $Id$
# ************************************************************
# ************************************************************
@@ -61,7 +62,7 @@ sub write_comps {
## Send all the information to our base class method
$self->write_named_targets($fh, $self->crlf(), \%targnum, \@list,
($self->languageIs(Creator::csharp) ?
- 'bundle ' : '') . $targets, '', 'generated ',
+ 'bundle ' : '') . $targets, '', '',
$self->project_target_translation(1), 1);
}
diff --git a/modules/NMakeProjectCreator.pm b/modules/NMakeProjectCreator.pm
index f16193b8..2f57e165 100644
--- a/modules/NMakeProjectCreator.pm
+++ b/modules/NMakeProjectCreator.pm
@@ -4,6 +4,7 @@ package NMakeProjectCreator;
# Description : An NMake Project Creator
# Author : Chad Elliott
# Create Date : 5/31/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/NMakeWorkspaceCreator.pm b/modules/NMakeWorkspaceCreator.pm
index ad649d54..c5bcb62d 100644
--- a/modules/NMakeWorkspaceCreator.pm
+++ b/modules/NMakeWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package NMakeWorkspaceCreator;
# Description : A NMake Workspace (Makefile) creator
# Author : Chad Elliott
# Create Date : 6/10/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Options.pm b/modules/Options.pm
index b4ae0c24..ae8aab3c 100644
--- a/modules/Options.pm
+++ b/modules/Options.pm
@@ -4,6 +4,7 @@ package Options;
# Description : Process mpc command line options
# Author : Chad Elliott
# Create Date : 3/20/2003
+# $Id$
# ************************************************************
# ************************************************************
@@ -43,6 +44,7 @@ sub printUsage {
$spaces . "[-apply_project] [-version] [-into <directory>]\n" .
$spaces . "[-gfeature_file <file name>] [-nocomments]\n" .
$spaces . "[-relative_file <file name>] [-for_eclipse]\n" .
+ $spaces . "[-workers <#>] [-workers_dir <dir> | -workers_port <#>]\n" .
$spaces . "[-language <";
my $olen = length($spaces) + 12;
@@ -69,8 +71,8 @@ sub printUsage {
$len = $olen;
## Sort the project types, but keep those that are the same with different
- ## version numbers in the right order (i.e., vc8, vc9, vc10). The vc71
- ## type is a special case and needs to stay betwen vc7 and vc8.
+ ## version numbers in the right order (i.e., vc8, vc9, vc10, vc11). The vc71
+ ## type is a special case and needs to stay between vc7 and vc8.
@keys = sort { if ($a ne 'vc71' && $b ne 'vc71' && $a =~ /^([^\d]+)(\d+)$/) {
my($a1, $a2) = ($1, $2);
if ($b =~ /^([^\d]+)(\d+)$/ && $a1 eq $1) {
@@ -156,6 +158,15 @@ sub printUsage {
" -static Specifies that only static projects will be generated.\n",
" By default, only dynamic projects are generated.\n",
" -template Specifies the template name (with no extension).\n",
+" -workers Specifies number of child processes to use to generate\n",
+" projects.\n",
+" -workers_dir The directory for storing temporary output files\n",
+" from the child processes. The default is '/tmp/mpc'\n",
+" If neither -workers_dir nor -workers_port is used,\n",
+" -workers_dir is assumed.\n",
+" -workers_port The port number for the parent listener. If neither\n",
+" -workers_dir nor -workers_port is used, -workers_dir\n",
+" is assumed.\n",
" -ti Specifies the template input file (with no extension)\n",
" for the specific type (ex. -ti dll_exe:vc8exe).\n",
" -type Specifies the type of project file to generate. This\n",
@@ -164,7 +175,7 @@ sub printUsage {
" -use_env Use environment variables for all uses of \$() instead\n",
" of the relative replacement values.\n",
" -value_project This option allows modification of a project variable\n",
-" assignment . Use += to add VAL to the NAME's value.\n",
+" assignment. Use += to add VAL to the NAME's value.\n",
" Use -= to subtract and = to override the value.\n",
" This can be used to introduce new name value pairs to\n",
" a project. However, it must be a valid project\n",
@@ -182,6 +193,18 @@ sub optionError {
}
+sub path_cleanup {
+ ## Clean up the path as much as possible. For some reason,
+ ## File::Spec->canonpath() on Windows doesn't remove trailing
+ ## /. from the path. (Current versions have fixed this, but
+ ## we'll leave the work-around in case users have an old Perl.)
+ my $p = File::Spec->canonpath($_[0]);
+ $p =~ s/\\/\//g;
+ $p =~ s!/\.$!!;
+ return $p;
+}
+
+
sub completion_command {
my($self, $name, $types) = @_;
my $str = "complete $name " .
@@ -249,6 +272,9 @@ sub options {
my $genins = ($defaults ? 0 : undef);
my $gendot = ($defaults ? 0 : undef);
my $foreclipse = ($defaults ? 0 : undef);
+ my $workers = ($defaults ? 0 : undef);
+ my $workers_dir ;
+ my $workers_port;
## Process the command line arguments
for(my $i = 0; $i <= $#args; $i++) {
@@ -454,18 +480,48 @@ sub options {
$self->warning("-relative value $orig has been changed to\n$val");
}
- ## Clean up the path as much as possible. For some reason,
- ## File::Spec->canonpath() on Windows doesn't remove trailing
- ## /. from the path.
- $relative{$name} = File::Spec->canonpath($val);
- $relative{$name} =~ s/\\/\//g;
- $relative{$name} =~ s!/\.$!!;
+ $relative{$name} = path_cleanup($val);
}
else {
$self->optionError('Invalid argument to -relative');
}
}
}
+ elsif ($arg eq '-workers') {
+ $i++;
+ $workers = $args[$i];
+
+ if (!defined $workers) {
+ $self->optionError('-workers requires an argument');
+ }
+ }
+ elsif ($arg eq '-workers_dir') {
+ $i++;
+ $workers_dir = $args[$i];
+
+ if (!defined $workers_dir) {
+ $self->optionError('-workers_dir requires an argument');
+ }
+
+ if (! -d $workers_dir) {
+ $self->diagnostic("Creating temp directory $workers_dir");
+ unless (mkdir $workers_dir) {
+ $self->optionError("Unable to create temp directory $workers_dir");
+ }
+ }
+ }
+ elsif ($arg eq '-workers_port') {
+ $i++;
+ $workers_port = $args[$i];
+
+ if (!defined $workers_port) {
+ $self->optionError('-workers_port requires an argument');
+ }
+
+ if ($workers_port < 0 || $workers_port > 65535) {
+ $self->optionError('valid -workers_port range is between 0 and 65535');
+ }
+ }
elsif ($arg eq '-ti') {
$i++;
my $tmpi = $args[$i];
@@ -550,10 +606,14 @@ sub options {
$self->optionError("Unknown option: $arg");
}
else {
- push(@input, $arg);
+ push(@input, path_cleanup($arg));
}
}
+ ## The following can be time consuming, so we'll only do it if we know
+ ## we're debugging.
+ $self->dump_base_projects(\@include) if ($self->get_debug_level());
+
return {'global' => $global,
'feature_file' => $feature_f,
'gfeature_file' => $gfeature_f,
@@ -571,6 +631,9 @@ sub options {
'static' => $static,
'relative' => \%relative,
'reldefs' => $reldefs,
+ 'workers' => $workers,
+ 'workers_dir' => $workers_dir,
+ 'workers_port' => $workers_port,
'toplevel' => $toplevel,
'recurse' => $recurse,
'addtemp' => \%addtemp,
@@ -609,4 +672,19 @@ sub is_set {
return undef;
}
+sub dump_base_projects {
+ my($self, $includes) = @_;
+ my $dp = new FileHandle();
+
+ ## Go through each include directory and print all of the possible base
+ ## projects. Both .mpb and .mpc files can be base projects.
+ foreach my $dir (@$includes) {
+ if (opendir($dp, $dir)) {
+ $self->debug("Base projects from $dir: " .
+ join(' ', grep(/\.mp[bc]$/, readdir($dp))));
+ closedir($dp);
+ }
+ }
+}
+
1;
diff --git a/modules/OutputMessage.pm b/modules/OutputMessage.pm
index 16ee078a..a3059f90 100644
--- a/modules/OutputMessage.pm
+++ b/modules/OutputMessage.pm
@@ -4,6 +4,7 @@ package OutputMessage;
# Description : Prints information, warnings and errors.
# Author : Chad Elliott
# Create Date : 2/02/2004
+# $Id$
# ************************************************************
# ************************************************************
@@ -49,6 +50,11 @@ sub set_levels {
}
}
+## Accessor for the debug setting. No parameters are necesary.
+sub get_debug_level {
+ return $debug;
+}
+
sub split_message {
my($self, $msg, $spc) = @_;
$msg =~ s/\n+/\n$spc/g;
diff --git a/modules/Parser.pm b/modules/Parser.pm
index 7a749691..6da79bf7 100644
--- a/modules/Parser.pm
+++ b/modules/Parser.pm
@@ -4,6 +4,7 @@ package Parser;
# Description : A basic parser that requires a parse_line override
# Author : Chad Elliott
# Create Date : 5/16/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -43,16 +44,37 @@ sub new {
}
+sub strip_comments {
+ my($self, $line) = @_;
+
+ $line =~ s/\/\/.*//;
+ return $line;
+}
+
+
+sub strip_lt_whitespace {
+ my($self, $line, $keep_leading_whitespace) = @_;
+
+ $line =~ s/^\s+// if !$keep_leading_whitespace;
+ $line =~ s/\s+$//;
+ return $line;
+}
+
+
+sub is_blank_line {
+ my($self, $line) = @_;
+ return m/^\s+$/;
+}
+
+
sub strip_line {
my($self, $line) = @_;
## Keep track of our line number
++$self->{'line_number'};
- ## Remove comments and leading and trailing white-space.
- $line =~ s/\/\/.*//;
- $line =~ s/^\s+//;
- $line =~ s/\s+$//;
+ $line = $self->strip_comments($line);
+ $line = $self->strip_lt_whitespace($line);
return $line;
}
@@ -127,6 +149,7 @@ sub cached_file_read {
$self->{'line_number'} = 0;
foreach my $line (@$lines) {
++$self->{'line_number'};
+
## Since we're "reading" a cached file, we must pass undef as the
## file handle to parse_line().
($status, $error) = $self->parse_line(undef, $line);
diff --git a/modules/ProjectCreator.pm b/modules/ProjectCreator.pm
index 67235477..704d842e 100644
--- a/modules/ProjectCreator.pm
+++ b/modules/ProjectCreator.pm
@@ -4,6 +4,7 @@ package ProjectCreator;
# Description : Base class for all project creators
# Author : Chad Elliott
# Create Date : 3/13/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -21,6 +22,9 @@ use TemplateParser;
use FeatureParser;
use CommandHelper;
+use Data::Dumper;
+#use Tie::IxHash;
+
use vars qw(@ISA);
@ISA = qw(Creator);
@@ -189,7 +193,7 @@ my $cppresource = 'resource_files';
## Valid component names within a project along with the valid file extensions
my %cppvc = ('source_files' => [ "\\.cpp", "\\.cxx", "\\.cc", "\\.c", "\\.C", ],
- 'template_files' => [ "_T\\.cpp", "_T\\.cxx", "_T\\.cc", "_T\\.c", "_T\\.C", "_t\\.cpp", "_t\\.cxx", "_t\\.cc", "_t\\.c", "_t\\.C" ],
+ 'template_files' => [ "_T\\.cpp", "_T\\.cxx", "_T\\.cc", "_T\\.c", "_T\\.C", "_t\\.cpp", "_t\\.cxx", "_t\\.cc", "_t\\.c", "_t\\.C", "\\.tpp" ],
'header_files' => [ "\\.h", "\\.hpp", "\\.hxx", "\\.hh", ],
'inline_files' => [ "\\.i", "\\.ipp", "\\.inl", ],
'documentation_files' => [ "README", "readme", "\\.doc", "\\.txt", "\\.html" ],
@@ -298,7 +302,7 @@ my %mains;
# ************************************************************
sub new {
- my($class, $global, $inc, $template, $ti, $dynamic, $static, $relative, $addtemp, $addproj, $progress, $toplevel, $baseprojs, $gfeature, $relative_f, $feature, $features, $hierarchy, $exclude, $makeco, $nmod, $applypj, $genins, $into, $language, $use_env, $expandvars, $gendot, $comments, $foreclipse) = @_;
+ my($class, $global, $inc, $template, $ti, $dynamic, $static, $relative, $addtemp, $addproj, $progress, $toplevel, $baseprojs, $gfeature, $relative_f, $feature, $features, $hierarchy, $exclude, $makeco, $nmod, $applypj, $genins, $into, $language, $use_env, $expandvars, $gendot, $comments, $foreclipse, $pid) = @_;
my $self = $class->SUPER::new($global, $inc,
$template, $ti, $dynamic, $static,
$relative, $addtemp, $addproj,
@@ -350,6 +354,9 @@ sub new {
$self->add_default_matching_assignments();
$self->reset_generating_types();
+ $self->{'pid'} = $pid;
+ $self->{'llctr'} = 0; # counts the hash insertion order for mp-mpc
+
return $self;
}
@@ -483,6 +490,10 @@ sub process_assignment {
}
mpc_debug::chkpnt_post_after_keyword_assignment($name, $value, $assign, $calledfrom);
}
+ ## Support the '*' mechanism for libs assignment as well.
+ elsif ($name eq 'libs' && index($value, '*') >= 0) {
+ $value = $self->fill_type_name($value, $self->get_default_project_name());
+ }
## If this particular project type does not consider the dollar sign
## special and the user has provided two dollarsigns as an escape, we
@@ -541,6 +552,15 @@ sub process_assignment_sub {
## fix up the value and change the name.
($name, $value) = $self->create_recursive_settings($name, $value, $assign);
+ ## If the assignment name is valid and requires parameter (<%...%>)
+ ## replacement, then do so. But, only do so on actual keywords.
+ ## User defined keywords must not have the parameters replaced in
+ ## order for them to get the correct replacement values later on.
+ if (defined $validNames{$name} &&
+ ($validNames{$name} & 0x04) == 0 && index($value, '<%') >= 0) {
+ $value = $self->replace_parameters($value, $self->{'command_subs'});
+ }
+
return $self->SUPER::process_assignment_sub($name, $value, $assign);
}
@@ -788,7 +808,7 @@ sub parse_line {
my($self, $ih, $line) = @_;
my($status,
$errorString,
- @values) = $self->parse_known($line);
+ @values) = $self->parse_known($line, $ih);
## parse_known() passes back an array of values
## that make up the contents of the line parsed.
@@ -858,8 +878,16 @@ sub parse_line {
elsif (index($cwd, $start) == 0) {
$amount = length($start) + 1;
}
- $self->{'lib_locations'}->{$val} =
+ if ($self->{'pid'} eq 'child') {
+ $self->{'lib_locations'}->{$val} =
+ ++$self->{'llctr'} . '|' .
+ substr($cwd, $amount);
+ }
+ else {
+
+ $self->{'lib_locations'}->{$val} =
substr($cwd, $amount);
+ }
last;
}
}
@@ -1024,7 +1052,7 @@ sub parse_line {
}
elsif ($comp eq 'expand') {
$self->{'parsing_expand'} = 1;
- ($status, $errorString) = $self->parse_scope($ih, $comp, $name);
+ ($status, $errorString) = $self->parse_scope($ih, $comp, $name, undef);
$self->{'parsing_expand'} = undef;
}
else {
@@ -1243,7 +1271,7 @@ sub handle_scoped_unknown {
}
sub process_component_line {
- my($self, $tag, $line, $flags,
+ my($self, $tag, $line, $fh, $flags,
$grname, $current, $excarr, $comps, $count) = @_;
my $status = 1;
my $error;
@@ -1251,7 +1279,7 @@ sub process_component_line {
my @values;
## If this returns true, then we've found an assignment
- if ($self->parse_assignment($line, \@values)) {
+ if ($self->parse_assignment($line, \@values, $fh)) {
$status = $self->parse_scoped_assignment($tag, @values, $flags);
if (!$status) {
$error = 'Unknown keyword: ' . $values[1];
@@ -1413,7 +1441,7 @@ sub parse_conditional {
}
elsif ($add) {
($status, $error) = $self->process_component_line(
- $tag, $line, $flags,
+ $tag, $line, $fh, $flags,
$grname, $current,
$exclude, $comps, $count);
last if (!$status);
@@ -1461,6 +1489,10 @@ sub parse_components {
}
$$comps{$current} = [] if (!defined $$comps{$current});
+ # preserve order
+ #tie %$names, "Tie::IxHash";
+ #tie %$comps, "Tie::IxHash";
+
my $count = 0;
while(<$fh>) {
my $line = $self->preprocess_line($fh, $_);
@@ -1519,7 +1551,7 @@ sub parse_components {
}
}
else {
- ($status, $error) = $self->process_component_line($tag, $line, \%flags,
+ ($status, $error) = $self->process_component_line($tag, $line, $fh, \%flags,
\$grname, $current,
\@exclude, $comps,
\$count);
@@ -1844,7 +1876,7 @@ sub parse_define_custom {
else {
my @values;
## If this returns true, then we've found an assignment
- if ($self->parse_assignment($line, \@values)) {
+ if ($self->parse_assignment($line, \@values, $fh)) {
my($type, $name, $value) = @values;
## The 'automatic' keyword has always contained two distinct
## functions. The first is to automatically add input files of
@@ -2209,6 +2241,7 @@ sub read_template_input {
sub already_added {
my($self, $array, $name) = @_;
+ my $case_tolerant = $self->case_insensitive();
## This method expects that the file name will be unix style
$name =~ s/\\/\//g if ($self->{'convert_slashes'});
@@ -2217,8 +2250,16 @@ sub already_added {
$name =~ s/^\.\///;
my $dsname = "./$name";
+ ## Take into account file system case-insenitivity.
+ if ($case_tolerant) {
+ $name = lc($name);
+ $dsname = lc($dsname);
+ }
+
foreach my $file (@$array) {
- return 1 if ($file eq $name || $file eq $dsname);
+ my $my_file = ($case_tolerant ? lc($file) : $file);
+
+ return 1 if ($my_file eq $name || $my_file eq $dsname);
}
return 0;
@@ -2548,7 +2589,6 @@ sub add_generated_files {
## This method is called by list_default_generated. It performs the
## actual file insertion and grouping.
-
## Get the generated filenames
my @added;
foreach my $file (keys %$arr) {
@@ -3297,6 +3337,8 @@ sub list_default_generated {
if (defined $self->{$gentype}) {
## Build up the list of files
my %arr;
+ #tie %arr, "Tie::IxHash"; # preserve insertion order.
+
my $names = $self->{$gentype};
my $group;
foreach my $name (keys %$names) {
@@ -4976,7 +5018,6 @@ sub write_project {
if (!$status) {
return $status, $error;
}
-
## We don't need to pass a file name here. write_output_file()
## will determine the file name for itself.
($status, $error) = $self->write_output_file($webapp);
@@ -5011,7 +5052,22 @@ sub get_project_info {
sub get_lib_locations {
- return $_[0]->{'lib_locations'};
+ if ($_[0]->{'pid'} eq 'child') {
+ my $lib_locs;
+ for my $k (sort { substr($a, 0 , index ($a, '|')) <=>
+ substr ($b, 0, index ($b, '|')) } keys %{$_[0]->{'lib_locations'}}) {
+
+ # if we are a worker, we need to strip leading 'number|'
+ my $x = $_[0]->{'lib_locations'}->{$k};
+ $x =~ s/\d+\|//;
+
+ $lib_locs->{substr ($k, index ($k, '|') + 1)} = $x;
+ }
+ return $lib_locs
+ }
+ else {
+ return $_[0]->{'lib_locations'};
+ }
}
diff --git a/modules/RpmSpecProjectCreator.pm b/modules/RpmSpecProjectCreator.pm
index c5ab3745..1a711257 100644
--- a/modules/RpmSpecProjectCreator.pm
+++ b/modules/RpmSpecProjectCreator.pm
@@ -4,6 +4,7 @@ package RpmSpecProjectCreator;
# Description : An RPM .spec file Project Creator
# Author : Adam Mitz (OCI)
# Create Date : 11/23/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/RpmSpecWorkspaceCreator.pm b/modules/RpmSpecWorkspaceCreator.pm
index c49548fd..c5109a24 100644
--- a/modules/RpmSpecWorkspaceCreator.pm
+++ b/modules/RpmSpecWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package RpmSpecWorkspaceCreator;
# Description : An RPM .spec file Workspace Creator
# Author : Adam Mitz (OCI)
# Create Date : 11/23/2010
+# $Id$
# ************************************************************
# ************************************************************
@@ -43,6 +44,10 @@ sub documentation_info {
return '^sub get_template', '^EOT$';
}
+sub default_verbose_ordering {
+ return 1; # Warn if there are missing dependencies.
+}
+
# Called by document_template.pl
sub interpret_keyword {
my $vname = shift;
@@ -61,7 +66,7 @@ sub interpret_keyword {
sub write_and_compare_file {
my($self, $outdir, $oname, $func, @params) = @_;
&$func($self, undef, @params);
- return undef;
+ return 1;
}
sub rpmname {
@@ -275,6 +280,7 @@ Source: <%rpm_source_base("")%><%rpm_name%>.tar.gz
Name: <%rpm_name%>
Group: <%rpm_group%>
Summary: <%rpm_summary%>
+<%cond(rpm_url, URL: )%>
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Prefix: <%rpm_prefix("/usr")%>
AutoReqProv: <%rpm_autorequiresprovides("no")%>
@@ -290,6 +296,9 @@ AutoReqProv: <%rpm_autorequiresprovides("no")%>
%doc
%config
+%pre
+<%rpm_pre_cmd()%>
+
%post
<%rpm_post_cmd()%>
diff --git a/modules/SLEProjectCreator.pm b/modules/SLEProjectCreator.pm
index 2a1508be..dd9724fc 100644
--- a/modules/SLEProjectCreator.pm
+++ b/modules/SLEProjectCreator.pm
@@ -4,6 +4,7 @@ package SLEProjectCreator;
# Description : The SLE Project Creator
# Author : Johnny Willemsen
# Create Date : 3/23/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/SLEWorkspaceCreator.pm b/modules/SLEWorkspaceCreator.pm
index 52ee2691..ea553a9b 100644
--- a/modules/SLEWorkspaceCreator.pm
+++ b/modules/SLEWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package SLEWorkspaceCreator;
# Description : The SLE Workspace Creator
# Author : Johnny Willemsen
# Create Date : 3/23/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/StringProcessor.pm b/modules/StringProcessor.pm
index ac760be0..2a5e160f 100644
--- a/modules/StringProcessor.pm
+++ b/modules/StringProcessor.pm
@@ -4,6 +4,7 @@ package StringProcessor;
# Description : Perform various algorithms on strings
# Author : Chad Elliott
# Create Date : 3/07/2003
+# $Id$
# ************************************************************
# ************************************************************
@@ -21,7 +22,8 @@ sub parse_assignment {
## In MPC, a scope can have spaces in it. However, it can not end
## in a space.
- if ($line =~ /^((\w+[-\s\w]+\w::)*\w+)\s*([\-+]?=)\s*(.*)?/) {
+ ## Line may have embedded new lines, so using 's' modifier.
+ if ($line =~ /^((\w+[-\s\w]+\w::)*\w+)\s*([\-+]?=)\s*(.*)?/s) {
my $op = ($3 eq '+=' ? 1 : $3 eq '-=' ? -1 : 0);
push(@$values, $op, $self->resolve_alias(lc($1)), $4);
return 1;
diff --git a/modules/TemplateInputReader.pm b/modules/TemplateInputReader.pm
index fad1b599..73d8090b 100644
--- a/modules/TemplateInputReader.pm
+++ b/modules/TemplateInputReader.pm
@@ -4,6 +4,7 @@ package TemplateInputReader;
# Description : Reads the template input and stores the values
# Author : Chad Elliott
# Create Date : 5/16/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/TemplateParser.pm b/modules/TemplateParser.pm
index 4bfa7cbb..ed6ea26e 100644
--- a/modules/TemplateParser.pm
+++ b/modules/TemplateParser.pm
@@ -4,6 +4,7 @@ package TemplateParser;
# Description : Parses the template and fills in missing values
# Author : Chad Elliott
# Create Date : 5/17/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -103,6 +104,10 @@ my %arrow_op_ref = ('custom_type' => 'custom types',
'feature' => 'features',
);
+# optmized regex
+my $parse_line_re1 = qr/^[ ]*<%(\w+)(?:\((?:(?:\w+\s*,\s*)*[!]?\w+\(.+\)|[^\)]+)\))?%>$/;
+my $process_name_re1 = qr/([^%\(]+)(\(([^%]+)\))?%>/;
+
# ************************************************************
# Subroutine Section
# ************************************************************
@@ -309,8 +314,8 @@ sub get_value {
my $value;
my $counter = $self->{'foreach'}->{'count'};
my $fromprj;
- my $scope;
- my $sname;
+ my @scopes;
+ my @snames;
my $adjust = 1;
## $name should always be all lower-case
@@ -318,14 +323,11 @@ sub get_value {
## First, check the temporary scope (set inside a foreach)
if ($counter >= 0) {
- ## Find the outer most scope for our variable name
- for(my $index = $counter; $index >= 0; --$index) {
- if (defined $self->{'foreach'}->{'scope_name'}->[$index]) {
- $scope = $self->{'foreach'}->{'scope_name'}->[$index];
- $sname = $scope . '::' . $name;
- last;
- }
- }
+ ## Create a list of possible scoped names
+ @scopes = reverse @{$self->{'foreach'}->{'scope_name'}};
+ @snames = map { defined $_ ? $_ . '::' . $name : $name } @scopes;
+ push(@snames, $name);
+
while(!defined $value && $counter >= 0) {
$value = $self->{'foreach'}->{'temp_scope'}->[$counter]->{$name};
--$counter;
@@ -337,6 +339,9 @@ sub get_value {
$value = $self->{'values'}->{$name};
}
}
+ else {
+ @snames = ($name);
+ }
if (!defined $value) {
if ($name =~ /^flag_overrides\((.*)\)$/) {
@@ -352,8 +357,7 @@ sub get_value {
if (!defined $value) {
## Calling adjust_value here allows us to pick up template
## overrides before getting values elsewhere.
- my $uvalue = $self->{'prjc'}->adjust_value([$sname, $name],
- [], $self);
+ my $uvalue = $self->{'prjc'}->adjust_value(\@snames, [], $self);
if (defined $$uvalue[0]) {
$value = $uvalue;
$adjust = 0;
@@ -403,7 +407,7 @@ sub get_value {
## Adjust the value even if we haven't obtained one from an outside
## source.
if ($adjust && defined $value) {
- $value = $self->{'prjc'}->adjust_value([$sname, $name], $value, $self);
+ $value = $self->{'prjc'}->adjust_value(\@snames, $value, $self);
}
## If the value did not come from the project creator, we
@@ -424,7 +428,8 @@ sub get_value {
}
}
- return $self->{'prjc'}->relative($value, undef, $scope);
+ return (defined $value ?
+ $self->{'prjc'}->relative($value, undef, \@scopes) : undef);
}
@@ -1960,9 +1965,12 @@ sub prepare_parameters {
my($self, $prefix) = @_;
my $input = $self->get_value($prefix . '->input_file');
my $output;
+ my $indir;
+ my $outdir;
if (defined $input) {
$input =~ s/\//\\/g if ($self->{'cslashes'});
+ $indir = $self->tp_dirname($input);
$output = $self->get_value($prefix . '->input_file->output_files');
if (defined $output) {
@@ -1970,8 +1978,11 @@ sub prepare_parameters {
for(my $i = 0; $i < $size; ++$i) {
my $fo = $self->get_flag_overrides($prefix . '->input_file, gendir');
if (defined $fo) {
- $$output[$i] = ($fo eq '.' ? '' : $fo . '/') .
- $self->tp_basename($$output[$i]);
+ $outdir = $self->tp_dirname($$output[$i]);
+ if (!($outdir ne '' && $indir ne $outdir && $fo ne $outdir)) {
+ $$output[$i] = ($fo eq '.' ? '' : $fo . '/') .
+ $self->tp_basename($$output[$i]);
+ }
}
$$output[$i] =~ s/\//\\/g if ($self->{'cslashes'});
}
@@ -1989,7 +2000,7 @@ sub process_name {
my $errorString;
## Split the line into a name and value
- if ($line =~ /([^%\(]+)(\(([^%]+)\))?%>/) {
+ if ($line =~ /$process_name_re1/) {
my $name = lc($1);
my $val = $3;
$length += length($name);
@@ -2167,8 +2178,7 @@ sub parse_line {
## contains a keyword, then we do
## not need to add a newline to the end.
if ($self->{'foreach'}->{'processing'} == 0 && !$self->{'eval'} &&
- ($line !~ /^[ ]*<%(\w+)(?:\((?:(?:\w+\s*,\s*)*[!]?\w+\(.+\)|[^\)]+)\))?%>$/ ||
- !defined $keywords{$1})) {
+ ($line !~ /$parse_line_re1/ || !defined $keywords{$1})) {
$line .= $self->{'crlf'};
}
diff --git a/modules/VC10ProjectCreator.pm b/modules/VC10ProjectCreator.pm
index 86eca792..bd4d279a 100644
--- a/modules/VC10ProjectCreator.pm
+++ b/modules/VC10ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC10ProjectCreator;
# Description : A VC10 Project Creator
# Author : Johnny Willemsen
# Create Date : 11/10/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC10WorkspaceCreator.pm b/modules/VC10WorkspaceCreator.pm
index cfe414a1..225ce89f 100644
--- a/modules/VC10WorkspaceCreator.pm
+++ b/modules/VC10WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC10WorkspaceCreator;
# Description : A VC10 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 11/10/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC11ProjectCreator.pm b/modules/VC11ProjectCreator.pm
new file mode 100644
index 00000000..a74b9902
--- /dev/null
+++ b/modules/VC11ProjectCreator.pm
@@ -0,0 +1,57 @@
+package VC11ProjectCreator;
+
+# ************************************************************
+# Description : A VC11 Project Creator
+# Author : Johnny Willemsen
+# Create Date : 12/12/2011
+# $Id$
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+
+use VC10ProjectCreator;
+
+use vars qw(@ISA);
+@ISA = qw(VC10ProjectCreator);
+
+## NOTE: We call the constant as a function to support Perl 5.6.
+my %info = (Creator::cplusplus() => {'ext' => '.vcxproj',
+ 'dllexe' => 'vc11exe',
+ 'libexe' => 'vc11libexe',
+ 'dll' => 'vc11dll',
+ 'lib' => 'vc11lib',
+ 'template' => [ 'vc10', 'vc10filters' ],
+ },
+ );
+
+my %config = ('vcversion' => '10.00',
+ 'prversion' => '10.0.30319.1',
+ 'toolsversion' => '4.0',
+ 'targetframeworkversion' => '4.0',
+ 'xmlheader' => 1
+ );
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub get_info_hash {
+ my($self, $key) = @_;
+
+ ## If we have the setting in our information map, the use it.
+ return $info{$key} if (defined $info{$key});
+
+ ## Otherwise, see if our parent type can take care of it.
+ return $self->SUPER::get_info_hash($key);
+}
+
+sub get_configurable {
+ my($self, $name) = @_;
+ return $config{$name};
+}
+
+1;
diff --git a/modules/VC11WorkspaceCreator.pm b/modules/VC11WorkspaceCreator.pm
new file mode 100644
index 00000000..eea589e0
--- /dev/null
+++ b/modules/VC11WorkspaceCreator.pm
@@ -0,0 +1,44 @@
+package VC11WorkspaceCreator;
+
+# ************************************************************
+# Description : A VC11 Workspace Creator
+# Author : Johnny Willemsen
+# Create Date : 12/12/2011
+# $Id$
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+
+use VC11ProjectCreator;
+use VC10WorkspaceCreator;
+
+use vars qw(@ISA);
+@ISA = qw(VC10WorkspaceCreator);
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub pre_workspace {
+ my($self, $fh) = @_;
+ my $crlf = $self->crlf();
+
+ print $fh '', $crlf,
+ 'Microsoft Visual Studio Solution File, Format Version 11.00', $crlf;
+ $self->print_workspace_comment($fh,
+ '# Visual Studio 2011', $crlf,
+ '# $Id$', $crlf,
+ '#', $crlf,
+ '# This file was generated by MPC. Any changes made directly to', $crlf,
+ '# this file will be lost the next time it is generated.', $crlf,
+ '#', $crlf,
+ '# MPC Command:', $crlf,
+ '# ', $self->create_command_line_string($0, @ARGV), $crlf);
+}
+
+
+1;
diff --git a/modules/VC6ProjectCreator.pm b/modules/VC6ProjectCreator.pm
index 4a28f228..9bb75d13 100644
--- a/modules/VC6ProjectCreator.pm
+++ b/modules/VC6ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC6ProjectCreator;
# Description : A VC6 Project Creator
# Author : Chad Elliott
# Create Date : 3/14/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC6WorkspaceCreator.pm b/modules/VC6WorkspaceCreator.pm
index 3aea9b45..72d786e4 100644
--- a/modules/VC6WorkspaceCreator.pm
+++ b/modules/VC6WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC6WorkspaceCreator;
# Description : A VC6 Workspace Creator
# Author : Chad Elliott
# Create Date : 5/13/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC71ProjectCreator.pm b/modules/VC71ProjectCreator.pm
index 5c8d9e5b..a28d5c52 100644
--- a/modules/VC71ProjectCreator.pm
+++ b/modules/VC71ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC71ProjectCreator;
# Description : A VC7.1 Project Creator
# Author : Chad Elliott
# Create Date : 4/17/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC71WorkspaceCreator.pm b/modules/VC71WorkspaceCreator.pm
index 0c9ecdad..e1671692 100644
--- a/modules/VC71WorkspaceCreator.pm
+++ b/modules/VC71WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC71WorkspaceCreator;
# Description : A VC7.1 Workspace Creator
# Author : Chad Elliott
# Create Date : 4/17/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC7ProjectCreator.pm b/modules/VC7ProjectCreator.pm
index b8bf562b..85975179 100644
--- a/modules/VC7ProjectCreator.pm
+++ b/modules/VC7ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC7ProjectCreator;
# Description : A VC7 Project Creator
# Author : Chad Elliott
# Create Date : 4/23/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -108,7 +109,7 @@ sub fill_value {
}
## Consult another method for this template name. This method is
- ## overrridden by the other project creators that inherit from this
+ ## overridden by the other project creators that inherit from this
## one.
return $self->get_configurable($name);
}
diff --git a/modules/VC7WorkspaceCreator.pm b/modules/VC7WorkspaceCreator.pm
index 19920390..563d8b03 100644
--- a/modules/VC7WorkspaceCreator.pm
+++ b/modules/VC7WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC7WorkspaceCreator;
# Description : A VC7 Workspace Creator
# Author : Chad Elliott
# Create Date : 5/14/2002
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC8ProjectCreator.pm b/modules/VC8ProjectCreator.pm
index 3f9d06d8..42c0542e 100644
--- a/modules/VC8ProjectCreator.pm
+++ b/modules/VC8ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC8ProjectCreator;
# Description : A VC8 Project Creator
# Author : Johnny Willemsen
# Create Date : 4/21/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC8WorkspaceCreator.pm b/modules/VC8WorkspaceCreator.pm
index 3003f256..f8404553 100644
--- a/modules/VC8WorkspaceCreator.pm
+++ b/modules/VC8WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC8WorkspaceCreator;
# Description : A VC8 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 4/21/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC9ProjectCreator.pm b/modules/VC9ProjectCreator.pm
index 8a66ba41..b4edf926 100644
--- a/modules/VC9ProjectCreator.pm
+++ b/modules/VC9ProjectCreator.pm
@@ -4,6 +4,7 @@ package VC9ProjectCreator;
# Description : A VC9 Project Creator
# Author : Johnny Willemsen
# Create Date : 11/22/2007
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VC9WorkspaceCreator.pm b/modules/VC9WorkspaceCreator.pm
index 133b2af7..53bf80bb 100644
--- a/modules/VC9WorkspaceCreator.pm
+++ b/modules/VC9WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package VC9WorkspaceCreator;
# Description : A VC9 Workspace Creator
# Author : Johnny Willemsen
# Create Date : 11/22/2007
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VCProjectBase.pm b/modules/VCProjectBase.pm
index 01b6005d..6a350898 100644
--- a/modules/VCProjectBase.pm
+++ b/modules/VCProjectBase.pm
@@ -4,6 +4,7 @@ package VCProjectBase;
# Description : A VC Project base module
# Author : Chad Elliott
# Create Date : 1/4/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/VCPropertyBase.pm b/modules/VCPropertyBase.pm
index f52517b7..99d03ccd 100644
--- a/modules/VCPropertyBase.pm
+++ b/modules/VCPropertyBase.pm
@@ -4,6 +4,7 @@ package VCPropertyBase;
# Description : A VC property base module
# Author : Chad Elliott
# Create Date : 3/9/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/Version.pm b/modules/Version.pm
index e1a0f3bb..e1f30b80 100644
--- a/modules/Version.pm
+++ b/modules/Version.pm
@@ -4,6 +4,7 @@ package Version;
# Description : Central location for the MPC version.
# Author : Chad Elliott
# Create Date : 1/5/2003
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WB26ProjectCreator.pm b/modules/WB26ProjectCreator.pm
index 2a59f050..2af44c39 100644
--- a/modules/WB26ProjectCreator.pm
+++ b/modules/WB26ProjectCreator.pm
@@ -4,6 +4,7 @@ package WB26ProjectCreator;
# Description : Workbench 2.6 / VxWorks 6.4 generator
# Author : Johnny Willemsen
# Create Date : 07/01/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WB26WorkspaceCreator.pm b/modules/WB26WorkspaceCreator.pm
index 3d2cb4ef..a8638c80 100644
--- a/modules/WB26WorkspaceCreator.pm
+++ b/modules/WB26WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package WB26WorkspaceCreator;
# Description : Workbench 2.6 / VxWorks 6.4 generator
# Author : Johnny Willemsen
# Create Date : 07/01/2008
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WB30ProjectCreator.pm b/modules/WB30ProjectCreator.pm
index 4a64382f..5879c7f2 100644
--- a/modules/WB30ProjectCreator.pm
+++ b/modules/WB30ProjectCreator.pm
@@ -4,6 +4,7 @@ package WB30ProjectCreator;
# Description : Wind River Workbench 3.0 generator
# Author : Adam Mitz (Object Computing, Inc.)
# Create Date : 07/21/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WB30WorkspaceCreator.pm b/modules/WB30WorkspaceCreator.pm
index 00a4a449..4036671d 100644
--- a/modules/WB30WorkspaceCreator.pm
+++ b/modules/WB30WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package WB30WorkspaceCreator;
# Description : Wind River Workbench 3.0 generator
# Author : Adam Mitz (Object Computing, Inc.)
# Create Date : 07/21/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WinProjectBase.pm b/modules/WinProjectBase.pm
index 77a83f8c..9e8fd788 100644
--- a/modules/WinProjectBase.pm
+++ b/modules/WinProjectBase.pm
@@ -4,6 +4,7 @@ package WinProjectBase;
# Description : A Windows base module for Project Creators
# Author : Chad Elliott
# Create Date : 1/4/2005
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WinPropertyBase.pm b/modules/WinPropertyBase.pm
index 6ab45331..15975cbe 100644
--- a/modules/WinPropertyBase.pm
+++ b/modules/WinPropertyBase.pm
@@ -4,6 +4,7 @@ package WinPropertyBase;
# Description : A Windows base module for properties
# Author : Chad Elliott
# Create Date : 3/9/2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WinVersionTranslator.pm b/modules/WinVersionTranslator.pm
index ff82a7d2..dded2016 100644
--- a/modules/WinVersionTranslator.pm
+++ b/modules/WinVersionTranslator.pm
@@ -14,6 +14,7 @@ package WinVersionTranslator;
#
# Author : Chad Elliott
# Create Date : 10/7/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WinWorkspaceBase.pm b/modules/WinWorkspaceBase.pm
index 9189d9c7..12482b75 100644
--- a/modules/WinWorkspaceBase.pm
+++ b/modules/WinWorkspaceBase.pm
@@ -4,6 +4,7 @@ package WinWorkspaceBase;
# Description : A Windows base module for Workspace Creators
# Author : Chad Elliott
# Create Date : 2/26/2007
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WixProjectCreator.pm b/modules/WixProjectCreator.pm
index 10b9ce7c..5afde1a4 100644
--- a/modules/WixProjectCreator.pm
+++ b/modules/WixProjectCreator.pm
@@ -3,6 +3,7 @@ package WixProjectCreator;
# ************************************************************
# Description : A Wix Project Creator
# Author : James H. Hill / Charles Calkins
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WixWorkspaceCreator.pm b/modules/WixWorkspaceCreator.pm
index 9d3fff0d..5a91f6b9 100644
--- a/modules/WixWorkspaceCreator.pm
+++ b/modules/WixWorkspaceCreator.pm
@@ -4,6 +4,7 @@ package WixWorkspaceCreator;
# Description : A Wix Workspace creator
# Author : James H. Hill
# Create Date : 6/23/2009
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/WorkspaceCreator.pm b/modules/WorkspaceCreator.pm
index f0fd5239..b60169b6 100644
--- a/modules/WorkspaceCreator.pm
+++ b/modules/WorkspaceCreator.pm
@@ -4,6 +4,7 @@ package WorkspaceCreator;
# Description : Base class for all workspace creators
# Author : Chad Elliott
# Create Date : 5/13/2002
+# $Id$
# ************************************************************
# ************************************************************
@@ -18,6 +19,9 @@ use Creator;
use Options;
use WorkspaceHelper;
+use IO::Socket;
+use Data::Dumper;
+
use vars qw(@ISA);
@ISA = qw(Creator Options);
@@ -25,6 +29,11 @@ use vars qw(@ISA);
# Data Section
# ************************************************************
+## process stuff
+our $num_workers = 0; # single-process
+our $wdir; # tmp directory
+our $wport;
+
my $wsext = 'mwc';
my $wsbase = 'mwb';
@@ -51,7 +60,14 @@ my $onVMS = DirectoryManager::onVMS();
# ************************************************************
sub new {
- my($class, $global, $inc, $template, $ti, $dynamic, $static, $relative, $addtemp, $addproj, $progress, $toplevel, $baseprojs, $gfeature, $relative_f, $feature, $features, $hierarchy, $exclude, $makeco, $nmod, $applypj, $genins, $into, $language, $use_env, $expandvars, $gendot, $comments, $foreclipse) = @_;
+ my($class, $global, $inc, $template, $ti, $dynamic,
+ $static, $relative, $addtemp, $addproj, $progress,
+ $toplevel, $baseprojs, $gfeature, $relative_f, $feature,
+ $features, $hierarchy, $exclude, $makeco, $nmod, $applypj,
+ $genins, $into, $language, $use_env, $expandvars, $gendot,
+ $comments, $foreclipse, $workers, $workers_dir,
+ $workers_port) = @_;
+
my $self = Creator::new($class, $global, $inc,
$template, $ti, $dynamic, $static,
$relative, $addtemp, $addproj,
@@ -61,6 +77,12 @@ sub new {
$into, $language, $use_env, $expandvars,
'workspace');
+ $self->{'pid'} = 'parent';
+
+ # implicit dependency order counter. this is
+ # incremented in the children.
+ $self->{'imp_dep_ctr'} = 0;
+
## These need to be reset at the end of each
## workspace processed within a .mwc file
$self->{'workspace_name'} = undef;
@@ -77,7 +99,7 @@ sub new {
## These are maintained/modified throughout processing
$self->{$self->{'type_check'}} = 0;
- $self->{'cacheok'} = 1;
+ $self->{'cacheok'} = $self->default_cacheok();
$self->{'lib_locations'} = {};
$self->{'reading_parent'} = [];
$self->{'global_feature_file'} = $gfeature;
@@ -91,9 +113,10 @@ sub new {
## These are static throughout processing
$self->{'coexistence'} = $self->requires_make_coexistence() ? 1 : $makeco;
$self->{'for_eclipse'} = $foreclipse;
+ $self->{'workers'} = $workers;
$self->{'generate_dot'} = $gendot;
$self->{'generate_ins'} = $genins;
- $self->{'verbose_ordering'} = undef;
+ $self->{'verbose_ordering'} = $self->default_verbose_ordering();
$self->{'wctype'} = $self->extractType("$self");
$self->{'workspace_comments'} = $comments;
@@ -123,10 +146,20 @@ sub new {
$self->warning("Using the -make_coexistence option has " .
"no effect on the " . $self->{'wctype'} . " type.");
}
+
+ ## multi-process config
+ $num_workers = $workers if $workers > $num_workers;
+ $wdir = $workers_dir;
+ $wport = $workers_port;
+
return $self;
}
+sub default_cacheok {
+ return 1;
+}
+
sub set_verbose_ordering {
my($self, $value) = @_;
$self->{'verbose_ordering'} = $value;
@@ -141,7 +174,7 @@ sub modify_assignment_value {
sub parse_line {
my($self, $ih, $line, $flags) = @_;
- my($status, $error, @values) = $self->parse_known($line);
+ my($status, $error, @values) = $self->parse_known($line, $ih);
## Was the line recognized?
if ($status && defined $values[0]) {
@@ -154,8 +187,69 @@ sub parse_line {
## End of workspace; Have subclass write out the file
## Generate the project files
- my($gstat, $creator, $err) = $self->generate_project_files();
+ my($gstat, $creator, $err);
+ if ($num_workers > 0) {
+ if (!defined ($wport)) {
+ ## use temp files for multiprocess mpc
+ ## Lock the temp directory before generating project files.
+ my $lock = 'mpc-worker.lock';
+
+ ## check for valid temp directory
+ if (!$wdir) {
+ if ($^O eq 'MSWin32') {
+ $wdir = $ENV{TEMP};
+ }
+ else {
+ $wdir = '/tmp/mpc';
+ }
+ }
+
+ ## shouldn't happen
+ if (!$wdir) {
+ die "Error: No temporary directory found. Supply one with \"-worker_dir\" option.\n";
+ }
+
+ $self->diagnostic("Multiprocess MPC using \"$wdir\" for temporary files.");
+
+ unless (-d $wdir) {
+ mkdir $wdir || die "Error: Can't find or create directory $wdir\n"
+ }
+
+ ## lock the directory
+ if (-e "$wdir/$lock") {
+ die "Error: Another instance of MPC is using $wdir, or a previous session failed to remove the lock file $lock\n";
+ }
+ else {
+ open (FDL, ">$wdir/$lock") || die "Error reating lock file $lock in $wdir\n";
+ print FDL "File generated by MPC process ", $$, " on ", scalar (localtime(time())), "\n";
+ close FDL;
+
+ $self->diagnostic("Multiprocess MPC created lock file $wdir/$lock");
+ }
+
+ ## generate the project files
+ ($gstat, $creator, $err) = $self->generate_project_files_fork();
+
+ ## Release temp directory lock;
+ if (!unlink("$wdir/$lock")) {
+ $self->error("Multiprocess MPC unable to remove lock file $wdir/$lock");
+ }
+ else {
+ $self->diagnostic("Multiprocess MPC removed $wdir/$lock");
+ }
+
+ }
+ else {
+ ## Socket-based Multiprocess MPC
+ ($gstat, $creator, $err) =
+ $self->generate_project_files_fork_socket();
+ }
+ }
+ else {
+ ($gstat, $creator, $err) = $self->generate_project_files();
+ }
if ($gstat) {
+ #exit(1);
($status, $error) = $self->write_workspace($creator, 1);
$self->{'assign'} = {};
}
@@ -180,7 +274,7 @@ sub parse_line {
}
else {
## Workspace Beginning
- ## Deal with the inheritance hiearchy first
+ ## Deal with the inheritance hierarchy first
if (defined $values[2]) {
foreach my $parent (@{$values[2]}) {
## Read in the parent onto ourself
@@ -208,7 +302,7 @@ sub parse_line {
if ($name =~ /[\/\\]/) {
$status = 0;
$error = 'Workspaces can not have a slash ' .
- 'or a back slash in the name';
+ 'or a back slash in the name';
}
else {
$name =~ s/^\(\s*//;
@@ -217,8 +311,7 @@ sub parse_line {
## Replace any *'s with the default name
if (index($name, '*') >= 0) {
$name = $self->fill_type_name(
- $name,
- $self->get_default_workspace_name());
+ $name, $self->get_default_workspace_name());
}
$self->{'workspace_name'} = $name;
@@ -278,7 +371,7 @@ sub parse_line {
$line = $self->relative($line) if (index($line, '$') >= 0);
foreach my $expfile ($line =~ /[\?\*\[\]]/ ? $self->mpc_glob($line) :
- $line) {
+ $line) {
if ($expfile =~ /\.$wsext$/) {
my %copy = %{defined $flags ? $flags : $self->get_assignment_hash()};
($status, $error) = $self->aggregated_workspace($expfile, \%copy);
@@ -319,9 +412,9 @@ sub aggregated_workspace {
## not match up with itself later on where scoped_basedir is used.
$self->{'scoped_basedir'} = undef if ($self->{'scoped_basedir'} eq '.');
- while(<$fh>) {
+ while (<$fh>) {
my $line = $self->preprocess_line($fh, $_);
- ($status, $error, @values) = $self->parse_known($line);
+ ($status, $error, @values) = $self->parse_known($line, $fh);
## Was the line recognized?
if ($status) {
@@ -332,7 +425,7 @@ sub aggregated_workspace {
$name =~ s/\.[^\.]+$//;
$status = 0;
$error = 'Aggregated workspace (' . $name .
- ') can not inherit from another workspace';
+ ') can not inherit from another workspace';
}
else {
($status, $error) = $self->parse_scope($fh,
@@ -357,7 +450,7 @@ sub aggregated_workspace {
if ($status) {
$self->{'aggregated_assign'}->{$file} =
- $self->clone($self->get_assignment_hash());
+ $self->clone($self->get_assignment_hash());
$self->{'assign'} = $prev_assign;
}
@@ -446,7 +539,7 @@ sub process_types {
## Remove all negated types from the collection.
foreach my $key (keys %types) {
if ($key =~ /^!\s*(\w+)/) {
- if ($1 == $self->{wctype}) {
+ if ($1 eq $self->{wctype}) {
## Remove the negated key
delete $types{$key};
@@ -469,7 +562,7 @@ sub parse_exclude {
my @exclude;
if (exists $$types{$self->{wctype}}) {
- while(<$fh>) {
+ while (<$fh>) {
my $line = $self->preprocess_line($fh, $_);
if ($line eq '') {
@@ -490,7 +583,7 @@ sub parse_exclude {
if ($line =~ /^(\w+)\s*(\([^\)]+\))?\s*{$/) {
++$count;
}
- elsif ($self->parse_assignment($line, [])) {
+ elsif ($self->parse_assignment($line, [], $fh)) {
## Ignore all assignments
}
else {
@@ -535,7 +628,7 @@ sub parse_exclude {
## If this exclude block didn't match the current type and the
## exclude wasn't negated, we need to eat the exclude block so that
## these lines don't get included into the workspace.
- while(<$fh>) {
+ while (<$fh>) {
my $line = $self->preprocess_line($fh, $_);
if ($line =~ /^(\w+)\s*(\([^\)]+\))?\s*{$/) {
@@ -572,7 +665,7 @@ sub parse_associate {
$self->{'associated'}->{$assoc_key} = {};
}
- while(<$fh>) {
+ while (<$fh>) {
my $line = $self->preprocess_line($fh, $_);
if ($line eq '') {
@@ -593,9 +686,9 @@ sub parse_associate {
if ($line =~ /^(\w+)\s*(\([^\)]+\))?\s*{$/) {
++$count;
}
- elsif ($self->parse_assignment($line, [])) {
+ elsif ($self->parse_assignment($line, [], $fh)) {
$errorString = 'Assignments are not ' .
- 'allowed within an associate scope';
+ 'allowed within an associate scope';
last;
}
else {
@@ -726,7 +819,23 @@ sub handle_scoped_unknown {
}
elsif (defined $self->{'scoped_basedir'}) {
if ($self->path_is_relative($line)) {
- $line = $self->{'scoped_basedir'} . ($line ne '.' ? "/$line" : '');
+ if ($line eq '.') {
+ $line = $self->{'scoped_basedir'};
+ }
+ else {
+ ## This is a relative path and the project may have been added
+ ## previously without a relative path. We need to convert the
+ ## relative path into an absolute path and, if possible, remove
+ ## the current working directory from the front. This will get
+ ## it down to a path that's relative to the current directory and
+ ## likely to match up with the addition of this file or directory
+ ## from an upper workspace.
+ my $cwd = $self->getcwd();
+ $line = Cwd::abs_path($self->{'scoped_basedir'} . "/$line");
+ if (index($line, $cwd) == 0) {
+ $line = substr($line, length($cwd) + 1);
+ }
+ }
}
}
@@ -763,7 +872,7 @@ sub handle_scoped_unknown {
do {
$exc = $self->mpc_dirname($exc);
$remove{$exc} = 1;
- } while($exc ne '.' && $exc !~ /[a-z]:[\/\\]/i);
+ } while ($exc ne '.' && $exc !~ /[a-z]:[\/\\]/i);
}
}
@@ -780,7 +889,7 @@ sub handle_scoped_unknown {
}
else {
foreach my $expfile ($line =~ /[\?\*\[\]]/ ? $self->mpc_glob($line) :
- $line) {
+ $line) {
if ($expfile =~ /\.$wsext$/) {
## An aggregated workspace within an aggregated workspace or scope.
($status, $error) = $self->aggregated_workspace($expfile, $flags);
@@ -821,9 +930,9 @@ sub search_for_files {
foreach my $file (@$files) {
if (-d $file) {
my @f = $self->generate_default_file_list(
- $file,
- $self->{'exclude'}->{$self->{'wctype'}},
- \$excluded);
+ $file,
+ $self->{'exclude'}->{$self->{'wctype'}},
+ \$excluded);
$self->search_for_files(\@f, $array, $impl);
if ($impl) {
$file =~ s/^\.\///;
@@ -852,7 +961,7 @@ sub remove_duplicate_projects {
my($self, $list) = @_;
my $count = scalar(@$list);
- for(my $i = 0; $i < $count; ++$i) {
+ for (my $i = 0; $i < $count; ++$i) {
my $file = $$list[$i];
foreach my $inner (@$list) {
if ($file ne $inner &&
@@ -879,8 +988,8 @@ sub generate_default_components {
if (-d $file) {
my @found;
my @gen = $self->generate_default_file_list(
- $file,
- $self->{'exclude'}->{$self->{'wctype'}});
+ $file,
+ $self->{'exclude'}->{$self->{'wctype'}});
$self->search_for_files(\@gen, \@found, $impl);
push(@built, @found);
if ($impl || $self->{'scoped_assign'}->{$file}->{'implicit'}) {
@@ -960,9 +1069,9 @@ sub generate_defaults {
my $excluded = 0;
my @files = $self->generate_default_file_list(
- '.',
- $self->{'exclude'}->{$self->{'wctype'}},
- \$excluded);
+ '.',
+ $self->{'exclude'}->{$self->{'wctype'}},
+ \$excluded);
## Generate default components
$self->generate_default_components(\@files,
@@ -989,7 +1098,8 @@ sub get_current_output_name {
sub write_and_compare_file {
my($self, $outdir, $oname, $func, @params) = @_;
my $fh = new FileHandle();
- my $error = undef;
+ my $status = 1;
+ my $errorString = undef;
## Set the output directory if one wasn't provided
$outdir = $self->get_outdir() if (!defined $outdir);
@@ -1011,19 +1121,24 @@ sub write_and_compare_file {
my $tmp = "$outdir/MWC$>.$$";
my $different = 1;
if (open($fh, ">$tmp")) {
- &$func($self, $fh, @params);
+ ($status, $errorString) = &$func($self, $fh, @params);
close($fh);
- $different = 0 if (!$self->files_are_different($name, $tmp));
+ $different = 0 if ($status && !$self->files_are_different($name, $tmp));
}
else {
- $error = "Unable to open $tmp for output.";
+ $status = 0;
+ $errorString = "Unable to open $tmp for output.";
}
- if (!defined $error) {
+ if ($status) {
if ($different) {
unlink($name);
- $error = "Unable to open $name for output" if (!rename($tmp, $name));
+
+ if (!rename($tmp, $name)) {
+ $status = 0;
+ $errorString = "Unable to open $name for output";
+ }
}
else {
## There is no need to rename, so remove our temp file.
@@ -1037,20 +1152,23 @@ sub write_and_compare_file {
close($fh);
}
else {
- $error = "Unable to open $name for output.";
+ $status = 0;
+ $errorString = "Unable to open $name for output.";
}
}
- return $error;
+ return $status, $errorString;
}
sub write_workspace {
+
my($self, $creator, $addfile) = @_;
my $status = 1;
- my $error;
+ my $errorString;
my $duplicates = 0;
if ($self->get_toplevel()) {
+
## There is usually a progress indicator callback provided, but if
## the output is being redirected, there will be no progress
## indicator.
@@ -1058,6 +1176,7 @@ sub write_workspace {
&$progress() if (defined $progress);
if ($addfile) {
+
## To be consistent across multiple project types, we disallow
## duplicate project names for all types, not just VC6.
## Note that these name are handled case-insensitive by VC6
@@ -1085,8 +1204,8 @@ sub write_workspace {
my $abort_creation = 0;
if ($duplicates > 0) {
$abort_creation = 1;
- $error = "Duplicate case-insensitive project names are " .
- "not allowed within a workspace.";
+ $errorString = "Duplicate case-insensitive project names are " .
+ "not allowed within a workspace.";
$status = 0;
}
else {
@@ -1103,31 +1222,29 @@ sub write_workspace {
}
if ($addfile || !$self->file_written($name)) {
- $error = $self->write_and_compare_file(
- undef, $name,
- sub {
- my($self, $fh) = @_;
- $self->pre_workspace($fh, $creator, $addfile);
- $self->write_comps($fh, $creator, $addfile);
-
- my $wsHelper = WorkspaceHelper::get($self);
- $wsHelper->perform_custom_processing($fh, $creator, $addfile);
-
- $self->post_workspace($fh, $creator, $addfile);
- });
- if (defined $error) {
- $status = 0;
- }
- else {
- $self->add_file_written($name) if ($addfile);
- }
+ ($status, $errorString) = $self->write_and_compare_file(
+ undef, $name,
+ sub {
+ my($self, $fh) = @_;
+ $self->pre_workspace($fh, $creator, $addfile);
+ my($status, $errorString) = $self->write_comps($fh, $creator, $addfile);
+ ## If write_comps() does't return a status, set status to true.
+ $status = 1 if (!defined $status || $status eq "");
+ if ($status) {
+ my $wsHelper = WorkspaceHelper::get($self);
+ $wsHelper->perform_custom_processing($fh, $creator, $addfile);
+
+ $self->post_workspace($fh, $creator, $addfile);
+ }
+ return $status, $errorString;
+ });
+ $self->add_file_written($name) if ($status && $addfile);
}
my $additional = $self->get_additional_output();
foreach my $entry (@$additional) {
- $error = $self->write_and_compare_file(@$entry);
- if (defined $error) {
- $status = 0;
+ ($status, $errorString) = $self->write_and_compare_file(@$entry);
+ if (!$status) {
last;
}
}
@@ -1146,8 +1263,8 @@ sub write_workspace {
my $pname = $self->{'project_info'}->{$project}->[ProjectCreator::PROJECT_NAME];
foreach my $number (@{$targnum{$project}}) {
print $dh " $pname -> ",
- $self->{'project_info'}->{$list[$number]}->[ProjectCreator::PROJECT_NAME],
- ";\n";
+ $self->{'project_info'}->{$list[$number]}->[ProjectCreator::PROJECT_NAME],
+ ";\n";
}
}
}
@@ -1163,7 +1280,7 @@ sub write_workspace {
$self->{'per_project_workspace_name'} = undef if (!$addfile);
}
- return $status, $error;
+ return $status, $errorString;
}
@@ -1193,10 +1310,9 @@ sub topname {
my($self, $file) = @_;
my $dir = '.';
my $rest = $file;
- if ($file =~ /^([^\/\\]+)[\/\\](.*)/) {
+ if ($file =~ /^([^\/\\]+)[\/\\](.*)/ && $1 !~ /^[a-z]:$/i) {
$dir = $1;
$rest = $2;
- $dir .= '/' if ($dir =~ /^[a-z]:$/i);
}
return $dir, $rest;
}
@@ -1208,6 +1324,8 @@ sub generate_hierarchy {
my @saved;
my %sinfo;
my $cwd = $self->getcwd();
+ my $status = 1;
+ my $errorString;
## Make a copy of these. We will be modifying them.
## It is necessary to sort the projects to get the correct ordering.
@@ -1229,15 +1347,14 @@ sub generate_hierarchy {
if ($current ne '.') {
## Write out the hierachical workspace
$self->cd($current);
- $self->generate_hierarchy($creator, \@saved, \%sinfo);
+ ($status, $errorString) = $self->generate_hierarchy($creator, \@saved, \%sinfo);
$self->{'projects'} = \@saved;
$self->{'project_info'} = \%sinfo;
$self->{'workspace_name'} = $self->base_directory();
+ ($status, $errorString) = $self->write_workspace($creator) if ($status);
- my($status, $error) = $self->write_workspace($creator);
- $self->error($error) if (!$status);
-
+ last if !$status;
$self->cd($cwd);
}
@@ -1252,21 +1369,20 @@ sub generate_hierarchy {
$sinfo{$rest} = $projinfo{$prj};
}
}
- if (defined $current && $current ne '.') {
+ if ($status && defined $current && $current ne '.') {
$self->cd($current);
- $self->generate_hierarchy($creator, \@saved, \%sinfo);
+ ($status, $errorString) = $self->generate_hierarchy($creator, \@saved, \%sinfo);
$self->{'projects'} = \@saved;
$self->{'project_info'} = \%sinfo;
$self->{'workspace_name'} = $self->base_directory();
-
- my($status, $error) = $self->write_workspace($creator);
- $self->error($error) if (!$status);
+ ($status, $errorString) = $self->write_workspace($creator) if ($status);
$self->cd($cwd);
}
-}
+ return $status, $errorString;
+}
sub generate_project_files {
my $self = shift;
@@ -1278,11 +1394,14 @@ sub generate_project_files {
my $cwd = $self->getcwd();
my $impl = $self->get_assignment('implicit');
my $postkey = $creator->get_dynamic() .
- $creator->get_static() . "-$self";
+ $creator->get_static() . "-$self";
my $previmpl = $impl;
my $prevcache = $self->{'cacheok'};
my %gstate = $creator->save_state();
my $genimpdep = $self->generate_implicit_project_dependencies();
+ my $errorString;
+
+ $Data::Dumper::Indent = 0;
## Save this project creator setting for later use in the
## number_target_deps() method.
@@ -1342,7 +1461,7 @@ sub generate_project_files {
## Generate the key for this project file
my $prkey = $self->getcwd() . '/' .
- ($file eq '' ? $dir : $file) . "-$postkey";
+ ($file eq '' ? $dir : $file) . "-$postkey";
## We must change to the subdirectory for
## which this project file is intended
@@ -1354,10 +1473,11 @@ sub generate_project_files {
$files_written = $allprojects{$prkey};
$gen_proj_info = $allprinfo{$prkey};
$gen_lib_locs = $allliblocs{$prkey};
+
$status = 1;
}
else {
- $status = $creator->generate($self->mpc_basename($file));
+ $status = $creator->generate($self->mpc_basename($file));
## If any one project file fails, then stop
## processing altogether.
@@ -1365,7 +1485,7 @@ sub generate_project_files {
## We don't restore the state before we leave,
## but that's ok since we will be exiting right now.
return $status, $creator,
- "Unable to process " . ($file eq '' ? " in $dir" : $file);
+ "Unable to process " . ($file eq '' ? " in $dir" : $file);
}
## Get the individual project information and
@@ -1405,6 +1525,318 @@ sub generate_project_files {
## This one was excluded, so status is ok
$status = 1;
}
+
+ }
+
+ ## Add implict project dependencies based on source files
+ ## that have been used by multiple projects. If we do it here
+ ## before we call generate_hierarchy(), we don't have to call it
+ ## in generate_hierarchy() for each workspace.
+ $self->{'projects'} = \@projects;
+ $self->{'project_info'} = \%pi;
+
+ if ($status && $genimpdep) {
+ $self->add_implicit_project_dependencies($creator, $cwd);
+ }
+
+ ## If we are generating the hierarchical workspaces, then do so
+ $self->{'lib_locations'} = \%liblocs;
+ if ($self->get_hierarchy() || $self->workspace_per_project()) {
+ my $orig = $self->{'workspace_name'};
+ ($status, $errorString) = $self->generate_hierarchy($creator, \@projects, \%pi);
+ $self->{'workspace_name'} = $orig;
+ }
+
+ ## Reset the projects and project_info
+ $self->{'projects'} = \@projects;
+ $self->{'project_info'} = \%pi;
+
+ return $status, $creator, $errorString;
+}
+
+sub generate_project_files_fork {
+ my $self = shift;
+ my $status = (scalar @{$self->{'project_files'}} == 0 ? 1 : 0);
+
+ my @projects;
+ my %pi;
+ my %liblocs;
+
+ my $creator = $self->project_creator('child');
+ my $cwd = $self->getcwd();
+ my $impl = $self->get_assignment('implicit');
+ my $postkey = $creator->get_dynamic() .
+ $creator->get_static() . "-$self";
+ my $previmpl = $impl;
+ my $prevcache = $self->{'cacheok'};
+ my %gstate = $creator->save_state();
+ my $genimpdep = $self->generate_implicit_project_dependencies();
+ my $errorString;
+
+ my @save;
+ my $VAR1;
+ $Data::Dumper::Indent = 0;
+
+ ## Save this project creator setting for later use in the
+ ## number_target_deps() method.
+ $self->{'dependency_is_filename'} = $creator->dependency_is_filename();
+
+ ## Remove the address portion of the $self string
+ $postkey =~ s/=.*//;
+
+ ## Set the source file callback on our project creator
+ $creator->set_source_listing_callback([\&source_listing_callback, $self]);
+
+ my $pid;
+ my @pids;
+ my $tmp = 'mpctmp00000000';
+
+ ## remove old temp files
+ my @tmpfiles = glob "${wdir}/mpctmp*";
+ for my $file (@tmpfiles) {
+ unlink $file || die "Error: Unable to delete tmp file $file in directory $wdir";
+ }
+
+ my $num_tmp_files = scalar (@tmpfiles);
+
+ $self->diagnostic("Multiprocess MPC removed $num_tmp_files existing files like \"mpctmp\*\" in $wdir.");
+
+ foreach my $ofile (@{$self->{'project_files'}}) {
+ if ($#pids + 1 >= $num_workers) {
+ waitpid(shift @pids, 0);
+ }
+
+ ++$tmp;
+
+ ## open the output file in parent so it can die if there's an error
+ open (FD, ">${wdir}/$tmp") || die "Can't open $tmp for write";
+
+ $pid = fork();
+ if ($pid != 0) {
+ push @pids, $pid;
+ }
+ else {
+ $self->{'pid'} = 'child';
+
+ if (!$self->excluded($ofile)) {
+ my $file = $ofile;
+ my $dir = $self->mpc_dirname($file);
+ my $restore = 0;
+
+ if (defined $self->{'scoped_assign'}->{$ofile}) {
+ ## Handle the implicit assignment
+ my $oi = $self->{'scoped_assign'}->{$ofile}->{'implicit'};
+ if (defined $oi) {
+ $previmpl = $impl;
+ $impl = $oi;
+ }
+
+ ## Handle the cmdline assignment
+ my $cmdline = $self->{'scoped_assign'}->{$ofile}->{'cmdline'};
+ if (defined $cmdline && $cmdline ne '') {
+ ## Save the cacheok value
+ $prevcache = $self->{'cacheok'};
+
+ ## Get the current parameters and process the command line
+ my %parameters = $self->current_parameters();
+ $self->process_cmdline($cmdline, \%parameters);
+
+ ## Set the parameters on the creator
+ $creator->restore_state(\%parameters);
+ $restore = 1;
+ }
+ }
+
+ ## If we are generating implicit projects and the file is a
+ ## directory, then we set the dir to the file and empty the file
+ if ($impl && -d $file) {
+ $dir = $file;
+ $file = '';
+
+ ## If the implicit assignment value was not a number, then
+ ## we will add this value to our base projects.
+ if ($impl !~ /^\d+$/) {
+ my $bps = $creator->get_baseprojs();
+ push(@$bps, split(/\s+/, $impl));
+ $restore = 1;
+ $self->{'cacheok'} = 0;
+ }
+ }
+
+ ## Generate the key for this project file
+ my $prkey = $self->getcwd() . '/' .
+ ($file eq '' ? $dir : $file) . "-$postkey";
+
+ ## We must change to the subdirectory for
+ ## which this project file is intended
+
+ if ($self->cd($dir)) {
+ my $files_written = [];
+ my $gen_proj_info = [];
+ my $gen_lib_locs = {};
+
+ if ($self->{'cacheok'} && defined $allprojects{$prkey}) {
+ $files_written = $allprojects{$prkey};
+ $gen_proj_info = $allprinfo{$prkey};
+ $gen_lib_locs = $allliblocs{$prkey};
+
+ $status = 1;
+ }
+ else {
+ $status = $creator->generate($self->mpc_basename($file));
+
+ ## If any one project file fails, then stop
+ ## processing altogether.
+ if (!$status) {
+ # save the status info and exit. the parent will
+ # see the error.
+ print FD "$status|Unable to process " .
+ ($file eq '' ? " in $dir" : $file) . "\n";
+
+ exit(1); # child error
+ }
+
+ ## Get the individual project information and
+ ## generated file name(s)
+ $files_written = $creator->get_files_written();
+ $gen_proj_info = $creator->get_project_info();
+ $gen_lib_locs = $creator->get_lib_locations();
+
+ }
+
+
+ print FD "$status|''|$self->{'cacheok'}|$previmpl|$prevcache\n";
+ print FD "$ofile|$prkey|$dir|$cwd|$restore\n";
+
+ print FD Dumper ($files_written), "\n";
+ print FD Dumper ($gen_proj_info), "\n";
+ print FD Dumper ($gen_lib_locs), "\n";
+
+ # there's a callback that sets the project file list
+ # since we can't callback between processes we store
+ # the list for later
+ print FD Dumper ($self->{'project_file_list'}), "\n";
+
+ }
+ else {
+ ## Unable to change to the directory.
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting soon.
+ print FD "$status|Unable to change directory to $dir\n";
+
+ exit (1); # child error
+ }
+
+ }
+ else {
+ ## This one was excluded, so status is ok
+ ## no need to set though since the child will exit.
+ #$status = 1;
+ }
+
+ exit(0); # child is finished
+ }
+ }
+
+ for $pid (@pids) {
+ # this will also reap any zombies
+ waitpid($pid, 0);
+ }
+
+ my ($msg, $cacheok, $ofile, $prkey, $dir, $restore);
+
+ # read the children's stored data
+ my @kid_data = glob "${wdir}/mpctmp*";
+
+ for my $kd (@kid_data) {
+ open (FD, "<$kd") || die "Can't open $kd for read";
+
+ ($status, $msg, $cacheok, $previmpl, $prevcache) = split /\|/, <FD>;
+
+ if (!$status) {
+ return $status, $creator, $msg;
+ }
+
+ ($ofile, $prkey, $dir, $cwd, $restore) = split /\|/, <FD>;
+
+ eval (<FD>);
+ my $files_written = $VAR1;
+
+ eval (<FD>);
+ my $gen_proj_info = $VAR1;
+
+ # have to reconstitute gen_lib_locs in the same order it was
+ # created or else multi-process implicit dependency may differ from
+ # single process.
+ eval (<FD>);
+ my $gen_lib_locs;
+ for my $k (sort { substr($a, 0 , index ($a, '|')) <=>
+ substr ($b, 0, index ($b, '|')) } keys %$VAR1) {
+
+ $gen_lib_locs->{substr ($k, index ($k, '|') + 1)} =
+ $VAR1->{$k};
+ }
+
+ # have to reconstitute project_file_list in the same order it was
+ # created or else multi-process implicit dependency may differ from
+ # single process.
+ eval (<FD>);
+ for my $k (sort { substr($a, 0 , index ($a, '|')) <=>
+ substr ($b, 0, index ($b, '|')) } keys %$VAR1) {
+
+ $self->{'project_file_list'}->{substr ($k, index ($k, '|') + 1)} =
+ $VAR1->{$k};
+ }
+
+ $self->{'cacheok'} = $cacheok;
+ if ($self->cd($dir)) {
+ if ($self->{'cacheok'} && defined $allprojects{$prkey}) {
+
+ $files_written = $allprojects{$prkey};
+ $gen_proj_info = $allprinfo{$prkey};
+ $gen_lib_locs = $allliblocs{$prkey};
+ $status = 1;
+ }
+ else {
+ # file is already generated. check status
+ if (!$status) {
+
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting right now.
+ return $status, $creator, $msg;
+ }
+
+ ## Get the individual project information and
+ ## generated file name(s)
+ if ($self->{'cacheok'}) {
+
+ $allprojects{$prkey} = $files_written;
+ $allprinfo{$prkey} = $gen_proj_info;
+ $allliblocs{$prkey} = $gen_lib_locs;
+ }
+
+ push(@{$self->{'mpc_to_output'}->{$ofile}}, @$files_written);
+ }
+
+ $self->cd($cwd);
+ $self->save_project_info($files_written, $gen_proj_info,
+ $gen_lib_locs, $dir,
+ \@projects, \%pi, \%liblocs);
+ }
+ else {
+ ## Unable to change to the directory.
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting soon.
+ return 0, $creator, $msg;
+
+ }
+
+ ## Return things to the way they were
+ $impl = $previmpl if (defined $self->{'scoped_assign'}->{$ofile});
+ if ($restore) {
+ $self->{'cacheok'} = $prevcache;
+ $creator->restore_state(\%gstate);
+ }
}
## Add implict project dependencies based on source files
@@ -1413,7 +1845,9 @@ sub generate_project_files {
## in generate_hierarchy() for each workspace.
$self->{'projects'} = \@projects;
$self->{'project_info'} = \%pi;
+
if ($status && $genimpdep) {
+ #print "aipd: $cwd\n", Dumper ($creator), "\n";
$self->add_implicit_project_dependencies($creator, $cwd);
}
@@ -1421,7 +1855,7 @@ sub generate_project_files {
$self->{'lib_locations'} = \%liblocs;
if ($self->get_hierarchy() || $self->workspace_per_project()) {
my $orig = $self->{'workspace_name'};
- $self->generate_hierarchy($creator, \@projects, \%pi);
+ ($status, $errorString) = $self->generate_hierarchy($creator, \@projects, \%pi);
$self->{'workspace_name'} = $orig;
}
@@ -1429,7 +1863,430 @@ sub generate_project_files {
$self->{'projects'} = \@projects;
$self->{'project_info'} = \%pi;
- return $status, $creator;
+ return $status, $creator, $errorString;
+}
+
+sub send_to_parent {
+ my $self = shift;
+ my $arr = shift;
+
+ # send the data
+ my $sock = new IO::Socket::INET (
+ PeerAddr => 'localhost',
+ PeerPort => $wport,
+ Proto => 'tcp',
+ );
+
+ if (!defined ($sock)) {
+ die "Child could not create socket";
+ }
+
+ map { print $sock "$_\n"; } @$arr;
+ $sock->close();
+}
+
+sub generate_project_files_fork_socket {
+ my $self = shift;
+ my $status = (scalar @{$self->{'project_files'}} == 0 ? 1 : 0);
+
+ my @projects;
+ my %pi;
+ my %liblocs;
+
+ my $creator = $self->project_creator('child');
+ my $cwd = $self->getcwd();
+ my $impl = $self->get_assignment('implicit');
+ my $postkey = $creator->get_dynamic() .
+ $creator->get_static() . "-$self";
+ my $previmpl = $impl;
+ my $prevcache = $self->{'cacheok'};
+ my %gstate = $creator->save_state();
+ my $genimpdep = $self->generate_implicit_project_dependencies();
+ my $errorString;
+
+ my @save;
+ my $VAR1;
+ $Data::Dumper::Indent = 0;
+
+ ## Save this project creator setting for later use in the
+ ## number_target_deps() method.
+ $self->{'dependency_is_filename'} = $creator->dependency_is_filename();
+
+ ## Remove the address portion of the $self string
+ $postkey =~ s/=.*//;
+
+ ## Set the source file callback on our project creator
+ $creator->set_source_listing_callback([\&source_listing_callback, $self]);
+
+ my $pid;
+ my @pids;
+ my @pdata; # parents data sent from children.
+
+ ## setup workers' data
+ my @wdata;
+ my $beg;
+ my $fin;
+
+ my $num_prj_files = $#{$self->{'project_files'}} + 1;
+
+ ## reduce the number of workers if necessary
+ ## what if $num_workers > SOMAXCONN?? (unlikely)
+ if ($num_workers > SOMAXCONN) {
+ $self->diagnostic("Multiprocess MPC reducing # workers from $num_workers to " . SOMAXCONN . ", the max # of queued connections");
+ $num_workers = SOMAXCONN;
+ }
+
+ if ($num_workers > $num_prj_files) {
+ # don't fork more workers than there are jobs
+ $self->diagnostic("Multiprocess MPC reducing # workers from $num_workers to $num_prj_files, the number of project files.");
+ $num_workers = $num_prj_files;
+ }
+
+ my $num_per_worker = int ($num_prj_files / $num_workers);
+ my $num_lines_per_prj = 6;
+
+ $self->diagnostic("Multiprocess MPC using $num_workers workers to process $num_prj_files project files.");
+
+ for (my $wctr = 0; $wctr < $num_workers; ++$wctr) {
+ $beg = $wctr * $num_per_worker;
+ $fin = $beg + $num_per_worker - 1;
+
+ @{$wdata[$wctr]} = @{$self->{'project_files'}}[$beg..$fin];
+ }
+
+ ## give any remaining data to last worker.
+ if ($num_prj_files > $num_per_worker * $num_workers) {
+ push @{$wdata[$num_workers - 1]} ,
+ @{$self->{'project_files'}}[$num_per_worker
+ * $num_workers..$#{$self->{'project_files'}}];
+
+ }
+
+ ## Setup listener. Do this before fork so that (in the rare case)
+ ## when child tries to send data before the accept(), the socket
+ ## is at least initialized.
+ my $sock = new IO::Socket::INET (
+ LocalHost => 'localhost',
+ LocalPort => $wport,
+ Proto => 'tcp',
+ Listen => $num_workers,
+ Reuse => 1
+ );
+ if (!defined ($sock)) {
+ die "Error setting up parent listener";
+ }
+
+ ## spawn the workers.
+ my $id = 0;
+ while ($id < $num_workers) {
+ # use pipes as barrier
+ $pid = fork();
+ if ($pid != 0) {
+ push @pids, $pid;
+ }
+ else {
+ ## after fork, child knows its id and which data to use.
+ $self->{'pid'} = 'child';
+ last;
+ }
+ ++$id;
+ }
+
+ if ($self->{pid} eq 'parent') {
+ $self->diagnostic("Multiprocess MPC using port $wport.");
+
+ # read the data from the kids
+ for (my $ctr = 0; $ctr < $num_workers; ++$ctr) {
+ my $handle = $sock->accept();
+ die "Accept error" if !$handle;
+ my $id = <$handle>;
+ @{$pdata[$id]} = <$handle>;
+
+ # each project as 6 records
+ if ((($#{$pdata[$id]} + 1) / $num_lines_per_prj) != $num_per_worker) {
+ if ($#{$pdata[$id]} != 0) {
+ # 0 indicates a failed status which will be delt with later
+ if (($id == $num_workers - 1) && ((($#{$pdata[$id]} + 1) / $num_lines_per_prj) != $num_per_worker + $#{$self->{'project_files'}} + 1 - ($num_workers * $num_per_worker))) {
+ # The last child may have more than num_per_worker records
+ my $rec = $#{$pdata[$id]} + 1;
+ my $exp = $num_per_worker * $num_lines_per_prj;
+ die "There is an error in the child data. Expected $exp. Received $rec";
+ }
+ }
+ }
+ }
+ # all data has been read
+ $sock->close();
+ }
+ else {
+ ## This is the code the workers run.
+ undef $sock;
+ ## generate projects
+ my @cdata = ($id);
+ foreach my $ofile (@{$wdata[$id]}) {
+ if (!$self->excluded($ofile)) {
+ my $file = $ofile;
+ my $dir = $self->mpc_dirname($file);
+ my $restore = 0;
+
+ if (defined $self->{'scoped_assign'}->{$ofile}) {
+ ## Handle the implicit assignment
+ my $oi = $self->{'scoped_assign'}->{$ofile}->{'implicit'};
+ if (defined $oi) {
+ $previmpl = $impl;
+ $impl = $oi;
+ }
+
+ ## Handle the cmdline assignment
+ my $cmdline = $self->{'scoped_assign'}->{$ofile}->{'cmdline'};
+ if (defined $cmdline && $cmdline ne '') {
+ ## Save the cacheok value
+ $prevcache = $self->{'cacheok'};
+
+ ## Get the current parameters and process the command line
+ my %parameters = $self->current_parameters();
+ $self->process_cmdline($cmdline, \%parameters);
+
+ ## Set the parameters on the creator
+ $creator->restore_state(\%parameters);
+ $restore = 1;
+ }
+ }
+
+ ## If we are generating implicit projects and the file is a
+ ## directory, then we set the dir to the file and empty the file
+ if ($impl && -d $file) {
+ $dir = $file;
+ $file = '';
+
+ ## If the implicit assignment value was not a number, then
+ ## we will add this value to our base projects.
+ if ($impl !~ /^\d+$/) {
+ my $bps = $creator->get_baseprojs();
+ push(@$bps, split(/\s+/, $impl));
+ $restore = 1;
+ $self->{'cacheok'} = 0;
+ }
+ }
+
+ ## Generate the key for this project file
+ my $prkey = $self->getcwd() . '/' .
+ ($file eq '' ? $dir : $file) . "-$postkey";
+
+ ## We must change to the subdirectory for
+ ## which this project file is intended
+
+ if ($self->cd($dir)) {
+ my $files_written = [];
+ my $gen_proj_info = [];
+ my $gen_lib_locs = {};
+
+ if ($self->{'cacheok'} && defined $allprojects{$prkey}) {
+ $files_written = $allprojects{$prkey};
+ $gen_proj_info = $allprinfo{$prkey};
+ $gen_lib_locs = $allliblocs{$prkey};
+
+ $status = 1;
+ }
+ else {
+ $status = $creator->generate($self->mpc_basename($file));
+
+ ## If any one project file fails, then stop
+ ## processing altogether.
+ if (!$status) {
+ # save the status info and exit. the parent will
+ # see the error.
+ @cdata = ($id);
+ push @cdata, "$status|Unable to process " .
+ ($file eq '' ? " in $dir" : $file) . "\n";
+
+ $self->send_to_parent(\@cdata);
+ exit(1); # child error
+ }
+
+ ## Get the individual project information and
+ ## generated file name(s)
+ $files_written = $creator->get_files_written();
+ $gen_proj_info = $creator->get_project_info();
+ $gen_lib_locs = $creator->get_lib_locations();
+
+ }
+
+ push @cdata, "$status|''|$self->{'cacheok'}|$previmpl|$prevcache";
+ push @cdata, "$ofile|$prkey|$dir|$cwd|$restore";
+ push @cdata, Dumper ($files_written);
+ push @cdata, Dumper ($gen_proj_info);
+ push @cdata, Dumper ($gen_lib_locs);
+
+ # there's a callback that sets the project file list
+ # since we can't callback between processes we store
+ # the list for later
+ push @cdata, Dumper ($self->{'project_file_list'});
+
+ $self->cd($cwd);
+
+ }
+ else {
+ ## Unable to change to the directory.
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting soon.
+ @cdata = ($id);
+ push @cdata, "$status|Unable to change directory to $dir\n";
+ $self->send_to_parent(\@cdata);
+
+ exit (1); # child error
+ }
+
+ ## Return things to the way they were
+ $impl = $previmpl if (defined $self->{'scoped_assign'}->{$ofile});
+ if ($restore) {
+ $self->{'cacheok'} = $prevcache;
+ $creator->restore_state(\%gstate);
+ }
+ }
+ else {
+ ## This one was excluded, so status is ok
+ ## no need to set though since the child will exit.
+ #$status = 1;
+ }
+ }
+
+ # send all the data at once.
+ $self->send_to_parent(\@cdata);
+
+ exit (0);
+
+ # end of child
+ }
+
+ # This is the parent again.
+
+ for $pid (@pids) {
+ # this will reap any zombies
+ waitpid($pid, 0);
+ }
+
+ my ($msg, $cacheok, $ofile, $prkey, $dir, $restore);
+
+ # read the children's stored data
+ for (my $i = 0; $i < $num_workers; ++$i) {
+ for (my $j = 0; $j < $#{$pdata[$i]} + 1; ++$j) {
+ ($status, $msg, $cacheok, $previmpl, $prevcache) = split /\|/, ${$pdata[$i]}[$j++];
+
+ # check that the child was successful
+ if (!$status) {
+ return $status, $creator, $msg;
+ }
+
+ ($ofile, $prkey, $dir, $cwd, $restore) = split /\|/, ${$pdata[$i]}[$j++];
+
+ eval (${$pdata[$i]}[$j++]);
+ my $files_written = $VAR1;
+
+ eval (${$pdata[$i]}[$j++]);
+ my $gen_proj_info = $VAR1;
+
+ # have to reconstitute gen_lib_locs in the same order it was
+ # created or else multi-process implicit dependency may differ from
+ # single process.
+ eval (${$pdata[$i]}[$j++]);
+ my $gen_lib_locs;
+ for my $k (sort { substr($a, 0 , index ($a, '|')) <=>
+ substr ($b, 0, index ($b, '|')) } keys %$VAR1) {
+
+ $gen_lib_locs->{substr ($k, index ($k, '|') + 1)} =
+ $VAR1->{$k};
+ }
+
+ # have to reconstitute project_file_list in the same order it was
+ # created or else multi-process implicit dependency may differ from
+ # single process.
+ eval (${$pdata[$i]}[$j]);
+ for my $k (sort { substr($a, 0 , index ($a, '|')) <=>
+ substr ($b, 0, index ($b, '|')) } keys %$VAR1) {
+
+ $self->{'project_file_list'}->{substr ($k, index ($k, '|') + 1)} =
+ $VAR1->{$k};
+ }
+
+ $self->{'cacheok'} = $cacheok;
+ if ($self->cd($dir)) {
+ if ($self->{'cacheok'} && defined $allprojects{$prkey}) {
+
+ $files_written = $allprojects{$prkey};
+ $gen_proj_info = $allprinfo{$prkey};
+ $gen_lib_locs = $allliblocs{$prkey};
+ $status = 1;
+ }
+ else {
+ # file is already generated. check status
+ if (!$status) {
+
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting right now.
+ return $status, $creator, $msg;
+ }
+
+ ## Get the individual project information and
+ ## generated file name(s)
+ if ($self->{'cacheok'}) {
+
+ $allprojects{$prkey} = $files_written;
+ $allprinfo{$prkey} = $gen_proj_info;
+ $allliblocs{$prkey} = $gen_lib_locs;
+ }
+
+ push(@{$self->{'mpc_to_output'}->{$ofile}}, @$files_written);
+ }
+
+ $self->cd($cwd);
+ $self->save_project_info($files_written, $gen_proj_info,
+ $gen_lib_locs, $dir,
+ \@projects, \%pi, \%liblocs);
+ }
+ else {
+
+ ## Unable to change to the directory.
+ ## We don't restore the state before we leave,
+ ## but that's ok since we will be exiting soon.
+ return 0, $creator, $msg;
+
+ }
+
+ ## Return things to the way they were
+ $impl = $previmpl if (defined $self->{'scoped_assign'}->{$ofile});
+ if ($restore) {
+ $self->{'cacheok'} = $prevcache;
+ $creator->restore_state(\%gstate);
+ }
+ }
+ }
+
+ ## Add implict project dependencies based on source files
+ ## that have been used by multiple projects. If we do it here
+ ## before we call generate_hierarchy(), we don't have to call it
+ ## in generate_hierarchy() for each workspace.
+ $self->{'projects'} = \@projects;
+ $self->{'project_info'} = \%pi;
+
+ if ($status && $genimpdep) {
+ #print "aipd: $cwd\n", Dumper ($creator), "\n";
+ $self->add_implicit_project_dependencies($creator, $cwd);
+ }
+
+ ## If we are generating the hierarchical workspaces, then do so
+ $self->{'lib_locations'} = \%liblocs;
+ if ($self->get_hierarchy() || $self->workspace_per_project()) {
+ my $orig = $self->{'workspace_name'};
+ ($status, $errorString) = $self->generate_hierarchy($creator, \@projects, \%pi);
+ $self->{'workspace_name'} = $orig;
+ }
+
+ ## Reset the projects and project_info
+ $self->{'projects'} = \@projects;
+ $self->{'project_info'} = \%pi;
+
+ return $status, $creator, $errorString;
}
@@ -1480,7 +2337,7 @@ sub indirect_dependency {
}
else {
my $deps = $self->create_array(
- $self->{'project_info'}->{$ccheck}->[ProjectCreator::DEPENDENCIES]);
+ $self->{'project_info'}->{$ccheck}->[ProjectCreator::DEPENDENCIES]);
foreach my $dep (@$deps) {
if (defined $self->{'project_info'}->{"$dir$dep"} &&
!defined $self->{'indirect_checked'}->{"$dir$dep"} &&
@@ -1509,6 +2366,7 @@ sub add_implicit_project_dependencies {
## project so that the next time around the foreach, we don't find it
## as a dependent on the one that we just modified.
my @pflkeys = keys %{$self->{'project_file_list'}};
+
foreach my $key (@pflkeys) {
foreach my $ikey (@pflkeys) {
## Not the same project and
@@ -1521,9 +2379,9 @@ sub add_implicit_project_dependencies {
!$self->array_contains($bidir{$ikey}, [$key]))) {
my @over;
if ($self->non_intersection(
- $self->{'project_file_list'}->{$key}->[2],
- $self->{'project_file_list'}->{$ikey}->[2],
- \@over)) {
+ $self->{'project_file_list'}->{$key}->[2],
+ $self->{'project_file_list'}->{$ikey}->[2],
+ \@over)) {
## The project contains shared source files, so we need to
## look into adding an implicit inter-project dependency.
$save{$ikey} = $self->{'project_file_list'}->{$ikey}->[2];
@@ -1622,7 +2480,7 @@ sub sort_within_group {
## Put the projects in the order specified
## by the project dependencies.
- for(my $i = $start; $i <= $end; ++$i) {
+ for (my $i = $start; $i <= $end; ++$i) {
## If our moved project equals our previously moved project then
## we count this as a possible circular dependency.
my $key = "@$list";
@@ -1647,7 +2505,7 @@ sub sort_within_group {
}
$self->warning('Circular dependency detected while processing the ' .
($self->{'current_input'} eq '' ?
- 'default' : $self->{'current_input'}) .
+ 'default' : $self->{'current_input'}) .
' workspace. ' .
'The following projects are involved: ' .
(defined $other ? "$$list[$other], " : '') .
@@ -1664,23 +2522,23 @@ sub sort_within_group {
$deps = $self->get_validated_ordering($$list[$i]);
if (defined $$deps[0]) {
my $baseproj = ($self->{'dependency_is_filename'} ?
- $self->mpc_basename($$list[$i]) :
- $self->{'project_info'}->{$$list[$i]}->[ProjectCreator::PROJECT_NAME]);
+ $self->mpc_basename($$list[$i]) :
+ $self->{'project_info'}->{$$list[$i]}->[ProjectCreator::PROJECT_NAME]);
my $moved = 0;
foreach my $dep (@$deps) {
if ($baseproj ne $dep) {
## See if the dependency is listed after this project
- for(my $j = $i + 1; $j <= $end; ++$j) {
+ for (my $j = $i + 1; $j <= $end; ++$j) {
my $ldep = ($self->{'dependency_is_filename'} ?
- $self->mpc_basename($$list[$j]) :
- $self->{'project_info'}->{$$list[$j]}->[ProjectCreator::PROJECT_NAME]);
+ $self->mpc_basename($$list[$j]) :
+ $self->{'project_info'}->{$$list[$j]}->[ProjectCreator::PROJECT_NAME]);
if ($ldep eq $dep) {
$movepjs = [$i, $j];
## If so, move it in front of the current project.
## The original code, which had splices, didn't always
## work correctly (especially on AIX for some reason).
my $save = $$list[$j];
- for(my $k = $j; $k > $i; --$k) {
+ for (my $k = $j; $k > $i; --$k) {
$$list[$k] = $$list[$k - 1];
}
$$list[$i] = $save;
@@ -1707,16 +2565,16 @@ sub build_dependency_chain {
## Find the item in the list that matches our current dependency
my $mapped = $$map{$dep};
if (defined $mapped) {
- for(my $i = 0; $i < $len; $i++) {
+ for (my $i = 0; $i < $len; $i++) {
if ($$list[$i] eq $mapped) {
## Locate the group number to which the dependency belongs
- for(my $j = 0; $j < $glen; $j++) {
+ for (my $j = 0; $j < $glen; $j++) {
if ($i >= $$groups[$j]->[0] && $i <= $$groups[$j]->[1]) {
if ($j != $ni) {
## Add every project in the group to the dependency chain
- for(my $k = $$groups[$j]->[0]; $k <= $$groups[$j]->[1]; $k++) {
+ for (my $k = $$groups[$j]->[0]; $k <= $$groups[$j]->[1]; $k++) {
my $ldep = $self->mpc_basename($$list[$k]);
if (!exists $$gdeps{$ldep}) {
$$gdeps{$ldep} = 1;
@@ -1758,11 +2616,11 @@ sub sort_by_groups {
}
my %circular_checked;
- for(my $gi = 0; $gi <= $#groups; ++$gi) {
+ for (my $gi = 0; $gi <= $#groups; ++$gi) {
## Detect circular dependencies
if (!$circular_checked{$gi}) {
$circular_checked{$gi} = 1;
- for(my $i = $groups[$gi]->[0]; $i <= $groups[$gi]->[1]; ++$i) {
+ for (my $i = $groups[$gi]->[0]; $i <= $groups[$gi]->[1]; ++$i) {
my %gdeps;
$self->build_dependency_chain($$list[$i], $llen, $list, $gi,
$#groups + 1, \@groups,
@@ -1792,7 +2650,7 @@ sub sort_by_groups {
my @keys = sort keys %dirs;
$self->warning('Circular directory dependency detected in the ' .
($self->{'current_input'} eq '' ?
- 'default' : $self->{'current_input'}) .
+ 'default' : $self->{'current_input'}) .
' workspace. ' .
'The following director' .
($#keys == 0 ? 'y is' : 'ies are') .
@@ -1804,38 +2662,38 @@ sub sort_by_groups {
## Build up the group dependencies
my %gdeps;
- for(my $i = $groups[$gi]->[0]; $i <= $groups[$gi]->[1]; ++$i) {
+ for (my $i = $groups[$gi]->[0]; $i <= $groups[$gi]->[1]; ++$i) {
my $deps = $self->get_validated_ordering($$list[$i]);
@gdeps{@$deps} = () if (defined $$deps[0]);
}
## Search the rest of the groups for any of the group dependencies
- for(my $gj = $gi + 1; $gj <= $#groups; ++$gj) {
- for(my $i = $groups[$gj]->[0]; $i <= $groups[$gj]->[1]; ++$i) {
+ for (my $gj = $gi + 1; $gj <= $#groups; ++$gj) {
+ for (my $i = $groups[$gj]->[0]; $i <= $groups[$gj]->[1]; ++$i) {
if (exists $gdeps{$self->mpc_basename($$list[$i])}) {
## Move this group ($gj) in front of the current group ($gi)
my @save;
- for(my $j = $groups[$gi]->[1] + 1; $j <= $groups[$gj]->[1]; ++$j) {
+ for (my $j = $groups[$gi]->[1] + 1; $j <= $groups[$gj]->[1]; ++$j) {
push(@save, $$list[$j]);
}
my $offset = $groups[$gj]->[1] - $groups[$gi]->[1];
- for(my $j = $groups[$gi]->[1]; $j >= $groups[$gi]->[0]; --$j) {
+ for (my $j = $groups[$gi]->[1]; $j >= $groups[$gi]->[0]; --$j) {
$$list[$j + $offset] = $$list[$j];
}
- for(my $j = 0; $j <= $#save; ++$j) {
+ for (my $j = 0; $j <= $#save; ++$j) {
$$list[$groups[$gi]->[0] + $j] = $save[$j];
}
## Update the group indices
my $shiftamt = ($groups[$gi]->[1] - $groups[$gi]->[0]) + 1;
- for(my $j = $gi + 1; $j <= $gj; ++$j) {
+ for (my $j = $gi + 1; $j <= $gj; ++$j) {
$groups[$j]->[0] -= $shiftamt;
$groups[$j]->[1] -= $shiftamt;
}
my @grsave = @{$groups[$gi]};
$grsave[0] += $offset;
$grsave[1] += $offset;
- for(my $j = $gi; $j < $gj; ++$j) {
+ for (my $j = $gi; $j < $gj; ++$j) {
$groups[$j] = $groups[$j + 1];
$circular_checked{$j} = $circular_checked{$j + 1};
}
@@ -1873,7 +2731,7 @@ sub sort_dependencies {
## First determine the individual groups
my @grindex;
my $previous = [0, undef];
- for(my $li = 0; $li <= $#list; ++$li) {
+ for (my $li = 0; $li <= $#list; ++$li) {
my $dir = $self->get_first_level_directory($list[$li]);
if (!defined $previous->[1]) {
$previous = [$li, $dir];
@@ -1908,7 +2766,7 @@ sub number_target_deps {
## This block of code must be done after the list of dependencies
## has been sorted in order to get the correct project numbers.
- for(my $i = 0; $i <= $#list; ++$i) {
+ for (my $i = 0; $i <= $#list; ++$i) {
my $project = $list[$i];
if (defined $$pjs{$project}) {
my($name, $deps) = @{$$pjs{$project}};
@@ -1921,13 +2779,13 @@ sub number_target_deps {
## up to the point of this project for the projects
## that this one depends on. When the project is
## found, we put the target number in the numbers array.
- for(my $j = 0; $j < $i; ++$j) {
+ for (my $j = 0; $j < $i; ++$j) {
## If the dependency is a filename, then take the basename of
## the project file. Otherwise, get the project name based on
## the project file from the "project_info".
my $key = ($self->{'dependency_is_filename'} ?
- $self->mpc_basename($list[$j]) :
- $self->{'project_info'}->{$list[$j]}->[ProjectCreator::PROJECT_NAME]);
+ $self->mpc_basename($list[$j]) :
+ $self->{'project_info'}->{$list[$j]}->[ProjectCreator::PROJECT_NAME]);
push(@numbers, $j) if (exists $dhash{$key});
}
@@ -1974,8 +2832,8 @@ sub optionError {
sub process_cmdline {
my($self, $cmdline, $parameters) = @_;
- ## It's ok to use the cache
- $self->{'cacheok'} = 1;
+ ## Set cache use to default.
+ $self->{'cacheok'} = $self->default_cacheok();
if (defined $cmdline && $cmdline ne '') {
my $args = $self->create_array($cmdline);
@@ -2057,6 +2915,11 @@ sub current_parameters {
sub project_creator {
my $self = shift;
+ my $pid = shift;
+ if (not defined $pid) {
+ $pid = 'parent';
+ }
+
my $str = "$self";
## NOTE: If the subclassed WorkspaceCreator name prefix does not
@@ -2103,7 +2966,8 @@ sub project_creator {
$parameters{'expand_vars'},
$self->{'gendot'},
$parameters{'comments'},
- $self->{'for_eclipse'});
+ $self->{'for_eclipse'},
+ $pid);
}
@@ -2146,19 +3010,19 @@ sub get_modified_workspace_name {
else {
my $prefix = ($oname eq $wsname ? $name : "$name.$wsname");
$previous_workspace_name{$type}->{$pwd} = $wsname;
- while($self->file_written("$prefix" .
- ($self->{'modified_count'} > 0 ?
- ".$self->{'modified_count'}" : '') .
- "$ext")) {
+ while ($self->file_written("$prefix" .
+ ($self->{'modified_count'} > 0 ?
+ ".$self->{'modified_count'}" : '') .
+ "$ext")) {
++$self->{'modified_count'};
}
$self->{'current_workspace_name'} =
- "$prefix" . ($self->{'modified_count'} > 0 ?
- ".$self->{'modified_count'}" : '') . "$ext";
+ "$prefix" . ($self->{'modified_count'} > 0 ?
+ ".$self->{'modified_count'}" : '') . "$ext";
}
return (defined $self->{'current_workspace_name'} ?
- $self->{'current_workspace_name'} : "$name$ext");
+ $self->{'current_workspace_name'} : "$name$ext");
}
@@ -2190,7 +3054,7 @@ sub get_validated_ordering {
if (defined $dstr && $dstr ne '') {
$deps = $self->create_array($dstr);
my $dlen = scalar(@$deps);
- for(my $i = 0; $i < $dlen; $i++) {
+ for (my $i = 0; $i < $dlen; $i++) {
my $dep = $$deps[$i];
my $found = 0;
## Avoid circular dependencies
@@ -2204,7 +3068,7 @@ sub get_validated_ordering {
}
if (!$found) {
if ($self->{'verbose_ordering'}) {
- $self->warning("'$name' references '$dep' which has " .
+ $self->warning("processing '$project' and '$name' references '$dep' which has " .
"not been processed.");
}
splice(@$deps, $i, 1);
@@ -2232,6 +3096,14 @@ sub get_validated_ordering {
sub source_listing_callback {
my($self, $project_file, $project_name, $list) = @_;
+
+ # have to keep projects in the the same order as if run in
+ # single process. otherwise implicit dependencies produces
+ # different output
+ if ($self->{'pid'} ne 'parent') {
+ $project_name = ++$self->{'imp_dep_ctr'} . '|' . $project_name;
+ }
+
$self->{'project_file_list'}->{$project_name} = [ $project_file,
$self->getcwd(), $list ];
}
@@ -2271,7 +3143,7 @@ sub get_relative_dep_file {
my @dirs = grep(!/^$/, split('/', $base));
my $last = -1;
$project =~ s/^\///;
- for(my $i = 0; $i <= $#dirs; $i++) {
+ for (my $i = 0; $i <= $#dirs; $i++) {
my $dir = $dirs[$i];
if ($project =~ s/^$dir\///) {
$last = $i;
@@ -2287,7 +3159,7 @@ sub get_relative_dep_file {
}
else {
my $built = '';
- for(my $i = $last + 1; $i <= $#dirs; $i++) {
+ for (my $i = $last + 1; $i <= $#dirs; $i++) {
$built .= $dirs[$i] . '/';
}
$built .= $dependee;
@@ -2406,6 +3278,11 @@ sub workspace_per_project {
}
+sub default_verbose_ordering {
+ return 0; # Don't warning if there are missing dependencies.
+}
+
+
sub pre_workspace {
#my $self = shift;
#my $fh = shift;
diff --git a/modules/WorkspaceHelper.pm b/modules/WorkspaceHelper.pm
index 58ff37ef..6b330d20 100644
--- a/modules/WorkspaceHelper.pm
+++ b/modules/WorkspaceHelper.pm
@@ -4,6 +4,7 @@ package WorkspaceHelper;
# Description : Base class and factory for all workspace helpers
# Author : Chad Elliott
# Create Date : 9/01/2004
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/XMLProjectBase.pm b/modules/XMLProjectBase.pm
index 355c7605..f3497624 100644
--- a/modules/XMLProjectBase.pm
+++ b/modules/XMLProjectBase.pm
@@ -4,6 +4,7 @@ package XMLProjectBase;
# Description : An XML base module for Project Creators
# Author : Chad Elliott
# Create Date : 1/30/2006
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/modules/mpc_debug.pm b/modules/mpc_debug.pm
index 7847f9cd..824afbf0 100644
--- a/modules/mpc_debug.pm
+++ b/modules/mpc_debug.pm
@@ -21,6 +21,7 @@ package mpc_debug;
#
# Author : Chris Cleeland
# Create Date : 14.Dec.2010
+# $Id$
# ************************************************************
# ************************************************************
diff --git a/prj_install.pl b/prj_install.pl
index 3f8d1ef6..a1135b4d 100755
--- a/prj_install.pl
+++ b/prj_install.pl
@@ -186,7 +186,7 @@ sub determineSpecialName {
my $fh = new FileHandle();
if (opendir($fh, $odir)) {
foreach my $file (grep(!/^\.\.?$/, readdir($fh))) {
- if ($file =~ /^lib$name\.(a|so|sl)/ ||
+ if ($file =~ /^lib$name(-[0-9]+(\.[0-9]+)*)?\.(a|so|sl|dylib)/ ||
$file =~ /^(lib)?$name.*\.(dll|lib)$/i) {
push(@libs, "$dir$insdir$binarydir$file");
}
diff --git a/rpm/MPC.spec b/rpm/MPC.templ
index cbb6b3d3..cbb6b3d3 100644
--- a/rpm/MPC.spec
+++ b/rpm/MPC.templ
diff --git a/rpm/buildrpm.sh b/rpm/buildrpm.sh
index 98b224d8..4510919c 100755
--- a/rpm/buildrpm.sh
+++ b/rpm/buildrpm.sh
@@ -31,14 +31,19 @@ while [ ! -x $loc/mpc.pl ]; do
done
## Build up the packager name and email address
-if [ -z "REPLYTO" ]; then
+if [ -z "$REPLYTO" ]; then
DOMAIN=`hostname | sed 's/[^\.][^\.]*\.//'`
- if [ -z "$DOMAIN" ]; then
- DOMAIN=`grep '^search' /etc/resolv.conf | sed 's/.* //'`
+ FULLDOMAIN=`echo $DOMAIN | grep '\.'`
+ if [ -z "$DOMAIN" -o -z "$FULLDOMAIN" ]; then
+ RESOLVDOMAIN=`grep '^search' /etc/resolv.conf | sed 's/.*\s//'`
+ FULLDOMAIN=`echo $RESOLVDOMAIN | grep '\.'`
+ if [ -z "$DOMAIN" -o -n "$FULLDOMAIN" ]; then
+ DOMAIN=$RESOLVDOMAIN
+ fi
fi
REPLYTO="$LOGNAME@$DOMAIN"
fi
-PACKAGER=`grep $LOGNAME /etc/passwd | cut -d: -f5`
+PACKAGER=`getent passwd $LOGNAME | cut -d: -f5`
if [ -z "$PACKAGER" ]; then
PACKAGER=$CL_USERNAME
fi
@@ -64,17 +69,38 @@ BDIR=/tmp/mpc
## of MPC.spec
FDIR=/usr/lib/MPC
+##Check if build and work diretory already exist
+if [ -d "$BDIR" -o -f "$BDIR" ]; then
+ echo "Necessary directory $BDIR aleady exists."
+ echo "Exiting."
+ exit
+fi
+
+if [ -d "$WDIR" -o -f "$WDIR" ]; then
+ echo "Necessary directory $WDIR aleady exists."
+ echo "Exiting."
+ exit
+fi
+
+## Create our working directory
+mkdir -p $WDIR
+
## The directory where RPM will place the resulting file
-if [ -x /usr/src/redhat ]; then
+if [ -x /usr/src/redhat -a -w /usr/src/redhat ]; then
RPMLOC=/usr/src/redhat
-else
+elif [ -x /usr/src/packages -a -w /usr/src/packages ]; then
RPMLOC=/usr/src/packages
+else
+ RPMLOC=$WDIR/rpmbuild
+ mkdir -p $RPMLOC
+ mkdir -p $RPMLOC/BUILD
+ mkdir -p $RPMLOC/RPMS
+ mkdir -p $RPMLOC/SOURCES
fi
-## Create our working directory and make the spec file
-mkdir -p $WDIR
+## Make the spec file
cd $WDIR
-sed "s/VERSION/$VERSION/; s/PACKAGER/$PACKAGER/; s!FINALDIR!$FDIR!" $loc/rpm/MPC.spec > MPC.spec
+sed "s/VERSION/$VERSION/; s/PACKAGER/$PACKAGER/; s!FINALDIR!$FDIR!" $loc/rpm/MPC.templ > MPC.spec
## Make a copy of the original MPC source to the new directory
mkdir -p $MDIR/$FDIR
@@ -83,13 +109,18 @@ tar --exclude=.svn -cf - . | (cd $WDIR/$MDIR/$FDIR; tar -xf -)
## Create the build source tar.bz2
cd $WDIR
-tar cf $RPMLOC/SOURCES/$MDIR.tar $MDIR
+tar --owner root --group root -cf $RPMLOC/SOURCES/$MDIR.tar $MDIR
bzip2 -9f $RPMLOC/SOURCES/$MDIR.tar
## Perform the RPM creation step
rm -rf $BDIR
mkdir -p $BDIR
-rpmbuild -bb MPC.spec
+rpmbuild --define "_topdir $RPMLOC" --define "_buildrootdir $BDIR" --define "buildroot $BDIR" --define "__arch_install_post %{nil}" -bb MPC.spec
+
+if [ "$RPMLOC" = "$WDIR/rpmbuild" ]; then
+ echo "Copying rpm to $loc/rpm"
+ cp $RPMLOC/RPMS/*/*.rpm $loc/rpm
+fi
## Clean everything up
cd ..
diff --git a/templates/make.mpd b/templates/make.mpd
index 30f48cfe..58f85f64 100644
--- a/templates/make.mpd
+++ b/templates/make.mpd
@@ -51,10 +51,16 @@ CPU = <%cpu%>
<%if(dll_ext && pic)%>
PICFLAGS = <%pic%>
<%endif%>
+<%if(cflags)%>
+CFLAGS = <%cflags%>
+<%endif%>
+<%if(ccflags)%>
+CCFLAGS = <%ccflags%>
+<%endif%>
CPPFLAGS = <%if(visibility && visopt)%><%visopt%> <%endif%>$(PICFLAGS) $(GENFLAGS)<%if(compile_flags)%> <%compile_flags%><%endif%><%if(profile)%> <%profopt%><%endif%><%if(coverage)%> <%covopt%><%endif%><%if(cpu)%> -DCPU=$(CPU)<%endif%><%if(tempincopt)%> <%tempincopt%>$(TEMPINCDIR)<%endif%><%if(compilerflags)%> <%compilerflags%><%endif%><%if(build64bit && compilerflags64)%> <%compilerflags64%><%endif%><%if(pch_source && pchsupport)%><%foreach(pch_defines)%> -D<%pch_define%><%endfor%><%endif%><%if(extracppflags)%><%foreach(extracppflags)%><%if(!starts_with(extracppflag, -D) || !contains(language, java))%> <%extracppflag%><%endif%><%endfor%><%endif%><%if(includes)%><%foreach(includes)%> -I"<%include%>"<%endfor%><%endif%><%if(!contains(language, java) && macros)%><%foreach(macros)%> -D<%macro%><%endfor%><%endif%>
OBJEXT = <%obj_ext%>
OUTPUT_OPTION = <%output_option(-o \"$@\")%>
-COMPILE.c = $(CC) $(CFLAGS) $(CCFLAGS) $(CPPFLAGS) <%compile_option("-c")%>
+COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) <%compile_option("-c")%>
COMPILE.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) <%compile_option%>
<%if(rc)%>
RESEXT = <%res_ext%>
@@ -218,6 +224,10 @@ SPACE = $(should_be_unset) $(should_be_unset)
<%endif%>
GENERATED_DIRTY =<%foreach(custom_types)%><%foreach(custom_type->input_files)%><%if(custom_type->input_file->output_files)%><%foreach(custom_type->input_file->output_files)%> <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%><%slash%><%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%endfor%><%endif%><%endfor%><%endfor%>
+<%if(!source_files)%>
+all:<%if(prebuild)%> __prebuild__<%endif%> $(GENERATED_DIRTY)<%if(postbuild)%> __postbuild__<%endif%>
+
+<%endif%>
<%foreach(custom_types)%>
<%if(expanded_variable_assignment && custom_type->libpath)%>
DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):<%custom_type->libpath%>
@@ -229,7 +239,7 @@ PATH := $(PATH):<%custom_type->libpath%>
<%endif%>
<%foreach(custom_type->input_files)%>
<%if(custom_type->input_file->output_files)%>
-<%if(multiple(custom_type->input_file->output_files))%>
+<%if(notparallel && multiple(custom_type->input_file->output_files))%>
.NOTPARALLEL:
<%endif%>
<%foreach(custom_type->input_file->output_files)%><%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%><%slash%><%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%fornotlast(" ")%><%endfor%>: <%custom_type->input_file%><%if(custom_type->input_file->dependencies)%><%foreach(custom_type->input_file->dependencies)%><%if(gnumake)%><%if(contains(custom_type->input_file->dependencie, \$))%> $(subst $(SPACE),\$(SPACE),<%custom_type->input_file->dependencie%>)<%else%> <%scope(enter, escape, \\s)%><%custom_type->input_file->dependencie%><%scope(leave)%><%endif%><%else%><%if(!contains(custom_type->input_file->dependencie, \$))%> <%scope(enter, escape, \\s)%><%custom_type->input_file->dependencie%><%scope(leave)%><%endif%><%endif%><%endfor%><%endif%><%if(flag_overrides(custom_type->input_file, dependent))%><%foreach(dep, flag_overrides(custom_type->input_file, dependent))%><%if(gnumake)%><%if(contains(dep, \$))%> $(subst $(SPACE),\$(SPACE),<%dep%>)<%else%> <%scope(enter, escape, \\s)%><%dep%><%scope(leave)%><%endif%><%else%><%if(!contains(dep, \$))%> <%scope(enter, escape, \\s)%><%dep%><%scope(leave)%><%endif%><%endif%><%endfor%><%else%><%if(custom_type->dependent)%><%foreach(custom_type->dependent)%><%if(gnumake)%><%if(contains(custom_type->dependent, \$))%> $(subst $(SPACE),\$(SPACE),<%custom_type->dependent%>)<%else%> <%scope(enter, escape, \\s)%><%custom_type->dependent%><%scope(leave)%><%endif%><%else%><%if(!contains(custom_type->dependent, \$))%> <%scope(enter, escape, \\s)%><%custom_type->dependent%><%scope(leave)%><%endif%><%endif%><%endfor%><%endif%><%endif%><%if(!need_staticflags)%><%if(flag_overrides(custom_type->input_file, dependent_libs))%><%foreach(dep_lib, flag_overrides(custom_type->input_file, dependent_libs))%><%if(gnumake)%><%if(contains(dep_lib, \$))%> $(subst $(SPACE),\$(SPACE),<%dirname(dep_lib)%>/$(LIBPREFIX)<%basename(dep_lib)%>$(LIBSUFFIX)$(SOEXT))<%else%> <%scope(enter, escape, \\s)%><%dirname(dep_lib)%>/$(LIBPREFIX)<%basename(dep_lib)%>$(LIBSUFFIX)$(SOEXT)<%scope(leave)%><%endif%><%else%><%if(!contains(dep_lib, \$))%> <%scope(enter, escape, \\s)%><%dirname(dep_lib)%>/$(LIBPREFIX)<%basename(dep_lib)%>$(LIBSUFFIX)$(SOEXT)<%scope(leave)%><%endif%><%endif%><%endfor%><%else%><%if(custom_type->dependent_libs)%><%foreach(custom_type->dependent_libs)%><%if(gnumake)%><%if(contains(custom_type->dependent_libs, \$))%> $(subst $(SPACE),\$(SPACE),<%dirname(custom_type->dependent_lib)%>/$(LIBPREFIX)<%basename(custom_type->dependent_lib)%>$(LIBSUFFIX)$(SOEXT))<%else%> <%scope(enter, escape, \\s)%><%dirname(custom_type->dependent_lib)%>/$(LIBPREFIX)<%basename(custom_type->dependent_lib)%>$(LIBSUFFIX)$(SOEXT)<%scope(leave)%><%endif%><%else%><%if(!contains(custom_type->dependent_libs, \$))%> <%scope(enter, escape, \\s)%><%dirname(custom_type->dependent_lib)%>/$(LIBPREFIX)<%basename(custom_type->dependent_lib)%>$(LIBSUFFIX)$(SOEXT)<%scope(leave)%><%endif%><%endif%><%endfor%><%endif%><%endif%><%endif%>
@@ -262,12 +272,10 @@ PATH := $(PATH):<%custom_type->libpath%>
.PRECIOUS: $(GENERATED_DIRTY)
<%if(source_files)%>
$(OBJS): $(GENERATED_DIRTY)
-<%else%>
-all:<%if(prebuild)%> __prebuild__<%endif%> $(GENERATED_DIRTY)<%if(postbuild)%> __postbuild__<%endif%>
<%endif%>
<%endif%>
-generated: $(GENERATED_DIRTY)
+generated:<%if(prebuild)%> __prebuild__<%endif%> $(GENERATED_DIRTY)
@-:
<%if(tempinc)%>
diff --git a/templates/makedll.mpt b/templates/makedll.mpt
index a21736a5..dedcd1b2 100644
--- a/templates/makedll.mpt
+++ b/templates/makedll.mpt
@@ -36,6 +36,7 @@ supports_include = 1
visibility =
depgen_flags =
cc = cc
+notparallel = 1
// ***********************************************************************
// Configuration Section
@@ -356,6 +357,7 @@ cygwin {
exe_ext = .exe
rc = windres
res_ext = .o
+ pic =
depgen_flags = -t make
}
diff --git a/templates/vc10.mpd b/templates/vc10.mpd
index 47de1c85..77bb7308 100644
--- a/templates/vc10.mpd
+++ b/templates/vc10.mpd
@@ -38,6 +38,9 @@
<%else%>
<CharacterSet>NotSet</CharacterSet>
<%endif%>
+<%if(PlatformToolset)%>
+ <PlatformToolset><%PlatformToolset%></PlatformToolset>
+<%endif%>
<%if(managed)%>
<CLRSupport><%if(compares(managed,0))%>false<%else%><%if(compares(managed,1))%>true<%else%><%if(compares(managed,2))%>Pure<%else%><%if(compares(managed,3))%>Safe<%else%><%managed%><%endif%><%endif%><%endif%><%endif%></CLRSupport>
<%endif%>
@@ -113,6 +116,9 @@
<%if(EmbedManifest || keyfile)%>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%if(EmbedManifest)%><%EmbedManifest%><%else%><%if(keyfile)%>false<%endif%><%endif%></EmbedManifest>
<%endif%>
+<%if(keyfile)%>
+ <LinkKeyFile Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%keyfile%></LinkKeyFile>
+<%endif%>
<%endif%>
<%endfor%>
<%endfor%>
@@ -228,12 +234,10 @@
<ExceptionHandling><%ExceptionHandling%></ExceptionHandling>
<%endif%>
<%if(!managed)%>
-<%if(optimize)%>
<%if(BasicRuntimeChecks)%>
<BasicRuntimeChecks><%BasicRuntimeChecks%></BasicRuntimeChecks>
<%endif%>
<%endif%>
-<%endif%>
<%if(ExpandAttributedSource)%>
<ExpandAttributedSource>true</ExpandAttributedSource>
<%endif%>
@@ -336,7 +340,7 @@
<%if(staticname)%>
<OutputFile><%libout%>\<%libname_prefix%><%staticname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%lib_ext%></OutputFile>
<%endif%>
- <AdditionalDependencies><%foreach(reverse(libs))%><%libname_prefix%><%lib%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%lib_ext%>;<%endfor%><%foreach(reverse(lit_libs))%><%lit_lib%>.lib;<%endfor%><%foreach(reverse(pure_libs))%> <%pure_lib%>;<%endfor%>%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories><%foreach(libpaths)%><%libpath%>;<%endfor%>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<%if(SuppressStartupBanner)%>
<SuppressStartupBanner>true</SuppressStartupBanner>
@@ -759,6 +763,9 @@
<%endfor%>
<%endfor%>
<%endif%>
+<%if(duplicate_index(source_file))%>
+ <ObjectFileName>$(IntDir)\%(Filename)<%duplicate_index(source_file)%>.obj</ObjectFileName>
+<%endif%>
</ClCompile>
<%endif%>
<%endif%>
@@ -794,7 +801,7 @@
<CustomBuild Include="<%custom_type->input_file%>">
<%foreach(platforms)%>
<%foreach(configurations)%>
- <Command Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%if(custom_type->libpath)%>PATH=%PATH%;<%custom_type->libpath%>&#x0D;&#x0A;<%endif%><%if(flag_overrides(custom_type->input_file, gendir))%>if not exist <%flag_overrides(custom_type->input_file, gendir)%> mkdir <%flag_overrides(custom_type->input_file, gendir)%>&#x0D;&#x0A;<%endif%><%foreach(custom_type->input_file->commands)%><%if(custom_type->input_file->command->gdir)%>if not exist <%custom_type->input_file->command->gdir%> mkdir <%custom_type->input_file->command->gdir%>&#x0D;&#x0A;<%endif%><%endfor%><%if(custom_type->input_file->commands)%><%foreach(custom_type->input_file->commands)%><%custom_type->input_file->command%> <%custom_type->input_file->command->flags%> &quot;<%custom_type->input_file%>&quot;<%if(custom_type->input_file->command->outopt)%> <%custom_type->input_file->command->outopt%> &quot;<%custom_type->input_file->command->outfile%>&quot;<%endif%><%fornotlast(" &amp;&amp; ")%><%endfor%><%else%><%if(flag_overrides(custom_type->input_file, command))%><%flag_overrides(custom_type->input_file, command)%><%else%><%custom_type->command%><%endif%> <%if(flag_overrides(custom_type->input_file, commandflags))%><%flag_overrides(custom_type->input_file, commandflags)%><%else%><%custom_type->commandflags%><%endif%> <%if(custom_type->output_option)%>&quot;<%custom_type->input_file%>&quot; <%custom_type->output_option%><%foreach(custom_type->input_file->output_files)%> &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%>&quot;<%endfor%><%else%>&quot;<%custom_type->input_file%>&quot;<%endif%><%endif%><%if(flag_overrides(custom_type->input_file, postcommand))%><%foreach(custom_type->input_file)%> &amp;&amp; <%flag_overrides(custom_type->input_file, postcommand)%><%endfor%><%else%><%if(custom_type->postcommand)%><%foreach(custom_type->input_file)%> &amp;&amp; <%custom_type->postcommand%><%endfor%><%endif%><%endif%><%if(pch_header)%><%if(custom_type->pch_postrule)%><%foreach(custom_type->input_file->source_output_files)%> &amp;&amp; echo #include &quot;<%pch_header%>&quot; &gt; temporary.src &amp;&amp; type &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%>&quot; &gt;&gt; temporary.src &amp;&amp; move /y temporary.src &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%>&quot;<%endfor%><%endif%><%endif%></Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%if(custom_type->libpath)%>setlocal&#x0D;&#x0A;PATH=%PATH%;<%custom_type->libpath%>&#x0D;&#x0A;<%endif%><%if(flag_overrides(custom_type->input_file, gendir))%>if not exist <%flag_overrides(custom_type->input_file, gendir)%> mkdir <%flag_overrides(custom_type->input_file, gendir)%>&#x0D;&#x0A;<%endif%><%foreach(custom_type->input_file->commands)%><%if(custom_type->input_file->command->gdir)%>if not exist <%custom_type->input_file->command->gdir%> mkdir <%custom_type->input_file->command->gdir%>&#x0D;&#x0A;<%endif%><%endfor%><%if(custom_type->input_file->commands)%><%foreach(custom_type->input_file->commands)%><%custom_type->input_file->command%> <%custom_type->input_file->command->flags%> &quot;<%custom_type->input_file%>&quot;<%if(custom_type->input_file->command->outopt)%> <%custom_type->input_file->command->outopt%> &quot;<%custom_type->input_file->command->outfile%>&quot;<%endif%><%fornotlast(" &amp;&amp; ")%><%endfor%><%else%><%if(flag_overrides(custom_type->input_file, command))%><%flag_overrides(custom_type->input_file, command)%><%else%><%custom_type->command%><%endif%> <%if(flag_overrides(custom_type->input_file, commandflags))%><%flag_overrides(custom_type->input_file, commandflags)%><%else%><%custom_type->commandflags%><%endif%> <%if(custom_type->output_option)%>&quot;<%custom_type->input_file%>&quot; <%custom_type->output_option%><%foreach(custom_type->input_file->output_files)%> &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%>&quot;<%endfor%><%else%>&quot;<%custom_type->input_file%>&quot;<%endif%><%endif%><%if(flag_overrides(custom_type->input_file, postcommand))%><%foreach(custom_type->input_file)%> &amp;&amp; <%flag_overrides(custom_type->input_file, postcommand)%><%endfor%><%else%><%if(custom_type->postcommand)%><%foreach(custom_type->input_file)%> &amp;&amp; <%custom_type->postcommand%><%endfor%><%endif%><%endif%><%if(pch_header)%><%if(custom_type->pch_postrule)%><%foreach(custom_type->input_file->source_output_files)%> &amp;&amp; echo #include &quot;<%pch_header%>&quot; &gt; temporary.src &amp;&amp; type &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%>&quot; &gt;&gt; temporary.src &amp;&amp; move /y temporary.src &quot;<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%>&quot;<%endfor%><%endif%><%endif%><%if(custom_type->libpath)%>&#x0D;&#x0A;endlocal<%endif%></Command>
<Message Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'">Invoking <%if(custom_type->input_file->commands)%><%foreach(custom_type->input_file->commands)%><%custom_type->input_file->command%><%fornotlast(" and ")%><%endfor%><%else%><%if(flag_overrides(custom_type->input_file, command))%><%flag_overrides(custom_type->input_file, command)%><%else%><%custom_type->command%><%endif%><%endif%> on <%custom_type->input_file%></Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%foreach(custom_type->input_file->output_files)%><%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%fornotlast(";")%><%endfor%></Outputs>
<%if(flag_overrides(custom_type->input_file, dependent) || custom_type->dependent || custom_type->input_file->dependencies || (!need_staticflags && (flag_overrides(custom_type->input_file, dependent_libs) || custom_type->dependent_libs)))%>
diff --git a/templates/vc10platforms.mpt b/templates/vc10platforms.mpt
index 1208139f..063fb8fb 100644
--- a/templates/vc10platforms.mpt
+++ b/templates/vc10platforms.mpt
@@ -92,14 +92,18 @@ Windows Mobile 6 Professional SDK (ARMV4I) {
}
SuperSonic_CE6 (ARMV4I) {
- unicode = 1
- output_subdir = SUPERSONIC_CE6_ARMV4I
- cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
- platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
- link_options = /subsystem:windowsce,6.0 /machine:THUMB
- lit_libs += iphlpapi
- subsystem = "0"
- TargetMachine = "0"
+ unicode = 1
+ output_subdir = SUPERSONIC_CE6_ARMV4I
+ cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
+ platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
+ link_options = /subsystem:windowsce,6.00 /savebaserelocations:&quot;$(TargetDir)/$(TargetName).rel&quot;
+ optimizereferences = 0
+ enablecomdatfolding = 0
+ subsystem = "0"
+ TargetMachine = "16"
+ stackreservesize = 65536
+ stackcommitsize = 4096
+ lit_libs += iphlpapi
}
eBox4300_WINCE600_SDK (x86) {
@@ -178,3 +182,18 @@ STANDARDSDK_500 (x86) {
subsystem = "0"
TargetMachine = "0"
}
+
+Stellar_EC7 (ARMv4I) {
+ unicode = 1
+ output_subdir = STELLAR_EC7_ARMV4I
+ cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
+ platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
+ link_options = /subsystem:windowsce,7.00 /savebaserelocations:&quot;$(TargetDir)/$(TargetName).rel&quot;
+ optimizereferences = 0
+ enablecomdatfolding = 0
+ subsystem = "0"
+ TargetMachine = "16"
+ stackreservesize = 65536
+ stackcommitsize = 4096
+ lit_libs += iphlpapi
+}
diff --git a/templates/vc11dll.mpt b/templates/vc11dll.mpt
new file mode 100644
index 00000000..e9bd170a
--- /dev/null
+++ b/templates/vc11dll.mpt
@@ -0,0 +1,75 @@
+// -*- MPC -*-
+// $Id$
+
+conditional_include "common"
+conditional_include "windowscommon"
+
+configurations = Debug Release
+common_defines = WIN32 _WINDOWS _CRT_NONSTDC_NO_WARNINGS
+ConfigurationType = 2
+MinimalRebuild = false
+GenerateDebugInformation = true
+
+conditional_include "vc11platforms"
+
+Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Release
+ intermediate_dir = Release
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = .
+ intermediate_dir = Debug
+ lib_modifier = d
+}
+
+Memcheck Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Release
+ intermediate_dir = Release
+ BasicRuntimeChecks = 0
+ FixedBaseAddress = 1
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Memcheck Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = .
+ intermediate_dir = Debug
+ lib_modifier = d
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+}
+
+MFC Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = MFC_Release
+ intermediate_dir = MFC_Release
+ lib_modifier = mfc
+ UseOfMFC = Dynamic
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+MFC Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = MFC_Debug
+ intermediate_dir = MFC_Debug
+ lib_modifier = mfcd
+ UseOfMFC = Dynamic
+}
+
+conditional_include "vcpartialmacros"
+conditional_include "user_vc10dll"
diff --git a/templates/vc11exe.mpt b/templates/vc11exe.mpt
new file mode 100644
index 00000000..dc3e5657
--- /dev/null
+++ b/templates/vc11exe.mpt
@@ -0,0 +1,81 @@
+// -*- MPC -*-
+// $Id$
+
+conditional_include "common"
+conditional_include "windowscommon"
+
+configurations = Debug Release
+common_defines = WIN32 _CONSOLE _CRT_NONSTDC_NO_WARNINGS
+ConfigurationType = 1
+SubSystem = Console
+MinimalRebuild = false
+GenerateDebugInformation = true
+
+conditional_include "vc11platforms"
+
+Release {
+ LinkIncremental = 1
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Release
+ intermediate_dir = Release
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ intermediate_dir = Debug
+ lib_modifier = d
+}
+
+Memcheck Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Release
+ intermediate_dir = Release
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Memcheck Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ intermediate_dir = Debug
+ lib_modifier = d
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+}
+
+MFC Release {
+ LinkIncremental = 1
+ optimize = MaxSpeed
+ common_defines = WIN32 _WINDOWS
+ defines = NDEBUG _AFXDLL
+ output_dir = MFC_Release
+ intermediate_dir = MFC_Release
+ lib_modifier = mfc
+ UseOfMFC = Dynamic
+ unicode_mfc_entry = wWinMainCRTStartup
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+MFC Debug {
+ debug_prj = 1
+ common_defines = WIN32 _WINDOWS
+ defines = _DEBUG _AFXDLL
+ output_dir = MFC_Debug
+ intermediate_dir = MFC_Debug
+ lib_modifier = mfcd
+ UseOfMFC = Dynamic
+ unicode_mfc_entry = wWinMainCRTStartup
+}
+
+conditional_include "vcpartialmacros"
+conditional_include "user_vc10exe"
diff --git a/templates/vc11lib.mpt b/templates/vc11lib.mpt
new file mode 100644
index 00000000..74d12a7b
--- /dev/null
+++ b/templates/vc11lib.mpt
@@ -0,0 +1,77 @@
+// -*- MPC -*-
+// $Id$
+
+conditional_include "common"
+conditional_include "windowscommon"
+
+configurations = Debug Release
+common_defines = WIN32 _WINDOWS _CRT_NONSTDC_NO_WARNINGS
+ConfigurationType = 4
+MinimalRebuild = false
+GenerateDebugInformation = true
+
+conditional_include "vc11platforms"
+
+Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Static_Release
+ intermediate_dir = Static_Release
+ lib_modifier = s
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = Static_Debug
+ intermediate_dir = Static_Debug
+ lib_modifier = sd
+}
+
+Memcheck Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Static_Release
+ intermediate_dir = Static_Release
+ lib_modifier = s
+ BasicRuntimeChecks = 0
+ FixedBaseAddress = 1
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Memcheck Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = Static_Debug
+ intermediate_dir = Static_Debug
+ lib_modifier = sd
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+}
+
+MFC Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Static_MFC_Release
+ intermediate_dir = Static_MFC_Release
+ lib_modifier = mfcs
+ UseOfMFC = Dynamic
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+MFC Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = Static_MFC_Debug
+ intermediate_dir = Static_MFC_Debug
+ lib_modifier = mfcsd
+ UseOfMFC = Dynamic
+}
+
+conditional_include "vcpartialmacros"
+conditional_include "user_vc10lib"
diff --git a/templates/vc11libexe.mpt b/templates/vc11libexe.mpt
new file mode 100644
index 00000000..fc259a63
--- /dev/null
+++ b/templates/vc11libexe.mpt
@@ -0,0 +1,85 @@
+// -*- MPC -*-
+// $Id$
+
+conditional_include "common"
+conditional_include "windowscommon"
+
+configurations = Debug Release
+common_defines = WIN32 _CONSOLE _CRT_NONSTDC_NO_WARNINGS
+ConfigurationType = 1
+SubSystem = Console
+MinimalRebuild = false
+GenerateDebugInformation = true
+
+conditional_include "vc11platforms"
+
+Release {
+ LinkIncremental = 1
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Static_Release
+ intermediate_dir = Static_Release
+ lib_modifier = s
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = Static_Debug
+ intermediate_dir = Static_Debug
+ lib_modifier = sd
+}
+
+Memcheck Release {
+ optimize = MaxSpeed
+ defines = NDEBUG
+ output_dir = Static_Release
+ intermediate_dir = Static_Release
+ lib_modifier = s
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+Memcheck Debug {
+ debug_prj = 1
+ defines = _DEBUG
+ output_dir = Static_Debug
+ intermediate_dir = Static_Debug
+ lib_modifier = sd
+ BasicRuntimeChecks = 0
+ LinkIncremental = 1
+ FixedBaseAddress = 1
+}
+
+MFC Release {
+ LinkIncremental = 1
+ optimize = MaxSpeed
+ common_defines = WIN32 _WINDOWS
+ defines = NDEBUG _AFXDLL
+ output_dir = Static_MFC_Release
+ intermediate_dir = Static_MFC_Release
+ lib_modifier = mfcs
+ UseOfMFC = Dynamic
+ unicode_mfc_entry = wWinMainCRTStartup
+ EnableIntrinsicFunctions = true
+ WholeProgramOptimization = true
+}
+
+MFC Debug {
+ debug_prj = 1
+ common_defines = WIN32 _WINDOWS
+ defines = _DEBUG _AFXDLL
+ output_dir = Static_MFC_Debug
+ intermediate_dir = Static_MFC_Debug
+ lib_modifier = mfcsd
+ UseOfMFC = Dynamic
+ unicode_mfc_entry = wWinMainCRTStartup
+}
+
+conditional_include "vcpartialmacros"
+conditional_include "user_vc10libexe"
diff --git a/templates/vc11platforms.mpt b/templates/vc11platforms.mpt
new file mode 100644
index 00000000..b5cc1ae2
--- /dev/null
+++ b/templates/vc11platforms.mpt
@@ -0,0 +1,24 @@
+// -*- MPC -*-
+// $Id$
+//
+// Any of these platforms can set using value_template platforms=
+// when generating solutions/projects.
+//
+//platforms = Win32 x64
+
+platforms = Win32 x64
+default_platform = Win32
+PlatformToolset = v110
+
+Win32 {
+ output_subdir = I386
+}
+
+x64 {
+ output_subdir = AMD64
+ cpu_defines = _AMD64_
+ platform_defines = _WIN64
+ TargetMachine = "0" // We let VC++ figure it out for us.
+ link_options = /machine:AMD64
+}
+
diff --git a/templates/vc8csharp.mpd b/templates/vc8csharp.mpd
index 9f5cc751..c7978ab0 100644
--- a/templates/vc8csharp.mpd
+++ b/templates/vc8csharp.mpd
@@ -80,6 +80,9 @@
<WarningLevel><%warning_level("4")%></WarningLevel>
<DebugType><%if(optimize)%>none<%else%>full<%endif%></DebugType>
<ErrorReport>prompt</ErrorReport>
+<%if(PlatformTarget)%>
+ <PlatformTarget><%PlatformTarget%></PlatformTarget>
+<%endif%>
</PropertyGroup>
<%endfor%>
<%endfor%>
@@ -128,7 +131,7 @@
</ItemGroup>
<ItemGroup>
<%foreach(source_files)%>
-<%if(contains(flag_overrides(source_file, subtype), ^(Form|Component)$))%>
+<%if(contains(flag_overrides(source_file, subtype), ^(Form|Component|UserControl)$))%>
<Compile Include="<%source_file%>">
<SubType><%flag_overrides(source_file, subtype)%></SubType>
<%if(flag_overrides(source_file, dependent_upon))%>
@@ -155,7 +158,7 @@
<%endif%>
<%endfor%>
<%foreach(source_files)%>
-<%if(!contains(flag_overrides(source_file, subtype), ^(Form|Component)$))%>
+<%if(!contains(flag_overrides(source_file, subtype), ^(Form|Component|UserControl)$))%>
<%if(!compares(vcversion, 8.00) && ends_with(source_file, \.manifest))%>
<None Include="<%source_file%>" />
<%else%>
diff --git a/templates/vc8platforms.mpt b/templates/vc8platforms.mpt
index 3faf45cb..c988d69f 100644
--- a/templates/vc8platforms.mpt
+++ b/templates/vc8platforms.mpt
@@ -88,14 +88,18 @@ Windows Mobile 6 Professional SDK (ARMV4I) {
}
SuperSonic_CE6 (ARMV4I) {
- unicode = 1
- output_subdir = SUPERSONIC_CE6_ARMV4I
- cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
- platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
- link_options = /subsystem:windowsce,6.0 /machine:THUMB
- lit_libs += iphlpapi
- subsystem = "0"
- TargetMachine = "3"
+ unicode = 1
+ output_subdir = SUPERSONIC_CE6_ARMV4I
+ cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
+ platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
+ link_options = /subsystem:windowsce,6.00 /savebaserelocations:&quot;$(TargetDir)/$(TargetName).rel&quot;
+ optimizereferences = 0
+ enablecomdatfolding = 0
+ subsystem = "0"
+ TargetMachine = "16"
+ stackreservesize = 65536
+ stackcommitsize = 4096
+ lit_libs += iphlpapi
}
eBox4300_WINCE600_SDK (x86) {
@@ -174,3 +178,18 @@ STANDARDSDK_500 (x86) {
subsystem = "0"
TargetMachine = "0"
}
+
+Stellar_EC7 (ARMv4I) {
+ unicode = 1
+ output_subdir = STELLAR_EC7_ARMV4I
+ cpu_defines = $(ARCHFAM) $(_ARCHFAM_)
+ platform_defines = UNDER_CE=$(CEVER) _WIN32_WCE=$(CEVER) WINCE _WINDOWS _UNICODE UNICODE
+ link_options = /subsystem:windowsce,7.00 /savebaserelocations:&quot;$(TargetDir)/$(TargetName).rel&quot;
+ optimizereferences = 0
+ enablecomdatfolding = 0
+ subsystem = "0"
+ TargetMachine = "16"
+ stackreservesize = 65536
+ stackcommitsize = 4096
+ lit_libs += iphlpapi
+}
diff --git a/templates/wix.mpd b/templates/wix.mpd
index 3e660a56..9ce76b2c 100644
--- a/templates/wix.mpd
+++ b/templates/wix.mpd
@@ -7,7 +7,7 @@
<%if(!exclude)%>
<%comment("Only put one component in a fragment. If, say, both the debug and release components are in the")%>
<%comment("same fragment, and just the debug component is used in an installer, the release component will")%>
-<%comment("be identified as unused, and an error generated. That is, it seems that referencing any component")%>
+<%comment("be identified as unused, and an error generated. That is, it seems that referencing any component")%>
<%comment("in a fragment causes the entire fragment to be pulled in, and any unused component in the fragment will be flagged as an error")%>
<Fragment Id="<%normalize(configuration)%>_<%normalize(platform)%>_<%project_name%>">
<ComponentGroup Id="ComponentGroup.<%normalize(configuration)%>_<%normalize(platform)%>_<%project_name%>">
@@ -29,7 +29,7 @@
<ComponentRef Id="<%component%>" />
<%endfor%>
</ComponentGroup>
-
+
<DirectoryRef Id="INSTALLDIR">
<%marker(component_top)%>
<%if(!no_binary)%>
@@ -40,12 +40,12 @@
<File Id="<%normalize(configuration)%>_<%normalize(platform)%>_<%if(type_is_dynamic)%><%normalize(libname_prefix)%><%normalize(sharedname)%>_dll<%else%><%normalize(exename)%>_exe<%endif%>"
Name="<%if(type_is_dynamic)%><%libname_prefix%><%sharedname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%dll_ext%><%else%><%exename%><%if(use_exe_modifier)%><%lib_modifier%><%endif%><%exe_ext%><%endif%>"
Source="<%if(type_is_dynamic)%><%if(dllout)%><%full_path(dllout)%>/<%else%><%full_path(libout)%>/<%endif%><%else%><%if(type_is_static)%><%full_path(libout)%>/<%else%><%if(exeout)%><%full_path(exeout)%>/<%if(windows_style)%><%output_dir("Debug")%>/<%endif%><%else%><%if(windows_style)%><%output_dir("Debug")%>/<%else%><%output_dir(".")%>/<%endif%><%endif%><%endif%><%endif%><%if(type_is_dynamic)%><%libname_prefix%><%sharedname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%><%dll_ext%><%else%><%exename%><%if(use_exe_modifier)%><%lib_modifier%><%endif%><%exe_ext%><%endif%>"
- DiskId="<%diskid(1)%>"
+ DiskId="<%diskid(1)%>"
<%if(com_register)%>
SelfRegCost="1"
<%endif%>
/>
- </Component>
+ </Component>
<%foreach(name, install_location)%>
</Directory>
<%endfor%>
@@ -115,12 +115,13 @@
<%marker(component_bottom)%>
</DirectoryRef>
</Fragment>
-<%endif%>
+<%endif%>
<%endfor%>
<%endfor%>
<%else%>
<Fragment Id="<%project_name%>">
<ComponentGroup Id="ComponentGroup.<%project_name%>">
+<%if(!custom_only)%>
<%if(!no_binary)%>
<ComponentRef Id="<%project_name%><%foreach(name, install_location)%>.<%name%><%endfor%>.<%if(type_is_dynamic)%><%normalize(sharedname)%>.dll<%else%><%normalize(exename)%>.exe<%endif%>" />
<%endif%>
@@ -138,8 +139,10 @@
<%foreach(components)%>
<ComponentRef Id="<%component%>" />
<%endfor%>
+<%endif%>
</ComponentGroup>
+<%if(!custom_only)%>
<DirectoryRef Id="INSTALLDIR">
<%marker(component_top)%>
<%if(!no_binary)%>
@@ -149,7 +152,7 @@
<Component Id="<%project_name%><%foreach(name, install_location)%>.<%name%><%endfor%>.<%if(type_is_dynamic)%><%normalize(sharedname)%>.dll<%else%><%normalize(exename)%>.exe<%endif%>" Guid="*">
<File Id="<%project_name%>_<%if(type_is_dynamic)%><%normalize(sharedname)%>_dll<%else%><%normalize(exename)%>_exe<%endif%>"
Name="<%if(type_is_dynamic)%><%sharedname%>.dll<%else%><%exename%>.exe<%endif%>"
- Source="<%source_directory%>/<%if(type_is_dynamic)%><%sharedname%>.dll<%else%><%exename%>.exe<%endif%>"
+ Source="<%source_directory%>/<%if(type_is_dynamic)%><%sharedname%><%if(use_lib_modifier)%><%lib_modifier%><%endif%>.dll<%else%><%exename%>.exe<%endif%>"
DiskId="<%diskid(1)%>" />
</Component>
<%foreach(name, install_location)%>
@@ -235,6 +238,7 @@
<%endif%>
<%marker(component_bottom)%>
</DirectoryRef>
+<%endif%>
</Fragment>
<%endif%>
<%marker(bottom)%>