summaryrefslogtreecommitdiffstats
path: root/src/H5make_libsettings.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-03-31 23:06:18 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-03-31 23:06:18 (GMT)
commit21bd3532dd468eda3f32014fdc236d2a003f3521 (patch)
tree96b2dc42a6bc3c66f19407debe598783d4f10cc2 /src/H5make_libsettings.c
parent5d1838beab77a93f29ac0278ed43f9d1aec505b7 (diff)
downloadhdf5-21bd3532dd468eda3f32014fdc236d2a003f3521.zip
hdf5-21bd3532dd468eda3f32014fdc236d2a003f3521.tar.gz
hdf5-21bd3532dd468eda3f32014fdc236d2a003f3521.tar.bz2
[svn-r18474] Description:
Switch back to generating a .h file for the library settings. Also, tart it up a bit to avoid multiple inclusions, etc. Tested on: Mac OS X/32 10.6.3 (amazon) w/debug & production FreeBSD/32 6.3 (duty)
Diffstat (limited to 'src/H5make_libsettings.c')
-rw-r--r--src/H5make_libsettings.c151
1 files changed, 94 insertions, 57 deletions
diff --git a/src/H5make_libsettings.c b/src/H5make_libsettings.c
index f91e61e..8782157 100644
--- a/src/H5make_libsettings.c
+++ b/src/H5make_libsettings.c
@@ -40,6 +40,10 @@ static const char *FileHeader = "\n\
*
*-------------------------------------------------------------------------
*/
+
+/* Avoid trying to include the header file we are going to generate. :-) */
+#define _H5lib_settings_H
+
#include <stdio.h>
#include <time.h>
#include "H5private.h"
@@ -65,53 +69,58 @@ static const char *FileHeader = "\n\
static void
insert_libhdf5_settings(FILE *flibinfo)
{
+ fprintf(flibinfo, "#ifndef H5_LIBSETTINGS_OWNER\n");
+ fprintf(flibinfo, "extern const char H5libhdf5_settings[];\n");
+ fprintf(flibinfo, "#else /* H5_LIBSETTINGS_OWNER */\n");
#ifdef H5_HAVE_EMBEDDED_LIBINFO
FILE *fsettings; /* for files libhdf5.settings */
int inchar;
- int bol=0; /* indicates the beginning of a new line */
+ int bol = 0; /* indicates the beginning of a new line */
+
+ if(NULL == (fsettings = HDfopen(LIBSETTINGSFNAME, "r"))) {
+ HDperror(LIBSETTINGSFNAME);
+ HDexit(1);
+ } /* end if */
- if (NULL==(fsettings=HDfopen(LIBSETTINGSFNAME, "r"))){
- perror(LIBSETTINGSFNAME);
- exit(1);
- }
/* print variable definition and the string */
- /* Do not use const else AIX strings does not show it. */
- fprintf(flibinfo, "char H5libhdf5_settings[]=\n");
+ /* Do not use static else AIX strings does not show it. */
+ fprintf(flibinfo, "const char H5libhdf5_settings[]=\n");
bol++;
- while (EOF != (inchar = getc(fsettings))){
- if (bol){
+ while(EOF != (inchar = HDgetc(fsettings))) {
+ if(bol) {
/* Start a new line */
fprintf(flibinfo, "\t\"");
bol = 0;
- }
- if (inchar == '\n'){
+ } /* end if */
+ if(inchar == '\n') {
/* end of a line */
fprintf(flibinfo, "\\n\"\n");
bol++;
- }else{
- putc(inchar, flibinfo);
- }
- }
- if (feof(fsettings)){
+ } /* end if */
+ else
+ HDputc(inchar, flibinfo);
+ } /* end while */
+ if(feof(fsettings)) {
/* wrap up */
- if (!bol){
+ if(!bol)
/* EOF found without a new line */
fprintf(flibinfo, "\\n\"\n");
- };
fprintf(flibinfo, ";\n\n");
- }else{
+ } /* end if */
+ else {
fprintf(stderr, "Read errors encountered with %s\n", LIBSETTINGSFNAME);
- exit(1);
- }
- if (0 != fclose(fsettings)){
- perror(LIBSETTINGSFNAME);
- exit(1);
- }
+ HDexit(1);
+ } /* end else */
+ if(0 != HDfclose(fsettings)) {
+ HDperror(LIBSETTINGSFNAME);
+ HDexit(1);
+ } /* end if */
#else
/* print variable definition and an empty string */
- /* Do not use const else AIX strings does not show it. */
- fprintf(flibinfo, "char H5libhdf5_settings[]=\"\";\n");
+ /* Do not use static else AIX strings does not show it. */
+ fprintf(flibinfo, "const char H5libhdf5_settings[]=\"\";\n");
#endif
+ fprintf(flibinfo, "#endif /* H5_LIBSETTINGS_OWNER */\n");
} /* insert_libhdf5_settings() */
@@ -140,7 +149,7 @@ make_libinfo(void)
/*-------------------------------------------------------------------------
* Function: print_header
*
- * Purpose: Prints the C file header for the generated file.
+ * Purpose: Prints the H file header for the generated file.
*
* Return: void
*
@@ -148,15 +157,13 @@ make_libinfo(void)
* matzke@llnl.gov
* Mar 12 1997
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static void
print_header(void)
{
- time_t now = time(NULL);
- struct tm *tm = localtime(&now);
+ time_t now = HDtime(NULL);
+ struct tm *tm = HDlocaltime(&now);
char real_name[30];
char host_name[256];
int i;
@@ -181,18 +188,20 @@ information about the library build configuration\n";
{
size_t n;
char *comma;
- if ((pwd = getpwuid(getuid()))) {
- if ((comma = strchr(pwd->pw_gecos, ','))) {
- n = MIN(sizeof(real_name)-1, (unsigned)(comma-pwd->pw_gecos));
- strncpy(real_name, pwd->pw_gecos, n);
+
+ if((pwd = HDgetpwuid(getuid()))) {
+ if((comma = HDstrchr(pwd->pw_gecos, ','))) {
+ n = MIN(sizeof(real_name) - 1, (unsigned)(comma - pwd->pw_gecos));
+ HDstrncpy(real_name, pwd->pw_gecos, n);
real_name[n] = '\0';
- } else {
- strncpy(real_name, pwd->pw_gecos, sizeof(real_name));
+ } /* end if */
+ else {
+ HDstrncpy(real_name, pwd->pw_gecos, sizeof(real_name));
real_name[sizeof(real_name) - 1] = '\0';
- }
- } else {
+ } /* end else */
+ } /* end if */
+ else
real_name[0] = '\0';
- }
}
#else
real_name[0] = '\0';
@@ -202,9 +211,8 @@ information about the library build configuration\n";
* The FQDM of this host or the empty string.
*/
#ifdef H5_HAVE_GETHOSTNAME
- if (gethostname(host_name, sizeof(host_name)) < 0) {
+ if(gethostname(host_name, sizeof(host_name)) < 0)
host_name[0] = '\0';
- }
#else
host_name[0] = '\0';
#endif
@@ -213,34 +221,62 @@ information about the library build configuration\n";
* The file header: warning, copyright notice, build information.
*/
printf("/* Generated automatically by H5make_libsettings -- do not edit */\n\n\n");
- puts(FileHeader); /*the copyright notice--see top of this file */
+ HDputs(FileHeader); /*the copyright notice--see top of this file */
printf(" *\n * Created:\t\t%s %2d, %4d\n",
month_name[tm->tm_mon], tm->tm_mday, 1900 + tm->tm_year);
- if (pwd || real_name[0] || host_name[0]) {
+ if(pwd || real_name[0] || host_name[0]) {
printf(" *\t\t\t");
- if (real_name[0]) printf("%s <", real_name);
+ if(real_name[0])
+ printf("%s <", real_name);
#ifdef H5_HAVE_GETPWUID
- if (pwd) fputs(pwd->pw_name, stdout);
+ if(pwd)
+ HDfputs(pwd->pw_name, stdout);
#endif
- if (host_name[0]) printf("@%s", host_name);
- if (real_name[0]) printf(">");
- putchar('\n');
- }
+ if(host_name[0])
+ printf("@%s", host_name);
+ if(real_name[0])
+ printf(">");
+ HDputchar('\n');
+ } /* end if */
printf(" *\n * Purpose:\t\t");
- for (s = purpose; *s; s++) {
- putchar(*s);
- if ('\n' == *s && s[1]) printf(" *\t\t\t");
- }
+ for(s = purpose; *s; s++) {
+ HDputchar(*s);
+ if('\n' == *s && s[1])
+ printf(" *\t\t\t");
+ } /* end for */
printf(" *\n * Modifications:\n *\n");
printf(" *\tDO NOT MAKE MODIFICATIONS TO THIS FILE!\n");
printf(" *\tIt was generated by code in `H5make_libsettings.c'.\n");
printf(" *\n *");
- for (i = 0; i < 73; i++) putchar('-');
+ for(i = 0; i < 73; i++)
+ HDputchar('-');
printf("\n */\n\n");
+ printf("#ifndef _H5lib_settings_H\n");
+ printf("#define _H5lib_settings_H\n\n");
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_footer
+ *
+ * Purpose: Prints the H file footer for the generated file.
+ *
+ * Return: void
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Mar 31 2010
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_footer(void)
+{
+ printf("#endif /* _H5lib_settings_H */\n\n");
}
@@ -269,12 +305,13 @@ information about the library build configuration\n";
int
main(void)
{
-
print_header();
/* Generate embedded library information variable definition */
make_libinfo();
+ print_footer();
+
return 0;
}