From e075990ed3a1d9f65be121a5df0cdc4a1cd8460c Mon Sep 17 00:00:00 2001
From: Alessandro Bonazzi
Date: Sat, 28 Nov 2020 16:24:08 +0100
Subject: [PATCH] Patch level : 12.0 no-patch Files correlati :
Commento :
Aggiunto il preprocessore c++ mcpp per sostituire il compilatore nella compilazione delle maschere.
---
libraries/mcpp/ChangeLog | 325 +
libraries/mcpp/ChangeLog.old | 351 +
libraries/mcpp/INSTALL | 541 +
libraries/mcpp/INSTALL-jp | 468 +
libraries/mcpp/LICENSE | 29 +
libraries/mcpp/Makefile.am | 38 +
libraries/mcpp/Makefile.in | 709 +
libraries/mcpp/NEWS | 120 +
libraries/mcpp/README | 53 +
libraries/mcpp/aclocal.m4 | 6964 +++++
libraries/mcpp/bin/mcpp-manual.html | 4617 +++
libraries/mcpp/bin/mcpp-summary-272.pdf | Bin 0 -> 170539 bytes
libraries/mcpp/bin/mcpp.exe | Bin 0 -> 201728 bytes
libraries/mcpp/config/compile | 142 +
libraries/mcpp/config/config.guess | 1500 +
libraries/mcpp/config/config.sub | 1608 ++
libraries/mcpp/config/cygwin_root | 3 +
libraries/mcpp/config/depcomp | 530 +
libraries/mcpp/config/install-sh | 323 +
libraries/mcpp/config/ltmain.sh | 6871 +++++
libraries/mcpp/config/mb_big5 | 2 +
libraries/mcpp/config/mb_jis | 2 +
libraries/mcpp/config/mb_sjis | 2 +
libraries/mcpp/config/mingw_root | 3 +
libraries/mcpp/config/missing | 360 +
libraries/mcpp/configure | 23147 ++++++++++++++++
libraries/mcpp/configure.ac | 778 +
libraries/mcpp/cpp-test/LICENSE | 29 +
libraries/mcpp/cpp-test/test-l/cpp-test.exp | 22 +
libraries/mcpp/cpp-test/test-l/ifdef127.h | 389 +
libraries/mcpp/cpp-test/test-l/ifdef255.h | 388 +
libraries/mcpp/cpp-test/test-l/l_37_1.h | 24 +
libraries/mcpp/cpp-test/test-l/l_37_2.c | 33 +
libraries/mcpp/cpp-test/test-l/l_37_3.c | 28 +
libraries/mcpp/cpp-test/test-l/l_37_4.c | 18 +
libraries/mcpp/cpp-test/test-l/l_37_5.c | 16 +
libraries/mcpp/cpp-test/test-l/l_37_6.c | 84 +
libraries/mcpp/cpp-test/test-l/l_37_7.c | 144 +
libraries/mcpp/cpp-test/test-l/l_37_8.c | 18 +
libraries/mcpp/cpp-test/test-l/l_37_9.c | 23 +
libraries/mcpp/cpp-test/test-l/longline.t | 1537 +
libraries/mcpp/cpp-test/test-l/m8191.h | 8196 ++++++
libraries/mcpp/cpp-test/test-l/nest1.h | 2 +
libraries/mcpp/cpp-test/test-l/nest10.h | 2 +
libraries/mcpp/cpp-test/test-l/nest100.h | 2 +
libraries/mcpp/cpp-test/test-l/nest101.h | 2 +
libraries/mcpp/cpp-test/test-l/nest102.h | 2 +
libraries/mcpp/cpp-test/test-l/nest103.h | 2 +
libraries/mcpp/cpp-test/test-l/nest104.h | 2 +
libraries/mcpp/cpp-test/test-l/nest105.h | 2 +
libraries/mcpp/cpp-test/test-l/nest106.h | 2 +
libraries/mcpp/cpp-test/test-l/nest107.h | 2 +
libraries/mcpp/cpp-test/test-l/nest108.h | 2 +
libraries/mcpp/cpp-test/test-l/nest109.h | 2 +
libraries/mcpp/cpp-test/test-l/nest11.h | 2 +
libraries/mcpp/cpp-test/test-l/nest110.h | 2 +
libraries/mcpp/cpp-test/test-l/nest111.h | 2 +
libraries/mcpp/cpp-test/test-l/nest112.h | 2 +
libraries/mcpp/cpp-test/test-l/nest113.h | 2 +
libraries/mcpp/cpp-test/test-l/nest114.h | 2 +
libraries/mcpp/cpp-test/test-l/nest115.h | 2 +
libraries/mcpp/cpp-test/test-l/nest116.h | 2 +
libraries/mcpp/cpp-test/test-l/nest117.h | 2 +
libraries/mcpp/cpp-test/test-l/nest118.h | 2 +
libraries/mcpp/cpp-test/test-l/nest119.h | 2 +
libraries/mcpp/cpp-test/test-l/nest12.h | 2 +
libraries/mcpp/cpp-test/test-l/nest120.h | 2 +
libraries/mcpp/cpp-test/test-l/nest121.h | 2 +
libraries/mcpp/cpp-test/test-l/nest122.h | 2 +
libraries/mcpp/cpp-test/test-l/nest123.h | 2 +
libraries/mcpp/cpp-test/test-l/nest124.h | 2 +
libraries/mcpp/cpp-test/test-l/nest125.h | 2 +
libraries/mcpp/cpp-test/test-l/nest126.h | 2 +
libraries/mcpp/cpp-test/test-l/nest127.h | 2 +
libraries/mcpp/cpp-test/test-l/nest13.h | 2 +
libraries/mcpp/cpp-test/test-l/nest14.h | 2 +
libraries/mcpp/cpp-test/test-l/nest15.h | 6 +
libraries/mcpp/cpp-test/test-l/nest16.h | 2 +
libraries/mcpp/cpp-test/test-l/nest17.h | 2 +
libraries/mcpp/cpp-test/test-l/nest18.h | 2 +
libraries/mcpp/cpp-test/test-l/nest19.h | 2 +
libraries/mcpp/cpp-test/test-l/nest2.h | 2 +
libraries/mcpp/cpp-test/test-l/nest20.h | 2 +
libraries/mcpp/cpp-test/test-l/nest21.h | 2 +
libraries/mcpp/cpp-test/test-l/nest22.h | 2 +
libraries/mcpp/cpp-test/test-l/nest23.h | 2 +
libraries/mcpp/cpp-test/test-l/nest24.h | 2 +
libraries/mcpp/cpp-test/test-l/nest25.h | 2 +
libraries/mcpp/cpp-test/test-l/nest26.h | 2 +
libraries/mcpp/cpp-test/test-l/nest27.h | 2 +
libraries/mcpp/cpp-test/test-l/nest28.h | 2 +
libraries/mcpp/cpp-test/test-l/nest29.h | 2 +
libraries/mcpp/cpp-test/test-l/nest3.h | 2 +
libraries/mcpp/cpp-test/test-l/nest30.h | 2 +
libraries/mcpp/cpp-test/test-l/nest31.h | 6 +
libraries/mcpp/cpp-test/test-l/nest32.h | 2 +
libraries/mcpp/cpp-test/test-l/nest33.h | 2 +
libraries/mcpp/cpp-test/test-l/nest34.h | 2 +
libraries/mcpp/cpp-test/test-l/nest35.h | 2 +
libraries/mcpp/cpp-test/test-l/nest36.h | 2 +
libraries/mcpp/cpp-test/test-l/nest37.h | 2 +
libraries/mcpp/cpp-test/test-l/nest38.h | 2 +
libraries/mcpp/cpp-test/test-l/nest39.h | 2 +
libraries/mcpp/cpp-test/test-l/nest4.h | 2 +
libraries/mcpp/cpp-test/test-l/nest40.h | 2 +
libraries/mcpp/cpp-test/test-l/nest41.h | 2 +
libraries/mcpp/cpp-test/test-l/nest42.h | 2 +
libraries/mcpp/cpp-test/test-l/nest43.h | 2 +
libraries/mcpp/cpp-test/test-l/nest44.h | 2 +
libraries/mcpp/cpp-test/test-l/nest45.h | 2 +
libraries/mcpp/cpp-test/test-l/nest46.h | 2 +
libraries/mcpp/cpp-test/test-l/nest47.h | 2 +
libraries/mcpp/cpp-test/test-l/nest48.h | 2 +
libraries/mcpp/cpp-test/test-l/nest49.h | 2 +
libraries/mcpp/cpp-test/test-l/nest5.h | 2 +
libraries/mcpp/cpp-test/test-l/nest50.h | 2 +
libraries/mcpp/cpp-test/test-l/nest51.h | 2 +
libraries/mcpp/cpp-test/test-l/nest52.h | 2 +
libraries/mcpp/cpp-test/test-l/nest53.h | 2 +
libraries/mcpp/cpp-test/test-l/nest54.h | 2 +
libraries/mcpp/cpp-test/test-l/nest55.h | 2 +
libraries/mcpp/cpp-test/test-l/nest56.h | 2 +
libraries/mcpp/cpp-test/test-l/nest57.h | 2 +
libraries/mcpp/cpp-test/test-l/nest58.h | 2 +
libraries/mcpp/cpp-test/test-l/nest59.h | 2 +
libraries/mcpp/cpp-test/test-l/nest6.h | 2 +
libraries/mcpp/cpp-test/test-l/nest60.h | 2 +
libraries/mcpp/cpp-test/test-l/nest61.h | 2 +
libraries/mcpp/cpp-test/test-l/nest62.h | 2 +
libraries/mcpp/cpp-test/test-l/nest63.h | 6 +
libraries/mcpp/cpp-test/test-l/nest64.h | 2 +
libraries/mcpp/cpp-test/test-l/nest65.h | 2 +
libraries/mcpp/cpp-test/test-l/nest66.h | 2 +
libraries/mcpp/cpp-test/test-l/nest67.h | 2 +
libraries/mcpp/cpp-test/test-l/nest68.h | 2 +
libraries/mcpp/cpp-test/test-l/nest69.h | 2 +
libraries/mcpp/cpp-test/test-l/nest7.h | 2 +
libraries/mcpp/cpp-test/test-l/nest70.h | 2 +
libraries/mcpp/cpp-test/test-l/nest71.h | 2 +
libraries/mcpp/cpp-test/test-l/nest72.h | 2 +
libraries/mcpp/cpp-test/test-l/nest73.h | 2 +
libraries/mcpp/cpp-test/test-l/nest74.h | 2 +
libraries/mcpp/cpp-test/test-l/nest75.h | 2 +
libraries/mcpp/cpp-test/test-l/nest76.h | 2 +
libraries/mcpp/cpp-test/test-l/nest77.h | 2 +
libraries/mcpp/cpp-test/test-l/nest78.h | 2 +
libraries/mcpp/cpp-test/test-l/nest79.h | 2 +
libraries/mcpp/cpp-test/test-l/nest8.h | 2 +
libraries/mcpp/cpp-test/test-l/nest80.h | 2 +
libraries/mcpp/cpp-test/test-l/nest81.h | 2 +
libraries/mcpp/cpp-test/test-l/nest82.h | 2 +
libraries/mcpp/cpp-test/test-l/nest83.h | 2 +
libraries/mcpp/cpp-test/test-l/nest84.h | 2 +
libraries/mcpp/cpp-test/test-l/nest85.h | 2 +
libraries/mcpp/cpp-test/test-l/nest86.h | 2 +
libraries/mcpp/cpp-test/test-l/nest87.h | 2 +
libraries/mcpp/cpp-test/test-l/nest88.h | 2 +
libraries/mcpp/cpp-test/test-l/nest89.h | 2 +
libraries/mcpp/cpp-test/test-l/nest9.h | 2 +
libraries/mcpp/cpp-test/test-l/nest90.h | 2 +
libraries/mcpp/cpp-test/test-l/nest91.h | 2 +
libraries/mcpp/cpp-test/test-l/nest92.h | 2 +
libraries/mcpp/cpp-test/test-l/nest93.h | 2 +
libraries/mcpp/cpp-test/test-l/nest94.h | 2 +
libraries/mcpp/cpp-test/test-l/nest95.h | 2 +
libraries/mcpp/cpp-test/test-l/nest96.h | 2 +
libraries/mcpp/cpp-test/test-l/nest97.h | 2 +
libraries/mcpp/cpp-test/test-l/nest98.h | 2 +
libraries/mcpp/cpp-test/test-l/nest99.h | 2 +
libraries/mcpp/cpp-test/test-t/cpp-test.exp | 22 +
libraries/mcpp/cpp-test/test-t/e_12_8.c | 8 +
libraries/mcpp/cpp-test/test-t/e_14.c | 12 +
libraries/mcpp/cpp-test/test-t/e_14_10.c | 22 +
libraries/mcpp/cpp-test/test-t/e_14_2.c | 17 +
libraries/mcpp/cpp-test/test-t/e_14_3.c | 27 +
libraries/mcpp/cpp-test/test-t/e_14_7.c | 18 +
libraries/mcpp/cpp-test/test-t/e_14_9.c | 8 +
libraries/mcpp/cpp-test/test-t/e_15_3.c | 18 +
libraries/mcpp/cpp-test/test-t/e_16.c | 12 +
libraries/mcpp/cpp-test/test-t/e_17.c | 32 +
libraries/mcpp/cpp-test/test-t/e_17_5.c | 14 +
libraries/mcpp/cpp-test/test-t/e_18_4.c | 34 +
libraries/mcpp/cpp-test/test-t/e_19_3.c | 40 +
libraries/mcpp/cpp-test/test-t/e_23_3.c | 13 +
libraries/mcpp/cpp-test/test-t/e_24_6.c | 8 +
libraries/mcpp/cpp-test/test-t/e_25_6.c | 17 +
libraries/mcpp/cpp-test/test-t/e_27_7.c | 14 +
libraries/mcpp/cpp-test/test-t/e_29_3.c | 14 +
libraries/mcpp/cpp-test/test-t/e_31.c | 12 +
libraries/mcpp/cpp-test/test-t/e_31_3.c | 14 +
libraries/mcpp/cpp-test/test-t/e_32_5.c | 10 +
libraries/mcpp/cpp-test/test-t/e_33_2.c | 11 +
libraries/mcpp/cpp-test/test-t/e_35_2.c | 9 +
libraries/mcpp/cpp-test/test-t/e_4_3.c | 8 +
libraries/mcpp/cpp-test/test-t/e_7_4.c | 11 +
libraries/mcpp/cpp-test/test-t/e_intmax.c | 18 +
libraries/mcpp/cpp-test/test-t/e_operat.C | 13 +
libraries/mcpp/cpp-test/test-t/e_pragma.c | 9 +
libraries/mcpp/cpp-test/test-t/e_ucn.c | 14 +
libraries/mcpp/cpp-test/test-t/e_vargs.c | 24 +
libraries/mcpp/cpp-test/test-t/header.h | 5 +
libraries/mcpp/cpp-test/test-t/i_32_3.c | 15 +
libraries/mcpp/cpp-test/test-t/i_35.c | 11 +
libraries/mcpp/cpp-test/test-t/ifdef15.h | 50 +
libraries/mcpp/cpp-test/test-t/ifdef31.h | 52 +
libraries/mcpp/cpp-test/test-t/ifdef63.h | 99 +
libraries/mcpp/cpp-test/test-t/line.h | 3 +
libraries/mcpp/cpp-test/test-t/long4095.h | 166 +
libraries/mcpp/cpp-test/test-t/m4095.h | 4101 +++
libraries/mcpp/cpp-test/test-t/n_1.c | 19 +
libraries/mcpp/cpp-test/test-t/n_10.c | 35 +
libraries/mcpp/cpp-test/test-t/n_11.c | 37 +
libraries/mcpp/cpp-test/test-t/n_12.c | 46 +
libraries/mcpp/cpp-test/test-t/n_13.c | 39 +
libraries/mcpp/cpp-test/test-t/n_13_13.c | 37 +
libraries/mcpp/cpp-test/test-t/n_13_5.c | 25 +
libraries/mcpp/cpp-test/test-t/n_13_7.c | 33 +
libraries/mcpp/cpp-test/test-t/n_13_8.c | 33 +
libraries/mcpp/cpp-test/test-t/n_15.c | 28 +
libraries/mcpp/cpp-test/test-t/n_18.c | 34 +
libraries/mcpp/cpp-test/test-t/n_19.c | 23 +
libraries/mcpp/cpp-test/test-t/n_1_3_run.c | 26 +
.../mcpp/cpp-test/test-t/n_1_3_run.c.gcc2 | 26 +
.../mcpp/cpp-test/test-t/n_1_3_run.c.gcc3 | 26 +
libraries/mcpp/cpp-test/test-t/n_2.c | 44 +
libraries/mcpp/cpp-test/test-t/n_20.c | 14 +
libraries/mcpp/cpp-test/test-t/n_21.c | 21 +
libraries/mcpp/cpp-test/test-t/n_22.c | 26 +
libraries/mcpp/cpp-test/test-t/n_23.c | 22 +
libraries/mcpp/cpp-test/test-t/n_24.c | 30 +
libraries/mcpp/cpp-test/test-t/n_24_3_run.c | 33 +
.../mcpp/cpp-test/test-t/n_24_3_run.c.gcc2 | 33 +
.../mcpp/cpp-test/test-t/n_24_3_run.c.gcc3 | 33 +
libraries/mcpp/cpp-test/test-t/n_25.c | 46 +
libraries/mcpp/cpp-test/test-t/n_26.c | 39 +
libraries/mcpp/cpp-test/test-t/n_27.c | 64 +
libraries/mcpp/cpp-test/test-t/n_28.c | 47 +
libraries/mcpp/cpp-test/test-t/n_29.c | 18 +
libraries/mcpp/cpp-test/test-t/n_3.c | 34 +
libraries/mcpp/cpp-test/test-t/n_30.c | 29 +
libraries/mcpp/cpp-test/test-t/n_32.c | 14 +
libraries/mcpp/cpp-test/test-t/n_37.c | 101 +
libraries/mcpp/cpp-test/test-t/n_3_4.c | 13 +
libraries/mcpp/cpp-test/test-t/n_4.c | 21 +
libraries/mcpp/cpp-test/test-t/n_5.c | 17 +
libraries/mcpp/cpp-test/test-t/n_6.c | 31 +
libraries/mcpp/cpp-test/test-t/n_7.c | 27 +
libraries/mcpp/cpp-test/test-t/n_8.c | 16 +
libraries/mcpp/cpp-test/test-t/n_8_2.c | 6 +
libraries/mcpp/cpp-test/test-t/n_9.c | 9 +
libraries/mcpp/cpp-test/test-t/n_bool.C | 32 +
libraries/mcpp/cpp-test/test-t/n_cnvucn.C | 16 +
libraries/mcpp/cpp-test/test-t/n_cplus.C | 11 +
libraries/mcpp/cpp-test/test-t/n_dslcom.c | 12 +
.../mcpp/cpp-test/test-t/n_dslcom_cplus.C | 12 +
libraries/mcpp/cpp-test/test-t/n_line.c | 15 +
libraries/mcpp/cpp-test/test-t/n_llong.c | 24 +
libraries/mcpp/cpp-test/test-t/n_nularg.c | 34 +
libraries/mcpp/cpp-test/test-t/n_ppnum.c | 16 +
libraries/mcpp/cpp-test/test-t/n_pragma.c | 42 +
libraries/mcpp/cpp-test/test-t/n_stdmac.c | 18 +
libraries/mcpp/cpp-test/test-t/n_tlimit.c | 160 +
libraries/mcpp/cpp-test/test-t/n_token.C | 27 +
libraries/mcpp/cpp-test/test-t/n_ucn1.c | 37 +
libraries/mcpp/cpp-test/test-t/n_ucn1_cplus.C | 37 +
libraries/mcpp/cpp-test/test-t/n_ucn2.c | 16 +
libraries/mcpp/cpp-test/test-t/n_vargs.c | 28 +
libraries/mcpp/cpp-test/test-t/nest1.h | 5 +
libraries/mcpp/cpp-test/test-t/nest10.h | 2 +
libraries/mcpp/cpp-test/test-t/nest11.h | 2 +
libraries/mcpp/cpp-test/test-t/nest12.h | 2 +
libraries/mcpp/cpp-test/test-t/nest13.h | 2 +
libraries/mcpp/cpp-test/test-t/nest14.h | 2 +
libraries/mcpp/cpp-test/test-t/nest15.h | 4 +
libraries/mcpp/cpp-test/test-t/nest2.h | 5 +
libraries/mcpp/cpp-test/test-t/nest3.h | 5 +
libraries/mcpp/cpp-test/test-t/nest4.h | 5 +
libraries/mcpp/cpp-test/test-t/nest5.h | 5 +
libraries/mcpp/cpp-test/test-t/nest6.h | 5 +
libraries/mcpp/cpp-test/test-t/nest7.h | 5 +
libraries/mcpp/cpp-test/test-t/nest8.h | 7 +
libraries/mcpp/cpp-test/test-t/nest9.h | 2 +
libraries/mcpp/cpp-test/test-t/pragmas.h | 24 +
libraries/mcpp/cpp-test/test-t/u_1_1.c | 24 +
libraries/mcpp/cpp-test/test-t/u_1_11.c | 11 +
libraries/mcpp/cpp-test/test-t/u_1_12.c | 8 +
libraries/mcpp/cpp-test/test-t/u_1_13.c | 8 +
libraries/mcpp/cpp-test/test-t/u_1_14.c | 14 +
libraries/mcpp/cpp-test/test-t/u_1_17.c | 17 +
libraries/mcpp/cpp-test/test-t/u_1_17s.c | 14 +
libraries/mcpp/cpp-test/test-t/u_1_19.c | 35 +
libraries/mcpp/cpp-test/test-t/u_1_22.c | 24 +
libraries/mcpp/cpp-test/test-t/u_1_24.c | 36 +
libraries/mcpp/cpp-test/test-t/u_1_25.c | 21 +
libraries/mcpp/cpp-test/test-t/u_1_27.c | 9 +
libraries/mcpp/cpp-test/test-t/u_1_28.c | 15 +
libraries/mcpp/cpp-test/test-t/u_1_5.c | 18 +
libraries/mcpp/cpp-test/test-t/u_1_8.c | 21 +
libraries/mcpp/cpp-test/test-t/u_2.c | 15 +
libraries/mcpp/cpp-test/test-t/u_concat.c | 13 +
libraries/mcpp/cpp-test/test-t/u_cplus.C | 8 +
libraries/mcpp/cpp-test/test-t/u_line.c | 17 +
libraries/mcpp/cpp-test/test-t/u_line_s.c | 16 +
libraries/mcpp/cpp-test/test-t/unbal1.h | 2 +
libraries/mcpp/cpp-test/test-t/unbal2.h | 6 +
libraries/mcpp/cpp-test/test-t/unbal3.h | 2 +
libraries/mcpp/cpp-test/test-t/unbal4.h | 2 +
libraries/mcpp/cpp-test/test-t/unbal5.h | 2 +
libraries/mcpp/cpp-test/test-t/unbal6.h | 6 +
libraries/mcpp/cpp-test/test-t/unspcs.c | 34 +
libraries/mcpp/cpp-test/test-t/vers2.h | 12 +
libraries/mcpp/cpp-test/test-t/warn_1_1.c | 13 +
libraries/mcpp/cpp-test/test-t/warn_1_2.c | 20 +
libraries/mcpp/cpp-test/test-t/warn_2.c | 19 +
libraries/mcpp/cpp-test/test-t/warn_3.c | 117 +
libraries/mcpp/doc-jp/LICENSE | 29 +
libraries/mcpp/doc-jp/cpp-test.html | 4137 +++
libraries/mcpp/doc-jp/mcpp-manual.html | 4584 +++
libraries/mcpp/doc-jp/mcpp-porting.html | 1213 +
libraries/mcpp/doc-jp/mcpp-summary.pdf | Bin 0 -> 159608 bytes
libraries/mcpp/doc/LICENSE | 33 +
libraries/mcpp/doc/cpp-test.html | 4088 +++
libraries/mcpp/doc/cpp_test.sum | 46 +
libraries/mcpp/doc/mcpp-manual.html | 4617 +++
libraries/mcpp/doc/mcpp-porting.html | 1181 +
libraries/mcpp/doc/mcpp-summary.pdf | Bin 0 -> 170539 bytes
libraries/mcpp/mcpp-gcc.1 | 158 +
libraries/mcpp/mcpp.1 | 120 +
libraries/mcpp/noconfig/bc55.dif | 44 +
libraries/mcpp/noconfig/bc59.dif | 73 +
libraries/mcpp/noconfig/borlandc.mak | 140 +
libraries/mcpp/noconfig/cyg1310.dif | 107 +
libraries/mcpp/noconfig/cyg1518.dif | 44 +
libraries/mcpp/noconfig/cygwin.mak | 179 +
libraries/mcpp/noconfig/freebsd.mak | 201 +
libraries/mcpp/noconfig/lcc0308.dif | 44 +
libraries/mcpp/noconfig/lcc0603.dif | 44 +
libraries/mcpp/noconfig/lcc_w32.mak | 112 +
libraries/mcpp/noconfig/linux.mak | 212 +
libraries/mcpp/noconfig/linux_gcc2953.dif | 105 +
libraries/mcpp/noconfig/linux_gcc32.dif | 76 +
libraries/mcpp/noconfig/linux_gcc336.dif | 76 +
libraries/mcpp/noconfig/linux_gcc343.dif | 42 +
libraries/mcpp/noconfig/linux_gcc412.dif | 86 +
libraries/mcpp/noconfig/mac_gcc401_i686.dif | 86 +
.../mcpp/noconfig/mac_gcc401_powerpc.dif | 86 +
libraries/mcpp/noconfig/mac_osx.mak | 222 +
libraries/mcpp/noconfig/mingw.mak | 187 +
libraries/mcpp/noconfig/mingw345.dif | 44 +
libraries/mcpp/noconfig/vc2002.dif | 67 +
libraries/mcpp/noconfig/vc2003.dif | 67 +
libraries/mcpp/noconfig/vc2005.dif | 67 +
libraries/mcpp/noconfig/vc2008.dif | 44 +
libraries/mcpp/noconfig/vc6.dif | 67 +
libraries/mcpp/noconfig/visualc.mak | 151 +
libraries/mcpp/src/Makefile.am | 52 +
libraries/mcpp/src/Makefile.in | 687 +
libraries/mcpp/src/cc1.c | 61 +
libraries/mcpp/src/config.h.in | 226 +
libraries/mcpp/src/configed.H | 382 +
libraries/mcpp/src/directive.c | 1699 ++
libraries/mcpp/src/eval.c | 1673 ++
libraries/mcpp/src/expand.c | 2980 ++
libraries/mcpp/src/internal.H | 562 +
libraries/mcpp/src/main.c | 1129 +
libraries/mcpp/src/main_libmcpp.c | 9 +
libraries/mcpp/src/mbchar.c | 869 +
libraries/mcpp/src/mcpp_lib.def | 7 +
libraries/mcpp/src/mcpp_lib.h | 31 +
libraries/mcpp/src/mcpp_out.h | 13 +
libraries/mcpp/src/noconfig.H | 608 +
libraries/mcpp/src/preproc.c | 9 +
libraries/mcpp/src/set_mcpp.sh | 291 +
libraries/mcpp/src/support.c | 2809 ++
libraries/mcpp/src/system.H | 396 +
libraries/mcpp/src/system.c | 4913 ++++
libraries/mcpp/src/testmain.c | 83 +
libraries/mcpp/src/unset_mcpp.sh | 95 +
libraries/mcpp/test-c/LICENSE | 29 +
libraries/mcpp/test-c/defs.h | 21 +
libraries/mcpp/test-c/e_12_8.c | 11 +
libraries/mcpp/test-c/e_14.c | 43 +
libraries/mcpp/test-c/e_14_10.c | 19 +
libraries/mcpp/test-c/e_14_7.c | 19 +
libraries/mcpp/test-c/e_14_9.c | 11 +
libraries/mcpp/test-c/e_15_3.c | 21 +
libraries/mcpp/test-c/e_16.c | 15 +
libraries/mcpp/test-c/e_17.c | 34 +
libraries/mcpp/test-c/e_18_4.c | 36 +
libraries/mcpp/test-c/e_19_3.c | 37 +
libraries/mcpp/test-c/e_23_3.c | 16 +
libraries/mcpp/test-c/e_24_6.c | 11 +
libraries/mcpp/test-c/e_25_6.c | 18 +
libraries/mcpp/test-c/e_27_7.c | 16 +
libraries/mcpp/test-c/e_29_3.c | 17 +
libraries/mcpp/test-c/e_31.c | 15 +
libraries/mcpp/test-c/e_31_3.c | 15 +
libraries/mcpp/test-c/e_32_5.c | 12 +
libraries/mcpp/test-c/e_33_2.c | 12 +
libraries/mcpp/test-c/e_35_2.c | 13 +
libraries/mcpp/test-c/e_4_3.c | 11 +
libraries/mcpp/test-c/e_7_4.c | 12 +
libraries/mcpp/test-c/e_std.c | 376 +
libraries/mcpp/test-c/header.h | 3 +
libraries/mcpp/test-c/i_32_3.c | 26 +
libraries/mcpp/test-c/i_35.c | 19 +
libraries/mcpp/test-c/i_35_3.c | 19 +
libraries/mcpp/test-c/ifdef15.h | 48 +
libraries/mcpp/test-c/line.h | 7 +
libraries/mcpp/test-c/m1024.h | 1026 +
libraries/mcpp/test-c/m_33_big5.c | 31 +
libraries/mcpp/test-c/m_33_eucjp.c | 31 +
libraries/mcpp/test-c/m_33_gb.c | 31 +
libraries/mcpp/test-c/m_33_jis.c | 33 +
libraries/mcpp/test-c/m_33_ksc.c | 31 +
libraries/mcpp/test-c/m_33_sjis.c | 31 +
libraries/mcpp/test-c/m_33_utf8.c | 31 +
libraries/mcpp/test-c/m_34_big5.c | 26 +
libraries/mcpp/test-c/m_34_eucjp.c | 26 +
libraries/mcpp/test-c/m_34_gb.c | 26 +
libraries/mcpp/test-c/m_34_jis.c | 27 +
libraries/mcpp/test-c/m_34_ksc.c | 26 +
libraries/mcpp/test-c/m_34_sjis.c | 26 +
libraries/mcpp/test-c/m_34_utf8.c | 26 +
libraries/mcpp/test-c/m_36_big5.c | 29 +
libraries/mcpp/test-c/m_36_jis.c | 33 +
libraries/mcpp/test-c/m_36_sjis.c | 29 +
libraries/mcpp/test-c/n_1.c | 28 +
libraries/mcpp/test-c/n_10.c | 36 +
libraries/mcpp/test-c/n_11.c | 40 +
libraries/mcpp/test-c/n_12.c | 59 +
libraries/mcpp/test-c/n_13.c | 51 +
libraries/mcpp/test-c/n_13_13.c | 39 +
libraries/mcpp/test-c/n_13_5.c | 36 +
libraries/mcpp/test-c/n_13_7.c | 31 +
libraries/mcpp/test-c/n_13_8.c | 46 +
libraries/mcpp/test-c/n_15.c | 29 +
libraries/mcpp/test-c/n_18.c | 33 +
libraries/mcpp/test-c/n_19.c | 27 +
libraries/mcpp/test-c/n_2.c | 41 +
libraries/mcpp/test-c/n_20.c | 19 +
libraries/mcpp/test-c/n_21.c | 24 +
libraries/mcpp/test-c/n_22.c | 26 +
libraries/mcpp/test-c/n_23.c | 26 +
libraries/mcpp/test-c/n_24.c | 36 +
libraries/mcpp/test-c/n_25.c | 42 +
libraries/mcpp/test-c/n_26.c | 56 +
libraries/mcpp/test-c/n_27.c | 61 +
libraries/mcpp/test-c/n_28.c | 40 +
libraries/mcpp/test-c/n_29.c | 22 +
libraries/mcpp/test-c/n_3.c | 35 +
libraries/mcpp/test-c/n_30.c | 33 +
libraries/mcpp/test-c/n_32.c | 24 +
libraries/mcpp/test-c/n_37.c | 108 +
libraries/mcpp/test-c/n_3_4.c | 8 +
libraries/mcpp/test-c/n_4.c | 20 +
libraries/mcpp/test-c/n_5.c | 20 +
libraries/mcpp/test-c/n_6.c | 32 +
libraries/mcpp/test-c/n_7.c | 28 +
libraries/mcpp/test-c/n_8.c | 12 +
libraries/mcpp/test-c/n_8_2.c | 5 +
libraries/mcpp/test-c/n_9.c | 16 +
libraries/mcpp/test-c/n_i_.lst | 35 +
libraries/mcpp/test-c/n_std.c | 957 +
libraries/mcpp/test-c/nest1.h | 5 +
libraries/mcpp/test-c/nest10.h | 2 +
libraries/mcpp/test-c/nest11.h | 2 +
libraries/mcpp/test-c/nest12.h | 2 +
libraries/mcpp/test-c/nest13.h | 2 +
libraries/mcpp/test-c/nest14.h | 2 +
libraries/mcpp/test-c/nest15.h | 4 +
libraries/mcpp/test-c/nest2.h | 5 +
libraries/mcpp/test-c/nest3.h | 5 +
libraries/mcpp/test-c/nest4.h | 5 +
libraries/mcpp/test-c/nest5.h | 5 +
libraries/mcpp/test-c/nest6.h | 5 +
libraries/mcpp/test-c/nest7.h | 5 +
libraries/mcpp/test-c/nest8.h | 8 +
libraries/mcpp/test-c/nest9.h | 2 +
libraries/mcpp/test-c/side_cpp | 46 +
libraries/mcpp/test-c/u_1_1.c | 24 +
libraries/mcpp/test-c/u_1_11.c | 15 +
libraries/mcpp/test-c/u_1_12.c | 11 +
libraries/mcpp/test-c/u_1_13.c | 11 +
libraries/mcpp/test-c/u_1_14.c | 18 +
libraries/mcpp/test-c/u_1_17.c | 27 +
libraries/mcpp/test-c/u_1_19.c | 45 +
libraries/mcpp/test-c/u_1_22.c | 25 +
libraries/mcpp/test-c/u_1_23.c | 16 +
libraries/mcpp/test-c/u_1_24.c | 47 +
libraries/mcpp/test-c/u_1_25.c | 26 +
libraries/mcpp/test-c/u_1_27.c | 11 +
libraries/mcpp/test-c/u_1_28.c | 17 +
libraries/mcpp/test-c/u_1_5.c | 18 +
libraries/mcpp/test-c/u_1_7_big5.c | 13 +
libraries/mcpp/test-c/u_1_7_eucjp.c | 12 +
libraries/mcpp/test-c/u_1_7_gb.c | 13 +
libraries/mcpp/test-c/u_1_7_jis.c | 12 +
libraries/mcpp/test-c/u_1_7_ksc.c | 13 +
libraries/mcpp/test-c/u_1_7_sjis.c | 13 +
libraries/mcpp/test-c/u_1_7_utf8.c | 16 +
libraries/mcpp/test-c/u_1_8.c | 21 +
libraries/mcpp/test-c/u_2.c | 17 +
libraries/mcpp/test-c/unbal1.h | 2 +
libraries/mcpp/test-c/unbal2.h | 6 +
libraries/mcpp/test-c/unbal3.h | 2 +
libraries/mcpp/test-c/unbal4.h | 2 +
libraries/mcpp/test-c/unbal5.h | 2 +
libraries/mcpp/test-c/unbal6.h | 6 +
libraries/mcpp/test-c/undefs.c | 240 +
libraries/mcpp/test-c/unspcs.c | 36 +
libraries/mcpp/test-c/warns.c | 161 +
libraries/mcpp/test-l/LICENSE | 29 +
libraries/mcpp/test-l/defs.h | 38 +
libraries/mcpp/test-l/ifdef127.h | 389 +
libraries/mcpp/test-l/ifdef255.h | 388 +
libraries/mcpp/test-l/l_37_1.t | 24 +
libraries/mcpp/test-l/l_37_2.t | 24 +
libraries/mcpp/test-l/l_37_3.c | 48 +
libraries/mcpp/test-l/l_37_3.t | 18 +
libraries/mcpp/test-l/l_37_4.t | 6 +
libraries/mcpp/test-l/l_37_5.t | 7 +
libraries/mcpp/test-l/l_37_6.c | 85 +
libraries/mcpp/test-l/l_37_6.t | 73 +
libraries/mcpp/test-l/l_37_7.c | 146 +
libraries/mcpp/test-l/l_37_7.t | 135 +
libraries/mcpp/test-l/l_37_8.c | 7 +
libraries/mcpp/test-l/l_37_9.t | 14 +
libraries/mcpp/test-l/longline.c | 1537 +
libraries/mcpp/test-l/m8191.h | 8196 ++++++
libraries/mcpp/test-l/nest1.h | 2 +
libraries/mcpp/test-l/nest10.h | 2 +
libraries/mcpp/test-l/nest100.h | 2 +
libraries/mcpp/test-l/nest101.h | 2 +
libraries/mcpp/test-l/nest102.h | 2 +
libraries/mcpp/test-l/nest103.h | 2 +
libraries/mcpp/test-l/nest104.h | 2 +
libraries/mcpp/test-l/nest105.h | 2 +
libraries/mcpp/test-l/nest106.h | 2 +
libraries/mcpp/test-l/nest107.h | 2 +
libraries/mcpp/test-l/nest108.h | 2 +
libraries/mcpp/test-l/nest109.h | 2 +
libraries/mcpp/test-l/nest11.h | 2 +
libraries/mcpp/test-l/nest110.h | 2 +
libraries/mcpp/test-l/nest111.h | 2 +
libraries/mcpp/test-l/nest112.h | 2 +
libraries/mcpp/test-l/nest113.h | 2 +
libraries/mcpp/test-l/nest114.h | 2 +
libraries/mcpp/test-l/nest115.h | 2 +
libraries/mcpp/test-l/nest116.h | 2 +
libraries/mcpp/test-l/nest117.h | 2 +
libraries/mcpp/test-l/nest118.h | 2 +
libraries/mcpp/test-l/nest119.h | 2 +
libraries/mcpp/test-l/nest12.h | 2 +
libraries/mcpp/test-l/nest120.h | 2 +
libraries/mcpp/test-l/nest121.h | 2 +
libraries/mcpp/test-l/nest122.h | 2 +
libraries/mcpp/test-l/nest123.h | 2 +
libraries/mcpp/test-l/nest124.h | 2 +
libraries/mcpp/test-l/nest125.h | 2 +
libraries/mcpp/test-l/nest126.h | 2 +
libraries/mcpp/test-l/nest127.h | 2 +
libraries/mcpp/test-l/nest13.h | 2 +
libraries/mcpp/test-l/nest14.h | 2 +
libraries/mcpp/test-l/nest15.h | 6 +
libraries/mcpp/test-l/nest16.h | 2 +
libraries/mcpp/test-l/nest17.h | 2 +
libraries/mcpp/test-l/nest18.h | 2 +
libraries/mcpp/test-l/nest19.h | 2 +
libraries/mcpp/test-l/nest2.h | 2 +
libraries/mcpp/test-l/nest20.h | 2 +
libraries/mcpp/test-l/nest21.h | 2 +
libraries/mcpp/test-l/nest22.h | 2 +
libraries/mcpp/test-l/nest23.h | 2 +
libraries/mcpp/test-l/nest24.h | 2 +
libraries/mcpp/test-l/nest25.h | 2 +
libraries/mcpp/test-l/nest26.h | 2 +
libraries/mcpp/test-l/nest27.h | 2 +
libraries/mcpp/test-l/nest28.h | 2 +
libraries/mcpp/test-l/nest29.h | 2 +
libraries/mcpp/test-l/nest3.h | 2 +
libraries/mcpp/test-l/nest30.h | 2 +
libraries/mcpp/test-l/nest31.h | 6 +
libraries/mcpp/test-l/nest32.h | 2 +
libraries/mcpp/test-l/nest33.h | 2 +
libraries/mcpp/test-l/nest34.h | 2 +
libraries/mcpp/test-l/nest35.h | 2 +
libraries/mcpp/test-l/nest36.h | 2 +
libraries/mcpp/test-l/nest37.h | 2 +
libraries/mcpp/test-l/nest38.h | 2 +
libraries/mcpp/test-l/nest39.h | 2 +
libraries/mcpp/test-l/nest4.h | 2 +
libraries/mcpp/test-l/nest40.h | 2 +
libraries/mcpp/test-l/nest41.h | 2 +
libraries/mcpp/test-l/nest42.h | 2 +
libraries/mcpp/test-l/nest43.h | 2 +
libraries/mcpp/test-l/nest44.h | 2 +
libraries/mcpp/test-l/nest45.h | 2 +
libraries/mcpp/test-l/nest46.h | 2 +
libraries/mcpp/test-l/nest47.h | 2 +
libraries/mcpp/test-l/nest48.h | 2 +
libraries/mcpp/test-l/nest49.h | 2 +
libraries/mcpp/test-l/nest5.h | 2 +
libraries/mcpp/test-l/nest50.h | 2 +
libraries/mcpp/test-l/nest51.h | 2 +
libraries/mcpp/test-l/nest52.h | 2 +
libraries/mcpp/test-l/nest53.h | 2 +
libraries/mcpp/test-l/nest54.h | 2 +
libraries/mcpp/test-l/nest55.h | 2 +
libraries/mcpp/test-l/nest56.h | 2 +
libraries/mcpp/test-l/nest57.h | 2 +
libraries/mcpp/test-l/nest58.h | 2 +
libraries/mcpp/test-l/nest59.h | 2 +
libraries/mcpp/test-l/nest6.h | 2 +
libraries/mcpp/test-l/nest60.h | 2 +
libraries/mcpp/test-l/nest61.h | 2 +
libraries/mcpp/test-l/nest62.h | 2 +
libraries/mcpp/test-l/nest63.h | 6 +
libraries/mcpp/test-l/nest64.h | 2 +
libraries/mcpp/test-l/nest65.h | 2 +
libraries/mcpp/test-l/nest66.h | 2 +
libraries/mcpp/test-l/nest67.h | 2 +
libraries/mcpp/test-l/nest68.h | 2 +
libraries/mcpp/test-l/nest69.h | 2 +
libraries/mcpp/test-l/nest7.h | 2 +
libraries/mcpp/test-l/nest70.h | 2 +
libraries/mcpp/test-l/nest71.h | 2 +
libraries/mcpp/test-l/nest72.h | 2 +
libraries/mcpp/test-l/nest73.h | 2 +
libraries/mcpp/test-l/nest74.h | 2 +
libraries/mcpp/test-l/nest75.h | 2 +
libraries/mcpp/test-l/nest76.h | 2 +
libraries/mcpp/test-l/nest77.h | 2 +
libraries/mcpp/test-l/nest78.h | 2 +
libraries/mcpp/test-l/nest79.h | 2 +
libraries/mcpp/test-l/nest8.h | 2 +
libraries/mcpp/test-l/nest80.h | 2 +
libraries/mcpp/test-l/nest81.h | 2 +
libraries/mcpp/test-l/nest82.h | 2 +
libraries/mcpp/test-l/nest83.h | 2 +
libraries/mcpp/test-l/nest84.h | 2 +
libraries/mcpp/test-l/nest85.h | 2 +
libraries/mcpp/test-l/nest86.h | 2 +
libraries/mcpp/test-l/nest87.h | 2 +
libraries/mcpp/test-l/nest88.h | 2 +
libraries/mcpp/test-l/nest89.h | 2 +
libraries/mcpp/test-l/nest9.h | 2 +
libraries/mcpp/test-l/nest90.h | 2 +
libraries/mcpp/test-l/nest91.h | 2 +
libraries/mcpp/test-l/nest92.h | 2 +
libraries/mcpp/test-l/nest93.h | 2 +
libraries/mcpp/test-l/nest94.h | 2 +
libraries/mcpp/test-l/nest95.h | 2 +
libraries/mcpp/test-l/nest96.h | 2 +
libraries/mcpp/test-l/nest97.h | 2 +
libraries/mcpp/test-l/nest98.h | 2 +
libraries/mcpp/test-l/nest99.h | 2 +
libraries/mcpp/test-t/LICENSE | 29 +
libraries/mcpp/test-t/e_12_8.t | 6 +
libraries/mcpp/test-t/e_14.t | 38 +
libraries/mcpp/test-t/e_14_10.t | 17 +
libraries/mcpp/test-t/e_14_7.t | 14 +
libraries/mcpp/test-t/e_14_9.t | 6 +
libraries/mcpp/test-t/e_15_3.t | 16 +
libraries/mcpp/test-t/e_16.t | 10 +
libraries/mcpp/test-t/e_17.t | 37 +
libraries/mcpp/test-t/e_18_4.t | 31 +
libraries/mcpp/test-t/e_19_3.t | 34 +
libraries/mcpp/test-t/e_23_3.t | 11 +
libraries/mcpp/test-t/e_24_6.t | 6 +
libraries/mcpp/test-t/e_25_6.t | 14 +
libraries/mcpp/test-t/e_27_7.t | 11 +
libraries/mcpp/test-t/e_29_3.t | 12 +
libraries/mcpp/test-t/e_31.t | 10 +
libraries/mcpp/test-t/e_31_3.t | 10 +
libraries/mcpp/test-t/e_32_5.t | 7 +
libraries/mcpp/test-t/e_33_2.t | 7 +
libraries/mcpp/test-t/e_35_2.t | 6 +
libraries/mcpp/test-t/e_4_3.t | 6 +
libraries/mcpp/test-t/e_7_4.t | 9 +
libraries/mcpp/test-t/e_intmax.t | 23 +
libraries/mcpp/test-t/e_operat.cc | 10 +
libraries/mcpp/test-t/e_operat.t | 10 +
libraries/mcpp/test-t/e_post.t | 314 +
libraries/mcpp/test-t/e_pragma.t | 4 +
libraries/mcpp/test-t/e_std.t | 354 +
libraries/mcpp/test-t/e_std99.t | 66 +
libraries/mcpp/test-t/e_ucn.t | 7 +
libraries/mcpp/test-t/e_vargs.t | 17 +
libraries/mcpp/test-t/header.h | 3 +
libraries/mcpp/test-t/i_32_3.t | 13 +
libraries/mcpp/test-t/i_35.t | 8 +
libraries/mcpp/test-t/i_35_3.t | 8 +
libraries/mcpp/test-t/i_mbident.t | 17 +
libraries/mcpp/test-t/ifdef15.h | 50 +
libraries/mcpp/test-t/ifdef31.h | 52 +
libraries/mcpp/test-t/ifdef63.h | 99 +
libraries/mcpp/test-t/line.h | 3 +
libraries/mcpp/test-t/long4095.h | 166 +
libraries/mcpp/test-t/m4095.h | 4101 +++
libraries/mcpp/test-t/m_33_big5.t | 22 +
libraries/mcpp/test-t/m_33_eucjp.t | 22 +
libraries/mcpp/test-t/m_33_gb.t | 22 +
libraries/mcpp/test-t/m_33_jis.t | 24 +
libraries/mcpp/test-t/m_33_ksc.t | 22 +
libraries/mcpp/test-t/m_33_sjis.t | 22 +
libraries/mcpp/test-t/m_33_utf8.t | 22 +
libraries/mcpp/test-t/m_34_big5.t | 13 +
libraries/mcpp/test-t/m_34_eucjp.t | 13 +
libraries/mcpp/test-t/m_34_gb.t | 13 +
libraries/mcpp/test-t/m_34_jis.t | 14 +
libraries/mcpp/test-t/m_34_ksc.t | 13 +
libraries/mcpp/test-t/m_34_sjis.t | 13 +
libraries/mcpp/test-t/m_34_utf8.t | 13 +
libraries/mcpp/test-t/m_36_big5.t | 20 +
libraries/mcpp/test-t/m_36_jis.t | 31 +
libraries/mcpp/test-t/m_36_sjis.t | 24 +
libraries/mcpp/test-t/misc.t | 401 +
libraries/mcpp/test-t/n_1.t | 15 +
libraries/mcpp/test-t/n_10.t | 27 +
libraries/mcpp/test-t/n_11.t | 28 +
libraries/mcpp/test-t/n_12.t | 42 +
libraries/mcpp/test-t/n_13.t | 37 +
libraries/mcpp/test-t/n_13_13.t | 30 +
libraries/mcpp/test-t/n_13_5.t | 22 +
libraries/mcpp/test-t/n_13_7.t | 25 +
libraries/mcpp/test-t/n_13_8.t | 31 +
libraries/mcpp/test-t/n_15.t | 20 +
libraries/mcpp/test-t/n_18.t | 24 +
libraries/mcpp/test-t/n_19.t | 16 +
libraries/mcpp/test-t/n_2.t | 34 +
libraries/mcpp/test-t/n_20.t | 7 +
libraries/mcpp/test-t/n_21.t | 13 +
libraries/mcpp/test-t/n_22.t | 17 +
libraries/mcpp/test-t/n_23.t | 14 +
libraries/mcpp/test-t/n_24.t | 32 +
libraries/mcpp/test-t/n_25.t | 35 +
libraries/mcpp/test-t/n_26.t | 28 +
libraries/mcpp/test-t/n_27.t | 51 +
libraries/mcpp/test-t/n_28.t | 32 +
libraries/mcpp/test-t/n_29.t | 11 +
libraries/mcpp/test-t/n_3.t | 26 +
libraries/mcpp/test-t/n_30.t | 18 +
libraries/mcpp/test-t/n_32.t | 12 +
libraries/mcpp/test-t/n_37.t | 88 +
libraries/mcpp/test-t/n_3_4.t | 8 +
libraries/mcpp/test-t/n_4.t | 12 +
libraries/mcpp/test-t/n_5.t | 10 +
libraries/mcpp/test-t/n_6.t | 22 +
libraries/mcpp/test-t/n_7.t | 18 +
libraries/mcpp/test-t/n_8.t | 12 +
libraries/mcpp/test-t/n_8_2.t | 5 +
libraries/mcpp/test-t/n_9.t | 7 +
libraries/mcpp/test-t/n_bool.cc | 23 +
libraries/mcpp/test-t/n_bool.t | 23 +
libraries/mcpp/test-t/n_cnvucn.cc | 23 +
libraries/mcpp/test-t/n_cnvucn.t | 23 +
libraries/mcpp/test-t/n_cplus.cc | 5 +
libraries/mcpp/test-t/n_cplus.t | 5 +
libraries/mcpp/test-t/n_dslcom.cc | 4 +
libraries/mcpp/test-t/n_dslcom.t | 4 +
libraries/mcpp/test-t/n_line.t | 7 +
libraries/mcpp/test-t/n_llong.t | 20 +
libraries/mcpp/test-t/n_nularg.t | 26 +
libraries/mcpp/test-t/n_post.t | 772 +
libraries/mcpp/test-t/n_post99.t | 275 +
libraries/mcpp/test-t/n_ppnum.t | 8 +
libraries/mcpp/test-t/n_pragma.t | 32 +
libraries/mcpp/test-t/n_std.t | 831 +
libraries/mcpp/test-t/n_std99.t | 319 +
libraries/mcpp/test-t/n_stdmac.t | 8 +
libraries/mcpp/test-t/n_tlim_2.t | 28 +
libraries/mcpp/test-t/n_tlim_3.t | 5 +
libraries/mcpp/test-t/n_tlim_4.t | 5 +
libraries/mcpp/test-t/n_tlim_5.t | 5 +
libraries/mcpp/test-t/n_tlim_6.t | 16 +
libraries/mcpp/test-t/n_tlim_7.t | 70 +
libraries/mcpp/test-t/n_tlim_8.t | 3 +
libraries/mcpp/test-t/n_tlim_9.t | 7 +
libraries/mcpp/test-t/n_tlimit.t | 147 +
libraries/mcpp/test-t/n_token.cc | 18 +
libraries/mcpp/test-t/n_token.t | 18 +
libraries/mcpp/test-t/n_ucn1.cc | 24 +
libraries/mcpp/test-t/n_ucn1.t | 25 +
libraries/mcpp/test-t/n_ucn2.t | 8 +
libraries/mcpp/test-t/n_vargs.t | 17 +
libraries/mcpp/test-t/nest1.h | 5 +
libraries/mcpp/test-t/nest10.h | 2 +
libraries/mcpp/test-t/nest11.h | 2 +
libraries/mcpp/test-t/nest12.h | 2 +
libraries/mcpp/test-t/nest13.h | 2 +
libraries/mcpp/test-t/nest14.h | 2 +
libraries/mcpp/test-t/nest15.h | 4 +
libraries/mcpp/test-t/nest2.h | 5 +
libraries/mcpp/test-t/nest3.h | 5 +
libraries/mcpp/test-t/nest4.h | 5 +
libraries/mcpp/test-t/nest5.h | 5 +
libraries/mcpp/test-t/nest6.h | 5 +
libraries/mcpp/test-t/nest7.h | 5 +
libraries/mcpp/test-t/nest8.h | 7 +
libraries/mcpp/test-t/nest9.h | 2 +
libraries/mcpp/test-t/pragmas.h | 24 +
libraries/mcpp/test-t/recurs.t | 21 +
libraries/mcpp/test-t/trad.t | 64 +
libraries/mcpp/test-t/u_1_1.t | 18 +
libraries/mcpp/test-t/u_1_11.t | 9 +
libraries/mcpp/test-t/u_1_12.t | 6 +
libraries/mcpp/test-t/u_1_13.t | 6 +
libraries/mcpp/test-t/u_1_14.t | 15 +
libraries/mcpp/test-t/u_1_17.t | 26 +
libraries/mcpp/test-t/u_1_19.t | 37 +
libraries/mcpp/test-t/u_1_22.t | 22 +
libraries/mcpp/test-t/u_1_24.t | 37 +
libraries/mcpp/test-t/u_1_25.t | 18 +
libraries/mcpp/test-t/u_1_27.t | 6 +
libraries/mcpp/test-t/u_1_28.t | 13 +
libraries/mcpp/test-t/u_1_5.t | 13 +
libraries/mcpp/test-t/u_1_7_big5.t | 9 +
libraries/mcpp/test-t/u_1_7_eucjp.t | 8 +
libraries/mcpp/test-t/u_1_7_gb.t | 9 +
libraries/mcpp/test-t/u_1_7_jis.t | 8 +
libraries/mcpp/test-t/u_1_7_ksc.t | 9 +
libraries/mcpp/test-t/u_1_7_sjis.t | 9 +
libraries/mcpp/test-t/u_1_7_utf8.t | 11 +
libraries/mcpp/test-t/u_1_8.t | 7 +
libraries/mcpp/test-t/u_1_9.t | 10 +
libraries/mcpp/test-t/u_2.t | 12 +
libraries/mcpp/test-t/u_concat.t | 10 +
libraries/mcpp/test-t/u_cplus.cc | 5 +
libraries/mcpp/test-t/u_cplus.t | 5 +
libraries/mcpp/test-t/u_line.t | 12 +
libraries/mcpp/test-t/unbal1.h | 2 +
libraries/mcpp/test-t/unbal2.h | 6 +
libraries/mcpp/test-t/unbal3.h | 2 +
libraries/mcpp/test-t/unbal4.h | 2 +
libraries/mcpp/test-t/unbal5.h | 2 +
libraries/mcpp/test-t/unbal6.h | 6 +
libraries/mcpp/test-t/undefs.t | 239 +
libraries/mcpp/test-t/unspcs.t | 29 +
libraries/mcpp/test-t/vers2.h | 12 +
libraries/mcpp/test-t/warns.t | 137 +
libraries/mcpp/tests/Makefile.am | 40 +
libraries/mcpp/tests/Makefile.in | 411 +
libraries/mcpp/tests/after_test.sh | 34 +
libraries/mcpp/tests/set_test.sh | 52 +
libraries/mcpp/tool/LICENSE | 3 +
libraries/mcpp/tool/app_once.bat | 3 +
libraries/mcpp/tool/clock_of.c | 45 +
libraries/mcpp/tool/cpp_test.c | 178 +
libraries/mcpp/tool/ins_once.c | 291 +
libraries/mcpp/tool/once.txt | 2 +
libraries/mcpp/tool/rm_once.c | 40 +
libraries/mcpp/tool/total.c | 234 +
853 files changed, 140033 insertions(+)
create mode 100644 libraries/mcpp/ChangeLog
create mode 100644 libraries/mcpp/ChangeLog.old
create mode 100644 libraries/mcpp/INSTALL
create mode 100644 libraries/mcpp/INSTALL-jp
create mode 100644 libraries/mcpp/LICENSE
create mode 100644 libraries/mcpp/Makefile.am
create mode 100644 libraries/mcpp/Makefile.in
create mode 100644 libraries/mcpp/NEWS
create mode 100644 libraries/mcpp/README
create mode 100644 libraries/mcpp/aclocal.m4
create mode 100644 libraries/mcpp/bin/mcpp-manual.html
create mode 100644 libraries/mcpp/bin/mcpp-summary-272.pdf
create mode 100644 libraries/mcpp/bin/mcpp.exe
create mode 100644 libraries/mcpp/config/compile
create mode 100644 libraries/mcpp/config/config.guess
create mode 100644 libraries/mcpp/config/config.sub
create mode 100644 libraries/mcpp/config/cygwin_root
create mode 100644 libraries/mcpp/config/depcomp
create mode 100644 libraries/mcpp/config/install-sh
create mode 100644 libraries/mcpp/config/ltmain.sh
create mode 100644 libraries/mcpp/config/mb_big5
create mode 100644 libraries/mcpp/config/mb_jis
create mode 100644 libraries/mcpp/config/mb_sjis
create mode 100644 libraries/mcpp/config/mingw_root
create mode 100644 libraries/mcpp/config/missing
create mode 100644 libraries/mcpp/configure
create mode 100644 libraries/mcpp/configure.ac
create mode 100644 libraries/mcpp/cpp-test/LICENSE
create mode 100644 libraries/mcpp/cpp-test/test-l/cpp-test.exp
create mode 100644 libraries/mcpp/cpp-test/test-l/ifdef127.h
create mode 100644 libraries/mcpp/cpp-test/test-l/ifdef255.h
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_1.h
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_2.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_3.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_4.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_5.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_6.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_7.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_8.c
create mode 100644 libraries/mcpp/cpp-test/test-l/l_37_9.c
create mode 100644 libraries/mcpp/cpp-test/test-l/longline.t
create mode 100644 libraries/mcpp/cpp-test/test-l/m8191.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest1.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest10.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest100.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest101.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest102.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest103.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest104.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest105.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest106.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest107.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest108.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest109.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest11.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest110.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest111.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest112.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest113.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest114.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest115.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest116.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest117.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest118.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest119.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest12.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest120.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest121.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest122.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest123.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest124.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest125.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest126.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest127.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest13.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest14.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest15.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest16.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest17.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest18.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest19.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest2.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest20.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest21.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest22.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest23.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest24.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest25.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest26.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest27.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest28.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest29.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest3.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest30.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest31.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest32.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest33.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest34.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest35.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest36.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest37.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest38.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest39.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest4.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest40.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest41.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest42.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest43.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest44.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest45.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest46.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest47.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest48.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest49.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest5.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest50.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest51.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest52.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest53.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest54.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest55.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest56.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest57.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest58.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest59.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest6.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest60.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest61.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest62.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest63.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest64.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest65.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest66.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest67.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest68.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest69.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest7.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest70.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest71.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest72.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest73.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest74.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest75.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest76.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest77.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest78.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest79.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest8.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest80.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest81.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest82.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest83.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest84.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest85.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest86.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest87.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest88.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest89.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest9.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest90.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest91.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest92.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest93.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest94.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest95.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest96.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest97.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest98.h
create mode 100644 libraries/mcpp/cpp-test/test-l/nest99.h
create mode 100644 libraries/mcpp/cpp-test/test-t/cpp-test.exp
create mode 100644 libraries/mcpp/cpp-test/test-t/e_12_8.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14_10.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14_7.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_14_9.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_15_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_16.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_17.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_17_5.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_18_4.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_19_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_23_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_24_6.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_25_6.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_27_7.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_29_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_31.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_31_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_32_5.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_33_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_35_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_4_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_7_4.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_intmax.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_operat.C
create mode 100644 libraries/mcpp/cpp-test/test-t/e_pragma.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_ucn.c
create mode 100644 libraries/mcpp/cpp-test/test-t/e_vargs.c
create mode 100644 libraries/mcpp/cpp-test/test-t/header.h
create mode 100644 libraries/mcpp/cpp-test/test-t/i_32_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/i_35.c
create mode 100644 libraries/mcpp/cpp-test/test-t/ifdef15.h
create mode 100644 libraries/mcpp/cpp-test/test-t/ifdef31.h
create mode 100644 libraries/mcpp/cpp-test/test-t/ifdef63.h
create mode 100644 libraries/mcpp/cpp-test/test-t/line.h
create mode 100644 libraries/mcpp/cpp-test/test-t/long4095.h
create mode 100644 libraries/mcpp/cpp-test/test-t/m4095.h
create mode 100644 libraries/mcpp/cpp-test/test-t/n_1.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_10.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_11.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_12.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_13.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_13_13.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_13_5.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_13_7.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_13_8.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_15.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_18.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_19.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_1_3_run.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_1_3_run.c.gcc2
create mode 100644 libraries/mcpp/cpp-test/test-t/n_1_3_run.c.gcc3
create mode 100644 libraries/mcpp/cpp-test/test-t/n_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_20.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_21.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_22.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_23.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_24.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_24_3_run.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_24_3_run.c.gcc2
create mode 100644 libraries/mcpp/cpp-test/test-t/n_24_3_run.c.gcc3
create mode 100644 libraries/mcpp/cpp-test/test-t/n_25.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_26.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_27.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_28.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_29.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_3.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_30.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_32.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_37.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_3_4.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_4.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_5.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_6.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_7.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_8.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_8_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_9.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_bool.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_cnvucn.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_cplus.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_dslcom.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_dslcom_cplus.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_line.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_llong.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_nularg.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_ppnum.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_pragma.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_stdmac.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_tlimit.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_token.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_ucn1.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_ucn1_cplus.C
create mode 100644 libraries/mcpp/cpp-test/test-t/n_ucn2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/n_vargs.c
create mode 100644 libraries/mcpp/cpp-test/test-t/nest1.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest10.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest11.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest12.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest13.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest14.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest15.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest2.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest3.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest4.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest5.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest6.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest7.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest8.h
create mode 100644 libraries/mcpp/cpp-test/test-t/nest9.h
create mode 100644 libraries/mcpp/cpp-test/test-t/pragmas.h
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_1.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_11.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_12.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_13.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_14.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_17.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_17s.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_19.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_22.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_24.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_25.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_27.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_28.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_5.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_1_8.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_concat.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_cplus.C
create mode 100644 libraries/mcpp/cpp-test/test-t/u_line.c
create mode 100644 libraries/mcpp/cpp-test/test-t/u_line_s.c
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal1.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal2.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal3.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal4.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal5.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unbal6.h
create mode 100644 libraries/mcpp/cpp-test/test-t/unspcs.c
create mode 100644 libraries/mcpp/cpp-test/test-t/vers2.h
create mode 100644 libraries/mcpp/cpp-test/test-t/warn_1_1.c
create mode 100644 libraries/mcpp/cpp-test/test-t/warn_1_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/warn_2.c
create mode 100644 libraries/mcpp/cpp-test/test-t/warn_3.c
create mode 100644 libraries/mcpp/doc-jp/LICENSE
create mode 100644 libraries/mcpp/doc-jp/cpp-test.html
create mode 100644 libraries/mcpp/doc-jp/mcpp-manual.html
create mode 100644 libraries/mcpp/doc-jp/mcpp-porting.html
create mode 100644 libraries/mcpp/doc-jp/mcpp-summary.pdf
create mode 100644 libraries/mcpp/doc/LICENSE
create mode 100644 libraries/mcpp/doc/cpp-test.html
create mode 100644 libraries/mcpp/doc/cpp_test.sum
create mode 100644 libraries/mcpp/doc/mcpp-manual.html
create mode 100644 libraries/mcpp/doc/mcpp-porting.html
create mode 100644 libraries/mcpp/doc/mcpp-summary.pdf
create mode 100644 libraries/mcpp/mcpp-gcc.1
create mode 100644 libraries/mcpp/mcpp.1
create mode 100644 libraries/mcpp/noconfig/bc55.dif
create mode 100644 libraries/mcpp/noconfig/bc59.dif
create mode 100644 libraries/mcpp/noconfig/borlandc.mak
create mode 100644 libraries/mcpp/noconfig/cyg1310.dif
create mode 100644 libraries/mcpp/noconfig/cyg1518.dif
create mode 100644 libraries/mcpp/noconfig/cygwin.mak
create mode 100644 libraries/mcpp/noconfig/freebsd.mak
create mode 100644 libraries/mcpp/noconfig/lcc0308.dif
create mode 100644 libraries/mcpp/noconfig/lcc0603.dif
create mode 100644 libraries/mcpp/noconfig/lcc_w32.mak
create mode 100644 libraries/mcpp/noconfig/linux.mak
create mode 100644 libraries/mcpp/noconfig/linux_gcc2953.dif
create mode 100644 libraries/mcpp/noconfig/linux_gcc32.dif
create mode 100644 libraries/mcpp/noconfig/linux_gcc336.dif
create mode 100644 libraries/mcpp/noconfig/linux_gcc343.dif
create mode 100644 libraries/mcpp/noconfig/linux_gcc412.dif
create mode 100644 libraries/mcpp/noconfig/mac_gcc401_i686.dif
create mode 100644 libraries/mcpp/noconfig/mac_gcc401_powerpc.dif
create mode 100644 libraries/mcpp/noconfig/mac_osx.mak
create mode 100644 libraries/mcpp/noconfig/mingw.mak
create mode 100644 libraries/mcpp/noconfig/mingw345.dif
create mode 100644 libraries/mcpp/noconfig/vc2002.dif
create mode 100644 libraries/mcpp/noconfig/vc2003.dif
create mode 100644 libraries/mcpp/noconfig/vc2005.dif
create mode 100644 libraries/mcpp/noconfig/vc2008.dif
create mode 100644 libraries/mcpp/noconfig/vc6.dif
create mode 100644 libraries/mcpp/noconfig/visualc.mak
create mode 100644 libraries/mcpp/src/Makefile.am
create mode 100644 libraries/mcpp/src/Makefile.in
create mode 100644 libraries/mcpp/src/cc1.c
create mode 100644 libraries/mcpp/src/config.h.in
create mode 100644 libraries/mcpp/src/configed.H
create mode 100644 libraries/mcpp/src/directive.c
create mode 100644 libraries/mcpp/src/eval.c
create mode 100644 libraries/mcpp/src/expand.c
create mode 100644 libraries/mcpp/src/internal.H
create mode 100644 libraries/mcpp/src/main.c
create mode 100644 libraries/mcpp/src/main_libmcpp.c
create mode 100644 libraries/mcpp/src/mbchar.c
create mode 100644 libraries/mcpp/src/mcpp_lib.def
create mode 100644 libraries/mcpp/src/mcpp_lib.h
create mode 100644 libraries/mcpp/src/mcpp_out.h
create mode 100644 libraries/mcpp/src/noconfig.H
create mode 100644 libraries/mcpp/src/preproc.c
create mode 100644 libraries/mcpp/src/set_mcpp.sh
create mode 100644 libraries/mcpp/src/support.c
create mode 100644 libraries/mcpp/src/system.H
create mode 100644 libraries/mcpp/src/system.c
create mode 100644 libraries/mcpp/src/testmain.c
create mode 100644 libraries/mcpp/src/unset_mcpp.sh
create mode 100644 libraries/mcpp/test-c/LICENSE
create mode 100644 libraries/mcpp/test-c/defs.h
create mode 100644 libraries/mcpp/test-c/e_12_8.c
create mode 100644 libraries/mcpp/test-c/e_14.c
create mode 100644 libraries/mcpp/test-c/e_14_10.c
create mode 100644 libraries/mcpp/test-c/e_14_7.c
create mode 100644 libraries/mcpp/test-c/e_14_9.c
create mode 100644 libraries/mcpp/test-c/e_15_3.c
create mode 100644 libraries/mcpp/test-c/e_16.c
create mode 100644 libraries/mcpp/test-c/e_17.c
create mode 100644 libraries/mcpp/test-c/e_18_4.c
create mode 100644 libraries/mcpp/test-c/e_19_3.c
create mode 100644 libraries/mcpp/test-c/e_23_3.c
create mode 100644 libraries/mcpp/test-c/e_24_6.c
create mode 100644 libraries/mcpp/test-c/e_25_6.c
create mode 100644 libraries/mcpp/test-c/e_27_7.c
create mode 100644 libraries/mcpp/test-c/e_29_3.c
create mode 100644 libraries/mcpp/test-c/e_31.c
create mode 100644 libraries/mcpp/test-c/e_31_3.c
create mode 100644 libraries/mcpp/test-c/e_32_5.c
create mode 100644 libraries/mcpp/test-c/e_33_2.c
create mode 100644 libraries/mcpp/test-c/e_35_2.c
create mode 100644 libraries/mcpp/test-c/e_4_3.c
create mode 100644 libraries/mcpp/test-c/e_7_4.c
create mode 100644 libraries/mcpp/test-c/e_std.c
create mode 100644 libraries/mcpp/test-c/header.h
create mode 100644 libraries/mcpp/test-c/i_32_3.c
create mode 100644 libraries/mcpp/test-c/i_35.c
create mode 100644 libraries/mcpp/test-c/i_35_3.c
create mode 100644 libraries/mcpp/test-c/ifdef15.h
create mode 100644 libraries/mcpp/test-c/line.h
create mode 100644 libraries/mcpp/test-c/m1024.h
create mode 100644 libraries/mcpp/test-c/m_33_big5.c
create mode 100644 libraries/mcpp/test-c/m_33_eucjp.c
create mode 100644 libraries/mcpp/test-c/m_33_gb.c
create mode 100644 libraries/mcpp/test-c/m_33_jis.c
create mode 100644 libraries/mcpp/test-c/m_33_ksc.c
create mode 100644 libraries/mcpp/test-c/m_33_sjis.c
create mode 100644 libraries/mcpp/test-c/m_33_utf8.c
create mode 100644 libraries/mcpp/test-c/m_34_big5.c
create mode 100644 libraries/mcpp/test-c/m_34_eucjp.c
create mode 100644 libraries/mcpp/test-c/m_34_gb.c
create mode 100644 libraries/mcpp/test-c/m_34_jis.c
create mode 100644 libraries/mcpp/test-c/m_34_ksc.c
create mode 100644 libraries/mcpp/test-c/m_34_sjis.c
create mode 100644 libraries/mcpp/test-c/m_34_utf8.c
create mode 100644 libraries/mcpp/test-c/m_36_big5.c
create mode 100644 libraries/mcpp/test-c/m_36_jis.c
create mode 100644 libraries/mcpp/test-c/m_36_sjis.c
create mode 100644 libraries/mcpp/test-c/n_1.c
create mode 100644 libraries/mcpp/test-c/n_10.c
create mode 100644 libraries/mcpp/test-c/n_11.c
create mode 100644 libraries/mcpp/test-c/n_12.c
create mode 100644 libraries/mcpp/test-c/n_13.c
create mode 100644 libraries/mcpp/test-c/n_13_13.c
create mode 100644 libraries/mcpp/test-c/n_13_5.c
create mode 100644 libraries/mcpp/test-c/n_13_7.c
create mode 100644 libraries/mcpp/test-c/n_13_8.c
create mode 100644 libraries/mcpp/test-c/n_15.c
create mode 100644 libraries/mcpp/test-c/n_18.c
create mode 100644 libraries/mcpp/test-c/n_19.c
create mode 100644 libraries/mcpp/test-c/n_2.c
create mode 100644 libraries/mcpp/test-c/n_20.c
create mode 100644 libraries/mcpp/test-c/n_21.c
create mode 100644 libraries/mcpp/test-c/n_22.c
create mode 100644 libraries/mcpp/test-c/n_23.c
create mode 100644 libraries/mcpp/test-c/n_24.c
create mode 100644 libraries/mcpp/test-c/n_25.c
create mode 100644 libraries/mcpp/test-c/n_26.c
create mode 100644 libraries/mcpp/test-c/n_27.c
create mode 100644 libraries/mcpp/test-c/n_28.c
create mode 100644 libraries/mcpp/test-c/n_29.c
create mode 100644 libraries/mcpp/test-c/n_3.c
create mode 100644 libraries/mcpp/test-c/n_30.c
create mode 100644 libraries/mcpp/test-c/n_32.c
create mode 100644 libraries/mcpp/test-c/n_37.c
create mode 100644 libraries/mcpp/test-c/n_3_4.c
create mode 100644 libraries/mcpp/test-c/n_4.c
create mode 100644 libraries/mcpp/test-c/n_5.c
create mode 100644 libraries/mcpp/test-c/n_6.c
create mode 100644 libraries/mcpp/test-c/n_7.c
create mode 100644 libraries/mcpp/test-c/n_8.c
create mode 100644 libraries/mcpp/test-c/n_8_2.c
create mode 100644 libraries/mcpp/test-c/n_9.c
create mode 100644 libraries/mcpp/test-c/n_i_.lst
create mode 100644 libraries/mcpp/test-c/n_std.c
create mode 100644 libraries/mcpp/test-c/nest1.h
create mode 100644 libraries/mcpp/test-c/nest10.h
create mode 100644 libraries/mcpp/test-c/nest11.h
create mode 100644 libraries/mcpp/test-c/nest12.h
create mode 100644 libraries/mcpp/test-c/nest13.h
create mode 100644 libraries/mcpp/test-c/nest14.h
create mode 100644 libraries/mcpp/test-c/nest15.h
create mode 100644 libraries/mcpp/test-c/nest2.h
create mode 100644 libraries/mcpp/test-c/nest3.h
create mode 100644 libraries/mcpp/test-c/nest4.h
create mode 100644 libraries/mcpp/test-c/nest5.h
create mode 100644 libraries/mcpp/test-c/nest6.h
create mode 100644 libraries/mcpp/test-c/nest7.h
create mode 100644 libraries/mcpp/test-c/nest8.h
create mode 100644 libraries/mcpp/test-c/nest9.h
create mode 100644 libraries/mcpp/test-c/side_cpp
create mode 100644 libraries/mcpp/test-c/u_1_1.c
create mode 100644 libraries/mcpp/test-c/u_1_11.c
create mode 100644 libraries/mcpp/test-c/u_1_12.c
create mode 100644 libraries/mcpp/test-c/u_1_13.c
create mode 100644 libraries/mcpp/test-c/u_1_14.c
create mode 100644 libraries/mcpp/test-c/u_1_17.c
create mode 100644 libraries/mcpp/test-c/u_1_19.c
create mode 100644 libraries/mcpp/test-c/u_1_22.c
create mode 100644 libraries/mcpp/test-c/u_1_23.c
create mode 100644 libraries/mcpp/test-c/u_1_24.c
create mode 100644 libraries/mcpp/test-c/u_1_25.c
create mode 100644 libraries/mcpp/test-c/u_1_27.c
create mode 100644 libraries/mcpp/test-c/u_1_28.c
create mode 100644 libraries/mcpp/test-c/u_1_5.c
create mode 100644 libraries/mcpp/test-c/u_1_7_big5.c
create mode 100644 libraries/mcpp/test-c/u_1_7_eucjp.c
create mode 100644 libraries/mcpp/test-c/u_1_7_gb.c
create mode 100644 libraries/mcpp/test-c/u_1_7_jis.c
create mode 100644 libraries/mcpp/test-c/u_1_7_ksc.c
create mode 100644 libraries/mcpp/test-c/u_1_7_sjis.c
create mode 100644 libraries/mcpp/test-c/u_1_7_utf8.c
create mode 100644 libraries/mcpp/test-c/u_1_8.c
create mode 100644 libraries/mcpp/test-c/u_2.c
create mode 100644 libraries/mcpp/test-c/unbal1.h
create mode 100644 libraries/mcpp/test-c/unbal2.h
create mode 100644 libraries/mcpp/test-c/unbal3.h
create mode 100644 libraries/mcpp/test-c/unbal4.h
create mode 100644 libraries/mcpp/test-c/unbal5.h
create mode 100644 libraries/mcpp/test-c/unbal6.h
create mode 100644 libraries/mcpp/test-c/undefs.c
create mode 100644 libraries/mcpp/test-c/unspcs.c
create mode 100644 libraries/mcpp/test-c/warns.c
create mode 100644 libraries/mcpp/test-l/LICENSE
create mode 100644 libraries/mcpp/test-l/defs.h
create mode 100644 libraries/mcpp/test-l/ifdef127.h
create mode 100644 libraries/mcpp/test-l/ifdef255.h
create mode 100644 libraries/mcpp/test-l/l_37_1.t
create mode 100644 libraries/mcpp/test-l/l_37_2.t
create mode 100644 libraries/mcpp/test-l/l_37_3.c
create mode 100644 libraries/mcpp/test-l/l_37_3.t
create mode 100644 libraries/mcpp/test-l/l_37_4.t
create mode 100644 libraries/mcpp/test-l/l_37_5.t
create mode 100644 libraries/mcpp/test-l/l_37_6.c
create mode 100644 libraries/mcpp/test-l/l_37_6.t
create mode 100644 libraries/mcpp/test-l/l_37_7.c
create mode 100644 libraries/mcpp/test-l/l_37_7.t
create mode 100644 libraries/mcpp/test-l/l_37_8.c
create mode 100644 libraries/mcpp/test-l/l_37_9.t
create mode 100644 libraries/mcpp/test-l/longline.c
create mode 100644 libraries/mcpp/test-l/m8191.h
create mode 100644 libraries/mcpp/test-l/nest1.h
create mode 100644 libraries/mcpp/test-l/nest10.h
create mode 100644 libraries/mcpp/test-l/nest100.h
create mode 100644 libraries/mcpp/test-l/nest101.h
create mode 100644 libraries/mcpp/test-l/nest102.h
create mode 100644 libraries/mcpp/test-l/nest103.h
create mode 100644 libraries/mcpp/test-l/nest104.h
create mode 100644 libraries/mcpp/test-l/nest105.h
create mode 100644 libraries/mcpp/test-l/nest106.h
create mode 100644 libraries/mcpp/test-l/nest107.h
create mode 100644 libraries/mcpp/test-l/nest108.h
create mode 100644 libraries/mcpp/test-l/nest109.h
create mode 100644 libraries/mcpp/test-l/nest11.h
create mode 100644 libraries/mcpp/test-l/nest110.h
create mode 100644 libraries/mcpp/test-l/nest111.h
create mode 100644 libraries/mcpp/test-l/nest112.h
create mode 100644 libraries/mcpp/test-l/nest113.h
create mode 100644 libraries/mcpp/test-l/nest114.h
create mode 100644 libraries/mcpp/test-l/nest115.h
create mode 100644 libraries/mcpp/test-l/nest116.h
create mode 100644 libraries/mcpp/test-l/nest117.h
create mode 100644 libraries/mcpp/test-l/nest118.h
create mode 100644 libraries/mcpp/test-l/nest119.h
create mode 100644 libraries/mcpp/test-l/nest12.h
create mode 100644 libraries/mcpp/test-l/nest120.h
create mode 100644 libraries/mcpp/test-l/nest121.h
create mode 100644 libraries/mcpp/test-l/nest122.h
create mode 100644 libraries/mcpp/test-l/nest123.h
create mode 100644 libraries/mcpp/test-l/nest124.h
create mode 100644 libraries/mcpp/test-l/nest125.h
create mode 100644 libraries/mcpp/test-l/nest126.h
create mode 100644 libraries/mcpp/test-l/nest127.h
create mode 100644 libraries/mcpp/test-l/nest13.h
create mode 100644 libraries/mcpp/test-l/nest14.h
create mode 100644 libraries/mcpp/test-l/nest15.h
create mode 100644 libraries/mcpp/test-l/nest16.h
create mode 100644 libraries/mcpp/test-l/nest17.h
create mode 100644 libraries/mcpp/test-l/nest18.h
create mode 100644 libraries/mcpp/test-l/nest19.h
create mode 100644 libraries/mcpp/test-l/nest2.h
create mode 100644 libraries/mcpp/test-l/nest20.h
create mode 100644 libraries/mcpp/test-l/nest21.h
create mode 100644 libraries/mcpp/test-l/nest22.h
create mode 100644 libraries/mcpp/test-l/nest23.h
create mode 100644 libraries/mcpp/test-l/nest24.h
create mode 100644 libraries/mcpp/test-l/nest25.h
create mode 100644 libraries/mcpp/test-l/nest26.h
create mode 100644 libraries/mcpp/test-l/nest27.h
create mode 100644 libraries/mcpp/test-l/nest28.h
create mode 100644 libraries/mcpp/test-l/nest29.h
create mode 100644 libraries/mcpp/test-l/nest3.h
create mode 100644 libraries/mcpp/test-l/nest30.h
create mode 100644 libraries/mcpp/test-l/nest31.h
create mode 100644 libraries/mcpp/test-l/nest32.h
create mode 100644 libraries/mcpp/test-l/nest33.h
create mode 100644 libraries/mcpp/test-l/nest34.h
create mode 100644 libraries/mcpp/test-l/nest35.h
create mode 100644 libraries/mcpp/test-l/nest36.h
create mode 100644 libraries/mcpp/test-l/nest37.h
create mode 100644 libraries/mcpp/test-l/nest38.h
create mode 100644 libraries/mcpp/test-l/nest39.h
create mode 100644 libraries/mcpp/test-l/nest4.h
create mode 100644 libraries/mcpp/test-l/nest40.h
create mode 100644 libraries/mcpp/test-l/nest41.h
create mode 100644 libraries/mcpp/test-l/nest42.h
create mode 100644 libraries/mcpp/test-l/nest43.h
create mode 100644 libraries/mcpp/test-l/nest44.h
create mode 100644 libraries/mcpp/test-l/nest45.h
create mode 100644 libraries/mcpp/test-l/nest46.h
create mode 100644 libraries/mcpp/test-l/nest47.h
create mode 100644 libraries/mcpp/test-l/nest48.h
create mode 100644 libraries/mcpp/test-l/nest49.h
create mode 100644 libraries/mcpp/test-l/nest5.h
create mode 100644 libraries/mcpp/test-l/nest50.h
create mode 100644 libraries/mcpp/test-l/nest51.h
create mode 100644 libraries/mcpp/test-l/nest52.h
create mode 100644 libraries/mcpp/test-l/nest53.h
create mode 100644 libraries/mcpp/test-l/nest54.h
create mode 100644 libraries/mcpp/test-l/nest55.h
create mode 100644 libraries/mcpp/test-l/nest56.h
create mode 100644 libraries/mcpp/test-l/nest57.h
create mode 100644 libraries/mcpp/test-l/nest58.h
create mode 100644 libraries/mcpp/test-l/nest59.h
create mode 100644 libraries/mcpp/test-l/nest6.h
create mode 100644 libraries/mcpp/test-l/nest60.h
create mode 100644 libraries/mcpp/test-l/nest61.h
create mode 100644 libraries/mcpp/test-l/nest62.h
create mode 100644 libraries/mcpp/test-l/nest63.h
create mode 100644 libraries/mcpp/test-l/nest64.h
create mode 100644 libraries/mcpp/test-l/nest65.h
create mode 100644 libraries/mcpp/test-l/nest66.h
create mode 100644 libraries/mcpp/test-l/nest67.h
create mode 100644 libraries/mcpp/test-l/nest68.h
create mode 100644 libraries/mcpp/test-l/nest69.h
create mode 100644 libraries/mcpp/test-l/nest7.h
create mode 100644 libraries/mcpp/test-l/nest70.h
create mode 100644 libraries/mcpp/test-l/nest71.h
create mode 100644 libraries/mcpp/test-l/nest72.h
create mode 100644 libraries/mcpp/test-l/nest73.h
create mode 100644 libraries/mcpp/test-l/nest74.h
create mode 100644 libraries/mcpp/test-l/nest75.h
create mode 100644 libraries/mcpp/test-l/nest76.h
create mode 100644 libraries/mcpp/test-l/nest77.h
create mode 100644 libraries/mcpp/test-l/nest78.h
create mode 100644 libraries/mcpp/test-l/nest79.h
create mode 100644 libraries/mcpp/test-l/nest8.h
create mode 100644 libraries/mcpp/test-l/nest80.h
create mode 100644 libraries/mcpp/test-l/nest81.h
create mode 100644 libraries/mcpp/test-l/nest82.h
create mode 100644 libraries/mcpp/test-l/nest83.h
create mode 100644 libraries/mcpp/test-l/nest84.h
create mode 100644 libraries/mcpp/test-l/nest85.h
create mode 100644 libraries/mcpp/test-l/nest86.h
create mode 100644 libraries/mcpp/test-l/nest87.h
create mode 100644 libraries/mcpp/test-l/nest88.h
create mode 100644 libraries/mcpp/test-l/nest89.h
create mode 100644 libraries/mcpp/test-l/nest9.h
create mode 100644 libraries/mcpp/test-l/nest90.h
create mode 100644 libraries/mcpp/test-l/nest91.h
create mode 100644 libraries/mcpp/test-l/nest92.h
create mode 100644 libraries/mcpp/test-l/nest93.h
create mode 100644 libraries/mcpp/test-l/nest94.h
create mode 100644 libraries/mcpp/test-l/nest95.h
create mode 100644 libraries/mcpp/test-l/nest96.h
create mode 100644 libraries/mcpp/test-l/nest97.h
create mode 100644 libraries/mcpp/test-l/nest98.h
create mode 100644 libraries/mcpp/test-l/nest99.h
create mode 100644 libraries/mcpp/test-t/LICENSE
create mode 100644 libraries/mcpp/test-t/e_12_8.t
create mode 100644 libraries/mcpp/test-t/e_14.t
create mode 100644 libraries/mcpp/test-t/e_14_10.t
create mode 100644 libraries/mcpp/test-t/e_14_7.t
create mode 100644 libraries/mcpp/test-t/e_14_9.t
create mode 100644 libraries/mcpp/test-t/e_15_3.t
create mode 100644 libraries/mcpp/test-t/e_16.t
create mode 100644 libraries/mcpp/test-t/e_17.t
create mode 100644 libraries/mcpp/test-t/e_18_4.t
create mode 100644 libraries/mcpp/test-t/e_19_3.t
create mode 100644 libraries/mcpp/test-t/e_23_3.t
create mode 100644 libraries/mcpp/test-t/e_24_6.t
create mode 100644 libraries/mcpp/test-t/e_25_6.t
create mode 100644 libraries/mcpp/test-t/e_27_7.t
create mode 100644 libraries/mcpp/test-t/e_29_3.t
create mode 100644 libraries/mcpp/test-t/e_31.t
create mode 100644 libraries/mcpp/test-t/e_31_3.t
create mode 100644 libraries/mcpp/test-t/e_32_5.t
create mode 100644 libraries/mcpp/test-t/e_33_2.t
create mode 100644 libraries/mcpp/test-t/e_35_2.t
create mode 100644 libraries/mcpp/test-t/e_4_3.t
create mode 100644 libraries/mcpp/test-t/e_7_4.t
create mode 100644 libraries/mcpp/test-t/e_intmax.t
create mode 100644 libraries/mcpp/test-t/e_operat.cc
create mode 100644 libraries/mcpp/test-t/e_operat.t
create mode 100644 libraries/mcpp/test-t/e_post.t
create mode 100644 libraries/mcpp/test-t/e_pragma.t
create mode 100644 libraries/mcpp/test-t/e_std.t
create mode 100644 libraries/mcpp/test-t/e_std99.t
create mode 100644 libraries/mcpp/test-t/e_ucn.t
create mode 100644 libraries/mcpp/test-t/e_vargs.t
create mode 100644 libraries/mcpp/test-t/header.h
create mode 100644 libraries/mcpp/test-t/i_32_3.t
create mode 100644 libraries/mcpp/test-t/i_35.t
create mode 100644 libraries/mcpp/test-t/i_35_3.t
create mode 100644 libraries/mcpp/test-t/i_mbident.t
create mode 100644 libraries/mcpp/test-t/ifdef15.h
create mode 100644 libraries/mcpp/test-t/ifdef31.h
create mode 100644 libraries/mcpp/test-t/ifdef63.h
create mode 100644 libraries/mcpp/test-t/line.h
create mode 100644 libraries/mcpp/test-t/long4095.h
create mode 100644 libraries/mcpp/test-t/m4095.h
create mode 100644 libraries/mcpp/test-t/m_33_big5.t
create mode 100644 libraries/mcpp/test-t/m_33_eucjp.t
create mode 100644 libraries/mcpp/test-t/m_33_gb.t
create mode 100644 libraries/mcpp/test-t/m_33_jis.t
create mode 100644 libraries/mcpp/test-t/m_33_ksc.t
create mode 100644 libraries/mcpp/test-t/m_33_sjis.t
create mode 100644 libraries/mcpp/test-t/m_33_utf8.t
create mode 100644 libraries/mcpp/test-t/m_34_big5.t
create mode 100644 libraries/mcpp/test-t/m_34_eucjp.t
create mode 100644 libraries/mcpp/test-t/m_34_gb.t
create mode 100644 libraries/mcpp/test-t/m_34_jis.t
create mode 100644 libraries/mcpp/test-t/m_34_ksc.t
create mode 100644 libraries/mcpp/test-t/m_34_sjis.t
create mode 100644 libraries/mcpp/test-t/m_34_utf8.t
create mode 100644 libraries/mcpp/test-t/m_36_big5.t
create mode 100644 libraries/mcpp/test-t/m_36_jis.t
create mode 100644 libraries/mcpp/test-t/m_36_sjis.t
create mode 100644 libraries/mcpp/test-t/misc.t
create mode 100644 libraries/mcpp/test-t/n_1.t
create mode 100644 libraries/mcpp/test-t/n_10.t
create mode 100644 libraries/mcpp/test-t/n_11.t
create mode 100644 libraries/mcpp/test-t/n_12.t
create mode 100644 libraries/mcpp/test-t/n_13.t
create mode 100644 libraries/mcpp/test-t/n_13_13.t
create mode 100644 libraries/mcpp/test-t/n_13_5.t
create mode 100644 libraries/mcpp/test-t/n_13_7.t
create mode 100644 libraries/mcpp/test-t/n_13_8.t
create mode 100644 libraries/mcpp/test-t/n_15.t
create mode 100644 libraries/mcpp/test-t/n_18.t
create mode 100644 libraries/mcpp/test-t/n_19.t
create mode 100644 libraries/mcpp/test-t/n_2.t
create mode 100644 libraries/mcpp/test-t/n_20.t
create mode 100644 libraries/mcpp/test-t/n_21.t
create mode 100644 libraries/mcpp/test-t/n_22.t
create mode 100644 libraries/mcpp/test-t/n_23.t
create mode 100644 libraries/mcpp/test-t/n_24.t
create mode 100644 libraries/mcpp/test-t/n_25.t
create mode 100644 libraries/mcpp/test-t/n_26.t
create mode 100644 libraries/mcpp/test-t/n_27.t
create mode 100644 libraries/mcpp/test-t/n_28.t
create mode 100644 libraries/mcpp/test-t/n_29.t
create mode 100644 libraries/mcpp/test-t/n_3.t
create mode 100644 libraries/mcpp/test-t/n_30.t
create mode 100644 libraries/mcpp/test-t/n_32.t
create mode 100644 libraries/mcpp/test-t/n_37.t
create mode 100644 libraries/mcpp/test-t/n_3_4.t
create mode 100644 libraries/mcpp/test-t/n_4.t
create mode 100644 libraries/mcpp/test-t/n_5.t
create mode 100644 libraries/mcpp/test-t/n_6.t
create mode 100644 libraries/mcpp/test-t/n_7.t
create mode 100644 libraries/mcpp/test-t/n_8.t
create mode 100644 libraries/mcpp/test-t/n_8_2.t
create mode 100644 libraries/mcpp/test-t/n_9.t
create mode 100644 libraries/mcpp/test-t/n_bool.cc
create mode 100644 libraries/mcpp/test-t/n_bool.t
create mode 100644 libraries/mcpp/test-t/n_cnvucn.cc
create mode 100644 libraries/mcpp/test-t/n_cnvucn.t
create mode 100644 libraries/mcpp/test-t/n_cplus.cc
create mode 100644 libraries/mcpp/test-t/n_cplus.t
create mode 100644 libraries/mcpp/test-t/n_dslcom.cc
create mode 100644 libraries/mcpp/test-t/n_dslcom.t
create mode 100644 libraries/mcpp/test-t/n_line.t
create mode 100644 libraries/mcpp/test-t/n_llong.t
create mode 100644 libraries/mcpp/test-t/n_nularg.t
create mode 100644 libraries/mcpp/test-t/n_post.t
create mode 100644 libraries/mcpp/test-t/n_post99.t
create mode 100644 libraries/mcpp/test-t/n_ppnum.t
create mode 100644 libraries/mcpp/test-t/n_pragma.t
create mode 100644 libraries/mcpp/test-t/n_std.t
create mode 100644 libraries/mcpp/test-t/n_std99.t
create mode 100644 libraries/mcpp/test-t/n_stdmac.t
create mode 100644 libraries/mcpp/test-t/n_tlim_2.t
create mode 100644 libraries/mcpp/test-t/n_tlim_3.t
create mode 100644 libraries/mcpp/test-t/n_tlim_4.t
create mode 100644 libraries/mcpp/test-t/n_tlim_5.t
create mode 100644 libraries/mcpp/test-t/n_tlim_6.t
create mode 100644 libraries/mcpp/test-t/n_tlim_7.t
create mode 100644 libraries/mcpp/test-t/n_tlim_8.t
create mode 100644 libraries/mcpp/test-t/n_tlim_9.t
create mode 100644 libraries/mcpp/test-t/n_tlimit.t
create mode 100644 libraries/mcpp/test-t/n_token.cc
create mode 100644 libraries/mcpp/test-t/n_token.t
create mode 100644 libraries/mcpp/test-t/n_ucn1.cc
create mode 100644 libraries/mcpp/test-t/n_ucn1.t
create mode 100644 libraries/mcpp/test-t/n_ucn2.t
create mode 100644 libraries/mcpp/test-t/n_vargs.t
create mode 100644 libraries/mcpp/test-t/nest1.h
create mode 100644 libraries/mcpp/test-t/nest10.h
create mode 100644 libraries/mcpp/test-t/nest11.h
create mode 100644 libraries/mcpp/test-t/nest12.h
create mode 100644 libraries/mcpp/test-t/nest13.h
create mode 100644 libraries/mcpp/test-t/nest14.h
create mode 100644 libraries/mcpp/test-t/nest15.h
create mode 100644 libraries/mcpp/test-t/nest2.h
create mode 100644 libraries/mcpp/test-t/nest3.h
create mode 100644 libraries/mcpp/test-t/nest4.h
create mode 100644 libraries/mcpp/test-t/nest5.h
create mode 100644 libraries/mcpp/test-t/nest6.h
create mode 100644 libraries/mcpp/test-t/nest7.h
create mode 100644 libraries/mcpp/test-t/nest8.h
create mode 100644 libraries/mcpp/test-t/nest9.h
create mode 100644 libraries/mcpp/test-t/pragmas.h
create mode 100644 libraries/mcpp/test-t/recurs.t
create mode 100644 libraries/mcpp/test-t/trad.t
create mode 100644 libraries/mcpp/test-t/u_1_1.t
create mode 100644 libraries/mcpp/test-t/u_1_11.t
create mode 100644 libraries/mcpp/test-t/u_1_12.t
create mode 100644 libraries/mcpp/test-t/u_1_13.t
create mode 100644 libraries/mcpp/test-t/u_1_14.t
create mode 100644 libraries/mcpp/test-t/u_1_17.t
create mode 100644 libraries/mcpp/test-t/u_1_19.t
create mode 100644 libraries/mcpp/test-t/u_1_22.t
create mode 100644 libraries/mcpp/test-t/u_1_24.t
create mode 100644 libraries/mcpp/test-t/u_1_25.t
create mode 100644 libraries/mcpp/test-t/u_1_27.t
create mode 100644 libraries/mcpp/test-t/u_1_28.t
create mode 100644 libraries/mcpp/test-t/u_1_5.t
create mode 100644 libraries/mcpp/test-t/u_1_7_big5.t
create mode 100644 libraries/mcpp/test-t/u_1_7_eucjp.t
create mode 100644 libraries/mcpp/test-t/u_1_7_gb.t
create mode 100644 libraries/mcpp/test-t/u_1_7_jis.t
create mode 100644 libraries/mcpp/test-t/u_1_7_ksc.t
create mode 100644 libraries/mcpp/test-t/u_1_7_sjis.t
create mode 100644 libraries/mcpp/test-t/u_1_7_utf8.t
create mode 100644 libraries/mcpp/test-t/u_1_8.t
create mode 100644 libraries/mcpp/test-t/u_1_9.t
create mode 100644 libraries/mcpp/test-t/u_2.t
create mode 100644 libraries/mcpp/test-t/u_concat.t
create mode 100644 libraries/mcpp/test-t/u_cplus.cc
create mode 100644 libraries/mcpp/test-t/u_cplus.t
create mode 100644 libraries/mcpp/test-t/u_line.t
create mode 100644 libraries/mcpp/test-t/unbal1.h
create mode 100644 libraries/mcpp/test-t/unbal2.h
create mode 100644 libraries/mcpp/test-t/unbal3.h
create mode 100644 libraries/mcpp/test-t/unbal4.h
create mode 100644 libraries/mcpp/test-t/unbal5.h
create mode 100644 libraries/mcpp/test-t/unbal6.h
create mode 100644 libraries/mcpp/test-t/undefs.t
create mode 100644 libraries/mcpp/test-t/unspcs.t
create mode 100644 libraries/mcpp/test-t/vers2.h
create mode 100644 libraries/mcpp/test-t/warns.t
create mode 100644 libraries/mcpp/tests/Makefile.am
create mode 100644 libraries/mcpp/tests/Makefile.in
create mode 100644 libraries/mcpp/tests/after_test.sh
create mode 100644 libraries/mcpp/tests/set_test.sh
create mode 100644 libraries/mcpp/tool/LICENSE
create mode 100644 libraries/mcpp/tool/app_once.bat
create mode 100644 libraries/mcpp/tool/clock_of.c
create mode 100644 libraries/mcpp/tool/cpp_test.c
create mode 100644 libraries/mcpp/tool/ins_once.c
create mode 100644 libraries/mcpp/tool/once.txt
create mode 100644 libraries/mcpp/tool/rm_once.c
create mode 100644 libraries/mcpp/tool/total.c
diff --git a/libraries/mcpp/ChangeLog b/libraries/mcpp/ChangeLog
new file mode 100644
index 000000000..0f217be09
--- /dev/null
+++ b/libraries/mcpp/ChangeLog
@@ -0,0 +1,325 @@
+ChangeLog of MCPP and its accompanying Validation Suite
+
+2008/11/30 kmatsui
+ * V.2.7.2
+ * 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.
+
+2008/05/19 kmatsui
+ * V.2.7.1
+ * 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,
+ set_mcpp.sh, system.c)
+ * Stopped to use freopen() so that a main program which links
+ libmcpp can use stdin, stdout and stderr. (by Benoit Foucher)
+ (main.c)
+ * 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/
+ Makefile.am)
+ * 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.
+
+2008/03/23 kmatsui
+ * V.2.7
+ * 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,
+ support.c, system.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).
+ (expand.c)
+ * 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,
+ directive.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,
+ support.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
+ Dwayne Boone)
+ * 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/
+ Makefile.am)
+ * 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
+ Taras Glek)
+
+2007/05/19 kmatsui
+ * V.2.6.4
+ * 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).
+ (support.c)
+ * Revised output of // comment by -C option. Output // comment
+ as it is, not converting to /* */. (thanks to Taras Glek).
+ (support.c)
+ * 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,
+ noconfig.H, noconfig/*.mak)
+ * Updated version-info for shared-library-build from 0:0:0 to 0:
+ 1:0.
+ * Changed installation directory of some documents in stand-
+ alone-and-compiler-independent-build by configure or by binary
+ packages.
+ * Updated the documents. Note that cpp-test.html were not
+ updated.
+
+2007/04/07 kmatsui
+ * V.2.6.3
+ * 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.
+ (expand,c, support.c)
+ * 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_get_mem_buffer(), mcpp_set_out_func(),
+ 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-
+ manual.html)
+ * 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
+ packages.
+
+2006/11/12 kmatsui
+ * V.2.6.2
+ * Renamed control.c as directive.c and renamed control() as
+ directive().
+ * Fixed a bug of #else handling in pre-Standard modes.
+ (directive.c)
+ * 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.
+ (system.c)
+ * Fixed a bug of macro expansion timing in #include directive
+ line. (system.c)
+ * 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.
+
+2006/08/12 kmatsui
+ * V.2.6.1
+ * 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.
+ (system.H, system.c)
+ * Revised white space handling in 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).
+ (system.c)
+ * 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,
+ system.c)
+ * 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
+ ChangeLog.old.
+
+2006/07/15 kmatsui
+ * V.2.6
+ * 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/
+ Makefile.am)
+ * 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.
+ (system.c)
+ * 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,
+ system.c, mbchar.c)
+ * 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.
+ (eval.c)
+ * Renamed functions and some variables, created expand_init(),
+ according to integration of STANDARD and PRE_STANDARD modes.
+ (expand.c)
+ * 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
+ 'doc'.
+ * Removed some manuscript files of mcpp-summary.pdf from the
+ distribution.
+ * Validation Suite: Revised a few testcases.
+ * Updated all the documents accordingly.
+
diff --git a/libraries/mcpp/ChangeLog.old b/libraries/mcpp/ChangeLog.old
new file mode 100644
index 000000000..1dc3a9425
--- /dev/null
+++ b/libraries/mcpp/ChangeLog.old
@@ -0,0 +1,351 @@
+ChangeLog.old of MCPP and its accompanying Validation Suite
+
+2005/03/19 kmatsui
+ * V.2.5
+ * Absorbed POST_STANDARD mode into STANDARD as an execution time
+ option, absorbed OLD_PREPROCESSOR mode as an execution time
+ option of PRE_STANDARD. (all the sources)
+ * Changed the evaluation of #if expression in PRE_STANDARD mode
+ to use only (signed) long, not to use unsigned long. (eval.c)
+ * Revised the Standard mode macro expansion routine using GCC 3.
+ 2 testsuite and Wave 1.0 testcases. Revised "blue painting" of
+ the same name macro. Revised debugging information. Revised
+ handling of token separator in STANDARD mode. Split
+ is_macro_call() from is_macro(). (expand.c)
+ * Revised the old-preprocessor mode to follow "Reiser cpp model".
+ (expand.c)
+ * Removed FOLD_CASE settings. (system.c)
+ * Renamed most of #pragma __* directives as #pragma MCPP *.
+ (system.c)
+ * Added porting to GCC V.3.3 and 3.4. Changed some options
+ accordingly (changed -c to -@compat, changed -m to -e, removed
+ -E, added -finput-charset=). Created init_gcc_macro(),
+ undef_gcc_macro(). (system.c)
+ * Sorted usage() message lines alphabetically.
+ * Removed documents on older preprocessors (DJGPP, compiler
+ systems on MS-DOS except Borland C).
+ * Revised judgment of GCC version and include directories.
+ (configure.ac).
+ * Provided man page.
+ * Renamed the documents.
+ * Validation Suite: Moved tests of multi-byte character encoding
+ to quality matters.
+ * Validation Suite: Changed points allocation of the test items.
+ * Validation Suite: Added a few testcases for macro expansion.
+ * Updated Japanese and English documents.
+
+2004/03/20 kmatsui
+ * V.2.4.1
+ * Revised recursive macro expansion. (expand.c)
+ * Added -c option (compatible mode to GCC expansion of recursive
+ macro). (expand.c, system.c)
+ * Revised some testcases in cpp-test/test-t directory.
+
+2004/02/25 kmatsui
+ * V.2.4 release.
+ * Implemented handling of multi-byte character encodings other
+ than 2-byte encodings. Made various encodings available
+ simultaneously. Added #pragma __setlocale. Added -m
+ option. Enabled environment variable LC_ALL, LC_CTYPE and LANG
+ to specify the encoding. (all the sources)
+ * Created mbchar.c. Moved type[] from system.c. Created type_*
+ [] tables for various encodings of multi-byte character.
+ Created encoding_name[][] table. Created mb_init(),
+ mb_read_2byte(), mb_read_iso2022_jp(), mb_read_utf8(), mb_eval(),
+ set_encoding(), search_encoding() and strip_bar(). (mbchar.c)
+ * Added porting to Plan 9 / pcc. (noconfig.H, system.c)
+ * Validation Suite: Added tests of various multi-byte character
+ encodings.
+ * Updated Japanese documents.
+ * Updated English documents which were translated by Highwell,
+ inc. ltd. from the Japanese documents.
+ * Renamed the documents.
+
+2003/11/28 kmatsui
+ * V.2.4 prerelease.
+ * Named this proprocessor as MCPP (This is not necessarily the
+ name of its executable).
+ * Changed predefined macro __decus_cpp as __MCPP.
+ * Created configure script to make mcpp executable automatically.
+ Accordingly, reorganized system.H, created configed.H and
+ noconfig.H, and changed some macro names.
+ * Diagnostics on macro expansion or macro redefinition were made
+ to show the original macro definition and its location.
+ * Changed DEFBUF and FILEINFO structure, reorganized some
+ functions and variables. Created set_fname() in system.c.
+ (other than system.H, eval.c lib.c)
+ * Created look_and_install(). (control.c)
+ * Removed CON_NOEXPAND and CON_EXPAND modes. Renamed CON_FALSE
+ mode as PRE_STANDARD. (all the sources)
+ * Removed append_string(), catenate() and conv_st_quote().
+ (expand.c)
+ * Added #pragma __push_macro, #pragma __pop_macro, #pragma
+ __preprocess, #pragma __preprocessed. Created push_or_pop() and
+ do_preprocess(), revised do_pragma() accordingly. (system.c)
+ * Implemented -MF, -MT, -MP, -MQ options for GCC-3-compatibility.
+ Created md_init() and md_quote(). (system.c)
+ * Added porting to Visual C++ .net. (system.H, system.c)
+ * Removed the oldest settings on VMS, DEC C and OS-9/09. And
+ removed accordingly vmsparse(), reopen_stdout(), set_stdin(),
+ get_redirection(), put_start_file(), put_fname() and put_source().
+ (system.H, system.c)
+ * Added strstr() and strcspn(). (lib.c)
+ * Moved open_file() and add_file() from main.c to system.c.
+ Moved sharp() from system.c to main.c.
+ * Updated test-reports on LCC-Win32 and ucpp.
+ * Updated the Japanese documents. (The English documents are not
+ yet updated.)
+
+2003/03/29 kmatsui
+ * V.2.3 patch 1.
+ * Debugged the modes other than STANDARD. (system.c)
+
+2003/02/28 kmatsui
+ * V.2.3 release.
+ * Implemented identifier-like operators in C++98. Created
+ chk_ops() in eval.c and id_operator() in support.c. (eval.c,
+ control.c, support.c)
+ * Reinforced checking of __VA_ARGS__. (control.c)
+ * Enabled interspersed options between filename arguments.
+ (system.c)
+ * Renamed #pragma __debug and #pragma __warning to #pragma
+ __debug_cpp and #pragma __warning_cpp. (system.c)
+ * Created the edition of Validation Suite for GCC / testsuite.
+ * -j option (GCC-compatible diagnostic format) added for testsuite.
+ * Created the document named mcpp-summary.pdf.
+ * Updated documents.
+ * Released English version of documents which were translated by
+ Highwell, inc. ltd. from the Japanese documents and revised by
+ kmatsui.
+
+2002/12/16 kmatsui
+ * V.2.3 prerelease 2.
+ * Port to GCC 3.2. (system.H, system.c)
+ * Fixed the bug of #include_next. (system.c)
+ * GCC-compatible options (-I-, -std=*) added. (system.c)
+ * Created norm_path() to normalize include directories. (system.
+ c)
+ * Fixed the bug of rescan() which warns an innocent macro call.
+ (expand.c)
+ * Updated documents. Renamed the documents.
+
+2002/08/26 kmatsui
+ * V.2.3 prerelease 1.
+ * Updated according to C99 (ISO/IEC 9899:1999).
+ * Added compatibility mode of C++ to C99. (eval.c, expand.c,
+ system.c)
+ * Increased the class of warnings from four (OR of 1, 2, 4, 8)
+ to five (OR of 1, 2, 4, 8, 16). Changed some errors to warnings.
+ * Fixed the bug of 0-parameter function-like macro. Modified re-
+ examination of macro of the same name. (expand.c)
+ * Fixed the bug of handling digraphs. Implemented UCN in pp-
+ number and string-literal. (support.c)
+ * Fixed the bugs of parse_env() and bsl2sl(). (system.c)
+ * Implemented many GCC-compatible options. Added -dM, -dD,
+ -include and -isystem option for GCC. Added -a (-lang-asm, -x
+ assembler-with-cpp) option. Extended -D option to enable
+ function-like macro definition. Changed specification of -S
+ option and added -V, -h option. (system.c)
+ * Implemented #include_next and #warning for GCC. Implemented
+ also #pragma __include_next and #pragma __warning_cpp. (system.
+ c)
+ * Created conv_case(), chk_env() and at_end(). Split set_limit(),
+ set_pragma_op(), def_a_macro() from dooptions(). Split
+ search_dir() from openinclude(). Removed is_id(). (system.c)
+ * Port to Linux / GCC 2.95.3, LCC-Win32, Borland C 5.5. (system.
+ H, control.c, system.c)
+ * Renamed functions and some variables using underscore to
+ separate the two words. (internal.H, all the *.c files)
+ * Updated the Validation Suite.
+ * Updated the documents.
+ * Renamed the directories and the documents by NIIBE Yutaka.
+ * Registered to CVS repository at m17n.org by NIIBE Yutaka
+ .
+
+1998/11 kmatsui
+ * V.2.2
+ * Updated according to C++98 (ISO/IEC 14882:1998)
+ * Changed to evaluate "true" as 1 and "false" as 0 on C++,
+ according to C++ Standard. (eval.c)
+ * Updated UCN constraint on C++ according to C++ Standard.
+ (support.c)
+ * Fixed the bug of interaction of predefined non-standard macro
+ with -D option. (main.c, control.c, expand.c, system.c)
+ * Created undef_a_predef(). (main.c)
+ * Removed alloc_mem(). (system.c)
+
+1998/09 kmatsui
+ * V.2.1
+ * Updated C99 features according to 1998/08 draft (including UCN,
+ optional multi-byte-character in identifier, type of #if
+ expression in integer of maximum size and concatenation of wide-
+ character-string-literal and character-string-literal). (main.c,
+ eval.c, support.c)
+
+1998/08 kmatsui (Kiyoshi Matsui )
+ * V.2.0
+ * First release of MCPP (DECUS cpp V.2) at nifty-serve and
+ vector/software-pack.
+ * Re-written according to ISO 9899:1990 and it's Amendment 1,
+ Corrigendum 1, 2.
+ * Implemented translation phases precisely. (support.c)
+ * Revised tokenization according to the Standard and Amendment1.
+ (support.c & others)
+ * Implemented the pre-defined macros __STDC__, __STDC_VERSION__,
+ __TIME__, and revised __DATE__. Made these standard macros
+ cannot be undefined nor redefined. (main.c)
+ * Implemented _Pragma() operator. (main.c & others)
+ * Revised some non-standard pre-defined macros. (main.c)
+ * Implemented #error directive. The error message is output to
+ the stderr. (control.c)
+ * Implemented #pragma __once directive, -i option and -M* option,
+ imported from GCC. (control.c & others)
+ * Implemented #pragma __put_defines, #pragma __debug directives
+ and the old style directives corresponding to them. (system.c &
+ others)
+ * Made #pragma lines to be output with warning to the stderr for
+ the compiler which can't recognize the directive. (system.c)
+ * Made #line argument to be subject to macro expansion.
+ (control.c, support.c)
+ * Reinforced the test of #define syntax. (control.c)
+ * Created Standard conforming mode of macro-expansion (including
+ the processing of #, ## operators). (expand.c)
+ * Created "post-Standard" mode of preprocessing, which is a
+ simplified version of Standard mode. (all the sources)
+ * Simplified CON_FALSE mode corresponding to K&R 1st.
+ specifications. CON_NOEXPAND, CON_EXPAND modes of the original
+ version are retained (after revising). (main.c, control.c eval.
+ c, expand.c)
+ * Revised # operator so as to inserts \ before \ or " in
+ stringized arguments (except in MBCHAR) in Standard mode.
+ (expand.c)
+ * Changed the type of #if expression from int to long / unsigned
+ long. Reinforced expression evaluation. (eval.c)
+ * Implemented wide character constant, multi-character character
+ constant, and revised multi-byte character constant in #if
+ expression. (eval.c)
+ * Revised the handling of MBCHAR in string literal and character
+ constant. (support.c, expand.c, eval.c, main.c)
+ * Supplemented the optional phase for the pre-Standard compiler-
+ proper to concatenate adjacent string literals, convert '\a' and
+ '\v' to octals, convert digraphs. (main.c)
+ * Implemented the features of C99-1997/11 draft except Unicode-
+ related features (_Pragma operator, variable arguments of macro,
+ // comments, long long of #if expression, p+ of pp-number) (all
+ the sources)
+ * Supplemented the C++ preprocessor option. (support.c, system.
+ c)
+ * Refined error checks and diagnostic messages. (all the
+ sources)
+ * Implemented -M* option. (main.c, system.c)
+ * Updated MS-DOS memory model option. (system.c)
+ * Revised command line options. (system.c)
+ * Made the source files compilable by C++ as well as C. (all
+ the sources)
+ * Re-organized and re-written the source files to be portable to
+ many systems. (all the sources)
+ *
+ * main.c:
+ * Renamed cpp1.c main.c.
+ * Created do_pragma_op(), de_stringize(), devide_line(), putout(),
+ putline(), post_preproc(), conv_esc(), conv2oct(), is_last_esc(),
+ esc_mbchar(), conv_a_digraph().
+ * Removed output().
+ * Moved sharp() from cpp1.c to system.c, addfile(), openfile(),
+ initdefines(), unpredefine() from cpp3.c to main.c,
+ * Revised most of the functions and variables.
+ *
+ * control.c:
+ * Renamed cpp2.c control.c.
+ * Moved dodefine(), is_formal(), mtokensave(), stparmscan(),
+ doundef() from cpp4.c to control.c.
+ * Moved lookid(), defendel(), dump_a_def() from cpp6.c to
+ control.c.
+ * Moved doinclude(), openinclude(), vmsparse() from cpp2.c to
+ system.c.
+ * Split doline() from control().
+ * Split getparm(), getrepl(), def_stringization() from dodefine().
+ * Split dumprepl() from dump_a_def().
+ * Devided defendel() to install(), undefine(), lookprev().
+ * Removed textput(), charput(), checkparm() from cpp4.c.
+ * Expanded specification of stparmscan().
+ * Revised most of the functions.
+ *
+ * eval.c:
+ * Renamed cpp5.c eval.c.
+ * Created overflow(), dumpval().
+ * Split evalsval(), evaluval() from evaleval().
+ * Made #if error returns 0 (rather than 1).
+ * Changed the type of #if evaluation from int to long / unsigned
+ long (unsigned long is only for the compiler which has that type)
+ or long long / unsigned long long for C99.
+ * Reinforced expression evaluation (eval(), opdope[]).
+ * Implemented evaluation of multi-character character constant,
+ wide character constant and revised evaluation of multi-byte
+ character constant.
+ * Revised most of the functions.
+ *
+ * expand.c:
+ * Split from cpp4.c and cpp6.c (support.c).
+ * Created Standard conforming mode of macro expansion.
+ * Created is_macro(), squeeze_ws(), skip_macro() as common
+ routines, expand(), replace(), def_special(), prescan(),
+ catenate(), stringize(), substitute(), rescan(), disable_repl(),
+ enable_repl(), is_able_repl() for MODE >= STANDARD, expand(),
+ conv_st_quote() for MODE < STANDARD.
+ * Split expcollect() into collect_args() and get_an_arg().
+ * Renamed macroid() to rescan(), expand() to replace(), expstuff
+ () to substitute() for MODE < STANDARD, dumpparm() to dump_args().
+ * Revised most of the functions.
+ *
+ * support.c:
+ * Renamed cpp6.c support.c.
+ * Created get_unexpandable(), scantoken(), cat_line(), scanop(),
+ parse_line(), last_is_mbchar(), cnv_digraph(), at_eof(),
+ xrealloc(), putline(), dumptoken().
+ * Split getline(), read_a_comment() from get().
+ * Extended cfatal(), cerror(), cwarn(), removing cierror(),
+ ciwarn().
+ * Removed save(), cget().
+ * Moved macroid(), catenate(), appendstring() from cpp6.c to
+ expand.c, lookid(), defendel() from cpp6.c to control.c.
+ * Renamed scanstring() to scanquote(), getmem() to xmalloc().
+ * Revised most of the functions.
+ * Revised line splicing and tokenization.
+ *
+ * system.c:
+ * Created this file gathering routines from other files. Moved
+ sharp(), sharpsub(), getredirection() from cpp1.c to system.c,
+ doinclude(), openinclude(), hasdirectory(), vmsparse() from cpp2.
+ c to system.c, setincdirs(), dooptions(), zap_uc() from cpp3.c
+ to system.c,
+ * Created setoptlist(), setcplus(), bsl2sl(), put_depend(),
+ dopragma(), doonce(), included(), dumppath(), is_junk(),
+ alloc_mem(), print_heap();
+ * Split reopen_stdout(), setstdin() from main(), put_start_file(),
+ putfname() from cppmain(), setfiles(), usage(), mem_model(),
+ is_id() from dooptions(), doold(), dodebug(), doasm(), put_asm()
+ from control().
+ * Split setincdirs() to setsysdirs(), setenvdirs(), parse_env(),
+ set_a_dir().
+ * Moved type[] from cpp6.c to system.c.
+ * Revised most of the functions.
+ *
+ * system.H:
+ * Re-written and renamed from cppdef.h.
+ *
+ * internal.H:
+ * Re-written and renamed from cpp.h.
+ *
+ * Created Validation Suite for C/C++ preprocessing.
+ *
+ * Provided some supplementary tools for preprocessor testing.
+ *
+ * Wrote comprehensive documents (in Japanese).
+
+* Edit history of DECUS CPP (MM: Martin Minow)
+ * 21-May-84 MM "Field test" release
+ * 11-Jul-84 MM "Official" first release (that's what I thought!)
+ * 31-Aug-84 MM USENET net.sources release.
+ * 7-Dec-84 MM Stuff in Nov 12 Draft Standard
+ * 07-Jun-85 KR Latest revision
diff --git a/libraries/mcpp/INSTALL b/libraries/mcpp/INSTALL
new file mode 100644
index 000000000..b96d2dfe9
--- /dev/null
+++ b/libraries/mcpp/INSTALL
@@ -0,0 +1,541 @@
+This file explains how to generate executables by compiling the MCPP
+source. For further details, please refer to mcpp-porting.html.
+
+1. Types of MCPP executables
+
+There are several types of MCPP executable corresponding to its building
+methods. The building methods of MCPP have following two axis:
+
+ 1. stand-alone-build vs subroutine-build
+ 2. compiler-independent-build vs compiler-specific-build
+
+stand-alone-build: The preprocessor which is invoked as a command.
+ Some of this type is invoked by compiler-driver.
+subroutine-build: The preprocessor to be called as a subroutine
+ (repeatedly, if required) from other main program.
+
+compiler-independent-build: The preprocessor which behaves on its own
+ not depending on any compiler system. The invocation options, for
+ example, are the same across the compilers with which MCPP is
+ compiled. Although it can preprocess source files, it cannot behave
+ as an integrated part of a compiler system.
+compiler-specific-build: The preprocessor to replace (if possible) the
+ resident preprocessor of certain compiler system. It has some
+ specifications for the compiler system only and is installed into
+ the compiler-system-specific directory.
+
+This document does not explain subroutine-build. As for it, please
+refer to mcpp-porting.html 3.12. All the explanations below are of
+stand-alone-build.
+
+2. Configure and make
+
+To compile MCPP, the configure script can be used on UNIX-like systems
+and CygWIN, MinGW. You can do configure and make in any directory. In
+this document ${mcpp-dir} represents the path of 'mcpp-${VERSION}'
+directory. The ${VERSION} represents the version of MCPP such as 2.6.4
+or 2.7.1.
+
+The configure script searches for compilers by name of 'cc' ('c++') and
+'gcc' ('g++') according to the path list set in the environment variable
+$PATH. So, if you use compilers named like 'gcc-4.3.0' and 'g++-4.3.0',
+you have to specify them by CC and CXX environment variables, or link
+them to 'gcc' and 'g++', prior to do configure. If you use a pair of
+compilers other than the one first found in the path list, you have to
+change the $PATH such as:
+
+ export PATH=/my/gcc/bin:$PATH
+
+The setting should be kept the same while you do 'configure' and 'make'.
+Do not specify a compiler by CC or CXX variable with any directory part,
+even in an absolute path, when it is not the first one found in the
+$PATH, because $PATH influences everything of configure.
+
+2.1. The compiler-independent-build
+
+If you type the commands as:
+
+ ${mcpp-dir}/configure; make; make install
+
+the compiler-independent executable will be generated and installed by
+name of 'mcpp'. Also a few document files will be installed.
+
+ ${mcpp-dir}/configure --prefix=/usr; make; make install
+
+will install the executable into 'bin' directory in the directory
+specified by '--prefix' option. If this option is omitted, the
+directory defaults to '/usr/local'.
+
+'make install' usually requires root privilege, and you can do it by:
+
+ sudo make install
+
+or by first 'su', then 'configure; make; make install'.
+On FreeBSD, you'd better to use 'gmake' instead of 'make'.
+To strip the executable, do:
+
+ make install-strip
+
+instead of 'make install'.
+
+To uninstall the executable, do:
+
+ make uninstall
+
+If you specify 'DESTDIR=DIR' option with make (un)install, all the files
+will be installed under (or uninstalled from) the 'DIR' directory. For
+example,
+
+ make DESTDIR=/tmp/mcpp install
+
+will install MCPP into '/tmp/mcpp/usr/local/bin/', (Non-existent
+directories will be generated. If '--prefix=DIR' option was specified
+in configure, '/usr/local' part will be replaced by 'DIR'). This option
+is used to make a binary package.
+
+GCC 4.1 or later has the option '-fstack-protector' ('-fstack-protector-
+all'). You can enable it by adding "CFLAGS+='-fstack-protector'" option
+to make command. The same can be said on GCC-specific-build. Also, you
+can use "CFLAGS+='-ggdb -O0'" option to debug mcpp by gdb.
+
+'make install' of compiler-independent-build installs a few documents as
+well as the executable. This is for the convenience of making a binary
+package.
+
+Note that on Linux, Mac OS X, CygWIN and MinGW, the system's standard
+headers have certain defects, and some workarounds are necessary for the
+compiler-independent-build of MCPP. See mcpp-manual.html 3.9.9 for this
+problem.
+
+2.2. The compiler-specific-build
+
+This line of commands will generate a compiler-specific executable and
+will install it into the compiler-specific directory.
+
+ ${mcpp-dir}/configure --enable-replace-cpp; make; make install
+
+'make install', 'make install-strip', 'make uninstall' are the same as
+compiler-independent-build.
+
+The prefix directory is automatocally set from the path of GCC: for
+example, '/usr/local' of '/usr/local/bin/gcc'. If you specify --prefix
+option for configure and it conflicts with the GCC path, the --prefix
+option will be ignored. 'DESTDIR' option of make has also no relevance
+to the executable's installation.
+
+For the compiler systems other than GCC, however, it may not be compiled
+or installed properly if some porting work has not been done beforehand
+and if some of the options are not specified with configure.
+
+2.2.1 When the compiler system is GCC
+
+When the compiler system is GCC, the appropriate settings will be set by
+the configure without any options other than '--enable-replace-cpp'.
+After configuring, do 'make'.
+
+2.2.1.1. make install
+
+After configuring and 'make', the 'make install' command installs MCPP
+into the compiler's directory (e.g. /usr/libexec or /usr/lib/gcc-lib/
+SYSTEM/VERSION). This is the directory where cc1 (cpp0), which is
+called by gcc, is located. 'make install' saves GCC / cc1, cc1plus
+(cpp0) and setups gcc and g++ command appropriately to call MCPP. This
+setting is different depending on GCC being V.2.* or V.3.*-4.*. (Refer
+section 3.9.5 and 3.9.7 of mcpp-manual.html). In addition, it generates
+some GCC-version-dependent header files under 'mcpp-gcc*' directory in
+compiler-specific include directory.
+
+2.2.1.2. make check
+
+In the MCPP Validation Suite, there is an edition which can be used as
+testsuite of GCC. If GCC / testsuite has been installed, 'make check'
+can test MCPP using the testsuite edition of Validation Suite. Because
+this edition is to be used as a part of GCC / testsuite, the testsuite
+should be installed and ready to execute in advance. GCC / testsuite is
+usually a part of the source code of GCC. (It can be a separate package
+in some cases.) You can use any version of testsuite from GCC V.2.95.*
+to V.4.2.*.
+
+Also, 'configure' needs an option to specify the directory where GCC /
+testsuite is located, as:
+
+ ${mcpp-dir}/configure --with-gcc-testsuite-dir=DIR \
+ --enable-replace-cpp
+
+If the directory where GCC source is located is ${gcc-source}, this
+'DIR' should become:
+
+ ${gcc-source}/gcc/testsuite
+
+Configured as above, 'make check' after 'make; make install' copies the
+testsuite edition of Validation Suite into GCC / testsuite, and applies
+required settings according to whether GCC is V.2.* or V.3.*-4.*. When
+the name of the gcc command is not 'gcc', for example 'gcc-4.1.2' or
+'powerpc-apple-darwin9-gcc-4.0.1', 'make check' links 'gcc' to that name
+temporarily, because GCC testsuite expects literal 'gcc' for the name.
+Then, the testsuite will be executed. Usually, 'make check' would be
+run before 'make install' in the normal software, but this order is
+reversed in MCPP. This is because testsuite cannot be applied to MCPP
+unless MCPP is called from gcc. Due to this, the option '--enable-
+replace-cpp' is also required.
+
+Depending on the location of ${gcc-source} directory, you should do
+'sudo make check' instead of 'make check'. In this case, make sure that
+gcc is the same between root and the current user.
+
+The testsuite edition of Validation Suite can also be applied to cc1,
+cc1plus (cpp0) of GCC V.2.95 and later, not only for MCPP. (Refer cpp-
+test.html 3.2.3).
+
+2.2.1.3. make uninstall
+
+When you type 'make uninstall', the executables of MCPP will get deleted.
+The header files in mcpp-gcc* directory will be deleted, too. The
+settings of gcc and cc1, cc1plus (cpp0) will be reset to the initial
+state. When the re-execution of configure is required after completing
+'make install' for some reason, 'make uninstall' needs to be done
+beforehand. This is because the configure should check GCC, not MCPP.
+
+If you have done 'make check', the 'make uninstall' will also remove the
+testsuite edition of Validation Suite. If you want to use Validation
+Suite for GCC, copy it manually.
+
+The Makefiles generated by configure are necessary to do 'make
+uninstall', so you should not remove them. When you do 'make distclean',
+first do 'make uninstall', because it is a little troublesome to
+uninstall GCC-specific-MCPP manually. Also you should do 'make
+uninstall; make distclean' even before updating configure or Makefile.in,
+when you update MCPP.
+
+2.2.2. When the compiler system is Apple-GCC on Mac OS X
+
+Although Mac OS X is one of the UNIX-like systems, it has some
+peculiarities such as "framework" directories. Its system compiler is a
+GCC with many extensions added by Apple. Moreover, since the appearance
+of Intel-Mac, both of the compiler system for x86 and the compiler
+system for powerpc, one is a native compiler and the other is a cross
+compiler, begun to co-exist in a same machine. And even a so-called
+"universal binary", which is a bundle of binaries for x86 and powerpc,
+hence is able to work on either machine, has become popular. The
+structure of compiler systems is rather complex.
+
+To install MCPP for this complex system, the command sequence of 2.2.1
+is not sufficient. Here, I explain the case of Mac OS X / Apple-GCCs
+apart from other UNIX. I am using Mac OS X Leopard on Intel-Mac, so I
+take the examples of the system. If you use Powerpc-Mac, read the
+section below swapping 'i686' and 'powerpc'. On Tiger, read 'darwin9'
+as 'darwin8'.
+
+Apple provides GCC 4.0.1, and also provides GCC 3.3 as an addition. I
+explain only GCC 4.0.1, and omit GCC 3.3, because it has not been
+properly compiled at least on Leopard.
+
+2.2.2.1. Native compiler versus cross compiler
+
+It is simple to compile and install MCPP for a native compiler, i.e. for
+x86 on Intel-Mac. The command sequence in 2.2.1 is sufficient for it.
+
+Making of MCPP with a cross compiler, however, is not so easy.
+Generally, the configure script of MCPP does not support cross compiling,
+because it contains a few tests to be compiled and executed. A binary
+for a target environment cannot be run on a build environment usually.
+If we test the build environment instead, the results are not
+necessarily the same with the target.
+
+Nevertheless, on Mac OS X, we can exceptionally configure cross-
+compiling for different CPUs in most cases. First, Intel-Mac
+automatically executes a ppc binary with an emulator. Second, if the
+build environment and the target differ only in CPU and its related
+settings, and OS, its version and GCC's version are all the same between
+them, we can substitute most of the tests of the target with that of the
+build.
+
+On Intel-Mac, for a compiler-independent-build, you should specify the C
+compiler (the name of compiler driver) and C++ compiler by the
+environment-variables CC and CXX. There are many gccs and g++s in /usr/
+bin of Mac OS X. In Mac OS X Leopard on Intel-Mac, powerpc-apple-
+darwin9-gcc-4.0.1 and powerpc-apple-darwin9-g++-4.0.1 are the C compiler
+and the C++ compiler for powerpc. (Actually, all the gccs and g++s in
+/usr/bin are universal binaries of i386 and ppc.) In addition, you
+should specify the target system by --target option. In this case, you
+should use the compiler's name removing '-gcc-4.0.1', i.e. powerpc-apple-
+darwin9. This is the configure command to make compiler-independent-
+build:
+
+ ${mcpp-dir}/configure --target=powerpc-apple-darwin9 \
+ CC=powerpc-apple-darwin9-gcc-4.0.1 \
+ CXX=powerpc-apple-darwin9-g++-4.0.1
+
+On the other hand, ppc-Mac cannot execute an x86 binary, so you cannot
+make the compiler-independent-build with this method. Instead, you can
+cross-compile it manually, using the difference file and mac_osx.mak.
+See mcpp-porting.html#3.1.4 and #3.11, if needed. You can also make a
+universal binary on ppc-Mac with its native compiler using the configure,
+as explained in the next section.
+
+To make a GCC-specific-build, you should specify the C compiler by
+--with-target-cc= option instead of CC and CXX as: (the configure deduce
+the name of C++ compiler from the name of C compiler, replacing 'gcc'
+with 'g++'.)
+
+ ${mcpp-dir}/configure --target=powerpc-apple-darwin9 \
+ --with-target-cc=powerpc-apple-darwin9-gcc-4.0.1 \
+ --enable-replace-cpp
+
+This configuration does not contain any running test of the target, so
+it can be used on ppc-Mac too, changing 'powerpc' with 'i686'.
+
+When the version of the default native compiler (gcc and g++) greatly
+differs from that of the cross compiler specified by --with-target-cc=
+option, you should specify a native compiler of a version as close as
+possible to the target by the environment-variables CC and CXX. The
+compiler specified by CC (CXX) is to be used to build MCPP, while the
+compiler specified by --with-target-cc= is the target compiler into
+which MCPP is installed.
+
+The cross compiler differs from the native compiler in libexec directory,
+compiler-specific include directory and predefined macros. The
+configure with these options appropriately sets them. These options
+should be used for configure, not for make command.
+
+Note that a cross compiler itself runs on a host system, so does a
+compiler-specific-build MCPP installed "to a cross compiler". On the
+other hand, a compiler-independent-build MCPP compiled "with a cross
+compiler" runs on a target system. Also note that both of the GCC-
+specific-build for the native compiler and for the cross compiler are
+compiled by the native compiler, therefore, if you install both, you
+should first install the one for the cross compiler.
+
+2.2.2.2. Making a universal binary
+
+To make a universal binary, specify the CPUs by -arch options and add
+them to the 'make' command as "CFLAGS+='-arch i386 -arch ppc'". The
+valid CPU types are 'i386', 'x86_64', 'ppc' and 'ppc64'. For example,
+this command generates a bundled binary for 4 CPU types.
+
+ make CFLAGS+='-arch i386 -arch x86_64 -arch ppc -arch ppc64'
+
+The configure needs no special option for universal binary, it needs
+only options for non-universal binary, if any.
+
+GCC has '-isysroot DIR' or '--sysroot=DIR' options, which change root of
+system include directories to DIR. These options are not limited to Mac
+OS, but are commonly used on Mac OS to compile a universal binary in
+order to widen compatibility with older version of Mac OS. For example,
+if '-isysroot /Developer/SDKs/MacOSX10.4u.sdk' is specified, /usr/
+include becomes /Developer/SDKs/MacOSX10.4u.sdk/usr/include. This is an
+example to compile a universal binary compatible with Mac OS X 10.4
+(Tiger) on 10.5 (Leopard). When you use this option in making MCPP, you
+should also specify the version of SDK by -mmacosx-version-min= option.
+
+Any universal binary of MCPP can be generated with a combination of the
+above configure options and these make options, on either of compiler-
+independent-build or GCC-specific-build, and on either of native
+compiler or cross compiler. This example shows the sequence to generate
+a universal binary of compiler-independent-build compatible with Tiger
+for i386 and ppc. (Actually, you should write the '*' in one line.)
+
+ ${mcpp-dir}/configure
+ make CFLAGS+='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -mmacosx-version-min=10.4 -arch i386 -arch ppc'
+ sudo make install
+
+2.2.3. When the compiler system is not GCC
+
+When the compiler system is not GCC, some options need to be specified
+in the configure. Also, to use MCPP replacing the preprocessor of the
+compiler system, the "porting" or adding source code is required. MCPP
+have already been ported to GCC, because the author is using GCC on
+Linux, FreeBSD, Mac OS X, CygWIN and MinGW systems, and so the
+informations can be collected by the configure. However, as he does not
+know any compiler systems on UNIX-like systems other than GCC, he does
+not even know what or how it needs to be checked by the configure, let
+alone the porting.
+
+For compiler systems other than GCC on UNIX systems, please compile with
+the following procedures.
+
+2.2.3.1. Configure by specifying options
+
+First, do configure by specifying some options, for example:
+
+ ${mcpp-dir}/configure --enable-replace-cpp --bindir=DIR \
+ --with-cxx-include-dir=CXXDIR \
+ --enable-SYSTEM-STD-macro=_MACRO=val
+
+Specify the directory where the preprocessor, which is called from the
+compiler-driver, is located with --bindir, specify the C++ specific
+include directory with --with-cxx-include-dir and specify the predefined
+macro of the resident preprocessor with --enable-SYSTEM-STD-macro or
+other options.
+
+If you type
+
+ ${mcpp-dir}/configure --help
+
+some options will be displayed.
+
+Then, after doing 'make; make install', some work for making MCPP
+callable from the compiler driver is required. Please see the setup on
+GCC for how to do this.
+
+2.2.3.2. "Porting" work
+
+To be able to use the MCPP replacing the preprocessor of the compiler
+system, it is required to do "porting" work by adding source code.
+These are the execution options for the compiler system or the
+implementation of #pragma directives. Especially, when there are some
+execution time options which are used frequently but different from MCPP,
+they at least need to be implemented. In order to do that, define the
+macro to designate the compiler in configed.H, and write some codes in
+system.c. (Refer mcpp-porting.html 4.2).
+
+2.2.3.3. Re-configure by adding an option
+
+Once porting of source is completed, re-configure by adding the option
+--with-compiler-name=COMPILER. 'COMPILER' is the macro for the compiler
+defined in configed.H.
+
+After 'make; make install' is done successfully, do 'make clean; make'
+which recompiles MCPP using the installed MCPP. If it passes, it can be
+said that basic porting has been done successfully.
+
+2.2.4. The limitations of the configure
+
+In the compilation of compiler-specific-build of MCPP, the
+specifications of the target system (the compiler system which will use
+MCPP as a preprocessor) must be understood in detail. At the same time
+the host system (the compiler system with which MCPP is compiled) need
+to be understood. In case these two are not the same, the source code
+of MCPP is written with the settings of both systems separately in the
+header file (configed.H). However, the configure cannot detect both of
+them at the same time. Therefore, it assumes the target system is the
+same as the host system.
+
+If these two systems are not the same, Part 2 of the configed.H needs to
+be modified.
+
+Cross-compiling is not supported by the configure of MCPP, either. Some
+tests which cannot be executed by the cross-compiler are included as
+well. In case of cross-compiling, the default values will be set, but
+this may not work.
+
+3. 'make' on the Windows compiler systems
+
+Since all compiler systems on Windows other than CygWIN and MinGW are
+not subject to the 'configure', they need a bit of modification of the
+source in order to do 'make'. As there are difference files for already
+ported systems, a patch can be applied by using them. The procedure for
+the use of the difference files is explained below.
+
+Even the systems subject to the 'configure' can also be controlled in
+detail by editing the makefile and header files directly.
+
+3.1. Applying a patch
+
+The difference files and makefiles for various compiler systems are
+available in 'noconfig' directory. The source of MCPP is defaulted to
+FreeBSD / GCC 3.4 setting. The difference files are used in order to
+modify this source for the particular compiler systems. The makefile is
+written for using the make command attached to each compiler system.
+
+In the 'src' directory, run as below. All of the following process
+should be done within the 'src' directory.
+
+ patch -c < ..\noconfig\which-compiler.dif
+ copy ..\noconfig\which-compiler.mak Makefile
+
+'patch' is a UNIX command, but it can be used in Windows as it has been
+ported. Of course, you can directly edit the noconfig.H file referring
+the difference file.
+
+3.2. Modifying noconfig.H and Makefile if required
+
+The settings of various directories in the difference files are based on
+the environment of the author, hence you have to modify them.
+
+If the version of the compiler system is different from that of the
+difference file, modify the header file noconfig.H. (See noconfig.H
+itself and mcpp-porting.html 3.1). Similarly, if the multi-byte
+character for normal use is not Japanese, change the macro definition
+MBCHAR in noconfig.H.
+
+Also, define BINDIR in the Makefile to the directory in which MCPP
+executable should be installed. As for the Makefile for Visual C,
+remove '#' of this line and make 'install' target effective.
+
+ #install :
+
+3.3. Compiler-independent-build
+
+Now, you can do 'make' and 'make install' successfully for the compiler-
+independent executable. (For Visual C, use 'nmake' instead of 'make').
+
+3.4. Compiler-specific-build
+
+To make the compiler-specific-build, rewrite BINDIR in the Makefile to
+the directory in which the executables of the compiler system are
+located. Then, rewrite this line in noconfig.H:
+
+ #define COMPILER INDEPENDENT
+
+Replace 'INDEPENDENT' with the macro to designate the compiler. Then do
+'make' and 'make install'. 'COMPILER' can be overwritten also by make
+option, hence the file can be left as it is. For example, in Visual C,
+'nmake COMPLIER=MSC' and 'nmake COMPILER=MSC install' or in Borland C,
+'make -DCOMPILER=BORLANDC' and 'make -DCOMPILER=BORLANDC install'.
+
+If the target system and the compiling system are different, noconfig.H
+/ Part 1 should be set to the specifications of the target system and
+Part 2 should be set for the compiling system. The Makefile that should
+be used is the compiling system's one, and modify the installation
+directory to the target system's one.
+
+Since most compiler systems on Windows integrate preprocessor into its
+compiler, it is impossible to replace the preprocessor of such a one-
+path compiler with MCPP. To use MCPP, a source program should be first
+preprocessed with MCPP and then the output should be passed to the
+compiler. To use MCPP with a one-path compiler, the procedure should be
+written in makefile. For sample procedures, refer to the makefile's
+settings used to recompile MCPP using MCPP itself.
+
+In Visual C++, if you create "makefile project" by IDE using the
+attached makefile, all the functions of IDE, such as source level debug,
+become available. (Refer mcpp-manual.html 2.10)
+
+3.5. Test
+
+On Windows, any include directory is not preset except MinGW/GCC-
+specific-build and GygWIN, hence you should specify them by the
+environment variable INCLUDE (and CPLUS_INCLUDE, if necessary).
+
+GCC / testsuite cannot be used in Windows, MCPP needs to be checked
+directly by preprocessing the test samples in test-t, test-c and test-l
+directories. If you use tool/cpp_test.c, it can test some parts
+automatically. (Refer cpp-test.html 3.2.2).
+
+For the compiler-specific-build of MCPP, if you re-compile MCPP with the
+"pre-preprocess" functionality of MCPP, by using MCPP itself as the
+preprocessor of the compiler system, you can check whether it has been
+ported successfully for the compiler system. (Refer mcpp-porting.html 3.
+7)
+
+4. Please send me the information for porting.
+
+To port to the compiler systems which have not been ported yet, lots of
+information is required. It will be great to hear from many people.
+
+Please let me know if you know the values for options of the 'configure',
+for compiler systems other than GCC. I would like to work on configure.
+ac.
+
+5. Validation Suite
+
+MCPP provides "Validation Suite" which tests and evaluates C/C++
+preprocessor comprehensively. Validation Suite has 265 items and can be
+applied to any preprocessor as well as MCPP. Refer to 3.1 and 3.2 of
+cpp-test.html.
+
+November, 2008
+Kiyoshi Matsui
+
diff --git a/libraries/mcpp/INSTALL-jp b/libraries/mcpp/INSTALL-jp
new file mode 100644
index 000000000..38941720d
--- /dev/null
+++ b/libraries/mcpp/INSTALL-jp
@@ -0,0 +1,468 @@
+ ł́AMCPP ̃\[XRpCĎsvO@
+܂Bڍׂ͂ mcpp-porting.html ĂB
+
+1AsvO̎
+
+ MCPP ̎svO build @ɉĉނ܂BBuild
+@ɂ͎̂Q̎܂B
+
+ 1. stand-alone-build vs subroutine-build
+ 2. compiler-independent-build vs compiler-specific-build
+
+stand-alone-build: P̃R}hƂĒP̂œvvZbTłB
+ ñRpCEhCoĂяô܂B
+subroutine-build: ̃CvO̒Tu[`ƂāiKv
+ JԂjĂяôłB
+
+compiler-independent-build: n͓ƗēvvZbTłB
+ sIvVȂǂ̎dl͏n̂ɂ炸łBvv
+ ZX邱Ƃł܂An̈ꕔƂē삷邱Ƃ͂ł
+ B
+compiler-specific-build: ̏ñvvZbTi\Ȃj
+ ւ邽߂̂̂łB̏nɐp̎dlȀn̐
+ p̃fBNgɃCXg[܂B
+
+ Subroutine-build ɂĂ͂ł͐͗܂Bmcpp-porting.html 3.
+12 ĂBȉׂ͂ stand-alone-build ɂĂ̐łB
+
+2Aconfigure make
+
+ MCPP RpCɂ́AUNIX ñVXe CygWIN, MinGW ł
+configure XNvggƂł܂Bconfigure make ͔Cӂ̃fB
+NgŎsł܂Bȉ̐ł mcpp-${VERSION} fBNĝ
+ path ${mcpp-dir} ƕ\L܂B${VERSION} 2.6.4, 2.7.1
+MCPP ̃o[WłB
+
+Configure ̓RpC cc (c++) ܂ gcc (g++) ƂOŁA
+ $PATH ɃZbgꂽ path list ̏ɃT[`܂BāAgcc-4.
+3.0, g++-4.3.0 ƂÕRpCgȂAconfigure Oɂ
+ϐ CC, CXX Ŏw肷邩A܂ gcc, g++ ɃNĂĂ
+BApath list ōŏɃT[`RpCȊÕRpC
+gȂA$PATH ̂悤ɕύXȂȂ܂B
+
+ export PATH=/my/gcc/bin:$PATH
+
+̐ݒ make I܂ňێĂBPath list ōŏɃT[`
+RpCȊÕRpC CC, CXX Ŏw肵Ă͂܂B
+pXŎw肵Ă_łBPath list configure ׂ̂Ăɉe
+^邩łB
+
+2A1Acompiler-independent-build
+
+ ${mcpp-dir}/configure; make; make install
+
+ƂƁAcompiler-independent ł̎svO mcpp Ƃ
+OŃCXg[܂Bꕔ̃hLgCXg[܂B
+
+ ${mcpp-dir}/configure --prefix=/usr; make; make install
+
+Ƃꍇ́Aprefix Ŏw肳ꂽfBNg̒ bin fBNg
+CXg[܂Bw肵Ȃ /usr/local w肵̂Ɠ
+ƂɂȂ܂B
+ make install ɂ͒ʏ root KvȂ̂ŁA
+
+ sudo make install
+
+Ƃ܂B邢 su Ă configure; make; make install Ƃ܂B
+ȂAFreeBSD ł make ł͂Ȃ gmake gĂB
+ svO strip ɂ́Amake install ̂
+
+ make install-strip
+
+Ƃ܂B
+
+ make uninstall
+
+ƂƁAMCPP ̎svO͍폜܂B
+
+ make (un)install ł DESTDIR=DIR ƂIvVw肷ƁADIR
+̃fBNgɃCXg[܂BႦA
+
+ make DESTDIR=/tmp/mcpp install
+
+ƂƁA/tmp/mcpp/usr/local/bin/ MCPP CXg[܂i
+ȂfBNg͍쐬Bconfigure --prefix=DIR IvVw
+肵Ă '/usr/local' ̕ 'DIR' ɒujBoCiEpb
+P[Wɂ͂̕@g܂B
+
+ GCC 4.1 ȍ~ɂ -fstack-protector (-fstack-protector-all) ƂIv
+V܂Amake CFLAGS+='-fstack-protector' ƂIvV
+w肷邱ƂłLɂ邱Ƃł܂B GCC-specific-
+build łlłBMCPP gdb ŃfobO鎞ɂ CFLAGS+='-ggdb -O0'
+Ƃ܂B
+
+ compiler-independent-build ł make install ōŏ̃hLg
+CXg[悤ɂ܂B̓oCiEpbP[W
+ɍ킹̂łB
+
+ Linux, Mac OS X, CygWIN, MinGW ł̓VXe̕Wwb_Ɍׂ
+ŁAcompiler-independent-build MCPP ł͂̑KvłB̖
+ɂĂ mcpp-manual.html 3.9.9 ĂB
+
+2A2Acompiler-specific-build
+
+ ${mcpp-dir}/configure --enable-replace-cpp; make; make install
+
+ƂƁAcompiler-specific ł̎svOāȀn
+p̃fBNgɃCXg[܂B
+ make install-strip, make uninstall compiler-independent-build Ɠ
+łB
+ prefix fBNg GCC path 玩Iɐݒ肳܂BႦ GCC
+ path /usr/local/bin/gcc łA/usr/local prefix Ƃ܂B
+configure --prefix IvVw肵ĂAꂪ GCC path Ɩ
+ĂΖ܂B܂Amake ł DESTDIR IvVAsvO
+̃CXg[ɂ͊W܂B
+
+ AGCC ȊȌnł͐ɈڐAƂsAconfigure łɂ
+̃IvVw肵ȂƁAKȃRpCƃCXg[܂
+B
+
+2A2A1An GCC ̏ꍇ
+
+2A2A1A1Amake install
+ --enable-replace-cpp IvV configure ꍇAmake install
+̓RpC̒ufBNgi/usr/libexec, /usr/lib/gcc-lib/i686-
+pc-linux-gnu/VERSION jɎsvOCXg[܂B
+gcc ̌Ăяo cc1 (cpp0) uĂfBNgłBmake install
+ GCC / cc1, cc1plus (cpp0) ۑŁAgcc, g++ MCPP Ăяo
+悤ɓKȐݒ܂B̐ݒ GCC V.2.* ł邩 V.3.*,
+4.* ł邩ɂĈĂ܂imcpp-manual.html 3.9.5, 3.9.7 QƂ
+ƁjB܂AGCC ̃o[Wɉwb_t@C compiler-specific
+ include directory ̒ mcpp-gcc* ƂfBNgɐ܂B
+
+2A2A1A2Amake check
+ MCPP ̌Zbgɂ GCC testsuite ɑΉ edition ܂B
+GCC / testsuite CXg[Ăꍇ́Amake check ɂĂ
+testsuite ŌZbg MCPP Standard [h̃eXg邱Ƃł
+܂BTestsuite ŌZbg GCC / testsuite ̈ꕔƂĎg悤ɂ
+Ă̂ŁA炩 GCC / testsuite CXg[sł
+ԂɂȂĂ邱ƂKvłBGCC / testsuite ͒ʏ GCC ̃\[Ẍ
+ƂȂĂ܂iʂ̃pbP[WƂȂĂꍇjBGCC V.2.95.*
+ȍ~ testsuite g܂AV.4.3.* ̂̂ɂ͎̖肪̂ŁAV.
+4.2.* ܂ł̂̂gĂB
+ ܂Aconfigure 鎞 GCC / testsuite ̒uĂfBNg
+w肵ĂKv܂B̂߂ɂ͎̂悤ɂ܂B
+
+ ${mcpp-dir}/configure --with-gcc-testsuite-dir=DIR \
+ --enable-replace-cpp
+
+ 'DIR' GCC ̃\[XuĂfBNg ${gcc-source}
+ƁA
+
+ ${gcc-source}/gcc/testsuite
+
+ƂȂ͂łB
+ configure ĂāAmake; make install
+
+ make check
+
+ƂƁAZbg testsuite ł GCC / testsuite ̒ɃRs[A
+GCC V.2.* ł邩Ƃ V.3.*, 4.* ł邩ɉĕKvȐݒ肪
+܂BTestsuite ł gcc ̖O͕ʂ 'gcc' łȂȂ܂A
+MCPP CXg[ gcc ̖OĂꍇ́Agcc ƂO
+Iɂ̖O symbolic link ܂B testsuite s܂B
+ʏ̃\tgEFAł make install ̑O make check ܂AMCPP
+ꍇ͏tɂȂ܂Bgcc MCPP Ăяo悤ɂĂȂ
+ testsuite MCPP ɓKpłȂłB܂Â --enable-
+replace-cpp IvVKvłB
+ ${gcc-source} ̂肩ɂĂ make check sudo make check Ƃ
+Ȃ܂Ȁꍇ root ƌ[UƂ 'which gcc' ̌ʂ
+vĂȂȂȂƂɒӂĂB
+ Testsuite ŌZbg MCPP łȂAGCC V.2.95 ȍ~ cc1,
+cc1plus (cpp0) ɂKp邱Ƃł܂icpp-test.html 3.2.3 QƁjB
+
+2A2A1A3Amake uninstall
+ make uninstall ƂƁAMCPP ̎svO͍폜܂B
+mcpp-gcc* fBNg̃wb_t@C폜܂Bgcc, cc1, cc1plus
+(cpp0) ̐ݒ͏Ԃɖ߂܂B̂ make install
+configure Ďsꍇ́ȂO make uninstall ȂȂ܂
+BConfigure ׂȂ̂ GCC ł MCPP ł͂ȂłB
+ GCC / testsuite ̒ɌZbgCXg[ĂA
+make uninstall ō폜܂BGCC ɌZbgKpɂ́A蓮Ō
+ZbgRs[ĂB
+ GCC-specific-build configure Őꂽ{ Makefile MCPP
+ uninstall ƂɕKvȂ̂ŁÂ܂cĂĂBmake
+distclean ꍇ́ȂO make uninstall sĂB蓮
+uninstall ̂͏Ԃ邩łBlɁAconfigure
+Makefile.in XVꍇ́ȂO make uninstall; make distclean
+ĂȂȂ܂BMCPP update ꍇ͒ӂĂB
+
+2A2A2An Mac OS X Apple-GCC ̏ꍇ
+
+ Mac OS X UNIX nƂ͌Aframework directory ̓Ǝ̗vf
+Ă܂BGCC Apple ɂ鑽̊g{ꂽ̂VXeRpC
+ɂȂĂ܂B Intel-Mac ̓oȍ~́Ax86 p̃RpCVX
+e powerpc p̃RpCVXeƂiЕ̓lCeBuRpC
+̓NXRpCłj}Vɋ悤ɂȂAx86 p̎
+svO powerpc p̎svOPɑ˂Ăǂ̃}V
+悤ɂ universal binary Ƃ̂܂ō悤ɂȂĂ
+̂ŁAȂ蕡Gȍ\ɂȂĂ܂B
+ ̕GȃVXe MCPP CXg[̂́A2A2A1A̕@
+ł͑܂BŁAMac OS X / Apple-GCC ̏ꍇAʂɂƂ肠Đ
+܂B Intel-Mac Mac OS X Leopard gĂ̂ł
+Ƃ܂APowerpc-Mac ł i686 powerpc tɂēǂłB
+܂ATiger ł darwin9 darwin8 ɓǂݑւĂB
+ ȂAłƂ肠̂ GCC 4.0.1 łB̂ق GCC 3.3 Apple
+ɂėpӂĂ܂AȂƂ Leopard ̂̂͐RpC
+ĂȂ̂ŁAƂ肠܂B
+
+2A2A2A1AlCeBuRpCƃNXRpC
+
+ ܂Anative RpCiIntel-Mac Ȃ i686 p GCCjp MCPP C
+Xg[̂͊ȒPŁA2A2A1A̕@ł݂܂B
+ ANXRpCp MCPP CXg[̂́AȒPł
+܂BMCPP configure ͈ʂɂ̓NXRpCOɑΉĂ
+܂BTvvORpC run eXg
+܂Ă邩łB^[Qbgp̃oCirhŎs邱
+́Aʂ͂ł܂B܂Arh̃eXgĂǍʂ̓^[Q
+bgƂ͈Ă邩܂B
+ AMac OS X ̏ꍇ͗OIɁANXRpCɑΉłꍇ
+܂B܂AIntel-Mac ppc p̃oCiG~[^Ŏ
+s悤ɂȂĂ܂B܂ACPU Ă OS Ƃ̃o[W
+GCC ̃o[WłArhł̃eXgŃ^[Qbg̃e
+Xg̑pł܂B
+ Intel-Mac ł compiler-independent-build ł͂܂ACC, CXX Ƃ
+ϐ C RpC C++ RpCw肵܂BMac OS X /usr/bin
+ɂ͂ gcc g++ ܂AIntel-Mac Mac OS X Leopard
+ powerpc-apple-darwin9-gcc-4.0.1, powerpc-apple-darwin9-g++-4.0.1 Ƃ
+̂ powerpc p C RpC C++ RpCłiۂɂ /usr/bin
+ gcc, g++ ׂ͂ i386, ppc õoCi킹 universal binary
+łjBɁA^[QbgVXe --target IvVŎw肵܂B
+̏ꍇ̓RpC̖O -gcc-4.0.1 ̕폜 powerpc-
+apple-darwin9 g܂BǁAȂ܂B
+
+ ${mcpp-dir}/configure --target=powerpc-apple-darwin9 \
+ CC=powerpc-apple-darwin9-gcc-4.0.1 \
+ CXX=powerpc-apple-darwin9-g++-4.0.1
+
+ ppc-Mac ł x86 ̃oCisłȂ̂ŁA configure
+ł compiler-independent-build ̃NXRpC͂ł܂Bt@
+C mac_osx.mak g蓮RpCłNXRpCł
+̂ŁAKvȂ mcpp-porting.html#3.1.4, #3.11 ĂB܂A
+configure ł߂̕@gAppc-Mac native compiler
+universal binary 邱Ƃ͂ł܂B
+ GCC-specific-build ł CC, CXX ͎g킸Â悤 --with-target-cc=
+ƂIvV C RpCw肵܂i̖O gcc g++ ɕ
+̂ C++ RpCƉ߂܂jB
+
+ ${mcpp-dir}/configure --target=powerpc-apple-darwin9 \
+ --with-target-cc=powerpc-apple-darwin9-gcc-4.0.1 \
+ --enable-replace-cpp
+
+ ̓^[Qbg̎seXg͊܂܂Ȃ̂ŁApowerpc i686 ɒu
+ ppcMac Ŏg͂łB
+ ftHg̃lCeBuRpCigcc, g++j --with-target-cc= Ŏw
+肷NXRpCƂő傫o[WĂꍇ́ÃNX
+RpCɂȂׂ߂o[W̃lCeBuRpCϐ CC,
+CXX Ŏw肵ĂBCC (CXX) Ŏw肷̂ MCPP rh邽߂
+RpCłA--with-target-cc= Ŏw肷̂ MCPP CXg[
+^[Qbg̃RpCłB
+ NXRpC̓lCeBuRpCƂ libexec directory, compiler-
+specific include directory, O`}NقȂ܂A炪
+IvVwɂēKɐݒ肳܂B̃IvV make ł
+Ȃ configure Ŏw肷Kv܂B
+ ȂANXRpC̓zXgVXeœ삷̂Ȃ̂ŁÁuN
+XRpCɁvCXg[ compiler-specific-build MCPP
+lłBŁuNXRpCŁvRpCꂽ compiler-
+independent-build MCPP ́A^[QbgVXeœ̂ɂȂ܂B
+AGCC-specific-build ̓lCeBuRpCɃCXg[̂
+NXRpCɃCXg[̂AƂɃlCeBuRpC
+RpC܂B̂߁ȂoCXg[ꍇ́ANXR
+pCpɃCXg[Kv܂B
+
+2A2A2A2AUniversal binary make
+
+ Universal binary ɂ́Amake 鎞 CFLAGS+='-arch i386 -arch
+ppc' Ƃ悤ɁAΏۂƂ CPU -arch IvVŎw肵܂Bw
+ł CPU i386, x86_64, ppc, ppc64 ̂SނłBmake CFLAGS+='-arch
+i386 -arch x86_64 -arch ppc -arch ppc64' ƂƂS CPU ɑΉ
+̂ł܂Bconfigure universal binary łȂꍇƓŁAʂȃI
+vV͕Kv܂B
+ GCC ɂ -isysroot DIRi܂ --sysroot=DIRjƂIvV
+Bꂪw肳ƁAVXewb_ include directory ƂăftH
+g include directory DIR ɕt̂g܂B̃IvV
+ Mac OS Ɍ̂ł͂܂AMac OS ł universal binary
+̃RpCɂꂪgĂ܂BMac OS ̃o[WԂ͈̌݊̔
+L邽߂łBႦA-isysroot /Developer/SDKs/MacOSX10.4u.sdk Ƃ
+ƁA/usr/include /Developer/SDKs/MacOSX10.4u.sdk/usr/include ƂȂ
+܂B̗ Mac OS X 10.5 (Leopard) 10.4 (Tiger) ƌ݊
+universal binary RpC邽߂̂̂łBMCPP make łg
+߂ɂ́A -mmacosx-version-min= ƂIvV SDK Ɠo
+[Ww肷Kv܂B
+ MCPP universal binary ́AL configure IvVƂ
+make IvVgݍ킹邱ƂŁAcompiler-independent-build, GCC-
+specific-build ̂ǂłAnative-compiler, cross-compiler ̂ǂ
+邱Ƃł܂BႦ compiler-independent-build Tiger
+ i386 ppc p̂̂ɂ͂܂iۂɂ́A'*' ̒ \
+Qsɕ邱Ƃ͂łȂjB
+
+ ${mcpp-dir}/configure
+ make CFLAGS+='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
+ -mmacosx-version-min=10.4 -arch i386 -arch ppc'
+ sudo make install
+
+2A2A3An GCC łȂꍇ
+
+ n GCC łȂꍇ configure ł̃IvVw肵Ȃ
+Ȃ܂B܂ȀñvvZbTƒuł悤ɁA\[
+XR[huڐAvƂKvłBҎg Linux, FreeBSD, Mac
+OS X, CygWIN, MinGW GCC gĂ̂ňڐAłAconfigure
+ŏW邱Ƃł̂łAUNIX nVXȇ̏nɂ
+Ă͒mȂ̂ŁAڐA͂낪 configure ʼnǂׂΗǂ̂
+ȂłB
+ UNIX nVXe GCC ȊȌnł́Â悤Ȏ菇ŃRpCi
+߂ĂB
+
+2A2A3A1AIvVw肵 configure
+ ܂ÃIvVw肵 configure Ă݂܂BႦΎ
+悤ɂ܂B
+
+ ${mcpp-dir}/configure --enable-replace-cpp --bindir=DIR \
+ --with-cxx-include-dir=CXXDIR \
+ --enable-SYSTEM-STD-macro=_MACRO=val
+
+ --bindir Ŏw肷̂́ARpChCoĂяovvZ
+bTufBNgłB C++ ŗL̃CN[hfBNg
+ --with-cxx-include-dir ŁA܂nŗL̎O`}N
+--enable-SYSTEM-STD-macro ̑̃IvVŎw肵܂B
+
+ ${mcpp-dir}/configure --help
+
+ƂƃIvV\܂B
+ make; make install āAɃRpChCo MCPP
+яo悤ɍH܂B̕@ɂẮAGCC ł̐ݒ@Ql
+ɂĂB
+
+2A2A3A2AuڐAv
+ ñvvZbT MCPP ɒuĎg߂ɂ́A\[XR[h
+uڐAvƂKvłBnŗL̎sIvV #pragma
+̎łBłΎgsIvV MCPP ƈقȂ
+AŒA̎KvłB̂߂ɂ́Aconfiged.H ł̃R
+pC\}N`ŁAsystem.c ɃR[h܂
+imcpp-porting.html ̂Ƃ 4.2 QƁjB
+
+2A2A3A3AIvVlj configure Ȃ
+ \[ẌڐAłA--with-compiler-name=COMPILER ƂIvV
+lj configure ܂BCOMPILER configed.H Œ`̃R
+pC\}NłB
+ make; make install łA make clean; make ƂƁAMCPP
+g MCPP ̃RpCs܂BꂪʂAŒ̈ڐA͂
+Ă܂B
+
+2A2A4Aconfigure ̐
+
+ compiler-specific-build MCPP ̃RpCł̓^[QbgniMCPP
+vvZbTƂĎg\̏nj̎dlڂmKv܂B
+ɁARpC鏈nɂĂʂ̑ʂ̎dlmKv܂B
+MCPP ̃\[X̗͂҂̏nĂĂ܂Ȃ悤ɁA҂̐
+ăwb_t@C (configed.H) Ă܂BA
+configure ł̗͂҂ɒׂ邱Ƃł܂B̂߁A^[Qb
+gƂ鏈nƃRpC鏈n͓łƂOŒ܂B
+ ̗҂̏nႤꍇ́Aconfiged.H Part 2 ҏW邱
+KvłB
+ MCPP configure ͓lɃNXRpCɂΉĂ܂B܂A
+NXRpCł͎słȂeXg܂܂Ă܂BNXR
+pCł͂̏ꍇ̓ftHglZbg܂A܂䂩Ȃ
+܂B
+
+3AWindows ̏nł make
+
+ Windows ̏n CygWIN, MinGW ȊO configure ̑ΏۂɂȂȂ
+ŁA\[XC make 邱ƂKvłBłɈڐȀ݂nɂ
+Ă͍t@CpӂĂ̂ŁAgăpb`Ă邱Ƃ
+܂Bt@Cgꍇ̎菇ȉɐ܂B
+ ܂Aconfigure ̑ΏۂɂȂ鏈nłAwb_t@C makefile
+ځAҏW邱Ƃł߂̂܂邱Ƃł܂B
+
+3A1Apb`Ă
+ noconfig ƂfBNgɊe폈np̍t@C makefile
+pӂĂ܂BMCPP ̃\[X̓ftHgł FreeBSD / GCC 3.4 p̐
+ɂȂĂ܂Bt@C͂ʂ̏npɏĈłB
+Makefile ͊enɕt make g悤ɏĂ܂B
+ src fBNgɓĎ̂悤ɂ܂Bȉ̍Ƃׂ͂ src fB
+Ngōs܂B
+
+ patch -c < ..\noconfig\which-compiler.dif
+ copy ..\noconfig\which-compiler.mak Makefile
+
+ patch UNIX nVXẽR}hłAWindows ɂڐAĂ
+ŁAg܂BAt@CāAGfB^ŏCĂ
+܂܂B
+
+3A2AKvȂ炳 noconfig.H, Makefile C
+ t@Cł͊efBNg̐ݒ肪M҂̊ɂĂ̂ŁA
+̊ɍ킹ďC܂B
+ gnt@Ĉ̂Ƃ̓o[WĂꍇ́Awb_
+t@C noconfig.H ɂɏC܂inoconfig.H ̂̂
+mcpp-porting.html 3.1 QƁjBʏg multi-byte character {
+͂ȂꍇlɁAnocongig.H MBCHAR Ƃ}N̒`
+B
+ ܂AsvOCXg[fBNg Makefile
+BINDIR Ƃϐɏ܂BVisual C p Makefile ł͎̍s #
+āAinstall ^[QbgLɂĂB
+
+ #install :
+
+3A3Acompiler-independent-build
+ make make install ƁAcompiler-independent ł̎sv
+OăCXg[܂iVisual C++ ł make ł͂Ȃ
+nmake gjB
+
+3A4Acompiler-specific-build
+ compiler-specific ł邽߂ɂ́A܂ Makefile BINDIR
+n̎svO̒uĂfBNgɏ܂BāA
+noconfig.H ̎̍s 'INDEPENDENT' ̃RpC\}Nɏ
+āA'make' 'make install' ܂B
+
+ #define COMPILER INDEPENDENT
+
+'COMPILER' make ̃IvVŏ㏑邱Ƃł̂ŁAnoconfig.H
+͕KKv͂܂BႦAVisual C ł 'nmake
+COMPILER=MSC' Ƃ 'nmake COMPILER=MSC install' ܂BBorland C ł
+'make -DCOMPILER=BORLANDC' Ƃ 'make -DCOMPILER=BORLANDC install'
+܂B
+
+ A^[QbgnƃRpC鏈nƂĂꍇ́A
+noconfig.H / Part 1 ^[Qbgn̎dlɍ킹APart 2 RpC
+鏈n̎dlɍ킹܂BMakefile ̓RpC鏈np̂
+gACXg[fBNg^[QbgnpɕύX܂B
+
+ AWindows ̏n̑̓vvZbTRpC{̂ƈ̂
+ȂĂ̂ŁAMCPP CXg[ĂvvZbTu邱Ƃ
+ł܂Bn MCPP g߂ɂ́Â悤 makefile
+Kv܂Bnoconfig fBNg̊e makefile ɂ́AMCPP g
+ MCPP RpCݒ肪Ă̂ŁAQlɂĂB
+ Visual C++ ł͂ makefile gāAIDE ŁuCNt@Cv
+WFNgv쐬ƁAIDE ̃\[XxfobŐ@\ׂĎg
+imcpp-manual.html 2.10 QƁjB
+
+3A5AeXg
+ Windows ł MinGW / GCC-specific-build CygWIN ȊOł include
+directory ͐ݒ肳Ȃ̂ŁAINCLUDE ƂϐŐݒ肵܂iKv
+ CPLUS_INCLUDE jB
+ Windows ł GCC / testsuite ͎gȂ̂ŁAtest-t, test-c, test-l f
+BNgɂeXgpTvځAvvZXĊm߂܂Btool
+/cpp_test.c gƁAꕔ̃eXgłAIɎsł܂icpp-
+test.html 3.2.2 QƁjB
+ compiler-specific-build ł́AMCPP gvvZbTƂĎgāA
+MCPP "pre-preprocess" Ƃ@\g MCPP RpCĂ݂
+ƁȀnłƂ肠g悤ɂȂǂm߂邱Ƃł
+܂imcpp-porting.html 3.7 QƁjB
+
+4AڐÂ߂̏
+
+ MCPP ܂ڐAĂȂnɈڐA邽߂ɂ́ȀKv
+B݂Ȃ̏҂Ă܂B
+ GCC ȊȌnɂ configure ̃IvVŎw肷l킩
+̂͋ĂBconfigure.ac Ɏ荞ł䂫Ǝv܂B
+
+5AuZbgvƂ
+
+ MCPP ɂ́uZbgvƂ̂tĂ܂B C/C++ vv
+ZbTɂ 265 ڂɂ킽OIȃeXgƕ]̂łB
+MCPP łȂCӂ̃vvZbTɓKp邱Ƃł܂B̎g
+ɂẮAcpp-test.html 3.1, 3.2 QƂĂB
+
+2008/11
+ @
+
diff --git a/libraries/mcpp/LICENSE b/libraries/mcpp/LICENSE
new file mode 100644
index 000000000..5b617d281
--- /dev/null
+++ b/libraries/mcpp/LICENSE
@@ -0,0 +1,29 @@
+/*-
+ * Copyright (c) 1998, 2002-2008 Kiyoshi Matsui
+ * All rights reserved.
+ *
+ * This software including the files in this directory is provided under
+ * the following license.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
diff --git a/libraries/mcpp/Makefile.am b/libraries/mcpp/Makefile.am
new file mode 100644
index 000000000..cf5e10850
--- /dev/null
+++ b/libraries/mcpp/Makefile.am
@@ -0,0 +1,38 @@
+## Process this file with automake to produce Makefile.in
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = src
+
+if REPLACE_CPP
+SUBDIRS += tests .
+man_page = mcpp-gcc
+else
+man_page = mcpp
+endif
+man1_MANS = $(man_page).1
+
+EXTRA_DIST = $(top_srcdir)/LICENSE $(top_srcdir)/INSTALL* \
+ $(top_srcdir)/ChangeLog.old $(top_srcdir)/NEWS \
+ $(top_srcdir)/mcpp.1 $(top_srcdir)/mcpp-gcc.1 $(top_srcdir)/config \
+ $(top_srcdir)/src/preproc.c $(top_srcdir)/src/noconfig.H \
+ $(top_srcdir)/src/cc1.c $(top_srcdir)/src/*set_mcpp.sh \
+ $(top_srcdir)/src/testmain.c $(top_srcdir)/src/mcpp_lib.def \
+ $(top_srcdir)/tests/*_test.sh $(top_srcdir)/noconfig \
+ $(top_srcdir)/cpp-test $(top_srcdir)/test-t \
+ $(top_srcdir)/test-c $(top_srcdir)/test-l $(top_srcdir)/tool \
+ $(top_srcdir)/doc $(top_srcdir)/doc-jp
+
+if ! REPLACE_CPP
+install-exec-hook:
+ $(top_srcdir)/config/install-sh -d "$(DESTDIR)$(prefix)/share/doc/mcpp"
+ cp -pf $(top_srcdir)/LICENSE $(top_srcdir)/README $(top_srcdir)/NEWS \
+ $(DESTDIR)$(prefix)/share/doc/mcpp
+ cp -pf $(top_srcdir)/doc/mcpp-manual.html \
+ $(DESTDIR)$(prefix)/share/doc/mcpp
+ cp -pf $(top_srcdir)/doc-jp/mcpp-manual.html \
+ $(DESTDIR)$(prefix)/share/doc/mcpp/mcpp-manual-jp.html
+uninstall-hook:
+ rm -rf $(DESTDIR)$(prefix)/share/doc/mcpp
+endif
+
diff --git a/libraries/mcpp/Makefile.in b/libraries/mcpp/Makefile.in
new file mode 100644
index 000000000..23821b4f0
--- /dev/null
+++ b/libraries/mcpp/Makefile.in
@@ -0,0 +1,709 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@REPLACE_CPP_TRUE@am__append_1 = tests .
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/configure ChangeLog \
+ INSTALL NEWS config/compile config/config.guess \
+ config/config.sub config/depcomp config/install-sh \
+ config/ltmain.sh config/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man1_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = src tests .
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+Target_Cpu = @Target_Cpu@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+cpp_call = @cpp_call@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gcc_maj_ver = @gcc_maj_ver@
+gcc_min_ver = @gcc_min_ver@
+gcc_path = @gcc_path@
+gcc_testsuite_dir = @gcc_testsuite_dir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_system = @host_system@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+inc_dir = @inc_dir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cc = @target_cc@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = src $(am__append_1)
+@REPLACE_CPP_FALSE@man_page = mcpp
+@REPLACE_CPP_TRUE@man_page = mcpp-gcc
+man1_MANS = $(man_page).1
+EXTRA_DIST = $(top_srcdir)/LICENSE $(top_srcdir)/INSTALL* \
+ $(top_srcdir)/ChangeLog.old $(top_srcdir)/NEWS \
+ $(top_srcdir)/mcpp.1 $(top_srcdir)/mcpp-gcc.1 $(top_srcdir)/config \
+ $(top_srcdir)/src/preproc.c $(top_srcdir)/src/noconfig.H \
+ $(top_srcdir)/src/cc1.c $(top_srcdir)/src/*set_mcpp.sh \
+ $(top_srcdir)/src/testmain.c $(top_srcdir)/src/mcpp_lib.def \
+ $(top_srcdir)/tests/*_test.sh $(top_srcdir)/noconfig \
+ $(top_srcdir)/cpp-test $(top_srcdir)/test-t \
+ $(top_srcdir)/test-c $(top_srcdir)/test-l $(top_srcdir)/tool \
+ $(top_srcdir)/doc $(top_srcdir)/doc-jp
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps'; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign --ignore-deps Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d $(distdir) || mkdir $(distdir)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@REPLACE_CPP_TRUE@install-exec-hook:
+@REPLACE_CPP_TRUE@uninstall-hook:
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man: install-man1
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-man
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+
+uninstall-man: uninstall-man1
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-exec-am install-strip uninstall-am
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-generic distclean-libtool distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-exec-hook install-html install-html-am \
+ install-info install-info-am install-man install-man1 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-hook uninstall-man uninstall-man1
+
+
+@REPLACE_CPP_FALSE@install-exec-hook:
+@REPLACE_CPP_FALSE@ $(top_srcdir)/config/install-sh -d "$(DESTDIR)$(prefix)/share/doc/mcpp"
+@REPLACE_CPP_FALSE@ cp -pf $(top_srcdir)/LICENSE $(top_srcdir)/README $(top_srcdir)/NEWS \
+@REPLACE_CPP_FALSE@ $(DESTDIR)$(prefix)/share/doc/mcpp
+@REPLACE_CPP_FALSE@ cp -pf $(top_srcdir)/doc/mcpp-manual.html \
+@REPLACE_CPP_FALSE@ $(DESTDIR)$(prefix)/share/doc/mcpp
+@REPLACE_CPP_FALSE@ cp -pf $(top_srcdir)/doc-jp/mcpp-manual.html \
+@REPLACE_CPP_FALSE@ $(DESTDIR)$(prefix)/share/doc/mcpp/mcpp-manual-jp.html
+@REPLACE_CPP_FALSE@uninstall-hook:
+@REPLACE_CPP_FALSE@ rm -rf $(DESTDIR)$(prefix)/share/doc/mcpp
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libraries/mcpp/NEWS b/libraries/mcpp/NEWS
new file mode 100644
index 000000000..383d42576
--- /dev/null
+++ b/libraries/mcpp/NEWS
@@ -0,0 +1,120 @@
+This file summarizes new major features of each MCPP release. (kmatsui)
+
+MCPP V.2.7.2 (2008/11)
+
+1. This is a bug-fixed version of V.2.7.1, fixing several bugs of the
+ previous release.
+
+2. Enabled some CPU-specific predefined macros in compiler-independent-
+ build as well as compiler-specific-build.
+
+
+MCPP V.2.7.1 (2008/05)
+
+1. This is a bug-fixed version of V.2.7, fixing several bugs of the
+ previous release.
+
+2. Made subroutine-build also install an mcpp executable and minimal
+ documents as well as libmcpp for a convenience of library package.
+
+
+MCPP V.2.7 (2008/03)
+
+1. Implemented -K option to enable macro notification mode. This mode
+ is designed for C/C++ refactoring tools and embeds macro annotations
+ into comments. This mode is also enabled by '#pragma MCPP debug
+ macro_call' sub-directive.
+
+2. Fixed several bugs of the previous release, including a bug of UTF-8
+ multibyte character handling.
+
+3. Ported to Mac OS X / GCC and Visual C++ 2008.
+
+4. Made GCC-specific-build closer to GCC.
+
+5. Added documentation on source checking of firefox 3.0pre.
+
+
+MCPP V.2.6.4 (2007/05)
+
+1. This is a bug-fixed version of V.2.6.3, fixing memory leaks in
+ subroutine-build, and fixing a bug of accessing non-allocated memory.
+
+2. Also changed the installation directory of some documents in stand-
+ alone-and-compiler-independent-build by configure or by binary
+ packages.
+
+
+MCPP V.2.6.3 (2007/04)
+
+1. Revised subtle points of #include and '#pragma once' handling, such
+ as dereferencing symbolic linked directory and others.
+
+2. Relaxed syntax checking and token checking in lang_asm mode.
+ Implemented variadic macro of GCC3-specification for GCC-specific-
+ build. Increased compatibility of GCC-specific-build to GCC.
+
+3. Implemented optional memory buffer output (other than file) in
+ subroutine-build.
+
+4. Added 'mcpplib' target to make subroutine-build in configure.ac and
+ noconfig/*.mak.
+
+5. Abolished 'install-data' and 'uninstall-data' targets of configured
+ makefile. On the other hand, made 'install' target install also
+ mcpp-manual.html.
+
+6. Provided stand-alone-and-compiler-independent-build binary packages
+ port, rpm, deb, zip and their corresponding source packages on
+ SourceForge.
+
+7. Added documentation on source checking of glibc 2.4.
+
+
+MCPP V.2.6.2 (2006/11)
+
+1. Fixed several bugs of the previous release.
+
+2. Added subroutine-build to use MCPP as a subroutine from other main
+ program.
+
+3. Changed the terms of building methods in the documents. The building
+ methods now have two axis:
+ 1. stand-alone-build vs subroutine-build
+ 2. compiler-independent-build vs compiler-specific-build
+ Refer to INSTALL #1.
+ Note that this change of terminology does not affect the two
+ building methods of stand-alone preprocessor so far: 'compiler-
+ independent-build' and 'compiler-specific-build'. ('compiler-
+ independent-build' was called 'stand-alone-build' in the previous
+ releases).
+
+4. Rewrote and converted the text files in 'doc' and 'doc-jp'
+ directories into html files.
+
+
+MCPP V.2.6.1 (2006/08)
+
+1. Fixed several bugs of the previous release.
+
+2. Revised path-list handling on CygWIN.
+
+3. Added porting to MinGW/MSYS.
+
+
+MCPP V.2.6 (2006/07)
+
+1. Integrated STANDARD mode and PRE_STANDARD mode into one executable,
+ differentiating the modes by the execution time options.
+
+2. Changed --enable-maintainer-mode option of configure to --enable-
+ replace-cpp option which generates compiler-specific-build of mcpp.
+
+3. Made compiler-independent-build really independent from any compiler-
+ systems. It no longer requires GCC-specific header files.
+
+4. Removed settings for pre-C90 compiler.
+ Removed settings for MS-DOS compiler, DJGPP and Plan9.
+
+5. Added portings to GCC V.4.0, CygWIN 1.5.18, Visual C++ 2005 and LCC-
+ Win32 2006-03.
diff --git a/libraries/mcpp/README b/libraries/mcpp/README
new file mode 100644
index 000000000..cb6851adb
--- /dev/null
+++ b/libraries/mcpp/README
@@ -0,0 +1,53 @@
+<< What is MCPP >>
+
+MCPP is a C/C++ preprocessor with the following features:
+
+ 1. Implements all of C90, C99 and C++98 features. It has the highest
+ conformance.
+ 2. Accompanies a validation suite to test the C/C++ preprocessors
+ comprehensively. When it is applied to the existing preprocessors,
+ MCPP shows outstanding result.
+ 3. Has a variety of accurate diagnostic messages. This allows
+ examination of most preprocessing problems of source, like potential
+ bugs or portability problems.
+ 4. Has various #pragma directives to output debug information.
+ 5. Supports the various encodings of multi-byte characters for Japan,
+ China, Taiwan and Korea.
+ 6. Highly portable. Supports many compiler systems on UNIX-like
+ systems and Windows. It can replace resident preprocessor of the
+ compiler system. It can also behave independently from any compiler
+ systems. Moreover, it can be built as a subroutine from any other
+ main program, too.
+ 7. Preprocessors of various behavior specifications can be generated
+ from the source.
+ 8. Is an open source software released under BSD-style-license.
+ 9. Full documentations in Japanese and English are attached.
+
+MCPP is probably the best C preprocessor in the world.
+
+MCPP was selected as one of the "Exploratory Software Projects" of the
+Information-technology Promotion Agency (IPA), Japan, in year 2002 and
+2003. With its achievements, the author was evaluated as one of the
+highest rank programmers.
+
+The sources and documents of MCPP are found at:
+
+ http://mcpp.sourceforge.net/
+
+Please read mcpp-summary.pdf for the overview of MCPP and Validation
+Suite.
+
+Please read INSTALL (INSTALL-jp) for how to install MCPP on your system
+from the source. Refer to the above web page for installation of the
+binary packages of MCPP.
+
+All the files except mcpp-summary.pdf are normal text files. In the
+.tar.gz file, newline of the text files are [LF], and encoding of
+INSTALL-jp is EUC-JP. In the .zip file, newline of the text files are
+[CR][LF], and encoding of INSTALL-jp is shift-JIS.
+
+I would like to hear from many C programmers for reviews, comments and
+the interest to participate in development.
+
+Kiyoshi Matsui
+
diff --git a/libraries/mcpp/aclocal.m4 b/libraries/mcpp/aclocal.m4
new file mode 100644
index 000000000..ac3c0cb58
--- /dev/null
+++ b/libraries/mcpp/aclocal.m4
@@ -0,0 +1,6964 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_if(m4_PACKAGE_VERSION, [2.61],,
+[m4_fatal([this file was generated for autoconf 2.61.
+You have another version of autoconf. If you want to use that,
+you should regenerate the build system entirely.], [63])])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+AC_DEFUN([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat </dev/null 2>&1 && unset CDPATH
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string=`eval $cmd`) 2>/dev/null &&
+ echo_test_string=`eval $cmd` &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+ = "XX$teststring") >/dev/null 2>&1 &&
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# ------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ---------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <
+#endif
+
+#include
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# ----------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $rm conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+ $rm out/* && rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib.so
+ # instead of lib.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix3*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 DLLs
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+# set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix3*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx*)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
+# (note the single quotes!). If your package is not flat and you're not
+# using automake, define top_builddir and top_srcdir appropriately in
+# the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# and an installed libltdl is not found, it is assumed to be `libltdl'.
+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and top_srcdir
+# appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([AC_PROG_CXX])
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# -------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF
+
+# Report which library types will actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ $as_unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ $as_unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes ; then
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc*)
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd='echo'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker. We must also pass each convience library through
+ # to the system linker between allextract/defaultextract.
+ # The C++ compiler will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit , 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e 1s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+ if test -f "$ltmain_in"; then
+ test -f Makefile && make "$ltmain"
+ fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+linux* | k*bsd*-gnu)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDGIRSTW]]'
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat < conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc*)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ linux* | k*bsd*-gnu)
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ _LT_CC_BASENAME([$compiler])
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi[[45]]*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ if test "$GCC" = yes ; then
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ wlarc=''
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ *)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include
+# #undef WIN32_LEAN_AND_MEAN
+# #include
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_MSG_RESULT([$SED])
+])
+
+# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.10], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10])dnl
+_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar /dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/libraries/mcpp/bin/mcpp-manual.html b/libraries/mcpp/bin/mcpp-manual.html
new file mode 100644
index 000000000..8364037c0
--- /dev/null
+++ b/libraries/mcpp/bin/mcpp-manual.html
@@ -0,0 +1,4617 @@
+
+
+
+
+
+
+
+
+
+
MCPP-MANUAL
+== How to Use MCPP ==
+
+
+
for V.2.7.2 (2008/11)
+Kiyoshi Matsui (kmatsui@t3.rim.or.jp)
+
+
+
Contents
+
+- 1. Overview
+
- 1.1. High Portability
+
- 1.2. Standard C Mode with Highest Conformance and Other Modes
+
- 1.3. Notations in this Manual
+
+
+ - 2. Invocation Options and Environment Settings
+
- 2.1. Two Kinds of Build and Five Behavioral Modes
+
- 2.2. How to Specify Invocation Options
+
- 2.3. Common Options
+
- 2.4. Options by mcpp Behavioral Modes
+
- 2.5. Common Options Except for Some Compiler Systems
+
- 2.6. Options by Compiler System
+
- 2.7. Environment Variables
+
- 2.8. Multi-Byte Character Encodings
+
- 2.9. How to Use mcpp in One-Pass Compilers
+
- 2.10. How to Use mcpp in IDE
+
- 2.10.1. How to Make mcpp available in Visual C++ IDE
+
- 2.10.2. How to Make mcpp available in Mac OS X / Xcode.app
+
+ - 3. Enhancement and Compatibility
+
- 3.1. #pragma MCPP put_defines, #pragma MCPP preprocess and others
+
- 3.1.1. Pre-preprocessing of Header File
+- 3.2. #pragma once
+
- 3.2.1. Tool to Write #pragma once to Header Files
+- 3.3. #pragma MCPP warning, #include_next, #warning
+
- 3.4. #pragma MCPP push_macro, #pragma __setlocale and others
+
- 3.5. #pragma MCPP debug, #pragma MCPP end_debug, #debug, #end_debug
+
- 3.5.1. #pragma MCPP debug path, #debug path
+
- 3.5.2. #pragma MCPP debug token, #debug token
+
- 3.5.3. #pragma MCPP debug expand, #debug expand
+
- 3.5.4. #pragma MCPP debug if, #debug if
+
- 3.5.5. #pragma MCPP debug expression, #debug expression
+
- 3.5.6. #pragma MCPP debug getc, #debug getc
+
- 3.5.7. #pragma MCPP debug memory, #debug memory
+
- 3.5.8. #pragma MCPP debug macro_call
+- 3.6. #assert, #asm, #endasm
+
- 3.7. New C99 Features (_Pragma() operator, Variadic Macro and others)
+
- 3.8. Particular specifications for certain compiler system
+
- 3.8.1. Variadic macro of GCC and Visual C
+
- 3.8.2. Handling of 'defined' by GCC
+
- 3.8.3. Asm Statement in Borland C and Other Special Syntaxes
+
- 3.8.4. #import and Others
+- 3.9. Problems of GCC and Compatibility with GCC
+
- 3.9.1. Preprocessing FreeBSD 2/Kernel Sources
+
- 3.9.2. Preprocessing FreeBSD 2/Libc
+
- 3.9.3. Problems Concerning GCC 2/cpp
+
- 3.9.4. Preprocessing Linux/glibc 2.1
+
- 3.9.5. To Use mcpp with GCC 2
+
- 3.9.5.1. To Sort mcpp's Warnings
+- 3.9.6. Preprocessing GCC 3.2 Source
+
- 3.9.7. To Use mcpp with GCC 3 or 4
+
- 3.9.8. Preprocessing Linux/glibc 2.4
+
- 3.9.9. The Problems of Linux / stddef.h, limits.h and #include_next
+
- 3.9.10. Problems of Mac OS X / Apple-GCC and its System Headers
+
- 3.9.11. Preprocessing firefox 3.0b3pre
+- 3.10. Visual C++ System Header Problems
+
- 3.10.1. Comment Generating Macro?
+
- 3.10.2. '$' in Identifiers
+
+ - 4. Implementation-defined Behaviors
+
- 4.1. Status Value on Exit
+
- 4.2. Include Directory Search Path
+
- 4.3. How to Construct Header Name
+
- 4.4. Evaluation of #if Expression
+
- 4.5. Character Constant Evaluation in #if Expression
+
- 4.6. #if sizeof (type)
+
- 4.7. How to Handle White-Space Sequence
+
- 4.8. Default Specifications for mcpp Executables
+
+
+ - 5. Diagnostic Messages
+
- 5.1. Diagnostic Messages Format
+
- 5.2. Translation Limits
+
- 5.3. Fatal Errors
+
- 5.3.1. mcpp's Own Bugs
+
- 5.3.2. Physical Errors
+
- 5.3.3. Translation Limits and Internal Buffer Errors
+
- 5.3.4. #pragma MCPP preprocessed Related Errors
+- 5.4. Errors
+
- 5.4.1. Character and Token Related Errors
+
- 5.4.2. Unterminated Source File Related Errors
+
- 5.4.3. Ill-Balanced Preprocessing Group Related Errors
+
- 5.4.4. Simple Syntax Errors on Directive Lines
+
- 5.4.5. Syntax Errors in #if Expressions
+
- 5.4.6. #if Expression Evaluation Errors
+
- 5.4.7. #define Related Errors
+
- 5.4.8. #undef Related Errors
+
- 5.4.9. Macro Expansion Errors
+
- 5.4.10. #error and #assert
+
- 5.4.11. Failure of #include
+
- 5.4.12. Other Errors
+- 5.5. Warnings (Class 1)
+
- 5.5.1. Character, Token and Comment Related Warnings
+
- 5.5.2. Unterminated Source File Related Warnings
+
- 5.5.3. Directive Line Related Warnings
+
- 5.5.4. #if Expression Related Warnings
+
- 5.5.5. Macro Expansion Related Warnings
+
- 5.5.6. Line Number Related Warnings
+
- 5.5.7. #pragma MCPP warning, #warning
+- 5.6. Warnings (Class 2)
+
- 5.7. Warnings (Class 4)
+
- 5.8. Warnings (Class 8)
+
- 5.9. Warnings (Class 16)
+
- 5.10. Diagnostic Messages Index
+
+
+ - 6. Reporting on Bugs and Others
+
+
+
+
+mcpp is a C preprocessor developed by kmatsui (Kiyoshi Matsui) based on DECUS cpp written by Martin Minow, and then rewritten entirely. mcpp means Matsui cpp. This software is supplied as source codes, and to use mcpp in any compiler systems, a small amount of modifications to adapt to the compiler system are required before it can be compiled into an executable. *1
+This document describes the specification for mcpp executables that has been already ported to certain compiler systems. For those who want to know more about mcpp or want to port it to other compiler systems, refer to mcpp source and its document mcpp-porting.html.
+All these sources and related documents are provided as an open-source-software.
+Before going into detail, some of the mcpp features are introduced here.
+Note:
+*1 mcpp V.2.6.3 onward provides some binary packages too, at the following site.
+
+http://mcpp.sourceforge.net/
+
+
+
+
+mcpp is a portable preprocessor, supporting various operating systems, including Linux, FreeBSD and Windows. Its source has a wide portability, and can be compiled by any compilers which support Standard C or C++ (ANSI/ISO C or C++). The library functions used are only the classic ones.
+To port mcpp to each compiler system, in many cases, one only needs to change some macro definitions in the header files and simply compile it. In the worst case, adding several dozen of lines into a source file would be enough.
+To process multi-byte characters (Kanji), it supports Japanese EUC-JP, shift-JIS and ISO2022-JP, Chinese GB-2312, Taiwanese Big-5 and Korean KSC-5601 (KSX 1001), as well as UTF-8. For shift-JIS, ISO2022-JP or Big-5, mcpp can complement the compiler-proper if it does not recognize them.
+
+
+
+mcpp has various behavioral modes. Other than Standard-conforming mode, there are K&R 1st mode, "Reiser" cpp mode and what I call post-Standard mode. mcpp has also an execution option for C++ preprocessor.
+Different from many existing preprocessors, Standard mode of mcpp has the highest conformance to Standards: all of C90, C99 and C++98. It has been developed aiming to become the reference model of the Standard C preprocessor. Those versions of the Standard can be specified by an execution option. *1
+In addition, it provides several useful enhancements: '#pragma MCPP debug', which traces the process of macro expansion or #if expression evaluation, and the header file "pre-preprocessing" facility.
+mcpp also provides several useful execution options, such as warning level or include directory specification options.
+Even if there are any mistakes in the source, mcpp deals suitably with accurate plain diagnostic messages without running out of control or displaying misguiding error messages. It also displays warnings for portability problems. The detailed documents are also attached.
+In spite of its high quality, mcpp's code size and memory usage is relatively small.
+A disadvantage of mcpp, if any, is slower processing speed. It takes two or three times time of GCC 3.*, 4.* / cc1, but seeing that its processing speed is almost the same as that of Borland C 5.5/cpp32 and that it runs a little bit faster when the header file pre-preprocessing facility is used, it cannot be described as particularly slow. mcpp puts an emphasis on standard conformance, source portability and operability in a small memory space, making this level of processing speed inevitable.
+Validation Suite for Standard C Preprocessing, which is used to test the extent to which a preprocessor conforms to Standard C, its documentation cpp-test.html, which contains results of applying Validation Suite to various preprocessors, are also released with mcpp. When looking through this file, you will notice that so-called Standard-conforming preprocessors have so many conformance-related problems.
+During the course of developing mcpp V.2.3, it was selected as one of the "Exploratory Software Projects for 2002" by Information-technology Promotion Agency (IPA), Japan, along with its Validation Suite. From July 2002 to February 2003, the project, financed by IPA, proceeded under advice of Yutaka Niibe project manager. I asked "HighWell, Inc." Limited Company, Tokyo, for translation of all the documents. For technical details, I revised and corrected the translated documents.
+mcpp was continuously adopted to one of the "Exploratory Software Projects" in 2003 by Hiroshi Ichiji project manager. The update of mcpp proceeded into the next version, V.2.4. *2
+After the project, I am still going on updating mcpp and Validation Suite.
+Note:
+*1 ISO/IEC 9899:1990 (JIS X 3010-1993) had been used as C Standard, but in 1999, ISO/IEC 9899:1999 was adopted as a new Standard. This document calls the former C90 and latter C99. The former is generally called ANSI C or C89 because it migrated from ANSI X3.159-1989. ISO/IEC 9899:1990 + Amendment 1995 is sometimes called C95. C++ Standards are ISO/IEC 14882:1998 and its corrigendum version ISO/IEC 14882:2003. This document calls both of them C++98.
+*2 The outline of the "Exploratory Software Project" can be seen at the following site (Japanese only).
+
+ http://www.ipa.go.jp/jinzai/esp/
+
+mcpp from V.2.3 through V.2.5 had been located at:
+
+ http://www.m17n.org/mcpp/
+
+In April 2006, mcpp project moved to:
+
+ http://mcpp.sourceforge.net/
+
+The old version of mcpp, cpp V.2.2 and Validation Suite V.1.2 are located in the following Vector's web site. They are in the directory called dos/prog/c, but they are not for MS-DOS exclusively. Sources are for UNIX, WIN32, MS-DOS. The documents are Japanese only.
+
+http://www.vector.co.jp/soft/dos/prog/se081188.html
+http://www.vector.co.jp/soft/dos/prog/se081189.html
+http://www.vector.co.jp/soft/dos/prog/se081186.html
+
+The text files in these archive files available at Vector use [CR]+[LF] as a <newline> and encode Kanji in shift-JIS for DOS/Windows. On the other hand, those from V.2.3 through V.2.5 available at SourceForge use [LF] as a <newline> and encode Kanji in EUC-JP for UNIX. From V.2.6 on two types of archive, .tar.gz file with [LF]/EUC-JP and .zip file with [CR]+[LF]/shift-JIS, are provided.
+
+
+
+Though this manual was text-file in the older versions, it has changed to html-file at V.2.6.2.
+This manual uses the following typographical conventions:
+
+- source:
+Navy colored constant-width font is used for code snippets and command line inputs.
+ - __STDC__:
+Maroon colored constant-width font is used for Standard predefined macros or any other macros found in some codes.
+ - STD:
+Italic font is used for the macros defined in mcpp source file named system.H. This manual uses these names to denote various mcpp settings. Note that these macros are only used in compilation of mcpp, and that the mcpp executable does not have such macros.
+
+
+
+
+
+
+There are two types of build (or compiling configuration) for mcpp executable. *1, *2
+
+- Compiler-independent-build: the preprocessor which behaves on its own not depending on compiler system. The invocation options of compiler-independent-build are the same across the compilers with which mcpp is compiled. Although it can preprocess source files, it cannot behave as an integrated part of a compiler system.
+ - Compiler-specific-build: the preprocessor to replace the resident preprocessor of certain compiler system, if possible. Each compiler-specific-build has some different specifications for compatibility with the compiler system. It has the options common with the compiler-independent-build, except a few options different from the commons to avoid conflict with the compiler system.
+
+Each mcpp executable has following 5 behavioral modes regardless of the building types.
+
+- STD: Standards (C90, C99, C++98) conforming mode. This is the default.
+ - COMPAT: A variation of STD mode, which expands recursive macro more than the Standards' specification.
+ - POSTSTD: Special "post-Standard" mode created by the author, based on the Standards and simplified removing all the Standards irregular specifications.
+ - KR: K&R 1st specification mode.
+ - OLDPREP: "Reiser" model cpp mode (old-preprocessor mode).
+
+The mode of mcpp is specified by the run-time options as follows:
+
+- -@std
+The STD mode (default).
+ - -@compat
+The COMPAT mode.
+ - -@poststd, -@post
+The POSTSTD mode.
+ - -@kr
+The KR mode.
+ - -@oldprep, -@old
+The OLDPREP mode.
+
+In this document, I group OLDPREP and KR into pre-Standard modes, and group STD, COMPAT and POSTSTD into Standard modes. Since COMPAT mode is almost the same with STD mode, STD includes COMPAT unless otherwise mentioned. *3
+There are differences in the macro expansion methods between Standard and pre-Standard modes. Roughly speaking, this difference is the difference between C90 and pre-C90. The biggest difference is the expansion of the function-like macros (macros with arguments). For the arguments with macros, while in Standard mode, mcpp substitutes the parameter within the replacement list of the original macro after completely expanding the arguments, in pre-Standard, mcpp substitutes the parameter without expanding, then expands the argument at rescan time.
+Also, in Standard mode, a macro is not expanded recursively in principle, even if the macro definition is recursive directly or indirectly. If there is a recursive macro definition in pre-Standard mode, it causes infinite recursion and becomes an error at expansion time.
+Handling of \ at line end is also different by mode. In Standard mode, after processing the trigraph, the sequence of <backslash><newline> gets deleted before tokenization, but in pre-Standard mode, these only get deleted when they are within the string literals or in a #define line.
+There is a subtle difference in tokenization (token parsing, decomposition to tokens). In Standard mode, it tokenizes on "token based processing" principle. To put it concretely, in Standard mode, spaces will be inserted surrounding the expanded macro to prevent the unexpected merging with its adjacent tokens. In pre-Standard mode, traditional, convenient and tacit tokenization and the macro expansion methods of "character based text replacement" are left a trace. About these, please see cpp-test.html#2.
+In Standard mode, it handles the numeric token, called preprocessing number, according to the Standard specification. In pre-Standard, the numeric tokens are the same as integer constant tokens or floating point tokens. The suffix 'U', 'u', 'LL' and 'll' of the integer constant and the suffixes 'F', 'f', 'L' and 'l' of floating point are not recognized as a part of the tokens in pre-Standard.
+The string literals and character constants of wide characters are recognized as single tokens only in Standard mode.
+Digraph, #error, #pragma, and _Pragma() operator are available only in Standard mode. Also, -S <n> option (strict-ansi specs) and -+ option (the one run as C++ preprocessor) are used only in Standard mode. Pre-defined macros __STDC__, __STDC_VERSION__ are defined in Standard mode, and they don't get defined in pre-Standard.
+#if defined, #elif cannot be used in pre-Standard mode. Macros cannot be used within argument of #include or #line in pre-Standard. Predefined macros, __FILE__, __LINE__, __DATE__, __TIME__ are not defined at pre-Standard.
+On the other hand, #assert, #asm (#endasm), #put_defines and #debug are available in pre-Standard mode only.
+#if expression is evaluated in long / unsigned long or long long / unsigned long long at Standard mode, and in (signed) long only at pre-Standard. sizeof (type) in #if expression can be used only in pre-Standard.
+Trigraphs and UCN (universal character name) are available only in STD mode.
+The output of diagnostic messages is also slightly different between the modes. Please see chapter 5 for details.
+Any other items, which do not have any distinct rules between K&R 1st and the Standards, follow the C90 rules in pre-Standard mode.
+The difference of OLDPREP mode from KR mode and the difference of POSTSTD and COMPAT modes from STD mode are as follows:
+
+- OLDPREP
+
+- Convert comment to 0 space instead of 1 space. Usually this conversion is done in the output at the end. In macro definition, however, the conversion is done immediately after the definition.
+ - When there are string literals or character constants in the replacement list of the macro definition, and if any of the parameter names match to any part of these, that part will be substituted with the argument corresponding to the parameter when calling the macro. That is to say, when the content of the string literal or character constant is searched as token sequence, stripping the enclosing quotes, if a parameter name is found, that will be substituted.
+ - You can write anything you like in the lines of #else, #endif. (One usually writes MACRO of corresponding #if MACRO or #ifdef MACRO.)
+ - It stops "unterminated string literal" and "unterminated character constant" errors. If there is no closure of the literal " or ', it assumes the close at line end.
+ - It treats '# 123' line as '#line 123'.
+
+
+ - COMPAT
+Expand recursive macro more than the Standard's specification. On expanding recursive macro, set the range of non-re-replacing of the same name narrower than the Standard.
+
+Refer to cpp-test.html#3.4.26 about the specifications of recursive macro expansion. See test-t/recurs.t for a sample of recursive macro. *4
+
+ - POSTSTD
+This mode differs from STD mode in the following points:
+
+
+- Does not recognize trigraphs. Digraphs are converted at translation phase 1, that is, the beginning of preprocessing. Does not deal with digraph as a token.
+ - Simplified tokenization according to complete token-base rule. When there is no white space, as a token separator between preprocessing tokens in the source code, insert a space automatically. (However, this does not get inserted between macro name and the following "(" within macro definition). Therefore, even for stringizing by # operator, it gets stringized after a space is inserted between all the preprocessing tokens. Also, at the re-definition of macros, it does not matter whether there is a token separator or not.
+ - At the re-definition of function-like macros, the difference of the parameter name is not relevant.
+ - Character constants cannot be used in #if expressions (it will cause an error).
+ - It removed irregular "function-unlike" rules for function-like macro expansion. Hence, rescanning only targets to the replacement list of the macro, and not the sequence after that.
+ - Normally, the header name with the format of #include <stdio.h> is accepted, but it gets a warning. (by class 2 warning option.) If the header name with the format of <stdio.h> is used in a macro, it can get an error at a particular instance. It recommends to use the format of #include "stdio.h".
+ - The rule, a space is required between macro name and replacement list in macro definition, is added in C99, but this rule is not complied with. (A space is inserted automatically at tokenization.)
+ - UCN (universal-character-name) is not recognized. Multi-byte characters in identifier are not recognized.
+ - In C++, eleven identifier-like operators are not dealt as operators.
+
+
+Moreover, there is a mode called lang-asm.
+That is a mode to process anomalous sources which are assembler sources and nevertheless have comments, directives and macros of C embedded.
+While POST_STD cannot become this mode, STD, KR and OLD get to this mode when specified by an option.
+See 2.5 for its specifications.
+For the above reasons, there are some different specifications in mcpp executables. So, please read this manual carefully. This chapter describes first the common options, next the behavioral-mode-dependent options, then the the options common to most compiler systems, finally the compiler-dependent options for each compiler-specific-build.
+Note:
+*1 There is another one named subroutine-build which is called as a subroutine from some other main program. The behavioral specification of subroutine-build is, however, the same with either of compiler-specific-build or compiler-independent-build according to its compile time setting. Hence, this manual does not mention subroutine-build particularly.
+As for subroutine-build, refer to mcpp-porting.html#3.12.
+*2 The binary packages provided at the SourceForge site are of compiler-independent-builds.
+*3 mcpp had two separate executables for Standard mode and pre-Standard mode; they were integrated into one at V.2.6.
+*4 This option is for compatibility with GCC, Visual C++ and other major implementations. 'compat' means "compatible mode".
+
+
+
+The <arg> and [arg] shown below indicate required and optional arguments respectively. Note that the <, >, [, or ] character itself must not be entered.
+mcpp invocation takes a form of:
+
+mcpp [-<opts> [-<opts>]] [in_file] [out_file] [-<opts> [-<opts>]]
+
+Note that you have to replace the above "mcpp" with other name, depending on how mcpp is installed.
+When out_file (an output path) is omitted, stdout is used unless the -o option is specified. When in_file (an input path) is omitted, stdin is used. A diagnostic message is output to stderr unless the -Q option is specified.
+If any of these files cannot be opened, preprocessing is terminated, issuing an error message.
+For an option with argument, white-space characters may or may not be inserted between the option character and an argument. In other words, both of "-I<arg>" and "-I <arg>" are acceptable. For options without argument, both of "-Qi" and "-Q -i" are valid.
+For an option with an argument, missing a required argument causes an error except for the -M option,
+If -D, -U, -I, or -W option is specified multiple times, each of them is valid. For -S, -V, or -+ option, only the first one is valid. For -2, or -3 option, its specification switches each time an option is specified. For other options, the last one is valid.
+The option letters are case sensitive.
+The switch character is '-', not '/', even under Windows.
+When invalid options are specified, a usage statement is displayed. To check valid options, enter a command, such as "mcpp -?". In addition to the usage message, there are several error messages, but they are self-explanatory. I will omit their explanations.
+
+
+
+This section covers common options across mcpp modes or compiler systems.
+
+- -C
+Output also comments in source code. This option is useful for debugging. Note that a comment is moved ahead of a logical source line when output. This is because a comment is processed before macro expansion or directive processing, and a comment may appear during a macro invocation.
+
+ - -D <macro>[=[<value>]]
+ - -D <macro(a,b)>[=[<value>]]
+Define a macro named "macro". This option can be used to change the definitions of predefined macros other than __STDC__, __STDC_VERSION__, __FILE__, __LINE__, __DATE__, __TIME__ and __cplusplus. (__STDC_HOSTED__, C99's predefined macro, is exceptionally redefined by this option, because some compiler systems, like GCC V.3, use the -D option to define __STDC_HOSTED__.) To specify a value, use "=<value>". If "=<value>" is omitted, 1 is assumed. (Note that in bcc32, the macro is defined as zero-token by default.) Do not enter white-space characters immediately before "=". If a white-space character is entered immediately after "=", the macro is defined as zero token.
+A macro with arguments can be defined by this option.
+This option can be specified repeatedly.
+
+ - -e <encoding>
+Change a multi-byte character encoding to <encoding>. For <encoding>, refer to 2.8.
+
+ - -I <directory>
+Specify the first directory in the include directory search path order with <directory>. For a search path, refer to 4.2. If a directory name contains spaces, it has to be enclosed with " and ".
+
+ - -I 1, -I 2, -I 3
+Specify a directory from which mcpp begins searching when it encounters a #include "header" directive (i.e. not <header> format). -I1, -I2 and -I3 indicate the current directory, the source file (i.e. includer) directory, and the both respectively. For details, see 4.2.
+
+ - -j
+On outputting a diagnostic message, mcpp displays only one line of diagnostic without additional information, such as source lines. (By default, one line of diagnostic message is followed by a source code line having a problem. If the source code line in question is found in a #included file, all the #including file names and including line numbers are also displayed in sequence. For a diagnostic on macro, mcpp displays also its definition information).
+When Validation Suite is used in the GCC testsuite, this option has to be specified to output a diagnostic message in the same format as GCC.
+
+The -M* options are to output source file dependency lines for makefile. When there are several source files and the -M* option is specified for each of these source files to process and merge the outputs into a file, dependency description lines are aligned. These options are similar to those of GCC, but there are several differences. *1
+
+Note:
+*1 mcpp differs from GCC in that:
+
+- mcpp does not provide the -MG option because its option specification is too complicated. (Therefore, I will omit its explanation.) The -M option can substitute for the -MG option because when include files cannot be found using the -M option, mcpp fails but outputs dependency description lines.
+ - mcpp, other than GCC-specific-build, excludes a wider range of header files when using the -MM and -MMD options.
+
+
+
+
+mcpp has several behavioral modes. For their specifications refer to sec 2.1.
+This manual shows a list of various mcpp behaviors by mode, which may not be readable. Please be patient. In this manual, all the uppercased names that do not begin with "__" and displayed in italics, such as DIGRAPHS_INIT, TRUE, FALSE, etc, are macros defined in system.H. These macros are only used for compiling mcpp itself and a mcpp executable generated does not predefine these macros. You must understand this point clearly.
+The following options are available in Standard mode:
+
+- -+
+Behave as C++ preprocessor. mcpp predefines the __cplusplus macro (its value is defined in system.H and defaults to 1), interprets the text from // to the end of a logical line as a comment and recognizes "::", ".*", "->*" as a single token. It evaluates "true" and "false" tokens in a #if expression to 1 and 0, respectively. If __STDC__ and __STDC_VERSION__ are defined, they are undefined. (For GCC-specific-mcpp, __STDC__ is not undefined for compatibility with GCC.) The predefined macros that do not begin with "_" are also undefined. However, extended characters are not converted to UCN. *1, *2
+
+ - -2
+Reverse initial settings for the digraphs processing. With DIGRAPHS_INIT == FALSE, mcpp recognizes digraphs. Otherwise, it doesn't.
+
+ - -h <n>
+Define the value of __STDC_HOSTED__ macro with <n>.
+
+ - -S <n>
+Change the value of __STDC__ to <n> in C. In C++, this option is ignored. The range of <n> has to be 0-9. With <n> set to 1 or higher, the predefined macros that do not begin with "_", such as unix, linux, are disabled. S indicates __STDC__. If this option is omitted, __STDC__ is set to a default value (i.e. 1).
+For a GCC-specific-build, -pedantic, -pedantic-errors, or -lang-c89 is equivalent to -S1, so the next -S is ignored.
+This option does not disable the non-conforming predefined macros such as unix, linux, i386 for compatibility with GCC.
+These macros are disabled only by -ansi or -std=iso* options.
+
+ - -V <value>
+Change the values of the predefined macros __STDC_VERSION__ for C and __cplusplus for C++ to <value>. <value> is of a long type. (In C95, C99, and C++ Standard, this value is set to 199409L, 199901L and 199711L, respectively.) With __STDC__ set to 0, __STDC_VERSION__ is always set to 0L, overriding the -V option.
+
+If this option is omitted for C, __STDC_VERSION__ is set to the value of STDC_VERSION in system.H. (For GCC V.2.7 - V.2.9, 199409L. For others, 0L.) If specifying -V199901L results in __STDC_VERSION__ >= 199901L, mcpp conforms to the following C99 specifications (See 3.7.):
+
+
+- Treats the text from // to the end of a line as a comment. *3
+ - Allows the sequence of p+, P+, p-, and P-, as well as e+, E+, e-, and E-, in the preprocessing-number. This is to represent a bit pattern of a floating-point number in Hex, like 0x1.FFFFFEp+128.
+ - Enables the _Pragma operator (A _Pragma( "foo bar") has the same effect as specifying a #pragma foo bar.)
+ - mcpp compiled with the EXPAND_PRAGMA macro set to TRUE will macro-expand an argument on a #pragma line that does not begin with STDC or MCPP. (By default, EXPAND_PRAGMA is set to FALSE in other than Visual C-specific-build and Borland C-specific-build, so macro expansion does not occur.)
+ - Allows an escape sequence of Universal-Character-Name (UCN) in identifiers, character constants, string literals and pp-numbers. (This is only enabled in STD mode.)
+
+Note that although C99 provides for variable argument macros, mcpp allows them in the C90 and C++ modes. *4
+
+In C++ also, when specifying -V199901L results in __cplusplus >= 199901L, mcpp will enter the C99 compatibility mode, providing the above 2-4 enhancements. (1 is enabled unconditionally and 5 is almost the same.) These are mcpp's own enhancements that do not conform to the C++ Standard.
+
+The -D option cannot be used with __STDC__, __STDC_VERSION__, and __cplusplus. This is to distinguish system-defined macros from user-defined ones.
+
+The following option is available for STD mode:
+
+Note:
+*1 C++'s __STDC__ is not desirable and causes many problems. GCC document says that __STDC__ needs to be predefined in C++ because many header files expect __STDC__ to be defined. The header files should be blamed for this. For common parts among C90, C99 and C++, "#if __STDC__ || __cplusplus" should be used.
+*2 Different from C99, the C++ Standard makes much of UCN. So did C 1997/11 draft. Half-hearted implementation is not permitted. However, implementing Unicode in earnest is too much burden for preprocessor.
+*3 In C90 mcpp treats // as a comment but issues a warning.
+*4 This is for compatibility with GCC.
+*5 If you install GCC-specific-mcpp, cc1 (cc1plus) is set to be handed from mcpp preprocessed file with -fpreprocessed option.
+Though this option means that the input is already preprocessed,
+cc1 still processes comment.
+Therefore, you can safely pass output of -K to cc1 with -fpreprocessed.
+Furthermore, if you add -save-temps option to gcc (g++) command, preprocessed output is left as *.i (*.ii) file, and you can read it by some refactoring tool.
+*6 Comment insertion by -K option causes column shifts in sources, and this makes *.S file of GCC, which is not C/C++ source and compiled with -x assembler-with-cpp option, unable to be assembled.
+Also comments kept by -C option are sometimes confusing with that inserted by -K option.
+Therefore these options cannot be used at the same time.
+*7 This option fails to keep column position on some particularly complex cases.
+When line splicing by a <backslash><newline> and line splicing by a line-crossing comment are intermingled on one output line, or a comment crosses over 256 lines, column position will be lost.
+Note that each '\v' and '\f' is converted to a space with or without this option.
+
+
+
+The following 2 options can be used on UNIX-like systems, for either of compiler-independent-build and GCC-specific-build.
+On GCC-specific-build, however, these will get an error if the GCC does not support them.
+
+- -m32
+Predefine macros for 32bit mode.
+If the CPU is x86_64 or ppc64, predefined macros for 64bit mode are used by default.
+With this option, however, those for i386 or ppc respectively are used.
+ - -m64
+Predefine macros for 64bit mode.
+If the CPU is i386 or ppc, predefined macros for 32bit mode are used by default.
+With this option, however, those for x86_64 or ppc64 respectively are used.
+
+
+Since GCC has so many options that GCC-specific-build of mcpp has some different options from the other builds in order to avoid conflicts with GCC. Note that the options in compiler-independent-build are all the same even if compiled by GCC. The options common to the builds other than GCC-specific are as follows.
+
+- -a
+Accept the following notations used in some assembler sources without causing an error.
+
+-
+
+#APP
+
+If the token that follows the line top # does not agree with any of C directives as above, mcpp outputs this line as it is without causing an error.
+ -
+
+# + any comment.
+
+If the token that follows the line top # is not even an identifier nor pp-number, mcpp discards the line with a warning, without causing an error.
+ -
+
+"A very very
+long long
+string literal"
+
+The above old-fashioned string literals are concatenated into "A very very\nlong long\nstring literal".
+ - Even if token concatenation using a ## operator generates an invalid pp-token, it is not regarded as error.
+ - mcpp does not insert spaces around a macro expansion result, and does not regard an unintended token merging of the macro expansion result with its adjacent token as an error.
+
+These sometimes happen to GNU source code, however, this option for GCC is -x assembler-with-cpp or -lang-asm.
+This option cannot be used in POSTSTD mode.
+This manual calls this mode lang-asm mode.
+This mode is recommended when you use mcpp as a macro processor for some text other than C/C++, for example, as a cpp called from xrdb.
+ - -I-
+Cancel default include directories and enable only ones specified with an environment variable and the -I option. Instead of -I-, GCC-specific-build uses -nostdinc. In GCC, the -I- option provides quite different functionality. See 2.6.
+
+
+
+
+To use mcpp replacing the compiler system's resident preprocessor, install it in the directory where the resident preprocessor is located under an appropriate name. Before copying mcpp, be sure to change the name of resident preprocessor so that it may not be overwritten.
+For settings on Linux, FreeBSD, or CygWIN see 3.9.5.
+For settings in GCC 3.*, 4.*, see also 3.9.7, and 3.9.7.1.
+For MinGW, see 3.9.7.1.
+Possibly the compiler driver cannot pass some options to mcpp in a normal manner. However, GCC provides the -Wp almighty option to allow you to pass any options to the preprocessor. For example, if you specify as follows:
+
+gcc -Wp,-W31,-Q23
+
+The -W31 and -Q23 options are passed to preprocessor. The options you want to pass to preprocessor have to be specified following -Wp with each option delimited by ", ". *1, *2
+For other compiler systems, if their compiler driver source is available, it is recommended that this type of an almighty option should be added to the source. If you modify the compiler driver source code in the way that, for example, when -P<opt> is specified, only -<opt> is passed to preprocessor, it would be very convenient because any options can be passed.
+An alternative way to use all the options of mcpp is to write a makefile in which first preprocess with mcpp, then compile the output file of mcpp as a source file. For this method, refer to sections 2.9 and 2.10.
+The following options are available for some compiler-specific-builds. The compiler-independent-build has not these options, of course.
+
+The following options are available for the LCC-Win32-specific-build.
+
+- -g <n>
+Define the __LCCDEBUGLEVEL macro as <n>.
+ - -O
+Defines the __LCCOPTIMLEVEL macro as 1.
+
+The following options are available for the Visual C-specific-build.
+
+- -arch:SSE, -arch:SSE2
+Define the macro _M_IX86_FP as 1, 2 respectively.
+ - -Fl <file>
+Same as -include <file> for GCC.
+ - -G<n>
+If <n> is one of 3, 4, 5, 6, B, define the macro _M_IX86 as 300, 400, 500, 600, 600, respectively.
+ - -GR
+Define the macro _CPPRTTI to 1.
+ - -GX
+Define the macro _CPPUNWIND to 1.
+ - -GZ
+Define the macro __MSVC_RUNTIME_CHECKS to 1.
+ - -J
+Define the macro _CHAR_UNSIGNED to 1.
+ - -RTC*
+If -RTC1, -RTCc, -RTCs, -RTCu and such option is specified, define the macro __MSVC_RUNTIME_CHECKS to 1.
+ - -Tc, -TC
+Specify that the source is written in C. The result is same with or without this option.
+ - -Tp, -TP
+Same as -+.
+ - -u
+Same as -N.
+ - -Wall
+Same as -W17 (-W1 -W16).
+ - -WL
+Same as -j.
+ - -w
+Same as -W0.
+ - -X
+Same as -I-.
+ - -Za
+Undefine the macro _MSC_EXTENSIONS and prohibit '$' in identifiers.
+ - -Zc:wchar_t
+Define the macros _NATIVE_WCHAR_T_DEFINED and _WCHAR_T_DEFINED to 1.
+ - -Zl
+Define the macro _VC_NODEFAULTLIB to 1.
+
+
+mcpp on Mac OS X accepts the following option, on both of GCC-specific-build and compiler-independent-build.
+
+- -F <framework>
+Put the <framework> directory to top of the framework directories to search.
+The standard framework directories are /System/Library/Frameworks and /Library/Frameworks by default.
+
+mcpp on Mac OS X accepts the following option on GCC-specific-build.
+
+- -arch <arch>
+Change the target architecture of machine as <arch> from the default one.
+This causes changes of some predefined macros.
+<arch> should be i386 or x86_64 on the preprocessor for x86, ppc or ppc64 on the one for ppc.
+(You can specify any of these 4 for gcc command.
+gcc command invokes the preprocessor for x86 on '-arch i386' or '-arch x86_64' options, and the one for ppc on '-arch ppc' or '-arch ppc64' options.)
+
+The following options (until at the end of this 2.6 section) are available for the GCC-specific-build. Note that since __STDC__ is set to 1 for GCC, the result is same with or without the -S1 option.
+The followings are available across the modes.
+
+- -$
+Same as -fno-dollars-in-identifiers.
+ - -b
+Output line number information just like C sources.
+The format used to pass the line number information from a preprocessor to compiler-proper is usually as follows:
+
+#line 123 "filename"
+
+Most compiler systems can use this C source format, but some systems cannot. The default specification of mcpp is such that, in compiler-specific-build for the compiler systems that cannot use the C source format, mcpp outputs the line number information in a format that the compiler-proper can accept it.
+However, with this option specified, even in compiler-specific-build for the compiler systems that do not accept the C source format outputs the line number information in that format. This option is used with '#pragma MCPP preprocess' to pre-preprocess header files.
+ - -dD, -dM
+Output valid macro definitions in the form of #define lines at the end of preprocessing.
+With the -dD option specified, the preprocessing result is output too. Predefined macros are not output.
+With the -dM option specified, the preprocessing result is not output, and predefined macros are output except the Standard predefined ones. *3, *4
+ - -fexceptions
+Define the macro __EXCEPTIONS to 1.
+-fno-exceptions does not define this macro.
+ - -finput-charset=<encoding>
+Same as -e <encoding>. Note that GCC convert the <encoding> to UTF-8 by this option, whereas mcpp does not convert any encoding.
+ - -fno-dollars-in-identifiers
+Prohibit '$' in identifiers. (Allow it by default.)
+ - -fPIC, -fpic, -fPIE, -fpie
+Any of these options defines both of the macro __PIC__, __pic__ to 1.
+ - -fstack-protector
+Define the macro __SSP__ to 1.
+ - -fstack-protector-all
+Define the macro __SSP_ALL__ to 2.
+ - -fworking-directory
+Emit a special line as the second line of preprocessor's output to convey the current working directory.
+ - -I-
+Switch the specification of the -I <directory> before and after this option; directories specified with the -I options before -I- are used to search for header files only in the form of #include "header.h"; the directories specified with -I after -I-, if any, are used to search for all #include directives. In addition, during the former search, includer's directories are not used.
+ - -include <file>
+include the <file> before processing the main source file. This is equivalent to writing #include <file> at the beginning of the main source file.
+ - -iquote <dir>
+Add <dir> to the include path for #include "header.h" form.
+ - -isysroot=<dir>, -isysroot <dir>, --sysroot=<dir>, --sysroot <dir>
+Use <dir> as the logical root directory for system headers, that is, prefix <dir> to the path-list of system header directory.
+For example, if the default include directory is /usr/include and <dir> is /Developer/SDKs/MacOSX10.4u.sdk, then alter the include directory to /Developer/SDKs/MacOSX10.4u.sdk/usr/include.
+ - -isystem <dir>
+Add <dir> to the include path immediately before system-specific directories and immediately after site-specific directories.
+ - -lang-c, -x c
+Perform C preprocessing. The same as not specifying this option at all.
+ - -mmmx
+Predefine a macro __MMX__ to 1.
+-mno-mmx undefines __MMX__.
+ - -nostdinc
+Same as -I- for other compiler systems.
+ - -undef
+Same as -N.
+ - -O?
+If ? is a non-0 digit, define a macro __OPTIMIZE__ to 1.
+ - -Wcomment, -Wcomments
+Same as -W1. The result is same with or without this option.
+ - -Wtrigraphs
+Same as -W16.
+ - -Wall
+Same as -W17. (With -Wall, mcpp does not issue class 2 and 4 warnings because these warnings are issued frequently and annoying for Linux or some other system's standard header files. Class 8 warnings are generally surplus and bothering, but are helpful to confirm portability and etc. To use this option, be sure to specify gcc -Wp,-W31.)
+ - -w
+Same as -W0.
+
+The following options are available for Standard mode.
+
+- -ansi
+Define macro __STRICT_ANSI__ as 1.
+Disable non-conforming predefined macros such as linux, i386.
+Do not remove comma preceding absent variable argument of GCC-spec variadic. *5
+ - -digraphs
+Recognize digraphs. Digraphs specification is also reversed by -2.
+ - -lang-c89, -std=gnu89
+Same as -S1. Not only C90 but also C95 specifications are used. The result is same with or without this option.
+ - -std=c89, -std=c90
+Almost same as -S1, except these imply -ansi.
+ - -lang-c99, -lang-c9x, -std=gnu99, -std=gnu9x
+Same as -V199901L.
+ - -std=c99, -std=c9x
+Same as -V199901L and also imply -ansi.
+ - -lang-c++, -x c++
+Perform C++ preprocessing. Same as -+.
+ - -std=c++98
+Same as -+ and also implies -ansi.
+ - -pedantic, -pedantic-errors
+Same as -W7 (i.e. -W1 -W2 -W4).
+ - -std=iso<n>:<ym>
+Specify a version of C Standard. To specify C, <n> is 9899 and C++, 14882. If <n> is 9899, <ym> is any of 1990, 199409, 1999 and 199901. If <n> is 14882, <ym> is 199711. If you enter other value than these in <ym>, __STDC_VERSION__ or __cplusplus is set to that value. In this case, <ym> must be specified in six digits, like 200503.
+These options imply -ansi.
+On the other hand, -std=gnu* do not imply -ansi, also -pedantic does not imply -ansi.
+
+For STD mode, following options are available. (These cannot be used in POSTSTD mode.)
+
+- -lang-asm, -x assembler-with-cpp
+Same as -a for other compiler systems.
+Specify lang-asm mode.
+In GCC-specific-build, a macro __ASSEMBLER__ is defined to 1, and '$' in identifiers are prohibited.
+When the main source file is named *.S, lang-asm mode is implicitly specified without this option.
+ - -trigraphs
+Recognize trigraphs. Trigraphs specification is also reversed by -3.
+
+The following option is available for pre-Standard mode of GCC-specific-build.
+
+- -traditional, -traditional-cpp
+Same as -@old.
+
+The next option is available on CygWIN GCC-specific-build.
+
+- -mno-cygwin
+Alter the include directory from /usr/include to /usr/include/mingw, and alter the predefined macros from the ones for cygwin1.dll to the ones for msvcrt.dll.
+
+mcpp neither makes the following options an error nor does anything about them. (It sometime issues a warning.)
+
+- -A <predicate(answer)>
+mcpp ignores this option. In GCC, this option is equivalent to writing #assert <predicate (answer)> in the source code. Standard C, does not permit extension directives other than #pragma. Fortunately, so far, gcc, by default, passes an equivalent macro with the -D option, so there are no actual problems unless a source program uses #assert, which is a rare case.
+
+ - -g <n>
+ - -idirafter <dir>
+ - -iprefix <dir>, -iwithprefix <dir>, -iwithprefixbefore <dir>
+ - -noprecomp
+ - -remap
+
+In GCC V.3.3 or later, preprocessor has been absorbed into compiler, and independent preprocessor does not exist. Moreover, gcc often passes to preprocessor the options not for preprocessor, even if it is invoked with -no-integrated-cpp option. GCC-specific-build of mcpp for V.3.3 or later ignores the following options, if it cannot recognize them, as that kind of false options.
+
+- -c
+ - -E
+ - -f*
+ - -m*
+ - -quiet
+ - -W*
+
+Note:
+*1 -Wa and -Wl are almighty options for assembler and linker, respectively. The documentation on UNIX/System V/cc describes these options. Probably, GCC provides the -W<x> option for compatibility.
+*2 In GCC V.3, cpp was absorbed into cc1 (cc1plus). Therefore, the options specified with -Wp are normally passed to cc1 (cc1plus). To have cpp (cpp0), not ccl, preprocess, the -no-integrated-cpp option must be specified on gcc invocation.
+*3 GCC V.3.3 or later predefines several dozen of macros. -dD option does not regard these macros as predefined and output them.
+*4 The output of -dM option is similar to that of '#pragma MCPP put_defines' ('#put_defines') with the following differences:
+
+- 'put_defines' outputs also Standard predefined macros as comments.
+ - 'put_defines' outputs also the file name and the line number of the macro definition as a comment, arranging to readable format. On the other hand, -d* options output in the same simple format with GCC, because some makefiles expect that format.
+
+*5 Refer 3.9.6.3.
+
+
+
+In compiler-independent-build of mcpp, the include directories are not set up other than /usr/include and /usr/local/include in UNIX systems. Other directories, if required, must be specified using environment variables or runtime options. The environment variable in compiler-independent-build is INCLUDE for C and CPLUS_INCLUDE for C++. Searching the file starts from the includer's source directory by default. (refer to 4.2 for the search rule.) Besides, in Linux there is a confusion of include directories, hence special setup is necessary to cope with this problem.
+Refer to 3.9.9 for the problem.
+For the default include directories on GCC-specific-build, refer to noconfig/*.dif files, and for search rule and environment variable name, refer to 4.2.
+For the environment variable LC_ALL, LC_CTYPE, LANG, refer to 2.8.
+
+
+
+mcpp can process various multi-byte character encodings as follows.
+
+
+ EUC-JP | Japanese extended UNIX code (UJIS) |
+ shift-JIS | Japanese MS-Kanji |
+ GB-2312 | EUC-like Chinese encoding (Simplified Chinese) |
+ Big-Five | Taiwanese encoding (Traditional Chinese) |
+ KSC-5601 | EUC-like Korean encoding (KSX 1001) |
+ ISO-2022-JP1 | International standard Japanese |
+ UTF-8 | A kind of Unicode encoding |
+
+
+The encoding used during execution can be specified as follows (Priority is given in this order):
+
+- The encoding specified in '#pragma __setlocale( "<encoding>")' in source code. (For Visual C-specific-build, '#pragma setlocale( "<encoding>")'.) This directive allows you to specify several encodings in one source file.
+ - The encoding specified with -e <encoding> or -finput-charset=<encoding> as run-time option.
+ - The encoding specified with the LC_ALL, LC_CTYPE and LANG environment variables. Priority is given in this order.
+ - The default encoding specified when mcpp is compiled.
+
+How to specify a <encoding> is basically same across #pragma __setlocale, -e option, and the environment variables; in the table below, the encoding on the left-side hand is specified by the <encoding> on right-hand side; <encoding> is not case sensitive; '-' and '_' are ignored. Moreover, if it has '.', the character sequence to the '.' is ignored. Therefore, EUC_JP, EUC-JP, EUCJP, euc-jp, eucjp and ja_JP.eucJP are regarded as same. '*' represents any character sequence of zero or more bytes. (iso8859-1, iso8859-2 are equivalent to iso8859*.).
+
+
+ EUC-JP | eucjp, euc, ujis |
+ shift-JIS | sjis, shiftjis, mskanji |
+ GB-2312 | gb2312, cngb, euccn |
+ BIG-FIVE | bigfive, big5, cnbig5, euctw |
+ KSC-5601 | ksc5601, ksx1001, wansung, euckr |
+ IS0-2022-JP1 | iso2022jp, iso2022jp1, jis |
+ UTF-8 | utf8, utf |
+ Not specified | c, en*, latin*, iso8859* |
+
+
+If any of the following encodings is specified, mcpp is no longer able to recognize multi-byte characters: C, en* (english), latin* and iso8859*. When a non-ASCII ISO-8859 Latin-<n> single-byte character set is used, one of these encodings must be specified. When an empty name is used (#pragma __setlocale( "")), the encoding is restored to the default.
+Only in the Visual C-specific-build, the following encoding name can be specified with '#pragma setlocale'. This is for compatibility with Visual C++. It is recommended you should use these names because the Visual C++ compiler cannot recognize encoding names other than these. ('-' can be omitted for mcpp, but not for the Visual C++ compiler-proper.)
+
+
+ shift-JIS | japanese, jpn |
+ GB-2312 | chinese-simplified, chs |
+ BIG-FIVE | chinese-traditional, cht |
+ KSC-5601 | korean, kor |
+ Not specified | C, english |
+
+
+In Visual C++, the default multi-byte character encoding varies, depending on what language the language parameter and "Region and Language Option" of Windows are set to. However, the #pragma setlocale specification takes precedence over these Windows's settings.
+GCC sometimes fails to handle shift-JIS, ISO2022JP and BIG-FIVE encodings, which contain the byte of 0x5c value.
+So, GCC-specific-build of mcpp complements it. *1
+Note
+*1 If the --enable-c-mbchar option is specified to configure GCC itself, that GCC recognizes an encoding specified by an environmental variable LANG set to one of C-EUCJP, C-SJIS or C-JIS, gcc's info says.
+This way of configuring seems to be available from 1998 onward, but it has been seldom used, and its implementation does not work.
+Although GCC-specific-build of mcpp had supported these environmental variables, such as LANG=C-SJIS, it removed that feature since V.2.7.
+Also GCC info says that, besides LANG, environmental variables LC_ALL and LC_CTYPE can be used to specify an encoding. However, the difference between using LC_ALL or LC_CTYPE or not lies only in their diagnostic messages, in actual.
+
+
+
+Compilers whose preprocessor is integrated into themselves are called one-pass compilers. These includes Visual C, Borland C, and LCC-Win32. Such compilers are becoming more popular because they can achieve a little higher processing speed. However, the time for preprocessing becomes shorter due to better hardware performance. In the first place, there is much point for preprocessing to be a common phase, mostly independent of run-time environment and compiler systems. It is not desirable that one-pass compilers become more popular. There will be more compiler-system-specific specifications.
+Anyhow, it is impossible to replace the preprocessor of a one-pass compiler with mcpp. To use mcpp, a source program is preprocessed with mcpp and then the output is passed to a one-pass compiler. As you see, preprocessing takes place twice. It is useless but inevitable. Using of mcpp still has merits of source checking and can avail functions not available in resident preprocessor.
+To use mcpp with a one-pass compiler, the procedure must be written in makefile. For sample procedures, refer to the makefile re-compilation settings used to compile mcpp itself, such as visualc.mak, borlandc.mak, and lcc_w32.mak.
+Although GCC 3 or 4 compiler now integrates its preprocessing facility into itself, gcc provides an option to use an external preprocessor. Use this option when mcpp is used. (See 3.9.7.)
+
+
+
+It is difficult to use mcpp in Integrated Development Environment (IDE) because IDE's GUI follows compiler-system-specific specifications and internal interfaces are not usually made available to third parties. Furthermore, one-pass compilers make it more difficult to insert a phase to use mcpp.
+This subsection describes how to make mcpp available in Windows / Visual C++ 2003, 2005, 2008 IDE. Use the compiler-specific-build for Borland C and LCC-Win32 on command lines.
+Also, it is described here how to make mcpp available in Mac OS X / Xcode.app / Apple-GCC.
+
+
+mcpp cannot be used in a normal "project" since the internal specifications of Visual C++'s IDE are not made available to third parties and the compiler is a one-pass compiler. However, once a makefile that uses mcpp is created, Visual C++'s IDE can recognize the makefile and you can create a "makefile project" using that file. This allows you to utilize most of the IDE functions, including source editing, search, and source level debugging.
+"Creating a Makefile Project" of a Visual C++ 2003 document, Visual C++ 2005 Express Edition Help and Visual C++ 2008 Express Edition Help describe how to make a makefile project. Perform the following procedure to create a makefile project.
+
+- Login as a user with debugging privilege. *1
+ - Write a makefile that specifies mcpp. (Refer to noconfig/visualc.mak.) *2
+ - Start Visual Studio. *3
+ - Click "New Project" to display the "New Project" window. Select "Makefile Project" and specify "Name" and "Location", and then click "OK".
+ - Then the "Makefile Application Wizard" windows appears. Click "Application settings", and enter appropriate values in the "Build command line", "Output", "Clean commands", and "Rebuild command line" fields.
+Let me explain the appropriate values for these fields by taking an example of making the compiler-independent-build of mcpp itself. (Assuming the name of mcpp executable as mcpp.exe.)
+
+"Build command line": nmake
+"Output": mcpp.exe
+"Clean command": nmake clean
+"Rebuild command line": nmake PREPROCESSED=1
+
+To make the Visual C-specific-build of mcpp, add an option COMPILER=MSC as:
+
+"Build command line": nmake COMPILER=MSC
+"Output": mcpp.exe
+"Clean command": nmake clean
+"Rebuild command line": nmake COMPILER=MSC PREPROCESSED=1
+
+Since a Makefile project does not provide a 'make install' equivalent command, you must write the makefile in such a way that the commands you specify in "Build command line" and "Rebuild command line" also perform installation. *4
+If you do not compile mcpp, "Build command line" and "Rebuild command line" can be the same.
+When completed, click "Finish".
+ - Then the Makefile project appears in "Solution Explorer". Click the "Source Files" folder, choose "Add Existing Solution Item" from the "Project" menu, select all the source files, and then click "OK". Then the source file names appear in Solution Explorer.
+
+You can now use every functions, including Edit, Build, Rebuild and Debugging.
+Note:
+*1 On VC 2003 and 2005, to use the debugging function under Windows XP pro or Windows 2000, a user must belong to a group called "Debugger users". However, Windows XP HE does not provide such a group, so one has to login as an administrator. On VC 2008, such a limitation on users group was lifted.
+*2 In order to perform the source level debugging function, makefile must be written in such a way that cl.exe is called with the -Zi option appended to generate debugging information.
+*3 If you start Visual Studio by selecting "Start" -> "Programs", environment variables, such as for include directories, are not set. In order to have these variables set, you should open the 'Visual Studio command prompt' to start Visual Studio by typing on VC 2003:
+
+devenv <Project File> /useenv
+
+On VC 2005 express edition and VC 2008 express edition:
+
+vcexpress <Project File> /useenv
+
+*4 You must have a writing permission to the directory into which you install mcpp.
+If you try to install into 'bin' or 'lib' directories of the compiler system, the permission should be carefully set by an administrator account.
+It is recommended to make the user account belong to "Power users" or "Authenticated users" group and set "write" and "modify" permissions to the directory for the group.
+Another way of controlling the permission is to install the compiler system into a directory which the user has wrinting permission on, such as a shared directory.
+
+
+You can use Xcode.app, which is an IDE on Mac OS X, with mcpp without problems. *1
+Xcode.app uses gcc (g++) in /Developer/usr/bin rather than /usr/bin for some reason.
+(/Developer is the default install directory for Xcode.)
+To use mcpp in Xcode.app, you must install GCC-specific-build for the gcc (g++) in that directory.
+You should do as follows to install it.
+(${mcpp_dir} means the directory where the source of mcpp is placed.)
+
+export PATH=/Developer/usr/bin:$PATH
+configure ${mcpp_dir}/configure --enable-replace-cpp
+make
+sudo make install
+
+The installation method is the same with that for gcc in /usr/bin, except PATH setting.
+So, please refer to INSTALL for installation to cross-compiler or installation of universal binary.
+After installing mcpp in such a way, you can use Xcode.app without any special setting for mcpp.
+Also the Apple-GCC-specific *.hmap files, which are "header map" files generated by Xcode.app, are read and processed by mcpp.
+However, mcpp does not process precompiled-header.
+It processes '#include "header.pch"' as an ordinary #include.
+Also, mcpp does not preprocess Objective-C and Objective-C++, so *.m and *.mm source files are directly handed on to cc1obj and cc1objplus, bypassing mcpp.
+When you use mcpp-specific options, specify them as follows:
+From screen top menu bar of Xcode.app, select "Project" > "Edit Project Settings".
+The "project editor" window will appear.
+Then, select "Build" pane of it, and edit "Other C flags" item.
+The options should be specified following '-Wp,' and separated by commas, for example:
+
+-Wp,-23,-W3
+
+Note:
+*1 Here we refer to Mac OS X Leopard / Xcode 3.0.
+
+
+
+mcpp has its own enhancements. Each compiler-system-resident preprocessor has its own enhancements, some of which are not available in mcpp. This section covers these enhancements and their compatibility problems.
+Principally, mcpp outputs #pragma lines as they are. This principle is applied to the #pragma lines processed by mcpp itself. This is because the compiler-proper may interpret the same #pragma for itself.
+However, mcpp does not outputs the lines beginning with '#pragma MCPP', since these are for mcpp only. Also, mcpp does not outputs lines of '#pragma GCC' followed by either 'poison', 'dependency' or 'system_header'. Moreover, mcpp outputs neither of '#pragma once', '#pragma push_macro', nor '#pragma pop_macro' because they are useless on the later phases.
+On the other hand, '#pragma GCC visibility *' is outputted, because it is for the compiler and the linker. *1
+mcpp compiled with EXPAND_PRAGMA == TRUE expands macros in #pragma line (in actual, EXPAND_PRAGMA is set TRUE only for Visual C-specific-build and Borland C-specific-build). However, #pragma lines followed by STDC, MCPP or GCC are never expanded.
+#pragma sub-directives are implementation-defined, hence there are risks of same name sub-directive having different meanings to different compiler-systems. Some device is necessary to avoid name collision. Moreover, when EXPAND_PRAGMA == TRUE, there should be a device to avoid the name of #pragma sub-directive itself being macro expanded. This is why mcpp-specific sub-directives begin with '#pragma MCPP' and are not subject to macro expansion. This device is adopted from '#pragma STDC' of C99 and '#pragma GCC' of GCC 3.
+'#pragma once' is, however, implemented as it is, since this pragma has been implemented in many preprocessors and has now no risk of name collision. '#pragma __setlocale' is prefixed with "__" instead of MCPP, because it has also meaning for compiler-proper, and because the prefix avoids user-name-space.
+Note:
+*1 The GCC-specific-build of mcpp only supports '#pragma GCC system_header' of the pragmas starting with GCC. It does not support '#pragma GCC poison' and '#pragma GCC dependency'.
+
+
+
+mcpp in Standard mode uses '#pragma MCPP put_defines', '#pragma MCPP preprocess' and '#pragma MCPP preprocessed'. Pre-Standard mode uses #put_defines, #preprocess and #preprocessed. Let me explain by taking an example of #pragma.
+When mcpp encounters '#pragma MCPP put_defines' directive, it outputs all the macros defined at that time in the form of #define lines. Of course, the #undef-ed macros are not output. The macros that cannot be #defined or #undef-ed, such __STDC__ and etc, are output in the form of #define lines, but are enclosed with comment marks. (Since __FILE__ and __LINE__ are special macros defined dynamically on a macro invocation, the replacement list output here means nothing.)
+In pre-Standard mode and POSTSTD mode mcpp do not memorize parameter names of function-like macro definitions. So, these directives mechanically represent names of the first, second, third parameters as a, b, c, ... and so on. If it reaches the 27th parameter, it begins with a1, b1, c1, ..., a2, b2, c2, ... and so on.
+If you enter the following directive after invoking mcpp from keyboard without specifying input and output files, all the predefined macros are listed.
+
+#pragma MCPP put_defines
+
+It also outputs a comment to indicate the source file name where each macro definition is found, as well as its line number. If you invoke mcpp with options such as -S1 or -N, you will see a different set of predefined macros.
+When mcpp encounters '#pragma MCPP preprocess' directive, it outputs the following line:
+
+#pragma MCPP preprocessed
+
+This indicates that the source file has been already preprocessed by mcpp.
+When mcpp encounters a '#pragma MCPP preprocessed' directive, it determines that the source file has been preprocessed by mcpp and continues to output the code it reads as it is, until it encounters a #define line. When mcpp does encounter a #define directive, mcpp determines that the rest of the source file are all #define lines and defines macros. At this time, mcpp would memorize the source filename and line number in the comment. *1, *2
+A '#pragma MCPP preprocessed' is applied only to the lines that follow the directive in the source file where the '#pragma MCPP preprocessed' directive is found. If the source file is an #included one, when control is returned to the #including file, '#pragma MCPP preprocessed' is no longer applied.
+Note:
+*1 Actual processing is a little more complex. When mcpp encounters a '#pragma MCPP preprocessed', mcpp outputs lines it has read just as they are, except for #line lines, which compiler-specific-build of mcpp converts and outputs into a format that the compiler-proper can accept. mcpp disregards predefined standard macro because its #define line is enclosed with comment marks.
+*2 Therefore, information on where a macro definition is found is not lost during pre-preprocessing.
+
+
+With above directives, you can "pre-preprocess" header files. Pre-preprocessing considerably saves the entire preprocessing time. I think the explanation so far has already given you an understanding of how to pre-preprocess header files, but to deepen your understanding, let me explain it by taking an example of mcpp's own source code.
+mcpp source consists of eight *.c files, of which seven files include "system.H" and "internal.H". No other headers are included. The source looks like this:
+
+#if PREPROCESSED
+#include "mcpp.H"
+#else
+#include "system.H"
+#include "internal.H"
+#endif
+
+The system.H includes noconfig.H or configed.H, as well as several standard header files. mcpp.H is not a source file I provide and is a "pre-preprocessed" header file I am going to generate.
+To generate mcpp.H (of course, after setting up noconfig.H and other headers), invoke mcpp as follows:
+
+mcpp > mcpp.H
+
+For compiler systems, such as GCC, also specify the -b option.
+Enter the following directives from the keyboard:
+
+#pragma MCPP preprocess
+#include "system.H"
+#include "internal.H"
+#pragma MCPP put_defines
+
+Enter "end-of-file" to terminate mcpp.
+This has accomplished mcpp.H, which consists of the preprocessed system.H and internal.H and a set of #define lines following them. Including mcpp.H gives the same effect as including system.H and internal.H, but its size is one-nth of the original header files including the standard ones. This is because #if and comments are eliminated. It takes far less time to include mcpp.H in seven *.c files than to include system.H and internal.H seven times. By using '#pragma MCPP preprocess', much more time can be saved.
+On compilation, use the -DPREPROCESSED=1 option.
+It is recommended that the above procedure should be written in a file and the makefile should refer to it. The makefile and preproc.c appended to mcpp sources contain the procedure. Please refer to it.
+Although the usage of independent preprocessor is limited for one-pass compilers like Visual C, Borland C or LCC-Win32, the pre-preprocessing facility is useful even for those.
+The pre-preprocessing facility of header files is similar to that of the -dD option of GCC, but it differs from it in that:
+
+- GCC outputs line number information not in the form of '#line 123 "filename"', but in the form of '# 123 "filename"', which allows GCC to reprocess the information, but the Standard C preprocessor cannot.
+ - GCC/cpp of older version outputs a #define line whenever it encounters it, but does not output a #undef line. Therefore, reprocessing the preprocessed result may produce a different result from what the original source intends.
+ - By using '#pragma MCPP preprocess', which is not provided by GCC, mcpp can provides a higher processing speed.
+
+As far as the pre-preprocessing facility is concerned, mcpp is more accurate and practical than GCC.
+
+
+
+#pragma once directive is available in Standard mode.
+#pragma once is also available for GCC, Visual C, LCC-Win32 and compiler-independent preprocessor called Wave.
+This directive is used when you want to include a header file only once. With the following directive in a header file, mcpp includes the header file only once even if a #include line for that file appears many times.
+
+#pragma once
+
+Usually, compiler-system-specific standard header files prevent duplicate definitions by using the following code:
+
+#ifndef __STDIO_H
+#define __STDIO_H
+/* Contents of stdio.h */
+#endif
+
+#pragma once provides similar functionality to this. Using macros always involves reading a header file. (The preprocessor cannot skip reading the code as people do and must read the entire header file for #if's or #endif's; It must read a comment before it can determine whether a line is a directive line, that is, a line with # at the beginning followed by a preprocessing directive; To do so, the preprocessor must identify a string literal; After all, it must read through the entire header file and perform most of tokenization.) #pragma once eliminates the need of even accessing to a header file, resulting in a improved processing speed for multiple includes.
+To determine whether two header files are identical, file name characters, including directory names in a search path, are compared. Windows is not case sensitive. Therefore, "/DIR1/header.h" and "/DIR2/header.h" are regarded as distinct, but "header.h" and "HEADER.H" are regarded as the same on Windows, but distinct on UNIX-like systems. A directory is memorized after converting to absolute path, and a symbolic link in UNIX systems is memorized after dereferencing. Moreover, path-list is normalized by removing redundant part such as "foo/../". So, the identical files are determined always correctly. *1, *2, *3
+I borrowed the idea of #pragma once from GCC V.1.*/cpp. GCC V.2.*, and V.3.* still has this functionality but it is regarded as obsolete. The specification of GCC V.2.*/cpp has been changed as follows: If the entire header file is enclosed with #ifndef _MACRO, #define _MACRO, and #endif, the cpp memorizes it and inclusion occurs only once, even without #pragma once.
+However, this GCC V.2 and V.3 specification sometimes does not work for commercially available compiler systems that are not based on the GCC specification, due to a difference in the standard header file notation. In addition, the GCC V.2 and V.3 specification is more complex to implement. For this reason, I decided to implement only #pragma once.
+As with other preprocessors, it is not advisable to rely only on #pragma once when the same header files are used. It is recommended that #pragma once should be combined with macros as follows:
+
+#ifndef __STDIO_H
+#define __STDIO_H
+#pragma once
+/* Contents of stdio.h */
+#endif
+
+Note that #pragma once must not be written in <assert.h>. For the reason, see cpp-test.html#5.1.2. The same thing can be said with <cassert> and <cassert.h> of C++.
+Another problem is that the recent GCC/GLIBC system has header files, like <stddef.h>, which are repeatedly #included by other system headers. They define macros, such as __need_NULL, __need_size_t, and __need_ptrdiff_t, and then #include <stddef.h>. Each time they do so, definitions such as NULL, size_t, and ptrdiff_t are defined in the <stddef.h>. The same thing can be said with <errno.h> and <signal.h>, and even with <stdio.h>. Other system headers define macros, such as __need_FILE, __need___FILE, and then #include <stdio.h>. Each time they do so, definitions such as FILE may be defined in <stdio.h>. #pragma once can not be used in such header files. *4
+Note:
+*1 The normalized result can be seen by '#pragma MCPP debug path'. See 3.5.1.
+'#pragma MCPP put_defines' and diagnostics use the same result, too.
+However, the path-list is not normalized usually in #line line.
+By default, the #line line is output as specified by #include line, prepending the normalized include path, if any.
+But, if -K option is specified, it is normalized so as to be easily utilized by some other tools.
+*2 On CygWIN, /bin and /usr/bin are the same directory in real, also /lib and /usr/lib are the same, and supposing / is C:/dir/cygwin on Windows, /cygdrive/c/dir/cygwin is the same as /. mcpp treats these directories as the same, converting the path-list to the format of /cygdrive/c/dir/cygwin/dir-list/file.
+*3 On MinGW, / and /usr are the same directory in real. Supposing / is C:/dir/msys/1.0, /c/dir/msys/1.0 is the same as /, and supposing /mingw is C:/dir/mingw, /c/dir/mingw is the same with /mingw. mcpp treats each of these as the same directories, converting the path-list to the format of c:/dir/msys/1.0/dir-list/file or c:/dir/mingw/dir-list/file.
+*4 This is applied at least to Linux/GCC 2.9x, 3.* and 4.*/glibc 2.1, 2.2 and 2.3. FreeBSD 4, 5, 6 has much simpler system headers because it does not use glibc.
+
+
+With a small number of header files, writing #pragma once to them does not require much effort, but it would be tremendous work if there are many header files. I wrote a simple tool to write it automatically to header files.
+tool/ins_once.c is a tool written for old versions of GCC. As Borland 5.5 conform to the same standard header file notation with GCC, this tool can be used. However, it is advisable that this tool should not be used in the systems like Glibc 2 that has many exceptions shown above.
+Even in the compiler systems that can use the tool, some header files do not strictly conform to the GCC notation. GCC's read-once functionality also does not work properly for these header files.
+Compile ins_once.c and perform the following command in a directory, such as /usr/include or /usr/local/include, under UNIX.
+
+chmod -R u+w *
+
+and then execute ins_once as follows:
+
+ins_once -t *.h */*.h */*/*.h
+
+Ins_once reports header files that do not begin with #ifndef or #if !defined. Manually modify these files. Then, execute ins_once as follows:
+
+ins_once *.h */*.h */*/*.h
+
+If the first directive in each header file is #ifndef or #if !defined, a #pragma once line is inserted immediate below the line. Only a root user or a user with an appropriate permission is eligible for this modification. When you modified access permission, use 'chmod -R u-w *' to restore to original permission.
+Ins_once provides the following options. Select the most appropriate one for your system.
+
+- -t: Check whether a header file begins with #ifndef or #if !defined, excluding a comment. This option does not modify the file.
+ - -p: Insert a #pragma once line at the beginning of file. By default, this line is inserted immediate below the #ifndef or #if !defined line.
+ - -g: For GCC system, <stddef.h>, <stdio.h>, <signal.h>, <errno.h> are also excluded. By default, only <assert.h>, <cassert> and <cassert.h> are excluded.
+
+ins_once roughly checks to write a #pragma once line only once in the same header file even if it is executed several times, but the check is not very strict. As this ins_once is of temporary and tentative nature, it scarcely performs tokenization. It worked as I expected with FreeBSD 2.0 and 2.2.7, Borland C 5.5, but it may not work properly for special header files. So before executing this tool, be sure to make a backup of an original file.
+Have the shell expand a wild-card. (In case of buffer overflow, execute ins_once several times by specifying some of your system header files.)
+
+
+
+These directives are provided for compatibility with GCC. GCC provides the #include_next and #warning directives. Although these directives are non-conforming, not only some source programs sometimes use them but also some Glibc2 system header files do. Taking this situation into consideration, I implemented the #include_next and #warning directives in GCC-specific-build to allow compilation of such source programs, however, mcpp issues a warning when it finds the directives. Regardless of the compiler systems mcpp is ported to, mcpp in Standard mode also implements #pragma MCPP warning.
+With the following directive, mcpp skips the current file's directory and start searching header.h from the next directory of search path.
+
+#include_next <header.h>
+
+CygWIN and MinGW ignores the distinctions of alphabetical case of header names.
+The following code outputs 'any message' to stderr as a warning message:
+
+#pragma MCPP warning any message
+
+#warning any message
+
+Different from #error, this is not counted as an error.
+
+
+
+When I ported mcpp to Visual C, I implemented these directives in mcpp, and then made them available for other systems.
+'#pragma MCPP push_macro( "MACRO")' and '#pragma MCPP pop_macro( "MACRO")' are used to "push" or "pop" a macro definition (MACRO) to the current macro definition stack.
+'#pragma push_macro( "MACRO")' and '#pragma pop_macro( "MACRO")' are also available for Visual C.
+push_macro saves a macro definition to the stack, and pop_macro retrieves the macro definition. The pushed macro definition remains valid after push_macro. To invalidate it, use #undef or redefine the macro with a new definition. push_macro can be used multiple times for a same name macro.
+'#pragma __setlocale( "<encoding>")' changes the current multi-byte character encoding to <encoding>. The argument of setlocale must be a string literal. For <encoding>, refer to 2.8. This directive allows you to use several encodings in one translation unit.
+In Visual C++, '#pragma __setlocale' cannot be used. Use '#pragma setlocale' instead. Encoding specification must be conveyed not only to mcpp but also to the compiler-proper. The latter can recognize only #pragma setlocale. For other compiler systems, when the compiler-proper cannot recognize an encoding, mcpp complements it.
+There is not yet any compiler-proper which can recognize '#pragma __setlocale'.
+
+
+
+'#pragma MCPP debug' and '#pragma MCPP end_debug' are for Standard mode. #debug and #end_debug are for pre-Standard mode.
+The '#pragma MCPP debug <args>' directive can be written anywhere in a source program. <args> specifies a debug information type. One #pragma MCPP debug directive can take several <arg>. One or more <arg> must be specified for each directive. mcpp begins to output debug information when it finds this directive, and stops it when it encounters '#pragma MCPP end_debug <args>'. The <args> can be omitted, in which case all types of debug information is reset. If <args> contains an argument that is not supported by mcpp, mcpp issues a warning, but all the preceding arguments are regarded as valid.
+All the debug information is output to the same path with the preprocessing output to synchronize with it. Therefore, this directive usually prevents compilation.
+Nevertheless, #pragma MCPP debug macro_call outputs informations embedding into comments, and can be re-preprocessed and compiled.
+When you noticed something was wrong with the preprocessing result, enclose the coding you want to debug with the following directives, for example:
+
+#pragma MCPP debug token expand
+/* Coding you want to debug */
+#pragma MCPP end_debug
+
+As this directive was originally used for debugging mcpp itself, it was not developed with end users in mind. So, you may not understand its behavior unless you read its source code, and you may sometimes feel it outputs too much information, but it is useful for tracing the preprocessing process. Be patient.
+The following debug information types can be specified with <arg>.
+
+
+ path | Displays the include file search path. |
+ token | Parses tokens one by one and displays its type. |
+ expand | Traces a macro expansion process. |
+ macro_call | Embed macro notifications into comments on each macro definition and macro expansion. |
+ if | Displays the result (true or false) of #if, #elif, #ifdef and #ifndef. |
+ expression | Traces #if expression evaluation. |
+ getc | Traces preprocess 1-byte by 1-byte. |
+ memory | Displays the status of heap memory used by mcpp. |
+
+
+
+
+With these directives, mcpp displays include directories in the search path (excluding the current and source directories with which search begins) in the order of priority, starting with the highest one first.
+In addition, with a #include directive, mcpp displays all the directories, including the current one, it actually searched for the #include file.
+When a header file with #pragma once specified is #included again, the message to that effect is displayed.
+Moreover, mcpp normalizes the path-list removing the redundant part such as "foo/../", and displays the result when the normalized path-list differs from the original one.
+Also mcpp dereferences the symbolic link to its linked-file, and displays the result when conversion is occurred.
+
+
+With these directives, mcpp displays a source line it has read, and then displays a token and its type on the source line each time it has read. This token, more specifically, is a preprocessing-token (pp-token). Not only pp-tokens on a source line but also ones mcpp reads again internally during macro expansion are displayed repeatedly.
+However, the following 1-byte tokens are not displayed for mcpp program's convenience sake:
+
+- 1. '#' at the beginning of a preprocessing directive line.
+ - 2. '(' at the beginning of a parameter list of a function-like macro definition.
+ - 3. ',' delimiting between function-like macro definition parameters.
+ - 4. '(' at the beginning of an argument list used for a function-like macro invocation.
+
+A pp-token has the following types:
+
+
+ NAM | Identifier |
+ NUM | Preprocessing-number |
+ OPE | Operator or punctuator |
+ STR | String literal |
+ WSTR | Wide string literal |
+ CHR | Character constant |
+ WCHR | Wide character constant |
+ SPE | Special pp-tokens, such as $ and @ |
+ SEP | Token separator white space |
+
+
+Of SEP, other than <newline> are not normally displayed. Control codes such as <newline> are displayed as <^J> or <^M>.
+
+
+With these directives, mcpp traces the expansion process of a macro invocation. When mcpp in Standard mode encounters a #pragma MCPP debug, it behaves as follows:
+If there is a macro invocation, mcpp displays the macro definition. Each argument is read, the argument is substituted for the corresponding parameter in the replacement list and the replacement list is rescanned. mcpp displays this whole process. In case of nested macro definitions, they are rescanned and expanded one by one. If an argument has a macro, mcpp traces the above process recursively before parameter substitution.
+Each time control is passed to and returned from a certain set of mcpp internal functions, mcpp displays the trace information along with the function name. The following table shows the role of these functions. Reading mcpp source code will gives you a concrete idea on what each function is doing.
+
+
+ expand_macro | Entrance routine for macro expansion |
+ replace | Expands a macro one level down. |
+ collect_args | Collects arguments. |
+ prescan | Scans a replacement list and processes # and ## operator. |
+ substitute | Substitutes parameters with arguments. |
+ rescan | Rescans a replacement list. |
+
+
+Except for expand_macro, above functions are indirectly recursive with each other.
+For replace and collect_args, mcpp displays data it internally stacks during macro expansion. This data is displayed using the following internal codes:
+
+
+ <n> | Nth parameter |
+ <TSEP> | Token delimiter inserted by mcpp |
+ <MAGIC> | Code that inhibits re-replacement of the macro of the same name |
+ <RT_END> | Code that indicates the end of a replacement list |
+ <SRC> | Code that indicates an identifier taken from source file while rescanning |
+
+
+<SRC> is used only in STD mode, and is not used in POSTSTD mode nor in COMPAT mode.
+It is recommended that '#pragma MCPP debug token' should be also used.
+If you specify also '#pragma MCPP debug macro_call' or -K option, macro notifications are output embedded in comments.
+However, in replace() and its subordinate routines some magic characters (internal codes) are written or removed in the input stream instead of comment.
+These magic characters are displayed as:
+
+
+ <MACm> | Call of the m'th macro contained in one macro call |
+ <MAC_END> | The end of the macro call started by previous MACm |
+ <MACm:ARGn> | The n'th argument of the m'th macro call |
+ <ARG_END> | The end of the argument started by previous MACm:ARGn |
+
+
+If you specify -v option too, the MAC_END and the ARG_END markers also display the same numbers with corresponding starting markers.
+For #debug expand, mcpp uses internal routines considerably different from those used for Standard mode. The explanations are omitted.
+
+
+With these directives, mcpp displays #if, #elif, #ifdef and #ifndef lines and reports their evaluation result (true or false). As for a skipped #if section, no report is made.
+
+
+With these directives, mcpp traces evaluation of a #if or #elif expression. DECUS cpp, based on which mcpp has been developed, provides these directives for the purpose of debugging cpp itself. I scarcely modified them. This directive outputs a very long list of internal functions, as well as variable names and their values. Unless you read the mcpp source code, you may not understand these variables. However, without the source code, you can manage to understand how the mcpp pushes onto and takes out of a evaluation stack a complex expression value.
+
+
+With these directives, mcpp outputs detailed data each time it calls get_ch(), a function to read one byte. When mcpp in Standard mode scans a pp-token, this routine is called to read only the first byte of the pp-token.
+With a #debug getc, mcpp calls this routine during token scan, resulting in a tremendous amount of data output.
+In any way, using these directives outputs a huge amount of data, so you scarcely need to use them.
+
+
+With these directives, mcpp reports the status of the heap memory it has internally allocated or released using malloc(), realloc() or free() only once. Only the kmmalloc I developed and some other types of malloc() provide this functionality. Refer to mcpp-porting.html#4.extra. In case of other malloc(), mcpp will neither cause an error nor report a status.
+mcpp reports the heap memory status again when it terminates with these directives on. The same thing happens when mcpp terminates due to out of memory.
+
+
+With this directive, mcpp starts macro notification mode.
+In this mode, on each macro definition and macro expansion, its line and column information on source file are output embedded in comments.
+On a macro call with arguments, location information on each arguments are reported too.
+Token concatenation by macro, however, may cause loss of macro information about the tokens before concatenation.
+In addition, some informations are output on #undef, #if (#elif, #ifdef, #ifndef) and #endif, too.
+This mode is specified also by -K option.
+Macro notification mode is designed to allow reconstruction of the original source position from the preprocessed output. The primary purpose of this mode is to allow C/C++ refactoring tools to refactor source code without having to implement a special-purpose C preprocessor. This mode is also handy for debugging macro expansions. *1
+The goal for macro expansion mode is to annotate every macro expansion, while still allowing the output to be compiled.
+On the other hand, '#pragma MCPP debug expand' is to trace macro expansion and outputs detailed informations, but its output is not compilable.
+Note:
+*1 Most of the specifications of macro notification mode were proposed by Taras Glek.
+He is working on refactoring of sources at mozilla project:
+ http://blog.mozilla.com/tglek/
+
+
+For example, macro definition directives such as:
+
+#define NULL 0L
+#define BAR(x, y) x ## y
+#define BAZ(a, b) a + b
+
+produce the following output:
+
+/*mNULL 1:9-1:16*/
+/*mBAR 2:9-2:25*/
+/*mBAZ 3:9-3:24*/
+
+where the format means:
+/*m[NAME] [start line]:[start column]-[end line]:[end column]*/
+Line and column numbers start from 1.
+When you specify -K option, predefined macros are output too, which have no location information.
+
+
+
+#undef BAZ
+
+This line produces the output:
+
+/*undef 10*//*BAZ*/
+
+The [lnum] and [NAME] in the format of /*undef [lnum]*//*[NAME]*/ indicate line number of the line and the undefined MACRO name.
+
+
+Within source code other than directives, macros are expanded with markers indicating start and stop of the macro expansion.
+The format allows for HTML-like nesting. /*<...*/ signals start of macro expansion and /*>*/ the end.
+The start of macro expansion takes the following format replacing /*m of start of macro definition format to /*<:
+/*<[NAME] [start line]:[start column]-[end line]:[end column]*/
+On macro with arguments, markers indicating source location of each argument and markers indicating start and end of each argument expansion are output too.
+The marker for argument location takes the format of /*!...*/.
+When a macro is found in an argument, informations on that macro is output recursively, with its location information if it is on the source file.
+Macro argument marker also have a disambiguating naming scheme. An argument name is of the format:
+[func-like-macro-name]:[nesting level]-[argument number]
+This way, if someone calls 'BAZ(BAZ(a,b), c)', it would possible to distinguish nested macros of the same name and their arguments from each other.
+The argument number starts from 0.
+Then the location format follows it as:
+[start line]:[start column]-[end line]:[end column]
+The marker for start of an argument also takes the format:
+/*<[func-like-macro-name]:[nesting level]-[argument number]*/
+The marker for end of an argument is the same with the one for end of a macro expansion: /*>*/.
+The following lines:
+
+foo(NULL);
+foo(BAR(some_, var));
+foo = BAZ(NULL, 2);
+bar = BAZ(BAZ(a,b), c);
+
+expand to:
+
+foo(/*<NULL 4:5-4:9*/0L/*>*/);
+foo(/*<BAR 5:5-5:20*//*!BAR:0-0 5:9-5:14*//*!BAR:0-1 5:16-5:19*/some_var/*>*/);
+foo = /*<BAZ 6:7-6:19*//*!BAZ:0-0 6:11-6:15*//*!BAZ:0-1 6:17-6:18*//*<BAZ:0-0*//*<NULL 6:11-6:15*/0L/*>*//*>*/ + /*<BAZ:0-1*/2/*>*//*>*/;
+bar = /*<BAZ 7:7-7:23*//*!BAZ:0-0 7:11-7:19*//*!BAZ:0-1 7:21-7:22*//*<BAZ:0-0*//*<BAZ 7:11-7:19*//*!BAZ:1-0*//*!BAZ:1-1*//*<BAZ:1-0*/a/*>*/ + /*<BAZ:1-1*/b/*>*//*>*//*>*/ + /*<BAZ:0-1*/c/*>*//*>*/;
+
+Moreover, when -v option is specified along with -K option, the marker for end of macro expansion and the marker for end of an argument expansion also output the macro name and its number same with their starting markers as:
+
+foo(/*<NULL 4:5-4:9*/0L/*NULL>*/);
+foo(/*<BAR 5:5-5:20*//*!BAR:0-0 5:9-5:14*//*!BAR:0-1 5:16-5:19*/some_var/*BAR>*/);
+foo = /*<BAZ 6:7-6:19*//*!BAZ:0-0 6:11-6:15*//*!BAZ:0-1 6:17-6:18*//*<BAZ:0-0*//*<NULL 6:11-6:15*/0L/*NULL>*//*BAZ:0-0>*/ + /*<BAZ:0-1*/2/*BAZ:0-1>*//*BAZ>*/;
+bar = /*<BAZ 7:7-7:23*//*!BAZ:0-0 7:11-7:19*//*!BAZ:0-1 7:21-7:22*//*<BAZ:0-0*//*<BAZ 7:11-7:19*//*!BAZ:1-0*//*!BAZ:1-1*//*<BAZ:1-0*/a/*BAZ:1-0>*/ + /*<BAZ:1-1*/b/*BAZ:1-1>*//*BAZ>*//*BAZ:0-0>*/ + /*<BAZ:0-1*/c/*BAZ:0-1>*//*BAZ>*/;
+
+As you see in this example, all the ending markers correspond to the last preceding starting markers of the same nesting level.
+Hence, you can judge their correspondence automatically even without -v option.
+
+
+On #if (#elif, #ifdef, #ifndef) line, informations on the macros in the line are shown.
+For example, this is bar.h:
+
+#define NULL 0L
+#define BAR(x, y) x ## y
+#define BAZ(a, b) a + b
+
+And here is foo.c:
+
+#include "bar.h"
+#ifdef BAR
+#ifndef BAZ
+#if 1 + BAR( 2, 3)
+#endif
+#else
+#if 1
+#endif
+#if BAZ( 1, BAR( 2, 3))
+#undef BAZ
+#endif
+#endif
+#endif
+
+Then, foo.c produces the following output:
+
+#line 1 "/dir/foo.c"
+#line 1 "/dir/bar.h"
+/*mNULL 1:9-1:16*/
+/*mBAR 2:9-2:25*/
+/*mBAZ 3:9-3:24*/
+#line 2 "/dir/foo.c"
+/*ifdef 2*//*BAR*//*i T*/
+/*ifndef 3*//*BAZ*//*i F*/
+
+
+/*else 6:T*/
+/*if 7*//*i T*/
+/*endif 8*/
+/*if 9*//*BAZ*//*BAR*//*i T*/
+/*undef 10*//*BAZ*/
+#line 11 "/dir/foo.c"
+/*endif 11*/
+/*endif 12*/
+/*endif 13*/
+
+As you see, on #if line, an annotation starts with a /*if [lnum]*/ format where [lnum] indicates the current line number.
+Then one or more /*[NAME]*/ markers follow, if some macros are found, a /*[NAME]*/ for each macro.
+The annotation terminates with /*i T*/ or /*i F*/ which indicates that the directive is evaluated true or false, respectively.
+The expansion result is not displayed, unlike a macro on lines other than directives.
+On a line such as '#if 1' which has no macro, no /*[NAME]*/ is displayed.
+Also annotations on #elif, #ifdef and #ifndef start with /*elif [lnum]*/, /*ifdef [lnum]*/ and /*ifndef [lnum]*/, respectively, followed by /*[NAME]*/, if some macros are found, and terminate with /*i T*/ or /*i F*/.
+In any blocks where compilation is to be skipped, no annotation is displayed.
+
+
+On #else line, as the above examples, an information is displayed in /*else [lnum]:[C]*/ format where [lnum] is the current line number and [C] is 'T' or 'F' which indicates that the #else - #endif block is to be compiled or to be skipped.
+On #endif line, as the above examples, an information is displayed in /*endif [lnum]*/ format where [lnum] indicates the current line number.
+Of course, the #endif corresponds to the last #if (#ifdef, #ifndef) which is not yet closed.
+
+
+In addition, on the macro notification mode, the output format of filename in #line line differs from the default.
+It outputs the filename in the "normalized" full-path-list.
+See 3.2.
+This is for the convenience of refactoring tool making.
+
+
+
+#assert is available in pre-Standard mode, except the GCC-specific-build. #assert provides the functionality equivalent to the #error directive in the Standard C. The following code in the Standard C:
+
+#if ULONG_MAX/2 < LONG_MAX
+#error Bad unsigned long handling.
+#endif
+
+can be expressed as:
+
+#assert LONG_MAX <= ULONG_MAX/2
+
+The argument of #assert is evaluated as a #if expression. If it evaluates to true (non-zero), mcpp does nothing and if false (0), it displays the following message and then the argument line (after processing line splicing and comments):
+
+Preprocessing assertion failed
+
+mcpp counts this as error but continues processing.
+This #assert is quite different from that of System V or GCC.
+mcpp in pre-Standard mode regards a block enclosed with the #asm and #endasm directives as assembler coding. mcpp implements this functionality for Microware C/6809 only. To implement this functionality in other compiler systems, do_old() and put_asm() in system.c must be modified.
+For a #asm block, mcpp performs trigraphs conversion and deletes <backslash><newline> sequence, but it neither performs comment processing, checks tokens or characters, nor deletes white-space characters at the beginning of a line. Also, it does not expand a token that happens to have the same name with a macro and outputs it as it is. Other directive lines have no meaning within the #asm block.
+These #asm and #endasm directives do not conform to Standard C. In the first place, extension directives in the form other than "#pragma sub-directive" are not Standard C conforming. Changing their directive names to #pragma asm and #pragma endasm does not solve this problem. In Standard C, the source code must consist of a C token sequence (more precisely, a preprocessing token sequence), however, an assembler program is not a C token sequence. To use assembly code in the Standard C, there is no other way but to embed it in a string literal token. Then, you have to implement a built-in function that processes that string literal in the compiler-proper and call it as follows:
+
+asm (
+ " leax _iob+13,y\n"
+ " pshs x\n"
+);
+
+However, this is not suitable for a longer assembly code, in which case, you had better write the assembly code as a separate file like a library function, and assemble and link the program. This seems to be inconvenient, but it is necessary to separate the assembler portion completely to write a portable C program. It is recommended that you should write assembly code in a separate file rather than using #asm.
+
+
+
+These features are available in Standard mode. The -V199901L option with __STDC_VERSION__ set to 199901L enables the following C99's features. The same thing can be said with C++ for the -V199901L option with __cplusplus set to 199901L or more. Although C++ Standard does not provides for the features other than 1 or 7, mcpp in Standard mode provides them for better compatibility with C99. Standard mode also allows variable argument macros even in the C90 and C++ modes. *1
+
+- Treats the text from // to the end of a line as a comment.
+
+ - Enables variable argument macros.
+
+ - Allows the sequence of p+, P+, p-, and P-, as well as e+, E+, e-, and E-, in the preprocessing-number. This is to represent a bit pattern of a floating-point number in Hex, like 0x1.FFFFFEp+128.
+
+ - Enables the _Pragma() operator.
+
+ - mcpp compiled with the EXPAND_PRAGMA macro set to TRUE macro-expands the argument of #pragma line that do not begin with STDC, MCPP nor GCC. (By default, mcpp is compiled with EXPAND_PRAGMA == FALSE, so it is not subject to macro expansion. It is macro expanded only in Visual C-specific-build and Borland C-specific-build.)
+
+ - For compiler-systems with long long, a #if expression is evaluated in long long or unsigned long long.
+
+ - Allows an escape sequence named UCN for Unicode in the forms of \unnnn and \Unnnnnnnn in identifiers, character constants, string literals and pp-numbers. The value of a UCN in #if expression is evaluated as a hexadecimal representation. (UCN cannot be used in POSTSTD mode.)
+
+A variable argument macro takes a form of:
+
+#define debug(...) fprintf(stderr, __VA_ARGS__)
+
+Here is a macro invocation:
+
+debug( "X = %d\n", x);
+
+This macro is expanded as follows:
+
+fprintf(stderr, "X = %d\n", x);
+
+... in the parameter list corresponds to one or more parameters. In the above example, ... corresponds to __VA_ARGS__ in the replacement list. During a macro invocation, several arguments that correspond to the ..., including ",", are concatenated to be treated as one argument.
+_Pragma( "foo bar") has the same effect as specifying #pragma foo bar. The argument of the _Pragma() operator must be one string literal or wide string literal. For a wide string, the prefix (L) is deleted and treated as same as a string literal. For a string literal, " enclosing that string literal is deleted, and \" and \\ in that literal is replaced with " and \, respectively, before it is treated as a #pragma argument.
+#pragma must be written somewhere in one logical line and its argument is not macro-expanded at least for C90. On the other hand, the _Pragma() operator can be written anywhere in source code (even in a replacement list), which gives the same effect with #pragma written in a logical line. The _Pragma() operator generated during macro expansion is also valid. This flexibility provides the pragma directive with a wide range of portability and allows a header file to absorb the difference in #pragma among compiler systems. (For this sample, see pragmas.h and pragmas.t of "Validation Suite".) *2
+C99 stipulates a #if expression is of maximum integer type. As "long long" and "unsigned long long" are required types, the type of an #if expression is "long long / unsigned long long" or larger. C90 and C++98 stipulate the type is long / unsigned long. mcpp, however, evaluates it by long long / unsigned long long even in C90 and C++98, and issues a warning when the value is out of range of long / unsigned long. *1
+Note:
+*1 This is for compatibility with GCC and Visual C++ 2005, 2008. It is difficult also for other compiler systems to implement C99 specifications all at once. Probably, they will begin to implement them little by little with __STDC_VERSION__ set to 199409L or so.
+*2 C99 says that a #pragma argument that begins with STDC is not macro-expanded. For other #pragma arguments, whether macro is expanded is implementation-defined.
+
+
+
+mcpp of compiler-specific-builds have some specifications peculiar to each compiler system.
+Such particular specifications, other than execution option and #pragma, are explained in this section.
+
+
+GCC has variadic macro of its own specification from V.2 as shown in 3.9.1.6.
+In this manual we call this as GCC2-spec variadic macro.
+Moreover, GCC implemented one more spec of variadic from V.3 as shown in 3.9.6.3, which we call GCC3-spec variadic macro.
+GCC V.2.95 and later implements C99 variadic, too.
+Nevertheless, softwares such as glibc or Linux system headers do not use C99 variadic, nor even GCC3-spec one, and still use that of GCC2-spec.
+mcpp of GCC-specific-build on STD mode implemented GCC3-spec variadic from V.2.6.3, and GCC2-spec one from V.2.7, in order to avoid inconveniences on Linux or some other softwares.
+Yet, mcpp warns at use of them.
+GCC-spec variadics, especially GCC2-spec one, are not only unportable, but also syntactically unclean.
+Use of them in sources to write in future is not recommendable.
+Visual C had not implemented variadic macro up to 2003.
+But, Visual C 2005 finally implemented it.
+Its specification is C99 one with a modification like GCC3-spec one.
+When variable arguments are absent, Visual C removes their immediately preceding comma.
+It does not use '##' token used in GCC3-spec.
+The specification is illustrated as below.
+Visual C document says that in the third example, a comma is not removed.
+In actual, however, it removes even the comma in this case.
+
+#define EMPTY
+#define VC_VA( format, ...) printf( format, __VA_ARGS__)
+VC_VA( "var_args: %s %d\n", "Hello", 2005); /* printf( "var_args: %s %d\n", "Hello", 2005); */
+VC_VA( "absence of var_args:\n"); /* printf( "absence of var_args:\n"); */
+VC_VA( "empty var_args:\n", EMPTY); /* printf( "empty var_args:\n", ); */ /* trailing comma */
+
+Visual C-specific-build of mcpp implemented in STD mode this special handling from V.2.7.
+Still, it warns at use of the spec.
+mcpp implements the behavior on the above third example as its spec, and does not remove the comma.
+
+
+On a macro with 'defined' token in it, GCC expands it differently from usual when it is in #if line.
+I explain this problem at 3.9.4.6.
+mcpp of GCC-specific-build from V.2.7 onward handles this sort of macro like GCC in STD mode.
+This behavior was implemented to cope with a few wrong macros used in Linux system headers.
+Yet, it warns at use of 'defined' token in macro on #if line.
+You should write correct #if expression.
+
+
+Borland C has the asm keyword. This keyword is used to write assembly code as follows:
+
+asm {
+ mov x,4;
+ ...;
+}
+
+This is quite irregular and deviates from the C grammar. If there happen to be a token with the same name as a macro, it will be macro-expanded. The same can be said with Borland C itself and mcpp. It is recommended that an assembler program should be written in a separate .asm file.
+mcpp does not treat this specially.
+Visual C++ also has the __asm keyword, which provides the similar functionality to this.
+GCC provide a Standard-conforming built-in function asm() which is used as asm( " mov x,4\n").
+
+
+
+3.8.4.1. #import of Mac OS X / GCC
+GCC has #import directive, which is a feature of Objective-C and imported to C/C++.
+#import is a #include with an implicit '#pragma once'.
+It is occasionally used in C/C++ sources on Mac OS X.
+mcpp V.2.7 and later implements this directive only on Mac OS X, in both of GCC-specific-build and compiler-independent-build.
+
+3.8.4.2. #import and #using of Visual C
+Visual C has peculiar directives named #import and #using, which have form of preprocessing-directive, in fact, they are directives for compiler and linker.
+The #import of Visual C has no relation to that of GCC.
+mcpp of Visual-C-specific-build outputs these lines as they are.
+
+
+
+Although I tried to develop mcpp in such manner that the GCC-specific-build provides compatibility with GCC / cpp (cc1) to the extent that it does not hinder practical use, it is still incompatible in many aspects.
+First of all, as shown in Chapter 2, there are many differences in execution options. mcpp implements neither -A option nor non-conforming directives, including #assert and #ident. *1
+Fortunately, there seems to be quite few sources that cannot be compiled due to a lack of this compatibility.
+It is more problematic that there are some sources that assume special behaviors of old preprocessors. Most of such source code receives a warning when -pedantic is specified in GCC. mcpp in Standard mode, by default, provides almost the same behavior as GCC's -pedantic since it implements Standard conforming error checking. However, since GCC/cpp, by default, allows such Standard violations without issuing a diagnostic, there are some sources that take advantage of this.
+It is very easy to rewrite such non-conforming code to Standard-conforming code in most cases, so it is meaningless to take the trouble to write non-conforming code only to impair portability and, what is worse, to provide a hotbed of bugs. When you find such code, do not hesitate to correct it. *2
+Note:
+*1 The functionality of #assert and #ident should be implemented using #pragma, if necessary. The same can be said with #include_next and #warning, but these directives seem to be sometimes used in GCC system, so I grudgingly implemented them in GCC-specific-build, however, a warning is issued when they are used.
+*2 From 3.9 through 3.9.3 sections of this document was written in 1998, when the sources depending on traditional preprocessors were frequently found.
+After that time, such sources have greatly decreased,
+and on the other hand, sources depending on the local features and implementation trivialities of GCC have much increased.
+The 3.9.4 and later, especially 3.9.8 and later sections describe mainly such problems. (2008/03)
+
+
+Taking FreeBSD 2.2.2-R (1997/05) kernel source code as an example, this section explains some preprocessing problems. All the directories that appear in this section are installed in /sys (/usr/src/sys). Of the items I point out below, 3.9.1.7 and 3.9.1.8 are not necessarily Standard violations and work as expected in mcpp, but mcpp issues a warning because their coding is confusing. 3.9.1.6 is an enhancement and C99 provides the same functionality, but it differs from GNUC/cpp in notation.
+
+3.9.1.1. Multi-Line String Literal
+Assembly codes are embedded by the following manner in i386/apm/apm.c, i386/isa/npx.c, i386/isa/seagate.c, i386/scsi/aic7xxx.h, dev/aic7xxx/aic7xxx_asm.c, dev/aic7xxx/symbol.c, gnu/ext2fs/i386- bitops.h, pc98/pc98/npx.c:
+
+asm("
+ asm code0
+#ifdef PC98
+ asm code1
+#else
+ asm code2
+#endif
+ ...
+");
+
+When no " closing a string literal appears by the end of line, GCC/cpp, by default, interprets that the string literal ends at the end of line. The above coding is based on this specification. In addition, the compiler-proper seems to interpret the whole content of asm() as a string literal spreading across lines.
+I think that assembler source code should be written in a separate file, but if you want to embed it in ".c" file by all means, write it in the following manner, instead of using the confusing coding shown above.
+
+asm(
+ " asm code0\n"
+#ifdef PC98
+ " asm code1\n"
+#else
+ " asm code2\n"
+#endif
+ " ...\n"
+);
+
+Standard C conforming preprocessors will accept it.
+
+3.9.1.2. #else junk, #endif junk
+The following line appears in ddb/db_run.c, netatalk/at.h, netatalk/aarp.c, net/if-ethersubr.c, i386/isa/isa.h, i386/isa/wdreg.h, i386/isa/tw.c, i386/isa/b004.c, i386/isa/matcd/matcd.c, i386/isa/sound/sound_calls.h, i386/isa/pcvt/pcvt_drv.c, pci/meteor.c, and pc98/pc98/pc98.h:
+
+#endif MACRO
+
+This line should be changed to:
+
+#endif /* MACRO */
+
+
+3.9.1.3. #ifdef 0
+To my surprise, i386/apm/apm.c contains the following strange line:
+
+#ifdef 0
+
+Of course, this should be written as:
+
+#if 0
+
+This code must have been neither debugged nor used.
+
+3.9.1.4. Duplicate Definition of Macro
+gnu/i386/isa/dgb.c has a duplicate definition of the following macro:
+
+#define DEBUG
+
+Some of header files have a macro definition conflicting with this.
+The Standard C regards duplicate definitions as "violation of constraint", but how they are treated depends on compiler systems; some make the first definition valid after issuing an error message and others, like GCC 2/cpp, make the last definition valid without issuing any message by default. To make the last definition valid, the following code should be added immediately before the last definition.
+
+#undef DEBUG
+
+
+3.9.1.5. #warning
+i386/isa/if_ze.c, and i386/isa/if_zp.c have the #warning directive. This is the only Standard violation directive I found in the kernel source. To conform to the Standard C, there is no way but to comment out this line.
+mcpp accepts #warning.
+
+
+gnu/ext2fs/ext2_fs.h and i386/isa/mcd.c have the following macro that takes variable number of arguments:
+
+#define MCD_TRACE(fmt, a...) \
+{ \
+ if (mcd_data[unit].debug) { \
+ printf("mcd%d: status=0x%02x: ", \
+ unit, mcd_data[unit].status); \
+ printf(fmt, ## a); \
+ } \
+}
+
+# define ext2_debug(fmt, a...) { \
+ printf("EXT2-fs DEBUG (%s, %d): %s:", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ printf(fmt, ## a); \
+ }
+
+This is a GCC-specific enhanced specification and cannot be applied to other compiler systems. The above "## a" can be simply written as "a". With ## and in the absence of an argument corresponding to "a..." in a macro invocation, the preceding comma is deleted. C99 also provides for variable argument macros, but their notation differs from that of GCC. The above example is written as follows in C99:
+
+#define MCD_TRACE( ...) \
+{ \
+ if (mcd_data[unit].debug) { \
+ printf("mcd%d: status=0x%02x: ", \
+ unit, mcd_data[unit].status); \
+ printf( __VA_ARGS__); \
+ } \
+}
+
+# define ext2_debug( ...) { \
+ printf("EXT2-fs DEBUG (%s, %d): %s:", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ printf( __VA_ARGS__); \
+ }
+
+The most annoying difference is that in C99 requires one or more arguments on a macro invocation corresponding to "..." while GNUC/cpp requires 0 or more arguments corresponding to "a...". To handle this, when there is no argument corresponding to "...", mcpp issues a warning, instead of making it an error. Therefore, you can change the above code as follows:
+
+#define MCD_TRACE(fmt, ...) \
+{ \
+ if (mcd_data[unit].debug) { \
+ printf("mcd%d: status=0x%02x: ", \
+ unit, mcd_data[unit].status); \
+ printf(fmt, __VA_ARGS__); \
+ } \
+}
+
+# define ext2_debug(fmt, ...) { \
+ printf("EXT2-fs DEBUG (%s, %d): %s:", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ printf(fmt, __VA_ARGS__); \
+ }
+
+This is simpler with one-to-one correspondence. However, this way of writing has a disadvantage that a comma immediately before an empty argument remains, resulting in, for example, printf( fmt, ). In this case, there is no other way but to write a macro definition in accordance with C99 specifications, or avoid using an empty argument in a macro invocation. Harmless tokens, such as NULL or 0, are used to write, for example, MCD_TRACE(fmt, NULL). *1
+Note:
+*1
GCC 2.95.3 or later also implements variable argument macros based on the C99 syntax. It is recommended to use this syntax. GCC specific one provides the flexibility of allowing for zero number of variable argument, but its notation is bad in that (1) for the "args..." parameter, a white space must not be inserted between "args" and "...", but such a pp-token is not permitted in C/C++, and that (2) it is not desirable that the notation for a token concatenation operator is used for different meaning in a replacement list. It is desirable to allow zero number of variable arguments based on the C99 notation. GCC 3 introduced a notation for variable argument macros that is a mixture of GCC 2's traditional notation and C99 one. For details, refer to 3.9.6.3.
+
+3.9.1.7. Empty Argument in Macro Call
+The following macro invocations appear in nfs/nfs.h, nfs/nfsmount.h, nfs/nfsmode.h, netinet/if_ether.c, netinet/in.c, sys/proc.h, sys/socketvars.h, i386/scsi/aic7xxx.h, i386/include/pmap.h, dev/aic7xxx/scan.l, dev/aic7xxx/aic7xxx_asm.c, kern/vfs_cache.c, pci/wd82371.c, vm/vm_object.h, and vm/device/pager.c. So do in /usr/include/nfs/nfs.h.
+
+LIST_HEAD(, arg2)
+TAILQ_HEAD(, arg2)
+CIRCLEQ_HEAD(, arg2)
+SLIST_HEAD(, arg2)
+STAILQ_HAED(, arg2)
+
+The first argument is empty. C99 approved empty arguments but C90 regarded them as undefined. Taking it consideration that an argument may happen to be empty during a nested macro invocation, empty arguments should be approved, however, it is neither necessary nor desirable to write an empty argument in source code. Note that for a one-argument macro, there is syntax ambiguity between an empty argument and a lack of argument.
+Taking everything into consideration, the following notation is recommended:
+
+#define EMPTY
+
+LIST_HEAD(EMPTY, arg2)
+TAILQ_HEAD(EMPTY, arg2)
+CIRCLEQ_HEAD(EMPTY, arg2)
+SLIST_HEAD(EMPTY, arg2)
+STAILQ_HAED(EMPTY, arg2)
+
+Any Standard C conforming preprocessor will accept this notation.
+By the way, some of the header files (in the nfs directory) shown above neither have the macro definitions shown above nor #include any other header files. This is because such header files assume that these macro definitions exist in sys/queue.h and that *.c programs will #include sys/queue.h first. These files arise ambiguity.
+kern/kern_mib.c has the following macro definitions:
+
+SYSCTL_NODE(, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
+
+In this case, the first argument cannot be changed to EMPTY. Because the corresponding macro definition in the sys/sysctl.h is as follows:
+
+#define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \
+ extern struct linker_set sysctl_##parent##_##name; \
+ SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|access, \
+ (void*)&sysctl_##parent##_##name, 0, handler, "N", descr); \
+ TEXT_SET(sysctl_##parent##_##name, sysctl__##parent##_##name);
+
+In other words, these arguments are not macro-expanded. The arguments of the SYSCTL_OID macro shown above, including the first one, are not macro expanded. In this case, there is no way but to leave the empty argument as it is. *1
+Note:
+*1 C99 approves empty arguments as legitimate. Taking macros, such as SYSCTL_NODE() and SYSCTL_OID(), into consideration, the EMPTY macro is not almighty and using empty arguments has some reason. In addition, even if EMPTY is used, a nested macro invocation may cause empty arguments. However, for source readability, using EMPTY is recommended whenever possible.
+
+3.9.1.8. Object-Like Macros Replaced with Function-like Macro Name
+i386/include/endian.h, as well as /usr/include/machine/endian.h, has the following macro definitions. (There are four same kinds of definitions.)
+
+#define __byte_swap_long(x) (replacement text)
+#define NTOHL(x) (x) = ntohl ((u_long)x)
+#define ntohl __byte_swap_long
+
+The problem is the ntohl definition. Although ntohl is an object-like macro, it is expanded to a function-like macro name, then rescanned with subsequent text, and is expanded as if it were a function-like macro. This way of macro-expansion has been regarded as an implicit specification since K&R 1st, and the Standard C somehow approved it as legitimate. However, as I discuss in other documents, it is this specification that makes macro-expansion unnecessarily complicated and brings confusion to Standard documents. This is a bug specification. *1
+This ntohl is actually a function-like macro, written as an object-like macro omitting the parameter list. You had better define this like a function-like macro that it is:
+
+#define ntohl(x) __byte_swap_long(x)
+
+This causes no problem.
+i386/isa/sound/os.h has the same kind of macro definitions:
+
+#define INB inb
+#define INW inb
+
+This should be written as follows:
+
+#define INB(x) inb(x)
+#define INW(x) inb(x)
+
+Note:
+*1 ISO 9899:1990 Corrigendum 1:1994 regarded the notation as undefined. C99 replaced this article with other. However, Standard documents are still confusing about this. For details, see cpp-test.html#2.7.6.
+
+3.9.1.9. Preprocessing .S File
+Some kernel sources are contained in several ".S" files, that is, they are written in assembler. These sources contain #include's or #ifdef's, which require preprocessing. To preprocess them, in FreeBSD 2.2.2-R, 'cc' is called with the '-x assembler-with-cpp' option, and 'cc' calls '/usr/libexec/cpp' with the '-lang-asm' option and then calls 'as'.
+Of course, this ways of using .S files is non-conforming. This assembler source code must not contain a token that happens to have the same name with a macro. White spaces between tokens and at the beginning of a line must be retained during preprocessing. In addition, if the first token at the beginning of a line is a # indicating an assembler comment, special processing is required on the preprocessor side. This not only considerably limits available preprocessors but also increases the possibility of unknowingly introducing bugs. So, using .S files in this way is not recommended. *1
+To preprocess source code for use with several types of machines, the code should be written in the following manner and be saved in not ".S" but ".c" file. 4.4BSD-Lite actually adopts this way of coding.
+
+asm(
+ " asm code0\n"
+#ifdef Machine_A
+ " asm code1\n"
+#else
+ " asm code2\n"
+#endif
+ " ...\n"
+);
+
+Note:
+*1 In FreeBSD 2.0-R, these kernel sources are contained not in *.S but in *.s file. The Makefile is so defined as to call 'cpp', instead of 'cc', to process them. Then the 'cc' calls 'as'. When the 'cpp' is called, '/usr/bin/cpp' is invoked. '/usr/bin/cpp' is a shell-script that calls '/usr/libexec/cpp -traditional'. This method was more convenient in that it provides a way to change preprocessors to be used by modifying the script.
+
+
+I compiled all the source files in /usr/src/lib/libc of FreeBSD 2.2.2R. There was no problem, probably because most of them comes from 4.4BSD-Lite without much modification. It is quite rare and surprising that a huge amount of source files in excellent quality is gathered together.
+Only at one place, I found the following coding in gen/getgrent.c. Of course, ";" at the end of line is surplus.
+
+#endif;
+
+
+
+As seen so far, writing a Standard-conforming source code with better portability in a more secure manner neither requires much effort nor provides any demerits. In spite of it, why does source code less conforming to Standards still exist at all?
+When comparing the FreeBSD 2.0-R kernel sources with those of 2.2.2-R, non-conforming ones do not decrease in number. The problem is that newer sources are not necessarily more conforming to the Standards. There are few non-conforming sources in 4.4BSD-Lite. This is probably because the 4.4BSD sources were rewritten to become conforming to the Standard C and POSIX. However, during the process of implementing these sources to FreeBSD, the old writing style revived in some sources. For example, although the ntohl shown above is written as ntohl(x) in 4.4BSD-Lite, it is written as ntohl in FreeBSD. Why did the notation once put away revive?
+I blame GCC/cpp for this revival, which passes these non-conforming sources without issuing a diagnostic. If -pedantic had been a default behavior, the old style source would have never revived. If -pedantic-errors had been a default behavior, although, GCC/cpp would not have been put into practical use because too many sources failed to be compiled. The gcc's man page describes the -pedantic option as: "There is no reason to use this option except for satisfying pedants." Now that eight years have already passed since Standard C was established, it is a high time that GCC/cpp should set -pedantic as default, not go so far as to set -pedantic-errors. *1
+In FreeBSD 2.0-R, nested comments were sometimes found, but in 2.2.2-R, they disappeared. This is because GCC/cpp no longer allowed them. This has nothing to do with -pedantic, but I want to say how influential preprocessor's source checking is.
+Note:
+*1 I wrote 3.9.3 subsection in 1998. After that, gcc's man page or info deleted this expression, however, the specification remains almost the same.
+
+
+I compiled glibc (GNU LIBC) 2.1.3 sources (February, 2000). Different from those of FreeBSD libc, I found many problems. Some sources are written based on GCC/cpp's undocumented specifications, in which case it took me a lot of time to identify them.
+
+3.9.4.1. Multi-Line String Literal
+sysdeps/i386/dl-machine.h and stdlib/longlong.h have many multi-line string literals as shown below:
+
+#define MACRO asm("
+ instr 0
+ instr 1
+ instr 2
+")
+
+Some string literals are very long. compile/csu/version-info.h created by make also has a multi-line string literal. Of course, it is non-conforming, but GCC treats it as a string literal with embedded <newline>.
+The -lang-asm (-x assembler-with-cpp, -a) option allows mcpp to convert a multi-line string literal into the following code:
+
+#define MACRO asm("\n instr 0\n instr 1\n instr 2\n")
+
+However, this option cannot work properly for a string literal with a directive inserted in the middle as shown in 3.9.1.1, in which case there is no way but to rewrite the source.
+
+3.9.4.2. #include_next, #warning
+#include_next appears in the following files:
+catgets/config.h, db2/config.h, include/fpu_control.h, include/limits.h, include/bits/ipc.h, include/sys/sysinfo.h, locale/programs/config.h, and sysdeps/unix/sysv/linux/a.out.h
+sysvipc/sys/ipc.h has #warning.
+Although these directives are not approved by the Standard C, #include_next, in particular, becomes indispensable for glibc 2. So, mcpp for GCC implements #include_next and #warning.
+The problems concerning #include_next is that it is not only a standard violation but also that what headers are actually included depends on the setting of include directories and a search order, which are changed by users via environment variables.
+When glibc is installed, some files in glibc's include directory are copied to the /usr/include directory. These files are used as system header files. That these header files contain #include_next means system headers become patchy. It seems to be time to reorganize them.
+
+3.9.4.3. Variable Argument Macros
+The following files contain definitions of macros with variable number of arguments based on the GCC specification, as well as macro invocations:
+elf/dl-lookup.c, elf/dl-version.c, elf/ldsodefs.h, glibc-compat/nss_db/db-XXX.c, glibc-compat/nss_files/files-XXX.c, linuxthreads/internals.h, locale/loadlocale.c, locale/programs/linereader.h, locale/programs/locale.c, nss/nss_db/db-XXX.c, nss/nss_files/files-XXX.c, sysdeps/unix/sysdep.h, sysdeps/unix/sysv/linux/i386/sysdep.h, and sysdeps/i386/fpu/bits/mathinline.h
+This is a deviation from the C99 Standard. You must rewrite the source code before you can use mcpp. *1
+
+Note:
+*1 This is a spec since GCC2. There is another spec of GCC3 which is a compromise of GCC2 and C99 specs. See 3.9.6.3.
+
+3.9.4.4. Empty Argument During Macro Calls
+The following files have macro invocations with empty arguments:
+catgets/catgetsinfo.h, elf/dl-open.c, grp/fgetgrent_r.c, libio/clearerr_u.c, libio/rewind.c, libio/clearerr.c, libio/iosetbuffer.c, locale/programs/ld-ctype.c, locale/setlocale.c, login/getutent_r.c, malloc/thread-m.h, math/bits/mathcalls.h, misc/efgcvt_r.c, nss/nss_files/files-rpc.c, nss/nss_files/files-network.c, nss/nss_files/files-hosts.c, nss/nss_files/files-proto.c, pwd/fgetpwent_r.c, shadow/sgetspent_r.c, sysdeps/unix/sysv/linux/bits/sigset.h, sysdeps/unix/dirstream.h
+math/bits/mathcalls.h, in particular, contains as much as 79 empty arguments. This header file is installed in /usr/include/bits/mathcalls.h and is #included by /usr/include/math.h. Even with an EMPTY macro, nested macro invocations generate a lot of empty arguments. Are there any other ways to write macros more clearly?
+
+3.9.4.5. Object-Like Macros Replaced with Function-like Macro Name
+The following files contain object-like macro definitions replaced with function-like macro names:
+argp/argp-fmtstream.h, ctype/ctype.h, elf/sprof.c, elf/dl-runtime.c, elf/do-rel.h, elf/do-lookup.h, elf/dl-addr.c, io/ftw.c, io/ftw64.c, io/sys/stat.h, locale/programs/ld-ctype.c, malloc/mcheck.c, math/test-*.c, nss/nss_files/files-*.c, posix/regex.c, posix/getopt.c, stdlib/gmp-impl.h, string/bits/string2.h, string/strcoll.c, sysdeps/i386/i486/bits/string.h, sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h
+Of these, some function-like macros, like the ones in math/test-*.c , are first replaced with an object-like macro name and then further replaced with a function-like macro name. Why did these macros have to be written in this way?
+
+
+sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h, and malloc/malloc.c contain the following macro definition expanded to the "defined" pp-token.
+
+#define HAVE_MREMAP defined(__linux__) && !defined(__arm__)
+
+The intention of this macro definition is that with the following directive,
+
+#if HAVE_MREMAP
+
+the above line is expected to be expanded as follows:
+
+#if defined(__linux__) && !defined(__arm__)
+
+However, the behavior is undefined in Standard C when a #if line has a "defined" pp-token in a macro expansion result. Apart from it, this macro definition is strange in the first place.
+The HAVE_MREMAP macro is first replaced with the following,
+
+defined(__linux__) && !defined(__arm__) (1)
+
+and then the identifiers defined, __linux__ and __arm__ are rescanned for more macro replacement. If any of them is a macro, it is expanded. In this case, defined cannot be defined as a macro (Otherwise, it causes another undefined result), and if __linux__ is defined as 1 and __arm__ is not defined, this macro is finally expanded as follows:
+
+defined(1) && !defined(__arm__)
+
+defined(1), of course, is a syntax error of a #if expression.
+However, GCC/cpp stops macro expansion at (1) and regards it as the final macro expansion result of the #if line. Since this is "undefined" anyhow, this GNU specification cannot be described as wrong, but it lacks of consistency in that how to expand a macro differs between macros in a #if line and in other lines. At least, it lacks of portability. *1
+The above code should be written as follows:
+
+#if defined(__linux__) && !defined(__arm__)
+#define HAVE_MREMAP 1
+#endif
+
+I hope this kind of confusing code be eliminated as early as possible. *2
+Note:
+*1 GCC 2/cpp internally treats defined in a #if line as a special macro. For this reason, when GCC/cpp rescans the following sequence of tokens for macro expansion, it evaluates it as a #if expression, as a result of special handling of defined pseudo-macro, instead of expanding the original macro. In other words, distinction between macro expansion and #if expression evaluation is ambiguous.
+
+defined(__linux__) && !defined(__arm__)
+
+This problem relates to GCC/cpp' own program structure. GCC 2/cpp has a de facto main routine rescan(), which is a macro rescanning routine. This routine reads and processes source file from the beginning to the end, during the course of which, it calls a preprocessing directive processing routine. Although implementing everything using macros is a traditional program structure of a macro processor, this structure can be thought to cause mixture of macro expansion and other processing.
+*2 In glibc 2.4, this macro was corrected.
+Nevertheless, many other macros of the same sort were newly defined.
+
+3.9.4.7. Preprocessing .S File
+The files named *.S contain assembler source code requiring preprocessing. Some of these files have preprocessing directives, such as #include, #define, and #if. In addition, the file named compile/csu/crti.S generated by Make contains the following lines:
+
+#APP
+
+or
+
+#NO_APP
+
+From a syntax point of view, preprocessors cannot tell whether these lines are invalid preprocessing directives or valid assembler comments. GCC seems to leave these lines as they are during preprocessing and treat it as assembler comments.
+Concatenation of pp-tokens using the ## operator sometimes generates an invalid pp-token. GCC/cpp outputs these pp-tokens without issuing a diagnostic.
+For compatibility with GCC, I reluctantly decided that, with the -lang-asm (-x assembler-with-cpp, -a) option, mcpp does not treat these non-conforming directives and invalid pp-tokens generated by ## as error, and outputs them as they are and issues a warning.
+Essentially, these sources should be processed with an assembler macro processor. GNU seems to provide a macro processor called gasp, but it seems to be scarcely used for some reason.
+
+
+When invoked with the -dM option, GCC outputs only macro definitions, which is used by stdlib/isomac.c in 'make check' routine.
+The problem of the isomac.c is that it accepts only GCC/cpp's macro definition file format and regards a comment or a blank line as an error.
+Glibc make sometimes uses a program called rpcgen. The problem of rpcgen is that it accepts only GCC/cpp's output format of preprocessor line number information as follows:
+
+#123 "filename"
+
+Rpcgen does accept neither:
+
+#line 123
+
+nor
+
+#line 123 "filename"
+
+Rpcgen regards them as error.
+I reluctantly decided that GCC-specific-mcpp uses the GCC format by default. Rpcgen's specification is poor in that it is based on a particular compiler system's format and cannot accept the standard one.
+
+3.9.4.9. -include, -isystem and -I- Options
+Glibc 2.1 'makefile' often uses the -include option and sometimes uses -isystem and -I- options. The former can be substituted with #include at the beginning of source code. The latter two are less necessary; these are only necessary to update system headers.
+Only GCC-specific-build of mcpp implements these two options, but I would like these less necessary options to be made obsolete. *1
+Note:
+*1 GCC/cpp provides several more options that specify include directories and their search orders, such as -iprefix, -iwithprefix, and -idirafter. It also provides the -remap option that specifies mapping between long-file-names and MS-DOS 8+3 format filenames. On CygWIN systems, specs files contain these options, but it is not necessary to use these options because include directories can be specified with environment variables and because such mapping is no longer necessary on CygWIN.
+
+3.9.4.10. Undocumented Predefined Macros
+This is not a problem of glibc, but of GCC. The following macros are GCC/cpp predefined macros although their names do not appear in documentation.
+
+__VERSION__, __SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__
+
+On Vine Linux 2.1 (egcs-1.1.2) systems, __VERSION__ is set to "egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)". On many systems, including Linux/i386, the values of other three macros have types unsigned int, int, and long int, respectively. However, on FreeBSD and CygWIN systems, their types are slightly different from them (I do not know why). Why does those predefines macros remain undocumented?
+
+3.9.4.11. Undocumented Environment Variables
+The most strange thing is the undocumented environment variable named SUNPRO_DEPENDENCIES. sysdeps/unix/sysv/linux/Makefile contains the following script:
+
+SUNPRO_DEPENDENCIES='$ (@:.h=.d)-t $@' \
+$ (CC) -E -x c $ (sysinclude) $< -D_LIBC -dM | \
+... \
+etc.
+
+The intent of this script is to specify a file name with the environment variable SUNPRO_DEPENDENCIES, and to have cpp output macro definitions in source code and dependency description lines between source files to that file.
+I had no other way but to read the GCC/cpp source code (egcs-1.1.2/gcc/cccp.c) to know how this environment variable works.
+In addition, there is another environment variable, DEPENDENCIES_OUTPUT, which has a similar function. The difference between the two is that SUNPRO_DEPENDENCIES also outputs dependency description lines among system headers, but DEPENDENCIES_OUTPUT does not.
+Only GCC-specific-build of mcpp enables these two environment variables, but I would like these undocumented specifications to be made obsolete as early as possible.
+
+3.9.4.12. Other Problems
+Linux (i386)/GCC 2 appends the -Asystem(unix), -Acpu(i386) or -Amachine(i386) to cpp invocation options by using specs file. As long as the glibc 2.1.3 for Linux/x86 is concerned, there seems to be no source code that utilizes this functionality.
+It is a big problem that glibc's system headers have become patchy and very complicated. A small difference in settings may result in a big difference in preprocessing results.
+On the other hand, Glibc 2.1.3 did not contain #else junk, #endif junk, or duplicate macro definitions that were found in FreeBSD 2.2.2/kernel sources. In some aspects, Glibc 2.1 source is better organized than FreeBSD 2/kernel source.
+However, as a whole, there were not a few sources that are based on GCC-specific specifications in glibc 2.1, which impairs portability to other compiler systems although such sources form only a small portion of several thousand source files. Dependence on GCC local specifications is not desirable for program readability and maintainability. I hope that GCC V.3 will make obsolete these local specifications and that all the source code based on them will be completely rewritten.
+
+
+You must modify some source code as follows before you can use mcpp to compile glibc 2.1 sources: *1
+
+- Macro definitions with variable number of arguments: Modify the 14 files in 3.9.4.3 as shown in 3.9.1.6. Of course, you had better save the original files.
+
+ - Macros contained in the three files shown in 3.9.4.6 that has defined in its replacement list: /usr/include/_G_config.h is a file generated when sysdeps/unix/sysv/linux/_G_config.h is installed and has the same contents with this. You had better modify /usr/include/_G_config.h.
+
+In addition to the options specified in Makefile or specs file, you must specify the -lang-asm (-xassembler-with-cpp) option to process *.S files containing multi-line string literals or assembler comments before you can invoke mcpp. Usually, you can leave this option specified when preprocessing other files.
+When you want to use GCC/cpp or mcpp, or change the default options, you had better perform the following steps:
+
+- Become a super-user to move to the directory where cpp resides (here assuming /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66). Let me assume that this directory has GCC/cpp installed under the name of cpp and mcpp as mcpp.
+
+ - Create a file called mcpp.sh with the following contents. *2
+
+#!/bin/sh
+/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/mcpp -Q -lang-asm "$@"
+
+The -Q options are optional, however, I recommend that you should use -Q to record a large amount of diagnostic messages.
+
+ - Enter the following commands:
+
+chmod a+x mcpp.sh
+mv cpp cpp_gnuc
+ln -sf mcpp.sh cpp
+
+These commands execute mcpp.sh linked to cpp when gcc calls cpp, and mcpp.sh calls mcpp using the above options before the ones specified by gcc.
+
+ - To change default options, modify mcpp.sh or call mcpp directly. To use GCC/cpp do:
+
+ln -sf cpp_gnuc cpp
+
+
+Note:
+*1 mcpp V.2.7 implemented these specs.
+Hence, editing of sources are not necessarily required.
+*2 If you use 'configure' and 'make' to compile GCC-specific-build of mcpp, the 'make install' command will set the script appropriately. The only thing left for you here is to add '-Q -lang-asm' options to the script.
+
+
+Another problem of using mcpp is that it issues a huge amount of warning messages. You can redirect them to a file using the -Q option, but when you preprocess a large amount of source code, such as glibc, total of several hundred MB or more of 'mcpp.err' are created, so it is impossible for you to look through the whole files.
+Taking a close look at mcpp.err, you will find same warnings being issued repeatedly. This is because the same *.h files are #included by many source programs. To make the files more readable, perform the following procedure:
+
+- To find error messages, enter the following command:
+
+grep 'fatal:' `find . -name mcpp.err`
+grep 'error:' `find . -name mcpp.err`
+
+ - To sort warning messages, enter the following command:
+
+grep 'warning:' `find . -name mcpp.err` | sort -k3 -u > mcpp-warnings-sorted
+
+ - To find all the source lines causing a 'warning:', enter the following command:
+
+grep 'warning:' `find . -name mcpp.err` | sort -k3 | uniq > mcpp-warnings-all
+
+ - To find a particular type of 'warning:'s, enter the following command, for example:
+
+grep 'warning: Replacement' `find . -name mcpp.err` | sort -k3 | uniq | less
+
+After you get an overall idea of what source lines are causing what kinds of errors or warnings, you can see a particular mcpp.err by "less" and then, if necessary, see the source file in question.
+
+In addition, you can sandwich the source code in question with '#pragma MCPP debug expand' and '#pragma MCPP end_debug' and preprocess it again to see the output, in which case I recommend you to invoke mcpp in the following manner so that preprocessing results and diagnostic messages are output to the same file:
+
+mcpp <-opts> in-file.c > in-file.i 2>&1
+
+When you use "make", you must temporarily change the above shell-script.
+
+
+
+I first compiled GCC 3.2 sources on Linux and FreeBSD, then I used the generated gcc to compile mcpp and then I recompiled GCC 3.2 sources using mcpp for preprocessing.
+New GCC compilers are bootstrapped during various phases of make; gcc and cc1, etc generated in an earlier phase are used to recompile themselves, and those generated compiler drivers and compiler-propers are used again to recompile themselves, and so on. During the bootstrap, gcc exists under the name of xgcc.
+Other than cc1 and cc1plus, GCC 2 has a separate preprocessor called cpp. In GCC 3, cpp was absorbed into cc1 and cc1plus. However, there still exists a separate preprocessor cpp0. To have cpp0 preprocess, the -no-integrated-cpp option must be specified when you invoke gcc or g++. Therefore, to have mcpp preprocess, you must use a shell-script that have gcc (xgcc) or g++ invoke mcpp first then invoke cc1 or cc1plus. *1
+In the GCC compiler system, the settings of system headers and their search order are becoming very complex. So, a small difference in settings may result in a difference in preprocessing results. Even successful compilation was often difficult to attain. In addition, compilation and tests require a lot of other software. Older versions of such software may cause failure in compilation or tests. Actually, compilation sometimes failed due to some hardware problems on my machine.
+Actually, I failed to compile GCC 3.2 source under FreeBSD 4.4R. I had to upgrade FreeBSD to 4.7R and changed software packages to those for FreeBSD 4.7R before I was able to succeed in compilation. *2
+I used VineLinux 2.5 on two PCs. Although compilation of GCC 3.2 sources using GCC 2.95.3 was successful on one PC (K6/200MHz), recompilation of GCC 3.2 sources using the generated GCC 3.2/cc1 failed, and caused many segmentation faults. Then I changed CPU from K6 to AthlonXP. This time, recompilation was successful; no segmentation faults occurred. Hardware may have caused the problem.
+When I compiled GCC 3.2 sources using GCC 2.95.4 under FreeBSD on K6, "make -k check" of the generated gcc was almost successful. When I recompiled GCC 3.2 itself using the generated GCC 3.2, in "make -k check" of g++ and libstdc++-v3, about 20 percent of testsuite was unsuccessful. However, when using AthlonXP, instead of K6, everything went OK. Hardware may have caused the problem.
+On both VineLinux PCs, when I recompiled GCC 3.2 sources using GCC 3.2 itself and mcpp, "make -k check" of the generated gcc was successful. However, in "make -k check" of g++ and libstdc++-v3, 20 percent of testsuite failed. *3, *4, *5
+In anyway, the cause of this testsuite failure seems to lie not in the generated compilers themselves, such as gcc, g++, cc1 and cc1plus, but in the header files or some other settings.
+mcpp cannot be described as completely compatible with GCC/cpp, but is highly compatible. So, mcpp and GCC/cpp can be used interchangeably.
+GCC 3.2 sources were compiled in the following environment:
+
+
+ OS | make | library | CPU |
+ VineLinux 2.5 | GNU make | glibc 2.2.4 | Celeron/1060MHz |
+ VineLinux 2.5 | GNU make | glibc 2.2.4 | K6/200MHz, AthlonXP/2.0GHz |
+ FreeBSD 4.7R | UCB make | libc.so.4 | K6/200MHz, AthlonXP/2.0GHz |
+
+
+Only C and C++ were compiled.
+Note:
+*1 I had to do this for each bootstrap stage. Since makefile is too large and too complex to change, I employed an inelegant method; I kept on sitting in front of PC screen during the entire process of bootstrap. At each end of the stages, I entered ^C and replaced xgcc and others with shell-scripts.
+*2 Due to dependency between packages, the system falls into confusion unless appropriate versions are installed. Actually, for this reason, my FreeBSD temporarily failed to invoke kterm.
+*3 "make -k check" cannot be used with mcpp because diagnostics of mcpp are different from those of GCC.
+*4 "make -k check" seems to require an English environment, so the LANG environment variable should be set to C.
+*5 All the testsuite failures were caused by inability of the pthread_* functions, such as pthread_getspecific and pthread_setspecific, to be linked in the library i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.5.0.0. When a correctly generated library was installed, "make -k check" was successful. On FreeBSD, this problem never happened. This is probably because of small differences in settings.
+
+3.9.6.1. Multi-Line String Literal
+This very old way of coding was no longer found in GCC 3.2 sources. Multi-line string literals were made obsolete as late as at GCC 3.2. GCC 3.2 processes a source with a multi-line string literal as you expect, but issues a warning.
+
+3.9.6.2. #include_next and #warning
+limits.h and syslimits.h in build/gcc/include generated during the course of make have #include_next. When GCC 3.2 is installed, these header files are copied to limits.h and syslimits.h in lib/gcc-lib/i686-pc-linux-gnu/3.2/include.
+GCC 3.2 sources does not have #warnings.
+
+
+GCC 3.2 sources have some variable argument macros, but most of them are found in testsuite and they are nothing but test samples. Although GCC 3.2 still supports variable argument macros in GCC 2 notation, the ones using __VA_ARGS__ (in C99 notation) are more frequently found in GCC 3.2 sources.
+In GCC 3, variable argument macros in a mixed notation of GCC 2 and C99 are found: *1
+
+#define eprintf( fmt, ...) fprintf( stderr, fmt, ##__VA_ARGS__)
+
+This definition corresponds to the following one of GCC 2 spec.
+
+#define eprintf( fmt, args...) fprintf( stderr, fmt, ##args)
+
+According to the GCC specifications, in the absence of an argument corresponding to "...", the comma immediately before "##" is deleted. So, this is expanded as follows:
+
+eprintf( "success!\n") ==> fprintf( stderr, "success!\n")
+
+As far as this example is concerned, this specification seems to be convenient, but is not desirable in that (1) a comma in a replacement list of a macro definition is not always used to delimit parameters, (2) it allows a token concatenation operator (##) to have other functionality, (3) it makes rules more complex by allowing exceptions. *2, *3, *4
+
+Note:
+*1 This manual calls the variadic macro of specification since GCC 2 as GCC2 spec, and that of created in GCC 3 as GCC3 spec.
+*2 While on GCC 2.* 'args...' in definition of GCC2 spec variadic macro should not be separated as 'args ...', on GCC 3 the intervening spaces are allowed.
+*3 When -ansi option (or any of -std=c* or -std=iso* option) is specified, GCC, however, does not remove the comma even if the variable argument is absent.
+Nevertheless, the '##' disappears silently.
+*4 mcpp V.2.6.3 implemented variadic macro of GCC3 spec for STD mode on GCC-specific-build only.
+V.2.7 even implemented GCC2 spec one.
+
+3.9.6.4. Empty Arguments in Macro Invocation
+Apart from #include-ed system headers, such as /usr/include/bits/mathcalls.h and /usr/include/bits/sigset.h, empty arguments in a macro invocation are found only in gcc/libgcc2.h of GCC 3.2 sources themselves. *1
+Note:
+*1 These two header files are copied into the system header directory when glibc is installed. They do not exist on FreeBSD because glibc is not used.
+
+3.9.6.5. Object-Like Macros Replaced with Function-Like Macros
+gcc/fixinc/gnu-regex.c and libiberty/regex.c have object-like macros that are replaced with function-like macro name. /usr/lib/bison.simple, a #included file, also has such macros. These macros are all relevant to alloca. For example, libiberty/regex.c has the following macro definitions.
+
+#define REGEX_ALLOCATE alloca
+#define alloca( size) __builtin_alloca( size)
+
+This should be written as follows:
+
+#define REGEX_ALLOCATE( size) alloca( size)
+
+Why did they omit (size)?
+In addition, regex.c also has another alloca, which is defined as follows:
+
+#define alloca __builtin_alloc
+
+Their writing style is inconsistent.
+Furthermore, regex.c has a #include "regex.c" line, which is including itself. regex.c is a strange and unnecessarily complicated source.
+
+3.9.6.6. Macros Expanded to 'defined'
+GCC 3.2 sources do not have macros expanded to 'defined'. According to GCC 3.2 documents, this type of macro is preprocessed in the same way as GCC 2/cpp, but GCC 3.2 issues a warning to indicate "may not portable". However, GCC 3.2 does not issue a warning to an example shown in 3.9.4.6.
+
+3.9.6.7. Preprocessing of .S Files
+cpp.info of GCC 3 says:
+Wherever possible, you should use a preprocessor geared to the
+language you are writing in. Modern versions of the GNU assembler have
+macro facilities.
+However, the gcc/config directory has several *.S files.
+
+3.9.6.8. rpcgen and -dM Option
+Make of GCC 3.2 uses neither rpcgen nor -dM option. However, specifications of rpcgen and the -dM option do not seem to change from the previous versions.
+
+3.9.6.9. -include, -isystem and -I- Options
+These options are frequently used in make of GCC 3.2. Sometimes, the -isystem option is used to specify several system include directories at one time. Is it inevitable to use the option during software compilation that updates system headers themselves? I think they had better use an environment variable to specify all the system include directories.
+On the other hand, GCC 3/cpp documents discourage to use the -iwithprefix and -iwithprefixbefore options. GCC provides many options to specify include directories. Does GCC 3.2 move toward reorganization or reduction in number of them? *1
+Note:
+*1 GCC 3.2 Makefile uses the -iprefix option in a stand alone manner (without using -iwithprefix or -iwithprefixbefore), although the -iprefix option makes sense only when used with one of these two options following it.
+
+3.9.6.10. Undocumented Predefined Macros
+GCC 2 did not document predefined macros, such as __VERSION__, __SIZE_TYPE__, __PTRDIFF_TYPE__ and __WCHAR_TYPE__. Even with the -dM option, their existence was unknown. GCC 3 not only documents them but also enhances -dM to show their definitions.
+
+3.9.6.11. Undocumented Environment Variables
+GCC 3 documents the SUNPRO_DEPENDENCIES environment variable GCC 2 did not. (I do not know why this environment variable is needed.)
+
+3.9.6.12. Other Problems
+GCC 3 implements following #pragmas:
+
+#pragma GCC poison
+#pragma GCC dependency
+#pragma GCC system_header
+
+Of these, GCC 3.2 sources use poison and system_header. mcpp does not support these #pragmas because I do not think them necessary. (I omit explanation of their specifications.) *1
+GCC 3 deprecates assertion directives, such as #assert, although gcc, by default, specifies the -A option.
+In GCC 2, the -traditional option is implemented in one and the same cpp, result in a strange mixture of very old specifications and C99 ones. In GCC 3, its preprocessor was divided into two: non-traditional cpp0 and tradcpp0. The -traditional option is valid only for gcc. cpp0 does not provides it. gcc -traditional invokes tradcpp0 for preprocessing.
+tradcpp0 is getting closer to a true traditional preprocessor before C90. They say that they no longer maintain tradcpp0 except for serious bugs.
+The strange specifications of GCC 2/cpp seem to have been significantly revised.
+Note:
+*1 mcpp V.2.7 onward supports #pragma GCC system_header on GCC-specific-build.
+
+
+As seen above, as far as preprocessing is concerned, GCC 3.2 sources have been much improved than glibc 2.1.3 sources in that the traditional way of writing has been almost eliminated and that meaningless options are no longer used.
+GCC 3.2/cpp0 itself is also much superior to GCC 2/cpp in that it regards traditional specifications as obsolete and articulates the token-based principle. Undocumented specifications have been significantly reduced. Although these improvements are not still sufficient, GCC is certainly moving toward the right direction.
+However, GNU / Linux system headers become so complex that it is difficult to grasp their entire structure, which may one of the biggest causes of problems in the GNU / Linux system.
+Another pitiful fact is that the preprocessor is absorbed into the compiler-proper. Therefore, to use mcpp, the -no-integrated-cpp option must be specified when invoking gcc or g++. If you compile a large amount of source files with complicated or many makefiles, or if some program automatically invoke gcc, you should create a shell-script that invokes gcc or g++ with the -no-integrated-cpp option automatically specified.
+Let me take an example of this. Place the following shell-scripts in the directory where gcc and g++ reside (on my Linux, /usr/local/gcc-3.2/bin), under the names of gcc.sh and g++.sh, respectively.
+
+#!/bin/sh
+/usr/local/gcc-3.2/bin/gcc_proper -no-integrated-cpp "$@"
+
+#!/bin/sh
+/usr/local/gcc-3.2/bin/g++_proper -no-integrated-cpp "$@"
+
+Move to this directory and enter the following commands:
+
+chmod a+x gcc.sh g++.sh
+mv gcc gcc_proper
+mv g++ g++_proper
+ln -sf gcc.sh gcc
+ln -sf g++.sh g++
+
+In the directory where cpp is located (on my Linux, /usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2), create a script that executes mcpp when cpp0 is invoked, as you did for GCC 2 (See 3.9.5). By doing this, gcc or g++ first invokes mcpp and then invokes cc1 or cc1plus with the -fpreprocessed option appended. -fpreprocessed indicates the source has been preprocessed already. *1
+Note that when a GCC version other than the system standard one is installed, additional include directory settings may be required. mcpp embeds these settings when mcpp itself is compiled, thus eliminating the need to set them with environment variables.
+If possible, I want to replace the cpplib source, the preprocessing part of cc1 or cc1plus, with mcpp. The source files that define the internal interface between cpplib and ccl or cc1plus, as well as the external interface between cpplib and user programs that use it, amount to as much as 46KB. It is impossible to replace. Why is the interfaces so complex? It is a pity.
+Note:
+*1 mcpp gets all the necessary informations by 'configure' and sets these scripts by 'make install'.
+
+3.9.7.1. To Use mcpp with GCC 3.3 and 3.4-4.1
+Although GCC 3.2 seemed to go in the direction of better portability, GCC turned its direction to a different goal on 3.3 and 3.4. V.3.3 and 3.4 differ from 3.2 in the following points.
+
+- Independent preprocessor cpp0 was abolished. The execution option '-no-integrated-cpp' changed its meaning, gcc invokes cc1 (cc1plus) instead of cpp0 as a preprocessor even if this option is specified, and gcc passes to the preprocessor some options which are irrelevant to preprocessing. (What a dirty implementation!)
+ - Many (several dozen of) macros are predefined. The relationship between the system headers and GCC became more complicated.
+ - Tradcpp was also abolished and absorbed to an execution option of cc1. Some old specifications, which were obsoleted or deprecated in V.3.2, were restored.
+
+GCC / cc1 is becoming one huge and complex compiler absorbing preprocessor and some system header's contents. I doubt whether this is a better way of compiler construction, especially of developing open source one.
+As regards mcpp, it is a nuisance that gcc arbitrarily hands to preprocessor some irrelevant options. Since it is risky to ignore all the options unrecognized by mcpp, I didn't adopt this. Although mcpp ignores the wrong options such as -c or -m* which are frequently handed from gcc, it will get an error if other unexpected options are passed on.
+In order to avoid conflicts with those wrong options, mcpp V.2.5 changed some options, -c to -@compat, -m to -e, and some others.
+To use mcpp with GCC 3.2 or former, it is necessary only to replace invoking of cpp0 by mcpp. To use mcpp with GCC 3.3 or later, it is necessary to divide invoking of cc1 to mcpp and cc1. src/set_mcpp.sh will write shell-scripts for this purpose in the GCC libexec directory on mcpp installation. The 'make install' command will also get GCC predefined macros using -dM option and set those for mcpp. *1, *2, *3
+In addition, GCC 3.4 changed processing of multi-byte characters. Its document says as: *4
+
+- It converts every encodings of multi-byte characters to UTF-8 at the first phase of preprocessing.
+ - It uses libiconv functions for the conversion, therefore it can handle all the encodings iconv can do.
+ - It has '-finput-charset=<encoding>' option to specify the source file's encoding. (In other words, the encoding is not converted without this option.)
+ - It has also '-fexec-charset=<encoding>' option to specify the output encoding which defaults to UTF-8. *5
+
+There is a trend to identify "internationalization" with "unicodization", especially in the Western people who do not use multi-byte characters. It seems that this trend has reached to GCC.
+What is worse, GCC 3.4 or later does not implement their specification sufficiently. In actual, it behaves as:
+
+- As for EUC-JP, GB2312, KSC-5601 and Big5, it converts these encodings to UTF-8 correctly with -finput-charset option, and it passes them as they are without this option. *6
+ - The -fexec-charset option has no effect on V.3.4 nor V.4.0. On V.4.1-4.3, the option has effect, and works correctly.
+ - With ISO2022-JP, GCC cannot preprocess on V.3.4 or 4.0, whereas on V.4.1-4.3 it can preprocess the encoding.
+ - As for shift-JIS, all the versions confuse in preprocessing when -finput-charset is specified.
+
+mcpp takes -e <encoding> option to specify an encoding, and the GCC-specific-build inserts <backslash> to the byte in multi-byte character which has the same value with <backslash>, '"' or '\'', when the encoding is one of BIG-5, shift-JIS or ISO2022-JP, in order to complement GCC's inability. However, it does not convert the encoding to UTF-8. mcpp also treats -finput-charset as the same option as -e. I adopted these specifications because: *7
+
+- As for shift-JIS, GCC of any version cannot process it if -f*-charset options are specified.
+But, as for shift-JIS, ISO2022-JP and Big5, if the encodings are not converted but supplemented with <backslash>es, the multi-byte characters are output as they are by cc1 on any version of GCC.
+Also EUC-JP, GB2312, KSC-5601 and UTF-8 are passed as they are, if -f*-charset are not specified.
+That is to say, the multi-byte characters are treated as single-byte character sequences.
+ - GCC up to V.4.0 / cc1 does not convert back from UTF-8 to the original encodings.
+ - I hope that GCC will change the multi-byte character handling in the near future.
+
+Note:
+*1 The output of -dM option, however, slightly differs each other depending on other options.
+What is worse, most of the predefined macros are undocumented ones.
+As a result, the whole picture cannot be grasped easily.
+*2 MinGW does not support symbolic link. Though the 'ln -s' command exists, it does not link but only copy. Moreover, MinGW's GCC rejects to invoke a shell-script even if it is named cc1. To cope with this, mcpp's MinGW GCC-specific-build generates a binary executable named cc1.exe (copied also to cc1plus.exe) which invokes mcpp.exe or GCC's cc1.exe/cc1plus.exe.
+*3 CygWIN / GCC has -mno-cygwin option which alters system include directory and alters GCC's predefined macros. mcpp V.2.6.1 onward, CygWIN GCC-specific-build supports this option and generates two sets of header files for the predefined macros.
+*4 On GCC in my FreeBSD 6.3, multi-byte character conversion to UTF-8 does not work at all, though libiconv seems to be linked to them.
+It was the same with FreeBSD 5.3 and 6.2, too.
+*5 This conversion seems not to be done in preprocessing phase, but in compilation phase.
+Output of -E option is still UTF-8.
+*6 GCC V.4.1-4.3 fail to compile due to a bug of GCC, if -save-temps or -no-integrated-cpp option is specified at the same time with -f*-charset option.
+*7 When you pass the output of mcpp to cc1, you should not specify -fexec-charset option nor -finput-charset option.
+
+
+
+I compiled glibc 2.4 (March, 2006) source, and checked preprocessing problems in it.
+As a compiler system, I used GCC 4.1.1 with mcpp 2.6.3.
+Since my machine is x86 type, I did not check the codes for other CPUs.
+This is a six years newer version than glibc 2.1.3 (February, 2000) which I checked formerly, so it has naturally some parts largely changed from the old version.
+However, It has remarkably many parts unchanged.
+On the whole, most of the problems I noticed in the old version have not been revised, on the contrary, unportable sources have increased.
+
+3.9.8.1. Multi-Line String Literal
+
+The old-fashioned "multi-line string literal" has disappeared.
+
+3.9.8.2. #include_next, #warning
+
+#include_next is found in the following source files.
+Its occurrence has increased as compared with the six years older version.
+
+
+catgets/config.h,
+elf/tls-macros.h,
+include/bits/dlfcn.h,
+include/bits/ipc.h,
+include/fpu_control.h,
+include/limits.h,
+include/net/if.h,
+include/pthread.h,
+include/sys/sysctl.h,
+include/sys/sysinfo.h,
+include/tls.h,
+locale/programs/config.h,
+nptl/sysdeps/pthread/aio_misc.h,
+nptl/sysdeps/unix/sysv/linux/aio_misc.h,
+nptl/sysdeps/unix/sysv/linux/i386/clone.S,
+nptl/sysdeps/unix/sysv/linux/i386/vfork.S,
+nptl/sysdeps/unix/sysv/linux/sleep.c,
+sysdeps/unix/sysv/linux/ldsodefs.h,
+sysdeps/unix/sysv/linux/siglist.h
+
+
+Though the following is not a part of glibc itself but a testcase file to test glibc by 'make check', #include_next is found also in it.
+
+sysdeps/i386/i686/tst-stack-align.h
+
+#warning appears in sysvipc/sys/ipc.h.
+This directive is in a block to be skipped in normal processing, and does not cause any problem.
+
+3.9.8.3. Variable Argument Macros
+
+There are definitions of variable argument macros in the following files.
+All of these are that of the old spec since GCC2.
+There is not any macro of C99 spec, nor even GCC3 spec one.
+
+elf/dl-lookup.c,
+elf/dl-version.c,
+include/libc-symbols.h,
+include/stdio.h,
+locale/loadlocale.c,
+locale/programs/ld-time.c,
+locale/programs/linereader.h,
+locale/programs/locale.c,
+locale/programs/locfile.h,
+nptl/sysdeps/pthread/setxid.h,
+nss/nss_files/files-XXX.c,
+nss/nss_files/files-hosts.c,
+sysdeps/generic/ldsodefs.h,
+sysdeps/i386/fpu/bits/mathinline.h,
+sysdeps/unix/sysdep.h,
+sysdeps/unix/sysv/linux/i386/sysdep.h
+
+The following testcase files also have variadic macro definitions of GCC2 spec.
+
+localedata/tst-ctype.c,
+posix/bug-glob2.c,
+posix/tst-gnuglob.c,
+stdio-common/bug13.c
+
+Moreover, many of the calls of these macros lack actual argument for variable argument.
+As much as 142 files have such macro calls lacking variable argument, and 120 files of them have such unusual macro calls as the replacement list of which have ", ##" sequence immediately preceding variable argument and hence removal of the ',' happen.
+As a variable argument macro specification, C99 one is portable and is recommendable.
+However, it is not so easy to rewrite GCC specs macro to C99 one.
+Both of GCC2 spec and GCC3 spec variadic macros do not necessarily correspond to C99 spec one-to-one, because GCC specs cause removal of the preceding comma in case of absence of variable argument.
+If you rewrite GCC spec macro definition to C99 one, you also need to rewrite macro calls of absent variable argument and supplement an argument.
+In glibc 2.1.3, GCC2 spec macros were not so many, and it was not a heavy work for a user to rewrite them with an editor.
+In glibc 2.4, however, such macro definitions increased and especially their calls vastly increased.
+As a consequence, it is impossible now for a user to rewrite them.
+To cope with this situation, mcpp V.2.6.3 onward implemented GCC3 spec variadic macro for GCC-specific-build only.
+Furthermore, mcpp V.2.7 implemented GCC2 spec one, too.
+However, you should not write GCC2 spec macro in your sources, because the spec is too deviant from token-based principle.
+Since GCC2 spec corresponds to GCC3 spec one-to-one, it is easy to rewrite a macro definition to GCC3 spec, and call of that macro need not be rewritten.
+The already written macros with GCC2 spec will become a little clearer, if rewritten this way. *1
+To rewrite a GCC2 spec variadic macro to GCC3 spec one, for example, change:
+
+
+#define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+
+
+to:
+
+
+#define libc_hidden_proto(name, ...) hidden_proto (name, ## __VA_ARGS__)
+
+
+That is, change the parameter attrs... to ..., and change attrs in the replacement-list to __VA_ARGS__.
+
+Note:
+*1 As for variadic macro of GCC2 spec and GCC3 spec, see 3.9.1.6, 3.9.6.3 respectively.
+
+3.9.8.4. Empty Argument During Macro Calls
+
+The macro calls with any empty argument are found in as many as 488 source files.
+They have greatly increased since the old version.
+C99 approval of empty macro argument may have influenced the tendency.
+
+In particular, math/bits/mathcalls.h has as many as 79 macro calls with empty argument.
+That is the same with the old version.
+
+3.9.8.5. Object-Like Macros Replaced with Function-like Macro Name
+
+The following files have object-like macro definitions replaced to function-like macro names:
+
+argp/argp-fmtstream.h,
+hesiod/nss_hesiod/hesiod-proto.c,
+intl/plural.c,
+libio/iopopen.c,
+nis/nss_nis/nis-hosts.c,
+nss/nss_files/files-hosts.c,
+nss/nss_files/files-network.c,
+nss/nss_files/files-proto.c,
+nss/nss_files/files-rpc.c,
+nss/nss_files/files-service.c,
+resolv/arpa/nameser_compat.h,
+stdlib/gmp-impl.h,
+string/strcoll_l.c,
+sysdeps/unix/sysv/linux/clock_getres.c,
+sysdeps/unix/sysv/linux/clock_gettime.c
+
+elf/link.h has function-like macro definitions replaced to function-like macro names. For example,:
+
+
+#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type)
+ /* sysdeps/generic/ldsodefs.h:46 */
+#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) /* elf/link.h:32 */
+#define _ElfW_1(e,w,t) e##w##t /* elf/link.h:33 */
+#define __ELF_NATIVE_CLASS __WORDSIZE /* bits/elfclass.h:11 */
+#define __WORDSIZE 32 /* sysdeps/wordsize-32/bits/wordsize.h:19 */
+#define ELF32_ST_TYPE(val) ((val) & 0xf) /* elf/elf.h:429 */
+
+
+with the above macro definitions,
+
+
+ && ELFW(ST_TYPE) (sym->st_info) != STT_TLS /* elf/do-lookup.h:81 */
+
+
+in this macro call, ELFW(ST_TYPE) is expanded with the following steps:
+
+
+ ELFW(ST_TYPE)
+ _ElfW(ELF, __ELF_NATIVE_CLASS, ST_TYPE)
+ _ElfW_1(ELF, 32, _ST_TYPE)
+ ELF32_ST_TYPE
+
+
+Then, ELF32_ST_TYPE with the subsequent sequence (sym->st_info) is expanded to ((sym->st_info) & 0xf).
+That is to say, a function-like macro call of _ElfW_1(ELF, 32, _ST_TYPE) is expanded to name of another function-like macro ELF32_ST_TYPE.
+
+These macros become more clear, if the 3 definitions of above 6 are written as:
+
+
+#define ELFW( type, val) _ElfW( ELF, __ELF_NATIVE_CLASS, type, val)
+#define _ElfW( e, w, t, val) _ElfW_1( e, w, _##t, val)
+#define _ElfW_1( e, w, t, val) e##w##t( val)
+
+
+and if they are used as:
+
+
+ && ELFW(ST_TYPE, sym->st_info) != STT_TLS
+
+
+Although these arguments may seem to be a little redundant, these are more natural than the original ones, if we think of function call syntax.
+
+
+
+The following files contain macro definitions whose replacement-lists have the 'defined' token. *1
+
+iconv/skeleton.c,
+sysdeps/generic/_G_config.h,
+sysdeps/gnu/_G_config.h,
+sysdeps/i386/dl-machine.h,
+sysdeps/i386/i686/memset.S,
+sysdeps/mach/hurd/_G_config.h,
+sysdeps/posix/sysconf.c
+
+Those macros are used in some #if lines of the following files, and also some of the above files themselves.
+
+elf/dl-conflict.c,
+elf/dl-runtime.c,
+elf/dynamic-link.h
+
+In glibc 2.1.3, malloc/malloc.c had a macro definition of HAVE_MREMAP whose replacement-list contained the 'defined' token.
+In glibc 2.4, that macro definition has been revised to portable one, nevertheless the unportable macros of the same sort have increased in other source files.
+In a #if expression, the result of a macro expansion whose replacement-list has the 'defined' token is undefined according to the Standards, and it is only self-satisfaction of GCC to preprocess the expression plausibly and arbitrarily.
+In order to make these sources portable among other preprocessors, at least the definitions of these macros should be rewritten, and in some cases the calls of the macros should be rewritten, too. *2
+In most cases, the simple rewriting is sufficient as seen in 3.9.4.6.
+In some cases, however, this method does not work.
+Those are the cases where evaluation result of 'defined MACRO' differs depending on its timing.
+For example, sysdeps/i386/dl-machine.h has the following macro definition, which is used in some #if expressions on other files.
+
+
+#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
+
+
+Rewriting the definition as follows will not do.
+
+
+#if defined RTLD_BOOTSTRAP
+#define ELF_MACHINE_NO_RELA 1
+#endif
+
+
+The macro RTLD_BOOTSTRAP is defined in elf/rtld.c, if and only that file is included before dl-machine.h.
+In other words, the evaluation result of 'defined RTLD_BOOTSTRAP' depends on the order of including the two files.
+In order to rewrite these sources portable, the macro ELF_MACHINE_NO_RELA should be abandoned since it is useless macro found only in #if lines, and the #if line:
+
+
+#if ELF_MACHINE_NO_RELA
+
+
+should be rewritten as:
+
+
+#if defined RTLD_BOOTSTRAP
+
+
+In glibc, this portable style of #if lines are found on many places, at the same time, the undefined style as above example are also found on some places.
+
+
Note:
+*1 On Linux, /usr/include/_G_config.h is the header file installed from glibc's sysdeps/gnu/_G_config.h, therefore it has the same macro definition as:
+
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+This should be rewritten to:
+
+#if defined (_STATBUF_ST_BLKSIZE)
+#define _G_HAVE_ST_BLKSIZE 1
+#endif
+
+*2 mcpp V.2.7 and later in STD mode on GCC-specific-build handles 'defined' token generated by macro expansion in #if line like GCC.
+Yet, such a bug-to-bug handling should not be depended on.
+
+3.9.8.7. Preprocessing .S File
+
+*.S files are provided for each CPU type, so their number is very large and amounts to more than 1000.
+The files for one CPU type as x86 are some portion of them.
+*.S file is an assembler source with inserted preprocessing directives such as #if or #include, comments or macros of C.
+Since assembler source is not consisted of C token sequence, it accompanies some risks to preprocess it by C preprocessor.
+To process an assembler source, the preprocessor must pass such characters as % or $ (which are not used in C except in string literal or in character constant) as they are, and retain existence or non-existence of spaces as they are.
+Furthermore, the preprocessor must relax syntax checking to pass a sequence which would be an error if it was in C source.
+On the other hand, it must process #if lines or macros like C, and must do some sort of error checking, too.
+What a nuisance!
+These specifications have not any logical basis at all, these are GCC's local and mostly undocumented behaviors and no more.
+
+To illustrate the problems, let me take an example of the following fragment from nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S.
+
+
+ .byte 8 # Return address register
+ # column.
+#ifdef SHARED
+ .uleb128 7 # Augmentation value length.
+ .byte 0x9b # Personality: DW_EH_PE_pcrel
+ # + DW_EH_PE_sdata4
+
+
+'#ifdef SHARED' intends to be a directive of C.
+On the other hand, the latter part of each line starting with # are supposed to be comments.
+'# column.' is, however, syntactically indistinguishable from invalid directive, since the # is the first non-white-space-character of the line.
+'# + DW_EH_PE_sdata4' causes even syntax error in C.
+Another file has the following line, where a single character appears singly.
+In C, a pair of the single quote is used to quote a character constant, and unmatched single quote causes a tokenization error.
+
+
+ movl 12(%esp), %eax # that `fixup' takes its parameters in regs.
+
+
+The above pthread_cond_wait.S also has the following line which is a macro call.
+
+
+versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+ GLIBC_2_3_2)
+
+
+The macros are defined as:
+
+
+# define versioned_symbol(lib, local, symbol, version) \
+ versioned_symbol_1 (local, symbol, VERSION_##lib##_##version)
+ /* include/shlib-compat.h:65 */
+# define versioned_symbol_1(local, symbol, name) \
+ default_symbol_version (local, symbol, name)
+ /* include/shlib-compat.h:67 */
+# define default_symbol_version(real, name, version) \
+ _default_symbol_version(real, name, version)
+ /* include/libc-symbols.h:398 */
+# define _default_symbol_version(real, name, version) \
+ .symver real, name##@##@##version
+ /* include/libc-symbols.h:411 */
+#define VERSION_libpthread_GLIBC_2_3_2 GLIBC_2.3.2
+ /* Created by make: abi-versions.h:145 */
+
+
+The line is expected to be expanded as:
+
+
+.symver __pthread_cond_wait, pthread_cond_wait@@GLIBC_2.3.2
+
+
+The problem is the definition of _default_symbol_version.
+There is no C token containing '@' (except string-literal or character-constant).
+Though pthread_cond_wait@@GLIBC_2.3.2 is a sequence generated by concatenating some parts with ## operator, this is not a C token.
+The concatenation generates illegal tokens also in midst of its processing.
+The macro uses ## operator of C, nevertheless its syntax is far from C.
+In order to do a sort of preprocessing on an assembler source, essentially an assembler macro processor should be used.
+To process assembler codes with C, it is recommended that the asm() or __asm__() function should be used whenever possible, to embed the assembler code in a string literal, and that not *.S but *.c should be used as a file name.
+libc-symbols.h has another version of the above macro as follows which is used for *.c.
+This macro can be processed by Standard-conforming C preprocessor without problem.
+
+
+# define _default_symbol_version(real, name, version) \
+ __asm__ (".symver " #real "," #name "@@" #version)
+
+
+glibc also has many *.c or *.h files which use asm() or __asm()__.
+Nevertheless, it has much more *.S files.
+If you process an assembler source by C preprocessor in any way, at least you should use /* */ or // as comment notation instead of #.
+In actual, many sources of glibc use /* */ or //, whereas some sources use #.
+Having said so, mcpp V.2.6.3 onward relaxed grammar checking largely in lang-asm mode to process these unusual sources, considering that glibc 2.4 has too many *.S files and out-of-C-grammar-sources has increased since 2.1.3.
+
+3.9.8.8. Problems of versions.awk, rpcgen and -dM Option
+
+The problem of stdlib/isomac.c which I referred to at 3.9.4.8 is the same in glibc 2.4.
+Also the problem of rpcgen is unchanged.
+In addition, glibc 2.4 has scripts/versions.awk file, which presupposes GCC's peculiar behavior about the number of line top spaces of preprocessed output.
+In order to use mcpp or other preprocessors, this file should be revised as follows.
+
+
+$ diff -c versions.awk*
+*** versions.awk 2006-12-13 00:59:56.000000000 +0900
+--- versions.awk.orig 2005-03-23 10:46:29.000000000 +0900
+***************
+*** 50,56 ****
+ }
+
+ # This matches the beginning of a new version for the current library.
+! /^ *[A-Z]/ {
+ if (renamed[actlib "::" $1])
+ actver = renamed[actlib "::" $1];
+ else if (!versions[actlib "::" $1] && $1 != "GLIBC_PRIVATE") {
+--- 50,56 ----
+ }
+
+ # This matches the beginning of a new version for the current library.
+! /^ [A-Za-z_]/ {
+ if (renamed[actlib "::" $1])
+ actver = renamed[actlib "::" $1];
+ else if (!versions[actlib "::" $1] && $1 != "GLIBC_PRIVATE") {
+***************
+*** 65,71 ****
+ # This matches lines with names to be added to the current version in the
+ # current library. This is the only place where we print something to
+ # the intermediate file.
+! /^ *[a-z_]/ {
+ sortver=actver
+ # Ensure GLIBC_ versions come always first
+ sub(/^GLIBC_/," GLIBC_",sortver)
+--- 65,71 ----
+ # This matches lines with names to be added to the current version in the
+ # current library. This is the only place where we print something to
+ # the intermediate file.
+! /^ / {
+ sortver=actver
+ # Ensure GLIBC_ versions come always first
+ sub(/^GLIBC_/," GLIBC_",sortver)
+
+
+3.9.8.9. -include, -isystem, -I- Options
+
+-isystem and -I- options are no longer used.
+On the other hand, -include option is used extremely frequently.
+A header file include/libc-symbols.h is included by this option as many as 7000 times.
+This -include is an option to push out a #include line from source to makefile.
+It makes source incomplete, and is not recommendable.
+
+3.9.8.10. Undocumented Predefined Macros
+
+This is not a problem of glibc but of GCC.
+While a few important predefined macros were undocumented in GCC 2, they got documented in GCC 3.
+On the other hand, GCC 3.3 and later predefines many macros, and most of them are undocumented.
+
+3.9.8.11. Other Problems
+
+debug/tst-chk1.c has a queer part which is not processed as its intension by other preprocessor than GCC, unless revised as follows.
+
+
+$ diff -cw tst-chk1.c*
+*** tst-chk1.c 2007-01-11 00:31:45.000000000 +0900
+--- tst-chk1.c.orig 2005-08-23 00:12:34.000000000 +0900
+***************
+*** 113,119 ****
+ static int
+ do_test (void)
+ {
+- int arg;
+ struct sigaction sa;
+ sa.sa_handler = handler;
+ sa.sa_flags = 0;
+--- 113,118 ----
+***************
+*** 135,146 ****
+ struct A { char buf1[9]; char buf2[1]; } a;
+ struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
+
+ #ifdef __USE_FORTIFY_LEVEL
+! arg = (int) __USE_FORTIFY_LEVEL;
+ #else
+! arg = 0;
+ #endif
+! printf ("Test checking routines at fortify level %d\n", arg);
+
+ /* These ops can be done without runtime checking of object size. */
+ memcpy (buf, "abcdefghij", 10);
+--- 134,146 ----
+ struct A { char buf1[9]; char buf2[1]; } a;
+ struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
+
++ printf ("Test checking routines at fortify level %d\n",
+ #ifdef __USE_FORTIFY_LEVEL
+! (int) __USE_FORTIFY_LEVEL
+ #else
+! 0
+ #endif
+! );
+
+ /* These ops can be done without runtime checking of object size. */
+ memcpy (buf, "abcdefghij", 10);
+
+
+Contrary to its innocent looking, the original source defines printf() as a macro, and as its consequence, #ifdef and other directive-like lines are usually eaten as an argument of the macro call.
+According to the Standards, the result is undefined when there is a line in an argument of a macro which would otherwise act as a directive.
+Since directive processing and macro expansion should be done in the same translation phase, it is an arbitrariness of GCC to process directive first.
+In the first place, processing of #ifdef __USE_FORTIFY_LEVEL line also contains macro processing, therefore it is extremely arbitrary to process this line and the other directive-like lines first then expand printf() macro.
+C preprocessing should be done sequentially from the top.
+The configure script of glibc also has a portion to use GCC's peculiar help message.
+The script searches help message of compiler for "-z relro" option.
+If you use mcpp as a preprocessor, this portion does not yield the expected result.
+In spite of this problem, fortunately, compiling and test of glibc is done normally.
+By the way, while GCC up to 3.2 appended many useless -A options by default on its invocation, GCC 3.3 onward ceased to do it.
+
+3.9.8.12. Increasing Dependency on GCC
+
+Most of the portability problems I had found in glibc 2.1.3 have not been cleared in glibc 2.4 the six years newer version.
+On the contrary, number of sources lacking portability has increased.
+There have been a few improvements such as disappearance of multi-line-string-literal, -isystem, -I- options and -A options on GCC side.
+Meanwhile, sources with such unportable features have largely increased as #include_next, variadic macro of GCC2 spec, its call without variable argument, macro definition with 'defined' token in its replacement-list, *.S file and -include option.
+Macro calls with an empty argument have also increased.
+Above all it is most annoying that the writings which do not correspond to Standard C one-to-one, and hence cannot be easily converted to portable one, have increased.
+All of these are problems of dependency on GCC's local specification and undocumented behavior.
+In a large scale software as glibc, once such unportable sources are created, it becomes difficult to revise them because many source files are interrelated.
+As a consequence, the same writings tend to be inherited for years, and even new sources are written so as to suit the old interfaces.
+For example, it shows this relationship directly that only the variadic macros of GCC2 spec are used, and neither of C99 spec nor GCC3 spec are not used at all.
+Besides, even if some unportable parts in a few sources are revised, at the same time the old unportable codings often appear newly in other sources.
+The old style writings are not easily cleared.
+On the other hand, change of GCC behavior breaks many sources, and the possible influence becomes greater with time, therefore GCC becomes difficult to change its behavior.
+I think that both of GCC and glibc need to tidy up their old local specifications and old interfaces drastically in the near future.
+
+
+On Linux, the system compiler is GCC, and the standard library is glibc.
+In these circumstances, there are some system headers which presuppose only GCC.
+Those are the obstacles to use other compiling tools than GCC such as mcpp of compiler-independent-build.
+For example, stddef.h and some other Standard header files are located only in GCC's version specific include directory, and are not found in /usr/include.
+These are rude deficiencies of the system header structure, and mcpp needs some workarounds for them.
+On Linux, GCC installs a version specific include directory such as /usr/lib/gcc-lib/SYSTEM/VERSION/include where the Standard headers stddef.h, limits.h and some others are located. These headers and GCC behavior on them are queer. The problems are the same on CygWIN as on Linux. Mac OS X also has a few problems on some Standard headers.
+
+3.9.9.1. /usr/include Lacks Standard Headers
+In the first place, on Linux, five of the Standard C header files float.h, iso646.h, stdarg.h, stdbool.h, stddef.h are located only in the GCC version specific directory, not in /usr/include nor /usr/local/include. The system headers on Linux seem to more or less intend that compiler systems other than GCC use only /usr/include and GCC uses its version specific directory in addition to /usr/include. In fact, /usr/include lacks some Standard headers, that is the problem for non-GCC compilers or preprocessors.
+If non-GCC preprocessor uses also GCC version specific directory, then on limits.h in this directory, the preprocessor encounters #include_next which is a GCC specific directive. If that is the case, why doesn't the preprocessor implement #include_next? Then, the limits.h causes a problem, because it is not cleanly written. What is worse, GCC V.3.3 or later predefines practically by itself the macros to be defined by limits.h, hence the header is useless for other preprocessors.
+Besides, as for GCC itself, it shows queer behavior with #include_next in this header.
+Although these problems are complicated to explain, I will describe them here, because they have been neglected for years for some reason.
+Note that only mcpp of compiler-independent-build suffers this problem.
+GCC-specific-build is not affected.
+
+
3.9.9.2. Queer Handling of #include_next
+The include directories for GCC are typically set as:
+
+/usr/local/include
+/usr/lib/gcc-lib/SYSTEM/VERSION/include
+/usr/include
+
+These are searched from upper to lower. The second is the GCC specific include directory. SYSTEM is i386-vine-linux, i368-redhat-linux or such, VERSION is 3.3.2, 3.4.3 or such. If you install another version of GCC into /usr/local, the /usr/lib/gcc-lib part above will become /usr/local/lib/gcc. In C++, some other directories are set with higher priority than /usr/local/include. For GCC V.3.* and 4.*, those are:
+
+/usr/include/c++/VERSION
+/usr/include/c++/VERSION/SYSTEM
+/usr/include/c++/VERSION/backward
+
+The name of these directories seem GCC specific, nevertheless no other C++ standard directories do not exist, so the other preprocessors can use no directories but these. For GCC 2.95, the include directory in C++ was:
+
+/usr/include/g++-3
+
+In addition, the directories specified by -I option or by environment variables are prepended to the list.
+Let me take an example of limits.h in C on GCC V.3.3 or later focusing on definition of LONG_MAX, in order to make the explanations below simple. There are two limits.h: one in /usr/include and another in the version specific directory.
+
+#include <limits.h>
+
+By this line, GCC includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h. This header file starts as:
+
+#ifndef _GCC_LIMITS_H_
+#define _GCC_LIMITS_H_
+#ifndef _LIBC_LIMITS_H_
+#include "syslimits.h"
+#endif
+
+Then, GCC includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h which is a short file as:
+
+#define _GCC_NEXT_LIMITS_H
+#include_next <limits.h>
+#undef _GCC_NEXT_LIMITS_H
+
+Now, limits.h is included again. Which limits.h? Since this directive is #include_next, it would skip the /usr/lib/gcc-lib/SYSTEM/VERSION/include, and would search /usr/include. GCC's cpp.info says:
+
+This directive works like `#include' except in searching for the specified file: it starts searching the list of header file directories _after_ the directory in which the current file was found.
+
+In fact, however, GCC does not include /usr/include/limits.h, but includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h again somehow.
+This time _GCC_LIMITS_H_ has been defined already, so the block beginning with the line:
+
+#ifndef _GCC_LIMITS_H_
+
+is skipped, and the next block is evaluated:
+
+#else
+#ifdef _GCC_NEXT_LIMITS_H
+#include_next <limits.h>
+#endif
+#endif
+
+Again, just the same #include_next <limits.h> which were found in /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h. Does GCC include /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h again as the previous time, which is the current file, and run into infinite recursion? No, it does not, but it includes /usr/include/limits.h this time. The behavior of GCC is beyond my understanding.
+In /usr/include/limits.h, <features.h> and some other headers are included. Also, /usr/include/limits.h has a block beginning with the line:
+
+#if !defined __GNUC__ || __GNUC__ < 2
+
+In this block, <bits/wordsize.h> is included, and the Standard required macros are defined depending whether wordsize is 32 bit or 64 bit. For example, if wordsize is 32 bit, LONG_MAX is defined as:
+
+#define LONG_MAX 2147483647L
+
+Of course, GCC skips this block. Then, going to the end of this file, it returns to /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h. Then, ending this file of the second inclusion, it returns to /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h. Then, this file ends too, and GCC returns to the first inclusion of /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h. In this file, after the above cited part, there are definitions of the Standard required macros. For instance, LONG_MAX is defined as:
+
+#undef LONG_MAX
+#define LONG_MAX __LONG_MAX__
+
+Then, the file ends.
+
+#include <limits.h>
+
+The processing of this line has ended. After all, LONG_MAX is defined to __LONG_MAX__ and it is the end. What is __LONG_MAX__? As a matter of fact, GCC V.3.3 or later predefines many macros including __LONG_MAX__ which is predefined to 2147483647L for 32 bit system. As with the other Standard required macros, the situations are almost the same as LONG_MAX, because they are defined using the predefined ones. If so, what is the purpose of these complicated header files and #include_next handling at all?
+The behavior of GCC V.2.95, V.3.2, V.3.4, V.4.0 and V.4.1 on #include_next is the same as V.3.3. That is to say:
+
+#include_next <limits.h>
+
+by this line in /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h, GCC includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h, and by the same line in this file:
+
+#include_next <limits.h>
+
+it includes /usr/include/limits.h. As a result, in processing the line:
+
+#include <limits.h>
+
+/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h is included twice. This duplicate inclusion happens to produce the same result, nevertheless it is redundant, and first of all, the behavior differs from the specification and is not consistent. In addition, this part of the file is redundant if the behavior accords to the specification.
+
+#else
+#ifdef _GCC_NEXT_LIMITS_H
+#include_next <limits.h>
+#endif
+
+3.9.9.3. Standard Headers not Available for Preprocessors other than GCC
+Now, what happens to compiler or preprocessor other than GCC using Linux standard headers? stddef.h and some other Standard headers are not found in /usr/include nor /usr/local/include. If so, how about using also GCC version specific directory?
+
+#include <limits.h>
+
+By this line, the preprocessor includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h, and from this file it includes /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h, and in this file, it sees the line:
+
+#include_next <limits.h>
+
+Then, how about implementing #include_next? If the #include_next is implemented as its specification, the preprocessor searches by this line the "next" include directory /usr/include, and includes /usr/include/limits.h. Then, this non-GCC preprocessor processes the block beginning with this line:
+
+#if !defined __GNUC__ || __GNUC__ < 2
+
+In this block it defines LONG_MAX as:
+
+#define LONG_MAX 2147483647L
+
+and defines also the other macros appropriately. Then, it ends this file, and returns to /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h. Then, it ends this file, and returns to /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h. And it encounters these lines:
+
+#undef LONG_MAX
+#define LONG_MAX __LONG_MAX__
+
+At the end of the long run, all the correct definitions are canceled, and they become the undefined name __LONG_MAX__ or such!
+Up to GCC V.3.2, the corresponding part of version specific limits.h had the lines like:
+
+#define __LONG_MAX__ 2147483647L
+
+Hence, the canceled macros are redefined correctly. Although the most part of the processing is useless, the results were correct. With the header files of V.3.3 or later, a non-GCC preprocessor is taken around here and there to get vain results.
+
+3.9.9.4. Workarounds for the Present
+The problems are summarized as below: *1, *2, *3, *4
+
+- /usr/include lacks Standard C headers float.h, iso646.h, stdarg.h, stdbool.h and stddef.h which are necessary to make Linux system headers usable to non-GCC compiler system.
+ - C++ include directories do not exist other than /usr/include/c++/VERSION/*. In order to make C++ standard include directories independent on GCC version, /usr/include/c++ should be used instead of /usr/include/c++/VERSION which should be limited to GCC specific headers.
+Though, having said that, this is a difficult task, since the C++ standard library is libstdc++ distributed with GCC on all of FreeBSD, Linux and Mac OS X.
+ - The behavior of GCC on #include_next differs from its specification and is inconsistent.
+ - It is meaningless to process the complicated limits.h headers, since GCC predefines the Standard required macros by itself in effect. It is doubly meaningless, since /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h does #undef all. As far as Linux and CygWIN are concerned, there seems to be no necessity for splitting limits.h to two. Since these headers in this directory are auto-generated ones by GCC installation, some redundancies are inevitable. Yet, these are too dirty to install as system headers.
+
+Under these problems lies the excessively complicated system header structure. The extension directive #include_next enhances the complication. The use of this directive is very limited. Though GCC and glibc use it in compiling and installing of themselves, it does not exist in the installed system headers except for limits.h. The rare example in limits.h causes GCC above mentioned confusion. This presents a question on the reason of its existence.
+Anyway, the compiler-independent-build of mcpp needs the following workarounds for the present. In order to avoid confusion, the compiler-independent-build does not implement #include_next nor uses GCC specific include directories.
+
+- Link /usr/include/stddef.h to /usr/lib/gcc-lib/SYSTEM/VERSION/include/stddef.h. In case of multiple versions of GCC have been installed, a link to any of them will work for mere preprocessing. This setting does no harm on GCC nor GCC-specific-build of mcpp. The same can be said about stdarg.h, though it expands macros to GCC built-in functions.
+ - Copy or move iso646.h and stdbool.h from one of the GCC specific directories to /usr/include, since these are quite simple headers and independent on any system. As for limits.h, the existing /usr/include/limits.h is enough for non-GCC preprocessor.
+ - float.h is useless for other preprocessor, such as DBL_MAX_EXP is defined to __DBL_MAX_EXP__. If required, you must write the header referring to the internal setting of GCC or some other source. *5
+ - Do not set GCC specific include directory in C include directories list by environment variable.
+ - Set C++ include directories by environment variable CPLUS_INCLUDE as /usr/include/c++/VERSION:/usr/include/c++/VERSION/SYSTEM:/usr/include/c++/VERSION/backward.
+
+For the GCC-specific-build of mcpp, no special setting is required, because it has GCC specific include directories list, implements #include_next as its specification, and predefines the macros as GCC does.
+Note:
+*1 I have checked the descriptions of this 3.9.9 section on Linux / GCC 2.95.3, 3.2, 3.3.2, 3.4.3, 4.0.2, 4.1.1, 4.3.0 and on CygWIN / GCC 2.95.3, 3.4.4. As with CygWIN, the behavior on #include_next was as its specification on GCC 2.95.3, but on 3.4.4 it changed to the same behavior as Linux. The C++ include directories in CygWIN was /usr/include/g++-3 on 2.95.3, while they are /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++ and its sub-directories on 3.4.4.
+*2 On FreeBSD 6.2 or 6.3 and its bundled GCC 3.4.6, all the Standard C headers are present in /usr/include, #include_next is not used in any system headers, and GCC specific C include directory does not exist. However, C++ include directories are GCC version dependent as /usr/include/c++/3.4, /usr/include/c++/3.4/backward.
+Even on FreeBSD, an installation of another version of GCC makes GCC-version-specific include directory. Most of the headers in the directory are redundant. However, the headers in /usr/include remain unchanged.
+*3 On Mac OS X Leopard / Apple-GCC 4.0.1, as on Linux, there is a GCC-version-specific include directory, #include_next is used in limits.h and a few other headers, also two limits.h are found.
+However, #include_next in syslimits.h has been deleted by Apple.
+float.h, iso646.h, stdarg.h, stdbool.h, stddef.h are all found in /usr/include, hence so much special settings are not necessary for mcpp.
+But, float.h, stdarg.h are only for GCC and Metrowerks (for powerpc), so if you use them with mcpp, you must rewrite float.h yourself and make stdarg.h to include GCC-version-specific one.
+Note that some definitions in float.h are different between x86 and powerpc.
+*4 On MinGW / GCC 3.4.*, though the include directories and their precedence differ from the other systems, the behavior of GCC on #include_next is the same, and also some Standard headers are not in the standard include directory /mingw/include but in its version-specific-directory.
+*5 float.h for i386 system can be written as follows referring to GCC's setting:
+
+/* float.h */
+
+#ifndef _FLOAT_H___
+#define _FLOAT_H___
+
+#define FLT_ROUNDS 1
+#define FLT_RADIX 2
+
+#define FLT_MANT_DIG 24
+#define DBL_MANT_DIG 53
+#define LDBL_MANT_DIG 64
+
+#define FLT_DIG 6
+#define DBL_DIG 15
+#define LDBL_DIG 18
+
+#define FLT_MIN_EXP (-125)
+#define DBL_MIN_EXP (-1021)
+#define LDBL_MIN_EXP (-16381)
+
+#define FLT_MIN_10_EXP (-37)
+#define DBL_MIN_10_EXP (-307)
+#define LDBL_MIN_10_EXP (-4931)
+
+#define FLT_MAX_EXP 128
+#define DBL_MAX_EXP 1024
+#define LDBL_MAX_EXP 16384
+
+#define FLT_MAX_10_EXP 38
+#define DBL_MAX_10_EXP 308
+#define LDBL_MAX_10_EXP 4932
+
+#define FLT_MAX 3.40282347e+38F
+#define DBL_MAX 1.7976931348623157e+308
+#define LDBL_MAX 1.18973149535723176502e+4932L
+
+#define FLT_EPSILON 1.19209290e-7F
+#define DBL_EPSILON 2.2204460492503131e-16
+#define LDBL_EPSILON 1.08420217248550443401e-19L
+
+#define FLT_MIN 1.17549435e-38F
+#define DBL_MIN 2.2250738585072014e-308
+#define LDBL_MIN 3.36210314311209350626e-4932L
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define FLT_EVAL_METHOD 2
+#define DECIMAL_DIG 21
+#endif /* C99 */
+
+#endif /* _FLOAT_H___ */
+
+
+
+
+On V.2.7, mcpp began to support Max OS X / GCC.
+This section describes the problems of the system found by mcpp.
+The author, however, does not know the system so much yet.
+He has only compiled mcpp itself and firefox on the system.
+He knows nothing about Objective C nor Objective C++.
+Since GCC is practically the only compiler on this system now, some dependencies on GCC-local specs are found in some of its system headers.
+Such dependencies are not so much as Linux, maybe because its standard library is not glibc.
+But, they are not so few as FreeBSD.
+Some tidy-ups are desirable.
+Another characteristic of this system is that the system compiler is a GCC largely modified and extended by Apple.
+In the system headers and some sources of Apple on Max OS X, dependencies on Apple-GCC-local specs are more conspicuous than those on general-GCC-local specs.
+In particular, the extended specs to support both of Intel-Mac and PowerPC-Mac on a machine are the most characteristic.
+Here, we refer to the system of Mac OS X Leopard / Apple-GCC 4.0.1.
+
+3.9.10.1. #include_next, #warning
+The GCC-local directive #include_next are not many, but found in float.h, stdarg.h, varargs.h in /usr/include/ and the files of the same name in /Developer/SDKs/MacOSX10.*.sdk/usr/include/.
+All of them are to include different real header files depending on whether the compiler is GCC or Metrowerks.
+When the compiler is GCC, stdarg.h, for example, does '#include_next <stdarg.h>'.
+The limits.h in GCC-version-specific include directory has #include_next as Linux, but the one in syslimits.h has been removed and a bit tidied up.
+Though this directive is used modestly, it is a problem that float.h, stdarg.h presuppose only GCC and Metrowerks.
+Those can be written more portable as on FreeBSD. *1
+In addition, #include_next for GCC on a header in /usr/include is a nonsense, because the priority of that include directory is lower than GCC-version-specific one.
+Consequently this #include_next is never executed.
+Another GCC-local directive #warning is sometimes found in objc/, wx-2.8/wx/ and a few other directories in /usr/include/, and their corresponding directories in /Developer/SDKs/MacOSX*.sdk/usr/include/.
+Most of the directives are warnings against obsolete or deprecated files or usages.
+backward_warning.h in /usr/include/c++/VERSION/backward/ and its corresponding file in /Developer/SDKs/MacOSX*.sdk/ are to execute #warning against these deprecated headers.
+And all the headers in the directories include this header.
+This is the same with Linux or FreeBSD.
+Note:
+*1 About how to use these headers with compiler-independent-build of mcpp, refer 3.9.9.4 and its note 3.
+
+3.9.10.2. A Macro Expanded to 'defined'
+/usr/include/sys/cdefs.h and its corresponding file of the same name in /Developer/SDKs/MacOSX*.sdk/ have a macro definition as:
+
+#define __DARWIN_NO_LONG_LONG (defined(__STRICT_ANSI__) \
+ && (__STDC_VERSION__-0 < 199901L) \
+ && !defined(__GNUG__))
+
+And it is used in stdlib.h and a few others as:
+
+#if __DARWIN_NO_LONG_LONG
+
+This macro should be defined as: *1
+
+#if defined(__STRICT_ANSI__) \
+ && (__STDC_VERSION__-0 < 199901L) \
+ && !defined(__GNUG__)
+#define __DARWIN_NO_LONG_LONG 1
+#endif
+
+Note:
+*1 As for its reason, see 3.9.4.6 and 3.9.8.6.
+
+3.9.10.3. Tokens in #endif line
+gssapi.h, krb5.h, profile.h in /System/Library/Frameworks/Kerberos.framework/Headers have queer #endif lines like:
+
+#endif \* __KERBEROS5__ */
+
+This \* __KERBEROS5__ */ seems to intend to be a comment.
+I cannot understand why they must invent such a writing.
+Though GCC usually warns at it, Apple-GCC does not issue any warning even if -pedantic or any other options are specified.
+Apple-GCC does not warn at the following case, too.
+It still trails a sense of pre-C90.
+
+#endif __KERBEROS5__
+
+
+3.9.10.4. Some Special Usages of Macro
+As far as a compilation of firefox 3.0b3pre source is concerned, any of the following special usages of macro, which are frequently found in glibc sources and Linux system headers, is not found in the Mac OS X system headers included from the firefox source.
+
+- GCC-specific variable argument macro.
+While a few variadics of C99-spec are found, no GCC-specific one is found.
+ - Empty argument of macro call.
+
- Object-like macro replaced with a function-like macro name.
+
+
+3.9.10.5. Apple-GCC's Peculiar Specifications
+Apple-GCC has some peculiar specifications different from the general GCC.
+
+Specs to generate binaries for both of Intel-Mac and PowerPC-Mac on either machine
+Mac OS X has a pair of compilers for x86 and ppc.
+(One is a native compiler, and other is a cross compiler.)
+This pair of Apple-GCCs have their own option -arch.
+If you specify multiple CPUs as '-arch i386 -arch ppc', gcc will be repeatedly invoked, binaries for the specified CPUs will be generated, and a "universal binary" which bundles all the binaries will be created.
+Also they have another peculiar option -mmacosx-version-min=.
+You can use this option along with -isysroot or --sysroot option, and widen the range of compatibility of the binary to the older versions of Mac OS X to some extent.
+These specs are convenient to make a binary package for Mac OS X.
+As for preprocessing, you should remember that some predefined macros differ depending on the CPU specified.
+"framework" directories
+Mac OS X has "framework" directories inherited from NeXTstep.
+Framework is a hierarchical directory that contains shared resources such as header files, library, documents, and some other resources.
+To include a header file in these directories, such a directive is used as:
+
+
+#include <Kerberos/Kerberos.h>
+
+This format is the same with:
+
+#include <sys/stat.h>
+
+However, these two have quite different meanings.
+While the latter includes the file sys/stat.h in some include directory (in this case /usr/include), <Kerberos/Kerberos.h> is not a path-list, and Kerberos is not even a directory name.
+This is a file Kerberos.framework/Headers/Kerberos.h in a framework directory /System/Library/Frameworks.
+And in actual, Kerberos.framework/Headers is a symbolic-link to Kerberos.framework/Versions/Current/Headers.
+This is the most simple case of framework header file location.
+There are many other far more complex cases.
+Who has invented such a complex system?
+This system burdens a preprocessor, because it needs to search system headers in framework directories repeatedly building and rebuilding path-list.
+Some headers further include many other headers.
+"header map" file
+Xcode.app is an IDE on Max OS X.
+It uses "header map" file, which is a list of include files.
+One of the tools of Xcode checks source files, searches the files to be included, and records the path-list of the files into a file named *.hmap, and Apple-GCC refers to it instead of include directories.
+This is an extended feature of Apple-GCC.
+Header map file is a device to lessen burdens of header file searching.
+However, it is a binary file of a peculiar specification and lacks transparency.
+In order to lessen heavy burdens of framework header searching, it is more desired to reorganize the framework system.
+Tokens in #endif line
+As shown in the previous section, Apple-GCC does not issue even a warning whatever junks are on a #endif line, regardless of whatever options specified.
+It is quite an anachronism.
+Non-ASCII characters in comments
+This is not a problem of GCC, but a problem of system headers in framework directory.
+In many headers, some non-ASCII characters are frequently found in comments, such as the copyright mark (0xA9) and others of ISO-8859-* (?).
+They are nuisances on an environment of multibyte characters, even if in comments.
+A little bit of character encoding consciousness is desired.
+Though the characters of this kind are sometimes found also in /usr/include of Linux, they are far more often found in framework headers of Mac OS.
+
+
+I compiled source of firefox developing version 3.0b3pre (January, 2008), or 3.0-beta3-prerelease, by GCC replacing its preprocessor with mcpp V.2.7 on Linux/x86 + GCC 4.1.2 and Mac OS X + GCC 4.0.1.
+mcpp were executed with -Kv option passing its output to cc1 (cc1plus).
+As its results, the compilations successfully completed, and the firefox binaries were generated. *1
+The preprocessing portability of firefox source on the whole is rather high.
+The dependencies on GCC-local specifications, such as frequently found in glibc sources, are not found so many.
+It is portable enough to officially support both of GCC on Linux, Mac OS X and Visual C++ on Windows.
+Preprocessing portability of a source is, however, not necessarily sufficient, even if GCC and Visual C pass it.
+In the sections below, I will check some problems, sometimes comparing them with glibc sources.
+I omit explanations on GCC's problems here to avoid duplication.
+For GCC's problems, refer to 3.9.4, 3.9.8
+, which also comment on glibc sources. *2
+Note:
+*1 I checked out the sources from CVS repository of mozilla.org.
+One of the motivations to compile firefox source was to test -K option of mcpp.
+This option was proposed by Taras Glek, and he was working on refactoring of C/C++ source at mozilla.com.
+So, I also used firefox source to test -K option and other behaviors of mcpp.
+About -K (-Kv) option, refer to 2.4.
+*2 There is a list of coding-guidelines for firefox as below.
+But, its content is too old.
+portable-cpp
+
+3.9.11.1. GCC-local specifications are rarely used
+The following GCC-local-specs, which are sometimes used in glibc sources, are not used in firefox sources.
+Though compiling firefox on Linux includes system headers, and some of which contain such as GCC2-spec variadic macros, they are not firefox sources themselves.
+
+- GCC-local variadic macro
+Even C99 spec variadic macro is not yet used, too.
+
+The following features are not used even in recent glibc, and not used in firefox at all.
+
+- Multi-line string-literal
+
- #warning
+
- -isystem, -I- options
+
+
+3.9.11.2. #include_next
+However, a lot of #include_next are found only in one directory: config/system_wrappers/, which is generated by configure.
+All of the 900 files generated in the directory are short header files of the same pattern.
+For example, stdio.h is:
+
+#pragma GCC system_header
+#pragma GCC visibility push(default)
+#include_next <stdio.h>
+#pragma GCC visibility pop
+
+This is a code to utilize '#pragma GCC visibility *' directive implemented in GCC 4.*.
+At the same time, there is a file 'config/gcc_hidden.h' as below.
+The file is specified by -include option for most of the translation units, and read in at the start of the units.
+
+#pragma GCC visibility push(hidden)
+
+system_wrappers directory should be the include directory with the highest priority, so you should specify it as a first argument of -I option.
+In spite of such a constraint, this usage of #include_next is simple and seems to has no problem.
+On the other hand, for many sources in nsprpub directory, '-fvisibility=hidden' option is used instead of '-include gcc_hidden.h', and the headers in system_wrappers are not used.
+This nsprpub directory seems still to be reorganized.
+
+3.9.11.3. Using C99 specs without specifying C99
+Many sources use C99 specifications without specifying C99.
+GCC use "gnu89" spec by default on *.c source, which is a compromising spec of C90 plus some of C99 specs and GCC-local specs.
+Some of firefox sources use the following C99 specs implicitly, depending on GCC's default behavior.
+
+Empty argument in macro call
+
Though empty argument in macro call is rare in firefox, these 3 files have it.
+The actual macro called with any empty argument is only one named NS_ENSURE_TRUE.
+layout/style/nsHTMLStyleSheet.cpp, layout/generic/nsObjectFrame.cpp, intl/uconv/src/nsGREResProperties.cpp
+Also the following files in gfx/cairo/cairo/src/ have it.
+The actual macro is only one: slim_hidden_ulp2.
+cairoint.h, cairo-font-face.c, cairo-font-options.c, cairo-ft-font.c, cairo-ft-private.h, cairo-image-surface.c, cairo-matrix.c, cairo-matrix.c, cairo-pattern.c, cairo-scaled-font.c, cairo-surface.c, cairo-xlib-surface.c, cairo.c
+Though these empty macro arguments are used on Linux, they are not used on Mac OS X.
+Anyway, these are not tricky ones.
+Translation limits beyond C90
+
Length of an identifier, nesting level of #include, number of macro definitions and so forth often exceed C90 translation limits.
+Identifiers longer than 31 bytes are found especially frequently in the directory gfx/cairo/cairo/src/.
+Nesting of #include over than 8 level and macro definitions over than 1024 are often found, too.
+These are almost inevitable on Linux and Mac OS X, since only inclusion of some system headers often reaches these limits.
+Using // comment in C source
+Some C sources have this type of comments.
+The list of guidelines prohibits this.
+However, this causes few problem nowadays.
+
+Above specifications are also available on Visual C 2005, 2008.
+Since GCC has -std=c99 option, we might use this to specify C99 explicitly.
+Visual C, however, has no option to specify a version of Standard.
+We cannot help to use C99 specs implicitly.
+Therefore, firefox sources cannot be blamed for using C99 specs implicitly, in the current states of the major compiler-systems. *1
+By the way, firefox sources do not use variadic macro for some reason, in spite of using some other C99 specs implicitly.
+Visual C up to 2003 did not implement variadic macro.
+Is that why firefox did not use the feature?
+The circumstances has changed since Visual C 2005 implemented it.
+Note:
+*1 On C++, GCC defaults to "gnu++98" spec, which is explained as "C++98 plus GCC extensions". It has in actual, however, some C99 specs mixed.
+Meanwhile, Visual C says that it is based on C90 and C++98 for C and C++ respectively.
+In actual, both of C and C++ of Visual C have C99 features mixed in it as well as a few Visual C extensions, especially in Visual C 2005 and 2008.
+Both of GCC and Visual C have such mixture of versions of Standard and their own extensions and modifications, thus bring about some ambiguities.
+The absence of option in Visual C to specify a version of Standard is the most inconvenient problem.
+
+3.9.11.4. Object-like macro replaced with function-like macro name
+Object-like macro replaced with function-like macro name is found sometimes in many other programs, and is found also in firefox sources below, though not frequently.
+content/base/src/nsTextFragment.h,
+modules/libimg/png/mozpngconf.h,
+modules/libjar/zipstub.h,
+modules/libpr0n/src/imgLoader.h,
+nsprpub/pr/include/obsolete/protypes.h,
+nsprpub/pr/include/private/primpl.h,
+nsprpub/pr/include/prtypes.h,
+parser/expat/lib/xmlparse.c,
+security/nss/lib/jar/jarver.c
+security/nss/lib/util/secport.h,
+xpcom/glue/nsISupportsImpl.h
+
+In addition, building of firefox creates, in a directory for developing environment, many links to header files, which are copied into /usr/include/firefox-VERSION/ when you install developing environment for firefox.
+Some of these header files have symbolic links to the above files.
+mozilla-confic.h, that is created by configure, has a macro definition of this kind, too.
+These macros should be written as function-like macro to improve readability.
+In actual, many other macros in firefox sources are defined as function-like macro replacing to another function-like macro with the same arguments.
+There are coding style differences among the authors.
+It would be better to set a coding guideline on this matter.
+
+3.9.11.5. Macro expanded to 'defined'
+A Macro with 'defined' token in its replacement text, sometimes found in glibc, is found in firefox only once.
+modules/oji/src/nsJVMConfigManagerUnix.cpp
+defines a macro as:
+
+#define NS_COMPILER_GNUC3 defined(__GXX_ABI_VERSION) && \
+ (__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
+
+and uses it in itself as:
+
+#if (NS_COMPILER_GNUC3)
+
+This macro should be removed and the #if line should be rewritten as:
+
+#if defined(__GXX_ABI_VERSION) && (__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
+
+Maybe this file is to be compiled only by GCC, nevertheless it is not good practice to depend on preprocessor's wrong implementation.
+Note:
+*1 GCC-specific-build of mcpp V.2.7 enabled GCC-like handling of 'defined' in macro on #if line.
+But mcpp warns at it, and you would better to revise the code.
+
+3.9.11.6. Tokens in #endif line
+The following files in jpeg directory have #endif lines with comments without comment mark.
+All of the lines has appeared by some recent updates.
+
+jmorecfg.h, jconfig.h, jdapimin.c, jdcolor.c, jdmaster.c
+
+Though this style of writing was frequently seen in some sources for UNIX-like systems up until middle of 1990s, it has almost completely disappeared nowadays, and cannot be found even in that glibc sources.
+GCC usually warns at it as expected.
+For all that, these sources take such a writing style.
+Only Apple-GCC does not warn at it.
+Have these sources been edited on Mac OS?
+
+3.9.11.7. Assembler Source Which Needs Preprocessing
+The assembler sources are written as *.s (*.asm) files, and some of which contain macros, but in principle, they do not call for preprocessor.
+On Mac OS X / ppc, however, there is only one exception.
+xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_rhapsody.s calls for preprocessor, because it has a #if block containing only one line.
+The block seems to be unnecessary already.
+
+3.9.11.8. -include option
+Compilation of firefox begins with configure, which generates mozilla-config.h.
+In compilation of most of the sources, this header file is specified by -include option.
+config/gcc_hidden.h is also specified similarly.
+Why don't the sources #include these headers at their top?
+
+3.9.11.9. Redefinition of macro
+Some silent redefinition of macros are found, though they are rare.
+
+In compilation of most of the sources, -DZLIB_INTERNAL option is specified.
+In other words, the macro is defined as 1.
+It is, however, defined by some sources in modules/zlib/src/ as:
+
+#define ZLIB_INTERNAL
+
+It is defined to zero token.
+And it is used as:
+
+# ifdef ZLIB_INTERNAL
+
+Though the difference does not make different result in this case, different definitions of the same macro is not recommended.
+Maybe the option by Makefile is redundant.
+xpcom/build/nsXPCOMPrivate.h defines a macro MAXPATHLEN differently from /usr/include/sys/param.h.
+This discrepancy stems from an inconsistency among the related header files about whether include /usr/include/sys/param.h or not.
+The related header files should be reorganized.
+On Mac OS X, assert macro, once defined in /usr/include/assert.h, is redefined in netwerk/dns/src/nsIDNKitInterface.h.
+'#undef assert' should precede it.
+On Mac OS X, in modules/libreg/src/VerReg.c, queer redefinition of macro VR_FILE_SEP occurs as:
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+#define VR_FILE_SEP ':'
+#endif
+#ifdef XP_UNIX
+#define VR_FILE_SEP '/'
+#endif
+
+, because on Mac OS X, configure defines both of XP_MACOSX and XP_UNIX.
+This redefinition may be an intended one.
+Anyway, it is misleading.
+It would be better to write as below, clearly showing the priority of XP_UNIX.
+
+#ifdef XP_UNIX
+#define VR_FILE_SEP '/'
+#elif defined(XP_MAC) || defined(XP_MACOSX)
+#define VR_FILE_SEP ':'
+#endif
+
+
+
+3.9.11.10. Too long comments
+The following files have too long comments crossing over several hundred lines or more.
+extensions/universalchardet/src/base/Big5Freq.tab, extensions/universalchardet/src/base/EUCKRFreq.tab,intl/unicharutil/src/ignorables_abjadpoints.x-ccmap, layout/generic/punct_marks.ccmap
+Especially, in the directories intl/uconv/ucv*/, there are many files with too long comments.
+There is even a case of single comment crossing over 8000 lines!
+All of these files have name of *.uf or *.ut, and are mapping tables between Unicode and each Asian encodings, generated automatically by some tool.
+They do not seem to be source of C/C++, but they are included from other C++ sources.
+Most part of these files are comments, which seem to be a sort of document or table for some other tool.
+It is not recommendable to include long documents or tables in source files.
+They should be separated from source files, even if placed in source tree.
+Though these files are used in Linux, they are not used in Mac OS X.
+On the other hand, on Mac OS X, system headers in framework directories are frequently used, and some of them are queer files mostly occupied with comments.
+
+3.9.11.11. Mixed encodings of newline
+The encoding of newline in firefox source is [LF].
+A few files, however, have a small block of lines ending with [CR][LF].
+All of these [CR][LF] lines seem to be fragments inserted as patches.
+Some conversion tools should be used when one edit source file on Windows.
+
+
+
+I used mcpp to preprocess some sample programs provided by Visual C++ 2003, 2005 and 2008. The system headers seem to have only a few compatibility problems shown below. These problems are often seen in other compile systems and do not have a serious impact on preprocessing.
+
+- Since when Visual C++ scarcely implemented the C99 specifications, // comments have often been used in C source code.
+ - Object-like macro definitions that are expanded into function-like macro names are sometimes found.
+ - On Visual C++ 2003, there was one wrong macro definition in limits.h. (It was revised on Visual C++ 2005. See Note 2 in cpp-test.html#5.1.3.1)
+
+Although the Linux system-headers and glibc sources often contain GCC local specification based coding, Visual C++ system headers has only a few Visual C++ local coding.
+
+
+I found only one outrageous macro in Visual C++. Vc7/PlatformSDK/Include/WTypes.h has the following macro definition: *1
+
+#define _VARIANT_BOOL /##/
+
+This macro definition is used in oaidl.h and propidl.h in Vc7/PlatformSDK/Include/ as follows:
+
+_VARIANT_BOOL bool;
+
+What does this macro aim at?
+This macro seems to expect _VARIANT_BOOL to be expanded into // and the line to be commented out. Actually, this expectation is met in Visual C cl.exe !
+In the first place, // is not a token (preprocessing-token). Macro definitions should be processed and expanded after source are parsed into tokens and a comment is converted into one space. Therefore, it is irrational for a macro to generate comments. When this macro is expanded into //, the result is undefined because // is not a valid preprocessing-token.
+In order to use these header files with mcpp, comment out these macro definitions and change many _VARIANT_BOOL occurrences as follows:
+
+#if !__STDC__ && (_MSC_VER <= 1000)
+ _VARIANT_BOOL bool;
+#endif
+
+If you use only Visual C 5.0 or later, this line can be simply commented out as follows:
+
+// _VARIANT_BOOL bool;
+
+This macro is, indeed, out of question, however, it is Visual C/cl.exe, which allows such an outrageous macro to be preprocessed as a comment, should be blamed. This example reveals the following serious problems this preprocessor has:
+
+- Preprocessing is not token-based but character-based at least in this example.
+ - The macro expansion result is treated as comment, which indicates the translation phases are confusing.
+
+Probably, the cl.exe preprocessor was developed based on a very old somewhat character-based preprocessor. It is easy to presume that the preprocessor has been upgraded by repeating partial revision to the old preprocessor.
+There are many preprocessors which presumably have a very old program structure. GCC 2/cpp, shown in 3.9, is one of such preprocessors. Repeated partial revision of such a preprocessor will only makes its program structure more complicated. However much such revision may be made, there are limits to quality such preprocessor can achieve. Unless a old source is given up and completely rewritten, a clear and well-structured preprocessor cannot be obtained.
+At GCC 3/cpp0, a total revision was made to GCC 2; the entire source code was rewritten. So, GCC 3/cpp0 has become quite different from GCC 2. Although mcpp was initially developed based on the source of an old preprocessor, DECUS cpp, the source code was totally rewritten soon.
+Note:
+*1 Visual C++ 2005 Express Edition does not contain Platform SDK. However, you can download "Platform SDK for Windows 2003", and use it with VC2005. wtypes.h, oaidl.h, propidl.h in this PlatformSDK/Include directory also have the same macro definition and its usage as VC2003 Platform SDK.
+Also on Visual C++ 2008, in the header files of the same name in 'Microsoft SDKs/Windows/v6.0A/Include' directory, that macro definition and its usage are quite the same.
+
+
+Another problem is use of '$' in identifiers.
+Its use in macro names suddenly increased in the system headers on Visual C++ 2008.
+Though such macros were also found on Visual C++ 2005, they were rare.
+But, on Visual C++ 2008, they are found here and there.
+'Microsoft Visual Studio 9.0/VC/include/sal.h' is the most conspicuous one.
+This header defines macros for so-called SAL (standard source code annotation language) of Microsoft, and has many names containing '$'.
+This file is included from many standard headers via 'Microsoft Visual Studio 9.0/VC/include/crtdefs.h', so most sources are compiled with these macros without knowing it.
+If you specify -Za option to invoke the compiler cl, the SAL is disabled and all of the names with '$' in the sal.h disappear.
+The necessity of this notation is, however, hard to understand.
+Though GCC also enables '$' in identifiers by default, its actual use is rarely found nowadays.
+This kind of names are also found in the system headers named specstrings*.h in 'Microsoft SDKs/Windows/v6.0A/Include' directory.
+They are included from Windows.h via WinDef.h, and the names with '$' do not disappear even -Za option is specified.
+The option causes only errors.
+So, you cannot use the -Za option to compile a source which includes Windows.h.
+
+
+
+This chapter does not contain all the C preprocessor specifications. For details on Standard C preprocessing, refer to cpp-test.html. For mcpp behaviors in each mode, refer to 2.1. This chapter covers several preprocessor-related specifications, including those called implementation-defined by Standards. For more details on mcpp implementation-defined-behaviors, see Chapter 5, "Diagnostic Messages".
+
+
+
+The header file internal.H defines values returned by mcpp to a parent process. mcpp returns 0 on success, and errno for errno != 0 and 1 for errno == 0 on error. Success means that no error has occurred.
+
+
+
+This section explains the order in which mcpp searches directories for an include file when it encounters a #include directive.
+
+- If a #include directive argument takes A Form of neither "file-name" nor <file-name>, and is a macro, the macro is expanded. The resulting filename must take a form of either "file-name" or <file-name>. Otherwise, it causes an error.
+
+ - If the resulting filename, either in form of "file-name" or <file-name>, is a full path name, mcpp tries to open it. If it fails, it causes an error.
+
+ - If the resulting filename is not a full path but takes a form of "file-name", mcpp regards it as a filename relative from the current directory or source file directory, and begins searching from that directory. The former is a directory from which mcpp was invoked and the latter is a directory where the source file that includes the "file-name" resides. Depending on the specified options and compiler systems, mcpp begins searching directories as follows:
+
+
+- If -I1 is specified, search begins from current directory.
+
- If -I2 is specified, source file directory.
+
- If -I3 is specified, current first and then source file directory.
+
+
+By default, the compiler-specific-builds for UNIX compiler systems, GCC or Visual C begin searching from the source file directory.
+The other compiler-specific-builds begin searching at the current directory. However, Borland C-specific-build searches current first and then source file directory.
+The compiler-independent-build of mcpp begins search from the source file directory.
+For GCC, the directories specified by -iqoute option are searched next.
+For Visual C, also the directories of each ancestor file of source file are searched one by one.
+If mcpp fails to find the desired file, it begins searching as shown in step 4.
+
+In case of a nested #include, if search begins at current directory, the base directory is always the same. If search begins at a source file directory, the base directory changes each time a header file resides in other directory.
+
+ - If the resulting filename is not a full path name but takes a form of <file-name>, mcpp searches directories in the following order. If any of these directories are specified as a relative path, then mcpp regards it as a relative directory from the current directory at mcpp startup. If mcpp fails to find or open the desired file after searching all the directories in these order, it causes an error.
+
+
+- Directory(s) specified with the -I <directory> option on mcpp invocation. If several directories are specified, they are searched in the order in which specified (with the left first).
+
- For GCC-specific-build, directories specified with the -isystem option. If several directories are specified, they are searched in the order specified (from the left).
+
- Directories specified with an environment variable. ENV_C_INCLUDE_DIR in noconfig.H (configed.H) defines environment variable names. In C++, ENV_CPLUS_INCLUDE_DIR, if defined, takes precedence over ENV_C_INCLUDE_DIR. GCC-specific-build uses C_INCLUDE_PATH (and also CPLUS_INCLUDE_PATH for C++) as default environment variable. Other mcpp uses INCLUDE (and also CPLUS_INCLUDE for C++) as default. If an environment variable specifies several directories with each separated with a delimiter, they are searched in the order in which specified. Windows and other OSs use ";" and ":" as delimiter, respectively.
+
- Implementation-specific directories for C++ defined by the CPLUS_INCLUDE_DIR? macros in noconfig.H (configed.H).
+
- Site-specific directories defined by setsysdirs() in system.c (For UNIX systems, /usr/local/include).
+
- Implementation-specific directories defined by the C_INCLUDE_DIR? macros in noconfig.H (configed.H).
+
- System-specific directories defined by setsysdirs() in system.c (For UNIX systems, /usr/include).
+
+
+With the -I- option (-nostdinc option for GCC-specific-build and -X for Visual C-specific-build), the directories specified in 4.4 and later are not searched.
+ANSI C Rationale says the ANSI committee intends to define a current directory as base directory. I think this is acceptable, in that the base directory is always constant and that the specification is clearer. However, some implementations, such as UNIX, seem to define a source file directory as base one at least for #include "header". The compiler-independent-build of mcpp also takes source file directory as base, according to the majority.
+
+
+
+This section explains how to construct a header-name pp-token and extract a file name from it.
+
+- If source code contains a header file name in the string literal format, mcpp regards it as a header-name and removes the " at the both ends to construct a filename. This can be applied to a string literal resulting from macro expansion in source code.
+
+ - If source code contains a header file name in the <filename> format, mcpp regards it as a header-name and removes the < and > at the both ends to construct a filename. This can be applied to a <filename> format sequence resulting from macro expansion. The spaces in the macro are retained squeezing multiple spaces into one space.
+
+ - In any case, mcpp converts \ to /, although both of "\" and "/" can be used as path delimiters on Windows.
+
+
+
+
+
+Evaluation of #if expression depends on the largest integer type of the host compiler (by which mcpp was compiled) and that of the target compiler (which uses mcpp). Since the compiler-independent-build has no target compiler, the type depends only on the host compiler.
+mcpp in Standard mode evaluates #if expression in the common largest integer type of the host and target compiler. Nevertheless, mcpp in pre-Standard mode evaluates it in (signed) long.
+In the compiler-systems having type "long long", if __STDC_VERSION__ is set to 199901L or higher using the -V199901L option, mcpp evaluates a #if expression in "long long" or "unsigned long long", according to the C99 specification. Although C90 and C++98 stipulate that #if expression is evaluated in long / unsigned long, mcpp evaluate it in long long / unsigned long long even in C90 or C++98 mode, and issues a warning in case of the value overflows the range of long / unsigned long. *1
+Visual C and Borland C 5.5 do not have a "long long" type, but have an __int64 type of the same length. So, a #if expression is evaluated as __int64 / unsigned __int64. (However, since LL and ULL suffixes cannot be used in Visual C++ 2002 or earlier and Borland C 5.5, these suffixes must not be used in coding other than #if lines.)
+In addition, when you invoke with the -+ option for C++ preprocessing, mcpp evaluates pp-tokens 'true' and 'false' in a #if expression to 1LL (or 1L) and 0LL (or 0L), respectively.
+mcpp in Standard mode evaluates #if expression as follows. For a compiler without long long, please read "long long" and "unsigned long long" hereinafter, until the end of 4.5, as "long" and "unsigned long", respectively. For pre-Standard mode read all of them as "long".
+
+- An integer constant token with a U suffix, including character constants, is evaluated in unsigned long long. (Note that pre-Standard mode does not recognize the U suffix).
+ - Otherwise, a token within the range of non-negative long long is evaluated in long long.
+ - Otherwise, a token within the range of unsigned long long is evaluated in unsigned long long.
+ - Otherwise, it is diagnosed as an out of range error.
+ - In a binary operation, if either operand is unsigned long long, both are converted to unsigned long long. Otherwise, an operation is performed in signed long long.
+
+Anyway, an integer constant token always has a non-negative value.
+In pre-Standard mode, an integer constant token is evaluated within the range of non-negative long. A token beyond that range is diagnosed as an out of range error. All the operations are performed within the range of long.
+If both of host and target compilers have type unsigned long long and the range of unsigned long long of the host is narrower than that of the target, a beyond that host range is evaluated to an out of range error.
+If an operation using constant tokens produces a result out of range of long long, an out of range error occurs. If it produces a result out of range of unsigned long long, a warning is issued. This can be applied to intermediate operation results.
+Since a bitwise right shift of a negative value or a division operation using it does not provide portability, mcpp issues a warning. If an operation using a mixture of unsigned and signed operands converts a signed negative value to an unsigned positive value, a warning is also issued. How these values are evaluated depends on the specification of the compiler-proper of the host system.
+C90 and C++98 makes it a rule that a preprocessor evaluates a #if expression in long/unsigned long (in C99, the maximum integer type is used). These specifications are rougher than those of compiler-propers. A (#)if expression is often evaluated differently between preprocessor and compiler-proper, especially when sign extension is involved.
+In addition, since keywords are not used during Standard C preprocessing, sizeof or cast cannot be used in a #if expression. Of course, neither variables, enumeration constants, nor floating point numbers can be used there. Standard mode allows the "defined" operator in a #if expression as well as the #elif directive. Except for these differences, mcpp evaluates a #if expression in accordance with priority of and the associative law among operators, just as compiler-propers do. In a binary operation, an arithmetic conversion often takes place to equalize the types on both-hand sides; If one operand is unsigned long long and the other is long long, the both are converted to unsigned long long.
+Note:
+*1 mcpp up to V.2.5 evaluated #if expression in C90 and C++98 by long long / unsigned long long internally, and issued an error on overflow of long / unsigned long. From V.2.6 onward, mcpp degraded the error to warning for compatibility with GCC or Visual C.
+
+
+
+Constant tokens in a #if expression includes identifiers (macros and non-macros), integer tokens and character constants. How to evaluate character constants is implementation-defined and lacks of portability. Even (#)if 'const' is sometimes evaluated differently between preprocessor and compiler-proper. Note that Standards does not even guarantee that (#)if 'const' is evaluated to the same.
+mcpp in POSTSTD mode does not evaluate a character constant in a #if expression, which is almost meaningless, and makes it an error.
+Like other integer constant tokens, mcpp evaluates a character constant in a #if expression within the range of long long or unsigned long long. (In pre-Standard mode, long only.)
+A multi-byte character or a wide character is generally evaluated with 2-bytes type, except for the UTF-8 encoding, which is evaluated with 4-bytes type. Since UTF-8 has a variable length, mcpp evaluates it with 4-byte type. mcpp does not support EUC's 3 byte encoding scheme. (A 3-byte character is recognized as 1 byte + 2 bytes. As a consequence, its value is evaluated correctly.) Although there are some implementations using the 2-byte encoding scheme that define wchar_t as 4-byte, mcpp has no relevance to wchar_t. The following paragraphs describe two-byte multi-byte character encodings.
+Multi-byte character constants, such as 'X', are evaluated to ((First byte value << 8) + Second byte value). (8 is the value of CHAR_BIT in <limits.h>.) Note that 'X' is used here to designate a multi-byte character. Though 'X' itself is not a multi-byte character, it is used here to avoid character garbling.
+Let me take an example of multi-character character constants, such as 'ab', '\x12\x3', and '\x123\x45'. 'a', 'b', '\x12', '\x3' and '\x123' are regarded as one byte. When a multi-character character constant is evaluated, each one byte, starting from the highest one, is evaluated within the range of [0, 0xFF] and combined by shifting it to left by 8. (0xFF is the value of UCHAR_MAX in <limits.h>.) If the value of one escape sequence exceeds 0xFF, an out of range error occurs. Therefore, in the implementation of the ASCII character set, the above three tokens are evaluated to 0x6162, 0x1203 and error, respectively.
+L'X' is evaluated to the same value as 'X'. Let me take an example of multi-character wide character constants, such as L'ab', L'\x12\x3', and L'\x123\x45'. L'a', L'b', L'\x12', L'\x3', L'\x123', and L'\x45' are regarded as one wide character. When a multi-character wide character constant is evaluated, each wide character, starting from the highest one, is evaluated within the range of [0, 0xFFFF] and combined by shifting it to left by 16. If the value of one escape sequence exceeds the maximum value of an unsigned 2-byte integer, an out of range error occurs. Therefore, in the implementation of the ASCII character set, the above three tokens are evaluated to 0x00610062, 0x00120003, and 0x01230045, respectively.
+If the values of a multi-character character constant and a multi-character wide character constant exceed the range of unsigned long long, an out of range error occurs.
+With __STDC_VERSION__ or __cplusplus set to 199901L or higher, mcpp evaluates a Universal Character Name (UCN) in the form of \uxxxx and \Uxxxxxxxx as a hex escape sequence. (I know this evaluation is nonsense but no other way.)
+If the compiler-proper of the target compiler system uses a signed char or signed wchar_t, a character constant in a (#)if expression may be evaluated differently between mcpp and compiler-proper. The range that causes a range error may also differ between them. In addition, evaluation of multi-character character constants and multi-byte character constants varies even among preprocessors and among compilers. Standard C does not define whether, with CHAR_BIT set to 8, 'ab' is evaluated to 'a' * 256 +'b' or 'a' + 'b' * 256.
+In general, character constants should not be used in an #if expression, as long as you have an alternative method. I think an alternative method always exists.
+
+
+
+Standard C stipulates that preprocessing is a process independent of run-time environments or compiler-proper specifications, thus prohibiting it from using sizeof and cast in an #if expression. However, pre-Standard mode allows sizeof (type) in a #if expression. This was done as a part of my effort to add necessary modifications to DECUS cpp, such as adding long long and long double processing, while retaining its original functionality. As to cast, I neither implemented nor had a will to do so because it would require troublesome work.
+A series of macros beginning with S_, such as S_CHAR, in eval.c define the size of each type. Under cross implementation, these macros must be modified to specify size of the types, in integer values, used in the target system.
+I have to admit that mcpp does not provide the full functionality of #if sizeof. mcpp just ignores the letter of "signed" or "unsigned" preceding char, short, int, long, and long long when it appears in a #if sizeof. Also mcpp does not support sizeof (void *). I know this is a half-hearted implementation but I do not want to increase the number of flags in system.H in vain for this non-conforming function. I initially thought of removing the sizeof code from the original version because I did not intend to support cast at all, but on the second thought, I decided to make a small amount of modifications to make use of the existing code.
+
+
+
+mcpp in principle compresses a white-space sequence, excluding <newline>, as a token separator into one space character during tokenization in the translation phase 3. If -k or -K option is specified in STD mode, however, it outputs horizontal white spaces as they are without compressing. It also deletes a white-space sequence at the end of a line.
+A white-space sequence at the beginning of a line is deleted in POSTSTD mode, and putout as they are in other modes. The latter is special treatment for convenience of human reading. *1
+This compression and deletion occurs during the intermediate phase. The next phase 4 involves macro expansion and preprocess-directive-line processing. Macro expansion may sometimes produce several space characters before and after the macro. Of course, the number of space characters does not affect compilation results.
+Standard C says that whether implementation compresses a white-space sequence into one space character during the translation phase 3 is implementation-defined, but you usually do not have to worry about this. <Vertical-tab> or <form-feed> in a preprocessor directive line may adversely affect portability, since this is undefined in Standard C. mcpp converts it to one space character.
+Note:
+*1 Up to V.2.6.3 mcpp squeezed line top white spaces into one space.
+In V.2.6.4, it changed the behavior.
+
+
+
+This section describes the specifications of mcpp executables generated when DIFfile and makefile for each compiler system in the noconfig directory are used to compile mcpp with default settings. When a configure script is used to compile mcpp, the generated mcpp may differ, depending on configure's results, however, as long as OS and compiler system versions are same, generated mcpps would be same except for include directories.
+The compiler-independent-build of mcpp has the constant specifications regardless of the compiler system with which mcpp was compiled, except a few features dependent on OS and CPU.
+There are compiler-independent-build and compiler-specific-build for mcpp executables, and each executable has several behavioral modes. For those, refer to 2.1. This section describes the settings centering on STD mode.
+DIFfiles and makefiles are for the following compiler systems:
+
+
+ FreeBSD 6.3 | GCC V.3.4 |
+ Vine Linux 4.2 / x86 | GCC V.2.95, V.3.2, V.3.3, V.3.4, V.4.1 |
+ Debian GNU/Linux 4.0 / x86 | GCC V.4.1 |
+ Ubuntu Linux 8.04 / x86_64 | GCC V.4.2 |
+ Fedora Linux 9 / x86 | GCC V.4.3 |
+ Mac OS X Leopard / x86 | GCC V.4.0 |
+ CygWIN | 1.3.10 (GCC V.2.95), 1.5.18 (GCC 3.4) |
+ MinGW & MSYS | GCC 3.4 |
+ WIN32 | LCC-Win32 2003-08, 2006-03 |
+ WIN32 | Visual C++ 2003, 2005, 2008 |
+ WIN32 | Borland C++ V.5.5 |
+
+
+In addition, for the following compilers which I don't have, the difference files contributed from some users are contained here.
+
+
+ WIN32 | Visual C++ V.6.0, 2002 |
+ WIN32 | Borland C++ V.5.9 (C++Builder 2007) |
+
+
+Of all the macros defined in noconfig.H and system.H, the settings of those mentioned below are identical among every mcpp executable, regardless of their compiler systems.
+Each mcpp is compiled with DIGRAPHS_INIT == FALSE, so enables digraph when the -2 (-digraphs) option is specified.
+With TRIGRAPHS_INIT == FALSE, trigraph is enabled with the -3 (-trigraphs) option.
+With OK_UCN set to TRUE, Universal Character Name (UCN) can be used in C99 and C++.
+With OK_MBIDENT set to FALSE, multi-byte-characters cannot be used in identifiers.
+With STDC set to 1, the initial value of __STDC__ is 1.
+The translation limits are set as follows.
+
+
+ NMACPARS (Maximum number of macro arguments) | 255 |
+ NEXP (Maximum number of nested levels of #if expressions) | 256 |
+ BLK_NEST (Maximum number of nested levels of #if section) | 256 |
+ RESCAN_LIMIT (Maximum number of nested levels of macro rescans) | 64 |
+ IDMAX (Valid length of identifier) | 1024 |
+ INCLUDE_NEST (Maximum number of #include nest level) | 256 |
+ NBUFF (Maximum length of a source line) *1 | 65536 |
+ NWORK (Maximum length of an output line) | 65536 |
+ NMACWORK (Size of internal buffers used for macro expansion) | 262144 |
+
+
+On GCC-specific-build and Visual C-specific-build, however, NMACWORK is used as the maximum length of an output line.
+This macro differs on OS regardless of build types.
+MBCHAR (Default encoding of multibyte character):
+
+
+ Linux, FreeBSD, Mac OS X | EUC-JP |
+ WIN32, CygWIN, MinGW | SJIS |
+
+
+The settings of the macros below are different among compiler systems.
+STDC_VERSION (Initial value of __STDC_VERSION__):
+
+
+ Compiler-independent, GCC 2 | 199409L |
+ Others | 0L |
+
+
+HAVE_DIGRAPHS (Is digraphs output as it is?):
+
+
+ Compiler-independent, GCC, Visual C | TRUE |
+ Others | FALSE |
+
+
+EXPAND_PRAGMA (Is a #pragma line macro-expanded in C99?):
+
+
+ Visual C, Borland C | TRUE |
+ Others | FALSE |
+
+
+GCC 2.7-2.95 defines __STDC_VERSION__ to 199409L. However, in GCC V.3.*,V.4.*, __STDC_VERSION__ is no longer predefined by default and is now defined in accordance with an execution option. mcpp setting for GCC follows these variations.
+If STDC_VERSION is set to 0L, mcpp predefines __STDC_VERSION__ as 0L. So, specifying the -V199409L option sets __STDC__ and __STDC_VERSION__ to 1 and 199409L, respectively and allows only predefined macros that begin with '_', resulting in mcpp in the strictly C95 conforming mode. The -V199901L option specifies C99 mode.
+In C99 mode, mcpp predefines __STDC_HOSTED__ as 1.
+mcpp itself predefines neither __STDC_ISO_10646__, __STDC_IEC_559__ nor __STDC_IEC_559_COMPLEX__. These values are compiler-system-specific. In glibc 2 / x86, the system header defines __STDC_IEC_559__ and __STDC_IEC_559_COMPLEX__ as 1. Other compiler systems do not define them.
+If HAVE_DIGRAPHS is set to FALSE, digraph is output after converting to usual token.
+The argument of #pragma line beginning with STDC, MCPP or GCC is never macro-expanded even if EXPAND_PRAGMA == TRUE.
+Include directories are set as follows:
+System-specific or site-specific directories under UNIX-like OSs are as follows (common to compiler-independent-build and compiler-specific-build):
+
+
+ FreeBSD, Linux, Mac OS X, CygWIN | /usr/include, /usr/local/include |
+
+
+Mac OS X has also the framework directories set to /System/Library/Frameworks and /Library/Frameworks by default.
+On MinGW, /mingw/include is the default include directory.
+CygWIN GCC-specific-build changes /usr/include to /usr/include/mingw by -mno-cygwin option.
+For the implementation-specific directories that vary among compiler systems and their versions, see the DIFfiles. The compiler-independent-build does not set implementation-specific directories. mcpp for the compiler systems on Windows does not preset any directory but uses the environment variables: INCLUDE, CPLUS_INCLUDE. These environment variables are used by the compiler-independent-build too.
+If these default settings do not suit you, change settings to recompile mcpp, or use environment variables or the -I option.
+When the length of a preprocessed line exceeds NWORK-1, mcpp generally divides it into several lines so that each line length becomes equal to or less than NWORK-1. A string literal length must be equal to or less than NWORK-2.
+mcpp of GCC-specific-build and Visual C-specific-build, however, do not divide output line.
+Again for confirmation, the macros mentioned above in italics are used only to compile mcpp, and are not built-in macros in a mcpp executable.
+If you invoke mcpp without an input file and enter '#pragma MCPP put_defines', the built-in macros will be displayed.
+With __STDC__ set to 1 or higher, the macros that do not begin with '_' are deleted. The -N (-undef) option deletes all the macros other than __MCPP. After -N, you can use -D to defines macro symbols over again. When you use a different compiler system version from those specified here, -N and -D allow you to redefine your version macro without recompiling mcpp. The -D option allows you to redefine a particular macro without using -N or -U.
+When you use the -+ (-lang-c++) option to specify C++ preprocessing, __cplusplus is predefined with its initial value of 1L. In addition, some other macros are also predefined:
+Although there are some predefined macros in GCC, those predefined by GCC were few, until GCC V.3.2. Most of them are passed from gcc to cpp by the -D option. So, it is not necessary for mcpp to define them for compatibility. However, mcpp predefines these macros for being used in a stand alone manner, such as pre-preprocessing.
+GCC V.3.3 and later predefines 60 or 70 macros (suddenly). GCC-specific-build of mcpp V.2.5 and later for GCC V.3.3 or later also includes these predefined macros other than the above ones. These GCC-specific predefined macros are written in mcpp_g*.h header files, which is generated by installation of mcpp.
+Since FreeBSD, Linux, CygWIN, MinGW / GCC and LCC-Win32, Visual C 2008 have a type long long, an #if expression is evaluated in long long or unsigned long long. Visual C 6.0, 2002, 2003, 2005 and Borland C 5.5 do not have a "long long" type but __int64 and unsigned __int64 instead. These types are used.
+In the above compiler systems with type long ranges:
+
+[-2147483647-1, 2147483647] ([-0x7fffffff-1, 0x7fffffff])
+
+and unsigned long ranges:
+
+[0, 4294967295] ([0, 0xffffffff]).
+
+In the compiler systems with type long long ranges:
+
+[-9223372036854775807-1, 9223372036854775807]
+([-0x7fffffffffffffff-1, 0x7fffffffffffffff]),
+
+and unsigned long long ranges:
+
+[0, 18446744073709551615] ([0, 0xffffffffffffffff]).
+
+All the compiler-propers of the above compiler systems internally represent a signed integer as two's complement number. So do bit operations. This can be applied to mcpp's #if expression.
+Right shift of a negative integer is an arithmetic shift. This can be applied to mcpp's #if expression. (Right shifting an integer by one bit halves the value with the sign retained)
+In an integer division or modulus operation, if either or both operands are negative values, an algebraic operation like Standard C's ldiv() function is performed. This can be applied to mcpp's #if expression.
+These OSs use the ASCII basic character set. So does mcpp.
+There is a memory management routine, kmmalloc, that I developed. This routine has malloc(), free(), realloc() and other memory handling functions. If kmmalloc is installed in systems other than CygWIN or Visual C 2005 or 2008, kmmalloc is linked when the MALLOC=KMMALLOC (or -DKMMALLOC=1) option is specified in make. Also its heap memory debugging routine is linked. mcpp for Linux and LCC-Win32 uses EFREEP, EFREEBLK, EALLOCBLK, EFREEWRT and ETRAILWRT with an errno of 2120, 2121,2122, 2123 and 2124 assigned, and other mcpp uses 120, 121, 122, 123, and 124. (Refer to mcpp-porting.html#4.extra.) *2
+On the systems other than GNU and Visual C, you should preset the environment variable TZ, for example JST-9 in Japan. Or, the __DATE__ and __TIME__ macros are not set correctly.
+Note:
+*1 This limit applies also to the line spliced by <backslash><newline> deletion. Moreover, it applies to the line after converting a comment into a space and possibly concatenated multiple logical lines by a comment spreading across the lines.
+*2 CygWIN 1.3.10 and 1.5.18 provides malloc() that has an internal routine named _malloc_r() which is called by a few other library functions. So this malloc() cannot be replaced with other malloc(). Also in Visual C 2005 and 2008, the program terminating routine calls an internal routine of resident malloc(), hence other malloc() cannot be used.
+
+
+
+
+
+This section covers diagnostic messages issued by mcpp, as well as their meaning. By default, these messages are output to stderr. With the -Q option, they are redirected to the mcpp.err file in the current directory. A diagnostic message is output in the following manner:
+
+- "filename: line: " is followed by "fatal error: ", "error: " or "warning: " and then by any of the diagnostic messages shown in sections 5.3 to 5.9. Although the specification that a diagnostic message has to fit in one line that begins with "filename: line:" seems to lack of flexibility, I followed because it is a traditional way of implementing messages in C on UNIX and because various tools have already assumed that. Some mcpp messages do not fit in a line of usual terminal.
+
+ - If an error occurs during macro expansion, the macro invocation is displayed. For nested macro invocation, mcpp shows each macro names and its definitions, as well as the source filename and line number where the macro is defined.
+
+ - The source file name, the line number and the line at which an error has occurred are displayed. If an error has occurred in an included file, the names, line numbers and the #include lines of all the including files are displayed. Usually, a logical line with comments replaced with a space character is displayed. The logical line is constructed from one or more physical lines with '\' at the line end. If a comment spreads over several lines, several logical lines are concatenated into one, which is displayed as the line. In this case, the line number of the last concatenated physical line is displayed. Note that if an error occurs during the translation phase before processing a comment, the line in the phase is displayed.
+
+If the -j option is specified, mcpp outputs neither the above 2 nor 3.
+Diagnostic messages are divided into three levels:
+
+
+ fatal error | Indicates an error is so serious that it is no longer meaningful to continue preprocessing. |
+ error | Indicates there is a syntax or usage error. |
+ warning | Indicates code lacks of portability or may contain a bug. |
+
+
+Warnings are further divided into five classes:
+
+
+ Class 1 | Source code may contain a bug or at least lack portability. |
+ Class 2 | Probably, source code will present no problem in practical use, but is problematic in terms of Standard conformance. |
+ Class 4 | Probably, source code will present no problem in practical use, but is problematic in terms of portability. |
+ Class 8 | Rather surplus warnings to #if groups skipped, sub-expression in #if expression whose evaluation is skipped, and etc. |
+ Class 16 | Warning to trigraphs and digraphs. |
+
+
+Warnings other than Class 1 or 2 are rather specific to mcpp.
+mcpp has various types of diagnostic messages. For example, STD mode provides the following types of diagnostics for each level and class.
+
+
+ fatal error | 17 types |
+ error | 76 types |
+ warning class 1 | 49 types |
+ warning class 2 | 15 types |
+ warning class 4 | 17 types |
+ warning class 8 | 30 types |
+ warning class 16 | 2 types |
+
+
+Principally, these messages point the coding in question. The diagnostic messages below have a sample value embedded in a token or a numeric value from source code. For the messages with a macro name embedded, a value the macro is expanded into is shown in real messages.
+Depending on cases, a same message is issued as warning or error, in which case, this manual gives the first occurrence a detailed description. For the subsequent occurrences, the message is only listed.
+
+
+
+Of all the errors shown below, some errors, such as a buffer overflow, occur due to mcpp specification restrictions. Some macros in system.H define translation limits, such as a buffer size. Enlarge the buffer size and recompile mcpp if necessary, however, be careful not to increase it too much. A large buffer in a system with a small amount of memory may cause an "out of memory" error frequently.
+
+
+
+A fatal error occurs and preprocessing is terminated when it is no longer possible to continue preprocessing due to an I/O error or a shortage of memory, or it is no longer meaningful to do so due to a buffer overflow. A status value of failure is returned to a parent process.
+
+
+
+- Bug:
+This message has several types. Should it be issued, it would indicate mcpp's own bug. I think this message is rarely issued, but should it be issued, do not hesitate to let me know the situation.
+
+
+
+
+- File read error
+An error has occurred during reading a source file. Disk or file-system may have been damaged.
+
+ - File write error
+An error has occurred during writing to a file. Disk or file-system may have been damaged or full.
+
+ - Out of memory (required size is 0x1234 bytes)
+Runs short of memory. mcpp tried to obtain memory of 0x1234 bytes from the heap, but in vain. This error occurs when there are too many long macro definitions on a system with a small amount of memory. Divide your source file to decrease the number of macro definitions in one translation unit.
+
+
+
+
+- Too long header name "long-file-name"
+The length of the full path name of a file to include (file name concatenated with the specified directory path) has exceeded PATHMAX.
+
+ - Too long source line
+The length of a physical line in source file has exceeded NBUFF-2. The source code may not be written in C.
+
+ - Too long logical line
+The length of a logical line, which is constructed from the several physical lines with \ at the line end, has exceeded NBUFF-2. This error may occur when a defined macro is too long. The code should be written not as a macro but as a function.
+
+ - Too long line spliced by comments
+The length of a preprocessed line with a comment replaced with a space character has exceeded NBUFF-2. This error occurs when several lines are concatenated into one if a comment spreads over several lines. Divide the comment into several parts and write each on a separate line.
+
+ - Too long token
+A preprocessed line has a token with a length more than NWORK-2. mcpp tries to divide the preprocessed line into a length NWORK that the compiler-proper can accept. However, if a line contains a extremely long token, it sometimes fails to do so.
+
+The following four errors may also be caused by a buffer overflow at a token that is not so particularly long during macro expansion, in which case, you should divide the macro invocation.
+
+- Too long quotation "long-string"
+A string literal, character constant or header-name is too long. In case of a string literal, divide it. Standard conforming compiler concatenate adjacent string literals for you.
+
+ - Too long pp-number token "1234567890toolong"
+A preprocessing-number token is too long. This error is issued in Standard mode.
+
+ - Too long number token "12345678901234......"
+A number token is too long. This error is issued in pre-Standard mode.
+
+ - Buffer overflow scanning token "token"
+A buffer overflow has occurred during token scan. This message is issued to tokens other than string literals, character constants, header-names and pp-numbers.
+
+ - More than BLK_NEST nesting of #if (#ifdef) sections
+The depth of nested #if, #ifdef, and #ifndef has exceeded BLK_NEST. (In real message, the macro name BLK_NEST is replaced with an actual numerical value. This is applied to all the messages below with a macro name embedded.) Divide the #if section.
+
+ - More than INCLUDE_NEST nesting of #include
+The depth of nested #included has exceeded INCLUDE_NEST. Probably the #includes are in infinite recursion.
+
+
+
+
+
+- This is not the preprocessed source
+Although the "#pragma MCPP preprocessed" directive is found, this is not a source preprocessed by mcpp.
+
+ - This preprocessed file is corrupted
+This seems to be a source preprocessed by mcpp, but cannot be used because it is destroyed.
+
+
+
+
+mcpp issues an error message when it found a grammatical error. Standard C stipulates that a compiler system should issue a diagnostic message when they encounter a violation of syntax rules or constraints. Principally, Standard mode issues an error message to this type of violation, but sometimes issues a warning.
+mcpp issues an error message or warning to most of undefined items in Standard C. However, mcpp issues neither an error nor a warning to the following undefined items:
+
+- ' or /* in a header name in the form of a string literal: mcpp regards them as characters, resulting in a file open error. (' or /* in a header name enclosed with < and > is regarded as the beginning of a character constant or a comment, resulting in some errors.) Although how to treat \ in a header name is undefined in Standard C, mcpp does not check it because it may eventually cause an error when mcpp actually tries to open the file. mcpp on Windows issues a class 2 warning to \ and converts it to /.
+
+ - #undef defined: Although #undef-ing a name "defined" yields an undefined result, mcpp does not issue a message because, in the first place, mcpp does not allow definition of a macro named "defined", so the macro to be undefined never exists.
+ - Illegal multi-byte character sequence in a comment: Although how to deal with such character sequence is undefined in Standard C, mcpp does not issue a message because it does no harm. (mcpp issues a warning to an illegal multi-byte character sequence in string literals, character constants and header names.)
+
+ - Identifiers that begin with _ (Reserved for compiler systems): Although using these identifiers in a user program will cause an undefined result, mcpp does not check it because mcpp does not always have a means to decide whether these identifiers are used in a user program or the compiler-system.
+
+ - __STDC_ISO_10646__, __STDC_IEC_559__, and __STDC_IEC_559_COMPLEX__: Although #defining or #undef-ing these optional C99 predefined macros yields an undefined result, mcpp does not check it because mcpp does not always have a means to determine whether these macros appear in a user program or the compiler-system. (These macros are most likely to be defined in a header file of a compiler system.)
+
+ - UCN equivalent sequence: Although it is undefined in C99 how to deal with a UCN equivalent sequence generated by deleting <backslash><newline> during the translation phase 2 or by concatenating string literals, mcpp does not issue a message and regards it as a UCN.
+
+For details on what is a violation of syntax rule or constraint, undefined, unspecified or implementation-defined in Standard C preprocessing, refer to cpp-test.html.
+Even if an error occurs, mcpp continues preprocessing as long as they are not fatal one. mcpp shows the number of errors and returns the status of failure to the parent process when it exits.
+
+
+
+- Illegal control character 0x1b, skipped the character
+A control code other than a white space character is found in a string literal, character constant, header name or comment. mcpp skips it and continues preprocessing.
+
+The following several messages are all token-related errors. For the first four, mcpp skips the line in question and continues preprocessing. The first three are string literal or other token-related errors, indicating that a closing quotation mark is not found by the end of the logical line. This type of error occurs when you write a text that does not take a form of a preprocessing-token sequence in neither a string literal nor comment, as shown below:
+
+#error I can't understand.
+
+As processing-tokens are not so strictly defined as C tokens in the compiler-proper, most character sequences are regarded as pp-token sequences, as long as they belong to a source character set. Therefore, it is only this type of coding that causes a preprocessing-token error. Pp-token errors may occur in a skipped #if group.
+
+- Unterminated string literal "string
+A string literal is unterminated. A string literal cannot spread over several logical lines. If necessary, write a string literal on each of several lines and have the compiler concatenate them. This error may occur during conversion into a string by a #operator, in which case the line in question is not skipped. mcpp in OLDPREP mode does not make an unterminated string literal an error. (Instead, it regards the line end as literal end.) Nor mcpp does when invoked with the -a (-lang-asm, -x assembler-with-cpp) option (it issues a warning); it regards an unterminated string literal as a literal spreading over several lines and concatenates a line with the next by inserting \n.
+
+ - Unterminated character constant 't understand.
+A character constant is not terminated. mcpp in OLDPREP mode and lang-asm mode does not make it an error. (Instead, it regards the line end as literal end.)
+
+ - Unterminated header name <header.h
+A header-name is not terminated. " or ' in a header-name enclosed with < and > causes the above two errors, not this one. If /* is found in a header-name enclosed with < and >, mcpp regards it and the following text as a comment.
+
+ - Empty character constant ''
+A character constant is empty.
+In lang-asm mode, mcpp only issues a warning, but an error in other modes.
+
+ - Illegal UCN sequence
+mcpp in STD mode invoked with __STDC_VERSION__ set to 199901L or in C++ mode can recognizes UCN. This message is issued when the number of orders of a hex sequence that begins with \u and \U in an identifier is less than four and eight, respectively. (If this occurs in a character constant in a #if expression, an undefined escape sequence warning results. Other tokens are not checked by mcpp.)
+
+ - UCN cannot specify the value "0000007f"
+UCN cannot specify a hex value in the ranges of 0 to 9f, except for 0x24 ($), 0x40 (@) and 0x60 (`), and of d800 to dfff. The former range agrees with the range of the basic source character set. The latter range falls into the reserved area for special characters. Note C++ does not have the latter restriction. (Specifications slightly differ among Standards for an unknown reason.) However, when mcpp in STD mode is invoked as C++ with -V199901L to preset the __cplusplus macro to 199901L or higher, mcpp behaves in accordance with the C99 specifications in this respect.
+
+ - Illegal multi-byte character sequence "XY"
+mcpp in STD mode compiled with OK_MBIDENT == TRUE allows for a multi-byte character in an identifier in C99, however, it will cause an error when it finds a character sequence that cannot be regarded as a multi-byte character although the first byte of the sequence is that of a multi-byte character. (In other than identifier, this illegal sequence causes a warning.)
+
+
+
+This section covers messages issued when a source file ends with an unterminated #if section or macro invocation. If the file (not included file) marks the end of input, the message "End of input", not "End of file", is issued.
+These diagnostic messages are issued as an error or warning, depending on mcpp modes.
+Standard mode issues these messages as error, in which case mcpp skips the macro invocation in question and restores relationship between paired directives in a #if section to that of when the file is initially included.
+On the other hand, pre-Standard mode issues warnings. OLDPREP mode does not even issue warning except on unterminated macro call.
+
+- End of file within #if (#ifdef) section started at line 123
+#if (#ifdef or #ifndef) on the line 123 does not have a corresponding #endif.
+
+ - End of file within macro invocation started at line 123
+A macro invocation that begins at the line 123 is not terminated by the end of the file. This error may occur when an argument has an ill-balanced parenthesis, or when a token error occurs between opening and closing parentheses, in which case, mcpp continues to read tokens for a corresponding parenthesis until it reaches to the file end. (Possibly, a buffer overflow may occur before reaching there.) In addition, since macro expansion specifications vary among modes, a macro that is successfully expanded in a mode may not in other modes.
+
+
+
+This section covers errors caused by ill balanced directives of #if, #else and etc. Even if mcpp finds ill balance among these directives, it continues processing, assuming that the processing group so far still continues. mcpp checks to see whether directives are balanced even in a skipped #if group.
+The #if (#ifdef) section is a block between #if (#ifdef or #ifndef) and #endif. The #if (#elif, #else) group is a smaller block, say, between #if (#ifdef or #ifndef) and #elif, between #elif and #else, or between #else and #endif within the #if (#ifdef) section.
+
+- Already seen #else at line 123
+Another #else (#elif) is found after #else at the line 123. #endif may be missing.
+
+ - Not in a #if (#ifdef) section
+#else (#elif, #endif) is found without #if (#ifdef or #ifndef).
+
+ - Not in a #if (#ifdef) section in a source file
+An included file has #else (#elif or #endif) without #if (#ifdef or #ifndef). If the included file in question had been in the including source file, this error would never have occurred. In other words, each of these directives contained in a separate file is not balanced by itself. The only Standard mode issues this error. (pre-Standard mode issues a warning.)
+
+The following two errors occur when #asm and #endasm are not balanced. These messages are issued only by compiler-specific-build for a particular compiler system and in pre-Standard mode.
+
+- In #asm block started at line 123
+A #asm block that begins at the line 123 has another #asm. #asm cannot be nested. Maybe, the programmer forgot to write #endasm.
+
+ - Without #asm
+#endasm is found in a non #asm block.
+
+
+
+This section covers simple syntax errors on directive lines that begin with #. The errors hereinafter discussed until 5.4.12 do not occur within a skipped #if group. (mcpp invoked with the -W8 option issues a warning to an unknown directive.)
+When mcpp finds a directive line with a syntax error, it ignores the line and continues processing, in which case, it neither regards #if as the beginning of a section nor changes line numbers even with a #line. If a #include or #line line has a macro argument, Standard mode expands the macro and checks the syntax. Pre-Standard mode does not expand the macro.
+Although the messages below do not show the directive name in question, the source line that follows the message show it. (A directive line with a comment converted to a space character always becomes one line, which is called "preprocessed line" here.)
+
+- Illegal #directive "123"
+A token that immediately follows # is not a name. The token must be a directive name. (OLDPREP mode regards #123 as #line 123.)
+
+ - Unknown #directive "pseudo-directive"
+The directive "pseudo-directive" is not implemented. mcpp invoked with the -a (-lang-asm or -x assembler-with-cpp) option issues a warning, not an error.
+
+ - No argument
+#if, #elif, #ifdef, #ifndef, #assert or #line has no arguments.
+
+ - No header name
+A #include line does not have an argument, or expansion of a macro argument of a #include line results in no token.
+
+ - Not a header name "UNDEFINED_MACRO"
+The specified argument is not a header name. This message is issued when a macro that should define a header name is not defined. A header name must be enclosed with < and >, or ", ".
+
+ - Not an identifier "123"
+#ifdef, #ifndef, #define or #undef requires an identifier as an argument, but 123 is not an identifier.
+
+ - No identifier
+#define or #undef does not have an argument.
+
+ - No line number
+#line has a macro argument, but its expansion has resulted in no token.
+
+ - Not a line number "name"
+The first argument of a #line is not a numeric token (preprocessing number).
+
+ - Line number "0x123" isn't a decimal digits sequence
+The first argument of a #line must be a decimal integer. Standard mode issues this message. In pre-Standard mode, hex and octal integer tokens are allowed although a warning is issued.
+
+ - Line number "2147483648" is out of range of [1,2147483647]
+The first argument of a #line must be within the range of 1 to 2147483647. 0 is regarded as an error. This is applied to Standard mode.
+
+ - Not a file name "name"
+The second argument of a #line, if any, must be a string literal. An identifier or wide string literal is not allowed here.
+
+The following error occurs only in Standard mode and this directive is ignored. OLDPREP mode issues neither an error nor a warning. KR mode issues a warning and continues preprocessing as if there had been no "junk" text.
+
+- Excessive token sequence "junk"
+#else, #endif, #asm, or #endasm line has a junk text, or such text follows a valid argument of #ifdef, #ifndef, #include, #line or #undef line.
+
+
+
+This section covers syntax-related errors in #if, #elif and #assert directives. If a #if (#elif) line has these errors, mcpp evaluates it to false, skips the #if (#elif) group, and continues processing.
+For a skipped #if (#ifdef, #ifndef, #elif or #else) group, mcpp checks validity of C preprocessing tokens and balance of these directives, but not other grammatical errors.
+A #if line has a sub-expression whose evaluation is skipped. For example, in case of #if a || b, if "a" is evaluated to true, "b" is not evaluated at all. However, the following 14 types of syntax errors or translation limit errors are checked, even if they are located in a sub-expression whose evaluation is skipped.
+
+- More than NEXP*2-1 constants stacked at "12"
+The number of constants in the stack has exceeded NEXP*2-1 when mcpp tried to evaluate "12" in a #if expression. The depth of nested #if expressions is too deep.
+
+ - More than NEXP*3-1 operators and parens stacked at "+"
+The total number of operators and parenthesis in the stack has exceeded NEXP*3-1 when mcpp tried to evaluate '+' in a #if expression. (A pair of parentheses is counted as two.) The depth of nested #if expressions is too deep.
+
+ - Misplaced constant "12"
+A #if expression has a constant '12' where no constant should be found. This error occurs when casting, such as (int)0x8000, is used in a #if expression, where casting is not allowed. In this case, (int)0x8000 is evaluated to (0)0x8000, causing this error. The int is regarded as an identifier that is not defined as macro and is evaluated to 0.
+
+ - Operator ">" in incorrect context
+A #if expression has a > operator where no > should be found. If a macro MACRO is defined as 0 token, #if MACRO > 0 will be expanded to #if > 0, causing this error, which is indicated by the preceding warning -- Macro "MACRO" is expanded to 0 token.
+
+ - Unterminated expression
+A #if expression is not terminated. This error is caused by, for example, #if a || MACRO with MACRO defined as 0 token.
+
+ - Excessive ")"
+A #if expression has a ")" that does not corresponds to "(".
+
+ - Missing ")"
+A #if expression does not have a ")" that corresponds to "(".
+
+ - Misplaced ":", previous operator is "+"
+: without a corresponding ?.
+
+ - Bad defined syntax
+A #if defined has a syntax error. This error is caused by an unbalanced parenthesis or missing identifier in an argument. When a macro expansion causes this error, mcpp displays this message followed by an expansion result.
+
+ - Can't use a string literal "string"
+A string literal is not allowed as a constant in a #if expression.
+
+ - Can't use a character constant 'a'
+In POSTSTD mode, a character constant, or a wide character constant is not allowed as a constant in a #if expression.
+
+ - Can't use the operator "++"
+A #if expression has an illegal operator, such as = or ++.
+
+ - Not an integer "1.23"
+Only integers, including character constants, are allowed as a constant in a #if expression.
+
+ - Can't use the character 0x24
+A #if expression contains an illegal character (code 0x24), which is not any of the preprocessing tokens: identifiers, operators, punctuators, string literals, character constants, and preprocessing numbers. (Control codes are excluded since they had been checked before.)
+Even compiler-specific-builds for compiler systems that allow $ in an identifier disallow it depending options.
+Of course, this is not checked in a skipped group.
+
+The following error messages are relevant to #if sizeof. Only pre-Standard mode issues this error.
+
+- sizeof: Syntax error
+A #if sizeof has a syntax error. This error is caused by an unbalanced parenthesis or missing arguments.
+
+ - sizeof: No type specified
+Like sizeof(*), the "type" of #if sizeof (type) is not specified. Note that sizeof ((*)()) is a valid syntax to determine the size of a pointer to a function.
+
+
+
+The following errors do not occur in a sub-expression whose evaluation is skipped. (mcpp invoked with the -W8 option issues a warning.)
+The Standards say that #if expression is evaluated by the largest integer type in C99 and long / unsigned long in C90 and in C++98. mcpp evaluate it by long long / unsigned long long even if in C90 or C++98, and issues a warning on the value outside of long / unsigned long in C90 and in C++98. In this subsection, please read the following long long / unsigned long long as long / unsigned long for the compiler without long long, and as long in pre-Standard mode. In POSTSTD mode, character constant in #if expression is not available and causes a different error.
+
+- Constant "123456789012345678901" is out of range
+An integer constant has a value that exceeded the range of unsigned long long.
+
+ - Integer character constant 'abcdefghi' is out of range
+A character constant 'abcdefghi' has a value that exceeded the range of unsigned long long.
+
+ - Wide character constant L'abcde' is out of range
+A wide character constant L'abcde' has a value that exceeded the range of unsigned long long. This error occurs only in STD mode.
+
+ - 8 bits can't represent escape sequence 'x123'
+An escape sequence in a character constant has exceeded the range of 8 bits ([0, 0xFF]).
+
+ - 16 bits can't represent escape sequence L'x12345'
+An escape sequence in a wide character constant has exceeded the range of 16 bits (32 bits for UTF-8). This error occurs only in STD mode.
+
+ - Division by zero
+A #if expression contains a division by zero. A division can be expressed using / or %. This error may be caused by a #if dividend/divisor with the divisor not defined as a macro. To avoid this error, "#if defined divisor && (dividend/divisor ..)" is recommended.
+
+ - Result of "op" is out of range
+An operation result using the operator op is out of range of (unsigned) long long. Op is any of binary operators: *, /, %, +, and -. When two's complement representation is used, the unary operator '-' will cause an overflow with -LLONG_MIN. Unsigned long long will never cause an overflow, so it does not cause this error. If the result of an algebraic calculation is out of range, a warning is issued.
+
+The following errors are relevant to sizeof. They are not issued in a sub-expression whose evaluation is skipped (The -W8 option issues a warning). Only in pre-Standard mode.
+
+- sizeof: Unknown type "type"
+The "type" of #if sizeof (type) is unknown.
+
+ - sizeof: Illegal type combination with "type"
+A type combination, like #if sizeof (long float), is invalid.
+
+
+
+This section covers #define related errors. A macro will not be defined if an error occurs at #define. The # and ## operator related errors occurs in Standard mode. __VA_ARGS__ related errors also occur in Standard mode. Although variable argument macro is a C99 specification, mcpp allows these macros to be used in C90 and C++ modes for compatibility with GCC and Visual C++ 2005, 2008. (A warning is issued.)
+
+- "defined" shouldn't be defined
+A macro named "defined" cannot be defined. Standard mode checks this.
+
+ - "__STDC__" shouldn't be redefined
+The __STDC__ macro cannot be #defined. The same can be said with __STDC_VERSION__, __FILE__, __LINE__, __DATE__ and __TIME__ (__STDC_HOSTED__ in C99 mode, and __cplusplus when mcpp is invoked with -+ option). Standard mode checks these macros.
+
+ - "__VA_ARGS__" shouldn't be defined
+C99 allows a variable argument macro with the __VA_ARGS__ parameter in the replacement list, but this identifier cannot be defined as a macro.
+
+ - More than NMACPARS parameters
+The number of parameters of a macro definition has exceeded NMACPARS.
+
+ - Empty parameter
+A macro definition has an empty parameter.
+
+ - Illegal parameter "123"
+A token other than an identifier is used in a parameter of a macro definition. In Standard mode, even an identifier __VA_ARGS__ cannot be used.
+
+ - Duplicate parameter name "a"
+A macro definition has a duplicate parameter name "a".
+
+ - Missing "," or ")" in parameter list "(a,b"
+A macro definition does not have a parenthesis ")" that closes a parameter list. Or, a parameter is followed by neither ',' nor ')'.
+
+ - No token before ##
+No token precedes the ## operator in the replacement list of a macro definition.
+
+ - No token after ##
+No token follows the ## operator in the replacement list of a macro definition.
+
+ - ## after ##
+The replacement list of a macro definition has a token sequence of "## ##". Some may do not regard this as error, but since concatenation of ## with other token always generates an invalid token, when this happens in macro expansion, it always causes an error. mcpp makes it an error when it finds this in a macro definition.
+
+ - Not a formal parameter "id"
+A function-like macro definition has a # operator whose operand id is not a parameter name.
+
+ - "..." isn't the last parameter
+"..." must be the last parameter of a macro definition. In pre-Standard mode, "..." causes an illegal parameter error.
+
+ - "__VA_ARGS__" without corresponding "..."
+"__VA_ARGS__", an identifier in a replacement list, can be used only when it has a corresponding "..." parameter.
+
+In STD mode of GCC-specific-build, if you write GCC2-spec variadic using __VA_ARGS__, you will get this error.
+__VA_ARGS__ should be used only in GCC3-spec or C99-spec variadic.
+
+- __VA_ARGS__ cannot be used in GCC2-spec variadic macro
+
+
+
+This section covers #undef related errors.
+
+- "__STDC__" shouldn't be undefined
+The __STDC__ macro cannot be #undefined. The same can be said with __STDC_VERSION__, __FILE__, __LINE__, __DATE__ and __TIME__ (__STDC_HOSTED__ in C99 mode, and __cplusplus when invoked with -+ option). Standard mode checks these macros.
+
+
+
+This section covers macro expansion errors. mcpp displays a macro definition, as well as the source filename and line number where it is found. The errors related to # or ## operator can occur only in Standard mode.
+
+- Less than necessary N argument (s) in macro call "macro( a)"
+A macro invocation has an insufficient number of arguments. This macro requires N number of arguments. mcpp assigns a zero token to missing arguments and continues to process. mcpp does not regard a macro that takes only one parameter with zero number of arguments specified as error because it cannot distinguish an empty argument from a missing argument. OLDPREP mode issues a warning instead of an error on this case.
+
+ - More than necessary N argument (s) in macro call "macro( a, b, c)"
+A macro invocation has too many arguments. The macro should take N number of arguments. mcpp ignores surplus arguments and continues processing. In OLDPREP mode, a warning is issued instead of an error.
+
+ - Not a valid preprocessing token "+12"
+The ## operator has concatenated two pp-tokens, resulting in an invalid token "+12". The token may be separated at a later time. Standard mode continues processing. STD mode invoked with the -lang-asm (-x assembler-with-cpp, -a) option also issues a warning instead of an error.
+
+ - Not a valid string literal "\\"str\""
+When a # operator tried to convert macro invocation's argument into a string, a token sequence of "\\"str"" has resulted, instead of a single valid string literal. \ that precedes or follows the literal cause the error. (When STD mode tries to convert such an argument into a string, it may or may not cause an unterminated string literal error.) STD mode tries to continue processing but maybe an error occurs again in the compilation phase. This error can not occur in POSTSTD mode. (An unterminated string literal error may occur).
+
+When the following errors occur, the macro invocation will be skipped.
+
+- Buffer overflow expanding macro "macro" at "something"
+A buffer overflow has occurred at "something" during macro expansion. Divide the macro.
+
+ - Unterminated macro call "macro( a, (b, c)"
+A macro invocation is not terminated. This error usually occurs when a macro invocation on the directive line is not terminated at that line. In Standard mode, a macro in an argument is expanded before argument substitution, in which case the macro invocation must be terminated in the argument. In POSTSTD mode, a macro invocation unterminated in a replacement list also causes this error.
+
+ - Rescanning macro "macro" more than RESCAN_LIMIT times at "something"
+The depth of nested macros is so deep that the number of rescans has exceeded RESCAN_LIMIT at "something" during expansion. This error occurs only in Standard mode but it is quite rare.
+
+ - Recursive macro definition of "macro" to "macro"
+A macro definition is recursive. This error occurs only in pre-Standard mode. When the number of rescans has exceeded PRESTD_RESCAN_LIMIT, mcpp regards it as a recursive macro definition.
+
+The following errors can occur only with -K option in STD mode.
+These errors mean that the macro is extremely complex and buffer for macro notification ran short.
+Almost impossible to happen in real life.
+
+- Too many magics nested in macro argument
+
- Too many nested macros in tracing MACRO
+
+
+
+
+- #error
+A #error directive has been executed. Following this message, the #error line is displayed. If an argument itself contains a token error, such as unterminated strings, #error is not executed. The only Standard mode has #error.
+
+ - Preprocessing assertion failed:
+A #assert directive has been executed. Following this message, #assert line arguments are displayed. If any of the arguments contains an error, mcpp regards assertion has failed. The only mcpp of other than GCC-specific-build in pre-Standard mode has #assert.
+
+
+
+
+- Can't open include file "file-name"
+This error occurs when a file to include does not exist. Probably, this is due to wrong spelling of the file name or an "include directory" should have been specified.
+
+
+
+The following two are checked when mcpp is invoked with the -V199901L option. The same thing can be said when mcpp is invoked with the -V199901L option in C++ mode.
+
+- Operand of _Pragma() is not a string literal
+The _Pragma() operator must take an argument of one string literal or wide string literal.
+ - _Pragma operator found in directive line
+_Pragma() operator is an alternative to #pragma directive.
+It cannot be used in a directive line.
+
+
+
+
+A warning is issued when source, although syntactically correct, possibly contains some coding mistakes or has a portability problem. Warnings are divided into five classes: 1, 2, 4, 8, and 16. These classes are enabled when the -W <n> option is specified on mcpp invocation. <n> specifies a ORed value of any of 1, 2, 4, 8, and 16. Class 4, for example, can be specified explicitly with -W4, and implicitly with -W<n>, where <n> is 1|4, 1|2|4, 2|4, 1|4|8, 4|8, 4|16, etc., because the AND-ed value of <n> and 4 is 4 (non-0).
+Standard mode issues an error message to most of the source code that causes a Standard C undefined behavior, but a warning to some.
+Likewise, Standard mode always issues a warning to the source code which uses Standard C unspecified specifications, except for the following:
+
+- Evaluation order of sub-expressions in a #if expression: Although the evaluation order of the operands of operators other than ||, &&, ? , and : is unspecified in Standard C, mcpp does not issue a warning because #if expression does not cause side-effects and therefore the evaluation order does not affect results. mcpp always evaluates integer constant tokens from left to right in the order they appear and performs an operation in accordance with an operator grouping rule when their values are needed.
+
+Standard mode issues a warning to many implementation-defined behaviors, except for the following:
+
+- Directories the #include directive searches for a file to include and how to construct a header-name pp-token from #include's argument: mcpp does not issue a warning because there will be too many warnings if it actually does. Unless a header name is a macro, the source token sequence, including spaces, are used as it is. If it is a macro, the expanded result, including spaces, is used. (In POSTSTD mode, a space character is inserted between pp-tokens during macro expansion. A header-name is constructed by concatenating the resulting pp-tokens from < to > and then by removing space characters. Anyway, in POSTSTD, a header-name enclosed with < and > is obsolete.) When mcpp encounters '#pragma MCPP debug path' or '#debug path', it displays a search path, instead of issuing a warning.
+
+ - Evaluation of a single byte character constant, such as 'a', and of a wide character constant that consists of only one multi-byte character, such as L'X', in a #if expression.: mcpp does not issue a warning because even with the same basic character set used, there are an unlimited number of factors that limits the portability, such as single byte Katakana, presence or absence of a sign, encoding scheme of Kanji, and etc. The same thing can be said with UCN.
+
+ - Bit operations using negative numbers in a #if expression: Although bit operation results depend on internal representation of an integer on a machine, most of the machines use two's complement representation, thus causing no portability problem. However, mcpp issues a warning to a right bit shift operation of a negative value and a division operation involving either or both of negative operands because they lack of portability.
+
+ - A sequence of several white space characters as a token separator: Standard C states that it is implementation-defined whether a sequence of white space characters is replaced by one space character in the translation phase 3, but you do not have to worry about this. Portability becomes an issue only when a preprocessing directive line has <vertical-tab> or <form-feed>. mcpp converts it into one space character and issues a warning. For a sequence of several space characters and tabs, mcpp compresses it into one space character without a warning.
+
+ - Compiler system's own built-in macros will not cause warning.
+
+ - #pragma sub-directive: Principally, mcpp does not issue a warning to #pragma sub-directive, however, for #pragma once, #pragma __setlocale, #pragma MCPP * which mcpp itself processes, it issues a warning if they have an invalid argument. In addition, mcpp issues a warning to GCC V.3's #pragmas, such as #pragma GCC poison (dependency), that resident preprocessor processes but mcpp does not.
+
+ - Doubled \: Although it is implementation-defined in C99 whether a single \ is changed into double \ (\\) when the # operator converts a UCN sequence into a string, mcpp does not issue a warning to this. mcpp does not double \.
+
+As you see, mcpp can perform almost all the portability checks necessary at a preprocessing level.
+POSTSTD mode is identical with STD mode except for some specification differences described in section 2.1.
+Regardless of the number of warnings, mcpp always returns a status of success. mcpp invoked with the -W0 option does not issue a warning.
+
+
+
+- Converted [CR+LF] to [LF]
+Converted the newline code from [CR+LF] to [LF]. This warning is issued when the source file for Windows is compiled on UNIX-like systems. This warning is issued only once, on warning level of class 1 in compiler-independent-build and class 2 in compiler-specific-build.
+
+ - Illegal control character 0x1b in quotation
+A string literal, character constant or header name has a control code other than a white space character, which may cause an error in the compiler-proper. This way of coding is not desirable. A control code in string literals or character constants should be written using an escape sequence.
+
+ - Illegal multi-byte character sequence "XY" in quotation
+The first byte (X) of "XY" in a string literal, character constant or header name is the first byte of a multi-byte character (Kanji), while the second byte (Y) is not the second byte of a multi-byte character. "XY" may be displayed garbled. mcpp does not regard "XY" as a single multi-byte character. It treats the first byte as a single-byte character and the second byte as the next character.
+
+mcpp usually does not issue a warning to a character in an external character set, as long as it is within the proper range. Even within the proper range, there are some holes (no corresponding characters). mcpp does not check whether such a character is defined or not. The following table shows the range of each multi-byte character set:
+
+
+ Encoding | first byte | second byte |
+ shift-JIS | 0x81-0x9f, 0xe0-0xfc | 0x40-0x7e, 0x80-0xfc |
+ EUC-JP | 0x8e, 0xa1-0xfe | 0xa1-0xfe |
+ KS C 5601 | 0xa1-0xfe | 0xa1-0xfe |
+ GB 2312-80 | 0xa1-0xfe | 0xa1-0xfe |
+ Big Five | 0xa1-0xfe | 0x40-0x7e, 0xa1-0xfe |
+ ISO-2022-JP | 0x21-0x7e | 0x21-0x7e |
+
+
+Beside character codes, ISO-2022-JP has a shift sequence. Apart from the shift sequence, all the multi-byte characters other than UTF-8 are two bytes length.
+
+In UTF-8, multi-byte characters are mostly 2 or 3 bytes, and possibly 4 bytes length.
+Most of kanji are encoded in 3 bytes.
+The first byte is within the range of 0xc2 to 0xef, second, third and fourth 0x80 to 0xbf.
+Details are omitted here.
+Anyway, all the bytes must fall within these ranges.
+In addition, there are some illegal sequences even in these ranges: mcpp warns at those sequences.
+
+Note that since mcpp is unable to recognize EUC-JP's three byte encoding (JIS X 0213), it regards 0x8f + 0xa1-0xfe + 0xa1-0xfe not as one character but as two characters of 0x8f and 0xa1-0xfe + 0xa1-0xfe. As a result, mcpp does not issue a warning to the three byte encoding and can evaluate it correctly, except for a wide character constant in a #if expression. In EUC-JP, a character with the first byte of 0x8e (a half-width Katakana) is encoded in two bytes, and treated as a multi-byte character.
+
+This warning is not issued in a skipped #if group.
+
+ - "/*" in comment
+A comment has a sequence of /*. Unless it is intended, the programmer may have forgot to enclose the comment. Comments cannot be nested.
+
+ - Too long identifier, truncated to "very_long_identifier"
+Since the length of an identifier has exceeded IDMAX, it is truncated to IDMAX.
+
+ - Illegal digit in octal number "089"
+An octal numeric token contains 8 or 9. The only pre-Standard mode issues this warning. Standard mode does not check whether a numerical token on lines other than #if directives is correct or not. If a #if expression has an octal numeric token of 8 or 9, it will cause a "Not an integer" error.
+
+ - Unterminated string literal, catenated to the next line
+Although an unterminated string literal in a logical line is normally regarded as an error, mcpp invoked with the -lang-asm (-x assembler-with-cpp, -a) option regards it as a multi-line string literal and concatenates the line with the next by inserting '\n'. This way of writing has no advantage. Using a functionality to concatenate adjacent string literals is preferable.
+ - Unterminated character constant 't understand.
+mcpp in lang-asm mode does not regard this an error.
+ - Empty character constant ''
+A character constant is empty.
+In lang-asm mode, mcpp only issues a warning.
+
+
+
+On unterminated line or comments, the following messages are issued. OLDPREP mode does not issue warning.
+
+- End of file with no newline, supplemented newline
+A file must be terminated with a newline. mcpp supplements the line with <newline>.
+
+ - End of file with \, deleted the \
+A file must not be terminated with <backslash><newline>. mcpp deletes the <backslash>.
+
+ - End of file with unterminated comment, terminated the comment
+A comment is not terminated. mcpp terminates the comment.
+
+The following warning messages are issued in pre-Standard mode. Pre-Standard mode ignores these warnings to continue processing until it reaches the end of input, causing many unexpected results. Standard mode issues an error. OLDPREP mode does not issue even warning, except on unterminated macro.
+
+- End of file within #if (#ifdef) section starting from line 123
+
+ - End of file within macro invocation starting from line 123
+
+ - End of file with unterminated #asm block starting from line 123
+#asm on the line 123 does not have a corresponding #endasm.
+
+
+
+
+- The macro is redefined
+mcpp displays this message followed by the source filename and line number where this macro definition is found.
+The macro has been redefined with a different content. Source must not be well organized. The following conditions must be met for macro definitions with the same name to exist. Or, the new definition is regarded as a redefinition, and a warning is issued.
+
+
+- Have the same number of parameters.
+ - Have the same replacement list. (One or more white space character between tokens are regarded as one. In POSTSTD, the difference of the token separators does not matter because any number of space characters is changed into one, regardless of the presence or absence of the token separators.)
+ - In Standard mode, parameter names must be the same. In POSTSTD mode and in pre-Standard mode, they are not checked.
+
+
+ - Unknown argument "name"
+There is no such an argument of '#pragma MCPP debug' or '#debug' as "name".
+ - No argument
+A '#pragma MCPP debug' or '#debug' does not have an argument.
+ - Not an identifier "123"
+The argument of a '#pragma MCPP debug' or '#debug' is not an identifier.
+
+The following message is issued only in Standard mode.
+
+- "and" is defined as macro
+"and" is defined as a macro in C++.
+Whereas in C95 "and" or other 11 names are defined as macros by <iso646.h>, those are operator tokens in C++,
+
+The following message is issued only in STD mode.
+
+- No space between macro name "MACRO" and repl-text
+There is no space between macro name and replacement list of a #define line. Normally, this does not happen, but it does happens when an illegal character is used in a macro name as follows:
+
+#define THIS$AND$THAT(a, b) ((a) + (b))
+
+mcpp interprets this as follows:
+
+#define THIS $AND$THAT(a, b) ((a) + (b))
+
+and issues a warning. Of course, this is a quite rare case.
+
+The following warnings are issued only in lang-asm mode.
+
+- Illegal #directive "+"
+
- Unknown #directive "pseudo-directive"
+Though these are usually errors, lang-asm mode issues only warnings.
+
+The following warnings on #pragma line are issued only in Standard mode.
+The lines are outputted in principle in spite of the warnings.
+However, the lines to be processed by preprocessor such as most of the lines starting with #pragma MCPP or #pragma GCC are not outputted.
+The pragmas for compiler or linker such as #pragma GCC visibility * are outputted without warning.
+
+- No sub-directive
+A #pragma line does not have any argument. The line is ignored.
+
+ - Unknown encoding "encoding"
+The encoding name, "encoding", specified with #pragma __setlocale( "encoding") is not implemented. For the encoding name, refer to 2.8.
+
+ - Too long encoding name "encoding"
+The encoding name, "long-long-encoding", specified with #pragma __setlocale( "long-long-encoding") exceeds 19 bytes. mcpp ignores it.
+
+ - Bad push_macro syntax
+ - Bad pop_macro syntax
+There is a syntax error in #pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro or #pragma pop_macro. To use these #pragma directives, first enclose a macro name in an argument with ", " and then further enclose with ( ). For example, ("MACRO"). (A redundant specification for compatibility with Visual C.)
+
+ - "MACRO" has not been defined
+MACRO in the argument,("MACRO"), for #pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro, or #pragma pop_macro is not defined as a macro.
+ - "MACRO" is already pushed
+MACRO of #pragma MCPP push_macro ("MACRO") has been pushed and then further #undef-ed. Without redefining the MACRO, push would not be possible.
+ - "MACRO" has not been pushed
+MACRO in #pragma MCPP pop_macro( "MACRO") has not been pushed. It may have been already popped.
+
+The GCC-specific-build issues the following warnings:
+
+- Ignored #ident
+ - Ignored #sccs
+#ident or #sccs lines are ignored.
+
+GCC-specific-build issues a Class 2 warning to a line with #pragma GCC followed by either poison or dependency and does not output the line. GCC V.3 resident preprocessor process the line but mcpp does not.
+The following warnings are issued only in pre-Standard mode. Standard mode regards them as errors.
+
+- Not in a #if (#ifdef) section in a source file
+ - Line number "0x123" isn't a decimal digit sequence
+
+KR mode issues the following warning. Standard mode issues the same warning only to #pragma once, #pragma MCPP put_defines, #pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro, #pragma pop_macro, #pragma MCPP debug, #pragma MCPP end_debug, and #endif for GCC-specific-build on STD mode; for other directives, Standard mode issues an error. OLDPREP mode issues neither an error nor a warning.
+
+- Excessive token sequence "junk"
+
+
+
+The following three warnings are relevant to an argument of #if, #elif, or #assert:
+
+- Macro "MACRO" is expanded to "defined"
+The macro MACRO in a #if expression has been expanded to "defined". mcpp treats this strange macro not as identifier but as operator. How to treat it is undefined in Standard C.
+
+ - Macro "MACRO" is expanded to "sizeof"
+The macro MACRO in a #if expression has been expanded to sizeof. mcpp treats this strange macro not as identifier but as operator. Pre-Standard mode issues this warning.
+
+ - Macro "MACRO" is expanded to 0 token
+The macro MACRO has been expanded to zero token. If this happens in a #if expression, it almost always causes an error. The purpose of this warning is to indicate the cause of an error.
+
+The followings warnings are also relevant to an argument of #if, #elif or #assert. They are not issued in a sub-expression whose evaluation is skipped. (mcpp invoked with the -W8 option issues them.)
+
+- Undefined escape sequence '\x'
+There is no such escape sequence as \x. \x is evaluated to a two byte sequence. (Of course, an escape sequence of "\x" followed by a hex string is valid.) This warning is also issued to a UCN with an insufficient number of orders.
+
+The followings warnings are relevant to operations and types in a constant expression on #if, #elif or #assert lines. No warnings are also issued in a skipped sub-expression. (mcpp invoked with -W8 issues them.)
+mcpp evaluate #if expression by long long / unsigned long long even if in C90 or C++98, and issues a warning on the value outside of long / unsigned long in C90 and in C++98. Also on LL suffix in other than C99, mcpp issues a warning. These warnings are of class 1 in compiler-independent-build and class 2 in compiler-specific-build. In POSTSTD mode, character constants are not used in #if expression, hence no warning is issued. (Those make errors.)
+
+- Constant "123456789012" is out of range of (unsigned) long
+An integer constant has a value that exceeded the range of unsigned long.
+ - Integer character constant 'abcde' is out of range of unsigned long
+A character constant 'abcde' has a value that exceeded the range of unsigned long.
+ - Wide character constant L'abc' is out of range of unsigned long
+A wide character constant L'abc' has a value that exceeded the range of unsigned long. This error occurs only in STD mode.
+ - Result of "op" is out of range of (unsigned) long
+An operation result using the operator op is out of range of (unsigned) long. Op is any of binary operators: *, /, %, +, and -. When two's complement representation is used, the unary operator '-' will cause an overflow with -LONG_MIN. Unsigned long will never cause an overflow, so it does not cause an error. If the result of an algebraic calculation is out of range, a warning is issued.
+ - LL suffix is used in other than C99 mode "123LL"
+LL suffix is used for an integer in other than C99 mode.
+ - Shift count "40" is larger than bit count of long
+The value of the right operand of a bit shift operator, << or >>, exceeds the bit count of long.
+
+ - Negative value "-1" is converted to positive "18446744073709551615"
+A mixture of signed and unsigned operations results in conversion of a signed negative value into an unsigned positive value. This is not an error, but indicates source code may contain a bug. For both operands of a binary operator, such as *, /, %, +, -, <, >, <=, >=, ==, !=, &, ^ and | , and the second and third operands of a ternary operator, ? and :, if one operand is unsigned and the other is signed, the signed one is always converted into unsigned.
+
+ - Illegal shift count "-1"
+The value of the right operand of a bit shift operator, << or >>, is a negative number or exceeds the bit count of long long. Probably, this is also a bug in source code.
+
+ - "op" of negative number isn't portable
+If an operation using a binary operator (op) results in either or both of negative operands, it lacks of portability. "Op" is any of /, %, and >>. The >> operator with a negative left operand provides portability across compiler systems on computers having an arithmetic shift command, where a one-bit shift means a division by 2. Otherwise, it does not provide portability.
+
+
+
+In these warnings, mcpp displays a macro definition followed by the source filename and line number where the macro is defined.
+
+- Macro started at line 123 swallowed directive-like line
+mcpp has read a line that begins with # as an argument of the macro that begins at the line 123. Maybe, the macro invocation has a bug. If it had not been for the macro, the line that begins with # would have been interpreted as a directive line. The same thing could be said if the macro had been located in a #if group whose evaluation is skipped, and the line is treated as a directive, because such macro is never expanded.
+
+ - Replacement text "sub(" of macro "head" involved subsequent text
+Rescanning of the replacement list "sub(" of the macro "head" has involved the text succeeding the macro invocation. K&R 1st to Standard C did not regard this as an error, but if you used this type of macro without having these standards in mind to receive this warning, your macro definition or macro invocation is probably not correct. If you are intended to use such macro, it is an unusual macro. The only STD mode issues this warning. COMPAT mode issues this warning only on class 8. In pre-Standard mode, the same situation may arise but no warning is issued. POSTSTD mode never issues this warning because rescanning does not involve the text succeeding the replacement list. (A macro may be expanded quite differently or causes an "unterminated macro call" error.)
+
+ - Less than necessary N argument (s) in macro call "macro( a)"
+An insufficient number of arguments of a macro invocation. Normally, this causes an error, but in case of missing only one argument of a macro that takes a variable number of arguments, mcpp issues a warning. This is to decrease migration problems of variable argument macros between GCC and C99.
+
+ - Removed ',' preceding the absent variable argument
+Since variable argument is absent and the replacement list has a sequence ", ## __VA_ARGS__", removed the comma immediately preceding "## __VA_ARGS__".
+This warning is issued only in Standard mode of GCC-specific-build.
+
+ - Old style predefined macro "linux" is used
+The non-conforming predefined macro without leading '_' is used.
+This warning is only on Standard mode of GCC-specific-build.
+
+The following two are issued only in OLDPREP mode. (In other mode it causes an error.)
+
+- Less than necessary N argument(s) in macro call "macro( a)"
- More than necessary N argument(s) in macro call "macro( a, b, c)"
+
+
+
+This section covers line number related warnings.
+
+- Line number "32768" is out of range of [1,32767]
+In C90 and C++, the first argument of a #line must be within the range of 1 to 32767. 0 is also out of range. With __STDC_VERSION__ >= 199901L or __cplusplus >= 199901L, the valid range is 1 to 2147483647. Therefore, in C90 or C++ mode, mcpp issues a warning, not an error, to the range of 32768 to 2147483647. Standard mode issues this warning.
+
+In C90, when you use #line to specify a value slightly below 32767, you won't receive an error, but sooner or later, the line number will exceed 32767, in which case, mcpp continues to increase the line number while issuing a warning. Some compiler-proper may not accept this large line number. It is not desirable to specify a large number with #line.
+
+- Line number 32768 got beyond range
+The source line number has reached 32768, at which a warning is issued one time.
+
+ - Line number 32769 is out of range
+When the __LINE__ macro is expanded, the lime number has exceeded 32767.
+
+
+
+
+- #warning
+ - #pragma MCPP warning
+A #pragma MCPP warning (#warning) directive has been executed. Following the above message, the line is displayed. (If an argument of #pragma MCPP warning has a token error, such as unterminated string, #pragma MCPP warning is not executed.) Although this directive appears in the Warning Level 1 section, this warning is issued at every warning level. Standard mode has #pragma MCPP warning, while pre-Standard mode has #warning.
+
+
+
+
+This section covers warnings to code that does not contains a bug but causes a portability problem.
+
+- Converted [CR+LF] to [LF]
+Converted the newline code from [CR+LF] to [LF]. This warning is issued on warning level of class 1 in compiler-independent-build and class 2 in compiler-specific-build.
+
+mcpp evaluate #if expression by long long / unsigned long long even if in C90 or C++98, and issues a warning on the value outside of long / unsigned long in C90 and in C++98. Also LL suffix in other than C99 mode gets a warning as well as i64 suffix of compiler-specific-builds for Visual C and Borland C. These warnings are of class 1 in compiler-independent-build and class 2 in compiler-specific-build.
+
+- Constant "123456789012" is out of range of (unsigned) long
+ - Integer character constant 'abcde' is out of range of unsigned long
+ - Wide character constant L'abc' is out of range of unsigned long
+ - Result of "op" is out of range of (unsigned) long
+ - LL suffix is used in other than C99 mode "123LL"
+ - I64 suffix is used in other than C99 mode "123i64"
+ - Shift count "40" is larger than bit count of long
+
+Only the Standard mode issues the following five warnings:
+
+- Parsed "//" as comment
+A text from // to the end of the line is interpreted as a comment. This is a legal notation in C99 and C++. In C90 mode mcpp treats it as a comment after issuing a warning.
+
+ - Variable argument macro is defined
+Although it is the C99 Standard that stipulates variable argument macros, a variable argument macro has been defined in C90 or C++ mode.
+
+ - Empty argument in macro call "MACRO( a, ,"
+A macro invocation has an empty argument, in which case, mcpp regards the argument as zero number of pp-token sequences and treats it as such. The empty argument is legal in C99, while it is undefined in C90, thus causing a lack of portability. (mcpp regards an empty argument even without a ',' not as an empty argument, but as a missing argument, thus issuing an error. Since zero number of arguments and one empty argument is syntactically indistinguishable, mcpp does not make both an error.) Writing an empty argument in source code is not generally preferable. I recommend that you should code:
+
+#define EMPTY
+
+, if possible, and then write EMPTY where an empty argument is written.
+
+ - Skipped the #pragma line
+GCC V.3 provides several #pragma directives in the form of #pragma GCC <args>. Its preprocessor processes some of them, but mcpp does not support #pragma GCC poison and #pragma GCC dependency. This warning is issued to a #pragma directive compiler-specific preprocessors process but mcpp does not.
+
+ - Not a valid preprocessing token "+12"
+Concatenating two pp-tokens with the ## operator results in an invalid token "+12", which normally causes an error. However, mcpp invoked with the -lang-asm (-x assembler-with-cpp, -a) option does not regard it as an error.
+
+The following warning is issued only in POSTSTD mode.
+
+- Header-name enclosed by <, > is an obsolescent feature <stdio.h>
+The header name in the form of <stdio.h> is one of the specifications I want to abolish. I recommend to use "stdio.h".
+
+The following two warnings are issued only in some compiler systems. Of course, the coding in question is valid in those particular systems, but it lacks of portability, so a warning is issued to remind users of it.
+
+- #include_next is not allowed by Standard
+ - #warning is not allowed by Standard
+These directives are valid in GCC but not Standard C-conforming and lack of portability.
+ - GCC2-spec variadic macro is defined
+Though GCC2-spec variadic macro is valid in GCC-specific-build, this macro is not portable.
+
+ - Converted to /
+A #include directive contains \ in the header name. mcpp converts \ into /. "\" is a valid path delimiter in OSs, such as Windows, but undefined in Standard C. It is safe to use /. mcpp on Windows issues this warning only once. (mcpp does not regard " preceded by \ as a delimiter of a string literal, raising an "unterminated string literal" error.)
+
+ - '$' in identifier "THIS$AND$THAT"
+An identifier has a '$'. The only mcpp compiled with DOLLAR_IN_NAME set to TRUE issues this warning only once because '$' lacks of portability although it is valid in this mcpp. '$' being regarded as a pp-token, other mcpp parses THIS$AND$THAT into five components THIS, $, AND, $ and THAT, resulting in a compiler error.
+
+
+
+
+Standard C guarantees some minimum translation limits. It is desirable that a preprocessor imposes translation limits that exceed these values, but source programs that uses preprocessor' own translation limits will restrict portability. mcpp provides some macros in "system.H" that allows you to set translation limits to any values you like. mcpp in Standard mode issues a warning to source code that exceeds a Standard C guaranteed limit. However, these messages are excluded from Class 1 and 2 because they may be issued frequently, depending on standard headers of compiler systems or source programs.
+
+- Logical source line longer than 509 bytes
+The length of a logical source line has exceeded 509 bytes.
+
+ - Quotation longer than 509 bytes "very_very_long_string"
+The length of a string literal, character constant or header name has exceeded 509 bytes.
+
+ - More than 8 nesting of #include
+The depth of nested #includes has exceeded 8. This warning is issued only when it reaches 9.
+
+ - More than 8 nesting of #if (#ifdef) sections
+The depth of nested #ifs, #ifdefs, or #ifndefs has exceeded 8. This warning is issued only when it reaches 9.
+
+ - More than 1024 macros defined
+The number of defined macros has reached 1024. This number includes both of pre-defined macros and those defined in header files.
+
+ - String literal longer than 509 bytes "very_very_long_string"
+Expansion of a macro using the # operator has generated a string literal longer than 509 bytes.
+
+The following warnings are not issued in a skipped #if group.
+
+- More than 32 nesting of parens in #if expression
+The depth of nested parentheses in a #if expression has exceeded 32. This warning is issued only when it reaches 33.
+
+ - More than 31 parameters
+The number of parameters of a macro definition has exceeded 31.
+
+ - Identifier longer than 31 bytes "very_very_long_name"
+The length of an identifier has exceeded 31 bytes.
+
+With __STDC_VERSION__ >= 199901L, the Standard specified translation limits are as follows:
+
+
+ Length of logical source line | 4095 bytes |
+ Length of string literal, character constant, or header name | 4095 bytes |
+ Identifier length | 63 characters |
+ Depth of nested #includes | 15 |
+ Depth of nested #ifs, #ifdefs, or #ifndefs | 63 |
+ Depth of nested parentheses in #if expression | 63 |
+ Number of macro parameters | 127 |
+ Number of definable macros | 4095 |
+
+
+Note that the length of a UCN or multi-byte-character in an identifier is counted as the number of characters, not bytes. (A queer stipulation)
+When mcpp is invoked with the -+ option to specify C++ preprocessing, the Standard guideline of translation limits are as follows:
+
+
+ Length of logical source line | 65536 bytes |
+ Length of string literal, character constant, or header name | 65536 bytes |
+ Identifier length | 1024 characters |
+ Depth of nested #includes | 256 |
+ Depth of nested #ifs, #ifdefs, or #ifndefs | 256 |
+ Depth of nested parentheses in #if expression | 256 |
+ Number of macro parameters | 256 |
+ Number of definable macros | 65536 |
+
+
+Note that mcpp allows the maximum number of macro parameters of 255. So, when it reaches 256, mcpp issues an error.
+The following warnings are excluded from class 1 and 2 because they are issued too frequently.
+
+- Converted 0x0c to a space
+[FF], [VT], [CR] (other than in [CR][LF] sequence) in source code as token separators are converted into a space character. How to deal with these token separators located on a directive line is undefined in Standard C. If they are located in comments, string literals, or character constants, mcpp does not convert them. (Of course, mcpp can do so, but I do not want mcpp to impose a greater restriction on a character set used since it essentially depends on the compiler-proper.) On the other hand, [TAB] as a token separator is converted into a space character, but no warning is issued because it does not affect compilation at all. ([TAB] means nothing but a space to both of preprocessor and compiler-proper.) [FF] are found sometimes in actual source to indicate "end of page". This is not a recommendable style.
+
+ - Undefined symbol
+In #if line the identifier "name" is not defined as a macro. It is evaluated to zero. This is not an error at all, but may be a program bug. No warning is issued to an argument of a #if defined. This warning can be avoided by writing #if defined name && (name ..), instead of #if name .., or by invoking mcpp with the -D name=0 option. C++ gives "true" and "false" tokens special treatment and evaluates to 1 and 0, respectively, without a warning.
+
+ - Multi-character wide character constant L'ab' isn't portable
+A wide character constant value varies even among compiler systems using the same character set because the encoding scheme of wide character constants and how to evaluate multi-characters depend on compiler systems. Therefore, #if expressions using them do not provide portability. The only STD mode issues this warning. POSTSTD mode does not permit character literal in #if expression, so this causes an error. (The next item is also treated the same way.)
+
+ - Multi-character or multi-byte character constant 'XY' isn't portable
+Since how to evaluate the value of a multi-character or multi-byte character constant depends on compiler systems, #if expressions using them do not provide portability. The only STD mode issues this warning.
+
+The following two warnings are issued only in Standard mode.
+
+- Macro with mixing of ## and # operators isn't portable
+A function-like macro has a token sequence of "## #" in the replacement list. This sequence of two operators lack of portability because their priority is unspecified in Standard C. mcpp takes precedence # over ##. Note that if a function-like macro has a token sequence in the reverse order "# ##", mcpp regards it as an error because the operand of the # operator must be a parameter.
+
+ - Macro with multiple ## operators isn't portable
+A macro definition has only one token or parameter inserted between ## operators in the replacement list. This macro may lack of portability because the evaluation order of ## operators is unspecified in Standard C. mcpp applies the ## operator from left to right.
+
+This warning is only with -K option in STD mode.
+
+- Too long comment, discarded up to here
+The comment is longer than 256 lines, mcpp discards it up to here.
+It is not a good style to include long document in source.
+
+
+
+
+There is little chance that the indicated source code contains a bug, but these messages are issued to call attention to it. mcpp invoked with the -W8 option issues these warnings.
+In a skipped #if group, whether preprocessing directives, such as #ifdef, #ifndef, #elif, #else, and #endif, are balanced or not is checked. However, mcpp invoked with the -W8 option also checks non-conforming or unknown directives. Standard mode issues a warning when the depth of nested #ifs exceeds 8.
+
+- Illegal #directive "+" (in skipped block)
+ - Unknown #directive "pseudo-directive" (in skipped block)
+ - More than 8 nesting of #if (#ifdef) sections (in skipped block)
+ - #include_next is not allowed by Standard (in skipped block)
+ - #warning is not allowed by Standard (in skipped block)
+
+The following warnings are related to #if expression. Given an expression of #if a || b, for example, if "a" is true, "b" is not evaluated. However, mcpp invoked with -W8 issues a warning to non-evaluated sub-expressions, in which case, the note saying "in non-evaluated sub-expression" is appended.
+
+- Constant "123456789012345678901" is out of range
+ - Constant "123456789012" is out of range of (unsigned) long
+ - LL suffix is used in other than C99 mode "123LL"
+ - I64 suffix is used in other than C99 mode "123i64"
+ - Shift count "40" is larger than bit count of long
+ - Integer character constant 'abcdefghi' is out of range
+ - Integer character constant 'abcde' is out of range of unsigned long
+ - Wide character constant L'abcdef' is out of range
+ - Wide character constant L'abc' is out of range of unsigned long
+ - 8 bits can't represent escape sequence 'x123'
+ - 16 bits can't represent escape sequence L'x12345'
+ - Division by zero
+ - Undefined symbol "name", evaluated to 0
+ - sizeof: Unknown type "type"
+ - sizeof: Illegal type combination with "type"
+ - Multi-character wide character constant L'ab' isn't portable
+ - Multi-character or multi-byte character constant 'XY' isn't portable
+ - Undefined escape sequence '\x'
+ - UCN cannot specify the value "0000007f"
+ - Negative value "-1" is converted to positive "18446744073709551615"
+ - Result of "op" is out of range
+ - Result of "op" is out of range of (unsigned) long
+ - Illegal shift count "-1"
+ - "op" of negative number isn't portable
+
+ - sizeof is disallowed in C Standard
+The purpose of this warning is to remind users of the fact that Standard C does not allow for #if sizeof, although pre-Standard mode implements it.
+
+ - "MACRO" wasn't defined
+An undefined name is specified with #undef. Standard C does not regard it as an error.
+
+ - Macro "macro" needs arguments
+A token with the same name as a macro with arguments appears in a stand alone manner. mcpp does not expand it and leave it as it is. The only pre-Standard mode issues this warning. (Standard mode does not issue a warning since such a token does not cause any problem.)
+
+ - Replacement text "sub(" of macro "head" involved subsequent text
+Rescanning of the replacement list "sub(" of the macro "head" has involved the text succeeding the macro invocation. COMPAT mode issues this warning only on class 8, whereas STD mode issues on class 1.
+
+
+
+
+Trigraphs and digraphs are not used at all in an environment where they are not need to. If they are found in such an environment, attention needs to be paid. The purpose of the -W16 option is to find such trigraphs and digraphs. On the other hand, these warnings are very bothersome in an environment where trigraphs or digraphs are used on a regular basis because they are issued very frequently. For this reason, I set up a separate class for these warnings. Anyway, mcpp issues these messages only in the state where the trigraphs or digraphs are enabled. Digraph is for Standard mode only, and trigraph is for STD mode only.
+
+
+
+
+Diagnostic Message | Fatal error | Error | Warning class |
+1 | 2 | 4 | 8 | 16 |
+"..." isn't the last parameter | | 5.4.7 |
+"/*" in comment | | | 5.5.1 |
+"and" is defined as macro | | | 5.5.3 |
+"defined" shouldn't be defined | | 5.4.7 |
+"MACRO" has not been defined | | | 5.5.3 |
+"MACRO" has not been pushed | | | 5.5.3 |
+"MACRO" is already pushed | | | 5.5.3 |
+"MACRO" wasn't defined | | | | | | 5.8 |
+"op" of negative number isn't portable | | | 5.5.4 | | | 5.8 |
+"__STDC__" shouldn't be redefined | | 5.4.7 |
+"__STDC__" shouldn't be undefined | | 5.4.8 |
+"__VA_ARGS__" without corresponding "..." | | 5.4.7 |
+"__VA_ARGS__" cannot be used in GCC2-spec variadic macro | | 5.4.7 |
+## after ## | | 5.4.7 |
+#error | | 5.4.10 |
+#include_next is not allowed by Standard | | | | 5.6 | | 5.8 |
+#warning | | | 5.5.7 |
+'$' in identifier "THIS$AND$THAT" | | | | 5.6 |
+16 bits can't represent escape sequence L'\x12345' | | 5.4.6 | | | | 5.8 |
+2 digraph(s) converted | | | | | | | 5.9 |
+2 trigraph(s) converted | | | | | | | 5.9 |
+8 bits can't represent escape sequence '\x123' | | 5.4.6 | | | | 5.8 |
+_Pragma operator found in directive line | | 5.4.12 |
+Already seen #else at line 123 | | 5.4.3 |
+Bad defined syntax | | 5.4.5 |
+Bad pop_macro syntax | | | 5.5.3 |
+Bad push_macro syntax | | | 5.5.3 |
+Buffer overflow expanding macro "macro" at "something" | | 5.4.9 |
+Buffer overflow scanning token "token" | 5.3.3 |
+Bug: | 5.3.1 |
+Can't open include file "file-name" | | 5.4.11 |
+Can't use a character constant 'a' | | 5.4.5 |
+Can't use a string literal "string" | | 5.4.5 |
+Can't use the character 0x24 | | 5.4.5 |
+Can't use the operator "++" | | 5.4.5 |
+Constant "123456789012" is out of range of (unsigned) long | | | 5.5.4 | 5.6 | | 5.8 |
+Constant "1234567890123456789012" is out of range | | 5.4.6 | | | | 5.8 |
+Converted 0x0c to a space | | | | | 5.7 |
+Converted [CR+LF] to [LF] | | | 5.5.1 | 5.6 |
+Converted \ to / | | | | 5.6 |
+Division by zero | | 5.4.6 | | | | 5.8 |
+Duplicate parameter names "a" | | 5.4.7 |
+Empty argument in macro call "MACRO( a, ," | | | | 5.6 |
+Empty character constant '' | | 5.4.1 | 5.5.1 |
+Empty parameter | | 5.4.7 |
+End of file with no newline, supplemented the newline | | | 5.5.2 |
+End of file with unterminated #asm block started at line 123 | | 5.4.2 | 5.5.2 |
+End of file with unterminated comment, terminated the comment | | | 5.5.2 |
+End of file with \, deleted the \ | | | 5.5.2 |
+End of file within #if (#ifdef) section started at line 123 | | 5.4.2 | 5.5.2 |
+End of file within macro call started at line 123 | | 5.4.2 | 5.5.2 |
+Excessive ")" | | 5.4.5 |
+Excessive token sequence "junk" | | 5.4.4 | 5.5.3 |
+File read error | 5.3.2 |
+File write error | 5.3.2 |
+GCC2-spec variadic macro is defined | | | | 5.6 |
+Header-name enclosed by <, > is an obsolescent feature | | | | 5.6 |
+I64 suffix is used in other than C99 mode "123i64" | | | | 5.6 | | 5.8 |
+Identifier longer than 31 bytes "very_very_long_name" | | | | | 5.7 |
+Ignored #ident | | | 5.5.3 | | | 5.8 |
+Ignored #sccs | | | 5.5.3 | | | 5.8 |
+Illegal #directive "123" | | 5.4.4 | 5.5.3 | | | 5.8 |
+Illegal control character 0x1b in quotation | | | 5.5.1 |
+Illegal control character 0x1b, skipped the character | | 5.4.1 |
+Illegal digit in octal number "089" | | | 5.5.1 |
+Illegal multi-byte character sequence "XY" in quotation | | | 5.5.1 |
+Illegal multi-byte character sequence "XY" | | 5.4.1 |
+Illegal parameter "123" | | 5.4.7 |
+Illegal shift count "-1" | | | 5.5.4 | | | 5.8 |
+Illegal UCN sequence | | 5.4.1 |
+In #asm block started at line 123 | | 5.4.3 |
+Integer character constant 'abcde' is out of range of unsigned long | | | 5.5.4 | 5.6 | | 5.8 |
+Integer character constant 'abcdefghi' is out of range | | 5.4.6 | | | | 5.8 |
+Less than necessary N argument(s) in macro call "macro( a)" | | 5.4.9 | 5.5.5 |
+Line number "0x123" isn't a decimal digits sequence | | 5.4.4 | 5.5.6 |
+Line number "2147483648" is out of range of 1,2147483647 | | 5.4.4 |
+Line number "32768" got beyond range | | | 5.5.6 |
+Line number "32768" is out of range of 1,32767 | | | 5.5.6 |
+Line number "32769" is out of range | | | 5.5.6 |
+LL suffix is used in other than C99 mode "123LL" | | | 5.5.4 | 5.6 | | 5.8 |
+Logical source line longer than 509 bytes | | | | | 5.7 |
+Macro "MACRO" is expanded to "defined" | | | 5.5.4 |
+Macro "MACRO" is expanded to "sizeof" | | | 5.5.4 |
+Macro "MACRO" is expanded to 0 token | | | 5.5.4 |
+Macro "macro" needs arguments | | | | | | 5.8 |
+Macro started at line 123 swallowed directive-like line | | | 5.5.5 |
+Macro with mixing of ## and # operators isn't portable | | | | | 5.7 |
+Macro with multiple ## operators isn't portable | | | | | 5.7 |
+Misplaced ":", previous operator is "+" | | 5.4.5 |
+Misplaced constant "12" | | 5.4.5 |
+Missing ")" | | 5.4.5 |
+Missing "," or ")" in parameter list "(a,b" | | 5.4.7 |
+More than 1024 macros defined | | | | | 5.7 |
+More than 31 parameters | | | | | 5.7 |
+More than 32 nesting of parens in #if expression | | | | | 5.7 |
+More than 8 nesting of #if (#ifdef) sections | | | | | 5.7 | 5.8 |
+More than 8 nesting of #include | | | | | 5.7 |
+More than BLK_NEST nesting of #if (#ifdef) sections | 5.3.3 |
+More than INCLUDE_NEST nesting of #include | 5.3.3 |
+More than necessary N argument(s) in macro call "macro( a, b, c) | | 5.4.9 |
+More than NEXP*2-1 constants stacked at "12" | | 5.4.5 |
+More than NEXP*3-1 operators and parens stacked at "+" | | 5.4.5 |
+More than NMACPARS parameters | | 5.4.7 |
+Multi-character or multi-byte character constant 'XY' isn't portable | | | | | 5.7 | 5.8 |
+Multi-character wide character constant L'ab' isn't portable | | | | | 5.7 | 5.8 |
+Negative value "-1" is converted to positive "18446744073709551615" | | | 5.5.4 | | | 5.8 |
+No argument | | 5.4.4 | 5.5.3 |
+No header name | | 5.4.4 |
+No identifier | | 5.4.4 |
+No line number | | 5.4.4 |
+No space between macro name "MACRO" and repl-text | | | 5.5.3 |
+No sub-directive | | | 5.5.3 |
+No token after ## | | 5.4.7 |
+No token before ## | | 5.4.7 |
+Not a file name "name" | | 5.4.4 |
+Not a formal parameter "id" | | 5.4.7 |
+Not a header name "UNDEFINED_MACRO" | | 5.4.4 |
+Not a line number "name" | | 5.4.4 |
+Not a valid preprocessing token "+12" | | 5.4.9 | | 5.6 |
+Not a valid string literal | | 5.4.9 |
+Not an identifier "123" | | 5.4.4 | 5.5.3 |
+Not an integer "1.23" | | 5.4.5 |
+Not in a #if (#ifdef) section | | 5.4.3 |
+Not in a #if (#ifdef) section in a source file | | 5.4.3 | 5.5.3 |
+Operand of _Pragma() is not a string literal | | 5.4.12 |
+Operator ">" in incorrect context | | 5.4.5 |
+Old style predefined macro "linux" is used | | | 5.5.5 |
+Out of memory (required size is 0x1234 bytes) | 5.3.2 |
+Parsed "//" as comment | | | | 5.6 |
+Preprocessing assertion failed | | 5.4.10 |
+Quotation longer than 509 bytes "very_very_long_string" | | | | | 5.7 |
+Recursive macro definition of "macro" to "macro" | | 5.4.9 |
+Removed ',' preceding the absent variable argument | | | 5.5.5 |
+Replacement text "sub(" of macro "head" involved subsequent text | | | 5.5.5 | | | 5.8 |
+Rescanning macro "macro" more than RESCAN_LIMIT times at "something" | | 5.4.9 |
+Result of "op" is out of range | | 5.4.6 | | | | 5.8 |
+Result of "op" is out of range of (unsigned) long | | | 5.5.4 | 5.6 | | 5.8 |
+Shift count "40" is larger than bit count of long | | | 5.5.4 | 5.6 | | 5.8 |
+sizeof is disallowed in C Standard | | | | | | 5.8 |
+sizeof: Illegal type combination with "type" | | 5.4.6 | | | | 5.8 |
+sizeof: No type specified | | 5.4.5 |
+sizeof: Syntax error | | 5.4.5 |
+sizeof: Unknown type "type" | | 5.4.6 | | | | 5.8 |
+Skipped the #pragma line | | | | 5.6 |
+String literal longer than 509 bytes "very_very_long_string" | | | | | 5.7 |
+The macro is redefined | | | 5.5.4 |
+This is not a preprocessed source | 5.3.4 |
+This preprocessed file is corrupted | 5.3.4 |
+Too long comment, discarded up to here | | | | | 5.7 |
+Too long header name "long-file-name" | 5.3.3 |
+Too long identifier, truncated to "very_long_identifier" | | | 5.5.1 |
+Too long line spliced by comments | 5.3.3 |
+Too long logical line | 5.3.3 |
+Too long number token "12345678901234" | 5.3.3 |
+Too long pp-number token "1234toolong" | 5.3.3 |
+Too long quotation "long-string" | 5.3.3 |
+Too long source line | 5.3.3 |
+Too long token | 5.3.3 |
+Too many magics nested in macro argument | | 5.4.9 |
+Too many nested macros in tracing MACRO | | 5.4.9 |
+UCN cannot specify the value "0000007f" | | 5.4.1 | | | | 5.8 |
+Undefined escape sequence '\x' | | | 5.5.4 | | | 5.8 |
+Undefined symbol "name", evaluated to 0 | | | | | 5.7 | 5.8 |
+Unknown #directive "pseudo-directive" | | 5.4.4 | 5.5.4 | | | 5.8 |
+Unknown argument "name" | | | 5.5.3 |
+Unterminated character constant 't understand. | | 5.4.1 |
+Unterminated expression | | 5.4.5 |
+Unterminated header name | | 5.4.1 |
+Unterminated macro call "macro( a, (b,c)" | | 5.4.9 |
+Unterminated string literal | | 5.4.1 |
+Unterminated string literal, catenated to the next line | | | 5.5.1 |
+Variable argument macro is defined | | | | 5.6 |
+Wide character constant L'abc' is out of range of unsigned long | | | 5.5.4 | 5.6 | | 5.8 |
+Wide character constant L'abc' is out of range | | 5.4.6 | | | | 5.8 |
+
+
+
+
+
+I have developed the Validation Suite to verify conformance of preprocessing to Standard C/C++, and released it along with mcpp source. The Validation Suite is intended to allow you to verify all the Standard C preprocessing specifications. Of course, I used the Validation Suite to check mcpp. And what is more, I have compiled mcpp in many compiler systems to verify its behavior. Therefore, I am confident that mcpp is now almost flawless, free of bugs and misinterpretation of specifications, however, I cannot deny the possibility that it still contains some bugs.
+If you find a strange behavior, do not hesitate to let me know. If you receive a diagnostic message saying "Bug: ...", it is undoubtedly a bug of mcpp or a compiler system. (Probably, it's mcpp's.) How illegal a user program may be, should mcpp lose control, it is mcpp that is to be blamed for it.
+
+When you report a bug, please be sure to provide the following information:
+
+- Compiler system mcpp is ported to.
+ - A sample source (shorter is better) that allows reproduction of what looks like a bug.
+ - Preprocessing results.
+
+
+Other than bugs, I would appreciate if you give me feedback on mcpp usage, diagnostic messages or this manual.
+For your feedback or information, please post to "Open Discussion Forum" at:
+ http://mcpp.sourceforge.net/
+or send via e-mail.
+
+
+
diff --git a/libraries/mcpp/bin/mcpp-summary-272.pdf b/libraries/mcpp/bin/mcpp-summary-272.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b6f2b52fada74647ebdff5e579ff1902a6264c57
GIT binary patch
literal 170539
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