diff --git a/NEWS b/NEWS index ee46ebabf..33a53c112 100644 --- a/NEWS +++ b/NEWS @@ -152,12 +152,6 @@ roughly in decreasing order of importance. - (bitrot) Fix compilation under gcc 4.x. Backported from gentoo portage. Also, reduce warnings on gcc 4.2 snapshots. - (bitrot) Update SpiderMonkey configure check Debian compatibility - - (experimental, new feature) Tiny C Compiler support, currently - suffering from many problems. Use --disable-nls to avoid alloca, - and do not use CFLAGS=-g. Perl, Python, and Ruby provide linker - options like -export-dynamic that TCC 0.9.23 does not support. - Using GNU TLS and Guile together can crash TCC (Debian bug 418360). - SEE 2.0.1131 has a syntax error inside #ifndef __GNUC__. - (new feature 779) make uninstall - (experimental, new feature) Native Win32 port - (enhancement) If make -k was used and a sub-Make fails, build the diff --git a/doc/tinycc.txt b/doc/tinycc.txt new file mode 100644 index 000000000..d81fe58dd --- /dev/null +++ b/doc/tinycc.txt @@ -0,0 +1,187 @@ +Compiling ELinks with Tiny C Compiler +===================================== + +ELinks has been successfully compiled with http://www.tinycc.org/[Tiny +C Compiler] version 0.9.23, however there are several problems. +This file lists some of these problems and their possible solutions. + +Perl uses unsupported -Wl,-E +---------------------------- + +---------------------------------------------------------------------- +checking for Perl... no +---------------------------------------------------------------------- + +`config.log` reveals: + +---------------------------------------------------------------------- +configure:18039: checking for Perl +configure:18082: tcc -o conftest ... -rdynamic conftest.c -Wl,-E ... -lperl ... >&5 +tcc: unsupported linker option '-E' +configure:18088: $? = 1 +... +configure:18106: result: no +---------------------------------------------------------------------- + +The `-Wl,-E` option comes from this command: + +---------------------------------------------------------------------- +perl -MExtUtils::Embed -e ldopts +---------------------------------------------------------------------- + +TCC 0.9.23 does not support the option, so ELinks builds without Perl. + +Python uses unsupported -Xlinker -export-dynamic +------------------------------------------------ + +---------------------------------------------------------------------- +checking for Python... yes +checking for python... /usr/bin/python +... +Browser scripting ............... Guile, Lua, SpiderMonkey +---------------------------------------------------------------------- + +`config.log` reveals: + +---------------------------------------------------------------------- +configure:18204: checking for Python +configure:18208: result: yes +configure:18219: checking for python +configure:18237: found /usr/bin/python +configure:18250: result: /usr/bin/python +configure:18287: tcc -o conftest ... -rdynamic conftest.c -Xlinker -export-dynamic ... -lpython2.3 ... >&5 +tcc: invalid option -- '-Xlinker' +configure:18293: $? = 1 +---------------------------------------------------------------------- + +The `-Xlinker -export-dynamic` options come from this command: + +---------------------------------------------------------------------- +python -c 'from distutils import sysconfig; print sysconfig.get_config_var("LINKFORSHARED")' +---------------------------------------------------------------------- + +TCC 0.9.23 does not support `-Xlinker`, so ELinks builds without +Python. + +Ruby uses unsupported -Wl,-export-dynamic +----------------------------------------- + +---------------------------------------------------------------------- +checking for Ruby... yes +checking for ruby... /usr/bin/ruby +checking Ruby version... 1.8.3 +checking for Ruby header files... /usr/lib/ruby/1.8/i486-linux +configure: error: Ruby not found +---------------------------------------------------------------------- + +`config.log` reveals: + +---------------------------------------------------------------------- +configure:18617: checking for Ruby +configure:18641: result: yes +configure:18653: checking for ruby +configure:18671: found /usr/bin/ruby +configure:18684: result: /usr/bin/ruby +configure:18694: checking Ruby version +configure:18698: result: 1.8.3 +configure:18701: checking for Ruby header files +configure:18706: result: /usr/lib/ruby/1.8/i486-linux +configure:18765: tcc -o conftest ... -rdynamic -Wl,-export-dynamic ... conftest.c -lruby1.8 ... >&5 +tcc: unsupported linker option '-export-dynamic' +configure:18771: $? = 1 +configure:18808: error: Ruby not found +---------------------------------------------------------------------- + +The `-rdynamic -Wl,-export-dynamic` options come from this command: + +---------------------------------------------------------------------- +ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]' +---------------------------------------------------------------------- + +TCC 0.9.23 supports the former but not the latter. To work around the +error, configure `\--without-ruby`. + +Stabs entry has invalid string index +------------------------------------ + +---------------------------------------------------------------------- +ld -r -o lib.o frames.o parser.o renderer.o tables.o parser/lib.o +ld: parser/lib.o(.stab+0x2688): Stabs entry has invalid string index. +parser/lib.o: could not read symbols: Bad value +---------------------------------------------------------------------- + +Apparently, GNU ld 2.16.91 does not like the debug information +generated by TCC 0.9.23. To work around the error, either set +`LD=tcc` or remove `-g` from `CFLAGS`. + +Linker segfault +--------------- + +If you configure ELinks with both `\--with-gnutls` and `\--with-guile`, +TCC 0.9.23 crashes when it's trying to link ELinks. + +http://bugs.debian.org/418360[Debian bug #418360] has a patch that +fixes this. + +Undefined symbol alloca +----------------------- + +---------------------------------------------------------------------- + [LINK] src/elinks +tcc: undefined symbol 'alloca' +---------------------------------------------------------------------- + +GNU libc 2.3.6 declares `alloca()` in `` but does not +actually define it as a function, perhaps because the definition must +be specific to each compiler. TCC 0.9.23 does not define `alloca()` +either and fails to generate an executable but stupidly exits with +code 0. + +In ELinks, only `intl/gettext/plural.c` uses `alloca()`, so you can +avoid the error with `configure --disable-nls`. + +Unexpanded @HAVE_ALLOCA_H@ in +------------------------------------------ + +---------------------------------------------------------------------- +.../include/see/type.h:180: identifier expected +---------------------------------------------------------------------- + +`` of +http://www.adaptive-enterprises.com.au/~d/software/see/[Simple +ECMAScript Engine] 2.0.1131 has an unexpanded `@HAVE_ALLOCA_H@` inside +`#ifndef __GNUC__`. Of course, TCC 0.9.23 does not define `__GNUC__`, +so an error results. To avoid the error, either configure ELinks +`\--without-see`, or edit ``. + +Reported as +http://www.adaptive-enterprises.com.au/bugs/show_bug.cgi?id=65[SEE bug 65]. + +Advanced: Compiling SEE with TCC +-------------------------------- + +If you want even more problems, try compiling Simple ECMAScript Engine +with Tiny C Compiler as well. + +Wrong precedence of sizeof +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +---------------------------------------------------------------------- +.../see-2.0.1131/libsee/unicase.c:86: pointer expected +---------------------------------------------------------------------- + +TCC 0.9.23 misparses `sizeof (a)[0]` used in the `lengthof` macro. +To work around the bug, change it to `sizeof ((a)[0])`. + +Reported as http://bugs.debian.org/419203[Debian bug #419203]. + +Linker option -soname not supported +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +---------------------------------------------------------------------- +tcc: invalid option -- '-soname' +---------------------------------------------------------------------- + +To construct a proper ELF library, the build system of SEE 2.0.1131 +must specify the shared object name. Unfortunately, TCC 0.9.23 does +not appear to support any such option. So, use some other linker.