diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2005-10-10 19:22:31 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2005-10-10 19:22:31 (GMT) |
commit | c9ed38abcef60f4ecb9fc08a1ddd936762d5342c (patch) | |
tree | 30215767ee72661b15eae6b66e51b409feff64cf | |
parent | c1cf420f89fe57c162372b66bca70ff2e055f48f (diff) | |
download | Doxygen-c9ed38abcef60f4ecb9fc08a1ddd936762d5342c.zip Doxygen-c9ed38abcef60f4ecb9fc08a1ddd936762d5342c.tar.gz Doxygen-c9ed38abcef60f4ecb9fc08a1ddd936762d5342c.tar.bz2 |
Release-1.4.5-20051010
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | doc/language.doc | 10 | ||||
-rw-r--r-- | doc/starting.doc | 13 | ||||
-rw-r--r-- | doc/translator_report.txt | 67 | ||||
-rw-r--r-- | examples/example.tag | 2 | ||||
-rw-r--r-- | src/commentcnv.l | 2 | ||||
-rw-r--r-- | src/commentscan.l | 16 | ||||
-rw-r--r-- | src/dirdef.cpp | 52 | ||||
-rw-r--r-- | src/dot.cpp | 4 | ||||
-rw-r--r-- | src/doxygen.cpp | 98 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/scanner.l | 30 | ||||
-rw-r--r-- | src/xmlgen.cpp | 6 | ||||
-rwxr-xr-x | tmake/lib/macosx-c++/tmake.conf | 5 |
16 files changed, 187 insertions, 130 deletions
@@ -1,7 +1,7 @@ -DOXYGEN Version 1.4.5 +DOXYGEN Version 1.4.5-20051010 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (04 October 2005) +Dimitri van Heesch (10 October 2005) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.4.5 +DOXYGEN Version 1.4.5_20051010 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (04 October 2005) +Dimitri van Heesch (dimitri@stack.nl) (10 October 2005) @@ -1 +1 @@ -1.4.5 +1.4.5-20051010 diff --git a/doc/language.doc b/doc/language.doc index 061c788..c9cce06 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other than English (the default). The output language is chosen through the configuration file (with default name and known as Doxyfile). -Currently (version 1.4.4), 31 languages +Currently (version 1.4.5), 31 languages are supported (sorted alphabetically): Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, @@ -156,7 +156,7 @@ when the translator was updated. <td>Japanese</td> <td>Ryunosuke Satoh<br>Kenji Nagamatsu<br>Iwasa Kazmi</td> <td>sun594 at hotmail dot com<br>naga at joyful dot club dot ne dot jp<br>iwasa at cosmo-system dot jp</td> - <td>1.3.9</td> + <td>up-to-date</td> </tr> <tr bgcolor="#ffffff"> <td>JapaneseEn</td> @@ -228,7 +228,7 @@ when the translator was updated. <td>Slovene</td> <td>Matjaž Ostroveršnik</td> <td>matjaz.ostroversnik at ztm dot si</td> - <td>1.2.16</td> + <td>up-to-date</td> </tr> <tr bgcolor="#ffffff"> <td>Spanish</td> @@ -302,7 +302,7 @@ when the translator was updated. Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\ ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\ \hline - Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\ + Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & up-to-date \\ ~ & Kenji Nagamatsu & {\tt\tiny naga@joyful.club.ne.jp} & ~ \\ ~ & Iwasa Kazmi & {\tt\tiny iwasa@cosmo-system.jp} & ~ \\ \hline @@ -332,7 +332,7 @@ when the translator was updated. \hline Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ \hline - Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ztm.si} & 1.2.16 \\ + Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ztm.si} & up-to-date \\ \hline Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\ \hline diff --git a/doc/starting.doc b/doc/starting.doc index d0af1ec..92b5577 100644 --- a/doc/starting.doc +++ b/doc/starting.doc @@ -170,9 +170,11 @@ The generated \f$\mbox{\LaTeX}\f$ documentation must first be compiled by a \f$\mbox{\LaTeX}\f$ compiler (I use a recent teTeX distribution). To simplify the process of compiling the generated documentation, \c doxygen writes a \c Makefile into the \c latex directory. -By typing \c make in the \c latex directory the dvi file \c refman.dvi -will be generated (provided that you have a make tool called -<code>make</code> of course). This file can then be viewed using \c xdvi or + +The contents and targets in the \c Makefile depend on the setting of +\ref cfg_use_pdflatex "USE_PDFLATEX". If it is disabled (set to \c NO), then +typing \c make in the \c latex directory a dvi file called \c refman.dvi +will be generated. This file can then be viewed using \c xdvi or converted into a PostScript file \c refman.ps by typing <code>make ps</code> (this requires <code>dvips</code>). @@ -183,9 +185,12 @@ ghostscript to convert PostScript into something your printer understands. Conversion to PDF is also possible if you have installed the ghostscript interpreter; just type <code>make pdf</code> (or <code>make pdf_2on1</code>). + To get the best results for PDF output you should set the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" -and \ref cfg_use_pdflatex "USE_PDFLATEX" tags to \c YES. +and \ref cfg_use_pdflatex "USE_PDFLATEX" tags to \c YES. +In this case the \c Makefile will only contain a target to build +\c refman.pdf directly. \subsection rtf_out RTF output \addindex RTF diff --git a/doc/translator_report.txt b/doc/translator_report.txt index dc2c164..7106e5a 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -1,4 +1,4 @@ -(1.4.4) +(1.4.5) Doxygen supports the following 31 languages (sorted alphabetically): @@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean (+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. -Of them, 18 translators are up-to-date, 13 translators are based on +Of them, 20 translators are up-to-date, 11 translators are based on some adapter class, and 2 are English based. ---------------------------------------------------------------------- @@ -30,10 +30,12 @@ still may be some details listed even for them: TranslatorHungarian TranslatorIndonesian -- Remove the obsolete methods (never used). TranslatorItalian + TranslatorJapanese -- Change the base class to Translator. TranslatorKorean TranslatorLithuanian TranslatorPolish -- Remove the obsolete methods (never used). TranslatorRussian + TranslatorSlovene TranslatorSwedish ---------------------------------------------------------------------- @@ -47,12 +49,10 @@ must be implemented to become up-to-date: TranslatorRomanian 1.4.1 1 method to implement TranslatorChinese 1.4.1 1 method to implement TranslatorNorwegian 1.3.9 7 methods to implement - TranslatorJapanese 1.3.9 7 methods to implement TranslatorDanish 1.3.9 7 methods to implement TranslatorSpanish 1.3.8 8 methods to implement TranslatorPortuguese 1.3.3 12 methods to implement TranslatorSlovak 1.2.18 21 methods to implement - TranslatorSlovene 1.2.16 23 methods to implement TranslatorGreek 1.2.11 26 methods to implement TranslatorFinnish obsolete 95 methods to implement @@ -387,20 +387,10 @@ TranslatorIndonesian (Translator) virtual QCString trNoDescriptionAvailable() -TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement +TranslatorJapanese (TranslatorAdapter_1_3_9) ------------------ - Implements 185 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trOverloadText() - virtual QCString trDirIndex() - virtual QCString trDirDocumentation() - virtual QCString trDirectories() - virtual QCString trDirDescription() - virtual QCString trDirReference(const char * dirName) - virtual QCString trDir(bool first_capital, bool singular) + Implements 192 of the required methods. Obsolete methods (should be removed, never used): @@ -615,51 +605,6 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 21 methods to implement virtual QCString trNoDescriptionAvailable() -TranslatorSlovene (TranslatorAdapter_1_2_16) 23 methods to implement ------------------ - - Implements 169 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trOverloadText() - virtual QCString trEventDocumentation() - virtual QCString trDirIndex() - virtual QCString trPackageMembers() - virtual QCString trStaticPackageMembers() - virtual QCString trDirDocumentation() - virtual QCString trSearchResultsTitle() - virtual QCString trDirectories() - virtual QCString trDeprecatedList() - virtual QCString trDirDescription() - virtual QCString trStaticPackageAttribs() - virtual QCString trCallGraph() - virtual QCString trPackageTypes() - virtual QCString trSearchResults(int numDocuments) - virtual QCString trPackageAttribs() - virtual QCString trSearchMatches() - virtual QCString trEvents() - virtual QCString trSourceFile(QCString & filename) - virtual QCString trDirReference(const char * dirName) - virtual QCString trDir(bool first_capital, bool singular) - virtual QCString trSearchForIndex() - virtual QCString trAll() - virtual QCString trRTFTableOfContents() - - Obsolete methods (should be removed, never used): - - QCString trHeaderFilesDescription() - virtual QCString trField(bool first_capital, bool singular) - virtual QCString trPackageDocumentation() - QCString trSources() - QCString trReimplementedForInternalReasons() - virtual QCString trInterfaces() - QCString trHeaderFiles() - QCString trBugsAndLimitations() - QCString trEnumerationValueDocumentation() - QCString trNoDescriptionAvailable() - - TranslatorSpanish (TranslatorAdapter_1_3_8) 8 methods to implement ----------------- diff --git a/examples/example.tag b/examples/example.tag index c67e49a..085ed5e 100644 --- a/examples/example.tag +++ b/examples/example.tag @@ -7,7 +7,7 @@ <type>void</type> <name>example</name> <anchorfile>class_test.html</anchorfile> - <anchor>example_28_29</anchor> + <anchor>f7c9e353df7549b5697c934fb0331252</anchor> <arglist>()</arglist> </member> </compound> diff --git a/src/commentcnv.l b/src/commentcnv.l index a3d62a4..cb065ec 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -320,7 +320,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) copyToOutput(yytext,yyleng); BEGIN(CComment); } -<CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"|"f$"|"f["|"f{")/[^a-z_A-Z0-9] { /* start of a verbatim block */ +<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"|"f$"|"f["|"f{")/[^a-z_A-Z0-9] { /* start of a verbatim block */ copyToOutput(yytext,yyleng); if (yytext[2]=='[') { diff --git a/src/commentscan.l b/src/commentscan.l index 161b766..fe7f171 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -293,7 +293,7 @@ static void groupAddDocs(Entry *e,const char *fileName); */ static ParserInterface *langParser; // the language parser that is calling us -static const char * inputString; // input string +static QCString inputString; // input string static int inputPosition; // read pointer static QCString yyFileName; // file name that is read from static int yyLineNr; // line number in the input @@ -2215,8 +2215,9 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, guards.clear(); langParser = parser; current = curEntry; + if (comment.isEmpty()) return FALSE; // avoid empty strings inputString = comment; - if (inputString==0) return FALSE; // avoid empty strings + inputString.append(" "); inputPosition = position; yyLineNr = lineNr; yyFileName = fileName; @@ -2229,6 +2230,12 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, outputXRef.resize(0); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); briefEndsAtDot = isJavaDocStyle; + + + Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n" + "input=[%s]\n",fileName.data(),lineNr,comment.data() + ); + commentScanYYrestart( commentScanYYin ); BEGIN( Comment ); commentScanYYlex(); @@ -2253,9 +2260,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, openGroup(current,yyFileName,yyLineNr); } - Debug::print(Debug::CommentScan,0,"CommentScanner\n%s:%d\n" - "input=[%s]\nbrief=[%s]\ndocs=[%s]\n------------\n", - fileName.data(),lineNr,comment.data(), + Debug::print(Debug::CommentScan,0, + "brief=[%s]\ndocs=[%s]\n===========\n", current->brief.data(),current->doc.data() ); diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 0e9a898..8452f0b 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -1,3 +1,5 @@ +#include <md5.h> + #include "dirdef.h" #include "filename.h" #include "doxygen.h" @@ -66,32 +68,42 @@ void DirDef::addFile(FileDef *fd) fd->setDirDef(this); } -static QCString escapeDirName(const QCString &anchor) +static QCString encodeDirName(const QCString &anchor) { QCString result; - int l = anchor.length(),i; - for (i=0;i<l;i++) - { - char c = anchor.at(i); - if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')) - { - result+=c; - } - else - { - static char hexStr[]="0123456789ABCDEF"; - char escChar[]={ '_', 0, 0, 0 }; - escChar[1]=hexStr[c>>4]; - escChar[2]=hexStr[c&0xf]; - result+=escChar; - } - } - return result; + + // convert to md5 hash + uchar md5_sig[16]; + QCString sigStr(33); + MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig); + MD5SigToString(md5_sig,sigStr.data(),33); + return sigStr; + + // old algorithm + +// int l = anchor.length(),i; +// for (i=0;i<l;i++) +// { +// char c = anchor.at(i); +// if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')) +// { +// result+=c; +// } +// else +// { +// static char hexStr[]="0123456789ABCDEF"; +// char escChar[]={ '_', 0, 0, 0 }; +// escChar[1]=hexStr[c>>4]; +// escChar[2]=hexStr[c&0xf]; +// result+=escChar; +// } +// } +// return result; } QCString DirDef::getOutputFileBase() const { - return "dir_"+escapeDirName(name()); + return "dir_"+encodeDirName(name()); //return QCString().sprintf("dir_%06d",m_dirCount); } diff --git a/src/dot.cpp b/src/dot.cpp index a304788..3cc7e2f 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1958,7 +1958,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) if (bfd) { in = bfd->absFilePath(); - doc = bfd->isLinkable() && bfd->isHidden(); + doc = bfd->isLinkable() && !bfd->isHidden(); src = bfd->generateSourceFile(); } if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS")) @@ -1967,7 +1967,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) if (bfd) url=bfd->getOutputFileBase().copy(); if (!doc && src) { - url+="-source"; + url=bfd->getSourceFileBase(); } DotNode *bn = m_usedNodes->find(in); if (bn) // file is already a node in the graph diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 95cce31..ff2606a 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -3511,6 +3511,85 @@ static bool isRecursiveBaseClass(const QCString &scope,const QCString &name) return result; } +/*! Searches for the end of a template in prototype \a s starting from + * character position \a startPos. If the end was found the position + * of the closing \> is returned, otherwise -1 is returned. + * + * Handles exotic cases such as + * \code + * Class<(id<0)> + * Class<bits<<2> + * Class<"<"> + * Class<'<'> + * Class<(")<")> + * \endcode + */ +static int findEndOfTemplate(const QCString &s,int startPos) +{ + // locate end of template + int e=startPos; + int brCount=1; + int roundCount=0; + int len = s.length(); + bool insideString=FALSE; + bool insideChar=FALSE; + char pc = 0; + while (e<len && brCount!=0) + { + char c=s.at(e); + switch(c) + { + case '<': + if (!insideString && !insideChar) + { + if (e<len-1 && s.at(e+1)=='<') + e++; + else if (roundCount==0) + brCount++; + } + break; + case '>': + if (!insideString && !insideChar) + { + if (e<len-1 && s.at(e+1)=='>') + e++; + else if (roundCount==0) + brCount--; + } + break; + case '(': + if (!insideString && !insideChar) + roundCount++; + break; + case ')': + if (!insideString && !insideChar) + roundCount--; + break; + case '"': + if (!insideChar) + { + if (insideString && pc!='\\') + insideString=FALSE; + else + insideString=TRUE; + } + break; + case '\'': + if (!insideString) + { + if (insideChar && pc!='\\') + insideChar=FALSE; + else + insideChar=TRUE; + } + break; + } + pc = c; + e++; + } + return brCount==0 ? e : -1; +} + static bool findClassRelation( Entry *root, Definition *context, @@ -3603,23 +3682,8 @@ static bool findClassRelation( { // TODO: here we should try to find the correct template specialization // but for now, we only look for the unspecializated base class. - // locate end of template - int e=i+1; - int brCount=1; - int typeLen = baseClassName.length(); - while (e<typeLen && brCount!=0) - { - if (baseClassName.at(e)=='<') - { - if (e<typeLen-1 && baseClassName.at(e+1)=='<') e++; else brCount++; - } - if (baseClassName.at(e)=='>') - { - if (e<typeLen-1 && baseClassName.at(e+1)=='>') e++; else brCount--; - } - e++; - } - if (brCount==0) // end of template was found at e + int e=findEndOfTemplate(baseClassName,i+1); + if (e!=-1) // end of template was found at e { templSpec=baseClassName.mid(i,e-i); baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 8391e3c..64166e0 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -569,7 +569,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, } t << "\" rel=\"stylesheet\" type=\"text/css\">\n"; - t << "<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n"; + t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n"; t << "</head><body>\n"; } diff --git a/src/scanner.l b/src/scanner.l index 4e510d9..d037938 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -655,6 +655,7 @@ IDLATTR ("["[^\]]*"]"){BN}* %x CopyArgSharp %x CopyArgComment %x CopyArgCommentLine +%x CopyArgVerbatim /** Prototype scanner states */ @@ -2855,10 +2856,35 @@ IDLATTR ("["[^\]]*"]"){BN}* unput(lastCopyArgChar); BEGIN( lastCommentInArgContext ); } +<CopyArgCommentLine>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!) + docBlockName=&yytext[1]; + fullArgString+=yytext; + BEGIN(CopyArgVerbatim); + } +<CopyArgCommentLine>{CMD}("f$"|"f["|"f{") { + docBlockName=&yytext[1]; + if (docBlockName.at(1)=='{') + { + docBlockName.at(1)='}'; + } + fullArgString+=yytext; + BEGIN(CopyArgVerbatim); + } +<CopyArgVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9] { // end of verbatim block + fullArgString+=yytext; + if (yytext[1]=='f') // end of formula + { + BEGIN(CopyArgCommentLine); + } + if (&yytext[4]==docBlockName) + { + BEGIN(CopyArgCommentLine); + } + } <CopyArgCommentLine>[^\\\@\n]+ { fullArgString+=yytext; } <CopyArgCommentLine>. { fullArgString+=*yytext; } -<CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; } -<CopyArgComment>. { fullArgString+=*yytext; } +<CopyArgComment,CopyArgVerbatim>\n { fullArgString+=*yytext; yyLineNr++; } +<CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; } <CopyArgComment>{CMD}("brief"|"short"){B}+ { warn(yyFileName,yyLineNr, "Warning: Ignoring %cbrief command inside argument documentation",*yytext diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 0126cc6..3126adc 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1112,14 +1112,14 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) t << "\">"; if (!bcd->templSpecifiers.isEmpty()) { - convertToXML( - insertTemplateSpecifierInScope( + t << convertToXML( + insertTemplateSpecifierInScope( bcd->classDef->displayName(),bcd->templSpecifiers) ); } else { - convertToXML(bcd->classDef->displayName()); + t << convertToXML(bcd->classDef->displayName()); } t << "</basecompoundref>" << endl; } diff --git a/tmake/lib/macosx-c++/tmake.conf b/tmake/lib/macosx-c++/tmake.conf index 9bbf8bc..ef24a31 100755 --- a/tmake/lib/macosx-c++/tmake.conf +++ b/tmake/lib/macosx-c++/tmake.conf @@ -36,13 +36,12 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib TMAKE_LINK = c++ TMAKE_LINK_SHLIB = c++ -TMAKE_LFLAGS = +TMAKE_LFLAGS = -Wl,-search_paths_first TMAKE_LFLAGS_RELEASE = TMAKE_LFLAGS_DEBUG = TMAKE_LFLAGS_SHLIB = -shared -# soname does not work on fbsd 2.x -#TMAKE_LFLAGS_SONAME = -Wl,-soname +TMAKE_LFLAGS_SONAME = -dynamiclib -install_name TMAKE_LIBS = TMAKE_LIBS_X11 = |