blob: 75ee2c14fae314ec606251ebf25c1aff7bcc51bd [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define CHAZ_USE_SHORT_NAMES
#include "Charmonizer/Core/Util.h"
#include "Charmonizer/Core/ConfWriter.h"
#include "Charmonizer/Core/OperatingSystem.h"
#include "Charmonizer/Core/Compiler.h"
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Static vars. */
static FILE *charmony_fh = NULL;
void
ConfWriter_init(void) {
return;
}
void
ConfWriter_open_charmony_h(const char *charmony_start) {
/* Open the filehandle. */
charmony_fh = fopen("charmony.h", "w+");
if (charmony_fh == NULL) {
Util_die("Can't open 'charmony.h': %s", strerror(errno));
}
/* Print supplied text (if any) along with warning, open include guard. */
if (charmony_start != NULL) {
fwrite(charmony_start, sizeof(char), strlen(charmony_start),
charmony_fh);
}
fprintf(charmony_fh,
"/* Header file auto-generated by Charmonizer. \n"
" * DO NOT EDIT THIS FILE!!\n"
" */\n\n"
"#ifndef H_CHARMONY\n"
"#define H_CHARMONY 1\n\n"
);
}
FILE*
ConfWriter_get_charmony_fh(void) {
return charmony_fh;
}
void
ConfWriter_clean_up(void) {
/* Write the last bit of charmony.h and close. */
fprintf(charmony_fh, "#endif /* H_CHARMONY */\n\n");
if (fclose(charmony_fh)) {
Util_die("Couldn't close 'charmony.h': %s", strerror(errno));
}
}
void
ConfWriter_append_conf(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
vfprintf(charmony_fh, fmt, args);
va_end(args);
}
void
ConfWriter_start_short_names(void) {
ConfWriter_append_conf(
"\n#if defined(CHY_USE_SHORT_NAMES) "
"|| defined(CHAZ_USE_SHORT_NAMES)\n"
);
}
void
ConfWriter_end_short_names(void) {
ConfWriter_append_conf("#endif /* USE_SHORT_NAMES */\n");
}
void
ConfWriter_start_module(const char *module_name) {
if (chaz_Util_verbosity > 0) {
printf("Running %s module...\n", module_name);
}
ConfWriter_append_conf("\n/* %s */\n", module_name);
}
void
ConfWriter_end_module(void) {
ConfWriter_append_conf("\n");
}
void
ConfWriter_shorten_macro(const char *sym) {
ConfWriter_append_conf(" #define %s CHY_%s\n", sym, sym);
}
void
ConfWriter_shorten_typedef(const char *sym) {
ConfWriter_append_conf(" #define %s chy_%s\n", sym, sym);
}
void
ConfWriter_shorten_function(const char *sym) {
ConfWriter_append_conf(" #define %s chy_%s\n", sym, sym);
}