ChangeLog of MCPP and its accompanying Validation Suite
* Enabled some CPU-specific predefined macros in compiler-
independent-build as well as compiler-specific-build, because
there are some occasions which require those macros when we use
some compiler system's header files. Created init_cpu_macro().
(configure.ac, noconfig.H, configed.H, main.c, system.c)
* Enabled -m32 and -m64 options even on 32-bits systems and on
compiler-independent-build, when the OS is UNIX-like one. These
options change some predefined macros. (system.c)
* Made -z option to output #include lines themselves. (system.c)
* Fixed a bug of source line numbering in library-build. (by
Dwayne Boone) (main.c)
* Fixed a few minor bugs.
* Dropped support for Borland C 4.0.
* Updated the shell-scripts, makefiles and difference files, and
revised some mistakes.
* Updated the documents.
* Fixed a bug of newline synchronization on -K option. Created
sync_linenum(). (Thanks to Benjamin Smedberg) (directive.c)
* Made GCC-specific-build on x86_64 and ppc64 have two sets of
predefines for 32bit mode and 64bit mode, and implemented -m32
and -m64 options. (Thanks to Benjamin Smedberg) (configure.ac,
* Stopped to use freopen() so that a main program which links
libmcpp can use stdin, stdout and stderr. (by Benoit Foucher)
* Fixed a bug of file-handle leak on -MD and -MF options.
(Thanks to Masashi Fujita) (system.c)
* Added ports to Vicual C++ 6.0 and Borland C++ 5.9 (aka C++
Builder 2007). (by Dwayne Boone) (vc6.dif, bc59.dif, eval.c)
* Revised declaration of stpcpy(). (internal.H)
* Split mcpp_out.h from mcpp_lib.h.
* Made library-build install also an mcpp executable and minimal
documents as well as libmcpp for a convenience of library
package. Created main_mcpplib.c. Made all the binary packages
library-build. (by Yutaka Niibe and kmatsui) (Makefile.am, src/
* Split config/cygwin_root and config/mingw_root from
configure.ac to avoid a trouble of backslash character handling
on some version of bash. (Thanks to Aleksandar Samardzic)
* Changed autoconf 2.59 to 2.61 and automake 1.9.6 to 1.10.
* Updated the documents accordingly.
* Created macro notification mode, implemented -K option and '#
pragma MCPP debug macro_call' sub-directive to enable this mode
on STD mode. Created get_src_location(), print_macro_inf(),
print_macro_arg(), close_macro_inf(), chk_magic_balance(),
remove_magics(), some MAC_* macros to define magic characters,
struct LINE_COL, MACRO_INF. Revised many functions.
(Specifications mostly by Taras Glek, partly by Samuel,
implemented mostly by kmatsui and partly by Taras Glek and
Samuel). (internal.H, main.c, directive.c, eval.c, expand.c,
* Created -k option to keep horizontal white spaces as they are
and convert comment to spaces of the same length on STD mode.
(Specs by Taras Glek, implemented by kmatsui). (internal,H,
main.c, directive.c, mbchar.c, support.c)
* Implemented GCC2-spec variadic macro on STD mode in GCC-
specific-build. (by Taras Glek and kmatsui). (directive.c)
* Enabled GCC-like buggy handling of macro containing 'defined'
token in #if directive on GCC-specific-build. (by Taras Glek).
* Reordered initialization steps and enabled undefining of not-
Standard-required predefined macros. Created undef_macros().
Removed undef_a_predef(). (main.c, system.c)
* Enabled non-conforming predefined macros such as 'linux' by
default on GCC-specific-build for compatibility with GCC.
Removed undef_gcc_macros(). Created DEF_NOARGS_* macros for
diagnostics sake. (internal.H, system.c)
* Fixed a bug of file searching failure when a file is specified
by relative path in -include option. Split is_full_path() from
open_include(). (thanks to Benjamin Smedberg) (system.c)
* Fixed a bug of mcpplib initialization which caused problem on
CygWIN. (main.c, system.c, lib.c)
* Fixed a bug of unterminated source file handling. (thanks to
Phil Knight) (support.c)
* Made norm_path() check existence of directory/file before
normalization. As its results, non-existent directory specified
by -I option was disabled, "non-existent/../existent" was judged
as non-existent before wrongly normalizing to "existent", and #
include "directory" was made not to open. Created norm_dir().
(thanks to Taras Glek and Dave Mandelin) (system.c)
* Stopped to convert path-list on Windows to lowercase-letters.
Changed path-list comparing function on Windows from strcmp() to
strcasecmp() or stricmp(). (system.c)
* Changed allocation of buffer for -M* options and incdir,
fnamelist, once_list from fixed size to dynamically
enlarging ones. (system.c)
* Made #line output for GCC-specific-build closer to GCC.
Changed FILEINFO and DEFBUF struct, moved sharp() from main.c to
system.c, revised many functions. (system.c, support.c, main.c,
* Absorbed lib.c into system.c. Renamed getopt() to mcpp_getopt
(), also variables opt* to mcpp_opt*, and made static in order
to prevent linking of glibc getopt(). (thanks to Dwayne Boone)
* Fixed a bug of UTF-8 multibyte character handling, enabled 4-
bytes long sequences, and enabled checking of overlong sequences
and UTF-16 surrogate pairs. (by Matt Wozniski) (mbchar.c,
* Fixed a bug of tokenization in KR and OLD modes. (support.c)
* Changed FILENAME_MAX to PATH_MAX and FILENAMEMAX to PATHMAX,
because FILENAME_MAX of some systems are too short. (thanks to
* Bundled some variables into structs (std_limits, option_flags,
etc.). Tidied up the sources removing unused codes, rewriting
old comments. (most of the sources)
* Ported to Mac OS X / Apple-GCC. Enabled searching of
"framework" directories for #include. Enabled to search "header
map" file. Enabled #import, which is #include with
unconditional "once only" feature. Implemented -F, -arch,
-isysroot options. Created init_framework(), search_framework(),
search_subdir(), search_header_map(), hmap_hash(). (system.c,
directive.c, set_mcpp.sh, unset_mcpp.sh, configure.ac, src/
* Ported to Visual C++ 2008. Enabled '$' in identifier by
default in Visual-C-specific-build and GCC-specific-build.
(system.H, internal.H, support.c, system.c)
* Added documentation on source checking of firefox 3.0pre.
Added comments on system headers in Mac OS X. (mcpp-manual.html)
* Updated all the documents. (mainly by kmatsui, partly by
* Fixed memory leaks in subroutine-build related to file->
filename, sharp_filename and others. (by Juergen Mueller and
kmatsui). (main.c, directive.c, support.c, system.c)
* Revised expanding() and expanding_macro to fix memory leaks.
Created clear_exp_mac(). (internal.H, expand.c, support.c)
* Fixed a bug of accessing non-allocated memory. (by isr).
* Revised output of // comment by -C option. Output // comment
as it is, not converting to /* */. (thanks to Taras Glek).
* Changed output of line top white spaces in other than
POST_STANDARD mode to preserve them as they are, rather than
squeezing to one space, in order to make output more human-
readable. (main.c, support.c)
* Removed the settings to be compiled with C++. (configed.H,
* Updated version-info for shared-library-build from 0:0:0 to 0:
* Changed installation directory of some documents in stand-
alone-and-compiler-independent-build by configure or by binary
* Updated the documents. Note that cpp-test.html were not
* Fixed a bug of some #line directive handling which wrongly
affected #include path. Added a new member for real file name
to struct FILEINFO, and made #line directive does not affect
real file name. (internal.H, main.c, support.c, system.c)
* Enabled dereferencing of symbolic linked directory (as well as
file) of #include path-list and include directory. Split
deref_syml() from norm_path(). (system.c)
* Revised again diagnostic messages for some macro expansions.
(internal.H, expand.c, support.c)
* Relaxed token checking and syntax checking in lang_asm mode.
* Implemented GCC3-spec variadic macro for GCC-specific-build.
(internal.H, directive.c, expand.c)
* Added some predefined macro for GCC-specific-build. (system.c)
* Revised output routines abstracting output device, and
implementing optional memory buffer output when built with
MCPP_LIB macro. Created mcpp_lib.h, mcpp_lib_fputs(),
mcpp_lib_fputc(), mcpp_lib_fprintf(), mcpp_use_mem_buffers(),
mcpp_reset_def_out_func(), mem_putc(), mem_puts(),
append_to_buffer(), function pointers mcpp_fputs, mcpp_fputc,
mcpp_fprintf and some macros. This update disabled compilation
by C++. (All were contributed by Greg Kress and slightly
modified by kmatsui) (internal.H, main.c, directive.c, eval.c,
expand.c, mbchar.c, support.c, system.c, lib.c, mcpp_lib.h)
* Renamed some global names in order to lessen the possibility
of name collisions in subroutine-build. Renamed the variables
mode, cplus, line, debug, type and work to mcpp_mode,
cplus_val, src_line, mcpp_debug, char_type and work_buf
respectively. Renamed the functions install(), eval(), expand(),
get() and unget() to install_macro(), eval_if(), expand_macro(),
get_ch() and unget_ch() respectively. (internal.H, main.c,
directive.c, eval.c, expand.c, mbchar.c, support.c, system.c)
* Added 'mcpplib' target to make subroutine (library) build in
configure.ac and noconfig/*.mak.
* Revised some other minor points. (all sources)
* Changed default setting of noconfig.H to that of FreeBSD 6.* /
stand-alone / GCC 3.4. (noconfig.H)
* Added documentation on source checking of glibc 2.4. (mcpp-
* Abolished 'install-data' and 'uninstall-data' targets of
configured makefile. On the other hand, made 'install' target
install also mcpp-manual.html.
* Provided stand-alone-and-compiler-independent-build binary
packages port, rpm, deb, zip and their corresponding source
* Renamed control.c as directive.c and renamed control() as
* Fixed a bug of #else handling in pre-Standard modes.
* Fixed a bug of mcpp specific directives such as #debug or #
put_defines in pre-Standard modes. (system.c)
* Fixed a bug of warning options for GCC-specific-builds.
* Fixed a bug of macro expansion timing in #include directive
* Revised some other minor points, moved cur_file() from main.c
to system.c. (main.c, eval.c, system.c)
* Revised diagnostic messages for some macro expansions.
(internal.H, expand.c, support.c)
* Fixed a bug of nested includes with relative paths. (thanks
to Leo Savernik). (system.c)
* Fixed memory leaks in routines related to normalizing path-
list. (by Juergen Mueller). (system.c)
* Added MCPP_LIB setting to use mcpp as a subroutine from other
main program. Created init_main(), init_directive(), init_eval(),
init_support(), init_system(), init_lib(), clear_filelist() and
clear_symtable(). Created testmain.c as a sample source. (all
were contributed by Juergen Mueller and slightly modified by
kmatsui). (internal.H, main.c, directive.c, eval.c, expand.c,
support.c, system.c, lib.c)
* Changed the macro STAND_ALONE to INDEPENDENT.
* Changed the terminology of building methods in the documents.
(INSTALL, mcpp-porting.html, mcpp-manual.html)
* Rewrote and converted the text files in 'doc' and 'doc-jp'
directories into html files.
* Updated and corrected many points of the documents.
* Enabled automatic conversion from [CR+LF] to [LF]. (support.c)
* Set the limit of #include nesting to INCLUDE_NEST (default:
256) in order to prevent infinitely recursive #includes.
* Revised white space handling in <header with spaces.h> style
header-name which is defined by macro. (system.c)
* Enabled -fworking-directory option for GCC-specific-build.
created put_info(). (system.c)
* Fixed a bug of macro definition. (lib.c)
* Fixed a bug of '#pragma once' failure. (by Greg Kress).
* Fixed some other minor bugs in sources.
* Revised path-list handling on CygWIN. Enabled -mno-cygwin
option for CygWIN GCC-specific-build. (configure.ac, noconfig.H,
* Ported to MinGW. Created cc1.c to be invoked from GCC and to
invoke mcpp or GCC's cc1/cc1plus from it, because MinGW GCC
rejects to invoke a shell-script even if it is named cc1 and
because MinGW does not support symbolic link. (configure.ac,
src/Makefile.am, configed.H, noconfig.H, system.c)
* Fixed bugs in some noconfig/*.mak.
* Moved changelogs from the source files to ChangeLog and
* Integrated STANDARD mode and PRE_STANDARD mode into one
executable, differentiating the modes by the execution time
options. (all the sources)
* Absorbed DEBUG, DEBUG_EVAL, OK_MAKE into default, OK_DIGRAPHS,
OK_PRAGMA_OP into default of STD and POST_STD mode, OK_TRIGRAPHS
into default of STD mode, OK_SIZE into default of KR and
OLD_PREP modes. (all the sources)
* Changed --enable-maintainer-mode option of configure to
--enable-replace-cpp option which generates compiler-specific-
build of mcpp. Made compiler-specific-build to be installed
only into a compiler-specific-directory. (configure.ac, src/
* Made stand-alone-build independent from any compiler-systems.
It no longer requires GCC-specific header files. (configure.ac,
configed.H, noconfig.H, system.c)
* Revised '#pragma once' and handling of include directories
list, judging a identity of directory and file by converting it
to absolute path, and dereferencing symbolic linked file.
* Revised #line output and its related problem at the end of an
included file. (thanks to Jay Prakash). (internal.H, support.c)
* Ported to GCC V.4.0, CygWIN 1.5.18, Visual C++ 2005 and LCC-
Win32 2006-03. (noconfig.H, system.c)
* Added some options for Visual C++. (system.c)
* Removed settings for pre-C90 compiler (string concatenation by
preprocessor, '\a' and '\v' handling, no unsigned long #if, no
Standard library functions, non-prototype declarations, no #
pragma). (all the sources)
* Removed settings for MS-DOS compiler, DJGPP and Plan9. (*.H,
* Removed the implementation of post_preproc() for pre-Standard
compiler. Removed conv_esc(), is_last_esc(), conv2oct().
Removed HAVE_C_BACKSLASH_A and CONCAT_STRINGS macros. (main.c)
* Degraded the diagnostic of #if expression from error to
warning, which only overflows the range of 'long / unsigned
long' and does not overflow the range of 'long long / unsigned
long long' in modes other than C99. (eval.c)
* Enabled 'i64' ('ui64', 'i32', 'i16', etc.) suffixes for
integer, which are recognized when COMPILER is MSC or BORLANDC.
* Renamed functions and some variables, created expand_init(),
according to integration of STANDARD and PRE_STANDARD modes.
* Removed '#pragma MCPP include_next'. (system.c)
* Created init_msc_macro(), parse_warn_level(), chk_opts(),
init_predefines(), init_std_defines(), do_prestd_directive().
Removed set_cplus(), mem_model(). (system.c)
* Removed Standard functions (memmove(), memcpy(), memcmp(),
strstr(), strcspn()). (lib.c)
* Changed default setting of noconfig.H to FreeBSD 5.* / stand-
alone / GCC 3.4. (noconfig.H)
* Renamed 'doc' directory as 'doc-jp' and renamed 'doc_eng' as
* Removed some manuscript files of mcpp-summary.pdf from the
* Validation Suite: Revised a few testcases.
* Updated all the documents accordingly.