mirror of
https://review.haiku-os.org/buildtools
synced 2024-11-23 07:18:49 +01:00
1456812988
Change-Id: I3cba648f45e9eb537eb43ee2345c59fc33976dc7 Reviewed-on: https://review.haiku-os.org/c/buildtools/+/4376 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
126 lines
2.1 KiB
C
126 lines
2.1 KiB
C
/*
|
|
* Copyright 1993, 1995 Christopher Seiwald.
|
|
*
|
|
* This file is part of Jam - see jam.c for Copyright information.
|
|
*/
|
|
|
|
/*
|
|
* mkjambase.c - turn Jambase into a big C structure
|
|
*
|
|
* Usage: mkjambase jambase.c Jambase ...
|
|
*
|
|
* Results look like this:
|
|
*
|
|
* char *jambase[] = {
|
|
* "...\n",
|
|
* ...
|
|
* 0 };
|
|
*
|
|
* Handles \'s and "'s specially; knows to delete blank and comment lines.
|
|
*
|
|
* 11/04/02 (seiwald) - const-ing for string literals
|
|
*/
|
|
|
|
# include <stdio.h>
|
|
# include <string.h>
|
|
|
|
int main( int argc, char **argv, char **envp )
|
|
{
|
|
char buf[ 1024 ];
|
|
FILE *fin;
|
|
FILE *fout;
|
|
char *p;
|
|
int doDotC = 0;
|
|
|
|
if( argc < 3 )
|
|
{
|
|
fprintf( stderr, "usage: %s jambase.c Jambase ...\n", argv[0] );
|
|
return -1;
|
|
}
|
|
|
|
if( !( fout = fopen( argv[1], "w" ) ) )
|
|
{
|
|
perror( argv[1] );
|
|
return -1;
|
|
}
|
|
|
|
/* If the file ends in .c generate a C source file */
|
|
|
|
if( ( p = strrchr( argv[1], '.' ) ) && !strcmp( p, ".c" ) )
|
|
doDotC++;
|
|
|
|
/* Now process the files */
|
|
|
|
argc -= 2, argv += 2;
|
|
|
|
if( doDotC )
|
|
{
|
|
fprintf( fout, "/* Generated by mkjambase from Jambase */\n" );
|
|
fprintf( fout, "const char *jambase[] = {\n" );
|
|
}
|
|
|
|
for( ; argc--; argv++ )
|
|
{
|
|
if( !( fin = fopen( *argv, "r" ) ) )
|
|
{
|
|
perror( *argv );
|
|
return -1;
|
|
}
|
|
|
|
if( doDotC )
|
|
{
|
|
fprintf( fout, "/* %s */\n", *argv );
|
|
}
|
|
else
|
|
{
|
|
fprintf( fout, "### %s ###\n", *argv );
|
|
}
|
|
|
|
while( fgets( buf, sizeof( buf ), fin ) )
|
|
{
|
|
if( doDotC )
|
|
{
|
|
char *p = buf;
|
|
|
|
/* Strip leading whitespace. */
|
|
|
|
while( *p == ' ' || *p == '\t' || *p == '\n' )
|
|
p++;
|
|
|
|
/* Drop comments and empty lines. */
|
|
|
|
if( *p == '#' || !*p )
|
|
continue;
|
|
|
|
/* Copy */
|
|
|
|
putc( '"', fout );
|
|
|
|
for( ; *p && *p != '\n'; p++ )
|
|
switch( *p )
|
|
{
|
|
case '\\': putc( '\\', fout ); putc( '\\', fout ); break;
|
|
case '"': putc( '\\', fout ); putc( '"', fout ); break;
|
|
default: putc( *p, fout ); break;
|
|
}
|
|
|
|
fprintf( fout, "\\n\",\n" );
|
|
}
|
|
else
|
|
{
|
|
fprintf( fout, "%s", buf );
|
|
}
|
|
|
|
}
|
|
|
|
fclose( fin );
|
|
}
|
|
|
|
if( doDotC )
|
|
fprintf( fout, "0 };\n" );
|
|
|
|
fclose( fout );
|
|
|
|
return 0;
|
|
}
|