When I tried to profile XSieve, I realized that I need one solid XSieve binary with the all functionality compiled in. This appendix is a reminder how I made it.
Procedure A.1. Making a static XSieve binary
Compile XSieve as usual
If it doesn't link, don't worry. All you need is the object files. To enrich the binary, I used the following:
$ CFLAGS='-O0 -g -pg' ./configure ...
-O0
switches off optimization.
-g
produces debugging information.
-pg
generates profiling code.
Install static Guile and libxml2
Use the following configure command.
$ CFLAGS='-O0 -g -pg' LDFLAGS='-pg' ./configure --enable-shared=no ...
The new feature is --enable-shared=no
.
Install static libxslt
The configure command is similar to the previous, but you also have to specify Guile information.
$ CFLAGS='-O0 -g -pg' LDFLAGS='-pg -L...path_to_guile.../lib -lguile' ./configure --enable-shared=no ...
Patch libxslt
Edit the file libexslt/functions.c
. Find the function exsltFuncRegister
. Add the following line before the function:
void xsieve_sourceforge_net_init(void);
Add inside the function:
xsieve_sourceforge_net_init();
Re-build libxslt
Now xsltproc
doesn't compile. To fix the problem, enter the directory xsltproc
and say
$ make
The link command which fails looks like the following:
gcc -O0 -g -pg -Wall -pg -o xsltproc xsltproc.o ...
Correct the compilation command and run it manually.
gcc -O0 -g -pg -Wall -pg -o xsltproc ...path_to_xsieve.../src/.libs/*.o xsltproc.o ...
Install the new binary.
Use the new xsltproc
binary to process XSieve stylesheets. XSieve is compiled in.