From a5d43225dc38dfb61bbdbe77b11082a8a0ca48e8 Mon Sep 17 00:00:00 2001 From: doursse Date: Wed, 27 Feb 2008 21:01:30 +0000 Subject: [PATCH] Here is the Evil library, which provides, for the Windows platform (XP or Mobile), a set of Unix functions used in the EFL and which do not exist on that evil platform SVN revision: 33862 --- legacy/evil/AUTHORS | 3 + legacy/evil/COPYING | 340 +++++++ legacy/evil/ChangeLog | 3 + legacy/evil/Doxyfile | 1310 +++++++++++++++++++++++++ legacy/evil/INSTALL | 229 +++++ legacy/evil/Makefile.am | 28 + legacy/evil/NEWS | 0 legacy/evil/README | 11 + legacy/evil/autogen.sh | 7 + legacy/evil/configure.ac | 96 ++ legacy/evil/evil.pc.in | 11 + legacy/evil/src/Makefile.am | 4 + legacy/evil/src/bin/Makefile.am | 24 + legacy/evil/src/bin/test_dlfcn.c | 54 + legacy/evil/src/bin/test_evil.c | 27 + legacy/evil/src/bin/test_pipe.c | 101 ++ legacy/evil/src/lib/Evil.h | 256 +++++ legacy/evil/src/lib/Makefile.am | 14 + legacy/evil/src/lib/dlfcn/Makefile.am | 9 + legacy/evil/src/lib/dlfcn/dlfcn.c | 212 ++++ legacy/evil/src/lib/dlfcn/dlfcn.h | 174 ++++ legacy/evil/src/lib/evil.c | 347 +++++++ legacy/evil/src/lib/mman/Makefile.am | 9 + legacy/evil/src/lib/mman/mman.c | 119 +++ legacy/evil/src/lib/mman/sys/mman.h | 115 +++ 25 files changed, 3503 insertions(+) create mode 100644 legacy/evil/AUTHORS create mode 100644 legacy/evil/COPYING create mode 100644 legacy/evil/ChangeLog create mode 100644 legacy/evil/Doxyfile create mode 100644 legacy/evil/INSTALL create mode 100644 legacy/evil/Makefile.am create mode 100644 legacy/evil/NEWS create mode 100644 legacy/evil/README create mode 100755 legacy/evil/autogen.sh create mode 100644 legacy/evil/configure.ac create mode 100644 legacy/evil/evil.pc.in create mode 100644 legacy/evil/src/Makefile.am create mode 100644 legacy/evil/src/bin/Makefile.am create mode 100644 legacy/evil/src/bin/test_dlfcn.c create mode 100644 legacy/evil/src/bin/test_evil.c create mode 100644 legacy/evil/src/bin/test_pipe.c create mode 100644 legacy/evil/src/lib/Evil.h create mode 100644 legacy/evil/src/lib/Makefile.am create mode 100644 legacy/evil/src/lib/dlfcn/Makefile.am create mode 100644 legacy/evil/src/lib/dlfcn/dlfcn.c create mode 100644 legacy/evil/src/lib/dlfcn/dlfcn.h create mode 100644 legacy/evil/src/lib/evil.c create mode 100644 legacy/evil/src/lib/mman/Makefile.am create mode 100644 legacy/evil/src/lib/mman/mman.c create mode 100644 legacy/evil/src/lib/mman/sys/mman.h diff --git a/legacy/evil/AUTHORS b/legacy/evil/AUTHORS new file mode 100644 index 0000000000..4c50a3af59 --- /dev/null +++ b/legacy/evil/AUTHORS @@ -0,0 +1,3 @@ +Main Authors: + Vincent Torri + ashikase diff --git a/legacy/evil/COPYING b/legacy/evil/COPYING new file mode 100644 index 0000000000..d60c31a97a --- /dev/null +++ b/legacy/evil/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/legacy/evil/ChangeLog b/legacy/evil/ChangeLog new file mode 100644 index 0000000000..b48baf585e --- /dev/null +++ b/legacy/evil/ChangeLog @@ -0,0 +1,3 @@ +2008-02-27 Vincent Torri + + * initial release diff --git a/legacy/evil/Doxyfile b/legacy/evil/Doxyfile new file mode 100644 index 0000000000..5ac2556346 --- /dev/null +++ b/legacy/evil/Doxyfile @@ -0,0 +1,1310 @@ +# Doxyfile 1.5.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = evil + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is +# documented as struct with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code where the coding convention is that all structs are +# typedef'ed and only the typedef is referenced never the struct's name. + +TYPEDEF_HIDES_STRUCT = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = "src" + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/legacy/evil/INSTALL b/legacy/evil/INSTALL new file mode 100644 index 0000000000..54caf7c190 --- /dev/null +++ b/legacy/evil/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/legacy/evil/Makefile.am b/legacy/evil/Makefile.am new file mode 100644 index 0000000000..2a1c155d5c --- /dev/null +++ b/legacy/evil/Makefile.am @@ -0,0 +1,28 @@ + +MAINTAINERCLEANFILES = \ +aclocal.m4 \ +compile \ +config.guess \ +config.h.in \ +config.sub \ +configure \ +evil.pc \ +depcomp \ +install-sh \ +ltmain.sh \ +Makefile.in \ +missing \ +mkinstalldirs \ +$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)* + +maintainer-clean-local: + rm -rf doc/ + +SUBDIRS = src + +EXTRA_DIST = \ +Doxyfile \ +evil.pc.in + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = evil.pc diff --git a/legacy/evil/NEWS b/legacy/evil/NEWS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/legacy/evil/README b/legacy/evil/README new file mode 100644 index 0000000000..171f0ad55b --- /dev/null +++ b/legacy/evil/README @@ -0,0 +1,11 @@ + +The Evil library tried to port some convenient Unix functions +to the Windows (XP, maybe below, or Mobile) platform. They +are planned to be used in the Enlightenment Fundations Libaries. + +To get the description of the API, behavior, etc.. run +doxygen.exe in the top level directory, then open in your +favorite browser named Firefox the file index.html located in +the subdirectory doc/html/. + +Enjoy ! diff --git a/legacy/evil/autogen.sh b/legacy/evil/autogen.sh new file mode 100755 index 0000000000..8610825bfd --- /dev/null +++ b/legacy/evil/autogen.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +autoreconf -f -i + +if [ -z "$NOCONFIGURE" ]; then + ./configure "$@" +fi diff --git a/legacy/evil/configure.ac b/legacy/evil/configure.ac new file mode 100644 index 0000000000..70621d30b6 --- /dev/null +++ b/legacy/evil/configure.ac @@ -0,0 +1,96 @@ + +AC_INIT(evil, 0.0.1, enlightenment-devel@lists.sourceforge.net) +AC_PREREQ(2.52) +AC_CONFIG_SRCDIR([configure.ac]) +AC_CONFIG_HEADERS([config.h]) +AC_CANONICAL_HOST + +dnl If the host is not windows, we exit, +dnl otherwise, we set the correct flags +dnl for each platform. +mingw_libs="" +cegcc_libs="" +case "$host_os" in + mingw|mingw32) + mingw_libs="-lole32 -luuid -lws2_32" + ;; + cegcc) + cegcc_cflags="-mwin32" + ;; + *) + AC_MSG_ERROR([OS must be Windows. Exiting...]) + ;; +esac +win32_cflags="${cegcc_cflags}" +win32_libs="${mingw_libs}" +AC_SUBST(win32_cflags) +AC_SUBST(win32_libs) + +AM_INIT_AUTOMAKE(1.6 dist-bzip2) + +AC_LIBTOOL_WIN32_DLL +define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl +define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl +AC_PROG_LIBTOOL + +VMAJ=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $1);}'` +VMIN=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $2);}'` +VMIC=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $3);}'` +SNAP=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $4);}'` +version_info=`expr $VMAJ + $VMIN`":$VMIC:$VMIN" +AC_SUBST(version_info) + +AC_LANG(C) +AC_PROG_CPP +AC_PROG_CC +AC_C_CONST + +AC_MSG_CHECKING([for __attribute__]) +AC_CACHE_VAL(have___attribute__, + [ + AC_TRY_COMPILE([#include ], + [int func(int x); int foo(int x __attribute__ ((unused))) { exit(1); }], + [have___attribute__="yes"], + [have___attribute__="no"]) + ] +) + +if test "x${have___attribute__}" = "xyes" ; then + AC_DEFINE(HAVE___ATTRIBUTE__, 1, [Define to 1 if your compiler has __attribute__]) +fi +AC_MSG_RESULT(${have___attribute__}) + + +AC_CONFIG_FILES([ +Makefile +evil.pc +src/Makefile +src/bin/Makefile +src/lib/Makefile +src/lib/dlfcn/Makefile +src/lib/mman/Makefile +]) + +AC_OUTPUT + + +##################################################################### +## Info + +echo +echo +echo +echo "------------------------------------------------------------------------" +echo "$PACKAGE_NAME $PACKAGE_VERSION $PACKAGE_TARNAME" +echo "------------------------------------------------------------------------" +echo +echo "Configuration Options Summary:" +echo +echo " OS...................: ${host_os}" +echo +echo " Compilation..........: make" +echo +echo " Installation.........: make install" +echo +echo " prefix.............: $prefix" +echo diff --git a/legacy/evil/evil.pc.in b/legacy/evil/evil.pc.in new file mode 100644 index 0000000000..b63bcef7f7 --- /dev/null +++ b/legacy/evil/evil.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: evil +Description: Library that ports on Windows some specific Unix functions. +Version: @VERSION@ +Libs: -L${libdir} -levil -lmman -ldl +Libs.private: +Cflags: -I${includedir} diff --git a/legacy/evil/src/Makefile.am b/legacy/evil/src/Makefile.am new file mode 100644 index 0000000000..40211bf7a9 --- /dev/null +++ b/legacy/evil/src/Makefile.am @@ -0,0 +1,4 @@ + +MAINTAINERCLEANFILES = Makefile.in + +SUBDIRS = lib bin diff --git a/legacy/evil/src/bin/Makefile.am b/legacy/evil/src/bin/Makefile.am new file mode 100644 index 0000000000..fbfe0f11ea --- /dev/null +++ b/legacy/evil/src/bin/Makefile.am @@ -0,0 +1,24 @@ + +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir) \ +-I$(top_srcdir)/bin \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/lib/dlfcn + +AM_CFLAGS = @win32_cflags@ + +bin_PROGRAMS = test_dlfcn test_pipe test_evil + +test_dlfcn_SOURCES = test_dlfcn.c +test_dlfcn_LDADD = $(top_builddir)/src/lib/libevil.la $(top_builddir)/src/lib/dlfcn/libdl.la +test_dlfcn_DEPENDENCIES = $(top_builddir)/src/lib/libevil.la $(top_builddir)/src/lib/dlfcn/libdl.la + +test_pipe_SOURCES = test_pipe.c +test_pipe_LDADD = $(top_builddir)/src/lib/libevil.la +test_pipe_DEPENDENCIES = $(top_builddir)/src/lib/libevil.la + +test_evil_SOURCES = test_evil.c +test_evil_LDADD = $(top_builddir)/src/lib/libevil.la +test_evil_DEPENDENCIES = $(top_builddir)/src/lib/libevil.la diff --git a/legacy/evil/src/bin/test_dlfcn.c b/legacy/evil/src/bin/test_dlfcn.c new file mode 100644 index 0000000000..782cc6a1ee --- /dev/null +++ b/legacy/evil/src/bin/test_dlfcn.c @@ -0,0 +1,54 @@ +#include +#include +#include + +#include + +#include + + + +int +main() +{ + struct timeval tv; + void *module; + double t1 = 0.0; + double t2 = 0.0; + + int (*time)(struct timeval *tv, void *tz); + + module = dlopen("d:\\msys\\1.0\\local\\bin\\libevil-0.dll", 0); + if (!module) + { + printf ("%s\n", dlerror()); + return EXIT_FAILURE; + } + + time = dlsym(module, "gettimeofday"); + if (!time) + { + printf ("%s\n", dlerror()); + if (dlclose(module)) + printf ("%s\n", dlerror()); + return EXIT_FAILURE; + } + + if (time(&tv, NULL) == 0) + t1 = tv.tv_sec + tv.tv_usec / 1000000.0; + + Sleep(3000); + + if (time(&tv, NULL) == 0) + t2 = tv.tv_sec + tv.tv_usec / 1000000.0; + + printf ("3 seconds ? %f\n", t2 - t1); + + if (dlclose(module)) + { + printf ("%s\n", dlerror()); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/legacy/evil/src/bin/test_evil.c b/legacy/evil/src/bin/test_evil.c new file mode 100644 index 0000000000..5b91172cb3 --- /dev/null +++ b/legacy/evil/src/bin/test_evil.c @@ -0,0 +1,27 @@ +#include +#include +#include + +#include + + + +int +main() +{ + struct timeval tv; + double t1 = 0.0; + double t2 = 0.0; + + if (gettimeofday(&tv, NULL) == 0) + t1 = tv.tv_sec + tv.tv_usec / 1000000.0; + + Sleep(3000); + + if (gettimeofday(&tv, NULL) == 0) + t2 = tv.tv_sec + tv.tv_usec / 1000000.0; + + printf ("3 seconds ? %f\n", t2 - t1); + + return EXIT_SUCCESS; +} diff --git a/legacy/evil/src/bin/test_pipe.c b/legacy/evil/src/bin/test_pipe.c new file mode 100644 index 0000000000..24dca7473c --- /dev/null +++ b/legacy/evil/src/bin/test_pipe.c @@ -0,0 +1,101 @@ +#include + +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN + +#include "Evil.h" + +#define FDREAD 0 +#define FDWRITE 1 + +typedef struct +{ + int val; + int fd_write; +} data; + + +DWORD WINAPI +thread (void *param) +{ + data *d; + void *buf[1]; + + Sleep (2 * 1000); + d = (data *)param; + buf[0] = d; + printf ("writing...\n"); + send(d->fd_write, (char *)buf, sizeof(buf), 0); + printf ("end of writing...\n"); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int sockets[2]; + WSADATA version_data; + int ret; + fd_set rfds; + struct timeval t; + data *d; + DWORD thread_id; + HANDLE h; + + FD_ZERO(&rfds); + + t.tv_sec = 5; + t.tv_usec = 0; + + WSAStartup(MAKEWORD(2, 2), &version_data); + + if (pipe(sockets) < 0) + { + printf ("error\n"); + return -1; + } + FD_SET(sockets[FDREAD], &rfds); + d = (data *)malloc(sizeof (data)); + d->val = 14; + d->fd_write = sockets[FDWRITE]; + printf (" pointeur 0 : %p\n", d); + + h = CreateThread (NULL, 0, thread, d, 0, &thread_id); + + printf (" * select : %d %d\n", sockets[0], sockets[1]); + ret = select(sockets[FDREAD] + 1, &rfds, NULL, NULL, &t); + printf (" * select : ret %d\n", ret); + + if (ret < 0) return -1; + + if (ret == 0) { + printf ("temps expire\n"); + } + + if (ret > 0) + { + data *d; + int len; + int j = 0; + void *buf[1]; + + printf ("bon \n"); + while ((len = recv(sockets[FDREAD], (char *)buf, sizeof(buf), 0)) > 0) + { + printf ("len : %d\n", len); + if (len == sizeof(buf)) + { + d = buf[0]; + printf (" pointeur 1 : %p\n", d); + j = d->val; + printf ("reussite : %d\n", j); + } + } + } + + CloseHandle (h); + + return 0; +} diff --git a/legacy/evil/src/lib/Evil.h b/legacy/evil/src/lib/Evil.h new file mode 100644 index 0000000000..d217272a8c --- /dev/null +++ b/legacy/evil/src/lib/Evil.h @@ -0,0 +1,256 @@ +#ifndef __E_WIN32_H__ +#define __E_WIN32_H__ + +#ifdef EAPI +# undef EAPI +#endif /* EAPI */ + +#ifdef _WIN32 +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI __declspec(dllimport) +# endif +#endif /* _WIN32 */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @mainpage Evil + * + * @section intro_sec Introduction + * + * The Evil library is an evil library that ports some evil Unix + * functions to the Windows (XP or Mobile) platform. The evilness is + * so huge that the most of the functions are not POSIX or BSD + * compliant. + * + * These functions are intended to be used in the Enlightenment + * Fundations Libraries only and can be compiled only on Windows. + * + * @section evil_sec Evil API Documentation + * + * Take a look at the evil documentation of the @ref Dlfcn. + * + * Take a look at the demoniac documentation of the @ref Mman. + * + * Take a look at the satanic documentation of the @ref Evil. + */ + +/** + * @file evil.h + * @brief The file that provides miscellaneous functions ported from Unix. + * @defgroup Evil Miscellaneous functions ported from Unix. + * + * This header provides miscallenaous functions that exist on Unix + * but not on Windows platform. They try to follow the conformance of + * the Unix versions. + */ + +#include +#include + +#ifndef __CEGCC__ + +# include + +/** + * @def FD_CLOEXEC + * Specifies that the file descriptor should be closed when an exec() + * function is invoked. + */ +# define FD_CLOEXEC 1 + +/** + * @def F_SETFD + * Specifies that fcntl() should set the file descriptor flags + * associated with the filedes argument. + */ + +/** + * @def F_SETLK + * Specifies that fcntl() should set or clear a file segment lock + * according to the lock description pointed to by the third argument. + */ + +/** + * @def F_SETLKW + * Equivalent to F_SETLK except that if a shared or exclusive lock + * is blocked by other locks, the thread shall wait until the request + * can be satisfied. + */ + +# define F_SETFD 2 +# define F_SETLK 6 +# define F_SETLKW 7 + +# ifndef F_RDLCK +# define F_RDLCK 0 +# define F_WRLCK 1 +# define F_UNLCK 2 +# endif /* ! F_RDLCK */ + +/** + * @struct flock + * @brief A structure that control the lock of a file descriptor. + */ +struct flock +{ + short int l_type; /**< lock type: read, write, ... */ + short int l_whence; /**< type of l_start */ + off_t l_start; /**< starting offset */ + off_t l_len; /**< 0 means end of the file */ + pid_t l_pid; /**< lock owner */ +}; + +/** + * @brief Provide control over file descriptors. + * + * @param fd The file descriptor. + * @param cmd The type of control. + * @return 0 on success, -1 otherwise. + * + * Performs one of various miscellaneous operations on @p fd. + * The operation in question is determined by @p cmd: + * + * - F_SETFD: Set the close-on-exec flag to the value specified + * by the argument after command (only the least significant + * bit is used). + * - F_SETLK and F_SETLKW: used to manage discretionary file locks. + * The third argument must be a pointer to a struct flock (that + * may be overwritten by this call). + * + * This function returns 0 on success, -1 otherwise. + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Evil + */ +EAPI int fcntl(int fd, int cmd, ...); + +/** + * @brief Make temporay unique file name. + * + * @param template Template of the file to create. + * @return A file descriptor on success, -1 otherwise. + * + * Take the given file name @p template and overwrite a portion of it + * to create a file name. This file is guaranted not to exist at the + * time invocation and is suitable for use by the function. + * + * The @p template parameter can be any file name with some number of + * 'Xs' appended to it, for example @em baseXXXXXX, where @em base is + * the part of the new file that you supply and eacg 'X' is a placeholder + * for a character supplied by mkstemp(). The trailing 'Xs' are replaced + * with a five-digit value; this value is a unique number. Each successful + * call to mkstemp() modifes @p template. + * + * When mkstemp() succeeds, it creates and opens the template file for + * reading and writing. + * + * On success, the function returns the file descriptor of the + * temporary file. Otherwise, it returns -1 and errno is set to the + * following values: + * - EACCESS: Given path is a directory, or file is read-only, but an + * open-for-writing operation was attempted. + * - EEXISTS: File name already exists. + * - EMFILE: No more file descriptors available. + * - ENOENT: File or path not found. + * + * Conformity: Should follow BSD conformity. + * + * Supported OS: Windows 98, Windows Me, Windows NT, Windows 2000, + * Windows XP. + * + * @ingroup Evil + */ +EAPI int mkstemp(char *template); + +/** + * @brief Create a shell link. + * + * @param oldpath The file name to be linked. + * @param newpath The file name to create. + * @return 0 on success, -1 otherwise. + * + * Create a shell link @p newpath to @p oldpath (@p newpath is the + * name of the file created, @p oldpath is the string used in + * creating the shell link). + * + * On success, this function returns 0. Otherwise, it returns -1 and + * errno may be set to the following value: + * - ENOMEM: Not enough memory. + * + * On Windows, the symbolic links do not exist. Nevertheless + * shell links can be created. This function is named like the Unix + * function for portability reasons. + * + * Conformity: None. + * + * Supported OS: Windows 95, Windows 98, Windows Me, Windows NT, Windows 2000, + * Windows XP. + * + * @ingroup Evil + */ +EAPI int symlink(const char *oldpath, const char *newpath); + +/** + * @brief Read value of a shell link. + * + * @param path The file name to be linked. + * @param buf The file name to create. + * @param bufsiz The size of the buffer. + * @return 0 on success, -1 otherwise. + * + * Place the content of the shell link @p path in the buffer + * @p buf, which has size @p bufzsiz. + * + * On success, this function returns the count of characters + * placed in the buffer. Otherwise, it returns -1 and errno may + * be set to the following value: + * - ENOMEM: Not enough memory. + * + * On Windows, the symbolic links do not exist. Nevertheless + * shell links can be managed. This function is named like the Unix + * function for portability reasons. + * + * Conformity: None. + * + * Supported OS: Windows 95, Windows 98, Windows Me, Windows NT, Windows 2000, + * Windows XP. + * + * @ingroup Evil + */ +EAPI ssize_t readlink(const char *path, char *buf, size_t bufsiz); + +EAPI int pipe(int *fds); + +#endif /* ! __CEGCC__ */ + +#if defined(__MSDOS__) || defined(__EMX__) || \ + (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__) && !defined(__CEGCC__)) +# if defined(_MSC_VER) || defined(__MINGW32__) +# define open(path,flag,mode) EAPI _open((path),(flag),(mode)) +# define close(fd) EAPI _close(fd) +# define read(fd,buffer,count) EAPI _read((fd),(buffer),(count)) +# define write(fd,buffer,count) EAPI _write((fd),(buffer),(count)) +# define mkdir(p,m) EAPI _mkdir(p) +# endif +#endif + +#define realpath(file_name, resolved_name) EAPI _fullpath((resolved_name), (file_name), PATH_MAX) + +EAPI char *evil_tmpdir_get(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __E_WIN32_H__ */ diff --git a/legacy/evil/src/lib/Makefile.am b/legacy/evil/src/lib/Makefile.am new file mode 100644 index 0000000000..5dd2484884 --- /dev/null +++ b/legacy/evil/src/lib/Makefile.am @@ -0,0 +1,14 @@ + +MAINTAINERCLEANFILES = Makefile.in + +SUBDIRS = dlfcn mman + +lib_LTLIBRARIES = libevil.la + +include_HEADERS = Evil.h +libevil_la_SOURCES = evil.c + +libevil_la_CFLAGS = @win32_cflags@ +libevil_la_LIBADD = @win32_libs@ +libevil_la_LDFLAGS = -no-undefined -version-info @version_info@ + diff --git a/legacy/evil/src/lib/dlfcn/Makefile.am b/legacy/evil/src/lib/dlfcn/Makefile.am new file mode 100644 index 0000000000..3f25c6e272 --- /dev/null +++ b/legacy/evil/src/lib/dlfcn/Makefile.am @@ -0,0 +1,9 @@ + +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libdl.la + +include_HEADERS = dlfcn.h +libdl_la_SOURCES = dlfcn.c + +libdl_la_LDFLAGS = -no-undefined -version-info @version_info@ diff --git a/legacy/evil/src/lib/dlfcn/dlfcn.c b/legacy/evil/src/lib/dlfcn/dlfcn.c new file mode 100644 index 0000000000..1b067e234f --- /dev/null +++ b/legacy/evil/src/lib/dlfcn/dlfcn.c @@ -0,0 +1,212 @@ +#include + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + +#if HAVE___ATTRIBUTE__ +# define __UNUSED__ __attribute__((unused)) +#else +# define __UNUSED__ +#endif /* HAVE___ATTRIBUTE__ */ + + +static char *dl_err = NULL; +static int dl_err_viewed = 0; + +#ifdef __CEGCC__ + +static wchar_t * +string_to_wchar(const char *text) +{ + wchar_t *wtext; + int wsize; + + wsize = MultiByteToWideChar(CP_ACP, 0, text, strlen(text) + 1, NULL, 0); + if (wsize == 0 || wsize > ULONG_MAX/sizeof(wchar_t)) + return NULL; + + wtext = malloc(wsize * sizeof(wchar_t)); + if (wtext) + if (!MultiByteToWideChar(CP_ACP, 0, text, strlen(text) + 1, wtext, wsize)) + return NULL; + + return wtext; +} + +static char * +wchar_to_string(const wchar_t *text) +{ + char * atext; + int size; + int asize; + + size = wcslen(text) + 1; + + asize = WideCharToMultiByte(CP_ACP, 0, text, size, NULL, 0, NULL, NULL); + if (asize == 0) + return NULL; + + atext = (char*)malloc((asize + 1) * sizeof(char)); + + if (atext) + if (!WideCharToMultiByte(CP_ACP, 0, text, size, atext, asize, NULL, NULL)) + return NULL; + atext[asize] = '\0'; + + return atext; +} + + +#endif /* __CEGCC__ */ + +static void +get_last_error(char *desc) +{ + TCHAR *str; + char *str2; + int l1; + int l2; + + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR)&str, 0, NULL); + +#ifdef __CEGCC__ + str2 = wchar_to_string(str); +#else + str2 = str; +#endif /* __CEGCC__ */ + + l1 = strlen(desc); + l2 = strlen(str2); + + if (dl_err) + free(dl_err); + + dl_err = (char *)malloc(sizeof(char) * (l1 + l2 + 1)); + if (!dl_err) + dl_err = strdup("not enough resource"); + else + { + memcpy(dl_err, desc, l1); + memcpy(dl_err + l1, str2, l2); + dl_err[l1 + l2] = '\0'; + } + LocalFree(str2); + dl_err_viewed = 0; +} + +void * +dlopen(const char* path, int mode __UNUSED__) +{ + HMODULE module = NULL; + + if (!path) + { + module = GetModuleHandle(NULL); + if (!module) + get_last_error("GetModuleHandle returned: "); + } + else + { + char *new_path; + int l; + int i; + + /* according to MSDN, we must change the slash to backslash */ + l = strlen(path); + new_path = (char *)malloc(sizeof(char) * (l + 1)); + if (!new_path) + { + if (dl_err) + free(dl_err); + dl_err = strdup("not enough resource"); + dl_err_viewed = 0; + return NULL; + } + for (i = 0; i <= l; i++) + { + if (path[i] == '/') + new_path[i] = '\\'; + else + new_path[i] = path[i]; + } +#ifdef __CEGCC__ + { + wchar_t *wpath; + + wpath = string_to_wchar(new_path); + module = LoadLibraryEx(wpath, NULL, + LOAD_WITH_ALTERED_SEARCH_PATH); + free(wpath); + } +#else + module = LoadLibraryEx(new_path, NULL, + LOAD_WITH_ALTERED_SEARCH_PATH); +#endif /* __CEGCC__ */ + if (!module) + get_last_error("LoadLibraryEx returned: "); + + free(new_path); + } + + return module; +} + +int +dlclose(void* handle) +{ + if (FreeLibrary(handle)) + return 0; + else + { + get_last_error("FreeLibrary returned: "); + return -1; + } +} + +void * +dlsym(void *handle, const char *symbol) +{ + FARPROC fp; + +#ifdef __CEGCC__ + { + wchar_t *wsymbol; + + wsymbol = string_to_wchar(symbol); + fp = GetProcAddress(handle, wsymbol); + free(wsymbol); + } +#else + fp = GetProcAddress(handle, symbol); +#endif /* __CEGCC__ */ + if (!fp) + get_last_error("GetProcAddress returned: "); + + return fp; +} + +char * +dlerror (void) +{ + if (!dl_err_viewed) + { + dl_err_viewed = 1; + return dl_err; + } + else + { + if (dl_err) + free(dl_err); + return NULL; + } +} diff --git a/legacy/evil/src/lib/dlfcn/dlfcn.h b/legacy/evil/src/lib/dlfcn/dlfcn.h new file mode 100644 index 0000000000..b09baacd95 --- /dev/null +++ b/legacy/evil/src/lib/dlfcn/dlfcn.h @@ -0,0 +1,174 @@ +#ifndef __E_WIN32_DLFCN_H__ +#define __E_WIN32_DLFCN_H__ + +#ifdef EAPI +# undef EAPI +#endif /* EAPI */ + +#ifdef _WIN32 +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI __declspec(dllimport) +# endif +#endif /* _WIN32 */ + +#ifdef __cplusplus +extern "C" { +#endif + + +# define RTLD_LAZY 1 /* lazy function call binding */ +# define RTLD_NOW 2 /* immediate function call binding */ +# define RTLD_GLOBAL 4 /* symbols in this dlopen'ed obj are visible + to other dlopen'ed objs */ + +/** + * @file dlfcn.h + * @brief The file that provides functions to manage dynamic-link libraries + * @defgroup Dlfcn Functions that manage dynamic-link libraries. + * + * This header provides functions to load and unload dynamic-link + * libaries, to get the address of a symbol, and to get diagnostic + * information. + * + */ + +/** + * Map a specified executable module (either a .dll or .exe file) + * into the address space of the user process. + * + * @param path Name of the module. + * @param mode Unused. + * @return A pointer that represent the module, or @c NULL on failure. + * + * Map a specified executable module (either a .dll or .exe file) + * into the address space of the user process. If @p path is @c NULL, + * then the module corresponding to the current process is returned. + * Otherwise the module specified by @p path is loaded if it exists. + * If not, @c NULL is returned. The directory separators can be forward + * slash, or backward ones. Mapping a module can map other modules. + * @p mode is unused. + * + * If an error occurred, an error string can be retrived with dlerror(). + * + * According to the OS, the search order of the module can change, + * according to the value of SafeDllSearchMode. + * + * - For Windows Vista, Windows Server 2003, and Windows XP SP2: + * SafeDLLSearchMode is enabled by default. + * - For Windows XP and Windows 2000 SP4: SafeDLLSearchMode is disabled + * by default. + * + * If SafeDllSearchMode is enabled + * - The directory from which the application loaded. + * - The system directory. Use the GetSystemDirectory() function + * to get the path of this directory. + * - The 16-bit system directory. There is no function that obtains + * the path of this directory, but it is searched. + * - The Windows directory. Use the GetWindowsDirectory() function + * to get the path of this directory. + * - The current directory. + * - The directories that are listed in the PATH environment variable. + * Note that this does not include the per-application path specified + * by the App Paths registry key. + * + * If SafeDllSearchMode is disabled + * - The directory from which the application loaded. + * - The current directory. + * - The system directory. Use the GetSystemDirectory() function + * to get the path of this directory. + * - The 16-bit system directory. There is no function that obtains + * the path of this directory, but it is searched. + * - The Windows directory. Use the GetWindowsDirectory() function + * to get the path of this directory. + * - The directories that are listed in the PATH environment variable. + * Note that this does not include the per-application path specified + * by the App Paths registry key. + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Dlfcn + */ +EAPI void *dlopen(const char* path, int mode); + +/** + * Close a dynamic-link library. + * + * @param handle Handle that references a dynamic-link library. + * @return O on sucess, -1 otherwise. + * + * Release a reference to the dynamic-link library referenced + * by @p handle. If the reference count drops to 0, the handle is + * removed from the address space and is rendered invalid. @p handle + * is the value returned by a previous call to dlopen(). + * + * If no error occurred, the returned value is 0, otherwise the + * returned value is -1 and an error string can be retrived with + * dlerror(). + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Dlfcn + */ +EAPI int dlclose(void* handle); + +/** + * Get the address of a symbol. + * + * @param handle Handle that references a dynamic-link library. + * @param symbol @c NULL-terminated string. + * @return O on sucess, NULL otherwise. + * + * Return the address of the code or data location specified by the + * string @p symbol. @p handle references a library that contains + * the function or variable @p symbol. + * + * If no error occurred, the returned value is the code or data + * location, otherwise the returned value is NULL and an error + * string can be retrived with dlerror(). + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Dlfcn + */ +EAPI void *dlsym(void* handle, const char* symbol); + +/** + * Get diagnostic information + * + * @return A @c NULL-terminated string if an error occured, @c NULL + * otherwise. + * + * Return a @c NULL-terminated character string describing the last + * error that occurred on this thread during a call to dlopen(), + * dlsym(), or dlclose(). If no such error has occurred, dlerror() + * returns a null pointer. At each call to dlerror(), the error + * indication is reset. Thus in the case of two calls to dlerror(), + * where the second call follows the first immediately, the second + * call will always return a null pointer. + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Dlfcn + */ +EAPI char *dlerror (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __E_WIN32_DLFCN_H__ */ diff --git a/legacy/evil/src/lib/evil.c b/legacy/evil/src/lib/evil.c new file mode 100644 index 0000000000..0e5a7c5bc2 --- /dev/null +++ b/legacy/evil/src/lib/evil.c @@ -0,0 +1,347 @@ +#include + +#ifndef __CEGCC__ +# include +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +# include +# include +# include +# include +# include +#endif /* ! __CEGCC__ */ +#include +#include +#include +#include + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + +#if HAVE___ATTRIBUTE__ +# define __UNUSED__ __attribute__((unused)) +#else +# define __UNUSED__ +#endif /* HAVE___ATTRIBUTE__ */ + +#include "Evil.h" + +#ifndef __CEGCC__ + +int fcntl(int fd, int cmd, ...) +{ + va_list va; + HANDLE h; + int res = -1; + + va_start (va, cmd); + + h = (HANDLE)_get_osfhandle(fd); + if (h == INVALID_HANDLE_VALUE) + return -1; + + if (cmd == F_SETFD) + { + long flag; + + flag = va_arg(va, long); + if (flag == FD_CLOEXEC) + { + if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0)) + res = 0; + } + } + else if ((cmd == F_SETLK) || (cmd == F_SETLKW)) + { + struct flock fl; + off_t length = 0; + long pos; + + fl = va_arg(va, struct flock); + + if (fl.l_len == 0) + { + length = _lseek(fd, 0L, SEEK_END); + if (length != -1L) + res = 0; + } + fl.l_len = length - fl.l_start - 1; + + pos = _lseek(fd, fl.l_start, fl.l_whence); + if (pos != -1L) + res = 0; + + if ((fl.l_type == F_RDLCK) || (fl.l_type == F_WRLCK)) + { + if (cmd == F_SETLK) + res = _locking(fd, _LK_NBLCK, fl.l_len); /* if cannot be locked, we return immediatly */ + else /* F_SETLKW */ + res = _locking(fd, _LK_LOCK, fl.l_len); /* otherwise, we try several times */ + } + + if (fl.l_type == F_UNLCK) + res = _locking(fd, _LK_UNLCK, fl.l_len); + } + + va_end(va); + + return res; +} + +int +mkstemp(char *template) +{ + char *filename; + int fd; + + filename = _mktemp(template); + if (!filename) + return -1; + + fd = _sopen(filename, _O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL, _SH_DENYNO, _S_IREAD | _S_IWRITE); + + return fd; +} + +/* REMARK: Windows has no symbolic link. */ +/* Nevertheless, it can create and read .lnk files */ +int +symlink(const char *oldpath, const char *newpath) +{ + wchar_t new_path[MB_CUR_MAX]; + IShellLink *pISL; + IShellLink **shell_link; + IPersistFile *pIPF; + IPersistFile **persit_file; + HRESULT res; + + res = CoInitialize(NULL); + if (FAILED(res)) + { + if (res == E_OUTOFMEMORY) + errno = ENOMEM; + return -1; + } + + /* Hack to cleanly remove a warning */ + shell_link = &pISL; + if (FAILED(CoCreateInstance(&CLSID_ShellLink, + NULL, + CLSCTX_INPROC_SERVER, + &IID_IShellLink, + (void **)shell_link))) + goto no_instance; + + if (FAILED(pISL->lpVtbl->SetPath(pISL, oldpath))) + goto no_setpath; + + /* Hack to cleanly remove a warning */ + persit_file = &pIPF; + if (FAILED(pISL->lpVtbl->QueryInterface(pISL, &IID_IPersistFile, (void **)persit_file))) + goto no_queryinterface; + + mbstowcs(new_path, newpath, MB_CUR_MAX); + if (FAILED(pIPF->lpVtbl->Save(pIPF, new_path, FALSE))) + goto no_save; + + pIPF->lpVtbl->Release(pIPF); + pISL->lpVtbl->Release(pISL); + CoUninitialize(); + + return 0; + + no_save: + pIPF->lpVtbl->Release(pIPF); + no_queryinterface: + no_setpath: + pISL->lpVtbl->Release(pISL); + no_instance: + CoUninitialize(); + return -1; +} + +ssize_t +readlink(const char *path, char *buf, size_t bufsiz) +{ + wchar_t old_path[MB_CUR_MAX]; + char new_path[MB_CUR_MAX]; + IShellLink *pISL; + IShellLink **shell_link; + IPersistFile *pIPF; + IPersistFile **persit_file; + unsigned int length; + HRESULT res; + + res = CoInitialize(NULL); + if (FAILED(res)) + { + if (res == E_OUTOFMEMORY) + errno = ENOMEM; + return -1; + } + + /* Hack to cleanly remove a warning */ + persit_file = &pIPF; + if (FAILED(CoCreateInstance(&CLSID_ShellLink, + NULL, + CLSCTX_INPROC_SERVER, + &IID_IPersistFile, + (void **)persit_file))) + goto no_instance; + + mbstowcs(old_path, path, MB_CUR_MAX); + if (FAILED(pIPF->lpVtbl->Load(pIPF, old_path, STGM_READWRITE))) + goto no_load; + + shell_link = &pISL; + if (FAILED(pIPF->lpVtbl->QueryInterface(pIPF, &IID_IShellLink, (void **)shell_link))) + goto no_queryinterface; + + if (FAILED(pISL->lpVtbl->GetPath(pISL, new_path, MB_CUR_MAX, NULL, 0))) + goto no_getpath; + + length = strlen(new_path); + if (length > bufsiz) + length = bufsiz; + + memcpy(buf, new_path, length); + + pISL->lpVtbl->Release(pISL); + pIPF->lpVtbl->Release(pIPF); + CoUninitialize(); + + return length; + + no_getpath: + pISL->lpVtbl->Release(pISL); + no_queryinterface: + no_load: + pIPF->lpVtbl->Release(pIPF); + no_instance: + CoUninitialize(); + return -1; +} + +int +pipe(int *fds) +{ + struct sockaddr_in saddr; + struct timeval tv; + SOCKET temp; + SOCKET socket1 = INVALID_SOCKET; + SOCKET socket2 = INVALID_SOCKET; + u_long arg; + fd_set read_set; + fd_set write_set; + int len; + + temp = socket (AF_INET, SOCK_STREAM, 0); + + if (temp == INVALID_SOCKET) + goto out0; + + arg = 1; + if (ioctlsocket (temp, FIONBIO, &arg) == SOCKET_ERROR) + goto out0; + + memset (&saddr, 0, sizeof (saddr)); + saddr.sin_family = AF_INET; + saddr.sin_port = 0; + saddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); + + if (bind (temp, (struct sockaddr *)&saddr, sizeof (saddr))) + goto out0; + + if (listen (temp, 1) == SOCKET_ERROR) + goto out0; + + len = sizeof (saddr); + if (getsockname (temp, (struct sockaddr *)&saddr, &len)) + goto out0; + + socket1 = socket (AF_INET, SOCK_STREAM, 0); + + if (socket1 == INVALID_SOCKET) + goto out0; + + arg = 1; + if (ioctlsocket (socket1, FIONBIO, &arg) == SOCKET_ERROR) + goto out1; + + if ((connect (socket1, (struct sockaddr *)&saddr, len) == SOCKET_ERROR) && + (WSAGetLastError () != WSAEWOULDBLOCK)) + goto out1; + + FD_ZERO (&read_set); + FD_SET (temp, &read_set); + + tv.tv_sec = 0; + tv.tv_usec = 0; + + if (select (0, &read_set, NULL, NULL, NULL) == SOCKET_ERROR) + goto out1; + + if (!FD_ISSET (temp, &read_set)) + goto out1; + + socket2 = accept (temp, (struct sockaddr *) &saddr, &len); + if (socket2 == INVALID_SOCKET) + goto out1; + + FD_ZERO (&write_set); + FD_SET (socket1, &write_set); + + tv.tv_sec = 0; + tv.tv_usec = 0; + + if (select (0, NULL, &write_set, NULL, NULL) == SOCKET_ERROR) + goto out2; + + if (!FD_ISSET (socket1, &write_set)) + goto out2; + + arg = 0; + if (ioctlsocket (socket1, FIONBIO, &arg) == SOCKET_ERROR) + goto out2; + + arg = 0; + if (ioctlsocket (socket2, FIONBIO, &arg) == SOCKET_ERROR) + goto out2; + + fds[0] = socket1; + fds[1] = socket2; + + closesocket (temp); + + return 0; + + out2: + closesocket (socket2); + out1: + closesocket (socket1); + out0: + closesocket (temp); + + fds[0] = INVALID_SOCKET; + fds[1] = INVALID_SOCKET; + + return -1; +} + +#endif /* ! __CEGCC__ */ + +char * +evil_tmpdir_get(void) +{ + char *tmpdir; + + tmpdir = getenv("TMP"); + if (!tmpdir) tmpdir = getenv("TEMP"); + if (!tmpdir) tmpdir = getenv("USERPROFILE"); + if (!tmpdir) tmpdir = getenv("WINDIR"); + if (!tmpdir) tmpdir="C:\\"; + + return tmpdir; +} diff --git a/legacy/evil/src/lib/mman/Makefile.am b/legacy/evil/src/lib/mman/Makefile.am new file mode 100644 index 0000000000..1b9b9beb0b --- /dev/null +++ b/legacy/evil/src/lib/mman/Makefile.am @@ -0,0 +1,9 @@ + +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libmman.la + +nobase_include_HEADERS = sys/mman.h +libmman_la_SOURCES = mman.c + +libmman_la_LDFLAGS = -no-undefined -version-info @version_info@ diff --git a/legacy/evil/src/lib/mman/mman.c b/legacy/evil/src/lib/mman/mman.c new file mode 100644 index 0000000000..01e12f22a4 --- /dev/null +++ b/legacy/evil/src/lib/mman/mman.c @@ -0,0 +1,119 @@ +#include + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +#ifndef __CEGCC__ +# include +#endif /* ! __CEGCC__ */ + +#include + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + +#if HAVE___ATTRIBUTE__ +# define __UNUSED__ __attribute__((unused)) +#else +# define __UNUSED__ +#endif /* HAVE___ATTRIBUTE__ */ + +#ifdef __CEGCC__ +# define CreateFileMapping CreateFileMappingW +# define _get_osfhandle get_osfhandle +#endif /* __CEGCC__ */ + + +void * +mmap(void *addr __UNUSED__, + size_t len, + int prot, + int flags, + int fd, + off_t offset) +{ + void *data; + HANDLE fm; + DWORD protect = PAGE_NOACCESS; + DWORD access = 0; + + /* support only MAP_SHARED */ + if (!(flags & MAP_SHARED)) return (void *)~0; + + if (prot & PROT_EXEC) + { + if (prot & PROT_READ) + { + if (prot & PROT_WRITE) + protect = PAGE_EXECUTE_READWRITE; + else + protect = PAGE_EXECUTE_READ; + } + else + { + if (prot & PROT_WRITE) + protect = PAGE_EXECUTE_WRITECOPY; + else + protect = PAGE_EXECUTE; + } + } + else + { + if (prot & PROT_READ) + { + if (prot & PROT_WRITE) + protect = PAGE_READWRITE; + else + protect = PAGE_READONLY; + } + else if (prot & PROT_WRITE) + protect = PAGE_WRITECOPY; + } + + fm = CreateFileMapping((HANDLE)_get_osfhandle (fd), + NULL, + protect, + 0, + 0, + NULL); + if (!fm) return (void *)~0; + + if (protect & PAGE_READWRITE) + access = FILE_MAP_ALL_ACCESS; + if (protect & PAGE_WRITECOPY) + access = FILE_MAP_COPY; +#if 0 + if (protect & (PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_READ)) + access = FILE_MAP_EXECUTE; +#endif + if (protect & (PAGE_READWRITE | PAGE_READONLY)) + access = FILE_MAP_READ; + else + { + if (protect & PAGE_READWRITE) + access = FILE_MAP_WRITE; + } + + data = MapViewOfFile(fm, + access, + offset & 0xffff0000, + offset & 0x0000ffff, + len); + CloseHandle(fm); + + if (!data) return (void *)~0; + else return data; +} + +int +munmap(void *addr, + size_t len __UNUSED__) +{ + BOOL res; + + res = UnmapViewOfFile(addr); + + return (res == 0) ? -1 : 0; +} diff --git a/legacy/evil/src/lib/mman/sys/mman.h b/legacy/evil/src/lib/mman/sys/mman.h new file mode 100644 index 0000000000..b21b95a8f4 --- /dev/null +++ b/legacy/evil/src/lib/mman/sys/mman.h @@ -0,0 +1,115 @@ +#ifndef __E_WIN32_SYS_MMAN_H__ +#define __E_WIN32_SYS_MMAN_H__ + +#ifdef EAPI +# undef EAPI +#endif /* EAPI */ + +#ifdef _WIN32 +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI __declspec(dllimport) +# endif +#endif /* _WIN32 */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#define PROT_NONE 0x00 +#define PROT_READ 0x01 +#define PROT_WRITE 0x02 +#define PROT_EXEC 0x04 + +#define MAP_SHARED 0x0001 +#define MAP_PRIVATE 0x0002 +#define MAP_FIXED 0x0010 + + +/** + * @file mman.h + * @brief The file that provides the memory map functions + * @defgroup Mman Functions that manage memory mappping. + * + * This header provides the meomry map functions mmap and munmap. + * + */ + +/** + * Creates or opens a named or unnamed file mapping object for a + * specified file and maps a view of a file mapping into the + * address space of a calling process. + * + * @param addr Unused + * @param len Number of bytes to be mapped. + * @param prot Protections. + * @param flags Type of the mapped object. + * @param fd File descriptor that describes the object to map. + * @param offset Number of bytes from which to start the mapping. + * @return The starting address of the mapped view on success, -1 otherwise. + * + * Create or open an unnamed file mapping object for a specified + * file described by the file descriptor @p fd. The number of + * bytes that are mapped is given by @p len and start after + * @p offset bytes. The parameter @p addr is unused. + * + * The only type of the mapped object that is supported is + * @c MAP_SHARED. If another value if given, -1 is returned. + * + * @p prot specifies the protection of the mapped region. If + * PROT_EXEC is used, it set the execute access. If PROT_READ + * is used, it sets the read access. If PROT_WRITE is used, it + * sets the write access. + * + * If the map view of file can not be created, -1 is returned. + * If the mappping can not be done, -1 is returned. + * + * If no error occured, the starting address of the mapped view + * is returned. + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Mman + */ +EAPI void *mmap(void *addr, + size_t len, + int prot, + int flags, + int fd, + off_t offset); + +/** + * Unmaps a mapped view of a file from the calling process's + * address space. + * + * @param addr Pointer to the base address. + * @param len Unused. + * @return 0 on success, -1 otherwise. + * + * Unmaps a mapped view of a file from the calling process's + * address space. @p addr is the pointer to the base address. + * This value must be identical to the value returned by a + * previous call to mmap(). The parameter @p len is unsed. + * + * Conformity: None. + * + * Supported OS: Windows Vista, Windows XP or Windows 2000 + * Professional. + * + * @ingroup Mman + */ +EAPI int munmap(void *addr, + size_t len); + + +#ifdef __cplusplus +} +#endif + +#endif /* __E_WIN32_SYS_MMAN_H__ */ +