summaryrefslogtreecommitdiff
path: root/modules/CIAO/bin/generate_component_mpc.pl
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/bin/generate_component_mpc.pl')
-rwxr-xr-xmodules/CIAO/bin/generate_component_mpc.pl307
1 files changed, 307 insertions, 0 deletions
diff --git a/modules/CIAO/bin/generate_component_mpc.pl b/modules/CIAO/bin/generate_component_mpc.pl
new file mode 100755
index 00000000000..dc02c0eba4b
--- /dev/null
+++ b/modules/CIAO/bin/generate_component_mpc.pl
@@ -0,0 +1,307 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# Create a MPC file content for a single component implementation.
+
+use Getopt::Std;
+
+##############################################################################
+# Grab the options
+
+$flags = join (" ", @ARGV);
+
+if (!getopts ('np:l:c:u:b:ho:') || $opt_h) {
+ print "generate_component_mpc.pl [-h] component_name\n";
+ print "\n";
+ print " -h print help message explaining various options\n";
+ print " -p Dependent component name\n";
+ print " -l Dependent component path (libpaths)\n";
+ print " -o Component output path (libout)\n";
+ print " -n Suppress component make/project\n";
+ print " -c Create a client makefile\n";
+ print " -u Unique project name prefix (if not defined, name for -p flag will be used). \n";
+ print " -b common base project(s) for all generated projects\n";
+ print "\n";
+ print "generate_component_mpc creates and save a minimum mpc file\n";
+ print "called $com_name.mpc that is needed for a single component implementation\n";
+ exit (1);
+}
+
+if ($#ARGV < 0) {
+ print STDERR "No component_name specified, use -h for help\n";
+ exit (1);
+}
+
+$com_name = shift @ARGV;
+$UCOM_NAME = uc $com_name;
+
+##############################################################################
+# Prologue
+
+if (defined $opt_b) {
+ $base_projs = ", $opt_b ";
+} else {
+ $base_projs = " ";
+}
+
+if (defined $opt_n) {
+ $svr_suffix = "_skel";
+}
+else {
+ $svr_suffix = "_svnt";
+}
+
+$USVR_SUFFIX = uc $svr_suffix;
+
+if (defined $opt_p) {
+ $stub_depend = "$opt_p".'_stub';
+ $lib_depend = "$opt_p".'_skel '."$opt_p".'_stub';
+
+ $svr_plibs ='\
+ '."$opt_p".'_skel \
+ '."$opt_p".'_stub';
+}
+else {
+ $svr_plibs = "";
+}
+
+$unique_prefix = "";
+
+if (defined $opt_u) {
+ $unique_prefix = "$opt_u" . "_";
+}
+elsif (defined $opt_p) {
+ $unique_prefix = "$opt_p" . "_";
+}
+
+if (defined $opt_p) {
+ $svr_p_after = "$opt_p".'_skel';
+}
+
+if (defined $opt_l) {
+ $lib_paths = "libpaths += $opt_l";
+}
+
+if (defined $opt_o) {
+ $lib_out = "libout = $opt_o";
+}
+
+if (defined $opt_c) {
+ $client_def =
+'project ('."$unique_prefix"."$opt_c".') : ccm_stub, valuetype ' . "$base_projs" . ' {
+ exename = '."$opt_c".'
+ after += '."$unique_prefix"."$com_name".'_stub
+ libs += '."$com_name".'_stub '."$stub_depend"."
+ $lib_paths"."
+ $lib_out".'
+ IDL_Files {
+ }
+
+ Source_Files {
+ '."$opt_c".'.cpp
+ }
+
+ Header_Files {
+ }
+
+ Inline_Files {
+ }
+}
+';
+}
+
+if (! defined $opt_n) {
+ $lem_gen =
+'
+project('."$unique_prefix"."$com_name".'_lem_gen) : ciaoidldefaults ' . "$base_projs" . ' {
+ after += '."$unique_prefix"."$com_name".'_idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro='."$UCOM_NAME".'_LEM_STUB_Export \
+ -Wb,stub_export_include='."$com_name".'_lem_stub_export.h \
+ -SS -Gxhst
+
+ IDL_Files {'."
+ $com_name".'E.idl
+ }
+}
+'.'
+project('."$unique_prefix"."$com_name".'_lem_stub) : ccm_svnt ' . "$base_projs" . ' {
+ after += '."$unique_prefix"."$com_name".'_lem_gen '."$unique_prefix"."$com_name".'_stub '."$stub_depend".'
+ libs += '."$stub_depend".' '."$com_name".'_stub'."
+ $lib_paths"."
+ $lib_out".'
+ sharedname = '."$com_name".'_lem_stub
+ dynamicflags = '."$UCOM_NAME".'_LEM_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ '."$com_name".'EC.cpp
+ }
+
+ Header_Files {
+ '."$com_name".'EC.h
+ '."$com_name".'_lem_stub_export.h
+ }
+
+ Inline_Files {
+ '."$com_name".'EC.inl
+ }
+}
+';
+
+ $component_def =
+'
+project('."$unique_prefix"."$com_name".'_exec) : ciao_executor ' . "$base_projs" . ' {
+ after += '."$unique_prefix"."$com_name".'_lem_stub '."$unique_prefix"."$com_name".'_stub
+ sharedname = '."$com_name".'_exec
+ libs += '."$com_name".'_stub '."$com_name".'_lem_stub '."$stub_depend
+ $lib_paths"."
+ $lib_out".'
+ dynamicflags = '."$UCOM_NAME".'_EXEC_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {'."
+ $com_name".'_exec.cpp
+ }
+
+ Header_Files {'."
+ $com_name".'_exec.h'."
+ $com_name".'_exec_export.h
+ }
+
+ Inline_Files {
+ }
+}
+';
+}
+
+$cli_idlflags =
+ 'idlflags += -Wb,stub_export_macro='."$UCOM_NAME".'_STUB_Export \
+ -Wb,stub_export_include='."$com_name".'_stub_export.h \
+ -Wb,skel_export_macro='."$UCOM_NAME"."$USVR_SUFFIX".'_Export \
+ -Wb,skel_export_include='."$com_name"."$svr_suffix".'_export.h \
+ -Wb,exec_export_macro='."$UCOM_NAME".'_EXEC_Export \
+ -Wb,exec_export_include='."$com_name".'_exec_export.h \
+ -Gxhex -Gxhsk -Gxhst'
+;
+
+$cli_base = "ccm_stub";
+$svr_base = "ciao_servant";
+$svr_after = "";
+
+$svr_libs = "$com_name".'_stub '. "$com_name".'_lem_stub ';
+
+if (defined $opt_n) {
+ $svr_after = "$unique_prefix"."$com_name".'_stub';
+
+ $svr_libs = "$com_name".'_stub
+';
+
+ $svr_src =
+'
+ '."$com_name".'S.cpp
+';
+
+ $svr_hdr =
+'
+ '."$com_name".'S.h
+ '."$com_name".'_skel_export.h
+';
+
+ $svr_base = "ciao_executor";
+}
+else {
+
+ $svr_idl = "$com_name".'E.idl';
+
+ $svr_src =
+'
+ '."$com_name".'S.cpp
+ '."$com_name".'_svnt.cpp
+';
+
+ $svr_hdr =
+'
+ '."$com_name".'S.h
+ '."$com_name".'_svnt.h
+ '."$com_name".'_svnt_export.h
+';
+}
+
+$mpc_template = '// $Id$
+// This file is generated with "'."generate_component_mpc.pl $flags".'"
+
+project('."$unique_prefix"."$com_name".'_idl_gen) : componentidldefaults ' . "$base_projs" . ' {
+ custom_only = 1
+ '."$cli_idlflags".'
+
+ IDL_Files {
+ '."$com_name".'.idl
+ }
+}
+'."$lem_gen".'
+project('."$unique_prefix"."$com_name".'_stub) : '."$cli_base ". "$base_projs" . ' {
+ after += '."$unique_prefix"."$com_name".'_idl_gen '."$stub_depend".'
+ libs += '."$stub_depend"."
+ $lib_paths"."
+ $lib_out".'
+ sharedname = '."$com_name".'_stub
+ dynamicflags = '."$UCOM_NAME".'_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ '."$com_name".'C.cpp
+ }
+
+ Header_Files {
+ '."$com_name".'C.h
+ '."$com_name".'_stub_export.h
+ }
+
+ Inline_Files {
+ '."$com_name".'C.inl
+ }
+}
+'."$component_def".'
+
+project('."$unique_prefix"."$com_name"."$svr_suffix".') : '."$svr_base ". "$base_projs" . ' {
+ after += '."$svr_p_after "."$svr_after".' '."$unique_prefix"."$com_name".'_lem_stub'.'
+ sharedname = '."$com_name"."$svr_suffix".'
+ libs += '."$svr_libs $svr_plibs
+ $lib_paths"."
+ $lib_out".'
+ dynamicflags = '."$UCOM_NAME"."$USVR_SUFFIX".'_BUILD_DLL
+ '.'
+ IDL_Files {
+ }
+
+ Source_Files {'."$svr_src".' }
+
+ Header_Files {'."$svr_hdr".' }
+
+ Inline_Files {
+ '."$com_name".'S.inl
+ }
+}
+
+'."$client_def
+";
+
+##############################################################################
+# Static Stuff
+
+##############################################################################
+# Print the stuff out
+
+
+# MPC files
+open (MPCFILE, ">", "$com_name".".mpc");
+print MPCFILE $mpc_template;