diff options
author | Adam Mitz <mitza-oci@users.noreply.github.com> | 2013-06-24 17:52:38 +0000 |
---|---|---|
committer | Adam Mitz <mitza-oci@users.noreply.github.com> | 2013-06-24 17:52:38 +0000 |
commit | 4ab97330787291ab6f16f211e8db472a9694cadd (patch) | |
tree | afc85fc54a431912be0a255acad460b96f264765 | |
parent | f479c52c613a5fd054a1970c790832e52a85f70e (diff) | |
download | MPC-4ab97330787291ab6f16f211e8db472a9694cadd.tar.gz |
merged from trunk r1984 through r2138
158 files changed, 11114 insertions, 6434 deletions
@@ -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 @@ -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"> </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"> </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"> </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"> </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"> </p> + <p class="Body"> + <table border="1" summary="Generating workspaces with mwc.pl"> + <tr> + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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’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’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 “install” file after processing each - project. These “install” 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 “install” file after processing each + project. These “install” 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 “make” 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 “make” 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"> </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"> </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"> </p> + <blockquote> - <p class="Code">project {</p> - <p class="Code"> includes += $(PROJ_TOP)</p> - <p class="Code">}</p> + <p class="Code">project {</p> - <p class="Code"> </p> - </li> + <p class="Code"> 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"> </p> - <p class="Code">CPPFLAGS += -I..</p> + </blockquote> - <p class="Code"> </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"> </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"> </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"> </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"> </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"> </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"> </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"><%</em> and - <em class="Code">%></em> or use the <em class= + and <em class="Code">$MPC_ROOT/templates/*.mpd</em> ) and + search for names used within <em class="Code"><%</em> and + <em class="Code">%></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: <execution_path_root> = <mpc_config_path>. + 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"> </p> - - <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p> - - <p class="Code"> </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"><language>:<func name>[, - <language>:<func name>]*</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"> + <language>:<func name>[, + <language>:<func name>]* + </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 “projects” 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 “projects” 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 - “workspaces,” 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 + “workspaces,” 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"> </p> + <div> + <h5 class="Head4">mwc and mwb files</h5> - <p class="Code">workspace(optional name): - optional_base_workspace {</p> - <p class="Code"> 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"> directory</p> + <blockquote> - <p class="Code"> other.mwc</p> - <p class="Code"> </p> + <p class="Code"> + workspace(optional name): + optional_base_workspace { + </p> - <p class="Code"> exclude(vc6, vc7, vc71, vc8, vc9, - vc10, nmake) {</p> + <p class="Code"> file.mpc</p> - <p class="Code"> this_directory</p> + <p class="Code"> directory</p> - <p class="Code"> }</p> + <p class="Code"> other.mwc</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> exclude(prop:microsoft) {</p> + <p class="Code"> + exclude(vc6, vc7, vc71, vc8, vc9, + vc10, nmake) { + </p> - <p class="Code"> non_microsoft</p> + <p class="Code"> this_directory</p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> specific(rpmspec) {</p> + <p class="Code"> exclude(prop:microsoft) {</p> - <p class="Code"> rpm_version = 1.0</p> + <p class="Code"> non_microsoft</p> - <p class="Code"> }</p> + <p class="Code"> }</p> + + <p class="Code"> </p> - <p class="Code">}</p> + <p class="Code"> specific(rpmspec) {</p> - <p class="Code"> </p> - </li> + <p class="Code"> rpm_version = 1.0</p> + + <p class="Code"> }</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"> </p> - <p class="Code">workspace {</p> + <p class="Code">workspace {</p> - <p class="Code"> ...</p> + <p class="Code"> ...</p> - <p class="Code"> static {</p> + <p class="Code"> static {</p> - <p class="Code"> cmdline += -static</p> + <p class="Code"> cmdline += -static</p> - <p class="Code"> directory/foo.mpc</p> + <p class="Code"> directory/foo.mpc</p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> exclude(gnuace, make) {</p> + <p class="Code"> exclude(gnuace, make) {</p> - <p class="Code"> some.mpc</p> + <p class="Code"> some.mpc</p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> // Associate the name "other" with - dir3</p> + <p class="Code"> + // Associate the name "other" with + dir3 + </p> - <p class="Code"> associate(other) {</p> + <p class="Code"> associate(other) {</p> - <p class="Code"> dir3</p> + <p class="Code"> dir3</p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </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 “projects” and each project - can inherit from base projects.</li> - <li style="list-style: none"> - <p class="Code"> </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 “projects” 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"> </p> - <p class="Code"> exename = client</p> + <p class="Code"> + project(optional name): base_project, + another_base_project { + </p> - <p class="Code"> includes += directory_name - other_directory</p> + <p class="Code"> exename = client</p> - <p class="Code"> libpaths += /usr/X11R6/lib</p> + <p class="Code"> + includes += directory_name + other_directory + </p> - <p class="Code"> </p> + <p class="Code"> libpaths += /usr/X11R6/lib</p> - <p class="Code"> Header_Files {</p> + <p class="Code"> </p> - <p class="Code"> file1.h</p> + <p class="Code"> Header_Files {</p> - <p class="Code"> file2.h</p> + <p class="Code"> file1.h</p> - <p class="Code"> fileN.h</p> + <p class="Code"> file2.h</p> - <p class="Code"> }</p> + <p class="Code"> fileN.h</p> - <p class="Code"> </p> + <p class="Code"> }</p> - <p class="Code"> Source_Files {</p> + <p class="Code"> </p> - <p class="Code"> file1.cpp</p> + <p class="Code"> Source_Files {</p> - <p class="Code"> file2.cpp</p> + <p class="Code"> file1.cpp</p> - <p class="Code"> fileN.cpp</p> + <p class="Code"> file2.cpp</p> - <p class="Code"> }</p> + <p class="Code"> fileN.cpp</p> - <p class="Code">}</p> + <p class="Code"> }</p> - <p class="Code"> </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"><project - name[:name=value]></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"> + <project + name[:name=value]> + </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’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’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"><% %></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"><% %></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"><% - %></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"> + <% + %> + </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"> rpm_description = \ns {</p> + <p class="Code">This description</p> + <p class="Code">spans multiple lines.</p> + <p class="Code"> }</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 “project” 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 “project” 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"> </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"> file1.cpp</p> + <blockquote> - <p class="Code"> file2.cpp</p> - <p class="Code">}</p> + <p class="Code">Source_Files {</p> - <p class="Code"> </p> - </li> + <p class="Code"> file1.cpp</p> - <li class="Body">The second form is a complex list of files - within named blocks.</li> + <p class="Code"> file2.cpp</p> - <li style="list-style: none"> - <a name="MPC grouping example"></a> + <p class="Code">}</p> - <p class="Code"> </p> - <p class="Code">Source_Files(MACRO_NAME) {</p> + </blockquote> - <p class="Code"> BlockA {</p> + <p class="Body"> + The second form is a complex list of files + within named blocks. + </p> - <p class="Code"> file1.cpp</p> + <blockquote> + <a name="MPC grouping example"></a> - <p class="Code"> file2.cpp</p> - <p class="Code"> }</p> - <p class="Code"> BlockB {</p> + <p class="Code">Source_Files(MACRO_NAME) {</p> - <p class="Code"> file3.cpp</p> + <p class="Code"> BlockA {</p> - <p class="Code"> file4.cpp</p> + <p class="Code"> file1.cpp</p> - <p class="Code"> }</p> + <p class="Code"> file2.cpp</p> - <p class="Code">}</p> + <p class="Code"> }</p> - <p class="Code"> </p> - </li> + <p class="Code"> BlockB {</p> + + <p class="Code"> file3.cpp</p> + + <p class="Code"> file4.cpp</p> + + <p class="Code"> }</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"> </p> - <p class="Code">verbatim(<project type>, - <location>) {</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"> ...</p> + <blockquote> - <p class="Code">}</p> + <p class="Code"> + verbatim(<project type>, + <location>) { + </p> - <p class="Code"> </p> - </li> + <p class="Code"> ...</p> + + <p class="Code">}</p> - <li class="Body">When MPC is generating a project of type - <em class="Code"><project type></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"><project type></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"><location></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"> </p> + <blockquote> + + <p class="Code">verbatim(gnuace, bottom) {</p> - <p class="Code">verbatim(gnuace, bottom) {</p> + <p class="Code"> all: foo</p> - <p class="Code"> 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"> $ENV_VAR</p> - <li style="list-style: none"> - <p class="Code"> </p> + <p class="Code"> last_resort_value</p> - <p class="Code">expand(VAR_NAME) {</p> + <p class="Code">}</p> + </blockquote> - <p class="Code"> $ENV_VAR</p> + </div> - <p class="Code"> 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"> </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"> lit_libs += qt-mt230nc</p> - <p class="Code">} else {</p> + <p class="Code">specific(prop:windows) {</p> - <p class="Code"> lit_libs += qt-mt</p> + <p class="Code"> lit_libs += qt-mt230nc</p> - <p class="Code">}</p> + <p class="Code">} else {</p> - <p class="Code"> </p> - </li> + <p class="Code"> 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 ’!’) - 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 ’!’) + 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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body">Yes</p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body">Yes</p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body">Yes</p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body">Yes</p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </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(<project type|property> [, - <project type|property> ...]) {</p> + <blockquote> + <p class="Code"> </p> - <p class="Code"> source1.cpp</p> + <p class="Code"> + conditional(<project type|property> [, + <project type|property> ...]) { + </p> - <p class="Code"> ...</p> + <p class="Code"> source1.cpp</p> - <p class="Code">}</p> + <p class="Code"> ...</p> - <p class="Code"> </p> + <p class="Code">}</p> - <p class="Code">conditional(<project type|property> [, - <project type|property> ...]) {</p> - <p class="Code"> source1.cpp</p> - <p class="Code"> ...</p> + <p class="Code"> + conditional(<project type|property> [, + <project type|property> ...]) { + </p> - <p class="Code">} else {</p> + <p class="Code"> source1.cpp</p> - <p class="Code"> source2.cpp</p> + <p class="Code"> ...</p> - <p class="Code"> ...</p> + <p class="Code">} else {</p> - <p class="Code">}</p> + <p class="Code"> source2.cpp</p> - <p class="Code"> </p> - </li> + <p class="Code"> ...</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 ’!’) 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 ’!’) which will + cause the conditional to be evaluated for all types except the + type specified. + </p> - <li style="list-style: none"> - <p class="Code"> </p> + </div> - <p class="Code">project {</p> + <div> + <a name="Custom_Types_and_Build_Rules"></a> - <p class="Code"> Define_Custom(MOC) {</p> + <h6 class="Head5">Custom Types and Build Rules</h6> - <p class="Code"> automatic = 0</p> - <p class="Code"> 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"> output_option = - -o</p> + <blockquote> - <p class="Code"> inputext = .h</p> + <p class="Code">project {</p> - <p class="Code"> pre_extension = - _moc</p> + <p class="Code"> Define_Custom(MOC) {</p> - <p class="Code"> source_outputext = - .cpp</p> + <p class="Code"> automatic = 0</p> - <p class="Code"> keyword mocflags = - commandflags</p> + <p class="Code"> + command = + $(QTDIR)/bin/moc + </p> - <p class="Code"> }</p> + <p class="Code"> + output_option = + -o + </p> - <p class="Code"> </p> + <p class="Code"> inputext = .h</p> - <p class="Code"> // Custom Component</p> + <p class="Code"> + pre_extension = + _moc + </p> - <p class="Code"> MOC_Files {</p> + <p class="Code"> + source_outputext = + .cpp + </p> - <p class="Code"> QtReactor.h</p> + <p class="Code"> + keyword mocflags = + commandflags + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> Source_Files {</p> + <p class="Code"> // Custom Component</p> - <p class="Code"> QtReactor_moc.cpp</p> + <p class="Code"> MOC_Files {</p> - <p class="Code"> }</p> + <p class="Code"> QtReactor.h</p> - <p class="Code">}</p> + <p class="Code"> }</p> - <p class="Code"> </p> - </li> + <p class="Code"> </p> - <li class="Body">The above example defines a custom file type, - “<em class="Code">MOC</em> ”, 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"> Source_Files {</p> + + <p class="Code"> QtReactor_moc.cpp</p> + + <p class="Code"> }</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"> </p> + </blockquote> + + <p class="Body"> + The above example defines a custom file type, + “<em class="Code">MOC</em> ”, 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 - <name></em></p> - </td> - - <td rowspan="1" colspan="1"> - <p class="Tbl-Body">This is a special assignment that - allows the user to map <name> 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 + <name> + </em> + </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> + This is a special assignment that + allows the user to map <name> 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 - “automatic” 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 + “automatic” 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">>></em> construct.</li> - - <li class="Body">Below is an example that demonstrates the use - of <em class="Code">>></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"> </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">>></em> construct. + </p> + + <p class="Body"> + Below is an example that demonstrates the use + of <em class="Code">>></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"> Define_Custom(Quogen) {</p> + + <p class="Code"> automatic = 0</p> + + <p class="Code"> command = perl quogen.pl</p> - <p class="Code"> Define_Custom(Quogen) {</p> - - <p class="Code"> automatic = 0</p> - - <p class="Code"> command = perl quogen.pl</p> - - <p class="Code"> commandflags = --debuglevel=1 - --language=c++ \</p> + <p class="Code"> + commandflags = --debuglevel=1 + --language=c++ \ + </p> - <p class="Code"> - --kernel_language=c++</p> + <p class="Code"> + --kernel_language=c++ + </p> - <p class="Code"> inputext = .prp</p> + <p class="Code"> inputext = .prp</p> - <p class="Code"> keyword quogenflags = - commandflags</p> + <p class="Code"> + keyword quogenflags = + commandflags + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> Quogen_Files {</p> + <p class="Code"> Quogen_Files {</p> - <p class="Code"> foo.prp >> - hello.h hello.cpp</p> + <p class="Code"> + foo.prp >> + hello.h hello.cpp + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> Source_Files {</p> + <p class="Code"> Source_Files {</p> - <p class="Code"> hello.cpp</p> + <p class="Code"> hello.cpp</p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> - </li> + <p class="Code"> </p> + </blockquote> - <li class="Body">You can use the <em class="Code"><<</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"><<</em> foo.in as shown below.</li> + <p class="Body"> + You can use the <em class="Code"><<</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"><<</em> foo.in as shown below. + </p> - <li style="list-style: none"> - <p class="Code"> </p> + <blockquote> - <p class="Code">Quogen_Files {</p> + <p class="Code">Quogen_Files {</p> - <p class="Code"> foo.prp >> hello.h - hello.cpp << foo.in</p> + <p class="Code"> + foo.prp >> hello.h + hello.cpp << foo.in + </p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> - </li> + <p class="Code"> </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"> </p> + <blockquote> - <p class="Code">project {</p> + <p class="Code">project {</p> - <p class="Code"> Define_Custom(TEST) {</p> + <p class="Code"> Define_Custom(TEST) {</p> - <p class="Code"> optional(keyword) - {</p> + <p class="Code"> + optional(keyword) + { + </p> - <p class="Code"> - flag_keyword(option) += - value [, value]</p> + <p class="Code"> + flag_keyword(option) += + value [, value] + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> }</p> + <p class="Code"> }</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"> </p> + <blockquote> - <p class="Code">Define_Custom(IDL) {</p> + <p class="Code">Define_Custom(IDL) {</p> - <p class="Code"> ...</p> + <p class="Code"> ...</p> - <p class="Code"> inputext = .idl</p> + <p class="Code"> inputext = .idl</p> - <p class="Code"> source_pre_extension = C, S</p> + <p class="Code"> source_pre_extension = C, S</p> - <p class="Code"> header_pre_extension = C, S</p> + <p class="Code"> header_pre_extension = C, S</p> - <p class="Code"> inline_pre_extension = C, S</p> + <p class="Code"> inline_pre_extension = C, S</p> - <p class="Code"> source_outputext = .cpp, .cxx, - .cc, .C</p> + <p class="Code"> + source_outputext = .cpp, .cxx, + .cc, .C + </p> - <p class="Code"> header_outputext = .h, .hpp, - .hxx, .hh</p> + <p class="Code"> + header_outputext = .h, .hpp, + .hxx, .hh + </p> - <p class="Code"> inline_outputext = .inl, .i</p> + <p class="Code"> inline_outputext = .inl, .i</p> - <p class="Code"> keyword idlflags = - commandflags</p> + <p class="Code"> + keyword idlflags = + commandflags + </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> optional(source_pre_extension) - {</p> + <p class="Code"> + optional(source_pre_extension) + { + </p> - <p class="Code"> commandflags(-GA) += - A</p> + <p class="Code"> + commandflags(-GA) += + A + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> optional(template_outputext) - {</p> + <p class="Code"> + optional(template_outputext) + { + </p> - <p class="Code"> commandflags(!-Sc) += - S_T.cpp, S_T.cxx, S_T.cc, S_T.C</p> + <p class="Code"> + commandflags(!-Sc) += + S_T.cpp, S_T.cxx, S_T.cc, S_T.C + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> optional(header_pre_extension) - {</p> + <p class="Code"> + optional(header_pre_extension) + { + </p> - <p class="Code"> commandflags(!-Sc) += - S_T</p> + <p class="Code"> + commandflags(!-Sc) += + S_T + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> optional(inline_pre_extension) - {</p> + <p class="Code"> + optional(inline_pre_extension) + { + </p> - <p class="Code"> commandflags(!-Sc) += - S_T</p> + <p class="Code"> + commandflags(!-Sc) += + S_T + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> - </li> + <p class="Code"> </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"> </p> + <blockquote> - <p class="Code">MOC_Files {</p> + <p class="Code">MOC_Files {</p> - <p class="Code"> commandflags += -nw</p> + <p class="Code"> commandflags += -nw</p> - <p class="Code"> gendir = moc_generated</p> + <p class="Code"> gendir = moc_generated</p> - <p class="Code"> QtReactor.h</p> + <p class="Code"> QtReactor.h</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">Source_Files {</p> + <p class="Code">Source_Files {</p> - <p class="Code"> - moc_generated/QtReactor_moc.cpp</p> + <p class="Code"> + moc_generated/QtReactor_moc.cpp + </p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </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"> </p> + <blockquote> - <p class="Code">project: taoidldefaults {</p> + <p class="Code">project: taoidldefaults {</p> - <p class="Code"> specific(!automake) {</p> + <p class="Code"> specific(!automake) {</p> - <p class="Code"> tao_idlflags += -Sc - -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp</p> + <p class="Code"> + tao_idlflags += -Sc + -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> // This allows "make idl_stubs" - to work</p> + <p class="Code"> + // This allows "make idl_stubs" + to work + </p> - <p class="Code"> verbatim(gnuace, macros) {</p> + <p class="Code"> verbatim(gnuace, macros) {</p> - <p class="Code"> IDL_CLIENT_HDR_EXT - ?= .h</p> + <p class="Code"> + IDL_CLIENT_HDR_EXT + ?= .h + </p> - <p class="Code"> IDL_CLIENT_INL_EXT - ?= .i</p> + <p class="Code"> + IDL_CLIENT_INL_EXT + ?= .i + </p> - <p class="Code"> IDL_CLIENT_SRC_EXT - ?= .cpp</p> + <p class="Code"> + IDL_CLIENT_SRC_EXT + ?= .cpp + </p> - <p class="Code"> IDL_SERVER_HDR_EXT - ?= _s.h</p> + <p class="Code"> + IDL_SERVER_HDR_EXT + ?= _s.h + </p> - <p class="Code"> IDL_SERVER_INL_EXT - ?= _s.i</p> + <p class="Code"> + IDL_SERVER_INL_EXT + ?= _s.i + </p> - <p class="Code"> IDL_SERVER_SRC_EXT - ?= _s.cpp</p> + <p class="Code"> + IDL_SERVER_SRC_EXT + ?= _s.cpp + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> </p> + <p class="Code"> </p> + + <p class="Code"> Modify_Custom(IDL) {</p> + + <p class="Code"> + source_pre_extension = , _s + </p> + + <p class="Code"> + header_pre_extension = , _s + </p> + + <p class="Code"> + inline_pre_extension = , _s + </p> + + <p class="Code"> + inline_outputext + = .i + </p> + + <p class="Code"> }</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"><%</em> and <em class= + "Code">%></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"><%input%></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"><%input_basename%></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"><%input_dirname%></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"><%input_noext%></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"><%input_ext%></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"><%output%></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"><%output_basename%></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"><%output_dirname%></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"><%output_noext%></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"><%output_ext%></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"><%documentation_file%></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"><%header_file%></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"><%inline_file%></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"><%resource_file%></em> (<em class= + "TableCode"><%resx_file%></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"><%source_file%></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"><%template_file%></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"><%documentation_file_noext%></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"><%header_file_noext%></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"><%inline_file_noext%></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"><%resource_file_noext%></em> + (<em class="TableCode"><%resx_file_noext%></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"><%source_file_noext%></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"><%template_file_noext%></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"><%input_ext%></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"><%output_ext%></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"><%and%></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"><%cat%></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"><%cmdsep%></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"><%cat%></em> and <em class= + "Code"><%mv%></em> commands would be run. + <em class="Code"> + <%cat%> <%source_file%> + <%gt%> foo <%cmdsep%> <%mv%> foo + other_dir + </em> + </p> + </td> + </tr> + + <tr> + <td rowspan="1" colspan="1"> + <p class="TblCode"> + <em class= + "TableCode"><%cmp%></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"><%cp%></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"><%crlf%></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"><%equote%></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"><%gendir%></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"><%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%></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"><%mkdir%></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"><%mv%></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"><%nul%></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"><%pathsep%></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"><%or%></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"><%os%></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"><%prj_type%></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"><%quote%></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"><%rm%></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"><%rmdir%></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"><%slash%></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"><%temporary%></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"><%bat%></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"><%cmd%></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"><%exe%></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"> 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 ’!’ 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"> includes += $(ZIPARCHIVEROOT)</p> + + <p class="Code"> + libpaths += + $(ZIPARCHIVEROOT)/lib + </p> + + <p class="Code"> + libs += + ziparch + </p> + + <p class="Code">}</p> + + <p class="Code"> </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"> - source_pre_extension = , _s</p> + Auto_Disconnect.h Low_Priority_Setup.cpp + RTEC_Initializer.h + </p> <p class="Code"> - header_pre_extension = , _s</p> + Auto_Disconnect.inl Low_Priority_Setup.h + rtec_perf_export.h + </p> <p class="Code"> - inline_pre_extension = , _s</p> + Auto_Functor.cpp Low_Priority_Setup.inl + RTEC_Perf.mpc + </p> - <p class="Code"> inline_outputext - = .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"> sharedname = TAO_RTEC_Perf</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"> + dllflags += + TAO_RTEC_PERF_BUILD_DLL + </p> + + <p class="Code"> </p> + + <p class="Code"> Template_Files {</p> + + <p class="Code"> Auto_Disconnect.cpp</p> + + <p class="Code"> Auto_Functor.cpp</p> + + <p class="Code"> + Low_Priority_Setup.cpp + </p> + + <p class="Code"> RIR_Narrow.cpp</p> + + <p class="Code"> Servant_var.cpp</p> + + <p class="Code"> Shutdown.cpp</p> + + <p class="Code"> Task_Activator.cpp</p> <p class="Code"> }</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"> Auto_Disconnect.cpp</p> + + <p class="Code"> Auto_Functor.cpp</p> + + <p class="Code"> Low_Priority_Setup.cpp</p> + + <p class="Code"> RIR_Narrow.cpp</p> + + <p class="Code"> Servant_var.cpp</p> + + <p class="Code"> Shutdown.cpp</p> + + <p class="Code"> 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’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"><% %></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"><% %></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"><%</em> and <em class= - "Code">%></em> are part of the syntax.</li> + <p class="Code"> + <%if(exename)%>BIN = + <%exename%><%else%>LIB = + <%sharedname%><%endif%> + </p> + + + </blockquote> + + <p class="Body"> + is equivalent to:</li> + + <blockquote> + + <p class="Code"><%if(exename)%></p> + + <p class="Code">BIN = <%exename%></p> + + <p class="Code"><%else%></p> + + <p class="Code">LIB = <%sharedname%></p> + + <p class="Code"><%endif%></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=<%foreach(fvar, idl_files source_files + header_files)%> <%fvar%><%endfor%> + </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 ’<em class="Code">s</em> ’ removed. + </p> + + <blockquote> + + <p class="Code"> + FILES=<%foreach(idl_files source_files + header_files)%> <%idl_file%><%endfor%> + </p> + + + </blockquote> + + <p class="Body"> + Note that the <em class= + "Code"><%idl_file%></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 ’<em class= + "Code">s</em> ’, 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"> + <%foreach(filelist)%> + <%filelist%><%endfor%> + </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"><%input%></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"><%input_basename%></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"><%input_dirname%></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"><%input_noext%></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"><%input_ext%></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"><%output%></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"><%output_basename%></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"><%output_dirname%></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"><%output_noext%></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"><%output_ext%></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"><%documentation_file%></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"><%header_file%></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"><%inline_file%></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"><%resource_file%></em> (<em class= - "TableCode"><%resx_file%></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"><%source_file%></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"><%template_file%></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"><%documentation_file_noext%></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"><%header_file_noext%></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"><%inline_file_noext%></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"><%resource_file_noext%></em> - (<em class="TableCode"><%resx_file_noext%></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"><%source_file_noext%></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"><%template_file_noext%></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"><%input_ext%></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"><%output_ext%></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"><%marker(local)%></em>. + </p> </td> </tr> - </table> - </li> - - <li class="Body"> </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"><%and%></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"><%cat%></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"><%cmdsep%></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"><%cat%></em> and <em class= - "Code"><%mv%></em> commands would be run. - <em class="Code"><%cat%> <%source_file%> - <%gt%> foo <%cmdsep%> <%mv%> 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"><%cmp%></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"><%cp%></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"><%crlf%></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"><%equote%></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"><%gendir%></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"><%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%></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"><%mkdir%></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"><%mv%></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"><%nul%></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"><%temporary%></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"><%pathsep%></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"><%or%></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"><%os%></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"><%prj_type%></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"><%quote%></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"><%rm%></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"><%rmdir%></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"><%slash%></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"><%temporary%></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"><%bat%></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"><%cmd%></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"><%exe%></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"> </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"> </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 ’!’ 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"> </p> - - <p class="Code">// ziparchive.mpb</p> - - <p class="Code">feature(ziparchive) {</p> - - <p class="Code"> includes += $(ZIPARCHIVEROOT)</p> - - <p class="Code"> libpaths += - $(ZIPARCHIVEROOT)/lib</p> - - <p class="Code"> libs += - ziparch</p> - - <p class="Code">}</p> - - <p class="Code"> </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"> </p> - - <p class="Code">project: taoserver {</p> - - <p class="Code">}</p> - - <p class="Code"> </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"> </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"> </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"> </p> - - <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent, - minimum_corba {</p> - - <p class="Code"> sharedname = TAO_RTEC_Perf</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"> dllflags += - TAO_RTEC_PERF_BUILD_DLL</p> - - <p class="Code"> </p> - - <p class="Code"> Template_Files {</p> - - <p class="Code"> Auto_Disconnect.cpp</p> - - <p class="Code"> Auto_Functor.cpp</p> - - <p class="Code"> - Low_Priority_Setup.cpp</p> - - <p class="Code"> RIR_Narrow.cpp</p> - - <p class="Code"> Servant_var.cpp</p> - - <p class="Code"> Shutdown.cpp</p> - - <p class="Code"> Task_Activator.cpp</p> - - <p class="Code"> }</p> - - <p class="Code">}</p> - - <p class="Code"> </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"> </p> - - <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent, - minimum_corba {</p> - - <p class="Code"> </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"> </p> - - <p class="Code">sharedname = TAO_RTEC_Perf</p> - - <p class="Code"> </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"> </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"> </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"> </p> - - <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p> - - <p class="Code"> </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"> </p> - - <p class="Code">Template_Files {</p> - - <p class="Code"> Auto_Disconnect.cpp</p> - - <p class="Code"> Auto_Functor.cpp</p> - - <p class="Code"> Low_Priority_Setup.cpp</p> - - <p class="Code"> RIR_Narrow.cpp</p> - - <p class="Code"> Servant_var.cpp</p> - - <p class="Code"> Shutdown.cpp</p> - - <p class="Code"> Task_Activator.cpp</p> - - <p class="Code">}</p> - - <p class="Code"> </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’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"><% %></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"><% %></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"> </p> - - <p class="Code"><%if(exename)%>BIN = - <%exename%><%else%>LIB = - <%sharedname%><%endif%></p> - - <p class="Code"> </p> - </li> - - <li class="Body">is equivalent to:</li> - - <li style="list-style: none"> - <p class="Code"> </p> - - <p class="Code"><%if(exename)%></p> - - <p class="Code">BIN = <%exename%></p> - - <p class="Code"><%else%></p> - - <p class="Code">LIB = <%sharedname%></p> - - <p class="Code"><%endif%></p> - - <p class="Code"> </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"> </p> - - <p class="Code">FILES=<%foreach(fvar, idl_files source_files - header_files)%> <%fvar%><%endfor%></p> - - <p class="Code"> </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 ’<em class="Code">s</em> ’ removed.</li> - - <li style="list-style: none"> - <p class="Code"> </p> - - <p class="Code">FILES=<%foreach(idl_files source_files - header_files)%> <%idl_file%><%endfor%></p> - - <p class="Code"> </p> - </li> - - <li class="Body">Note that the <em class= - "Code"><%idl_file%></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 ’<em class= - "Code">s</em> ’, 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"> </p> - - <p class="Code"><%foreach(filelist)%> - <%filelist%><%endfor%></p> - - <p class="Code"> </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"><%marker(local)%></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"><%temporary%></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"> </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 <template> + [<html output> [language]] + </p> - <p class="Code">Usage: document_template.pl <template> - [<html output> [language]]</p> + <p class="Code"> </p> - <p class="Code"> </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"> + + extension replaced with + .html. + </p> - <p class="Code"> - extension replaced with - .html.</p> + <p class="Code"> + language - This defaults to + the language for which the template is designed. + </p> - <p class="Code">language - This defaults to - the language for which the template is designed.</p> + <p class="Code"> + + It can be any of the valid + language settings for MPC: + </p> - <p class="Code"> - It can be any of the valid - language settings for MPC:</p> + <p class="Code"> + + cplusplus csharp java + vb + </p> + </blockquote> - <p class="Code"> - 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">-></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->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->input_file->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"> </p> - - <p class="Code"><%if(custom_types)%></p> - - <p class="Code"><%foreach(custom_types)%></p> - - <p class="Code"> - <%foreach(custom_type->input_files)%></p> + <blockquote> - <p class="Code"> - <%foreach(custom_type->input_file->output_files)%></p> + <p class="Code"><%if(custom_types)%></p> - <p class="Code"> - <%custom_type->input_file->output_file%>: - <%custom_type->input_file%></p> + <p class="Code"><%foreach(custom_types)%></p> - <p class="Code"> - <%custom_type->command%> - <%custom_type->commandflags%> $@</p> - - <p class="Code"> </p> - - <p class="Code"><%endfor%></p> - - <p class="Code"><%endfor%></p> - - <p class="Code"><%endfor%></p> - - <p class="Code"><%endif%></p> - - <p class="Code"> </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->input_file->commands</em> is - non-empty. If it isn't empty, the values in it can be iterated - over with a <em class="Code"><%foreach%></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->input_file-></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"> + <%foreach(custom_type->input_files)%> </p> - </td> - </tr> - - <tr> - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"><em class= - "TableCode">command->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->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"> + <%foreach(custom_type->input_file->output_files)%> </p> - </td> - </tr> - <tr> - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"><em class= - "TableCode">command->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"> + <%custom_type->input_file->output_file%>: + <%custom_type->input_file%> </p> - </td> - </tr> - <tr> - <td rowspan="1" colspan="1"> - <p class="Tbl-Body"><em class= - "TableCode">command->gdir</em></p> - </td> + <p class="Code"> + <%custom_type->command%> + <%custom_type->commandflags%> $@ + </p> - <td rowspan="1" colspan="1"> - <p class="Tbl-Body">The <em class= + <p class="Code"> </p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endif%></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->input_file->commands</em> is + non-empty. If it isn't empty, the values in it can be iterated + over with a <em class="Code"><%foreach%></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->input_file-></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->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->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->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->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"> </p> + <blockquote> - <p class="Code"><%if(grouped_source_files)%></p> + <p class="Code"><%if(grouped_source_files)%></p> - <p class="Code"><%comment(Get back each set of grouped - files)%></p> + <p class="Code"> + <%comment(Get back each set of grouped + files)%> + </p> - <p class="Code"><%foreach(grouped_source_files)%></p> + <p class="Code"><%foreach(grouped_source_files)%></p> - <p class="Code"><%comment(This will provide the name of - the group)%></p> + <p class="Code"> + <%comment(This will provide the name of + the group)%> + </p> - <p class="Code"><%grouped_source_file%> = \</p> + <p class="Code"><%grouped_source_file%> = \</p> - <p class="Code"><%comment(Get all the source files in a - single group)%></p> + <p class="Code"> + <%comment(Get all the source files in a + single group)%> + </p> - <p class="Code"> - <%foreach(grouped_source_file->files)%></p> + <p class="Code"> + <%foreach(grouped_source_file->files)%> + </p> - <p class="Code"> - <%grouped_source_file->file)%><%fornotlast(" - \\")%></p> + <p class="Code"> + <%grouped_source_file->file)%><%fornotlast(" + \\")%> + </p> - <p class="Code"><%endfor%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code"><%endfor%></p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">ifndef - <%grouped_source_files->component_name%></p> + <p class="Code"> + ifndef + <%grouped_source_files->component_name%> + </p> - <p class="Code"> - <%grouped_source_files->component_name%> = \</p> + <p class="Code"> + <%grouped_source_files->component_name%> = \ + </p> - <p class="Code"><%foreach(grouped_source_files)%></p> + <p class="Code"><%foreach(grouped_source_files)%></p> - <p class="Code"> - <%grouped_source_file%><%fornotlast(" - \\")%></p> + <p class="Code"> + <%grouped_source_file%><%fornotlast(" + \\")%> + </p> - <p class="Code"><%endfor%></p> + <p class="Code"><%endfor%></p> - <p class="Code">endif</p> + <p class="Code">endif</p> - <p class="Code"><%endif%></p> + <p class="Code"><%endif%></p> - <p class="Code"> </p> - </li> - </ul> - </div> - </div> + <p class="Code"> </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"> </p> + <p class="Code">variable_name += another_value</p> + + <p class="Code"> </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"> </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"> </p> + <p class="Code">common_defines = WIN32 _CONSOLE</p> - <p class="Code">// mpt file</p> + <p class="Code"> </p> - <p class="Code">configurations = Release Debug</p> + <p class="Code">Release {</p> - <p class="Code">common_defines = WIN32 _CONSOLE</p> + <p class="Code"> + compile_flags = /W3 /GX /O2 /MD + /GR + </p> - <p class="Code"> </p> + <p class="Code"> defines = NDEBUG</p> - <p class="Code">Release {</p> + <p class="Code">}</p> - <p class="Code"> compile_flags = /W3 /GX /O2 /MD - /GR</p> + <p class="Code"> </p> - <p class="Code"> defines = NDEBUG</p> + <p class="Code">Debug {</p> - <p class="Code">}</p> + <p class="Code"> + compile_flags = /W3 /Gm /GX /Zi /Od + /MDd /GR /Gy + </p> - <p class="Code"> </p> + <p class="Code"> defines = _DEBUG</p> - <p class="Code">Debug {</p> + <p class="Code">}</p> - <p class="Code"> compile_flags = /W3 /Gm /GX /Zi /Od - /MDd /GR /Gy</p> + <p class="Code"> </p> - <p class="Code"> defines = _DEBUG</p> + <p class="Code">conditional_include "vcfullmacros"</p> - <p class="Code">}</p> + <p class="Code"> </p> + </blockquote> - <p class="Code"> </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"> </p> - </li> + <p class="Code"><%foreach(configurations)%></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 = <%configuration%></p> - <li style="list-style: none"> - <p class="Code"> </p> + <p class="Code"> + <%compile_flags%><%foreach(defines + common_defines)%> /D <%define%>=1<%endfor%> + </p> - <p class="Code"><%foreach(configurations)%></p> + <p class="Code"> </p> - <p class="Code">Name = <%configuration%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%compile_flags%><%foreach(defines - common_defines)%> /D <%define%>=1<%endfor%></p> - <p class="Code"> </p> + </blockquote> - <p class="Code"><%endfor%></p> + <p class="Body"> + The following output is generated from the above + example: + </p> - <p class="Code"> </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"> </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"> </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"> </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"> </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"> + </li> - <li class="Body"> </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"> </p> - <p class="Code"> </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"> </p> - <p class="Code"> </p> + <p class="Code">// Section 2 - MAKEFILE</p> - <p class="Code">// Section 2 - MAKEFILE</p> + <p class="Code">Makefile.<%project_name%></p> - <p class="Code">Makefile.<%project_name%></p> + <p class="Code"> </p> - <p class="Code"> </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"> </p> - <p class="Code"> </p> + <p class="Code">// Section 4 - TARGET FILE</p> - <p class="Code">// Section 4 - TARGET FILE</p> + <p class="Code"><%if(exename)%></p> - <p class="Code"><%if(exename)%></p> + <p class="Code"><%exename%></p> - <p class="Code"><%exename%></p> + <p class="Code"><%else%></p> - <p class="Code"><%else%></p> + <p class="Code"><%if(sharedname)%></p> - <p class="Code"><%if(sharedname)%></p> + <p class="Code"><%sharedname%></p> - <p class="Code"><%sharedname%></p> + <p class="Code"><%else%></p> - <p class="Code"><%else%></p> + <p class="Code"><%if(staticname)%></p> - <p class="Code"><%if(staticname)%></p> + <p class="Code"><%staticname%></p> - <p class="Code"><%staticname%></p> + <p class="Code"><%endif%></p> - <p class="Code"><%endif%></p> + <p class="Code"><%endif%></p> - <p class="Code"><%endif%></p> + <p class="Code"><%endif%></p> - <p class="Code"><%endif%></p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 5 - SOURCE FILES</p> - <p class="Code">// Section 5 - SOURCE FILES</p> + <p class="Code"><%foreach(source_files)%></p> - <p class="Code"><%foreach(source_files)%></p> + <p class="Code"><%source_file%></p> - <p class="Code"><%source_file%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code">//end-srcfiles</p> - <p class="Code">//end-srcfiles</p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p> - <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p> + <p class="Code"><%foreach(includes)%></p> - <p class="Code"><%foreach(includes)%></p> + <p class="Code"><%include%></p> - <p class="Code"><%include%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code">//end-include-dirs</p> - <p class="Code">//end-include-dirs</p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p> - <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p> + <p class="Code"><%foreach(libpaths)%></p> - <p class="Code"><%foreach(libpaths)%></p> + <p class="Code"><%libpath%></p> - <p class="Code"><%libpath%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code">//end-library-dirs</p> - <p class="Code">//end-library-dirs</p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 8 - DEFINITIONS</p> - <p class="Code">// Section 8 - DEFINITIONS</p> + <p class="Code"><%foreach(macros defines)%></p> - <p class="Code"><%foreach(macros defines)%></p> + <p class="Code">-D<%macro%></p> - <p class="Code">-D<%macro%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code"><%if(pch_header)%></p> - <p class="Code"><%if(pch_header)%></p> + <p class="Code"><%foreach(pch_defines)%></p> - <p class="Code"><%foreach(pch_defines)%></p> + <p class="Code">-D<%pch_define%></p> - <p class="Code">-D<%pch_define%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code"><%endif%></p> - <p class="Code"><%endif%></p> + <p class="Code">//end-defs</p> - <p class="Code">//end-defs</p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 9 - C FLAGS</p> - <p class="Code">// Section 9 - C FLAGS</p> + <p class="Code"><%cflags("-g")%></p> - <p class="Code"><%cflags("-g")%></p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 10 - LIBRARY FLAGS</p> - <p class="Code">// Section 10 - LIBRARY FLAGS</p> + <p class="Code"><%libflags%></p> - <p class="Code"><%libflags%></p> + <p class="Code"> </p> - <p class="Code"> </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"> </p> - <p class="Code"> </p> + <p class="Code">// Section 12 - OBJ DIRECTORY</p> - <p class="Code">// Section 12 - OBJ DIRECTORY</p> + <p class="Code"><%objdir(".")%></p> - <p class="Code"><%objdir(".")%></p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 13 - BIN DIRECTORY</p> - <p class="Code">// Section 13 - BIN DIRECTORY</p> + <p class="Code"> + <%if(exeout)%><%exeout%><%else%>.<%endif%> + </p> - <p class="Code"> - <%if(exeout)%><%exeout%><%else%>.<%endif%></p> + <p class="Code"> </p> - <p class="Code"> </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"><%marker(top)%></p> - <p class="Code"><%marker(top)%></p> + <p class="Code"><%marker(macros)%></p> - <p class="Code"><%marker(macros)%></p> + <p class="Code"><%marker(local)%></p> - <p class="Code"><%marker(local)%></p> + <p class="Code"><%marker(bottom)%></p> - <p class="Code"><%marker(bottom)%></p> + <p class="Code">//end-user-targets</p> - <p class="Code">//end-user-targets</p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code">// Section 15 - LIBRARY FILES</p> - <p class="Code">// Section 15 - LIBRARY FILES</p> + <p class="Code"><%foreach(libs lit_libs pure_libs)%></p> - <p class="Code"><%foreach(libs lit_libs pure_libs)%></p> + <p class="Code"><%lib%></p> - <p class="Code"><%lib%></p> + <p class="Code"><%endfor%></p> - <p class="Code"><%endfor%></p> + <p class="Code">//end-library-files</p> - <p class="Code">//end-library-files</p> - <p class="Code"> </p> - </li> + </blockquote> - <li class="Body">Note that output is generated differently - depending upon whether <em class="Code"><%exename%></em>, - <em class="Code"><%sharedname%></em> or <em class= + <p class="Body"> + Note that output is generated differently + depending upon whether <em class="Code"><%exename%></em>, + <em class="Code"><%sharedname%></em> or <em class= "Code"><%staticname%></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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </p> - <p class="Code">use strict;</p> + <p class="Code">use strict;</p> - <p class="Code"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </p> - <p class="Code">sub convert_slashes {</p> + <p class="Code">sub convert_slashes {</p> - <p class="Code"> #my $self = shift;</p> + <p class="Code"> #my $self = shift;</p> - <p class="Code"> return 0;</p> + <p class="Code"> return 0;</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">sub project_file_extension {</p> + <p class="Code">sub project_file_extension {</p> - <p class="Code"> #my $self = shift;</p> + <p class="Code"> #my $self = shift;</p> - <p class="Code"> return '.fic';</p> + <p class="Code"> return '.fic';</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </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"> #my $self = shift;</p> + <p class="Code"> #my $self = shift;</p> - <p class="Code"> return 'fictionalexe';</p> + <p class="Code"> return 'fictionalexe';</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">sub get_dll_template_input_file {</p> + <p class="Code">sub get_dll_template_input_file {</p> - <p class="Code"> #my $self = shift;</p> + <p class="Code"> #my $self = shift;</p> - <p class="Code"> return 'fictionaldll';</p> + <p class="Code"> return 'fictionaldll';</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">sub get_template {</p> + <p class="Code">sub get_template {</p> - <p class="Code"> #my $self = shift;</p> + <p class="Code"> #my $self = shift;</p> - <p class="Code"> return 'fictional';</p> + <p class="Code"> return 'fictional';</p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">1;</p> + <p class="Code">1;</p> - <p class="Code"> </p> - </li> + <p class="Code"> </p> + </blockquote> - <li class="Body">In our example, we inherit from the - MakeProjectBase which provides some methods that are common to - all “make” based project creators.</li> + <p class="Body"> + In our example, we inherit from the + MakeProjectBase which provides some methods that are common to + all “make” 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 “Virtual Methods To Be Overridden” - 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 “Virtual Methods To Be Overridden” + 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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </p> - <p class="Code">use strict;</p> + <p class="Code">use strict;</p> - <p class="Code"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </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"> </p> + <p class="Code"> </p> - <p class="Code">sub workspace_file_name {</p> + <p class="Code">sub workspace_file_name {</p> - <p class="Code"> my $self = shift;</p> + <p class="Code"> my $self = shift;</p> - <p class="Code"> return - $self->get_modified_workspace_name($self->get_workspace_name(), - '.fws');</p> + <p class="Code"> + return + $self->get_modified_workspace_name($self->get_workspace_name(), + '.fws'); + </p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">sub pre_workspace {</p> + <p class="Code">sub pre_workspace {</p> - <p class="Code"> my($self, $fh) = @_;</p> + <p class="Code"> my($self, $fh) = @_;</p> - <p class="Code"> my $crlf = $self->crlf();</p> + <p class="Code"> my $crlf = $self->crlf();</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> print $fh '<?xml version="1.0" - encoding="UTF-8"?>', $crlf,</p> + <p class="Code"> + print $fh '<?xml version="1.0" + encoding="UTF-8"?>', $crlf, + </p> - <p class="Code"> - '<!-- - MPC Command -->', $crlf,</p> + <p class="Code"> + '<!-- + MPC Command -->', $crlf, + </p> - <p class="Code"> - "<!-- - $0 @ARGV -->", $crlf;</p> + <p class="Code"> + "<!-- + $0 @ARGV -->", $crlf; + </p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">sub write_comps {</p> + <p class="Code">sub write_comps {</p> - <p class="Code"> my($self, $fh) = @_;</p> + <p class="Code"> my($self, $fh) = @_;</p> - <p class="Code"> my $projects = - $self->get_projects();</p> + <p class="Code"> + my $projects = + $self->get_projects(); + </p> - <p class="Code"> my @list = - $self->sort_dependencies($projects);</p> + <p class="Code"> + my @list = + $self->sort_dependencies($projects); + </p> - <p class="Code"> my $crlf = $self->crlf();</p> + <p class="Code"> my $crlf = $self->crlf();</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> print $fh '<projects>', - $crlf;</p> + <p class="Code"> + print $fh '<projects>', + $crlf; + </p> - <p class="Code"> foreach my $project (@list) {</p> + <p class="Code"> foreach my $project (@list) {</p> - <p class="Code"> print $fh " <project - path=\"$project\"/>$crlf";</p> + <p class="Code"> + print $fh " <project + path=\"$project\"/>$crlf"; + </p> - <p class="Code"> }</p> + <p class="Code"> }</p> - <p class="Code"> print $fh - "</projects>$crlf";</p> + <p class="Code"> + print $fh + "</projects>$crlf"; + </p> - <p class="Code">}</p> + <p class="Code">}</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code">1;</p> + <p class="Code">1;</p> - <p class="Code"> </p> + <p class="Code"> </p> - <p class="Code"> </p> - </li> + <p class="Code"> </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%>
<%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)%>
<%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%>
<%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%> "<%custom_type->input_file%>"<%if(custom_type->input_file->command->outopt)%> <%custom_type->input_file->command->outopt%> "<%custom_type->input_file->command->outfile%>"<%endif%><%fornotlast(" && ")%><%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)%>"<%custom_type->input_file%>" <%custom_type->output_option%><%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%>"<%endfor%><%else%>"<%custom_type->input_file%>"<%endif%><%endif%><%if(flag_overrides(custom_type->input_file, postcommand))%><%foreach(custom_type->input_file)%> && <%flag_overrides(custom_type->input_file, postcommand)%><%endfor%><%else%><%if(custom_type->postcommand)%><%foreach(custom_type->input_file)%> && <%custom_type->postcommand%><%endfor%><%endif%><%endif%><%if(pch_header)%><%if(custom_type->pch_postrule)%><%foreach(custom_type->input_file->source_output_files)%> && echo #include "<%pch_header%>" > temporary.src && type "<%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%>" >> temporary.src && move /y temporary.src "<%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%>"<%endfor%><%endif%><%endif%></Command> + <Command Condition="'$(Configuration)|$(Platform)'=='<%configuration%>|<%platform%>'"><%if(custom_type->libpath)%>setlocal
PATH=%PATH%;<%custom_type->libpath%>
<%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)%>
<%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%>
<%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%> "<%custom_type->input_file%>"<%if(custom_type->input_file->command->outopt)%> <%custom_type->input_file->command->outopt%> "<%custom_type->input_file->command->outfile%>"<%endif%><%fornotlast(" && ")%><%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)%>"<%custom_type->input_file%>" <%custom_type->output_option%><%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%>"<%endfor%><%else%>"<%custom_type->input_file%>"<%endif%><%endif%><%if(flag_overrides(custom_type->input_file, postcommand))%><%foreach(custom_type->input_file)%> && <%flag_overrides(custom_type->input_file, postcommand)%><%endfor%><%else%><%if(custom_type->postcommand)%><%foreach(custom_type->input_file)%> && <%custom_type->postcommand%><%endfor%><%endif%><%endif%><%if(pch_header)%><%if(custom_type->pch_postrule)%><%foreach(custom_type->input_file->source_output_files)%> && echo #include "<%pch_header%>" > temporary.src && type "<%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%>" >> temporary.src && move /y temporary.src "<%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%>"<%endfor%><%endif%><%endif%><%if(custom_type->libpath)%>
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:"$(TargetDir)/$(TargetName).rel" + 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:"$(TargetDir)/$(TargetName).rel" + 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:"$(TargetDir)/$(TargetName).rel" + 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:"$(TargetDir)/$(TargetName).rel" + 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)%> |