$Id: INSTALL,v 1.59 2026/04/25 13:38:46 moko Exp $ 1. What is the process to compile Parser3? Just start ./buildall script and you would get $HOME/parser3install/bin/parser3 binary. NOTE: In case you do not need XML support, use ./buildall --without-xml NOTE: In case you need apache parser module (DSO), use ./buildall --with-apache NOTE: If you have gc, prce, libxml and libxslt installed, you can use ./configure --with-xml NOTE: On some systems there are no "make" and you should run 'gmake', change buildall script accordingly then. 2. What is the process to install Parser3? Copy files from $HOME/parser3install directory into your cgi-bin directory. Then install Parser3 to handle documents, step-by-step instructions: http://www.parser.ru/en/docs/lang/install4apachecgi.htm" in English http://www.parser.ru/docs/lang/install4apachecgi.htm" in Russian Directory layout: bin/ parser3 -- CGI and command line Parser3 interpreter auto.p.dist -- configuration file sample, copy it to auto.p and adjust to your needs share/ charsets/ parser3.charsets/ -- charset definition files koi8-r.cfg -- cyrillic charset [KOI8-R encoding] windows-1251.cfg -- cyrillic charset [windows-1251 encoding] ... 3. I have heard about $mail:receive support, how do I use it? Just start ./buildall --with-mailreceive. If you have glib and gmime installed, you can run ./configure --with-mailreceive. 4. Safety features You can disable any exec operations by setting --disable-execs option. file::exec, file::cgi and mail:send (unix version) methods would be disabled. You can enable reading and executing files, not belonging to group+user other than effective by setting --disable-safe-mode option. You can disable user-configured sendmail commands by forcing it, setting "--with=sendmail=COMMAND" option. 5. Since Parser 3.4.0 several optimizations were implemented. If you experience problems you can try to disable them by commenting corresponding defines and recompiling parser3. src/include/pa_opcode.h #define OPTIMIZE_BYTECODE_GET_CLASS -- $a: #define OPTIMIZE_BYTECODE_GET_ELEMENT -- $a ^a #define OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT -- $a.b ^a.b #define OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT -- $a.$b ^a.$b #define OPTIMIZE_BYTECODE_GET_SELF_ELEMENT -- $self.a ^self.a #define OPTIMIZE_BYTECODE_CONSTRUCT -- $a(expr), $a[value] $.a(expr), $.a[value] $self.a(expr), $self.a[value] #define OPTIMIZE_BYTECODE_CUT_REM_OPERATOR -- cut rem operator with any number of params during compilation #define OPTIMIZE_BYTECODE_STRING_POOL -- simplifying string's bytecode into expression #define OPTIMIZE_BYTECODE_GET_SELF_ELEMENT -- bytecode for $self.a ^self.a #define OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL -- bytecode for .CLASS, .CLASS_NAME #define FEATURE_GET_ELEMENT4CALL -- ^o.m[] calls get_element4call("m"), not get_element("m") src/include/pa_string.h #define HASH_CODE_CACHING -- calculated hash codes are cached and used for sequential hash lookups src/include/pa_memory.h #define USE_DESTRUCTORS -- destructors are used to decrease memory consumption during code processing and make ^memory:compact[] calls non-essential. src/types/pa_method.h #define OPTIMIZE_CALL -- allows faster operators execution by eliminating method frame with local variables creation and extra write context switches. #define OPTIMIZE_RESULT -- parser methods are marked when the $result variable was used. This allows write operations and context switching optimization. src/types/pa_wwrapper.h #define OPTIMIZE_SINGLE_STRING_WRITE -- reuse original VString in single string assignments. src/lib/cord/include/cord.h #define CORD_CAT_OPTIMIZATION -- CORD library never modifies source concatenations. But in parser write operations it is safe to modify them and save some memory. #define CORD_CHARS_CACHE -- language cords with same language and length are cached and reused. src/include/pa_string.h #define STRING_LENGTH_CACHING -- cache String::Body.length() for char* strings src/include/pa_hash.h #define HASH_ORDER -- hash keys are iterated in the order of insertion