3 #include "orte-idl-c-backend.h"
11 static FILE *out_for_pass(const char *input_filename, int pass,
12 OIDL_Run_Info *rinfo);
15 orte_idl_output_c (IDL_tree tree,
22 ci.base_name = g_path_get_basename(rinfo->input_filename);
23 ctmp = strrchr(ci.base_name, '.');
27 ci.c_base_name = g_strdup(ci.base_name);
28 if(!isalpha((guchar)ci.c_base_name[0]))
29 ci.c_base_name[0] = '_';
30 for(i = 0; ci.c_base_name[i]; i++) {
31 if(!isalnum((guchar)ci.c_base_name[i])) ci.c_base_name[i] = '_';
34 ci.ext_dcls = g_string_new(NULL);
37 for(i = 0; i < OUTPUT_NUM_PASSES; i++) {
38 if( (1 << i) & rinfo->enabled_passes) {
39 ci.fh = out_for_pass(rinfo->input_filename, 1 << i, rinfo);
43 orte_idl_output_c_headers(tree, rinfo, &ci);
46 orte_idl_output_c_impls(tree, rinfo, &ci);
49 // if (1 << i == OUTPUT_DEPS)
55 g_string_free(ci.ext_dcls,TRUE);
61 orte_idl_c_filename_for_pass (const char *input_filename,
67 const char *tack_on = NULL;
69 basename = g_path_get_basename (input_filename);
70 dot = strrchr (basename, '.');
82 g_error("Unknown output pass");
86 filename = g_strconcat (basename, tack_on, NULL);
93 out_for_pass (const char *input_filename,
98 char *output_filename;
101 /* if (pass == OUTPUT_DEPS) {
102 if (!g_file_test (".deps", G_FILE_TEST_IS_DIR)) {
103 if (mkdir (".deps", 0775) < 0) {
104 g_warning ("failed to create '.deps' directory '%s'",
110 if (rinfo->deps_file)
111 fp = fopen (rinfo->deps_file, "w");
116 g_warning ("failed to open '%s': %s\n",
117 rinfo->deps_file, strerror (errno));
120 output_filename = orte_idl_c_filename_for_pass (input_filename, pass);
122 cmdline = g_alloca (strlen (rinfo->output_formatter) +
123 strlen (output_filename) +
125 sprintf (cmdline, "%s > %s", rinfo->output_formatter, output_filename);
127 g_free (output_filename);
129 /* Many versions of cpp do evil translating internal
130 * strings, producing bogus output, so clobber LC_ALL */
132 fp = popen (cmdline, "w");
135 g_error ("failed to popen '%s': %s\n", cmdline, strerror(errno));