133 lines
4.2 KiB
Ruby
133 lines
4.2 KiB
Ruby
class Mcpp < Formula
|
|
desc "Alternative C/C++ preprocessor"
|
|
homepage "http://mcpp.sourceforge.net/"
|
|
url "https://downloads.sourceforge.net/project/mcpp/mcpp/V.2.7.2/mcpp-2.7.2.tar.gz"
|
|
sha256 "3b9b4421888519876c4fc68ade324a3bbd81ceeb7092ecdbbc2055099fcb8864"
|
|
|
|
# stpcpy is a macro on OS X; trying to define it as an extern is invalid.
|
|
# Patch from ZeroC fixing EOL comment parsing
|
|
# http://www.zeroc.com/forums/bug-reports/5309-mishap-slice-compilers.html#post23231
|
|
patch :DATA
|
|
|
|
def install
|
|
system "./configure", "--disable-debug", "--disable-dependency-tracking",
|
|
"--prefix=#{prefix}",
|
|
"--enable-mcpplib"
|
|
system "make", "install"
|
|
end
|
|
end
|
|
|
|
__END__
|
|
diff --git a/src/internal.H b/src/internal.H
|
|
index 5e1c19f..39aff8c 100644
|
|
--- a/src/internal.H
|
|
+++ b/src/internal.H
|
|
@@ -390,6 +390,8 @@ extern char * const work_end; /* End of work[] buffer */
|
|
extern char identifier[]; /* Lastly scanned name */
|
|
extern IFINFO ifstack[]; /* Information of #if nesting */
|
|
extern char work_buf[];
|
|
+extern FILEINFO * sh_file;
|
|
+extern int sh_line;
|
|
/* Temporary buffer for directive line and macro expansion */
|
|
|
|
/* main.c */
|
|
@@ -557,6 +559,6 @@ extern void init_system( void);
|
|
#endif
|
|
#endif
|
|
|
|
-#if HOST_HAVE_STPCPY
|
|
+#if HOST_HAVE_STPCPY && !defined(stpcpy)
|
|
extern char * stpcpy( char * dest, const char * src);
|
|
#endif
|
|
diff --git a/src/main.c b/src/main.c
|
|
index a438894..8da4b58 100644
|
|
--- a/src/main.c
|
|
+++ b/src/main.c
|
|
@@ -326,6 +326,8 @@ static void init_main( void)
|
|
= FALSE;
|
|
option_flags.trig = TRIGRAPHS_INIT;
|
|
option_flags.dig = DIGRAPHS_INIT;
|
|
+ sh_file = NULL;
|
|
+ sh_line = 0;
|
|
}
|
|
|
|
int mcpp_lib_main
|
|
diff --git a/src/support.c b/src/support.c
|
|
index c57eaef..348ede0 100644
|
|
--- a/src/support.c
|
|
+++ b/src/support.c
|
|
@@ -188,7 +188,7 @@ static char * append_to_buffer(
|
|
size_t length
|
|
)
|
|
{
|
|
- if (mem_buf_p->bytes_avail < length) { /* Need to allocate more memory */
|
|
+ if (mem_buf_p->bytes_avail < length + 1) { /* Need to allocate more memory */
|
|
size_t size = MAX( BUF_INCR_SIZE, length);
|
|
|
|
if (mem_buf_p->buffer == NULL) { /* 1st append */
|
|
@@ -1722,6 +1722,8 @@ com_start:
|
|
sp -= 2;
|
|
while (*sp != '\n') /* Until end of line */
|
|
mcpp_fputc( *sp++, OUT);
|
|
+ mcpp_fputc( '\n', OUT);
|
|
+ wrong_line = TRUE;
|
|
}
|
|
goto end_line;
|
|
default: /* Not a comment */
|
|
diff --git a/src/system.c b/src/system.c
|
|
index 4759469..4e008fa 100644
|
|
--- a/src/system.c
|
|
+++ b/src/system.c
|
|
@@ -3534,6 +3534,32 @@ void add_file(
|
|
FILEINFO * file;
|
|
const char * too_many_include_nest =
|
|
"More than %.0s%ld nesting of #include"; /* _F_ _W4_ */
|
|
+
|
|
+ //
|
|
+ // When encoding is UTF-8, skip BOM if present.
|
|
+ //
|
|
+ if(mbchar == UTF8 && fp != NULL && ftell(fp) == 0)
|
|
+ {
|
|
+ const unsigned char UTF8_BOM[3] = {0xEF, 0xBB, 0xBF};
|
|
+ unsigned char FILE_HEAD[3] = {0, 0, 0};
|
|
+ int i;
|
|
+ for(i = 0; i < 3; ++i)
|
|
+ {
|
|
+ FILE_HEAD[i] = getc(fp);
|
|
+ if(FILE_HEAD[i] != UTF8_BOM[i])
|
|
+ {
|
|
+ if(FILE_HEAD[i] == (unsigned char)EOF)
|
|
+ {
|
|
+ i--;
|
|
+ }
|
|
+ for(; i >= 0; --i)
|
|
+ {
|
|
+ ungetc(FILE_HEAD[i], fp);
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
|
|
filename = set_fname( filename); /* Search or append to fnamelist[] */
|
|
fullname = set_fname( fullname); /* Search or append to fnamelist[] */
|
|
@@ -3858,6 +3884,9 @@ static int chk_dirp(
|
|
}
|
|
#endif
|
|
|
|
+FILEINFO* sh_file;
|
|
+int sh_line;
|
|
+
|
|
void sharp(
|
|
FILEINFO * sharp_file,
|
|
int flag /* Flag to append to the line for GCC */
|
|
@@ -3868,8 +3897,6 @@ void sharp(
|
|
* else (i.e. 'sharp_file' is NULL) 'infile'.
|
|
*/
|
|
{
|
|
- static FILEINFO * sh_file;
|
|
- static int sh_line;
|
|
FILEINFO * file;
|
|
int line;
|
|
|