commit a6d58bb6052ac8cb01805a48c4ad2f129126116f Author: tpearson Date: Wed Feb 24 02:13:59 2010 +0000 Added KDE3 version of kvirc git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..969ac28 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,2280 @@ +02 May 2007 - 12 March 2008 + [KVIrc Development Team] + - A lot of changes documented in the svn log. See http://svn.kvirc.de/kvirc/ for the timeline. + +02 May 2007 + [Alexey] + - New KVS functions: $serialize and $unserialize to deal with JSON-serialized strings + +16 Apr 2007 + [Noldor] (with the input from Pragma and Iakko) + - Iakko's notifier is back. New in this version: + 1) QT4 compatible (on win and macos it is uses fast setWindowOpacity effect instead internal notifier blend()) + 2) Added Option to disable fadein/out effect useful on slow machine (need test) + 3) Fixed strange crash on QT4 and some minor bug in show/hide event. (it is a trick... need to debug) + This a w.i.p. and need some test on linux. + +12 Apr 2007 + [TheXception] + - Added $system.call to call functions of dll/so files via kvs. + +10 Apr 2007 + [Alexey] + - Configurable avatar scaling on load + - Human-redable file sized on dcc transfers + +12 Mar 2007 + [Alexey] + - Added support for remote dns on socks5 proxy + - Added option to configure identd output mode + +06 Mar 2007 + [Pragma] + - Added svg and generated png icons for kvs,kvc,kvt and kva files. + Added the KDE mimetypes too. + - Some fixes for Qt4 support + +26 Feb 2007 + [Alexey] + - Added Export/Import feature to channel list module + +25 Feb 2007 + [Alexey] + - Repainted reuser list + - Added search field for mask editors + +24 Feb 2007 + [Noldor] + - New QT4 win compiling projects: still unusable... kvilib and kvirc compile but only in release; + you need to compile qt libraries by yourself then try to compile kvilib and kvirc (use COMPILE_USE_QT4 in kvi_wincfg.h). + Some module compile without problem... others need to be ported. + +20 Feb 2007 + [Alexey] + - Completely reworked ignore system + - Implemented reguser match caching + - Implemented custom color for registered user caching + [Pragma] + - Yet more Qt4 port. + - We now require Qt >= 4.2.2 for Qt4 support to work. Older 4.x versions + have bugs that can't be worked around and tend to crash kvirc + in various circumstances (including displaying tooltips). + Qt 4.2 also re-adds the possibility to add QWidget objects to popup menus. + - Yet more modules ported. + - A fix for the KVS expression operator precedence. + - A couple of general fixes that I can't remember but have been reported on + the list. + - I'm thinking about qmake support (as suggested by Matteo Catanese some time ago) + ... will require some work ... what do you think about it ? + +18 Feb 2007 + [Alexey] + - Fixed dns resolver under win32 + - Fixed minimized channels open + - Added bot detection icon (who will write docs?) + - Fixed winamp plugin problem under win32 (removed msvcr80.dll dependency) + +08 Feb 2007 + [Pragma] + - More Qt 4.x port. + Solved the most disturbing problems: it looks a lot better now. + - Font metric cache values can no longer be computed directly from a + widget's font. We must use the painter idea of the font instead. + This complicates caching a bit. + - Some of the QPainter functions seem to behave in a bit different way + - QFrame::drawContents() is gone... we need to reimplement paintEvent() + - The setAutoFillBackground(false) setting seems to be propagated to children + in some way (?) (as opposed to backgroundMode(NoBackground) in Qt3) + - QToolButton::drawButton() is gone, need to directly drawPixmaps instead... + - ... + Ported also the first couple of modules. + + Qt 4 causes a lot of problems in porting but I'm starting to feel + like the new library is very cool :) + +05 Feb 2007 + [Pragma] + - The KVIrc executable now compiles and starts with Qt4. With Qt3 everythin + should work just like it did before. + + No modules are ported yet so a lot of functionality is not available... + ... but it CAN connect to a server :) + It tends to crash once in a while, has nasty problems with + graphics and size of certain widgets: will need some hours of debugging. + + When testing the Qt4 port make sure you (re)move your old binary + modules from /usr/local/share/kvirc/3.2/. KVIrc will attempt to load + some modules from there and since they're linked to Qt3 the runtime + (loader) is likely to go nuts with two Qt versions in memory. + You have been warned... :) + +30 Jan 2007 + [Alexey] + - Introduced option "using identd only on connect" + +29 Jan 2007 + [Alexey] + - Introduced search in log files + +25 Jan 2007 + [Pragma] + - Yet more Qt 4.x port + - Added the torrent interface module by Alexander Stillich + +21 Jan 2007 + [Pragma] + - More Qt 4.x port + - More multiple identities work + - Added the first considerations about the Qt 4.x port to hackers.guide.txt + +20 Jan 2007 + [Pragma] + - Another quick fix (for config values not saved correctly) + - Started the implementation of multiple identities. + +19 Jan 2007 + [Pragma] + - Added the fixes for a couple of bugs introduced with the yesterday commit. + Thnx to Alexander Stillich for the detailed report :) + +18 Jan 2007 + [Pragma] + - More Qt 4.x port. kvilib now compiles cleanly with both Qt 4.x and Qt 3.x. + Don't know if it really works since kvirc compilation still bails out. We'll see :) + +15 Jan 2007 + [Pragma] + - Fixed the smart encoders a bit more + - Theme management: rewritten the theme save dialog as a wizard, added screenshot management. + - Really first step to Qt 4.x support: added ./configure switches to handle qt4 and + fiddled the makefile variables to contain the right include and library paths. + Still have no idea if everything works correctly since compilation bails out + very early in kvilib. + You're likely to have problems with moc since the configure script tends + to find the Qt 3.x moc instead of the correct one. Use the --with-qt4-moc option + to force the right moc compiler path. + In Qt 4.x mode the COMPILE_USE_QT4 preprocessor variable is set: use it for conditionals... + an #ifdef COMPILE_USE_QT4 is more or less equivalent to #if QT_VERSION >= 0x040000. + We will need to "abstract" several collection classes to make everything + work with both Qt 3.x and Qt 4.x. The goal is (or better would be) to hide everything in + kvilib in order to have almost no conditional compilation in the kvirc core and in the modules. + - Added a discussion about the versioning scheme in the hackers.guide.txt. Give + it a read and make/add your comments :) + +12 Jan 2007 + [Pragma] + - Added a set of smart encoders that send in UTF-8 instead of the child encoding + - Fixed a nasty bug in KviQString::vsprintf() that caused KVIrc to crash in response + to certain messages from server + - Added corrections and null checks in some places to make KVIrc resist to + the ircfuzz.c attack. + - Committed the spanish translation by Roberto Ciria + +08 Jan 2007 + [Pragma] + - More work on the themeing engine. Nearly finished. + The theme packages created since Dec 28 aren't compatible anymore. + (nobody was able to load them yet anyway :D), sorry. + - Added support for the audacious media player, thnx to Alexander Stillich :) + - Added #kvirc channel links in the help menu. Please add your own localized #kvirc channel. + +06 Jan 2007 + [Alexey] + - Added gender info sharing tricks + +28 Dec 2006 + [Pragma] + - Added handling of unknown RPL_WHOIS* numeric replies by implementing a nice + "guessing" algorithm suggested by Elephantman + - Added a file with KVIrc file extension definitions. We should use the defs instead + of hardcoding extensions like .kvt, .kvs or .kvp. + - Added a fast generic packaging engine. A KVIrc package is a kind of zip archive + with an uncompressed metadata header. It can be used to distribute both themes and addons. + - First works on the theme exporting engine. Saving and packaging are now different operations. + One first saves his theme to disk, eventually edits it manually (maybe by adding a nice + splash screen or fixing some icons) and finally packages it by invoking a nice + wizard based procedure. Still need to write the installation dialog. + - Moved the whole theme management engine to a new module. It exports the + management dialogs and some utility commands. There is no reason to load + all this stuff at startup with the options dialog now. + +27 Dec 2006 + [Noldor] + - Alias editor module: + added the possibility to save a selection of aliases in separated files (every file will have the alias name); + fixed search function; + - Script editor module: + fixed replace command(in "replace all aliases" too); + now syntax highlighter recognize command "function" and "internal"; + - Objects module: + added objects.classes, objects.variables, objects.classAllHandlers; + fixed crash in listviewitem class; + fixed little bug in multilinnedit class (function $setWordWrap); + + +19 Dec 2006 + [Pragma] + - help.open: open only one help window unless -n is used + +17 Dec 2006 + [Pragma] + - Committed the new german translation file by Mihai "Ionic" Moldovan + - Switched the source control system to SVN: happy coding :) + +15 Dec 2006 + [Pragma] + - Yet more work on the options dialog + - Added an option for the "network name in taskbar": it's cool, but we want to choose :) + +12 Dec 2006 + [Alexey] + - Added option to create minimized channels + - Fixed nick selecting in userlist via ircview + - Fixed mouse hover link effect + - Network name now will be shown in the taskabr instead on server name + +07 Dec 2006 + [Pragma] + - Yet more work on the options dialog + - Fixed a crash related to the dialog.* module calls + +28 Nov 2006 + [Pragma] + - More work on the options dialogs + - Removed the duplicated kvc_ icon. + +19 Nov 2006 + [Alexey] + - New function - $chan.getUrl + - NickServ identity can now accept masks in nick field + +16 Nov 2006 + [Alexey] + - Added a simple browser-like address bar to console + - Clicking on nick in channel ircview now selects it in the userlist + - Avatar dcc send rejected if avatar size greater, then max filesize, setted in options + +15 Nov 2006 + [HelLViS69] + - Added a checkbox on AwayIndicator applet popup to choose to go away + on all IRC Contexts + +14 Nov 2006 + [Pragma] + - Moved the userlist feature options page to the theme option dialog + and splitted all the userlist options in tabs + - Corrected some typos around + - Reworked the output options page + - Updated the directory selection dialog under KDE + - Avatars bigger than 1024x768 make KVIrc complain when setting them + and are scaled to a saner size when they are received from others. + +13 Nov 2006 + [Pragma] + - Added $object.instances(): useful when implementing singletons. + - Fixed a small image dialog issue + +9 Nov 2006 + [Pragma] + - Added support for chunked HTTP transfer encoding as required by HTTP/1.1 + - A fix for object toolbar position not saved properly + - A fix for the addon management dialog not repainted correctly + - A fix for loading of files by the means of KviFileUtils::loadFile()... + /parse is one of them and it expects an utf8 encoded file. + (read: all *.kvs files must be utf8 encoded, there is no other decent + portable way to preserve the national characters...) + +8 Nov 2006 + [Pragma] + - A fix for KviStr handling incorrectly multibyte strings (fixes some localization issues) + - A simple hack-in for a protocol filter.. maybe msn ? + +6 Nov 2006 + [Pragma] + - Various minor fixes around + - Splitted the core small icons libraries in separate icons. + - Moved the small icons to a subdirectory to speed up the loading (we are already at more than 280 icons...) + +1 Nov 2006 + [Alexey] + - Added unreal NAMESX and UHNAMES support + - Fixed $hexToAscii function + - Make DCC File Open/Save dialogs have native look on windows + - Fixes in filesystem handling. Fixed bug when KVIrc unable to load translation from non-latin folders + - Fixed actions' accelerators + - CTCP Page dialog now stays on top of desktop + - Fixed in tray minimizing/restoring on win32 + +Oct 2006 + [Alexey] + - WIN32 compiling need QTTAG env var with "mtnc321" value for non-commercial QT 3.2.1 or "mt336" for QT 3.3.6 + - New win32 tray icon + - Added snd.mute, snd.unmute, $snd.isMuted to KVS + - Moved theme selection out from theme options to avoid partyally applying of themes + - Added some lost functions to "painter" class + - Fixed ignore system + - Fixed input themeing (black on black bug) + - "play" command is now alias for snd.play + - IMPORTANT: fixed proper soket closing on win32 + - Fixed crash after first run wizard on *nix + - Make possible installation on USB removable drives (WIN32). KVIrc can store settings in program folder + - Make pathes in configs system-independent + +23 Sep 2006 + [Zerg] (commited by Alexey) + - Change dock icon size to 22x22 on KDE. Fixed style of icon + - Better in-tray minimizing + [Alexey] + - Setted tray icon background to transparent + +18 Sep 2006 + [Noldor] + - Added alphablend in objects.blend + - Added doc to class image and function setOpacity() + ... now we can create some weird, cool effect :=D + +08 Sep 2006 + [Alexey] + - Fixed input line painting bug: cursor goes out of visible range + +25 Aug - 07 Sep 2006 + [Alexey] + - Fixed couple of bugs, include crashbug when applying a new theme + - Rewrited channel mode handling + - Rewrited setup wizard + - Corrected themeing of input + - Del key deletes selected transfer in filetransfers + - Changed trayicon bechaviour. Now it's configurable. + + +25 Aug 2006 + [Pragma] + - uparser is definitively gone: KVS is the reality. + - cleanups all around, removing unused code etc. + - documentation cleanups + +13 Aug 2006 + [Pragma] + - Fixed some docs about KVS + - $boolean(), $string(), $integer() casts. + +27 Jul 2006 + [Alexey] + - Classic taskbar now looks fine in os-style. It uses new frames and borders + - Make classic taskbar resizable + - Make Tree taskbar header hidable. Hide it by default + - Tree taskbar change cursor to hand while moving over an item + +27 Jul 2006 + [Alexey] + - New -a | --all-networks switch for away and back commands to apply their action to all connected networks + - Fixed bug with long channellins scrolling; removed horisontal scrollbar + +27 Jul 2006 + [Alexey] + - Timestamp format now can be configured via options + - Input saves string in history when it was send via Ctrl+Return + - Fixed case sensivity mode handling in usermode popup + +26 Jul 2006 + [Alexey] + - Added option to include MSGTYPE info in theme packs + - Added support fot ports, greater than 65536 + +25 Jul 2006 + [Pragma] + - Comparison operators now prefer numeric operands instead of strings. + - Added $str.printf() + [Alexey] + - Fixed bug in language seletor + - New XML load addon dialog + - Show progress bar while indexing help + +24 Jul 2006 + [Alexey] + - Added XML (single file) theme export/import + - Added ability to delete installed themes + +22 Jul 2006 + [Alexey] + - Fixed bugs in filetransfers window while operating with localized filenames + - Renamed "orphan_servers" to "Standalone Servers" + +21 Jul 2006 + [Alexey] + - Added e2k URL highlighting + +20 Jul 2006 + [Alexey] + - Implemented help topics and keywords caching + - Topic can be viewed via double-click for non-opers in read-only mode + - Fixed PageUp/PageDown in logviewer + - Fixed defsctipt. Kickban now uses mask from kvirc prefs + - Fixed avatar handling while it trnsfered via DCC, filename contains space, but replacing spaces with _ enabled + - Fixed connection to stupid win32 proxies + - Added HTTP Proxy error displaying + - New autojoin channel editor; fixed bugs in channel autojoining + +19 Jul 2006 + [Alexey] + - Fixed DCC non-latin filenames handling + - Fixed avatars with non-latin names handling + +07 Jul 2006 + [Alexey] + - Fixed proxy connection (HTTP proxy doesn't require Server ip resolving now) + + +28 Jun 2006 + [Pragma] + - Fixed some CTCP handling as suggested by CtrlAltCa + - foreach now doesn't iterate over empty variables unless the -a switch is used. + +23 Jun 2006 + [Ahinu] + - Work on the mediaplayer module: more linux support + cmd/fnc cleaning + +10 Jun 2006 + [Alexey] + - Added icons to some tooltips + - Added Alt+DIGIT hotkey for window switching. Removed Ctrl+End hotkey(changed to Ctrl+F4) + +05 Jun 2006 + [Alexey] + - Fixed join channels menu + - Added insert text icon submenu to input editor popup + - Added feature to autosave logs + +23 May 2006 + [Alexey] + - Channel/topic input lines now have a OS-style border + [Fiber^] + - Added hungarian translation + +21 May 2006 + [Alexey] + - Fixed crash while topic contains a text icon + - Fixed colorizing nick as in the userlist while custom color is set for the normal users + +20 May 2006 + [Alexey] + - Added automatic codepage select for servers, that doesn't insart "CODAPAGES" in RPL_ISUPPORT message + - Now recent channels are network-dependend. For example #kvirc@Freenode and #kvirc@Azzurra are the different channels + - Switched to 3.2.3 + - Fixed (finally?) window restoring from tray icon + - Fixes in mIRC color handling + +15 May 2006 + [Alexey] + - Fixed issues when IP specified instead of server name in server properties + +13 May 2006 + [Alexey] + - Added search and document index to the help system + +10 May 2006 + [Alexey] + - Added texticon module to manage text icon collection + - Added detection if the KVIrc running to the win32 insatll script (patch contributed by Zerg) + +02 May 2006 + - Improved win32 insatll script (patch contributed by Zerg) + +22 Apr 2006 + [Alexey] + - Now user can define position and/or tiling methood of backgrounds + +22 Apr 2006 + [Alexey] + - Added visual effects to the tree taskbar + +19 Apr 2006 + [Alexey] + - [WIN32] Added installer script for NSIS installer (nsis.sf.net). It can properly uninstall local data dir, automatically install Winamp plugin + - Added ability to bind sounds on some events via options dialog + +18 Apr 2006 + [Alexey] + - !KVIrc now can run from localized folder (generally WIN32 fix)! + - Added options to strip colors from logs + - Filelist retirned to the left in logviewer + - Restyled win32 tray icon (now it looks similar to the *nix tray icon) + - Added tray icon flashing + - Added $lang function to detect user language + - Updated default toolbars + +15 Apr 2006 + [Alexey] + - updated graphical emotions + - added ability to hide channel's tool buttons + - options dialog is now closable by escape button + - added ability to hide input tool buttons + - colors and msgtypes now can be saved into the logfiles + +07 Apr 2006 + [Alexey] + - added support for caculating md5, md4, md2, sha1, mdc2, ripemd160, dss1 digests via new $str.digest function + +01 Apr 2006 + [Alexey] + - changed KVS_PT_STRINGLIST type to QStringList + - added option to set default ban mask + - added options to set maximum width of classic taskbar button + +17 Mar 2006 + [Alexey] + - More intelligent word highlighting + +14 Mar 2006 + [Alexey] + - Added HTTP Auth compatability + - Redesigned log viewer + - Added ability to remove logs in log viewer + - Added nicer styling of Tool buttons + - Fixed bugs in logfiles naming + +07 Mar 2006 + [Alexey] + - Added ability to choose smyles from external file + - Fixed sorting bans (invites,exempts) by date + +05 Mar 2006 + [Alexey] + - Added option to sort received files by nicks + +26 Feb 2006 + [Pragma] + - KVS now uses 64 bit integers, if possible + - More work on zero port DCC handshakes (still a bit work in progress) + - Finally managed the KviListView to display a transparent background + picture (hopefully) without flickering. Does it work on windows ? + - Added $hptimestamp() for high(er) precision time intervals computation + - Recently also more work on the options dialog + - the theme options now have its own toplevel dialog + (some of the options still need to be moved around) + - added a (still primitive) search function + +26 Feb 2006 + [Alexey] + - added "away" section to the dockwidget menu + - tray icon now transparent under *nix + - added autohide indicator to notifier + +24 Feb 2006 + [Alexey] + - added option for closing in tray (patch by Zerg) + - added option for startup minimized + - added deeper nick change customization in away + - added "Quit" item to the main menu + - new tray icon under *nix, more selective tray tooltip + +22 Feb 2006 + [Alexey] + - improved nick colorization in KViIrcView: now registered nicks are colorised as in the userlist + - now it is possible to assign a comment to the registered user. Comment will be shown it tooltip and WATCH join/quit messages + - added option for colorizing own nick in different color + +21 Feb 2006 + [Alexey] + - added option to disable avatar scaling if it less that required size + +20 Feb 2006 + - registered users can be organazid into groups + - some fixes in maskeditor + +13 Feb 2006 + [Ahinu] + - regchan.list -> regchan.showlist, added $regchan.list + - Added $str.stripcolors + +05 Feb 2006 + [Pragma] + - Started the big cleanup of the options dialog. Identity options for now. + - Moved the translations of the options module to a specific po file. + This makes the job units smaller (for translators) and doesn't force + kvirc to load all these strings at startup. + The original translations are preserved and the translators should + remove the unused overlapping (and commented out) portions of the kvirc_*.po + and options_*.po at the next opportunity. + +03 Feb 2006 + - Improved maskedior. Now it can edit masks;) + - Fixed issues with [] symbols in Wildcard expressions + +02 Feb 2006 + [Pragma] + - Added zero port request handling also for DCC CHAT. + We support it also in outgoing requests now. + - Fixed the problems with execution of perl script that contain warnings. + +27 Jan 2006 + [Pragma] + - Again missed updated + - Initial support for shared double buffering (will reduce memory usage) + - Finished the cool listview initiated by Alexey (still needs testing on windows tough) + - Some other things I have forgot :D + +17 Jan 2006 + [Pragma] + - We now suppor the mIrc zero port DCC protocol both in incoming and *outgoing* transfers + The outgoing protocol is activated by /dcc.rsend -z + - A couple of fixes for the KVS engine + - Some fixes for the perlcore module (almost finished: it just needs a better warning handler...) + [Grifisx & Noldor] + - Some projects updated + - Fixed varius bug in object module (we hope less crashes ;) ) + - Deleted some old, unused objects classes function + - Added function $height() and $width() in class pixmap + - Fixed and optimized objects.blend command: now it is very cool and you can create some eyes candy effect + very easily =)(more new graphic commands will come in the near future) + - The porting of the module object is near to finish: only class socket is missing. + +14 Jan 2006 + [Grifisx & Noldor] + - Added the new class object named "image": at this moment it is in alpha state and without docs; + - Added command objects.blend. + [Pragma] + - Added the math.* module + - Fixed comparison of variables in KVS + +13 Jan 2006 + [Grifisx & Noldor] + - Fixed bugs in object classes + [Alexey] + - Window now saves logging state and userlist state + - CTCP VERSION reply now shows os version and QT version + - Added support for RPL_ENDOFSTATS (219) message + [Pragma] + - Missed to update this file for a while :D + - The object classes are now persistent: they are stored on disk so one does not need to always redeclare them in aliases + - Added the "user friendly commandline" button to the input widget and the global option to keep it automatically on/off + - Other small fixes that I can't remember + +11 Jan 2006 + [Alexey] + - Added an option to disable notifier window flashing + - Fixed doubleclick interval in ircview + - Added support for guessing max modes per line from RPL_ISUPPORT + - Now you must use // prefix in nput line to use full KVS syntax. The / prefix don't parse arguments at all + +10 Jan 2006 + [KVirc Development Team] + - Events now works in objects module + - Lots of other improvements in objects module + - Options to minimize in tray + - New styled checkboxes are fully functional now under all OS + - Fixed mIRC color handling + - Fixed file handling in snd module on localized filesystems + +4 Jan 2006 + [Pragma] + - Started porting events on new KVS + [Alexey] + - Added colors to the topic history widget + - Added ability to count total connection time for all connections for the connection timer applet + +25 Dec 2005 - 3 Jan 2006 + - Removed old KVS + - Added history to the topic editor + - Redisigned splash screen + +24 Dec 2005 + [Pragma] + - More modules ported to KVS: only dcc and dialog are partially missing + at this point. Prepare for the big cleanup :) + - Added JIS7 and euc-JP to the list of supported codecs (thnx hagabaka!) + - Some small fixes to the options dialog that was going nuts recently... + +20 Dec 2005 + [Pragma] + - Almost finished the work on alias namespaces: they should be usable now + - Ported the perl modules to the new KVS + - Ported the sharedfile module to the new KVS too, really few modules + are missing now + - Fixed a couple of buggies in KviCommandFormatter that prevented + aliases from being correctly removed + - Some work in the new KVS engine: the big cleanup is coming...be afraid! + +18 Dec 2005 + [Pragma] + - Alias namespaces and other curious thingies all around + +10 Dec 2005 + [Alexey] + - [Kernel] New theme package format. Now theme s\is a king of addon + - [KVS] Fixed crash while calling $tr("") in new KVS + - [Kernel] Other bugfixes + + [Pragma] + - [Kernel] Fixed crashbugs in KVS kernel + +09 Dec 2005 + [Alexey] + - [Kernel] Fixed bugs in handling modes. Now it is case sensivity + - [UI] Fixed bug with deleting selected text from input line or topic editor + - [UI] Pressing a key in userlist now selects the first nick with first letter, equal to the pressed key + - [UI] Now options splitted into 3 categories: for novice,normal and experienced users. Newbies should see really simple configuration dialog + +07 Dec 2005 + [Alexey] + - [Kernel] KVirc *hopefelly* supports now localized file names and file pathes! (but it really partially support it now:))) + - [UI] Added missed option to the irc option widget. Now user can specify number of maximum send channel modes per line + +06 Dec 2005 + [Alexey] + - [UI] Added themes previews to the setup wizard + +05 Dec 2005 + [Alexey] + - [Kernel] Added soma additional checks to KviRegisteredUser class. + - [Kernel] Mode work on filesystem interfave + - [Kernel] Much better filenames encoding function from internationalization point of view. Logfile names becomes not so ugly:) + +01 Dec 2005 + [Alexey] + - [UI] Fixed bug with nick completion + +26 Nov 2005 + [Alexey] + - [UI] Now it is a programm option to disable splash and no more --disable-splash configure option +27 Nov 2005 + [Alexey] + - [Kernel] Fixed crashes in action and toolbar modules under windows + - [Kernel] Added trick to resolve unmasked local hostname from 001 server message, even when you using +x mode + +26 Nov 2005 + [Alexey] + - [UI] Fixed bug with non-latin search in ircview. Now it works:) + - [UI] Improved \r handling in ircview. Now it can contain colors in the label title. + - [UI] Improved smart nick and channel highlighting. + - [UI] Escape hotkey (minimize window) replaced with Ctrl+Esc hotkey. + - [UI] Better code highlighting and code completion in scripteditor. + +25 Nov 2005 + [Alexey] + - [UI] Added smart nick and channel highlighting. Now most of channel names and nicknames are recognized and you can click on it by mouse:) + +24 Nov 2005 + [Alexey] + - [KVS] config module ported + - [KVS] mediaplayer module ported + - [KVS] fixed _tonns_ of crashes in objects module with new KVS + +23 Nov 2005 + [Alexey] + - [Kernel] Added ability to choose proxy server in irc server's preferences. You can choose different proxyes for different servers + +22 Nov 2005 + [Alexey] + - [KVS] Removed ugly $insertInInput function, added commands window.setInputText,window.insertInInputText and function $windos.inputText + - [KVS] Make new KVS allows to use '_' symbol in functions' names,commands' names and variables' names + - [Kernel] Added support for RPL_ADMINME, RPL_ADMINLOC1, RPL_ADMINLOC2, RPL_ADMINEMAIL, RPL_COMMANDSYNTAX, RPL_INVITING, RPL_INFO, RPL_INFOSTART, RPL_ENDOFINFO, RPL_TIME, ERR_NOSUCHSERVER, ERR_NOSUCHCHANNEL, ERR_CANNOTSENDTOCHAN, ERR_NOCOLORSONCHAN server messages + - [Kernel] Added support for gzipping logs and viewing gzipped logs + [Pragma] + - First step for the implementation of namespaces in aliases (new KVS only) + +21 Nov 2005 + [Alexey] + - [UI] Ctrl+Enter now sends text to the channel(query,dcc chat,etc..) even if it has "/" at beginning. + - [Kernel] Tuned output and string formatting functions. Really solves TONNS of internationalization problems:)) + - [Kernel] Code tuning: chack all sources to proper encodig data, sended to server. Make corrections. + - [Modules] Some other internationalization fixes in DCC module + - [UI] Added option to colorize nicks in channel messages the same, as they colorized in the userlist view + [Pragma] + - ported dialog.textinput + - more fixes around + +20 Nov 2005 + [Pragma] + - Started porting the dialog module + - Added the callback object KVS base class + - a small fix for KviInput (gcc warning) + +08 Nov 2005 + [Alexey] + - [KVS] Error and warning texts are now readable in localized versions + - [UI] Added option to enable or disable showing query information label + - [UI] Added some items into the main menu + - [UI] Added default menu on right click at url link + - [KVS] Added $str.fromClipboard function and str.toClipboard command + - [UI] Channel mode label now allows to edit chanmodes + - [UI] Added new information label into Query window + - [KVS] Fixed bug 0000270 with OnChannelModeChange event + - [Kernel] Fixed click vs double click bug + - [Kernel] Added parsing of 703(WeNet) and 020 messages + - [UI] New topic editor + - [Misc] Fixed some other bugs + - [UI] Fixed permission on topiceditor and mode editors(for ircOps and halfops) + - [Kernel] Fixed bug when message, that have raw event handlers decode 2 times + - [Modules] Fixed internationalization issues in avatar module + - [KVS] Window,reguser,url,term,toolbareditor,regchan modules are ported.. + - [KVS] Log module ported, porting logging system from KviStr to QString + - [kernel] Some fixes for COMPILE_ONLY_NEW_KVS + + [Pragma] + - More work on the KVS engine + - avatar module ported... + - Merged various small fixes done in the last days + +05 Nov 2005 + [Alexey] + - added 7 new events to hangle single clicks + - added 2 new functions to get/set/insert text in window's inut lineedit + - added 2 new options for the proper handling of winamp encoding and ID3 tags' encodings + - started dcc module porting from KviStr to QString + - resolved lot of internatiolization problems in DCC module + - improved defscript + +26 Oct 2005 + [Alexey] + - Added Ctrl+A shortcut for select all + - Total latin1() elemination + - Fixed bugs from bugtrack + - Improved usermode menu + - Resolved issues with encodings in DCC chat and transfer + - Editbox now has focus by default in search window + - Changed /ame and /amsg behaviour + - Make connect/disconnect button to reconnect to last used in this context server,not to last used globally + - Added WeNet network + - Fixed CTCP handling + - Fixed +e and +I chanmodes handling + - Fixed issues with non-latin symbols in scripts + - Fixed encodings in logfiles + - Fixed encodings in socket agent window + - Fixed logfile names + [Pragma] + - A quick fix for the connect button handling + - A fix for a crash in the listview KVS class (new parser) + - More KVS all around + +19 Jun 2005 + [Grifisx/Noldor] + - code improvements in the editor(...stil a work in progress): + added code completition (shift+insert keys), added a dynamic help: move over a command/function. + then right button and "help command/function" (... its in beta status, need some workaround :D) : + an help window will appear. + - added some options to hide graphic elements in the gui to build a very "minimalist" KVIrc. + +15 Jun 2005 + [Grifisx/Noldor] + - code improvements in the editor(...a work in progress): + added find/replace in alias editor, fixed some bugs and added some user friendly feature. + To do: code completition; + - win code improvements in the system module; + - added setBackground command in window module; + +24 May 2005 + [Pragma] + - Added queueing for slow paste + - Added http.asyncGet + +14 Apr 2005 + [Grifisx/Noldor] + - Add wrapper and wizard classes, + added parameters support to all classes, + some fix and changes in many objects classes. + Moved commands "connect","disconnect","clearobjects","killclass" in the module objects. +05 Apr 2005 + [Grifisx/Noldor] + - Added mediaplayer.setVol and mediaplayer.jumpTo commands for winamp, + painter and pixmap class optimization, + added 'Paste file' and 'Stop slow paste' on chan and query. +24 Mar 2005 + [Pragma] + - Added the CIA open source project tracing script to the cvs (only for + the kvirccvs module). Please write informative CVS comments from + now on :) + +23 Mar 2005 + [Grifisx/Noldor] + - added boolInputHistory option to disable Input History window and it's log memory + +20 Mar 2005 + [Grifisx/Noldor] + - added painter, textbrowser and pixmap classes and some extensions to widget class + - add minimize and close button to the iconstable's window + +13 Mar 2005 + [Grifisx/Noldor] + - added functions and signals to manage some event in the lineedit class: + $lostFocusEvent, $returnPressedEvent, $textChangedEvent + - added function $str.section(,,,) in 'str module' + +12 Mar 2005 + [Crissi] + - mp3player module updated: kde mediaplayers + +09 Mar 2005 + [Grifisx/Noldor] + - some new classes in the object module: + mainwindow, toolbar, toolbutton + +08 Mar 2005 + [Grifisx/Noldor] + - Fixed CTRL+K, CTRL+B, CTRL+U, CTRL+I...escapes in the topic widget + +27 Feb 2005 + [Pragma] + - Fixed the CTRL+D terminal window crash + - Fixed the Rijndael encryption module + +22 Feb 2004: 3.2.0 "Realia" released. + +20 Feb 2005 + [Pragma/Iakko/Noldor/Grifisx] + - Several fixes on the notifier + - A lot of enchancements in the objects module (some new classes + and some extensions to the existing ones) + - Improved auto-resume DCC handling: now files are not + auto-resumed when the incoming size is unknown or smaller + than the existing file. The auto-resume is disabled also + if there is a running transfer with the same loca file name. + - Fixed several bugtrack issues. + - Cleaned up the -ansi -pedantic compilation. It looks that + only one real warning remains and it is related to the "deprecated" + flags of KApplication constructor which will be removed + in KDE 4.0. We must live with it for a while. + All the other warnings are due to the system headers. + - Caught a couple of potential segmentation faults in the reguser + module. + - Committed the catalan translation by Marc Serra + +09 Feb 2005 + [Tom] + - Fixed several positioning issues for widgets with saved geometry + on MacOS X + +09 Feb 2005: + [Noldor/Grifisx] + - Added the KVS process class + - Several fixes for other object classes + - Added Drag&Drop support to the queries: now a drop operation + triggers the OnQueryFileDropped event + - Added support for CTRL+K, CTRL+B, CTRL+U, CTRL+I ... escapes + in the topic widget. + +08 Feb 2005: + [Noldor/Grifisx] + - Added the KVS radiobutton class + +08 Feb 2005: + [Pragma] + - Fixed the bug of KviIrcView that caused the background to be repainted + incorrectly when the mouse was hovering over the links + - Private background now has priority even over the global transparency + - Added a menu option to reset the private background pixmap when no longer needed + - Removed the "FrameCaption" option since it was only freaking the people + out when it wasn't updated on version change... + +07 Feb 2005: + [Pragma] + - Finally managed to handle correctly the IME events: text input for chinese/japanese + korean etc... should work now. + - Fixed the logging of emoticons: they are written to the log files now + - More tricks on KviHeapObject + - Added the fixes for the _horrible_ VC++ compiler bug that implicitly + creates helper functions (vftable entries) residing in code sections where + operator new is called on a class with a virtual destructor. This is + simply destructive when it happens in a module that can be unloaded + before the object allocated with new is destroyed: at delete time + the code flow obviously jumps into no man's land. + - Committed the ldcnumber class by Noldor and Griffisx + +04 Feb 2005: + [Pragma] + - Added the fixes for windows segfaults reported and bughunted by Noldor and Grifisx. + Maybe these KviHeapObject trick will help to solve the issue. + - Added a warning message about sending more than 20 lines of text + at once in a query or channel. The warning can be obviously disabled + forever by answering "Always". + - Added the XIM "hot spot" handling for the input window. + + +01 Feb 2005: + [Pragma] + - Bandwidth limits for DCC finished. They are configurable "on the fly" now. + - Fixed the Ctrl+Arrows and Ctrl+Shift+Arrows behaviour: now they skip/select + entire words in the input widget. Window switching has been moved to + Alt+Arrows and Alt+Shift+Arrows. + +31 Jan 2005: + [Noldor/Grifisx] + - Yet more object classes: time for spinbox and slider. + +30 Jan 2005: + [Pragma] + - DCC Bandwidth limit implemented, "on the fly setting" is still missing tough + +29 Jan 2005: + [Iakko] + - Added Notifier 2.0 in a more stable and usable version, now tabs and + "blinking onFocusOut/showing" are working. The Notifier is still on Beta version. + - Some kvi_sp_literal.cpp and kvi_sp_ctcp.cpp (under kvirccvs/kvirc/src/kvirc/sparser) changes + needed for notifier to work. A core recompilation is suggested even if + not strongly necessary.. it's a matter of string output on the notifier, nothing critical. + - Graphic features are waiting to be added asap. + +29 Jan 2005: + [Noldor/Grifisx] + - Added a new widget class "progressbar" with the following functions: + $setProgress, $setTotalSteps, $reset, $setCenterIndicator, + $setPercentageVisible, $isCenterIndicator, $isPercentageVisible + +28 Jan 2005: + [Pragma] + - Added the possibility of exporting toolbars from the toolbar + customization dialog. The export function can also export + the associated actions. + - Moved the toolbar customization dialog to a separate module + - Added the mircryption/blowfish crypt engine. It actually supports + both the standard ECB mode and the (really) new CBC mode. + - Fixed some remaining bugs in the action editor: now it should + be ready for the public :) + - Added a couple of object functions to the layout object class + to support the nice minesweeper script :D + - A full set of action.* and toolbar.* commands is now available + - Added compatibility loading functions for old toolbars + - Added handling of the ERROR server message. + - Added the support for actions that can be enabled only in + specified windows and only if there is a nonempty selection inside. + This allows to create user toolbars that perform quick actions + on the selected channel users. This is a *really* quick kick + for example. + - Fixed a couple of bugs related to the mask handling + - Fixed a possible bug related to acknowledges in the DCC send code + - Other small fixes all around as usual. + + +27 Jan 2005: + [Noldor/Grifisx] + - added $setFont to the class widget,$setDragEnabled and $setInputMask + to the lineedit class; + +20 Jan 2005: + [Noldor/Grifisx] + - added some new functions to the class widget: $setToolTip, + $setForegroundColor,... + - some code improvements in the win version of the filetransferwindow: + added context menu like open,open with,delete file,open destination folder + +8 Jan 2005: + [Pragma] + - Added handling for ERROR and the relevant OnError event. + +7 Jan 2005: + [Pragma] + - Again more than 20 days of changes to report. + - The action based toolbars are almost working and have replaced + completely the old scriptable toolbars. + - The toolbar customisation dialog is ready + - Actioneditor is almost ready too, needs just minor adjustments + - Added $chan.userJoinTime() and $chan.userLastActionTime() + - Added several new $mask() types: now it is possible to get different + host masks (only *.domain.ext or *.anything.anythingelse.domain.ext). + Another mask set tries to handle correctly the hidden hostnames (+x) + on some servers (this does not work 100% tough...) + - Added the initial stuff for the language recognition module. Still + don't know if it will end up in the official release: needs interfacing with + the core... but the standalone engine is starting to work. + - Added several "smart" encodings that will try to decode as UTF8 first + and then apply the local encoding rules. + - Added a couple of new emoticon images (Thnx Penny!, Thnx Sidhe! :) + - Created the "scripts" cvs module and added a first script example + (a simple ezbounce irc proxy interface) + - Fixed runtime localization of the action and toolbar names: they + should work fine now. + - Fixed some bugs in the objects module (still needs a lot of work) + signaled by Noldor. + - Bumped up libtool and ltmain.sh to 1.5.10 (hoping that it will stop + relinking the modules when installing... this is extremely annoying) + - Suggest installing the default script if no toolbars or popups are available + - Fixed http avatars not being correctly loaded after the transfer has finised. + - Iakko is working hard on the new (cool!) notifier interface :) + - Various other fixes all around + +15 Dec 2004: + [Pragma] + - Hacked the avatar cache to support masked ip addresses + (added some new parameter options to the $mask function by the way) + - Added the possibility of setting a temporary background for any IRC view. + This is still an experiment. + +12 Dec 2004: + [Pragma] + - Added minimal support for /DCC ALLOW + - Fixed config files loading that truncated lines longer than 32K + +8 Dec 2004: + [Pragma] + Yet another huge set of commits. + The major changes are: + - New "action" based toolbar and popup menu system. + Now the user can just drag & drop actions to customize toolbars :) + - The "big cleanup" has started: + - "Scripttoolbar" is gone: the functionality is completely superseeded by + the action based toolbars now. I already know that some people will want to kill + me for this but from now on the actions are the only method to create toolbars. + This is a good idea since the old method was a bit ugly (for example because + it needed overriding events to enable/disable the actions). + Moreover, another piece of the old non-unicode parser has been wiped out: this is Good(TM). + - Module extension toolbars are gone: replaced by the action stuff now (see above). + - Several structural changes to the default script that reflect the changes in the core. + It IS a good idea to reparse it (execute default script) once now. + +4 Nov 2004: + [Pragma] + - Fixed various minor bugs introduced with the last huge commit. + - Merged the Mirco Macrelli's patch that adds the chanowner flag + support. + +1 Nov 2004: + [Pragma] + I've missed to update this file for a while: my fault :/ + The major changes until now are: + - New statusbar showing the server informations. + This is intended to replace the irc context applet which + often has problems with space. + - 5 moveable statusbar applets + - Per network settings: nick,user,OnLogin,OnConnect,NickServ + authentication etc. as per-network settings. + - Both the servers and the networks can have a preferred + encoding now. + - More UNICODE support all around: the encodings are honored + almost anywhere with the exception of the scripting engine. + The scripting engine uses a hack that makes the encodings + survive through trivial scripts too. This will become yet + better when the new KVS core will be ready. + - Support for unicode nicks and channel names. + In fact almost anything that the server sends out may be unicode + data encoded with some 16->8bit scheme. + - A new rewritten lag meter that will avoid to ping the server + if possible (when other lag-check probes are spontaneously + being sent). The improved algorithm computes the lag better + and does not "hang up" when the server doesn't reply at all. + - The default quit and part messages can contain scripting identifiers + that are evaluated at quit or part time. + - The windows problem with keyboard input has been resolved + - Several enchancements to the actual scripting engine including + but not limited to echoprivmsg, query, notice, notifier.* , + perl.*, server, ... + - Added OnDisconnectRequest event + - Added support for /CODEPAGE + - Avoided unnecessary repaints when in SDI mode: this made + KVIrc a bit faster when switching windows and lowered + the overall cpu usage. + - The "unread" text in a window is now clearly marked by a horizontal + line in the text view. If the text line is out of the view + then a triangle in the upper corner of the view signals it. + - KviWStr stuff definitively removed :))) + - Several other minor bugtrack issues fixed. + + +6 Aug 2004: + [Juanjo] + - Make some pointer = 0 after delete assignations when: + Pointer is a member pointer or a global pointer. + The delete is not in a destructor. + It makes sense. + +1 Aug 2004: + [Juanjo] + - Added an autopackage dir with two (very initial) apsepc files to build a + .autopackage autoinstaller. + If you have not + checked autopackage (http://autopackage.org) DO IT NOW :) is the real + solution for Linux third party software installation across distributions + (somewhat like autoconf at the binary installation level, but without + damn M4 :) + +20 Jul 2004: + [Pragma] + - Now you can use perl from KVS and KVS from perl :) + See /help perl.begin + +13 Jul 2004: + [Pragma] + - Perl support has been widely requested. Added the initial modules + for that purpose. Needs more work tough. + - More work on the notifier: now it's fully working. + Added also the options to disable it in several ways (even completely). + - Fixed various bugs all around + +11 Jul 2004: + [Pragma] + - Added /AHOST command + - More work on the notifier, now it flashes, pops up only when really + needed and can be temporairly disabled. + - Hardwired the event manager of the new KVS engine and officially + killed the old uparser based event manager. We're getting closer and + closer... + +08 Jul 2004: + [Pragma] + - Added the notifier module: really nice! + Thnx to Penny for the images :) + +06 Jul 2004: + [Pragma] + - Added a Always/Yes/No message box that asks the user for confirmation + when attempting to close a connected console. + - Added the Always/Yes/No option to the "Quit-Kvirc-On-Close-Last-Console" + operation. + - Fixed the input history handling bug as reported by Soliton + - Added several fixes for UNICODE misbehaviours reported by Dusan + - Fixed the configuration files parsing: now the entries + and the keys have whitespace encoded separately and the UTF8 + encoding/decoding is done in the proper places. + - Added the code to make the translation of the tips possible. + The translations MUST be UTF8 encoded and use the + libkvitip_.kvc name. + - Finally fixed the copy&paste behaviour: + In the input the selection and the middle click + use QClipboard::Selection if supported by the operating system. + All the other methods use QClipboard::Clipboard. + The IRCView now copies to both QClipboard::Clipboard and + QClipboard::Selection (if supported) + - Again huge structural reorganizing in the networking stack + now I start to like it :) + - Committed several translation updates by Dusan + - The reconnect timer can now be stopped before it triggers + and on disconnect it uses the correct server entry. + (see Trisk's ChangeLog entry for 12 Mar 2004). + +26 Jun 2004: + [Pragma] + - Fixed a mismatched new[]/delete pair in kvi_locale.cpp + - More KviConsole->KviIrcConnection moving + - Fixed a couple of potential segvs related to the connection management + - More UNICODE fixes all around + +24 Jun 2004: + [Pragma] + - Yet more bug fixing + - Added the cs translations of the modules and fixed some unicode issues reported by Dusan + +21 Jun 2004: + [Pragma] + - Fixed a bug introduced by the previous fix about date encodings :D + - Fixed log files not being properly encoded to UTF-8 (question: should + the logs be UTF-8, use the local encoding or use the source window charset ?) + - Committed more work on kvirc_cs.po by Dusan Hokuv + +20 Jun 2004: + [Pragma] + - More reorganizing of the networking stack + - Fixed some bugs with encoding of the dates in non-english locales + +16 Jun 2004: + [Pragma] + - Fixed a crash in the /foreach command as reported by Ahinu (thnx ;) + - Added the OnNetsplit event + - More reorganizing of the networking stack + +12 Jun 2004: + [Pragma] + - A lot of UNICODE updates + - More reorganizing of the networking stack + - Added a lot of new text encodings including the missing ISO-8859-XX variants + and some CPXXX. + +4 Jun 2004: + [Pragma] + - Added first bulgarian translation by bugar@developer.bg + - Completly reorganized the + class set. Now it should become more usable/readable/manteinable/coherent ... + Really work in progress: expect misbehaviour and compile time warnings about + deprecated functions... + +2 Jun 2004: + [Pragma] + - Added profiling support (--enable-profiling) + +31 May 2004: 3.0.1 "System Virtue" released. + +11-30 May 2004: + [Pragma] + - More console splitting , still not finished + - Created the initial hackers guide document (this will be always work in progress) + - Fixed some online doc bugs + - Fixed a bug with popup menu prologues not being saved correctly + - Fixed a SEGV related to focus management + - Fixed a couple of translation related SEGVS + - Preserved UNICODE in the logs by encoding to UTF-8 + (maybe this should be the local 8 bit ? feedback will be needed later) + - Fixed several typos and dead links in the documentation signaled + by Klaus Weidenbach + - Added a couple of window.* module commands/functions + - Unicode fixes related to IrcView tooltips + - Added $msgtype function and fixed the related echo documentation + - Added the export function in the event editor + - Fixed a bug in the popup export function that caused extpopup entries + without icons to be exported as simple popups (thnx again Klaus). + - Added an option to redirect WHOIS replies to the active window (on by default) + - Added the /echoprivmsg command + - Added the "delete file" function to the file transfers window + - Various fixes all around + +10 May 2004: + [Pragma] + - Fixed the problem with tooltips displaying the wrong avatar image + - Started splitting KviConsole in smaller logical classes (irc context, irc connection) + +06 May 2004: + [Trisk] + - Changed parsing for 004 numeric, properly works with hybrid now. + +17 Apr 2004: 3.0.0 "Awakening" released. + +16 Apr 2004: + [Pragma] + - Fixed a bug with creation of KviWindow derived classes: the constructor + of the base class was calling virtual functions from subclasses (it is curious + that this was effectively failing only on Windows and not on Linux). + - Reworked a bit the str module to avoid compiler parameter passing problems + - Fixed a bug with $str.replacenocase + - Fixed a bug that prevented the color option selector buttons from + displaying the proper color + - Miscelaneous fixes for the release + +15 Apr 2004: + [Trisk] + - Miscellaneous minor stuff (set avatars to 0 width/height to disable). + - More reasonable defaults (seriously, the coloured nicks hurt people's + eyes =\ ). The fact that unrecognised commands result in parse errors + confuses new users (and annoys the heck out of me, too). Turned off + message icons too. Rationale is that it will disgust former + epic/BX/irssi/xchat users. + - And, I don't think most new users will use avatars regularly, so turning + the nicklist grid off by default, since it makes the nicklist more + cluttered. + * Forgot to add nick completion suffix. Oh well, the 3.0 series is just + beginning... + - Almost forgot to clean up really bad spelling in tip of the day. >< + +13 Apr 2004: + [Pragma] + - Added the default low-resolution (Minimalist) and high-resolution + (fancy) themes + - Added the selection of the default theme at first setup + - Added one time nickname generation at first startup + - Modified the Identity dialog to handle better the multiple + nickname alternatives. The combobox was not that intuitive + thus added a separate dialog for the alternatives. + - Removed the "Change now" button from the Identity dialog: it never + worked correctly. + - Fixed the "concurrency" crash reported on the mailing list + - Fixed a SEGV related to shared files + - Fixed an infinite loop in the toolbar editor + - Fixed a bug with the Color Selector not displaying the right color on windows + - Adjusted acinclude.m4.in to handle the new icons added by Trisk: still not + installed in the proper locations + - Added a couple of GUI option pages that were really missing (mdi captions + and toolbar applets) + - A couple of new icons added + - Fixed a couple of strange behaviours of the input widget + - Some source code rearrangements all around + - More things that I can't remember :D + +11 Apr 2004: + [Trisk] + - New application icon by Arty2 / Hercules Papatheodorou + , updated icon set. + * Too lazy to get icons installing in proper locations. + +08 Apr 2004: + [Pragma] + - Added the highly requested /exec command in the core + - Also added an example script that runs an interactive telnet + session and sends mail with the use of /exec: powerful :) + - Fixed a script editor highlighting bug + - Fixed another problem with overlapping dns queries... + ... it should have been written this way from the beginning :D + - Miscelaneous changes & fixes all around... + +06 Apr 2004: + [Trisk] + - Fixed null KviWStr problem. + - Fixed /$sw(e) crash. + +04 Apr 2004: + [Trisk] + - Hacked KviWStr to use QTextCodec instead of charset translation tables. =P + *** Chinese, Japanese, Korean seem to work! + - Fixed encoding names. + - Added ISO 8859-9 (Latin-5 Turkish, requested), Big5, GB18030, SJIS, + EUC-KR, TIS-620. + - Added options to not show tooltips in taskbar and userlist. + - Added option to disable taskbar sorting. + +02 Apr 2004: + [Trisk] + - DCC message changes. + - Use proper capitalisation in events, Irc->IRC. + - Hack to allow showing +e (and +I) when used for channel modes (not user + modes). + * Should implement better 005 parsing. + +31 Mar 2004: + [Pragma] + - Added the quit confirmation dialog when there are active connections in the + window being closed + - Added some descriptive messages to the setup dialog + - Fixed a crash related to received CTCP's + - Fixed the theme loading that was not updating all the icons + - Fixed some functionality of the theme selection dialog + - Added some message color presets + - Fixed a crash with overlapping dns queries + - Added updating of the KDE root pixmap when autochange is active + - Added the "execute script" menu entry + - ... + [Trisk] + - Some message changes. + - Added redirect to active window options for services notices, server + notices, broadcast/wallops, and renamed ToConsole options. + - Minor server parser changes. + +28 Mar 2004: + [Pragma] + - Added the default theme (useful to restore the default settings) to the distro + - Some bug-fixes and cleanups in the theme engine + - Added the themes section on www.kvirc.net and placed the first Marble theme by Sbrokka on ftp.kvirc.net + - Adjusted the menubar to dynamically setup the popup menus (it reloads the icons etc..) + - Fixed a crash in ctcp action + - Added the option to flash the KVirc's taskbar entry when new messages arrive in a query and KVIrc is + not the active application. Works only with KDE support and on Windows for now. + - Added the special "all" parameter to $active to return the application active window + - Forced eval to use the calling variable scope: in this way local variables can be passed too + - Fixed a bug in the servers dialog "recent servers" popup: now it finds the correct entry also + when two servers with the same name but different port are present + - Added the exporting of aliases to external files (single aliases and the whole alias set). + - Fixed the popup tester in the popupeditor: now it works again (it was totally disappeared :) + - Misc hacks that I can't remember... + +25 Mar 2004: + [Pragma] + - Code cleanups all around + - Updated various docs for the upcoming release + - Removed the obsoleted _c2q stuff and --with-local-8bit option + - Changed the close/maximize/restore/minimize icons to black ones: they look better + - Added a heap mess windows workaround class + - Re-implemented the shared files editing (still missing some code) + +24 Mar 2004: + [Trisk] + - Various input editor fixes. + - CTCP parser improved. + - Updated default script. + - Options dialog fixes. + +21 Mar 2004: + [Trisk] + - Many, many more options dialog changes. + +20 Mar 2004: + [Pragma] + - Added several window.* functions + - Redirected /whois output to the active window + - Options dialog fixes + - Added scripting toolbar + - Cleaned up some documentation and forced gendoc.pl to ignore the new kvs docs that are not "hardwired" yet + - Added some graphics for the final 3.0.0 release + - Added a couple of keyboard shortcuts (all described in doc_keyboard.html) + +20 Mar 2004: + [Trisk] + - Some parsing of 005/RPL_ISUPPORT added. Uses PREFIX and and CHANTYPES. + +18 Mar 2004: + [Trisk] + - KviUserListView API change: set[beI]Entries -> setMaskEntries(). + - KviUserListView minimum width is 100px (due to continuing annoyance of + mode editor resizing the thing... not a good solution, but whatever). + - Lots of options dialog changes. + - Classic taskbar now limits number of rows (when horizontal). + - KviChannel API change: banMask(), etc. removed in favour of setMask(). + - Mask editor requests new list when opened after a mode change. + * Fixes problem with CR ircd where -b messages may not match bans in list due to stupid inconsistent hostmasking. + +12 Mar 2004: + [Trisk] + - Auto-reconnect attempts are now counted, delay configurable. + * FIXME: Make it possible to stop the reconnect timer before it triggers. + - Several huge if() conditions replaced with switch() statements. + - Various minor issues fixed. + +07 Mar 2004: + [Trisk] + - Improved script editor cursor location tracking and configuration dialog. + - Input widget clean-ups, global input history fixed. + +03 Mar 2004: + [Pragma] + - Some work on the options dialog: moved some options to more appropriate places, + rearranged some options widget orders, fixed descriptions etc.. + - Fix for OnChannelNotice not passing the target argument + - More misc hacks that I can't remember :) + +02 Mar 2004: + [Pragma] + - Added OnQueryWindowRequest to catch and block the query window creation events. + - Added OnQueryTargetAdded + - Corrected a lot of bugs reported on bugtrack.kvirc.omnikron.net + - Corrected the $mask.nick() problem + - Removed the $ic warning when there was no current IRC context + - Moved the server database to unicode + - Misc hacks that I can't remember :D + +28 Feb 2004: + [Pragma] + - Fixed the "keep channels open on kick" crash + - Probably fixed a sort of a race condition based crash between + the socket and the console + - More fiddling with KVS events + +24 Feb 2004: + [Pragma] + - Yet more work on the KVS engine: events this time + - Temporairly removed the "force last server" hack since it was breaking the + servers dialog: one couldn't select a different server to connect to. + This is commented out until we find a more strict activation condition. + - Activated the $sw function, this time for real :) + +20 Feb 2004: + [Trisk] + Added $date function for formatted time strings. + +18 Feb 2004: + [Trisk] + - Added "all" target for $me and $server functions. + - Fixed possible $mask() problem, not sure why Pragma removed '*' from + *user. Behaviour should be consistent with docs now. + - Cleaned up channel prefix and nick mode prefix (considers invalid chars + in nick to be a mode prefix). + * Closes ID 200402112009267112 + * Somebody needs to update the bugtracker... + +14-17 Feb 2004: + [Pragma] + - Rewritten the script editor widget to use QTextEdit. Dropped + the whole internal editor since it was not unicode and simply + too huge for the feature it provided. + - Modularized and cleaned up the localisation of the editor module + - More work on KVS engine, module interface nearly estabilished + - Added support for changing the order of option items in the + options dialog tree display. Most common options should go at the top. + - Random fixes around :) + +14 Feb 2004: + [Trisk] + - Changed 005 numeric parser output a bit, fixes issues with skipping to + last word of messages. + * /me hugs Aeri ;) + - Removed check for KviProperty_FocusOwner. + +09 Feb 2004: + [Juanjo] + - Fixed a miscompilation --without-info-tips + - Added the lag to the irc context indicator tooltip. + - Make the irc context indicator a little bigger (but the correct way + would be to make it resize itself depending on the inside text size). + +06 Feb 2004: + [Pragma] + - More work on the KVS engine + - Added the IrcContextToolbar to the toolbars menu, now it can be hidden + should the TaskBar be there too ? + - Moved the TaskBar to be a toolbar like the other ones (and + thus inherit the toolbars menu on right click etc...) + +05 Feb 2004: + [istari] + - reformating ChangeLog + * please use current schema + * break lines after 80 chars + - intserting ChangeLog into website + +23 Jan 2004: + [Pragma] + - More work on the KVS engine : popups almost ready + - Fixed a regusers bug that didn't allow to register channels with a '@' + character in it + - More windows port: kvilib, kvirc and several modules are already working + - Fixed an expression parser bug related to string/number comparisons + - Added $sw() function for switch handling in aliases + +20 Jan 2004: + [Trisk] + - Dock icon menu bug fixed, new entries added. + * Problem with switching to console on frame window restore still present, + Pragma: Please fix + - Input right-click menu shows shortcut keys. + +19 Jan 2004: + [Trisk] + - Adding multiple servers wtih the same hostname (different port) works. + +17 Jan 2004: + [Trisk] + - Fixed some more encoding issues. + - mkprocinstances.sh doesn't use zsh/bash-specific variable arrays now. + +15 Jan 2004: + [Trisk] + * PragmaOff's been idle for a long time. =\ + - Made logfiles lowercase (helps sorting, if any issues contact me). + - Made channel and query windows's default logfile contain network name + instead of console #... makes more sense. + - Massive server parser changes to ensure text is converted to current + encoding (fixes issues displaying ISO 8859-1 extended ascii (127+) text). + - Changed all %d d %d h %d m %d s to %dd %dh %dm %ds. + +09 Jan 2004: + [Trisk] + - Lots of notify list message changes. + +08 Jan 2004: + [Trisk] + - More widget width problems fixed (presumably). + - WHO reply is more informative now. + - Shortened some taskbar button captions. + - KviConsole::createQuery() tries to prevent duplicate single-target queries. + +06 Jan 2003: + [Pragma] + - More work on the new KVS engine + - Added a -nosplash commandline argument to avoid showing the splash screen + - Reverted the kvi_activitymeter.png icon: the bars should eventually grow + from left to right (in the image) instead of top to bottom. + - Re-added $window to kvi_kvs_corefunctions_sz.cpp : it's the new parser + version and it will replace the old parser's version in the near future. + If you want to test the new parser capabilities then run the commands + by preceding them with a dash: + /- echo "This is the new parser's version of echo" + /- echo $window this is the new parser's version of echo \$window + ... + - Added four ways of painting the user list view grid. It is user selectable + now. + Please tell me which is the best one (to choose the default) + +04 Jan 2004: + [Trisk] + - Removed duplicate of $window from KviKvsCoreFunctions + (kvi_kvs_corefunctions_sz.cpp), original is in the uparser... + - Fixed all the "Jan 2003" dates in the ChangeLog. =) + - Fixed KviStringSelector etc. width problem. + +03 Jan 2004: + [Trisk] + - New images, help browser uses Bluecurve ones (temporarily). + - Taskbar now displays same number of buttons per row. + - Various spacing changes to selectors again. + - Fixes to identity dialog. + * For some reason, the 4th nickname stays blank... not sure why. + - Various QFrame::Panel -> QFrame::StyledPanel. + - Dead channels unset limit and key too. + - Window list shows same name for dead channels and queries. + +02 Jan 2004: + [Pragma] + - Solaris Forte 7 port (still needs hacking to compile and run flawlessly) + - Fix for Solaris dns resolver + - More work on the new KVS engine + - stdarg.h wrapper to accomodate ugly compilers + +01 Jan 2004: + [Trisk] + - Dotted line drawn next to nick/avatar in nicklist instead. + - Changed IP addy editor widget to properly accept '.' and ':'. + - Redid identity config dialog. + +New Years Eve, 2003: + [Trisk] + - Draw separator lines above and below avatar and nick. + - Join channels dialog cleanup. + - Dock widget minor header changes. + +30 Dec 2003: + [Trisk] + - Cleaned up some options dialog stuff. + - Added $version function. + + [Pragma] + - HTTP avatar option support + - More unicode porting all around + - Windows port (kvirc and kvilib projects nearly working) + +29 Dec 2003: + [Trisk] + - Fixed problem with toolbar options dialog command. + - Changed ident, proxy, SSL, and transport options pages to use QGroupBox to + organise options. Maybe add add*SelectorToGroupBox functions later. + +28 Dec 2003: + [Trisk] + - More new toolbar icons, currently using Bluecurve/Crystal mix. + - Recent channel, server, and nickname list removes duplicates even if case + differs. + +27 Dec 2003: + [Trisk] + - Possible fix for crash if m_pConnectionInfo->szNickName is not set when + server disconnects the client (before login). + - Sets AsyncServerCommand on disconnect only if nonexistant; /SERVER works + now (sorry about that, Pragma). + - New Connect/Connecting/Disconnected icons. + - Removed border from channel state and mode icons in user list view and + lined up icons with text when avatar is used. + + [Pragma] + - Added avatar caching + - Reworked the code that remembers the last irc server connected in each + console now it doesn't break the servers dialog. + After the commit I've discovered that it collided with the Trisk's solution: + merged the two solutions in something yet better. + - Obscure internals: reworked KviIrcMask interface a bit... + still needs QString porting + - Written a ChangeLog entry after months of "hidden changes" :D + +Christmas Eve (Western Hemisphere) 2003: + [Trisk] + - Modified window tooltips a bit... + - Unset channel mode for dead channels + - Fixed (hopefully) crash on closing dead channels if disconnected. + - Remove src/kvirc/kvs/moc_kvi_kvs_object.cpp from repository. + * Merry Christmas everyone! =) + +21 Dec 2003: + [Trisk] + - Output correct message when RPL_CHANNELMODEIS is used for user modes. + - URL highlighting matches only if followed by char greater than 46. + - Selected text includes control codes (this is a bit of a hack, gets them + from block attributes). Shift-select strips codes from the selection. + - Consoles remember last nick (correctly now). + - PART, TOPIC, and MODE messages will use current channel if no argument. + KICK will send proper command if no reason specified. + - Non-query notices and privmsgs go to active window if it is a common + channel, else to first common channel. + +16 Dec 2003: + [Trisk] + - GRAMMAR FIXES EVERYWHERE + * Breaks translations! + * Breaks stats program log parsers too (pisg) + - Cleaned up gendocs.pl link names. + - Rearranged menubar to conform to KDE style standard. + - Edit menus and buttons for "Book Title" style, changed some item names. + * PLEASE FELLOW THE KDE STYLE STANDARD, it looks better and is less confusing + - Made KviUIntSelector use QSpinBox instead of QLineEdit (again). + - Added uop/userop (+u) support. Currently uses +h icon, will change later. + - Removed many hardcoded font references. + - Made logfiles rotate at midnight to update date. + * Put timer in KviTimerManager for lack of a better place, somebody check + that this is correct, please... + - Changed tree window list to show server name for consoles of console caption + (too long to view). Set bold font for consoles. + - Fixed channel name showing up twice on part when no message is specified + - Made external messages (whois info, server notices, etc.) go to console by + default, added option ExternalMessagesToActiveWindow to override this. + - Also fixed opnotice (NOTICE @#chan) and made non-query private notices and + privmsg go to common channel. + - Replaced CPPFLAGS in all Makefile.am with AM_CPPFLAGS. + - Made channels missing request mask list when mask list editor is opened. + - Changed KviIrcMask::getHostDomainMaskPtr() to strip only first part of host; + user@x.y.z.tld.cc returns user@*.y.z.tld.cc, not user@*.tld.cc - much + more specific bans, same as getIpDomainMaskLen(). + * This code was already there, but commented out - why? + - Made console windows remember last server and nickname. + +21 Oct 2003: + [Crissi] + - 'Always highlight messages with my nick on them' added: Check + irc::output::highlight tab on options. + - 'Hightlight only at normal msg' added: Check irc::output::highlight + tab on options. + - 'Highlight at highlight msg too' added: Check irc::output::highlight + tab on options. + - 'Highlight at query msg too' added: Check irc::output::highlight + tab on options. + - 'Highlight only at costum alert level reached' added: Check + irc::output::highlight tab on options. + - Translation updated + - 'Old Tools' menu moved into 'Tools' menu. + - convert all source files to unix line end because bug in gettext for + extracting strings from window lineend + + +12 Oct 2003: + [Crissi] + - auto connect of servers after succuessful KVirc startup. Look into advanced + server info, connection tab. + For each server you can specify if should autoconnect. + +11 Oct 2003: + [Crissi] + - Channels can now stored for each server and then auto join them if + successfully connected to the server. Look into advanced server info, + 'After login join channels' tab. Simply check the channels (from history) + you want to join. Also you can add a new channel (current bug: after + adding close/reopen the dialog for showing new channel in list). + - Minimize console after successful login. Look into Preferences - Options - + Connection. + +12 Aug 2003: + [Crissi] + - 'Minimize all windows' and 'Restore all windows' added. Check Menu - + Window and window action toolbar. + +01 Aug 2003: + [Juanjo] + - I'm back, ahhh nothing like vacations to do some free software ;) + - The channel completion will also complete on the list of recent channels. + - New server completion, if the first four letters of something written on + the input are "irc." it will try to complete on the list of recent servers. + +18 Apr 2003: + [Crissi] + - exec module added. Check kvirccvs/modules/exec/README for more info. + +26 Mar 2003: + [Crissi] + - GUI option 'Use taskbar activity meter' added. + - GUI option 'Disable ban list request on join' added. + - GUI option 'Disable ban exception list request on join' added. + - GUI option 'Disable invite list request on join' added. + - GUI option 'Use taskbar activity meter' added. + - Translation extract script fixed + - Translations and translation template updated. + - Some comments in kvi_options.h added. + +26 Mar 2003: + [Pragma] + - Option 'Use taskbar activity meter' added. + +28 Feb 2003: + [Crissi] + - The width of the taskbar entries is now custoumizable. + - GUI option 'Minimal width of taskbar buttons' added. + +25 Feb 2003: + [Istari] + - Moved to the new CVS machine + +25 Feb 2003: + [Crissi] + - GUI options for symbols on taskbar and disabling global who added. + - Try to show emoticons with start not with : correctly (not from me...)... + tell me if you got problems with this... + +25 Feb 2003: + [Pragma] + - Option for disabling icons in taskbar added. + +21 Feb 2003: + [Crissi] + - Fixed text on first setup page, Translation possibility for buttons in + wizard added. + +20 Feb 2003: + [Pragma] + - Auto-resume transfers when auto-accepted (also GUI option) added. + +19 Feb 2003: + [Crissi] + - Password field for server shows now only stars instead not plain password. + +18 Feb 2003: + [Crissi] + - Size of toolbar icon fixed. Right size s now selected if toolbar size if + changed. + +18 Feb 2003: + [Pragma] + - Support for broken filename RESUME requests (mIrc's file.ext) added. + +15 Feb 2003: + [Crissi] + - $mp3player.getmp3tag_album added => get the album + +12 Feb 2003: + [Crissi] + - The mp3player module now supports reading of mp3 tags. + - New commands are: + - $mp3player.getmp3tag_artist => get the artist + - $mp3player.getmp3tag_comment => get the comment + - $mp3player.getmp3tag_copright => get the copyright + - $mp3player.getmp3tag_crc =) get the crc + - $mp3player.getmp3tag_date => get the year + - $mp3player.getmp3tag_emphasis => get the emphasis + - $mp3player.getmp3tag_genre => get the genre + - $mp3player.getmp3tag_layer => get the MPEG layer + - $mp3player.getmp3tag_original => get the orginal flag + - $mp3player.getmp3tag_title => get the title + - $mp3player.getmp3tag_tracknumber => get the track number + - $mp3player.getmp3tag_version => get MPEG version + - A example script was added (kvirccvs/kvirc/doc/scriptexamples/mp3info.kvs) + +4 November 2002: + [Juanjo] + - Added widgets to the identity an server dialogs to set a default user mode + after a conexion to the server. + +24 Oct 2002: + [Juanjo] + - Reworked a little the Tools menu. + - Spanish translation updates (only 1000 translations to go, hehe). + +19 Oct 2002: + [Juanjo] + - Added the alias 'lag' to the default script (it just returns the lag + using $lag.lag()). + - Added the event 'OnLagCheck' that get triggered every time there is a + new lag data. This should help scripters to write their own lagmeters + without having to poll KVIrc. + - Added an option to display the lag on the IRC context indicator, making + all those changes actually useful for the final user :) + +18 Oct 2002: + [Juanjo] + - Added a new (and very simple) Lagmeter (see the new 'lag' module + commands and functions), the 'Lag Options' dialog in the options/irc + window and the 'OnLagAlarmTimeUp' and 'OnLagAlarmTimeDown' events. I'll + add an applet displaying the lag to the lag module as soon as I figure + how to do it :) + - Added the OnPong event. + - Fixed bug 200210130200522026 + + +10 Oct 2002: + [Juanjo] + - I'm back, prepare your debuggers + - Added a 'Ignore' menu to the userlist users menu. + - New feature: User highlights (argh, I hate that word). Just update your + default.kvs and right-click on a user to see how it works. Very + usefull on very crowded channels with lots of parallel conversations + running and you trying to keep track of one (hello #debian). Also + added the pertinent commands on the module tmphighlight. + - The 'clear' command now also clears the message view on channels. + +06-24 Jun 2002: + [Pragma] + - Pre-release fixes all around + - SSL stuff.. + - About dialog + - Fixes for KviIrcView + - Windows porting + - uh... I forgot all the things I did :D + +29 May - 06 Jun 2002: + [Pragma] + - More SSL support + - A lot of bugfixes (see bugtrack.kvirc.omnikron.net) + - Arrays support in the whole user parser (uh...this was huge , but + necessary) a huge set of functions has been moved to the new array + interface WARNING: the dictionaries have a new syntax now! %dict{key} + %something[id] is now reserved to arrays (with numeric id).[br] + - FOR command added + - Updated all the example scripts to support the new syntax + +23-28 May 2002: + [Pragma] + - Preliminary SSL support (try /server -s) + - Fix for the messed default.kvs (dialog problem) + - A lot of mem-leaks catched with valgdind + - Various fixes + +22 May 2002: + [Pragma] + - KDE Terminal window fix + - Some new icons + +21 May 2002: + [Juanjo] + - Using Pragma's support for text icons, added the option to substitute + some icons (currently ':)', ':D', ':-)', ':-D' and ':-O') in the irc view + (Options -> Look & Feel -> Irc View). Still not finished. + +18-21 May 2002: + [Pragma] + - More fixes for windoze + - Some reguser hacks + - Command, channel, function and directory completion in the input widget + - Various thingies all around + - CTCP Page support (partial for now , need some more options) + +7-17 May 2002: + [Pragma] + - Tons of fixes for windoze + - More modules ported to windoze (snd, dockwidget) + - Text icons initial implementation (try CTRL+I and have fun :) + - On*Created and OnWindowActivated are now called in the correct order + - Various thingies all around + +6 May 2002: + [Juanjo] + - spaste module completed (spaste.setdelay,spaste.list,spaste.stop,etc) + - Workaround for the tooltips-following-desktops problem (close tooltips + on input widget keyevent). + +1-6 May 2002: + [Pragma] + - Fixes for Solaris compilation: thanks to Kenneth Larea for the hints :) + - Random fixes for make dist + - Support for anti-flood on CTCP DCC * + - Failed DCC Handshakes are now optionally reported to the sender with a + CTCP ERRMSG. The options in the dialog are still missing + - Fixes for the "bad console repainting" problem + - es.po charset fixed + - Added sr.po (thnx Prethorian :) + - Added auto-windows-tiling feature to the MDI manager + - Other cleanups here and there... + +27 Apr 2002: + [Juanjo] + - New module 'spaste' to send text slowly to a conversation window. + - New option for the input widget right button men in conversation + windows: 'Paste (slowly)'. + +25 Apr 2002: + [Juanjo] + - Now the log viewer can be also a MDI window + - Log viewer listview icons + +21 Apr 2002: + [Juanjo] + - snd module + +1-12 Apr 2002: + [Pragma] + - Minor fixes around + - Fix for the KDE style toolbars + - Fixes for the liquid KDE theme (transparency). + not everything works... some label stuff must be fixed in the theme + engine... + - Query user list view invisible by default (also saved in the window state) + - Same for the channel double view + - Removed /tbutton and /wbutton and added generic /button and /buttonctl + instead updated the example scripts accordingly + - Merged the libtool update patch and added more fixes for this + - Fixes for --with-local-8bit compilation + - Added kvi_list.h and the compatibility KviPtrList defines to work both + with qt2 and qt3 + +31 Mar 2002: + [Pragma] + - Mini-Fixes for the snd module (threading arguments) for gcc 3.0.0 + - Mini-fix for libaudiofile check in configure + - More work on window position saving + - More work on the offer list window stuff. + - General fixes for gcc 3.0.0 (can anybody test it ?) + +30 Mar 2002: + [Pragma] + - Added the beginning of the offer list window + - Preliminary window properties saving... now handling defaults too + - Minor utility-functions in the window popup menus + - Preliminary rearrangements of code for KviConsole.... the header is + becoming a mess need to order the code syntactically and then maybe extract + some code to be put in external classes. KviIrcConnection could be an idea. + - Beginning of code for the toolbar button management... need a module ? + +29 Mar 2002: + [Pragma] + - Will I ever start to use this ChangeLog ? :D + +7 Mar 2002: + [Juanjo] + - kvisounds script, the sound on OnMeNamed event is usefull, really ;) + +28 Feb 2002: + [Juanjo] + - Pragma branded str module optimizations, docs for all the implemented + functions. + +26 Feb 2002: + [Juanjo] + - More str functions, removed strFindFirst for str.findfirst and updated + the scripts using it (UPDATE YOUR SCRIPTS!!!) + +21 Feb 2002: + [Juanjo] + - More str functions (still no docs) + +19 Feb 2002: + [Juanjo] + - Some new functions in the str module + +13 Feb 2002: + [Juanjo] + - /IGNORE && /UNIGNORE support + BTW the other guys are also making things, they just don't update the + Changelog :P + +10 Feb 2002: + [Juanjo] + - $isOp() $isMeVoice() $isVoice() $isMeHalfOp() and $isHalfOp() added + +9 Feb 2002: + [Juanjo] + - New log viewer module (logview.open) + - Fix for the editor not saving his options + +4 Feb 2002: + [Juanjo] + - Fixes so pragma could add --with-qt-embedded to compile againt Qt Embedded + (wow!) + - Get rid of the 'commit' and 'discard' buttons on the user editor; now + all changes are synced with the local db. + +25 Jan 2002: + [Juanjo] + - New notify list editor + +21 Jan 2002: + [Juanjo] + - New identity button on the toolbar, posibility to change nick from the + identity dialog if we're connected and es.po work + +20 Jan 2002: + [Juanjo] + - Added the config widget for the create query on server notice option. + - Events and events doc: OnDCCChatConnected, OnDCCChatMessage, + OnDCCSendTransferComplete, OnDCCGetTransferComplete, OnCTCPFlood, + OnServerNotice, OnChannelNotice... + +19 Jan 2002: + [Juanjo] + - Added a 'close after join' checkbox to the join channels dialog & fixes. + +18 Jan 2002: + [Juanjo] + - Added OnAction event + - Fixes + +17 Jan 2002: + [balboy] + - updated po file + - anti idle script changed... but pragma's syntax he gave me is not working + yet :p + + [Juanjo, which is alive] + - Added the 'recent servers' Qlist to the servers dialog + - Added the 'Show after connecting to server' checkbox to the channelsjoin + widget + - Servers widget bug fixed + - Default nick link actions & men + - Config widget for the tree-taskbar minimum? width option + +07 Jan 2002: + [balboy] + - minor changes to the default script + +05 Jan 2002: + [balboy] + - anti idle script added + - dcc bug alias fixed + +22 Nov 2001: + [Juanjo] + - Added a bunch of events (On[me]ban/deban, On[me]op/deop, + On[me]voice/devoice, OnChannelMessage, OnQueryMessage, OnLimitSet/Unset, + OnKeySet/Unset, OnInvite, On[me]BanException, On[me]BanExceptionRemove, + etc). + +18 Nov 2001: + [Juanjo] + - Added a 'Connect to servers' dialog (serversjoin.open) -> update: + serversconnec.open + - Added scripted buttons for the channels and servers dialogs. + - Added $anyConsoleConnected() function. + - Fixes + +12 Nov 2001: + [YaP] + - Added DCC user defined port range + +10 Nov 2001: + [Juanjo] + - Now it has all the functionality ;) + + [YaP] + - IPv6 porting from Win XP to Win 2000 (Preprocessor definition: WIN2K) + +8 Nov 2001: + [Juanjo] + - Added a 'Join Channels' widget. It still don't have all the + funcionality. + +4 Nov 2001: + [Juanjo] + - Improved away system + - Option to always highlight own nick on messages + - Made the splash screen a managed window + - Added an 'apply' button to the general options dialog + +24 Sep 2001: + [Kristoff] + - Made Dcc Voice completely configurable, options dialog also added + - Volume slider for dcc voice added + - Fixed a bug in alt+arrows switching (sigsegv when window had no context + assigned) + +23 Sep 2001: + [Kristoff] + - Switching between windows using ctrl/alt + arrows + +13 Sep 2001: + [Balboy] + - some more changes to the defscript + +12 Sep 2001: + [Kristoff] + - Text selected in Help Browser window is now automagically copied into the + clipboard and can be pasted (Balboy's request). + - Pressing Enter in Help Browser's lineedit starts search. When the search + starts the cursor changes into waitCursor (cosmetical improvement :)) + - 22 Mar - 12 Sep... man... + - biff module added - not functional at all - adding some code not to mess + with makefiles anymore + +12 Sep 2001: + [Balboy] + - updated the changelog :p + - added some functions to the defscript + +30 Mar 2001: + [Balboy] + - quit function added + +22 Mar 2001: + [Kristoff] + - combobox object added + +17 Mar 2001: + [Pragma]: + - A lot of unreported changes again + - Added anti-aliased font support + +17 Feb 2001: + [Pragma] + - A lot of changes: removed the libkvigui, it was rather useless, and it is + better to have all the GUI code into the core executable...(for many + reasons). + - Added the first "shy" icq module. + +15 Feb 2001: + [Kristoff] + - Added urllabel object + Note: I'm proud to be the first person, that uses this file in the + year 2001 :-) + +05 Dec 2000: + [Number1] + - Cleaned up the about dialog, added some new entries and fixed the + background bug. + Note: Could people start using this log again please? ;) + +12 Sep 2000: + [Kristoff] + - started this ChangeLog (to avoid confusion: newset entries go above + this one ;)) + - added widget object diff --git a/FAQ b/FAQ new file mode 100644 index 0000000..c9355db --- /dev/null +++ b/FAQ @@ -0,0 +1,712 @@ +1. PROJECT RELATED QUESTIONS + +1.1 What is KVIrc ? What the "KVIrc" name stands for ? +1.2 Why KVIrc is not totally integrated in KDE ? + + +2. COMPILATION + +2.1 I can't compile kvirc from cvs, what's wrong? +2.2 Internal Compiler Errors ? +2.3 On Mandrake 10.0 (or other) KVIrc fails to start + saying that it can't find libkvisetup.so. +2.4 I got 'amarokInterface.cpp:29:31: amarokInterface.moc: No such file or directory'. Whats going wrong? +2.5 Configure complains about a missing libdl.so but I seem to have it + + +3. INSTALLATION + +3.1 There is a problem during package installation/creation + file /usr/share/services/irc.protocol from install + kvirc-version.package conflicts with file from package xxx + + +4. IRC + +4.1 How do i join a channel ? +4.2 How do i autojoin channels ? +4.3 How do I enable automatic NickServ identification ? +4.4 I can't see my national characters, what's wrong ? +4.5 I can't connect to an IPV6 server, what's wrong ? +4.6 /me doesn't support the '$' character, what's wrong ? +4.7 /me doesn't support the '"' (double quote) character, what's wrong ? +4.8 /me can't contain the ';' character, what's wrong ? +4.9 I try to do a /whois on nick blah\ but i get the reply for blah (without the slash) +4.10 What is AVATAR protocol ? Is there any documentation about it ? +4.11 The log files seem to be saved randomly, when I open a log + I can see only a part of the text that actually should be there +4.12 The DCC transfers seem to be interrupted after the first few bytes: + KVIrc says that the remote end has closed the connection. + + +5. ADVANCED IRC FEATURES + +5.1 How do I connect to an SSL-enabled IRC server ? +5.2 How do I use DCC over SSL ? +5.3 Do I need a SSL certificate ? +5.4 How do I create a SSL certificate ? +5.5 I can't get KVIrc to use my SSL certificate in a DCC, what's wrong ? +5.6 KVIrc crashes when a certificate is used under Windows, what's wrong ? +5.7 How do I enable mircryption (encryption in general) for a specific channel ? +5.8 How do I execute a process and send its output to a channel ? +5.9 How do I keep channels and queries open after a disconnect ? +5.10 I have an unreliable ISP connection but KVIrc takes a really long + time to detect a disconnection and reconnect. +5.11 I'm in a LAN and KVIrc uses a wrong IP address in dcc transfers + +6. APPAREANCE + +6.1 On Windows KVIrc seems to slow-down sometimes, what's wrong ? +6.2 I don't see the channel popup menus anymore, what's wrong ? +6.3 Does KVIrc support Themes? +6.4 I hate all that colors, what can I do about it ? +6.5 On Windows, how do I use firefox/opera/any_other_browser to open links instead of explorer ? + + +7. CRASHES + +7.1 KVIrc crashes when the multiline text input is opened (obsolete) +7.2 What the heck is a gdb stack trace and how do I get it ? +7.3 KVIrc hangs up, but doesn't crash. How do i report debug informations ? +7.4 KVIrc exits by itself or simply "disappears" without any apparent reason. +7.5 KVIrc dies randomly and "Alarm Clock" is printed in the console +7.6 KVIrc dies when using alias(identify){ identify password; } + +-------------------------------------------------------------------------------- +1. PROJECT RELATED QUESTIONS +-------------------------------------------------------------------------------- + + +1.1 What is KVIrc ? + + KVIrc is a cross-platform Internet Relay Chat client. + The name stands for K Visual Internet Relay Chat client. + The K prefix comes from the old times, when KVIrc was bound to the + KDE project and depended on the KDE libraries to run. Actually this + is not true anymore since KVIrc depends only on the Qt library from + TrollTech and runs also on platforms where KDE can't run. + + +1.2 Why KVIrc is not totally integrated in KDE ? + + First of all read the answer for question 1.1. + We could provide a more complete integration by the means of conditional + compilation but since it would require additional efforts to synchronize + the KVIrc sources with the KDE library changes we choose not to do it. + If you wish to contribute some code that better integrates KVIrc with + KDE you're welcome to do so: we will happily accept your patches as long + as you promise to mantain them :) + + +-------------------------------------------------------------------------------- +2. COMPILATION +-------------------------------------------------------------------------------- + +2.1 I can't compile kvirc from svn, what's wrong? + + Have you checked the requirements ? + *Carefully* read the INSTALL file that comes with the distribution: + it contains the informations to solve 95% of the problems that + you may encounter. You may also try digging in our mailing list + archive: many problems have been solved there. + If you still can't get it to work please either subscribe to the KVIrc + mailing list (see www.kvirc.net) and report the problem there or join #kvirc + on IRCNet and ask the channel members for a hint. + + +2.2 Internal Compiler Errors ? + + Compile errors like this: + In file [somefile]:[someline] internal error: + Segmentation fault + Please submit a full bug report, + with preprocessed source if appropriate. + See for instructions. + + This error can have multiple reasons. + 1) A compiler bug: my GCC 3.2 20020903 (default on RH 8.0) spits + out 5-6 of them daily. Usually it is solved by simply restarting the "make" command. + If it doesn't go away or if it gets really frequent and annoying you might try to upgrade the compiler. + 2) A memory corruption: this is really frequent: one of your memory banks is spitting random bytes + sometimes. Usually the problems come out under heavy system load (kernel, KDE or kvirc compilation for example). + You can check for memory corruption by trying different RAM modules (or removing them one at a time to discover + the broken bank). You can also try a program called memtest and a kernel + patch that can force the broken memory banks to be ignored by the kernel (allocated permanently to a dummy kernel task). + These tools can be found by digging the web with your favorite search engine. + 3) A deeper hardware problem: if upgrading the compiler and changing memory banks doesn't help then + it *might* be a deeper hardware problem: bus errors , faulty IDE (or SCSI) controller or even buggy CPU... + Well.... + + +2.3 On Mandrake 10.0 (or other) KVIrc fails to start + saying that it can't find libkvisetup.so. + + Mandrake 10.0 default libtool package is broken. Either upgrade + the libtool package or try to run ./autogen.sh --bundled-libtool + and then recompile (./configure, make, make install). + This *might* apply to other systems too. + + +2.4 I got 'amarokInterface.cpp:29:31: amarokInterface.moc: No such file or directory'. Whats going wrong? + + You have to install qt3 devel tools which include uic and moc. If installed, be sure that uic and moc are in PATH. + + +2.5 Configure complains about a missing libdl.so but I seem to have it + + The most common causes are two: + + 1) You have libdl.so.X (where X is usually a number or a set of numbers) but not libdl.so + + You need to do a symbolic link from libdl.so.X to libdl.so. You do it by entering the directory + where libdl.so.X is and issuing a ln -s command, for example: + + # cd /lib + # ls libdl* + # ln -s libdl.so.2 libdl.so + + Then try to ./configure again + + 2) You don't have a c++ compiler installed + + The libdl test is the first ./configure test made with a c++ compiler. + The confirmation for this error can be found in the config.log file + where you can find lines similar to the following: + + configure:21637: g++ -o conftest conftest.cc -rdynamic -ldl >&5 + ./configure: line 1: g++: command not found + configure:21643: $? = 127 + configure: failed program was: + ... + + Your distribution probably ships the c++ frontend to gcc in a package + separated from gcc itself. The package might be also named g++. + Look it up on your installation CD and install it, then ./configure again. + +------------------------------------------------------------------------------- +3. INSTALLATION +------------------------------------------------------------------------------- + +3.1 There is a problem during package installation/creation + file /usr/share/services/irc.protocol from install + kvirc-version.package conflicts with file from package xxx + + This is a known issue with all types of packages that handle + file conflicts. KVIrc installs the irc protocol handler for KDE + and the same is done by ksirc and kopete (and maybe others). + There is no particular reason for KVIrc to fix it in the core + distribution (and there is also no simple way to do it). + Either the package maker must exclude the irc.protocol + file from installation or mark it as "optional" in some way or the + users must use some sort of "force" flag during the installation. + + +------------------------------------------------------------------------------- +4. IRC +------------------------------------------------------------------------------- + +4.1 How do i join a channel ? + + Type "/join #channelname" + + +4.2 How do i autojoin channels? + + There are many ways to do it. + For example: + Select "Scripting/Events" from the KVIrc menu. + Lookup the "OnIrc" entry in the left pane of the window that pops up. + Right-click on that entry and select "Add handler". + A "default" handler will be created. In the right pane write: + join #kvirc + join #kde-users + join #somechannel + .... + Now click OK and you're done: you have just created a handler for an event. + Reconnect to a server and KVIrc will autojoin the channels that you have selected. + Another option (nicer, if you use several servers) is to go to the servers options + page and click the button labeled 'Advanced' on the entry for the single server. + There is a server-specific "On connect execute..." event. + + +4.3 How do I enable automatic NickServ identification ? + + KVIrc supports two kind of NickServ identification rules: per-network and global. + The per-network rules can be accessed from the server options page. + You need to select a network in the list view (not a server!) and then click + "Advanced...". In the dialog that appears there is a NickServ tab + on that you can add your identification rules. Adding a rule + should be straightforward (if you stop the mouse over an item you will likely get a small + tool tip with the explaination). Each rule is composed of: + - the nickname that is being identified: the rule will be applied only + when your current nickname corresponds to this one. + - a nick server user mask that must be matched by the NickServ user + in order for him to be recognized as the real NickServ asking for + identification. You will probably use something like NickServ!service@* + - a message regular expression that must be matched by the message + that the NickServ sends when requesting the identification. + You will probably use something like "If this is your nick, + identify yourself with /ns IDENTIFY password" + - an identification command that will be executed when all the rules + above match. You will probably use something like "ns IDENTIFY yourpassword" + The global rules can be created in the IRC::NickServ page of the options dialog + (accessible from the Settings/Configure KVIrc... menu). The main difference + is that each rule has a server mask that must be matched by the current + server name for the rule to be applied. + KVIrc first looks in the per-network rules and if none matches it looks + in the global rules. + + +4.4 I can't see my national characters, what's wrong ? + + There are several ways to fix your national characters display. + General encoding: + Open the options dialog and go to the "Encoding" page. + You can set explicitly the encoding to be used for the whole application. + If you choose "Use Language Encoding" KVIrc will try to guess the + encoding from your system settings. If this doesn't work then the reasons + may be: + - Your system settings are wrong + You need to fix them + - Your server applies some specific encoding to the data + See "Server encoding" + - You're chatting with people that have different system settings + See "Channel & Query encoding" + Server encoding + Besides the general encoding you can set one encoding per server. + This is done in the server options dialog (Click Advanced...). + The encoding will be applied to all the text that comes from + and goes to the server. If you choose "Use system encoding" + then the server will inherit the "General encoding" value above. + If this doesn't work then you have either set it incorrectly or + you are chatting with people that use different encodings. + In this case see "Channel & Query encoding" + The server encoding is used also to decode nicknames and + channel names on servers that support it. + Channel & Query encoding + Besides the general and server encoding you can set also per-window + encoding in channels and queries. This encoding will be applied + ONLY to the text sent to or received from that channel or query. + This feature is useful when chatting over a non unicode aware + IRC server (nearly all at the time of writing) with people + that have settings different than your general defaults or + the server default. + + Keep in mind that IRC has a MAJOR problem with character encoding + and in fact the formal definition of the protocol requires it + to be only 7bit safe. This means that on some servers you may + see your national characters eaten by the IRC network and there + is almost nothing you can do about that... + + UTF-8 is the best encoding we can get on IRC. Try to convince + other people to use it :) + + +4.5 I can't connect to an IPV6 server, what's wrong ? + + First of all make sure that your IPV6 stack is setup correctly. + Can you ping6 other IPV6 other machines ? + + # ping6 www.6bone.net + + Is the IPV6 support enabled in your kvirc executable ? + To find it out , try + + /echo $features + + in the KVIrc commandline. You should get a comma separated list of + features compiled in the executable. If the list contains "IPv6" then + the support is compiled in, otherwise you must check your compilation + stage to guess what went wrong. + To connect to an IPV6 server you can use /server -i + If you can ping other IPV6 machines, the IPv6 support is compiled in your + executable and you still can't connect to an *existing* IPv6 server then + you may have found a bug :) Report it. + + +4.6 /me doesn't support the '$' character, what's wrong ? + + This is NOT a bug : this is a feature : kvirc supports (and substitutes!) variables in all the commands. + You can escape your $ sign by using the backslash character: /me has gained \$100 will work correctly + + +4.7 /me doesn't support the '"' (double quote) character, what's wrong ? + + This is NOT a bug : this is a feature : a string enclosed in double quotes will have its whitespace preserved + while the other strings will have the whitespace simplified. This is valid for ANY command. + You can escape your " sign by using the backslash character: /me feels a bit \"foo\" will work correctly + + +4.8 /me can't contain the ';' character, what's wrong ? + + This is NOT a bug : this is a feature : kvirc supports multiple commands on a single line and uses ';' as a command + separator. You can escape your ';' sign by using the backslash character: /me is hungry \;) will work correctly. + + +4.9 I try to do a /whois on nick blah\ but i get the reply for blah (without the slash) + + In KVIrc /whois is a scripting command and the nickname is a command parameter. + In scripting commands the backslash is a special character with several "escape" + meanings. To include a literal backslash inside a parameter you MUST double it, + thus the correct command to issue is /whois blah\\ + + +4.10 What is AVATAR protocol? Is there any documentation about it ? + + AVATAR is a simple CTCP based protocol that allows associating images (avatars) + to IRC users. The protocol definition is simple: + + - CTCP AVATAR QUERY: + : PRIVMSG :<0x01>AVATAR<0x01> + Queries the avatar of the . + - CTCP AVATAR REPLY: + : NOTICE :<0x01>AVATAR <0x01> + Asserts that the user's avatar is located at + that usually will be something like http://server.domain.top/avatarimage.jpg. + + KVIrc supports also DCC based avatars that are simply "offered" to the + remote users. In this case the does not contain the http:// + prefix but is a simple file name. The remote users request the avatars + by issuing a DCC GET command. This is an useful but secondary extension + and can be ignored by simple implementations. If you need more informations + about this method please write to pragma at kvirc dot net. + + +4.11 The log files seem to be saved randomly, when I open a log + I can see only a part of the text that actually should be there + + KVIrc does not explicitly flush the log files while writing them. The OS + (or the underlying C library) does the flush operation when necessary. + This means that blocks of the log file will be added to the file on disk + only once in a while. If you really need to see the logs in real time + then you can explicitly flush the log files by scripting. + Just add a script like this to your OnKVIrcStartup event: + + timer(flushlogfiles,30000) + { + foreach(%x,$window.list(all,any)) + { + if($log.file(%x)) + { + echo -w=%x "Flushing log file..."; + log.flush -w=%x; + } + } + } + + The script above will flush all the log files every 30 seconds. You may + remove the echo statement if you're annoyed by the output :) + + +4.12 The DCC transfers seem to be interrupted after the first few bytes: + KVIrc says that the remote end has closed the connection. + + Make sure that you don't have activated the "Send ACK for byte 0" + option in "Options->DCC->File Transfer->Advanced". + This option should be used ONLY IF you have problems without. + + + + +------------------------------------------------------------------------------- +5. ADVANCED IRC FEATURES +------------------------------------------------------------------------------- + + +5.1 How do I connect to an SSL-enabled IRC server ? + + Use /server -s + It should work also over IPV6. + If it doesn't work then your executable might have no SSL support compiled in. + To find it out type + + /echo $features + + in the KVIrc commandline. If "SSL" is not in the list then you must go back + to the compilation phase and see what went wrong. + + +5.1 How do I use DCC over SSL ? + + /dcc.chat -s should work + + +5.3 Do I need a SSL certificate ? + + No you shouldn't need it, but you can use it if you want. + + +5.4 How do I create a SSL certificate ? + + A test self-signed certificate can be created by using the CA.pl perl script included + in the OpenSSL distribution. It will be something like CA.pl -newcert + + +5.5 I can't get KVIrc to use my SSL certificate in a DCC, what's wrong ? + + The SSL protocol doesn't require the "client" to send the certificate: it is + sent only if the "server side" requests it (it is not the KVIrc case). + The server side may have a certificate and you can set it in the SSL options page. + If your Private Key is stored in the certificate file pass the same filename + to both Certificate and PrivateKey option. + Remember to set the password if needed. + + +5.6 KVIrc crashes when a certificate is used under Windows, what's wrong ? + + This is probably a bug of the SSL dll shipped with the windows version of KVIrc. + You might try with a different version of this dll. + + +5.7 Can I encrypt my messages? +(or: How do I enable mircryption (encryption in general) for a specific channel?) + + KVIrc supports encryption for channels, queries and dcc chats by the means + of text transformation engines. You can access the list of the engines + by clicking the button with the yellow lock in the upper right corner + of the window. In the pane that will appear select "use text transformation" + and then choose one of the available engines. + The Mircryption engine is an implementation of the mircryption protocol and + supports both ECB and CBC mode. There is also a wide variety of Rijndael based encryption + engies as well as some funky other text transform tricks. + Most of the engines will need a pair of keys to encrypt and decrypt text + and in most cases you will use the same key for both encrypting and + decrypting. In the particular case of Mircryption you can enable + CBC mode by prefixing your key(s) with the "cbc:" string. + Once you have entered the keys just click on OK and start "talking" in the + window. Any encrypted text will have a "lock" overlay in his icon. + If you want to avoid encrypting a particular text line (maybe because + you want to allow everyone on a channel to read it) you can start + the line with a CTRL+P character. + + +5.8 How do I execute a process and send its output to a channel ? + + The straight way to do this is + + /exec("your command here"){ say $1; } + + Since it is not too much "user friendly", you can alias it in + the following way: + + alias(runandsay) + { + exec($0-){ say $1; } + } + + Then you would simply run + + /runandsay cat /proc/cpuinfo + + in the channel window you want the output sent to. + + Keep in mind that this is a "brute" approach and I'm sure that after + reading some documentation (start from /help exec) you will be able to + find more elaborate and nice ways to send a process output to a channel/query. + + +5.9 How do I keep channels and queries open after a disconnect ? + + KVIrc can keep your channels and queries open when the connection terminates + unexpectedly. This will probably make sense only if you plan to + reconnect to the same server or at least the same network (either manually + or automatically). + + An "unexpected disconnect" is a connection termination not explicitly caused by + the KVIrc user. This means that the connection is interrupted, either + by the networking stack or by the remote server, without the user + having sent a QUIT message (by the means of the /quit command or by pressing + the "disconnect" button in the toolbar). + + All this because the normal behaviour of a /QUIT command is, yes, to quit + your current connection without leaving traces of it. + + To keep the channels and queries open you just need to select the + relative options in the "Connection" page of the options dialog + (on unexpected disconnect: "Keep channels open" an/or "Keep queries open"). + + Then you might also select "Automatically reconnect", "Rejoin channels + after reconnect" and "Reopen queries after reconnect" to bring your + "dead windows" to life again :) + + Finally, you can simulate an "unexpected disconnection" by using the -u switch + of the /quit command. This might be useful when you want to explicitly + quit your connection while leaving the channels and queries open... maybe + because you need to renew the connection to your ISP before reconnecting ;) + + +5.10 I have an unreliable ISP connection but KVIrc takes a really long + time to detect a disconnection and reconnect. + + KVIrc doesn't detect itself that the connection has dropped until your + kernel explicitly times out. KVIrc measures lag, instead, that will + probably grow up a lot when the connection has dropped. + You can write a handler for the OnLagCheck event that will detect + the lag growing over a certain threshold and reconnect. + This involves opening the event editor, selecting OnLagCheck + and choosing "Add handler" from the right mouse menu. + In the handler write: + + if($1 > 30000){ quit -f -u; } + + 30000 is just a sample threshold (it means 30000 milliseconds!), replace + it with a value of your choice. + quit -f -u will close the current connection immediately (-f = force) + and will simulate an "unexpected disconnection" condition (-u = unexpected). + If you then enable automatic reconnection (see answer for question 5.9) + in the options dialog, KVIrc will automatically reconnect and rejoin channels. + + +5.11 I'm in a LAN and KVIrc uses a wrong IP address in dcc transfers + + KVIrc supports a couple of methods for guessing the right IP address for + DCC transfers: you only have to guide it a bit :) + + The first thing to try is "Guess address from IRC when unroutable" (Options->DCC). + This will perform a lookup on your own IRC mask once you connect + to an IRC server and use the address as source in DCC transfers. + (You need to reconnect to the server to make this option work!) + This trick will fail when your hostmask is cloaked (mode +x on recent IRC servers): + KVIrc will tell you that it couldn't look up the hostname and give up. + + In this case you might try to set a fixed address to be sent as source + in the DCC transfers: you just need to fill in the *IP address* of your + router in the option field. This field doesn't support hostname lookups + and it won't update automatically when you router's IP changes. + However, if you router's IP has a dns entry, you can ask KVIrc to fill + this field with a simple script to be performed at every connection. + + event(OnIRCConnectionEstabilished,updatedccsource) + { + ahost(yourrouterhostname.dyndns.org) + { + option boolDCCSendFakeAddressByDefault 1 + if($1)option stringDefaultDCCFakeAddress $2 + else echo "Couldn't look up the router's hostname" + } + } + + When transferring files to other KVIrc clients you may also try the + DCC RSEND protocol instead of DCC SEND. It will ask the remote end + to listen instead. + +------------------------------------------------------------------------------- +6. APPAREANCE +------------------------------------------------------------------------------- + +6.1 On Windows KVIrc seems to slow-down sometimes, what's wrong ? + + This is usually caused by the heavy graphics: try removing some graphic effects like the + pseudo-transparency. I have experimented that it happens almost always on 32-bit displays. + Switching to 16 or 24 bits may also help. + + +6.2 I don't see the channel popup menus anymore, what's wrong ? + + If something went wrong with KVIrc settings (a crash when the script settings + were saved ?) or if you have messed with the scripting options and you + want to get back the original behaviour (default script) you can choose + "Scripting/Restore default script" from the KVIrc menu. + (WARNING: It will erase any script modification you have made!) + Update: starting with the cvs of 2005.01.17, KVIrc should be able to + detect such situations and automatically suggest the re-installation of the + default script. + +6.3 Does KVIrc support Themes? + + Yes, KVIrc now has introduced a Theme Manager. You can find it in the Option dialog. + From there you can change the way KVIrc looks: fonts, colors, windows behaviour, + icons, taskbars, and so on. + Once you have changed the theme, you can save it, archive it (tar.bz2 or zip) and share with your friends, + or send it to the KVIrc staff to see it published on the web site. + + +6.4 I hate all that colors, what can I do about it ? + + By fiddling with the options you can make KVIrc appear even monochromatic. + Go to Options/Theme and select the minimalist theme: it will set white text + on black background and will disable the displaying of a lot of icons. + This is a good starting point for you console addicted hackerz :D + + +6.5 On Windows, how do I use firefox/opera/any_other_browser to open links instead of explorer ? + + Go to the "URL Handlers" options page and set + + run "C:\\path\\to\\your\\browser.exe" "$0" + + as url handler for the protocol you're interested in (maybe in all). + + Suepahfly suggests to use + + rundll32 url.dll,FileProtocolHandler "$0" + + as url handler to open the url in the default windows browser. + + +------------------------------------------------------------------------------- +7. CRASH +------------------------------------------------------------------------------- + +7.1 KVIrc crashes when the multiline text input is opened (obsolete) + + If you have installed a new version of KVIrc over a previous installation + br if you have changed the Qt libraries that KVIrc is linked to then + it might be caused by a broken multiline text editor config. + Try removing $HOME/.kvircssexeditorrc and starting KVIrc again. + Update: this problem has been completely removed during late 2004 developments + by completely rewriting the multiline input. + + +7.2 What the heck is a gdb stack trace and how do I get it ? + + A gdb stack trace is a "photography" of the state of the KVIrc internals + taken when a certain event has occured. The most common event + is a program crash (Segmentation Fault). + The stack trace helps (or even allows) the developers to locate the + crash cause in the program sources. + To obtain a gdb stack trace you must: + + - Compile KVIrc with the --enable-debug ./configure option. + Without this switch the stack trace is USELESS. + - Have a working installation of gdb (the gnu debugger) + This is usually available on your distribution cd + and you may already have it installed. + - Run KVirc: + # gdb kvirc + When the gdb prompt appears write: + # (gdb) run -f + Make KVIrc crash: gdb will tell something about + a signal received by the program. Write then: + # (gdb) bt + The text you see is the stack trace you wanted :) + Copy+Paste+Send it to pragma at kvirc dot net or the mailing list. + + +7.3 KVIrc hangs up, but doesn't crash. How do i report debug informations ? + + Use gdb to get a stack trace as in answer to question 7.2. + Since your KVIrc doesn't crash you will have to interrupt the execution + manually while it is hung up. You can do it by pressing CTRL+C in gdb. + + +7.4 KVIrc exits by itself or simply "disappears" without any apparent reason. + + Yes. It probably crashed but you haven't noticed that. + We NEED a gdb stack trace or a working procedure to reproduce the + behaviour in order to hunt it. + + +7.5 KVIrc dies randomly and "Alarm Clock" is printed in the console + + Try recompiling kvirc by adding the --with-ignore-sigalarm switch to + ./configure. (Note: the reason of the incoming SIGALARM signals + on certain systems is acually unknown. Please send hints to pragma at kvirc dot net). + + +7.6 KVIrc dies when using alias(identify){ identify password; }; + + This is infinite recursion: a programming error. + Take a look at http://en.wikipedia.org/wiki/Infinite_loop , learn + that once for all and fix your script. + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..fc7caf6 --- /dev/null +++ b/INSTALL @@ -0,0 +1,753 @@ +Szymon Stefanek Mon Mar 04 2008 +############################################################################### +General notes for the installation of the 3.4.0 release of KVIrc +############################################################################### + + This document contains the procedures to compile and install + the version 3.4.0 of KVIrc. + +############################################################################### +# 0. Table of contents +############################################################################### + + 1. Introduction + 2. Guru-level installation + 3. Hacker-level installation + 4. Human (detailed) installation instructions + 5. How to compile KVIrc with Qt-embedded + 6. Compiling KVIrc on Mac OS X + 7. A note about Windows 95/98/ME + +############################################################################### +# 1. Introduction +############################################################################### + + This document contains the procedures to compile and install + the version 3.4.0 of KVIrc. + + If you have found this document in a binary distribution then + KVIrc has been probably already installed by your favorite package + manager and maybe something is not working as expected. In this case + this document and the accompanying FAQ can help you in guessing + what's wrong. + + If you have found this document in a source distribution or you + have downloaded it by using the svn then well... + this is a standard INSTALL file :) + +############################################################################### +# 2. Guru installation: +############################################################################### + + # ./configure + # make install + +############################################################################### +# 3. Hacker installation: +############################################################################### + + If you're compiling the svn version of KVirc run ./autogen.sh + (You NEED automake >= 1.5 for autogen.sh to run). + + # export QTDIR="your qtlibrary path" + + eventually: + + # export KDEDIR="your kde library path" + + We're using GNU tools here. + + # ./configure --help + # ./configure [your options] + # make + # make install + +############################################################################### +# 4. Human (detailed) installation: +############################################################################### + + If you're not a guru, or have problems with the installation + read these instructions carefully. + + ### + ### Step 0 (ONLY FOR THE SVN VERSION) + ### + + If (*** AND ONLY IF ***) you're compiling the svn version of kvirc + you need to generate the configure script. If you're compiling + a downloaded tar.gz (or tar.bz2) package or you don't know what + svn is then jump directly to step 1! + + You need a recent automake and autoconf installed on your system. + It is also reccomended to have a recent (matching) libtool installed + (libtool is not strictly necessary since KVIrc has a bundled one, + but a libtool matching your automake/autoconf versions will probably + run better on your system). + + Anyway, run: + + # ./autogen.sh + + If it runs without any error (it will tell you "Done") then + you may skip to step 1, otherwise read on. + + First of all check your auomake version. + You need automake >= 1.5: older versions will NOT WORK. + You can check the automake version with the command + + # automake --version + + If your automake version is lower than 1.5 upgrade it. + You can find it at http://www.gnu.org/software/automake/ (source) + or on your favorite distribution site as auto-installing package. + + Automake installation tip: automake installs in /usr/local/ + by default. If you have an older automake installation that + resides in /usr/ it's better to remove it or (better) overwrite it + with the new installation. + If you choose to overwrite the old installation with the new + one then just use "./configure --prefix=/usr" as the automake's + configure command. + If you choose to remove the old version then the files to be + removed are /usr/bin/automake /usr/bin/aclocal /usr/share/automake + /usr/share/aclocal. If you feel unsure about removing it, rename it. + + If the script fails to run then you might try + + # ./autogen.sh --bundled-libtool + + to force the usage of the bundled libtool version. + If you later have unexplicable problems with the compilation tools + you might also try the bundled libtool. + + ### + ### Step 1 : Matching the requirements + ### + + - You NEED a fully working C++ compiler. + + Most linux distributions have it pre-installed and if you have + already compiled other programs before then you're probably ok, + so actually skip this check and go ahead. If anything fails + in the following steps then this is the very first thing to verify. + A broken compiler installation usually manifests itself + in failed ./configure tests (dlopen capabilities). + Try + + # gcc -v + # g++ -v + + on the commandline. If it says something about "command not found" + then you miss some gcc related package. Install it from the distro cd. + + + - You NEED the Qt library. + + You can download the latest version from ftp://ftp.trolltech.com. + The main Qt www site is http://www.trolltech.com. + Note for the GPL maniacs: Qt IS GPL. + The minimum required version is 3.1.2 (older versions *might* work) + Download and install it by following the rules + explained in the excellent documentation that comes with the library. + + + - You need a decent pthread implementation. + + This is usually included in your distribution and is probably + already installed. The library is called libpthread.so. + You can look for it with the "find" command: + + # find / -name libpthread.so + + On my system the output is: + + # /usr/lib/libpthread.so + + If you don't have it (the configure script will tell you) + you can download it from your favorite GNU mirror. + + On Solaris you can use the native libthread.so library instead + but you will have to pass the specific option to configure (see below). + FreeBSD has a native implementation of pthreads in libc_r and + the gcc compiler has a special -pthread flag to link to it. + If you're on FreeBSD, use the --with-freebsd-pthread configure + option and make sure that you don't have other pthread wrappers + installed (that might collide with the native header files). + + The configure script will also fail if the library is + hidden somewhere on your system (eg. not in /lib , /usr/lib or + /usr/local/lib): you should probably move it. + + + - You need the dynamic linker interface library libdl.so. + + This is usually installed on your system , so don't care until + configure complatins about it. Some system have the interface + builtin in libc. The configure script can detect it. + + + - (Optional) If you want to compile the KDE integration support + you obviousy need KDE. The kdelibs package should suffice. + + + - (Optional) If you want the translations to non-english languages to work + then you need the GNU gettext package. In particular KVIrc uses + the msgfmt program. + + This is usually included in your distribution and is probably + already installed. You can check it by running + + # msgfmt --version + + KVIrc will not complain if the command above is missing: it will + just skip the creation of the translation files. + If the command above fails then you need to install the gettext package + if you want any language other than english. + + + - (Optional) If you want DCC VOICE to support the gsm codec, + you need a recent copy of libgsm. This is not strictly required + at compile time since KVIrc will look for the library at run-time, + and only if the DCC VOICE with the gsm codec is requested. + You can check for libgsm using the 'find' command. + + # find / -name libgsm* + + The output should be sometihg like + + # /usr/lib/libgsm.so + + This library is included in most distributions. Some distros ship + only the static version of the library "libgsm.a": if the previous + find returned only something similar to "/usr/lib/libgsm.a" , you might + create manually the shared archive by running: + + # cd /usr/lib + # ld --whole-archive -shared -o libgsm.so.1 libgsm.a + # ln -s libgsm.so.1 libgsm.so + # ldconfig + + If you don't have it installed at all, you might have a look in your + distribution CD, or download it from the web. + + + - (Optional) If you want the /snd plugin to play various audio formats + you either need a running artsd, a running esd or a reasonably recent + audiofile library. Without these KVIrc will be only able to play *.au + files. + + + - (Optional) If you want to generate the on-line documentation + you also need perl: any version will do (I guess). + + + - (Optional) If you want the secure socket layer support to be compiled + you need the OpenSSL library and headers. (libssl.so and openssl/ssl.h) + + + - (Optional) If you want perl scripting support to be compiled + you need a working perl installation. Your libperl.so MUST be compiled + with the MULTIPLICITY option. (You can check it with perl -V). + + ### + ### Step 2 : Running the configure script (mandatory) + ### + + First of all you must run the configure script that will guess some + info about your system and prepare the compilation. + You may try to "simply run" it and check if it works...the configure + script tries to be smart , but in some cases it will fail. + + So before running the script make sure that the enviroinement + variable $QTDIR points to the right location. This will help + in finding the correct version of Qt. + You might eventually set it with the command: + + # export QTDIR="your qt dir" + + On my system qt is installed in /usr/local/kde/qt + so I actually execute + + # export QTDIR="/usr/local/kde/qt" + + If you want to compile the KDE support you might want to do the same + with KDEDIR + + # export KDEDIR="your kde dir" + + In my case KDE is installed in /usr/local/kde so I use + + # export KDEDIR="/usr/local/kde" + + The configure script has a lot of options that can be listed by using + + # ./configure --help + + Here's a list with explainations (the most common are at the top): + + --enable-debug + This is for debugging and reporting problems. + It sets the compiler options in order to leave the debugging + informations into the kvirc executable and the libraries. + In this way you will be able to produce a gdb backtrace + in case of a crash. + YOU NEED THIS OPTION IF YOU WANT TO REPORT A PROGRAM CRASH. + + --enable-pipes + Asks the compiler to use pipes instead of files for the + compilation stage. The pipes will help in reducing disk usage and + will probably shorten the compilation a bit. Use this option if + your platform supports it. + + --with-qt-library-dir= + Look for the qt library in . + You might want to use this if the configure script has trouble + in finding the qt library. + You should have no problems if you use export QTDIR="" + before launching the configure script, but it might help you + if you have a non standard Qt installation. + + --with-qt-include-dir= + Look for the qt headers in . + You might want to use this if the configure script has trouble + in finding the qt headers. It may especially help if your headers + are in a place different than $QTDIR/include (and thus you have + a non standard installation) + + --with-qt-moc= + Use the qt meta-object compiler found in + The path is usually $QTDIR/bin/moc , and the + configure script will find it if you have a standard + Qt installation and $QTDIR points to the right directory. + Thus should have no problems if you use export QTDIR="" + before launching the configure script, but it might help you + if you have a non standard Qt installation. + This will also help if you have the moc compiler renamed + in some way: like "moc2" or sth... + in this case is a FULL path: directory/program_name! + + --disable-qt-check + This disables Qt checking at compilation time. + If this is the only way to compile and run + the kvirc executable , then there is something + wrong with the configure script. + + --without-kde-support + The configure script will look for the KDE headers and libraries + and if found it will enable the KDE support. If you don't want + the KDE support even if KDE is detected, just use this switch. + + --with-kde-library-dir= + Look for the KDE libraries in + If $KDEDIR points to the right place, you shouldn't need this. + + --with-kde-include-dir= + Look for the KDE headers in + If $KDEDIR points to the right place, you shouldn't need this. + + --with-kde-services-dir= + Install the kde service protocol files in + If $KDEDIR points to the right place, you shouldn't need this. + This is also non-critical for kvirc: if the configure script + can't find this directory, you will only looose the support for + irc:// urls in konqueror + + --without-kde-check + Similar to --without-qt-check but for KDE. + + --enable-optimisation= + Enables the compiler optimisation flag -o. + Possible values are 0 , 1, 2 and 3 (but if you compiler supports + more optimisation levels , you might use other numbers here). + Increases compilation time but may produce a slightly faster + executable. + + --with-other-libs= + Explicitly link to the specified libraries. + Example: --with-other-libs="-lmylib -lstrangesystemsupport" + + --with-other-ldirs= + Explicitly add the specified library search paths + Example: --with-other-ldirs="-L/home/pippo/lib/ -L/my/library/" + + --with-other-idirs + Explicitly add the specified include search path + Example: --with-other-idirs="-I/home/pippo/include/ -I/tmp/inc/" + + --enable-objprelink + This is an experimental support for object prelinking that improves + significantly the executable startup time. In order to use it you + need to have the "objprelink" program in the PATH. The objprelink + program is included in the distribution in the admin directory. + In order to use it, you will need to: + + # cd admin + # make objprelink + # cp objprelink /somewhere_on_your_path + + All this AFTER running ./configure and BEFORE running make. + + --with-no-pthread-check + Do not check if the pthread stuff works. + If configure fails in the pthread library check , you might want to + try this...(but then you will have really to "pray" that + the check has been broken by some "unusual" conditions and the + compilation will succeed). + + --x-includes=DIR + Specifies explicitly the path to the X header files. + You might want to use this if the configure script + has trouble in finding it. + + --x-libraries=DIR + Specifies explicitly the path to the X libraries. + You might want to use this if the configure script + has trouble in finding it. + + --with-qt-name= + Use instead of "qt" as the Qt library name. + This is useful on systems where Qt has been installed with + a name different than the default "qt". + It happens often that to allow multiple copies of qt to work + the newest have the version name appended to it. + For example, on FreeBSD I have found "qt" being Qt1.* and + "qt2" being Qt 2.*. Since you need Qt 2.* for kvirc to work, + you will need to use --with-qt-name=qt2. + If you use this option, you will probably also need to remap + the moc compiler path/name with --with-qt-moc. + + --disable-qt-mt + Disable checking for the multithreaded version of Qt. + By default , KVIrc will try to link to the multithreaded version + if found on the system. + NOTE: if you enable the KDE support , KVIrc MUST be linked to the + qt library that KDE is linked to. + + --with-ix86-asm + KVIrc contains some ix86 assembly routines that *could* + performs some things faster (this is not always true, depends + on the compiler). You might want to try it if your kvirc seems to + be really slow... + + --without-ipv6-support + The IPV6 support is compiled by default on the platforms that + support it: this option disables it. + Even if you have a plain IPV4-only connection, you might want to + keep the IPV6 support: you will be able to lookup IPV6 hostnames. + + --without-system-memmove + This will disable the use of the system memmove() memcpy() and + memset() functions and enable the bundled implementations. Use + it if you have undefined references to these functions while + compiling. + + --with-ignore-sigalarm + This is a hack mainly for Solaris. + Use this option if kvirc exits with no apparent reason and + the system prints a message related to an "Alarm" :) + + This is a mail that suggests an explaination for the SIGALARM fault. + If you experience the problem please drop me a mail at pragma at kvirc dot net + and we'll try to look for a solution. + + From: "Andre Stechert" (astechert at email dot com) + Date: 26/7/2005 09:36 + + Hi, +         I noticed in your readme that you were having problems with sigalarm + in your solaris port and you weren't sure why.  I quickly scanned your + source code and noticed that you use usleep and threads.  That's the problem, + if you haven't already figured it out. On Solaris, usleep is implemented with + SIGALARM. So is threading. So if you the active thread changes while + a usleep is in progress, bang, the process is dead. + + --without-crypt-support + Disables the cryptographic engines and the whole + cryptography/text-transformation support. Produces a slightly + smaller executable. Anyway, if you don't know what the + ctryptography/text-transformation + support is ,I suggest you to avoid using this option. + + --enable-new-kvs + Developers only! + This enables the compilation of the new KVS parser, currently + under heavy development. This will produce a bigger and possibly + unstable executable: do not use if you don't know what you're doing. + + --enable-new-kvs-only + Developers only! + This hardwires the new KVS parser to be used as the main scripting + engine in KVIrc. Be aware that the new KVS engine is NOT YET 100% COMPLETE + so some scripts will simply fail. + + --without-transparency + This option disables pseudo-transparency support. + The pseudo transparency support makes the KVirc windows + look like semi-transparent (this is NOT real transparency: this is + just a nice-looking hack). + If KDE support is enabled, KVirc will have an option that + makes all windows use a faded KDE desktop background image + as background. Without KDE support you will be able to choose + a fake background image and use it as background. (You can still + choose your desktop wallpaper: this will (more-or-less) work in + all the window managers). + It is cool-looking but usually eats some memory when enabled. + It also eats some executable size. + So this option allows to disable the pseudo-transparency. + + --with-solaris-lthread + If you're on Solaris and don't have the pthread library (A wrapper + I guess) you might try this option: it attempts to use the native + Solaris threading support. + + --with-freebsd-pthread + If you're on FreeBSD, you NEED this option. This enables the usage + of the native FreeBSD pthread implementation found in libc_r. + This requires you to use the native gcc compiler: it has a special + -pthread flag that enables the linkage to libc_r instead + of plain libc. + + --with-libresolv + Link to libresolv. I guess that this is required for Solaris + + --with-libsocket + Link to libsocket. I guess that this is required for Solaris + + --with-libnsl + Link to libnsl. I guess that this is required for Solaris + + --with-libcompat + Link to libcompat. This might be required for some systems... + but I have no idea which ones. If you find it useful: mail me. + + --enable-fno-rtti + Disables compiler runtime type information generation. + This is probably needed only with qt-embedded. + DON'T use it if you don't exactly know what it does. + Actually this may even make KVIrc crash in some situations. + For example the KDE sources use __dynamic_cast... + + --disable-x-support + Disables completely the X Windows support. + This is useful in environments where X is not needed to compile KVIrc + such as Qt-Mac on MacOSX, QtEmbedded or Windows. + This switch implies also --without-x-bell + + --without-x-bell + Disables the usage of the XBell function (needed if you want to + compile KVIrc with qt-embedded (no X at all)) + This is implied by --disable-x-support + + --with-qt-embedded + You need this to compile KVIrc with qt-embedded + + --without-ipc + Disables support for inter-process communication. + You will be not able to send remote commands to running + kvirc sessions: this basically means that every time you run + the kvirc executable , a new session will be started. + If you don't use this switch, a new session will be started + only if no session is running on the same display or + "new session" has been forced by a commandline switch. + If a session is already running, the commandline will be + passed to that session via IPC (X-event-based communication). + This option saves some KB of the KVIrc executable, + so if you're really short in memory , you might use it, + otherwise, IPC is a nice feature. + + --without-dyn-labels + You should not need this option. + It disables compilation of code that relies on a particular + compiler feature (jumping to a dynamic label with a goto). + Not all compilers support this , but configure shoud detect + it automatically. Anyway , if you get compilation errors on + kvi_ircview.cpp, you may try this option... + This may also help if the configure script seems to hang + when checking for the "compiler dynamic label support". + + --without-splash-screen + Do not compile the splash screen code. + This will remove you that nice "banner" image that pops up + while kvirc is starting up. It will maybe help in making an + executable smaller by a couple of KB and save a couple + of extra milliseconds during the startup. Use it if you're + tring to build a performance critical executable and you're + short both in memory and CPU time :) + + --without-gsm + Explicitly disable the usage of the GSM library. This will + disable the DCC VOICE gsm codec but might help when the + compilation stops complaining of something related to GSM :) + + --without-dcc-sound + Explicitly disable the DCC VOICE sound support. This might help + if you have problems in compilation of src/modules/dcc/voice.cpp. + It will disable the sound support + (and thus make DCC VOICE not usable). + + --disable-ssl + Disables the secure socket layer support. The SSL support is + automatically enabled if OpenSSL is detected at ./configure time. + This option forces it to be left out. + + --with-memory-profile + Debug stuff...enables memory allocation profiling (don't use it :) + + --with-memory-checks + Enables malloc() memory checks. This will print a nice message + if your system goes out of memory... + It can't save you from buying new RAM, + but at least you will know that your system went out of memory + and it is not a proper kvirc fault. Actually you probably have + no reason in using it. + + --with-big-channels + Minor hash table optimisations: higher memory usage but + faster user lookups. Use it if you often stay in channels with + a lot of users. (this is not critical anyway) + + --enable-profiling + Asks the compiler/linker to include profiling informations in the + executable. This is useful only if you want to profile KVIrc by + using the gprof program. Note that this will generate a bigger + and slower executable. + + --disable-perl + Forcibly disable perl support. + + So finally you have to run + + # ./configure + + For example , my common options are: + + # ./configure --enable-pipes --enable-debug + + On FreeBSD I have found useful this command line: + + # ./configure --with-qt-name=qt2 --with-qt-moc=//moc2 \ + --with-freebsd-pthread + + Once the configure script ran succesfully you can go to the next step. + + ### + ### Step 3 : Compiling (mandatory) + ### + + This step is easy: + Cross your fingers and run + + # make kvirc + + If your make is not a GNU make (this happens on FreeBSD for example) + you should use "gmake" instead. + The compilation process will take from 6-7 minutes to several hours + depending on the machine capabilities and load. + If you have a slow cpu but have a couple of computers in a lan you + might consider using distcc to distribute the compilation. + + Once the compilation has been succesfull, run + + # make install + + Same as above: use "gmake install" if your make is not GNU make. + + This will install the executable in /usr/local/bin + (if you don't have specified a different --prefix option in + the configure script) , the libraries in /usr/local/lib + and the shared data in /usr/local/share/kvirc. + If you had a previous kvirc installation , the default prefix + will be referring to the directory where the old kvirc + executable was found. + + Make sure that /usr/local/lib is in your /etc/ld.so.conf , + if it isn't there , put it there and run + + # ldconfig + + If you have decided to use the KDE support the installation + might have placed all these files in your $KDEDIR tree + instead of /usr/local. In this case you should be OK since + KDE requires its library dir to be in /etc/ld.so.conf + + ### + ### Step 4: Having fun + ### + + # kvirc & + + That's all folks. + + +############################################################################### +# 5. Compiling KVIrc on qt-embedded +############################################################################### + + Do you want KVIrc 3 on your hand computer ? + On your Nokia 9999910 ? + On your LINUX CONSOLE? + + Well, for the third it's really easy, just follow carefully those steps: + + 1. Install qt-embedded libraries (including the development files). + This can be as easy as: apt-get install libqt-emb-dev on Debian. + + 2. cd to the KVIrc3 source directory + + 3. run configure with the following parameters: + + # ./configure --with-qt-name=qte --with-fno-rtti --without-x-calls + --without-ipc --without-splash-screen --without-transparency + --with-qt-embedded --without-x-bell + + then run make and make install as usual + + 4. Try to have a life for the next minutes while kvirc3 compiles + + 5. You need your kernel with framebuffer support (it's under 'Console') + so if your kernel don't have it reconfigure and recompile your kernel. + + 6. switch to a console + + 7. export QTDIR=[path] On Debian is '/usr' + + 8. Read http://doc.trolltech.com/3.0/envvars.html and configure your + environment vars until kvirc3-emb loads (it will give you an error + indicating what went wrong else). Pay especial attention to + QWS_MOUSE_PROTO, QWS_CARD_SLOT and QWS_DISPLAY + + 9. Enjoy :) + +############################################################################### +# 6. Compiling KVIrc on MacOSX +############################################################################### + + There is a detailed compilation and installation HOWTO for MacOSX systems + located in the doc dorectory. + +############################################################################### +# 7. A note about Windows 95/98/ME +############################################################################### + + On Windows versions prior to 2000 the KVIrc binary may refuse to start + because of an incompatible msvcrt.dll included in the distribution. + + If this happens to you then you may try the following tricks: + + - Find msvcrt.dll in your C:\Windows directory. It may also be + in C:\Windows\System or C:\Windows\System32 + Copy it to the KVIrc installation folder overwriting the existing + msvcrt.dll shipped with kvirc. + + - Find msvcrt.dll somewhere on the net. An url hint might be: + http://www.dll-files.com/dllindex/dll-files.shtml?msvcrt + Download the file and copy it to the KVIrc installation folder + overwriting the existing msvcrt.dll shipped with kvirc. + + If none of the two steps work for you please write a mail to + pragma at kvirc dot net reporting your exact Windows version and build + and including the exact messages that the system reports when trying + to run the KVIrc executable. + + Thanx to Dusan Hokuv for reporting this and suggesting the fixes. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..c451931 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,95 @@ +############################################################################### +# KVirc IRC client Makefile - 16.12.98 Szymon Stefanek +############################################################################### + +EXTRA_DIST = autogen.sh README FAQ + +SUBDIRS = admin data doc po scripts src + +AUTOMAKE_OPTIONS = foreign + +############################################################################### +# Delete moc files all around +############################################################################### + +delmoc: + rm -f $(topdir)/src/*/*/*.moc + rm -f $(topdir)/src/*/*/moc_*.cpp + +############################################################################### +# Main make command +############################################################################### + +kvirc-intro: + @echo "################################################################################" + @echo "### Ok..." + @echo "### The compilation process will take a while..." + @echo "### Have a cold beer in the meantime..." + @echo "################################################################################" + +kvirc-outro: + @echo "################################################################################" + @echo "### Finished..." + @echo "### Now type 'make install'" + @echo "################################################################################" + +kvirc: kvirc-intro all kvirc-outro + +install: install-recursive docs banner + +install-devel: install-recursive banner + +messages: + cd $(topdir)/po/kvirc && make messages + cd $(topdir)/po/modules/about && make messages + cd $(topdir)/po/modules/dcc && make messages + cd $(topdir)/po/modules/editor && make messages + cd $(topdir)/po/modules/logview && make messages + cd $(topdir)/po/modules/mediaplayer && make messages + cd $(topdir)/po/modules/notifier && make messages + cd $(topdir)/po/modules/options && make messages + cd $(topdir)/po/modules/perl && make messages + cd $(topdir)/po/modules/perlcore && make messages + cd $(topdir)/po/modules/sharedfileswindow && make messages + cd $(topdir)/po/modules/theme && make messages + +############################################################################### +# Generate documentation +############################################################################### + +docs: + $(mkinstalldirs) $(DESTDIR)$(helpdir) + perl admin/gendoc.pl -v $(VERSION) $(DESTDIR)$(helpdir) \ + data/doctemplates/*.template \ + `find ./ -name "*.cpp" -print` \ + `find ./ -name "*.h" -print` + +############################################################################### +# Rule for developer documentation +############################################################################### + +devdocs: + cd admin && doxygen + +############################################################################### +# Finished :) +############################################################################### + +banner: + @echo "################################################################################" + @echo "### INSTALLATION COMPLETE" + @echo "################################################################################" + @echo "###" + @echo "### KVIrc is now installed and ready to run." + @echo "###" + @echo "### Please send bug reports and suggestions" + @echo "### to pragma at kvirc dot net" + @echo "### You can use the mail report form on" + @echo "###" + @echo "### http://www.kvirc.net" + @echo "###" + @echo "### We hope that you will enjoy KVIrc." + @echo "###" + @echo "### Szymon Stefanek and the KVIrc Development Team" + @echo "###" + @echo "################################################################################" diff --git a/README b/README new file mode 100644 index 0000000..24f8607 --- /dev/null +++ b/README @@ -0,0 +1,387 @@ +23.03.2008: Release 3.4.0 "Virgo" +############################################################################### + +Here we go with another release :) + +This one took a very long time but, well, finally it's here. + +Notable new features of this release include: + + - improved themeing support + - better desktop integration + - nicer support for many different IRC servers + - a totally revised option layout + - basic support for script "addons" + - improved help subsystem + - new nice statusbar applets + - improved scripting engine + - improved windows and macosx support + - .... + +There is also a lot of small new details that you will +find out by yourself while playing around and finally +we obviously also have a huge number of bugfixes. + +This will be the last stable release of the 3.* series and also the last +one using Qt3. From now on we'll be working on major version 4 and +switching completly to Qt4. This release actually contains a preliminary +Qt4 support and if you feel brave you might test it by passing +the "hidden" --enable-qt swtich to configure. + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + + + + + + +############################################################################### +General notes for the 3.4.0 release of the KVIrc IRC client +############################################################################### + +- Installation + +The detailed installation instructions for the unix source distribution +are in the INSTALL file. + +The Windows version needs no installation: you just need to run the +installer executable and follow the proposed steps. + +Other documentation can be found in the doc subdirectory. + +- Reporting problems + +You are encouraged to "mess" with all the KVIrc options and features, +and to report bugs and misbehaviours to the author. +Anyway , before reporting a bug , ask yourself if it can be caused +by some other part of your system: KVIrc uses many external libraries +and (as all programs) relies on a correct system behaviour. +Make sure that the libraries you use are the correct ones (!!!). + +When you encounter a problem please read the FAQ that is found +in the distribution and also take a look at http://www.kvirc.net +for a more recent version. If nothing helps to solve your problem +then you might consider issuing a bug report. + +The best way to report a bug is to use the bugtrack system at +http://svn.kvirc.de/kvirc/. Another way is to subscribe +to the kvirc mailing list (see http://www.kvirc.net for instructions) +and report the problem there. In both cases your bug report +should be written in english and should contain most informations +possible about the problem. If you have encountered a crash +on an unix platform you should include a gdb backtrace (stack dump). +The more gdb info you send, the biggest is the possibility for us +to find the problem and maybe a solution. There is a FAQ entry +that explains how to produce a suitable gdb backtrace. +If you can't obtain a gdb backtrace (maybe because you're on +a platform where gdb is not available) or if the problem +is not related to a program crash then you should include +a detailed procedure that leads to the manifestation of your problem. +You should always include a short description of the platform you +are running on: the operating system, the cpu (if not an x86), +the version of the Qt library and the KDE environment (if relevant). +You should also mention the relevant version of KVIrc and where +you got it from (cvs, kvirc site, other sites). + + + + + + + + + + + + + + + + + + +############################################################################### +# Historic entries : just for the curious +############################################################################### + + +22.02.2005: Release 3.2.0 "Realia" +############################################################################### + +Here we go again: 3.2.0 is out! + +The long road to stability has reached an important milestone. The previous +releases of the 3.* series were the first ones after a huge codebase rewrite. +3.2.0 is a result of several months of testing, debugging and improving. +You will surely find it more stable, fast and user friendly. + +The old scripting toolbars have been replaced by the new "action" based +approach. Besides the scripting flexibility of the actions we have also +gained "drag & drop" toolbar editing. Just select "Settings -> Toolbars +-> Customize" from the menu and drag your favorite actions (buttons!) to the +toolbars you wish. You can obviously create new toolbars on the fly and destroy +old ones. There is a set of builtin actions and new ones can be added +by the means of the action editor (another new feature) accessible from +the Scripting menu. Play with it :) + +The UNICODE support has been improved yet more. Now you can set global, +per-network, per-server and per-window encodings! There is also a new +set of "smart" encoding engines that first try to decode the text as UTF8 +and in case of failure fallback to your standard encoding. + +The translators did a really good (and hard) job: we actually have KVIrc +translated in 14 languages. I'm really happy about that. + +There is a new nice Instant-Messager-like notifier window that pops up when +a query message arrives and KVIrc is not the active application. Yes, +you can disable it, but I'm sure you will not. The notifier is also fully +scriptable and we're working on a simple skinning engine for it. + +We also have perl support: now you can use perl from KVS and +KVS from perl. The engine is still quite essential but with some hacking +you can obtain really good results from it. + +The small IRC-Context-Display has been removed from the toolbar and has been +replaced by a real status bar that is capable of displaying the same +informations in a much cleaner way. The IRC-Context-Display is still +available as an action so you can just drag it back in its place +and hide the status bar to return to the previous release configuration. +The statusbar also supports applets that can be added/dragged/removed by the +means of the mouse: just try the right click. + +The scripting engine has been improved and there are several new object +classes. An interesting new feature here is the $tr() function that allows +your scripts to be translated with the standard gettext mechanism. The +widely requested DCOP communication function has been implemented too. + +Out-of-the-box mircryption support has been added. The KVIrc's mircryption +engine supports the standard ECB mode and the new CBC mode + +The DCC transfers have been improved and seveal related bugs have been +fixed. It is also possible to limit the bandwidth for each transfer. + +There is a lot of minor new features that will make your IRC sessions funnier +and more exciting: some of them are described in the ChangeLog file and +other can be found by exploring the user interface. + +The small one-man-project has grown to the level of a small community. +People from around the world have joined our development efforts and are +constantly donating their time, eyes and bandwidth in order to make KVIrc +a really good IRC client. Besides of simply giving you a free (as in freedom!) +and nice program for chatting, they are giving you the great opportunity to see +what's behind the scenes: you have the source code for the whole application. +In practical terms this means more or less 300.000 lines of tested, debugged and +commented C++ code, several perl scripts, dozens of makefiles and all the means +that you need to produce a working KVIrc executable on all the supported platforms. +There is a lot of knowledge (some people call it "technology" because it sells better) +inside, ready to be acquired by an attentive reader. Don't forget that the freedom of +building your own executable from the sources gives you the opportunity +of verifying the source itself: for example you might be interested in verifying +that KVIrc will not run any malware code on your machine nor will collect +your private data and sell it to someone while you're happily chatting with a friend. +We call it freedom, please respect it :) + +Our community is contantly growing and this release was possible thanks to the +contribution of really many people. There are new mighty developers, new addicted +fans and we have seen a lot of new users. The list of the major contributors +can be found on the KVIrc site, in the about dialog and all around the sources. +If you want to meet them please join the #kvirc channel on your favorite +IRC network or subscribe to our mailing list. + +Ah, I was going to forget it: you might have noticed that there is +a version bump from 3.0.1 to 3.2.0. It's a typo that we arbitrairly +decided not to fix :) + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + + + + +31.05.2004: Release 3.0.1 "System Virtue" +############################################################################### + +Here we go again: 3.0.1 is out! + +3.0.1 is mainly a bugfix release. 3.0.0 was the first public release +after long time and even if we have tested it for a very long time +some bugs didn't miss to jump out. 3.0.1 contains the fixes for these +problems and adds some minor functionality. The detailed list of +changes is in the ChangeLog file. + +The bugs for this release should be reported by using the bugtrack system available +at http://bugtrack.kvirc.omnikron.net + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + + +17.04.2004: Release 3.0.0 "Awakening" +############################################################################### + +After a couple of years from the last stable release, here we go again :) + +Since the 2.* releases the KVIrc source code has been almost completely +rewritten. The major differences are summarized in the following list: + + - Multiserver: you can have multiple IRC connections in a single window + - IPV6 support, also for DCC transfers + - SSL support (also over IPV6) + - UNICODE support for the user interface + - Better scripting language + - A basic Theme Engine + +The first major goal of the rewrite was "user-friendliness": you should be +able to start an IRC session by selecting a server and clicking "Connect Now" +just after the installation. +The second major goal was "extreme-flexibility": you can customize the way KVIrc +looks and the scripting language allows you to implement complex responses +to IRC generated events. + +There is a lot of minor new features that will make your IRC sessions funnier +and more exciting: some of them are described in the ChangeLog file and +other can be found by exploring the user interface. + +This release was possible thanks to the contribution of many people. +The list includes but is not limited to: Triskelios, Jan Wagner (spion), +Juanjo Alvarez (Kane), Andrea Parrella (Yap), Luk De Ketelaere (Balboy), +Sara D'Alia (Sbrokka), Ted Podgurski (alch3m1st), Ciro Guariglia (d3vah), +Christoph Thielecke (Crissi), Eva Schaller (Penny), Niklas Luerßen (Tequila) +Olle Hallnas (Crocodile), Francesco Meloni (Princo), Alessandro Rossini (Aronnax), +Alex Grijalba Martinez (SuD), SuperbepS, Thilo Schulz (Thilo), Dworf, +Jorma Tuomainen (Wiza), Michele Pinassi (O-Zone), Paolo Sammicheli (XDatap1), +Ahinu, xevilstar, The Siena Linux Users Group, cyco & samweis, +The Firenze Linux Users Group, all the subscribers of the KVIrc public mailing +list and finally all the people from #kvirc on IRCNet and Freenode. + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + +############################################################################### +General notes for the 3.0.0 release of the KVIrc IRC client +############################################################################### + +- Installation + +The detailed installation instructions for the unix source distribution +are in the INSTALL file. + +The Windows version needs no installation: just unzip the archive in +a suitable directory (such as C:\Program Files\) and run kvirc.exe from there. + +Other documentation can be found in the doc subdirectory. + +- Reporting problems + +In this release , the changes are so huge that it was not possible +to test them in all the possible conditions. A 'normal' irc session +should give you no problems. +You are encouraged to "mess" with all the KVIrc options and features, +and to report bugs and misbehaviours to the author. +Anyway , before reporting a bug , ask yourself if it can be caused +by some other part of your system: KVIrc uses many external libraries +and (as all programs) relies on a correct system behaviour. +Make sure that the libraries you use are the correct ones (!!!). + +- Contents of a good bug report: + +- A gdb backtrace in case of a segfault. + The more gdb info you send , the biggest is the possibility + for me to find the problem and maybe a solution. +- A detailed description (read : procedure) to reproduce the bug + Obviously if possible... +- All informations on your system that you think that may be + related to KVIrc and to the problem itself. + +To enable the gdb debugging you must compile kvirc with +the --enable-debug configure option. + + + +03.01.2003: Release 3.0.0 beta2 +############################################################################### + + +Here we go again! +Yes , this is still called "beta" , but it should be stable on most machines. +We're simply still missing some features planned for the final 3.0.0. + +Beta2 is being released as a source package. +Binary packages (for windows and other platforms) might be available soon +so check out the download section once in a while. + +90% of the 2.* branch features have been already re-implemented and there are +many new things to play with. + +There is a preliminary UNICODE port: KVIrc UI starts to "speak" foreign (non Latin1) based languages. +IRC character set mapping has been implemented (with 8 commonly used codepages for now). +You should be able to use the Euro sign (ISO-8859-15), write Cyrillic (KOI-8-R , CP-1251 , ISO-8859-5), +Greek (ISO-8859-7) and even use ideograms with the UTF-8 encoding. +Character mapping selection is window based thus you should be able to write Cyrillic on #russian, +Greek on #athens and write plain English on #kvirc in the same IRC session. + +Some modules have been removed from the main distribution. This is because the source +tree has been growing too much: we are removing the non-strictly-necessary features +and we will release them as separate packages. + +On the CVS you can already find the "nap" module that allows chatting (no file sharing yet) +on OpenNap networks. + +The scriptcenter dialog has been splitted in smaller "pieces" and a GUI toolbar editor has been added. + +Finally there are tons of bugfixes and improvements: just play with it :) + +The bugs for this release should be reported by using the bugtrack system available +at http://bugtrack.kvirc.omnikron.net. + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + +############################################################################### + + + +25.06.2002 +############################################################################### + +3.0.0 beta1 (Codename: "Eve's Avatar") + +This release is "floating around" since a couple of months... +Well... finally... here we go :) +This is not stable yet, but many people use it and we get a really small number of +critical reports: this means that you probably can use it for your daily chatting. + +Beta1 is being released as a source package and a binary distro for the windows platform. +Binary packages for other platforms might be available soon so check out the download section once in a while. + +If you had previous KVIrc installations and you experience problems (missing menus for example) +try to remove (or better just rename) the old local configuration directory (locaed +in your home dir probably) and to restart KVIrc. + +80% of the 2.* branch features have been already re-implemented and there is a whole +bunch of new things to play with. One of the greates "ChangeLog" entries is the preliminary +SSL support that works for IRC and DCC CHAT (both over IPv4 and IPv6). +CTCP PAGE support has been added and there were some major changes to the variable +management in the scripting language (added "real" array support and changed the syntax for the dictionaries). +Those of you that like colors can now enable the icon-like display of emoticons +and play with icons in the text sent through the server (a new escape code). +The documentation has been reworked a little bit more, there are some new modules and +a lot of new options to try. + +The windows version is not completely in sync with the linux one thus you might find +that it lacks some features (mainly advanced scripting language, sound support etc...). +We hope to have a completely synchronized versions on both platforms for the time +of 3.0.0 final. + +The bugs for this release should be reported by using our new shiny bugtrack system available +at http://bugtrack.kvirc.omnikron.net. + +Well.. +That's all folks! + +Have fun :) +Szymon Stefanek and The KVIrc Development Team + +############################################################################### + diff --git a/TODO b/TODO new file mode 100644 index 0000000..06c966b --- /dev/null +++ b/TODO @@ -0,0 +1,50 @@ +Update TODO file, if something is implemented, it should be removed in the TODO file. +Mantain TODO file as clear as possible + +- Pragma should read this file :D +- Events, events, events. There are lots of them pending (see TODO.Events). +- Multiple identities (and identity associations for servers) +- Port the speech module! +- /timer as a module +- It would be cool if KVIrc could to delete old log files automatically + (configurable, of course), to avoid disk ocupation. For example, delete (or + move to trash) 15-days old log files automatically (configurable by user). +- html colored logs (with icons ? configurable with an option) +- Check away status from the /WHO message ? (this would involve requesting WHO often) +- Handle more uncommon channel modes in the channel mode box ? + SHould get the available modes from RPL_ISUPPORT and show them in the box +- On-line charset guessing: + KviWindow should have the possibility of setting a KVI_CHARSET_AUTO + The KviWindow::decodeText() should contain an algorithm that + would use the best "guess" charset based on the window output + history , the actually detected charset and the text to decode + + /charset ISO-8859-15 +- When user clicks search in the help window there should be some kind of + notification when the search starts... The way it is now you can't tell if the + search button even worked, until the search process is finished +- Channel mode-field + The channel mode field should be dynamical, it should be able to change width according to what it needs, + today it's way too long. +- Userlist + The userlist should be dynamical after how many characters the server lets you use in a nickname, today it's + way too wide, this makes it look ugly. +- Text-hints + Text hints doesn't dissapear after changing desktop under KDE, and you have to change back to the + desktop where KVIrc is to remove the hint. +- CService support + We already have nickserv support, why not CService/X support? This should be much much easier to + implement as it's only on one net (Undernet), and with a static host and command that never changes, we + only need to specify password. +- Option to save & restore sessions (session = opened irc connections, channels & queries) +- Group messages: +         * Add predefined groups +         +         As kvirc3 now supports the ability to send msg's to more than one person at +         a time, I would have liked to see +         a way of making predefined groups.  For example if I often send the same msg +         to both user1, user3, user9 and +         user31, then I would like to add these to a group called "Friends", and then +         just do a "/gquery Friends hi :) what's up?" + +- Add commands for playing PCM WAV files (using the DCC voice code). diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..126611a --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,8761 @@ +dnl # // ################################################################################################################## +dnl # // ## Initialization +dnl # // ################################################################################################################## + +AC_DEFUN([AC_SS_INIT_VARIABLES], +[ + SS_BUILD_FLAGS="" + SS_BUILD_NUMBER="" + + dnl # // X Stuff + + SS_X_INCDIR="" + SS_X_LIBDIR="" + SS_X_LDFLAGS="" + SS_X_CPPFLAGS="" + + dnl # // Qt Stuff + + SS_QT3_GENERAL_DIR="" + SS_QT3_INCDIR="" + SS_QT3_LIBDIR="" + SS_QT3_MOC="" + + dnl # // KDE Stuff + + SS_KDE_REQUESTED="no" + SS_KDE_GENERAL_DIR="" + SS_KDE_INCDIR="" + SS_KDE_LIBDIR="" + SS_KDE_SERVICESDIR="" + SS_KDE_ICONS32DIR="" + + dnl # // Perl stuff + + SS_PERL_ENABLE="no" + SS_PERL_CCFLAGS="" + SS_PERL_LDFLAGS="" + SS_PERL_BINARY="true" + + + dnl # // CXXFLAGS, will be set by AC_SS_CXXFLAGS + + dnl # CXXFLAGS="" + + dnl Build flags: + dnl g - Debug version + dnl h - Memory checks + dnl m - Memory profiling + dnl s - System memmove + dnl S - splash screen + dnl o = openssl support + dnl b - Big channels + dnl x - ix86 asm + dnl T - tips + dnl c - crypt + dnl I - IPC + dnl G - GSM codec + dnl 8 - local 8 bit + dnl A - dcc sound audio support + dnl a - ignore sigalarm + dnl i - ipv6 + dnl B - big endian + dnl k - KDE + dnl p - pseudo transparency + dnl e - Esound daemon support + dnl r - Arts daemon support + dnl f - Audiofile support + dnl P - profiling support + dnl p - perl scripting support +]) + +dnl # // ################################################################################################################## +dnl # // ## OUTPUT MACROS +dnl # // ################################################################################################################## +AC_DEFUN([AC_CROSS_COLOR], +[ + + TPUT=0 + PRINTF=0 + COLOR=0 + IFS_OLD=$IFS + IFS=":" + + for i in $PATH; do + if test -x "$i/tput"; then + TPUT=1 + fi + done + + type printf >/dev/null 2>&1 && PRINTF=1 + + for i in $PATH; do + if test -x "$i/printf"; then + PRINTF=1 + fi + done + + if test "$TPUT" = "1" -o "$PRINTF" = "1"; then + COLOR=1 + fi + + if test "$COLOR" = 1; then + if test "$TPUT" = "1"; then + if test "$1" = "1"; then + tput bold + else + tput sgr0 + fi + if test "$2" != ""; then + tput setaf $2 + fi + elif test "$PRINTF" = "1"; then + if test "$2" != ""; then + printf "\033\1330$1;3$2m" + fi + fi + fi + + IFS=$IFS_OLD +]) + +AC_DEFUN([AC_SS_HEADER], +[ + AC_CROSS_COLOR([1],[2]) + echo "################################################################################" + echo "### $1" + echo "################################################################################" + AC_CROSS_COLOR([0],[9]) +]) + +AC_DEFUN([AC_SS_SECTION], +[ + AC_CROSS_COLOR([1],[3]) + echo "### $1" + AC_CROSS_COLOR([0],[9]) +]) + +AC_DEFUN([AC_SS_SET_REDINK], +[ + AC_CROSS_COLOR([1],[1]) +]) + +AC_DEFUN([AC_SS_SET_GREENINK], +[ + AC_CROSS_COLOR([1],[2]) +]) + +AC_DEFUN([AC_SS_SET_NORMALINK], +[ + AC_CROSS_COLOR([0],[9]) +]) + +dnl # // ################################################################################################################## +dnl # // ## FILE LOOKUP MACROS +dnl # // ################################################################################################################## + +AC_DEFUN([AC_SS_FIND_FILE_PATH], +[ + $3="FAILED" + for a_dir in $2; do + for a_file in $1; do + if test -r "$a_dir/$a_file"; then + $3=$(echo "$a_dir" | sed -e 's/\/\.\//\//g' | sed -e 's/\/\//\//g' | sed -e 's/\/\.\//\//g' | sed -e 's/\/\//\//g') + break 2 + fi + done + done +]) + +AC_DEFUN([AC_SS_FIND_FILE_PATH_EXT], +[ + $4="FAILED" + + for a_dir in $2; do + for a_semidir in $3; do + for a_file in $1; do + if test -r "$a_dir/$a_semidir/$a_file"; then + $4=$(echo "$a_dir/$a_semidir" | sed -e 's/\/\.\//\//g' | sed -e 's/\/\//\//g' | sed -e 's/\/\.\//\//g' | sed -e 's/\/\//\//g') + break 3 + fi + done + done + done +]) + +dnl # // ################################################################################################################## +dnl # // ## BASIC COMPILER FLAGS +dnl # // ################################################################################################################## + + +AC_DEFUN([AC_SS_CXXFLAGS_DEBUG_SYMBOLS], +[ + dnl # // Checks if the --with-debug-symbols option has been passed to configure + dnl # // adds -g to SS_CXXFLAGS + dnl # // adds g to SS_BUILD_FLAGS + + AC_MSG_CHECKING([if you want the debug symbols]) + + SS_LOCAL_ADD_DEBUG_SYMBOLS="" + + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug],[Compile an executable suitable for debugging]), + [SS_LOCAL_ADD_DEBUG_SYMBOLS="true"]) + + if test -n "$SS_LOCAL_ADD_DEBUG_SYMBOLS"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -g" + else + SS_CXXFLAGS="-g" + fi + SS_BUILD_FLAGS="g$SS_BUILD_FLAGS" + else + AC_MSG_RESULT([no]) + fi +]) + +AC_DEFUN([AC_SS_CXXFLAGS_PIPES], +[ + dnl # // Checks if the --with-pipes option has been passed to configure + dnl # // adds -pipe to CXXFLAGS + + AC_MSG_CHECKING([if you want to use pipes for compilation]) + + SS_LOCAL_USE_PIPES="" + AC_ARG_ENABLE(pipes, + AC_HELP_STRING([--enable-pipes],[Use pipes instead of files for the compilation]), + [SS_LOCAL_USE_PIPES="true"]) + + if test -n "$SS_LOCAL_USE_PIPES"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -pipe" + else + SS_CXXFLAGS="-pipe" + fi + else + AC_MSG_RESULT([no]) + fi +]) + + +AC_DEFUN([AC_SS_CXXFLAGS_PROFILING], +[ + AC_MSG_CHECKING([if you want the profiling information]) + + SS_LOCAL_ADD_PROFILING="" + + AC_ARG_ENABLE(profiling, + AC_HELP_STRING([--enable-profiling],[Compile an executable suitable for profiling]), + [SS_LOCAL_ADD_PROFILING="true"]) + + if test -n "$SS_LOCAL_ADD_PROFILING"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -pg" + else + SS_CXXFLAGS="-pg" + fi + if test -n "$SS_LDFLAGS"; then + SS_LDFLAGS="$SS_LDFLAGS -pg" + else + SS_LDFLAGS="-pg" + fi + SS_BUILD_FLAGS="P$SS_BUILD_FLAGS" + else + AC_MSG_RESULT([no]) + fi +]) + +AC_DEFUN([AC_SS_CXXFLAGS_FNORTTI], +[ + AC_MSG_CHECKING([if you want to use -fno-rtti]) + + SS_LOCAL_FNORTTI="" + AC_ARG_ENABLE(fno-rtti, + AC_HELP_STRING([--enable-fno-rtti],[Disable runtime type information (dangerous)]), + SS_LOCAL_FNORTTI="true") + + if test -n "$SS_LOCAL_FNORTTI"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -fno-rtti" + else + SS_CXXFLAGS="-fno-rtti" + fi + else + AC_MSG_RESULT([no]) + fi +]) + +AC_DEFUN([AC_SS_CXXFLAGS_ANSI], +[ + SS_ANSI_COMPILATION="" + AC_MSG_CHECKING([if you want a strict ansi compilation]) + AC_ARG_ENABLE(ansi, + AC_HELP_STRING([--enable-ansi],[Strict ansi compilation (might not compile)]), + SS_ANSI_COMPILATION="true") + + if test -n "$SS_ANSI_COMPILATION"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -ansi" + else + SS_CXXFLAGS="-ansi" + fi + else + AC_MSG_RESULT([no]) + fi +]) + + +AC_DEFUN([AC_SS_CXXFLAGS_WALL], +[ + SS_WALL_COMPILATION="" + AC_MSG_CHECKING([if you want gcc to be paranoic]) + AC_ARG_ENABLE(wall, + AC_HELP_STRING([--enable-wall],[Make gcc be paranoic (might not compile)]), + SS_WALL_COMPILATION="true") + + if test -n "$SS_WALL_COMPILATION"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -Wall" + else + SS_CXXFLAGS="-Wall" + fi + else + AC_MSG_RESULT([no]) + fi +]) + + +AC_DEFUN([AC_SS_CXXFLAGS_PEDANTIC], +[ + SS_PEDANTIC_COMPILATION="" + AC_MSG_CHECKING([if you want a strict ansi compilation]) + + AC_ARG_ENABLE(pedantic, + AC_HELP_STRING([--enable-pedantic],[Pedantic compilation (might not compile)]), + SS_PEDANTIC_COMPILATION="true") + + if test -n "$SS_PEDANTIC_COMPILATION"; then + AC_MSG_RESULT([yes]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -pedantic" + else + SS_CXXFLAGS="-pedantic" + fi + else + AC_MSG_RESULT([no]) + fi +]) + +AC_DEFUN([AC_SS_CXXFLAGS_OPTIMISATION], +[ + AC_MSG_CHECKING([for the optimisation level]) + + SS_LOCAL_OPTIMISATION="" + AC_ARG_ENABLE(optimisation, + AC_HELP_STRING([--enable-optimisation=N],[Use optimisation level N when compiling]), + SS_LOCAL_OPTIMISATION="$enableval") + + if test -n "$SS_LOCAL_OPTIMISATION"; then + AC_MSG_RESULT([using -O$SS_LOCAL_OPTIMISATION]) + if test -n "$SS_CXXFLAGS"; then + SS_CXXFLAGS="$SS_CXXFLAGS -O$SS_LOCAL_OPTIMISATION" + else + SS_CXXFLAGS="-O$SS_LOCAL_OPTIMISATION" + fi + SS_BUILD_FLAGS="$SS_LOCAL_OPTIMISATION$SS_BUILD_FLAGS" + else + AC_MSG_RESULT([using no optimisation flag]) + fi +]) + + + +AC_DEFUN([AC_SS_CXXFLAGS], +[ + SS_CXXFLAGS="" + + AC_SS_CXXFLAGS_DEBUG_SYMBOLS + AC_SS_CXXFLAGS_PROFILING + AC_SS_CXXFLAGS_PIPES + AC_SS_CXXFLAGS_OPTIMISATION + AC_SS_CXXFLAGS_FNORTTI + AC_SS_CXXFLAGS_ANSI + AC_SS_CXXFLAGS_PEDANTIC + AC_SS_CXXFLAGS_WALL + + if test -n "$SS_CXXFLAGS"; then + if test -n "$CXXFLAGS"; then + CXXFLAGS="$CXXFLAGS $SS_CXXFLAGS" + else + CXXFLAGS="$SS_CXXFLAGS" + fi + fi +]) + + +dnl ################################################################################################################### +dnl ### HEADERS AND FUNCTIONS +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_HEADER_CHECKS], +[ + SS_HAS_OSS_SUPPORT="false" + AC_CHECK_HEADER(strings.h) + AC_CHECK_HEADERS(linux/soundcard.h sys/soundcard.h soundcard.h,SS_HAS_OSS_SUPPORT="true") + + if test "$SS_HAS_OSS_SUPPORT" = "true"; then + AC_DEFINE([COMPILE_OSS_SUPPORT], 1, [define if you want to enable OSS sound support]) + fi + +]) + +AC_DEFUN([AC_SS_FUNCTION_CHECKS], +[ + SS_HAVE_IPV6_FUNCTIONS="true" + + AC_CHECK_FUNCS(getenv strerror) + AC_CHECK_FUNCS(inet_ntoa inet_aton) + AC_CHECK_FUNCS(setenv unsetenv putenv) + AC_CHECK_FUNCS(gmtime_r localtime_r) + + AC_CHECK_FUNC(inet_ntop,SS_HAVE_IPV6_FUNCTIONS="true",SS_HAVE_IPV6_FUNCTIONS="false") + AC_CHECK_FUNC(inet_pton,SS_HAVE_IPV6_FUNCTIONS="true",SS_HAVE_IPV6_FUNCTIONS="false") + AC_CHECK_FUNC(getaddrinfo,SS_HAVE_IPV6_FUNCTIONS="true",SS_HAVE_IPV6_FUNCTIONS="false") + + AC_CHECK_FUNCS(getnameinfo) +]) + + + +dnl ################################################################################################################### +dnl ### MISC OPTIONS +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_MISC_OPTIONS], +[ + AC_MSG_CHECKING([if you want the memory profiling]) + AC_ARG_WITH(memory-profile, [ --with-memory-profile Compile the memory profile],SS_COMPILE_MEMORY_PROFILE="true") + if test "$SS_COMPILE_MEMORY_PROFILE" = "true"; then + AC_MSG_RESULT(yes) + AC_DEFINE([COMPILE_MEMORY_PROFILE], 1, [define if you want the gcc memory profile]) + SS_BUILD_FLAGS="m$SS_BUILD_FLAGS" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([how to waste your time]) + AC_MSG_RESULT(by performing senseless checks) + + AC_MSG_CHECKING([if you want memory checking in malloc]) + AC_ARG_WITH(memory-checks, [ --with-memory-checks Enable malloc memory checks],SS_COMPILE_MEMORY_CHECKS="true") + if test "$SS_COMPILE_MEMORY_CHECKS" = "true"; then + AC_MSG_RESULT(yes) + AC_DEFINE([COMPILE_MEMORY_CHECKS], 1, [define if you want the memory checks]) + SS_BUILD_FLAGS="h$SS_BUILD_FLAGS" + else + AC_MSG_RESULT(no) + fi + + + AC_MSG_CHECKING([if you want to use system memmove]) + AC_ARG_WITH(system-memmove, [ --without-system-memmove Do not use system memmove and memcpy],SS_DO_NOT_USE_SYSTEM_MEMMOVE="true") + if test "$SS_DO_NOT_USE_SYSTEM_MEMMOVE" = "true"; then + AC_MSG_RESULT(no) + else + AC_DEFINE([COMPILE_WITH_SYSTEM_MEMMOVE], 1, [define if you trust your memmove() function]) + AC_MSG_RESULT(yes) + SS_BUILD_FLAGS="s$SS_BUILD_FLAGS" + fi + + AC_MSG_CHECKING([if you want to optimize for big channels]) + AC_ARG_WITH(big-channels, [ --with-big-channels Optimize for big irc channels],SS_OPTIMIZE_BIG_CHANNELS="true") + if test "$SS_OPTIMIZE_BIG_CHANNELS" = "true"; then + AC_MSG_RESULT(yes: using 349 as dict size) + AC_DEFINE_UNQUOTED([AVERAGE_CHANNEL_USERS],349, [define this to the number of average channel users]) + SS_BUILD_FLAGS="b$SS_BUILD_FLAGS" + else + AC_MSG_RESULT(no: using 101 as dict size) + AC_DEFINE_UNQUOTED([AVERAGE_CHANNEL_USERS],101, [define this to the number of average channel users]) + fi + + AC_MSG_CHECKING([if you want ix86 assembly optimisations]) + AC_ARG_WITH(ix86-asm, [ --with-ix86-asm Compile ix86 assembly optimisations],SS_COMPILE_ix86_ASM="true") + if test "$SS_COMPILE_ix86_ASM" = "true"; then + AC_MSG_RESULT(yes) + AC_MSG_CHECKING(target system CPU) + if test "$target_cpu" = "i386"; then + AC_MSG_RESULT(i386 : compiling asm code) + else + if test "$target_cpu" = "i486"; then + AC_MSG_RESULT(i486 : compiling asm code) + else + if test "$target_cpu" = "i586"; then + AC_MSG_RESULT(i586 : compiling asm code) + else + if test "$target_cpu" = "i686"; then + AC_MSG_RESULT(i686 : compiling asm code) + else + AC_MSG_RESULT($target_cpu , no i386 optimisations) + unset SS_COMPILE_ix86_ASM + fi + fi + fi + fi + + if test "$SS_COMPILE_ix86_ASM" = "true"; then + AC_DEFINE([COMPILE_ix86_ASM], 1, [define if you want the i386 asm code]) + SS_BUILD_FLAGS="x$SS_BUILD_FLAGS" + fi + else + AC_MSG_RESULT(no) + fi + + AC_PATH_PROG(SS_MSGFMT,msgfmt,":",$PATH:/bin:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/usr/lib/qt/bin:/usr/local/qt/bin:/usr/X11R6/qt/bin:/usr/qt/bin:/usr/build/qt/bin) + if test -z "SS_MSGFMT"; then + SS_MSGFMT=":" + fi + AC_SUBST(SS_MSGFMT) + + AC_MSG_CHECKING([if you want the DCC VOICE sound support]) + AC_ARG_WITH(dcc-sound,[ --without-dcc-sound Do not compile the DCC VOICE sound support],SS_NO_SOUND="true") + if test "$SS_NO_SOUND" = "true"; then + AC_MSG_RESULT(no) + AC_DEFINE([COMPILE_DISABLE_DCC_VOICE], 1, [define if you want to disable DCC VOICE sound support]) + else + AC_MSG_RESULT(yes) + SS_BUILD_FLAGS="A$SS_BUILD_FLAGS" + fi + + SS_BUILD_FLAGS="T$SS_BUILD_FLAGS" + AC_DEFINE([COMPILE_INFO_TIPS], 1, [define if you want the info tips to be compiled in]) + + AC_MSG_CHECKING([if you want to disable the ipV6 support]) + AC_ARG_WITH(ipv6-support,[ --without-ipv6-support Do not compile the IpV6 support],SS_NOIPV6_SUPPORT="true") + if test "$SS_NOIPV6_SUPPORT" = "true"; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to disable the cryptography support]) + AC_ARG_WITH(crypt-support,[ --without-crypt-support Do not compile the cryptography support],SS_NOCRYPT_SUPPORT="true") + if test "$SS_NOCRYPT_SUPPORT" = "true"; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + AC_DEFINE([COMPILE_CRYPT_SUPPORT], 1, [define if you want to compile the crypt support]) + SS_BUILD_FLAGS="c$SS_BUILD_FLAGS" + fi + + AC_MSG_CHECKING([if you want to disable the X bell support]) + AC_ARG_WITH(x-bell,[ --without-x-bell Disable the X bell support],SS_NO_X_BELL="true") + if test "$SS_NO_X_BELL" = "true"; then + AC_MSG_RESULT(yes) + AC_DEFINE([COMPILE_NO_X_BELL], 1, [define if you want to disable the X bell support]) + else + AC_MSG_RESULT(no) + fi + + AC_DEFINE([COMPILE_NEW_KVS], 1, [define if you want to enable the new KVS parser]) + AC_DEFINE([COMPILE_ONLY_NEW_KVS], 1, [define if you want to use only the new KVS parser]) + + AC_MSG_CHECKING([if you want to link to the embedded version of qt]) + AC_ARG_WITH(qt-embedded,[ --with-qt-embedded Link to qt-embedded (see INSTALL)],SS_QT3_EMBEDDED="true") + if test "$SS_QT3_EMBEDDED" = "true"; then + AC_MSG_RESULT(yes) + SS_BUILD_FLAGS="E$SS_BUILD_FLAGS" + else + AC_MSG_RESULT(no) + fi + + + AC_MSG_CHECKING([if you want to disable inter-process communication]) + AC_ARG_WITH(ipc,[ --without-ipc Disable inter-process communication support],SS_NO_IPC="true") + if test "$SS_NO_IPC" = "true"; then + AC_MSG_RESULT(yes) + SS_BUILD_FLAGS="I$SS_BUILD_FLAGS" + AC_DEFINE([COMPILE_NO_IPC], 1, [define this if you want to disable the inter-process communication support]) + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to explicitly disable the gsm codec support]) + AC_ARG_WITH(gsm,[ --without-gsm Disable gsm codec support],SS_NO_GSM="true") + if test "$SS_NO_GSM" = "true"; then + AC_MSG_RESULT(yes) + else + AC_DEFINE([COMPILE_USE_GSM], 1, [define if you have libgsm and want the GSM code to be compiled]) + SS_BUILD_FLAGS="G$SS_BUILD_FLAGS" + AC_MSG_RESULT(no) + fi + + + AC_MSG_CHECKING([if you want to ignore SIGALARM]) + AC_ARG_WITH(ignore-sigalarm, [ --with-ignore-sigalarm Ignore SIGALARM in all threads],SS_IGNORE_SIGALARM="true") + if test "$SS_IGNORE_SIGALARM" = "true"; then + AC_MSG_RESULT(yes) + AC_DEFINE([COMPILE_IGNORE_SIGALARM], 1, [define this if you want to ignore the SIGALARM signal]) + SS_BUILD_FLAGS="a$SS_BUILD_FLAGS" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want the pseudo-transparency support]) + AC_ARG_WITH(transparency, [ --without-transparency Do NOT compile the pseudo-transparency support],SS_NO_PSEUDO_TRANSPARENCY="true") + if test "$SS_NO_PSEUDO_TRANSPARENCY" = "true"; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + AC_DEFINE([COMPILE_PSEUDO_TRANSPARENCY], 1, [define if you have the KDE support and want the pseudo transparency]) + SS_BUILD_FLAGS="p$SS_BUILD_FLAGS" + fi + + AC_ARG_WITH(pizza,[ --with-pizza Use this when hungry],SS_PIZZA="true") + +]) + + +dnl ################################################################################################################### +dnl ### DYNAMIC LABELS +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_DYNAMIC_LABELS], +[ + AC_MSG_CHECKING([if the compiler supports dynamic labels]) + AC_ARG_WITH(dyn-labels, [ --without-dyn-labels Disable usage of the dynamic label jumps],SS_DISABLE_DYNAMIC_LABELS="true") + if test "$SS_DISABLE_DYNAMIC_LABELS" = "true"; then + AC_MSG_RESULT("no: trusting you") + else + AC_TRY_RUN([ + int main(int argc,char ** argv) + { + int retVal = 10; + void * label = &&action4; + goto action2; + action1: + retVal -= 4; + label = &&endofcode; + goto *label; + action2: + retVal -= 5; + goto *label; + action3: + retVal += 40; + action4: + retVal -= 1; + label = &&action1; + goto *label; + endofcode: + return retVal; + } + ],SS_DISABLE_DYNAMIC_LABELS="false",SS_DISABLE_DYNAMIC_LABELS="true",SS_DISABLE_DYNAMIC_LABELS="true") + + if test "$SS_DISABLE_DYNAMIC_LABELS" = "true"; then + AC_MSG_RESULT("no") + else + AC_MSG_RESULT("yes") + AC_DEFINE([COMPILE_USE_DYNAMIC_LABELS], 1, [define if your compiler supports gotos do dynamic labels]) + fi + fi +]) + +dnl ################################################################################################################### +dnl ### BIG_ENDIAN +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_BIG_ENDIAN], +[ + AC_MSG_CHECKING([if this system is big endian]) + AC_TRY_RUN([ + int main(int argc,char ** argv) + { + int nl; + unsigned char * nlc; + nl = 0x12CAFE34; + nlc = (unsigned char *)(&nl); + if((nlc[0] == 0x12) && (nlc[1] == 0xCA) && (nlc[2] == 0xFE) && (nlc[3] == 0x34))return 0; + return 1; + } + ],SS_BIG_ENDIAN_MACHINE="true",SS_BIG_ENDIAN_MACHINE="false",SS_BIG_ENDIAN_MACHINE="false") + + dnl # This will fail if we're cross compiling... + + if test "$SS_BIG_ENDIAN_MACHINE" = "true"; then + AC_MSG_RESULT([yes]) + SS_BUILD_FLAGS="B$SS_BUILD_FLAGS" + AC_DEFINE([BIG_ENDIAN_MACHINE_BYTE_ORDER], 1, [define this if you are on a big endian machine]) + else + AC_MSG_RESULT([no]) + fi +]) + +dnl ################################################################################################################### +dnl ### DLOPEN +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_CHECK_DL], +[ + AC_MSG_CHECKING([for dlopen capabilities]) + + SS_LINK_TO_LIBDL="no" + + SS_SAVE_LIBS="$LIBS" + LIBS="-rdynamic" + AC_TRY_LINK([ + #include + ],[ + /* sparc-unknown-openbsd3.0 hack */ + #ifndef RTLD_NOW + #define RTLD_NOW RTLD_LAZY + #endif + dlopen("/lib/libc.so.6",RTLD_NOW); + ], + eval "SS_DLOPEN_OK=yes" + , + eval "SS_DLOPEN_OK=no" + ) + LIBS="$SS_SAVE_LIBS" + + if test "$SS_DLOPEN_OK" = "yes"; then + AC_MSG_RESULT([builtin in libc]) + else + + SS_SAVE_LIBS="$LIBS" + LIBS="-rdynamic -ldl" + AC_TRY_LINK([ + #include + ],[ + /* sparc-unknown-openbsd3.0 hack */ + #ifndef RTLD_NOW + #define RTLD_NOW RTLD_LAZY + #endif + dlopen("/usr/lib/libdl.so",RTLD_NOW); + ], + eval "SS_DLOPEN_OK=yes", + eval "SS_DLOPEN_OK=no" + ) + LIBS="$SS_SAVE_LIBS" + + if test "$SS_DLOPEN_OK" = "yes"; then + SS_LINK_TO_LIBDL="yes" + AC_MSG_RESULT([external in libdl]) + else + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### No dlopen capabilities found." + echo "### It looks that your system has no interface to the dynamic linker ?" + echo "### If you're on linux, you either miss libdl , or the linker is not" + echo "### able to find it. Make sure that libdl is in /lib or /usr/lib." + echo "### If you're sure you have libdl, make sure you have also g++ installed." + echo "### If you're not on linux, please drop a mail to pragma at kvirc dot net" + echo "### describing your system and I'll try to fix it." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR(["This was fatal...aborting"]) + fi + fi +]) + + +dnl ################################################################################################################### +dnl ### PERL +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_CHECK_PERL], +[ + SS_PERL_ENABLE="yes" + SS_PERL_CCFLAGS="" + SS_PERL_LDFLAGS="" + SS_PERL_BINARY="true" + SS_PERL_RESULT_MESSAGE="" + + AC_ARG_ENABLE(perl,AC_HELP_STRING([--enable-perl],[Enable perl scripting support (default=detect)]),eval "SS_PERL_ENABLE=$enableval") + + if test "$SS_PERL_ENABLE" = "yes"; then + AC_PATH_PROG(SS_PERL_BINARY,perl,":",$PATH:/bin:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/usr/lib/qt/bin:/usr/local/qt/bin:/usr/X11R6/qt/bin:/usr/qt/bin:/usr/build/qt/bin) + if test -z "SS_PERL_BINARY"; then + SS_PERL_RESULT_MESSAGE="disabled: can't find the perl binary" + SS_PERL_ENABLE="no" + SS_PERL_BINARY="true" + fi + else + SS_PERL_RESULT_MESSAGE="disabled by user" + fi + + if test "$SS_PERL_ENABLE" = "yes"; then + AC_MSG_CHECKING([if perl il compiled with MULTIPLICITY option]) + SS_PERL_TEMP=$($SS_PERL_BINARY -V | grep MULTIPLICITY) + if test -z "$SS_PERL_TEMP"; then + AC_MSG_RESULT([no]) + SS_PERL_ENABLE="no" + SS_PERL_BINARY="true" + SS_PERL_RESULT_MESSAGE="disabled: MULTIPLICITY not defined" + fi + fi + + if test "$SS_PERL_ENABLE" = "yes"; then + AC_MSG_CHECKING([for the system perl directory]) + SS_PERL_DIR=$($SS_PERL_BINARY -MConfig -e 'print $Config{archlib}') + SS_PERL_DIR="$SS_PERL_DIR/CORE" + AC_MSG_RESULT([got $SS_PERL_DIR]) + AC_MSG_CHECKING([for the perl ccflags]) + SS_PERL_CCFLAGS=$($SS_PERL_BINARY -MConfig -e 'print $Config{ccflags}') + AC_MSG_RESULT([got $SS_PERL_CCFLAGS]) + AC_MSG_CHECKING([for the perl ldflags]) + SS_PERL_LDFLAGS=$($SS_PERL_BINARY -MExtUtils::Embed -e ldopts) + AC_MSG_RESULT([got $SS_PERL_LDFLAGS]) + + AC_MSG_CHECKING([if we can compile a perl application]) + SS_SAVED_LIBS="$LIBS" + SS_SAVED_CFLAGS="$CFLAGS" + SS_SAVED_CCFLAGS="$CCFLAGS" + SS_SAVED_LDFLAGS="$LDFLAGS" + SS_SAVED_CXXFLAGS="$CXXFLAGS" + SS_SAVED_CPPFLAGS="$CPPFLAGS" + + LIBS="$SS_PERL_LDFLAGS" + LDFLAGS="$LIBS" + CFLAGS="$SS_PERL_CCFLAGS -I$SS_PERL_DIR" + CCFLAGS="$CFLAGS" + CXXFLAGS="$CFLAGS" + CPPFLAGS="$CFLAGS" + + AC_TRY_LINK([ + #include + #include + #include + + extern "C" void boot_DynaLoader(pTHX_ CV* cv); + + extern "C" void xs_init(pTHX) + { + char * file = __FILE__; + newXS("DynaLoader::boot_DynaLoader",boot_DynaLoader,file); + } + + ],[ + PerlInterpreter *my_perl; + my_perl = perl_alloc(); + perl_construct(my_perl); + perl_parse(my_perl,xs_init, 0, 0, (char **)NULL); + perl_run(my_perl); + perl_destruct(my_perl); + perl_free(my_perl); + ], + eval "SS_PERL_ENABLE=yes", + eval "SS_PERL_ENABLE=no" + ) + + SS_PERL_LDFLAGS="$LDFLAGS" + SS_PERL_CCFLAGS="$CCFLAGS" + + LIBS="$SS_SAVED_LIBS" + CFLAGS="$SS_SAVED_CFLAGS" + LDFLAGS="$SS_SAVED_LDFLAGS" + CXXFLAGS="$SS_SAVED_CXXFLAGS" + CPPFLAGS="$SS_SAVED_CPPFLAGS" + CCFLAGS="$SS_SAVED_CCFLAGS" + + if test "$SS_PERL_ENABLE" = "yes"; then + AC_MSG_RESULT([seems ok]) + AC_DEFINE([COMPILE_PERL_SUPPORT], 1, [define if you have perl and want the perl scripting support in kvirc]) + SS_BUILD_FLAGS="p$SS_BUILD_FLAGS" + SS_PERL_RESULT_MESSAGE="enabled" + else + AC_MSG_RESULT([seems broken]) + SS_PERL_RESULT_MESSAGE="disabled: failed to compile the test program" + SS_PERL_LDFLAGS="" + SS_PERL_CCFLAGS="" + fi + fi + + AC_SUBST(SS_PERL_CCFLAGS) + AC_SUBST(SS_PERL_LDFLAGS) + AC_SUBST(SS_PERL_BINARY) + + AC_MSG_CHECKING([for perl scripting support]) + AC_MSG_RESULT([$SS_PERL_RESULT_MESSAGE]) +]) + +dnl ################################################################################################################### +dnl ### OPENSSL +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_CHECK_OPENSSL], +[ + SS_LINK_TO_LIBSSL="false" + SS_SSL_RESULT_MESSAGE="" + SS_ENABLE_SSL_SUPPORT="yes" + + AC_ARG_ENABLE(ssl,AC_HELP_STRING([--disable-ssl],[Disable OpenSSL support]),eval "SS_ENABLE_SSL_SUPPORT=$enableval") + + if test "$SS_ENABLE_SSL_SUPPORT" = "yes"; then + AC_MSG_CHECKING([If we can compile and link a small SSL test application]) + SS_SAVED_LIBS="$LIBS" + LIBS="-lcrypto -lssl" + AC_TRY_LINK([ + #include + ],[ + SSL_new(0); + ], + eval "SS_ENABLE_SSL_SUPPORT=yes", + eval "SS_ENABLE_SSL_SUPPORT=no" + ) + LIBS="$SS_SAVED_LIBS" + if test "$SS_ENABLE_SSL_SUPPORT" = "yes"; then + AC_MSG_RESULT([yes]) + + AC_CHECK_HEADER(openssl/ssl.h,SS_DUMMY="yes",SS_ENABLE_SSL_SUPPORT="no") + AC_CHECK_HEADER(openssl/err.h,SS_DUMMY="yes",SS_ENABLE_SSL_SUPPORT="no") + AC_CHECK_HEADER(openssl/asn1.h,SS_DUMMY="yes",SS_ENABLE_SSL_SUPPORT="no") + AC_CHECK_HEADER(openssl/evp.h,SS_DUMMY="yes",SS_ENABLE_SSL_SUPPORT="no") + + if test "$SS_ENABLE_SSL_SUPPORT" = "yes"; then + AC_DEFINE([COMPILE_SSL_SUPPORT], 1, [define if you have openssl and want the ssl support in kvirc]) + SS_LINK_TO_LIBSSL="true" + SS_BUILD_FLAGS="o$SS_BUILD_FLAGS" + SS_SSL_RESULT_MESSAGE="enabled" + else + SS_SSL_RESULT_MESSAGE="disabled: missing header files" + fi + else + AC_MSG_RESULT([no]) + SS_SSL_RESULT_MESSAGE="disabled: failed to compile the test program" + fi + else + SS_SSL_RESULT_MESSAGE="disabled by user" + fi + + AC_MSG_CHECKING([for secure connections support]) + AC_MSG_RESULT([$SS_SSL_RESULT_MESSAGE]) +]) + + +dnl ################################################################################################################### +dnl ### ESD +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_ESD], +[ + SS_LINK_TO_LIBESD="false" + SS_DISABLE_ESD_SUPPORT="true" + SS_SAVED_LIBS=$LIBS + LIBS="$LIBS -lesd" + AC_CHECK_LIB(esd,esd_play_file,SS_DISABLE_ESD_SUPPORT="false") + LIBS="$SS_SAVED_LIBS" + + if test "$SS_DISABLE_ESD_SUPPORT" = "false"; then + SS_DISABLE_ESD_SUPPORT="true" + AC_CHECK_HEADER(esd.h,SS_DISABLE_ESD_SUPPORT="false") + fi + + AC_MSG_CHECKING([for Esound daemon support]) + AC_ARG_WITH(esd-support, [ --without-esd-support Disable Esound daemon support],SS_DISABLE_ESD_SUPPORT="true") + + if test "$SS_DISABLE_ESD_SUPPORT" = "true"; then + AC_MSG_RESULT(disabled by user) + else + AC_MSG_RESULT(yes: have libs and headers) + AC_DEFINE([COMPILE_ESD_SUPPORT], 1, [define if you want to enable the Esound daemon support]) + SS_LINK_TO_LIBESD="true" + SS_BUILD_FLAGS="e$SS_BUILD_FLAGS" + fi + +]) + +dnl ################################################################################################################### +dnl ### ZLIB +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_ZLIB], +[ + SS_LINK_TO_LIBZLIB="no" + SS_DISABLE_ZLIB_SUPPORT="true" + SS_SAVED_LIBS=$LIBS + LIBS="$LIBS -lz" + AC_CHECK_LIB(z,gzopen,SS_DISABLE_ZLIB_SUPPORT="false") + LIBS="$SS_SAVED_LIBS" + + if test "$SS_DISABLE_ZLIB_SUPPORT" = "false"; then + SS_DISABLE_ZLIB_SUPPORT="true" + AC_CHECK_HEADER(zlib.h,SS_DISABLE_ZLIB_SUPPORT="false") + fi + + AC_MSG_CHECKING([for GZip support]) + AC_ARG_WITH(zlib-support, [ --without-zlib-support Disable ZLIB support],SS_DISABLE_ZLIB_SUPPORT="true") + + if test "$SS_DISABLE_ZLIB_SUPPORT" = "true"; then + AC_MSG_RESULT(disabled by user) + else + AC_MSG_RESULT(yes: have libs and headers) + AC_DEFINE([COMPILE_ZLIB_SUPPORT], 1, [define if you want to enable the ZLib library support]) + SS_LINK_TO_LIBZ="yes" + SS_BUILD_FLAGS="Z$SS_BUILD_FLAGS" + fi +]) + +dnl ################################################################################################################### +dnl ### XSS +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_XSS], +[ + SS_LINK_TO_XSS="no" + SS_COMPILE_XSS_SUPPORT="false" + SS_SAVED_LIBS=$LIBS + LIBS="$LIBS -lXss" + AC_CHECK_LIB(Xss,XScreenSaverAllocInfo,SS_COMPILE_XSS_SUPPORT="true") + LIBS="$SS_SAVED_LIBS" + + AC_MSG_CHECKING([for Xss support]) + + if test "$SS_COMPILE_XSS_SUPPORT" = "false"; then + AC_MSG_RESULT(disabled) + else + AC_MSG_RESULT(yes: lib is ok) + AC_DEFINE([COMPILE_XSS_SUPPORT], 1, [define if you want to enable the ZLib library support]) + SS_LINK_TO_XSS="yes" + SS_BUILD_FLAGS="$SS_BUILD_FLAGS" + fi +]) + +dnl ################################################################################################################### +dnl ### Audiofile library +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_AUDIOFILE], +[ + SS_LINK_TO_LIBAUDIOFILE="false" + SS_DISABLE_AUDIOFILE_SUPPORT="true" + SS_SAVED_LIBS=$LIBS + LIBS="$LIBS -laudiofile" + AC_CHECK_LIB(audiofile,afOpenFile,SS_DISABLE_AUDIOFILE_SUPPORT="false") + + if test "$SS_DISABLE_AUDIOFILE_SUPPORT" = "false"; then + SS_DISABLE_AUDIOFILE_SUPPORT="true" + AC_CHECK_LIB(audiofile,afGetVirtualFrameSize,SS_DISABLE_AUDIOFILE_SUPPORT="false") + fi + + LIBS="$SS_SAVED_LIBS" + + if test "$SS_DISABLE_AUDIOFILE_SUPPORT" = "false"; then + SS_DISABLE_AUDIOFILE_SUPPORT="true" + AC_CHECK_HEADER(audiofile.h,SS_DISABLE_AUDIOFILE_SUPPORT="false") + fi + + AC_MSG_CHECKING([for audiofile support]) + + if test "$SS_DISABLE_AUDIOFILE_SUPPORT" = "true"; then + AC_MSG_RESULT(missing header or libs or wrong version) + else + + if test "$SS_HAS_OSS_SUPPORT" = "false"; then + SS_DISABLE_AUDIOFILE_SUPPORT="true" + AC_MSG_RESULT(no oss support at all) + else + AC_ARG_WITH(af-support, [ --without-af-support Disable Audiofile library for playing files to OSS support], SS_DISABLE_AUDIOFILE_SUPPORT="true") + + if test "$SS_DISABLE_AUDIOFILE_SUPPORT" = "true"; then + AC_MSG_RESULT(disabled by user) + else + AC_MSG_RESULT(yes: have libs and headers) + AC_DEFINE([COMPILE_AUDIOFILE_SUPPORT], 1, [define if you want to enable the Audiofile library support]) + SS_LINK_TO_LIBAUDIOFILE="true" + SS_BUILD_FLAGS="f$SS_BUILD_FLAGS" + fi + fi + fi +]) + +dnl ################################################################################################################### +dnl ### ARTS +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_CHECK_ARTS], +[ + SS_LINK_TO_LIBARTS="false" + SS_DISABLE_ARTS_SUPPORT="false" + + AC_MSG_CHECKING([if Arts support is requested]) + AC_ARG_WITH(arts-support, [ --without-arts-support Disable Arts daemon support],SS_DISABLE_ARTS_SUPPORT="true") + + if test "$SS_KDE_REQUESTED" = "yes"; then + if test "$SS_DISABLE_ARTS_SUPPORT" = "true"; then + AC_MSG_RESULT(disabled by user) + else + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING(if we can compile a simple Arts application) + AC_LANG_CPLUSPLUS + ss_save_CPPFLAGS="$CPPFLAGS" + ss_save_CXXFLAGS="$CXXFLAGS" + ss_save_LDFLAGS="$LDFLAGS" + ss_save_LIBS="$LIBS" + CPPFLAGS="-I$SS_X_INCDIR -I$SS_QT3_INCDIR -I$SS_KDE_INCDIR $CPPFLAGS $X_CFLAGS" + CXXFLAGS="-O2 -Wall $CXXFLAGS" + LIBS="-L$SS_KDE_LIBDIR -L$SS_X_LIBDIR $SS_X_LDFLAGS $SS_X_LIBLINK -L$SS_QT3_LIBDIR $LIBS -lsoundserver_idl -lkdecore -l$SS_QTLIB_NAME" + if test "$SS_LINK_TO_LIBDL" = "yes"; then + LIBS="$LIBS -ldl"; + fi + LDFLAGS="-s $LDFLAGS" + AC_TRY_LINK([ + #include + ],[ + Arts::Dispatcher * d = new Arts::Dispatcher(); + Arts::SimpleSoundServer *server = new Arts::SimpleSoundServer(Arts::Reference("global:Arts_SimpleSoundServer")); + ], + SS_ARTS_LINKED_OK="TRUE", + SS_ARTS_LINKED_OK="FALSE" + ) + if test "$SS_ARTS_LINKED_OK" = "FALSE"; then + AC_MSG_RESULT(failed) + else + AC_MSG_RESULT(success) + AC_DEFINE([COMPILE_ARTS_SUPPORT], 1, [define if you want to enable the Arts daemon support]) + SS_LINK_TO_LIBARTS="true" + SS_BUILD_FLAGS="r$SS_BUILD_FLAGS" + fi + LIBS="$ss_save_LIBS" + LDFLAGS="$ss_save_LDFLAGS" + CXXFLAGS="$ss_save_CXXFLAGS" + CPPFLAGS="$ss_save_CPPFLAGS" + fi + else + SS_DISABLE_ARTS_SUPPORT="true" + AC_MSG_RESULT([no KDE so no Arts]) + fi +]) + + +dnl ################################################################################################################### +dnl ### INTERFACE ADDRESS STUFF +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_IFADDR_STUFF], +[ + AC_MSG_CHECKING([if we can get interface addresses]) + + AC_TRY_LINK([ + #include + #include + #include + #include + #include + #include + ],[ + struct ifreq ifr; + int ret; + struct sockaddr * sa; + ret = IFNAMSIZ; + ret = ioctl(ret,SIOCGIFADDR,&ifr); + if(ifr.ifr_name != 0)sa = (struct sockaddr *)&(ifr.ifr_addr); + ], + eval "SS_DISABLE_IFADDR=false" + , + eval "SS_DISABLE_IFADDR=true" + ) + + if test "$SS_DISABLE_IFADDR" = "true"; then + AC_MSG_RESULT("no") + else + AC_MSG_RESULT("yes") + AC_DEFINE([COMPILE_GET_INTERFACE_ADDRESS], 1, [define if you have the SIOCGIFADDR ioctl and the related headers]) + fi +]) + +dnl ################################################################################################################### +dnl ### PTHREAD +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_CHECK_THREAD_STUFF], +[ + SS_THREAD_LIBLINK="" + + AC_MSG_CHECKING([if you want to use the solaris lthread]) + SS_DO_IT="false" + AC_ARG_WITH(solaris-lthread, [ --with-solaris-lthread Use the Solaris native libthread],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_THREAD_LIBLINK="-lthread" + AC_DEFINE([COMPILE_THREADS_USE_SOLARIS_LIBTHREAD], 1, [define if you want to use the solaris libthread]) + else + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([if you want to use freebsd native pthread support]) + SS_DO_IT="false" + + AC_ARG_WITH(freebsd-pthread, [ --with-freebsd-pthread Use the FreeBSD native libc_r for threading],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_THREAD_LIBLINK="-pthread" + AC_DEFINE([COMPILE_THREADS_USE_POSIX], 1, [define if you want to use the pthreads library]) + else + AC_MSG_RESULT(no..using lpthread) + SS_THREAD_LIBLINK="-lpthread" + AC_DEFINE([COMPILE_THREADS_USE_POSIX], 1, [define if you want to use the pthreads library]) + fi + + AC_MSG_CHECKING([if your pthread implementation works]) + SS_DO_IT="false" + AC_ARG_WITH(no-pthread-check, [ --with-no-pthread-check Do not check if pthreads stuff compiles],SS_DO_IT="true") + + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes, trusting you) + else + SS_SAVE_LIBS="$LIBS" + LIBS="$SS_THREAD_LIBLINK" + AC_TRY_LINK([ + #include + ],[ + pthread_mutex_lock(0); + ], + eval "SS_PTHREAD_OK=yes" + , + eval "SS_PTHREAD_OK=no" + ) + LIBS="$SS_SAVE_LIBS" + + if test "$SS_PTHREAD_OK" = "yes"; then + AC_MSG_RESULT(yes, it seems to) + else + AC_MSG_RESULT(["FAILED"]) + AC_SS_SET_REDINK + if test "$SS_THREAD_LIBLINK" = "-pthread"; then + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Failed to compile the pthread test program." + echo "### You have specified to use the native FreeBSD libc_r for threading" + echo "### but it looks that this does not work." + echo "### Make sure that you have libc_r floating around your system" + echo "### and that the -pthread special gcc flag works." + echo "### (You need to use the native FreeBSD gcc compiler for this to work)" + echo "################################################################################" + else + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Failed to compile the pthread test program." + echo "### It looks that you either don't have libpthread installed or" + echo "### it is not reachable by the linker." + echo "### Make sure that libpthread is in /lib or /usr/lib." + echo "### If you're on solaris you might try the --with-solaris-lthread" + echo "### configure option. If you're on FreeBSD you should use" + echo "### --with-freebsd-pthread." + echo "### Good luck :)" + echo "################################################################################" + fi + AC_SS_SET_NORMALINK + AC_MSG_ERROR(["This was fatal...aborting"]) + fi + fi + fi +]) + +dnl ################################################################################################################### +dnl ### X +dnl ################################################################################################################### + + +AC_DEFUN([AC_SS_FIND_X], +[ + SS_DISABLE_X_SUPPORT="false" + + AC_MSG_CHECKING([if you want to ignore X at all]) + AC_ARG_ENABLE(x-support, [ --disable-x-support Ignore X Windows completely],SS_DISABLE_X_SUPPORT="true") + + if test $SS_DISABLE_X_SUPPORT = "true"; then + AC_DEFINE([COMPILE_NO_X], 1, [define if you want to ignore X Windows completely]) + SS_X_INCDIR="/usr/include" + SS_X_LIBDIR="/usr/lib" + SS_X_LDFLAGS="" + SS_X_CPPFLAGS="" + SS_X_LIBLINK="" + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no, proceeding with checks) + AC_PATH_XTRA + + if test -n "$no_x"; then + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the X libraries." + echo "### Make sure that X is installed on your system and try to run configure again," + echo "### this time passing the --x-includes and --x-libraries options." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which checks have failed and maybe more about the" + echo "### reason of the failure." + echo "###" + echo "### If you use an environment that does not require X support such as Qt-Mac" + echo "### you may try to rerun configure with --disable-x-support" + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + # Set the X include and lib dir + SS_X_INCDIR="$x_includes" + SS_X_LIBDIR="$x_libraries" + SS_X_LIBLINK="-lX11 -lXext" + + if test -z "$SS_X_INCDIR"; then + # Ops... X headers not found ? + AC_TRY_COMPILE([ + #include + ],[ + Display * d = XOpenDisplay(0); + XCloseDisplay(d); + ], + eval "ss_x_incdir_found=yes" + , + eval "ss_x_incdir_found=no" + ) + + if test "$ss_x_incdir_found" = "no"; then + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the X headers." + echo "### Possible reasons:" + echo "### 1) You miss the X server development files (Xlib.h for example)" + echo "###" + echo "### 2) Autoconf/Automake wasn't able to find the headers" + echo "### for some ugly reason." + echo "###" + echo "### You might try looking for a file named Xlib.h in your hard-drive" + echo "### and try passing the --x-includes option to ./configure" + echo "### Remember that if you find Xlib.h in /somepath/include/X11/Xlib.h" + echo "### Then you must pass --x-includes=/somepath/include to ./configure" + echo "### For example, my Xlib.h is in /usr/X11R6/include/X11/Xlib.h" + echo "### then i would try: ./configure --x-includes=/usr/X11R6/include" + echo "### If you can't find Xlib.h on your hard drive then install the X-devel" + echo "### package from your distribution." + echo "### If Xlib.h is there and --x-includes doesn't help, well , there is something" + echo "### wrong with X , autoconf or automake." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which checks have failed and maybe more about the" + echo "### reason of the failure." + echo "###" + echo "### If you use an environment that does not require X support such as Qt-Mac" + echo "### you may try to rerun configure with --disable-x-support" + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + # We can compile X programs without any additional path... use a dummy include path then + # Should we print a warning ? + SS_X_INCDIR="/usr/include" + fi + fi + + + if test -z "$SS_X_LIBDIR"; then + # Ops... X libs not found ? + SS_SAVE_LIBS="$LIBS" + SS_SAVE_CFLAGS="$CFLAGS" + SS_SAVE_CPPFLAGS="$CPPFLAGS" + SS_SAVE_CXXFLAGS="$CXXFLAGS" + + CFLAGS="-I$SS_X_INCDIR" + CPPFLAGS="$CFLAGS" + CXXFLAGS="$CFLAGS" + LIBS="$SS_X_LIBLINK" + AC_TRY_LINK([ + #include + ],[ + Display * d = XOpenDisplay(0); + XCloseDisplay(d); + ], + eval "ss_x_libdir_found=yes" + , + eval "ss_x_libdir_found=no" + ) + LIBS="$SS_SAVE_LIBS" + CFLAGS="$SS_SAVE_CFLAGS" + CPPFLAGS="$SS_SAVE_CPPFLAGS" + CXXFLAGS="$SS_SAVE_CXXFLAGS" + + if test "$ss_x_libdir_found" = "no"; then + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the X libraries." + echo "### Possible reasons:" + echo "### 1) You have no X server : KVIrc can't run on this system" + echo "###" + echo "### 2) Autoconf/Automake wasn't able to find the libraries" + echo "### for some ugly reason." + echo "###" + echo "### You might try looking for a file named libX11.so in your hard-drive" + echo "### and try passing the --x-libraries option to ./configure" + echo "### Remember that if you find libX11.so in /somepath/lib/libX11.so" + echo "### Then you must pass --x-libraries=/somepath/lib to ./configure" + echo "### For example, my libX11.so is in /usr/X11R6/lib/libX11.so" + echo "### then i would try: ./configure --x-libraries=/usr/X11R6/lib" + echo "### If you can't find libX11.so on your hard drive then install the X server" + echo "### package from your distribution." + echo "### If libX11.so is there and --x-libraries doesn't help, well , there is something" + echo "### wrong with X , autoconf or automake." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which checks have failed and maybe more about the" + echo "### reason of the failure." + echo "###" + echo "### If you use an environment that does not require X support such as Qt-Mac" + echo "### you may try to rerun configure with --disable-x-support" + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + # We can link X programs without any additional path... use a dummy lib path then + # Should we print a warning ? + SS_X_LIBDIR="/usr/lib" + fi + fi + + # Add any extra libs needed + SS_X_LDFLAGS="" + + if test -n "$X_PRE_LIBS"; then + SS_X_LDFLAGS="$X_PRE_LIBS $SS_X_LDFLAGS" + fi + + if test -n "$X_EXTRA_LIBS"; then + SS_X_LDFLAGS="$SS_X_LDFLAGS $X_EXTRA_LIBS" + fi + + if test -n "$X_LIBS"; then + SS_X_LDFLAGS="$SS_X_LDFLAGS $X_LIBS" + fi + + # Add any extra gcc flags + SS_X_CPPFLAGS=$X_CFLAGS + fi + fi +]) + +dnl ################################################################################################################### +dnl ### QT +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_FIND_QT], +[ + AC_ARG_ENABLE(qt-check, + AC_HELP_STRING([--disable-qt-check],[Do not check if Qt and X compile]), + SS_CHECK_QTX_COMPILE="$withval",SS_CHECK_QTX_COMPILE="NOTGIVEN") + + AC_ARG_ENABLE(qt4, + AC_HELP_STRING([--enable-qt4],[Enable WORK IN PROGRESS Qt4 support]), + SS_USE_QT4="$withval",SS_USE_QT4="no") + + if test "$SS_USE_QT4" = "no"; then + + AC_SS_FIND_QT3_NAME + AC_SS_FIND_QT3_GENERAL_DIR + AC_SS_FIND_QT3_LIBRARY_DIR + AC_SS_FIND_QT3_INCLUDE_DIR + AC_SS_FIND_QT3_MOC + AC_SS_FIND_QT3_MT + + if test "$SS_CHECK_QTX_COMPILE" = "NOTGIVEN"; then + AC_SS_ENSURE_CAN_COMPILE_X_AND_QT3 + fi + else + + AC_SS_FIND_QT4_GENERAL_DIR + AC_SS_FIND_QT4_LIBRARY_DIR + AC_SS_FIND_QT4_INCLUDE_DIR + AC_SS_FIND_QT4_MOC + + + if test "$SS_CHECK_QTX_COMPILE" = "NOTGIVEN"; then + AC_SS_ENSURE_CAN_COMPILE_X_AND_QT4 + fi + + fi +]) + +AC_DEFUN([AC_SS_FIND_QT3_NAME], +[ + AC_MSG_CHECKING([for the Qt library name]) + AC_ARG_WITH(qt-name,[ --with-qt-name=NAME Use NAME instead of \"qt\" as Qt library name],SS_QTLIB_NAME="$withval",SS_QTLIB_NAME="qt") + AC_MSG_RESULT("$SS_QTLIB_NAME") +]) + +AC_DEFUN([AC_SS_FIND_QT3_GENERAL_DIR], +[ + AC_MSG_CHECKING([for the general Qt3.x directory]) + + ss_qt_general_test_dirs="/usr/local /usr /usr/X11R6 /usr/lib /opt /opt/kde /kde /usr/kde /usr/build /usr/src /usr/local/lib /" + ss_qt_general_test_dirs="$ss_qt_general_test_dirs /usr/local/kde /usr/opt/kde" + + if test -n "$HOME"; then + ss_qt_general_test_dirs="$ss_qt_general_test_dirs $HOME $HOME/lib" + fi + + if test -n "$QTDIR"; then + ss_qt_general_test_dirs="$QTDIR $ss_qt_general_test_dirs" + fi + + ss_qt_general_test_path_suffix="qt$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT3_MAJOR_VERSION_REQUIRED$SS_QT3_MINOR_VERSION_REQUIRED$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT3_MAJOR_VERSION_REQUIRED$SS_QT3_MINOR_VERSION_REQUIRED$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT3_MAJOR_VERSION_REQUIRED$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT3_MAJOR_VERSION_REQUIRED$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix lib" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt ." + + AC_SS_FIND_FILE_PATH_EXT($SS_QT3_GENERAL_FILE_TO_SEARCH,$ss_qt_general_test_dirs,$ss_qt_general_test_path_suffix,SS_QT3_GENERAL_DIR) + if test "$SS_QT3_GENERAL_DIR" = "FAILED"; then + AC_MSG_RESULT([failed...continuing with normal checks]) + unset SS_QT3_GENERAL_DIR + else + AC_MSG_RESULT([Seems to be $SS_QT3_GENERAL_DIR]) + fi +]) + +AC_DEFUN([AC_SS_FIND_QT4_GENERAL_DIR], +[ + AC_MSG_CHECKING([for the general Qt4.x directory]) + + ss_qt_general_test_dirs="/usr/local /usr /usr/X11R6 /usr/lib /opt /opt/kde /kde /usr/kde /usr/build /usr/src /usr/local/lib /" + ss_qt_general_test_dirs="$ss_qt_general_test_dirs /usr/local/kde /usr/opt/kde /usr/lib/qt4 /usr/local/lib/qt4" + + if test -n "$HOME"; then + ss_qt_general_test_dirs="$ss_qt_general_test_dirs $HOME $HOME/lib" + fi + + if test -n "$QTDIR"; then + ss_qt_general_test_dirs="$QTDIR $ss_qt_general_test_dirs" + fi + + ss_qt_general_test_path_suffix="qt$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED.$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED.$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT4_MAJOR_VERSION_REQUIRED$SS_QT4_MINOR_VERSION_REQUIRED$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED.$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT4_MAJOR_VERSION_REQUIRED$SS_QT4_MINOR_VERSION_REQUIRED$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT4_MAJOR_VERSION_REQUIRED$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT4_MAJOR_VERSION_REQUIRED$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt.$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt-$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix lib" + ss_qt_general_test_path_suffix="$ss_qt_general_test_path_suffix qt ." + + AC_SS_FIND_FILE_PATH_EXT($SS_QT4_GENERAL_FILE_TO_SEARCH,$ss_qt_general_test_dirs,$ss_qt_general_test_path_suffix,SS_QT4_GENERAL_DIR) + if test "$SS_QT4_GENERAL_DIR" = "FAILED"; then + AC_MSG_RESULT([failed...continuing with normal checks]) + unset SS_QT4_GENERAL_DIR + else + AC_MSG_RESULT([Seems to be $SS_QT4_GENERAL_DIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT3_INCLUDE_DIR], +[ + AC_ARG_WITH(qt-include-dir,[ --with-qt-include-dir path to the Qt 3.x headers ],SS_QT3_INCDIR="$withval",SS_QT3_INCDIR="NOTGIVEN") + if test "$SS_QT3_INCDIR" = "NOTGIVEN"; then + + AC_MSG_CHECKING([for the Qt 3.x header files]) + + ss_qt_include_test_dirs="$SS_QT3_GENERAL_DIR/include /include /usr/include /usr/local/include /usr/qt/include /usr/local/qt/include /usr/X11R6/include /usr/lib/qt/include /usr/lib/qt /usr/include/X11" + test -n "$QTDIR" && ss_qt_include_test_dirs="$QTDIR/include $QTDIR $ss_qt_include_test_dirs" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/qt /usr/include/qt3 /usr/local/include/qt /include/qt /usr/X11R6/include/qt /usr/build/qt/include" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/qt$SS_QT3_MAJOR_VERSION_REQUIRED /usr/include/qt-$SS_QT3_MAJOR_VERSION_REQUIRED /usr/local/include/qt$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /include/qt$SS_QT3_MAJOR_VERSION_REQUIRED /usr/X11R6/include/qt$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/X11/qt$SS_QT3_MAJOR_VERSION_REQUIRED /opt/qt /opt/kde/qt" + + AC_SS_FIND_FILE_PATH($SS_QT3_INCLUDE_FILE_TO_SEARCH,$ss_qt_include_test_dirs,SS_QT3_INCDIR) + + if test "$SS_QT3_INCDIR" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the qt 3.x header files." + echo "### Make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### Try to run configure again, this time passing the --with-qt-include-dir" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + AC_MSG_RESULT([found in $SS_QT3_INCDIR]) + fi + + else + AC_MSG_RESULT([using user supplied path for the Qt 3.x include files $SS_QT3_INCDIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT4_INCLUDE_DIR], +[ + AC_ARG_WITH(qt4-include-dir,[ --with-qt4-include-dir path to the Qt 4.x headers ],SS_QT4_INCDIR="$withval",SS_QT4_INCDIR="NOTGIVEN") + if test "$SS_QT4_INCDIR" = "NOTGIVEN"; then + + AC_MSG_CHECKING([for the Qt 4.x header files]) + + ss_qt_include_test_dirs="$SS_QT4_GENERAL_DIR/include /include /usr/include /usr/local/include /usr/qt/include /usr/include/qt4 /usr/qt4/include /usr/local/qt/include /usr/X11R6/include /usr/lib/qt/include /usr/lib/qt /usr/include/X11" + test -n "$QTDIR" && ss_qt_include_test_dirs="$QTDIR/include $QTDIR $ss_qt_include_test_dirs" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/qt /usr/include/qt4 /usr/local/include/qt /include/qt /usr/X11R6/include/qt /usr/build/qt/include" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/qt$SS_QT4_MAJOR_VERSION_REQUIRED /usr/include/qt-$SS_QT4_MAJOR_VERSION_REQUIRED /usr/local/include/qt$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /include/qt$SS_QT4_MAJOR_VERSION_REQUIRED /usr/X11R6/include/qt$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_include_test_dirs="$ss_qt_include_test_dirs /usr/include/X11/qt$SS_QT4_MAJOR_VERSION_REQUIRED /opt/qt /opt/kde/qt" + + AC_SS_FIND_FILE_PATH($SS_QT4_INCLUDE_FILE_TO_SEARCH,$ss_qt_include_test_dirs,SS_QT4_INCDIR) + + if test "$SS_QT4_INCDIR" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the qt 4.x header files." + echo "### Make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### Try to run configure again, this time passing the --with-qt4-include-dir" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + AC_MSG_RESULT([found in $SS_QT4_INCDIR]) + fi + + else + AC_MSG_RESULT([using user supplied path for the Qt 4.x include files $SS_QT4_INCDIR]) + fi + + SS_QT4_INCDIRECTORIES="-I$SS_QT4_INCDIR -I$SS_QT4_INCDIR/Qt/ -I$SS_QT4_INCDIR/QtCore/ -I$SS_QT4_INCDIR/QtGui/"; +]) + + +AC_DEFUN([AC_SS_FIND_QT3_LIBRARY_DIR], +[ + AC_ARG_WITH(qt-library-dir,[ --with-qt-library-dir path to the Qt 3.x library ],SS_QT3_LIBDIR="$withval",SS_QT3_LIBDIR="NOTGIVEN") + if test "$SS_QT3_LIBDIR" = "NOTGIVEN"; then + AC_MSG_CHECKING([for the Qt library]) + + ss_qt_library_test_dirs="$SS_QT3_GENERAL_DIR/lib /lib /usr/lib /usr/local/lib /usr/qt/lib /usr/local/qt/lib /usr/X11R6/lib /usr/lib/qt/lib /usr/lib/qt /usr/local/lib/qt/lib" + test -n "$QTDIR" && ss_qt_library_test_dirs="$QTDIR/lib $QTDIR $ss_qt_library_test_dirs" + ss_qt_library_test_dirs="$ss_qt_library_test_dirs /usr/local/lib/qt /usr/X11R6/lib/qt /usr/build/qt/lib /opt/lib /opt/qt/lib" + + ss_qt_libs_to_find="lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.so.$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.so" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.$SS_QT3_MAJOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.a" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME.a" + + AC_SS_FIND_FILE_PATH($ss_qt_libs_to_find,$ss_qt_library_test_dirs,SS_QT3_LIBDIR) + + if test "$SS_QT3_LIBDIR" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the qt 3.x library file." + echo "### Make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### (Usually a greater version is OK too)" + echo "### Try to run configure again, this time passing the --with-qt-library-dir" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + AC_MSG_RESULT([found in $SS_QT3_LIBDIR]) + fi + else + AC_MSG_RESULT([using user supplied path for the Qt library $SS_QT3_LIBDIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT4_LIBRARY_DIR], +[ + AC_ARG_WITH(qt4-library-dir,[ --with-qt4-library-dir path to the Qt 4.x library ],SS_QT4_LIBDIR="$withval",SS_QT4_LIBDIR="NOTGIVEN") + if test "$SS_QT4_LIBDIR" = "NOTGIVEN"; then + AC_MSG_CHECKING([for the Qt 4.x libraries]) + + ss_qt_library_test_dirs="$SS_QT4_GENERAL_DIR/lib /lib /usr/lib /usr/local/lib /usr/qt/lib /usr/local/qt/lib /usr/X11R6/lib /usr/lib/qt/lib /usr/lib/qt /usr/local/lib/qt/lib" + test -n "$QTDIR" && ss_qt_library_test_dirs="$QTDIR/lib $QTDIR $ss_qt_library_test_dirs" + ss_qt_library_test_dirs="$ss_qt_library_test_dirs /usr/local/lib/qt /usr/X11R6/lib/qt /usr/build/qt/lib /opt/lib /opt/qt/lib" + ss_qt_library_test_dirs="$ss_qt_library_test_dirs /usr/lib/qt4 /usr/local/lib/qt4 /usr/X11R6/lib/qt4" + ss_qt_library_test_dirs="$ss_qt_library_test_dirs /usr/build/qt4/lib /opt/qt4/lib" + + ss_qt_libs_to_find="libQtCore.so.$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED.$SS_QT4_PATCH_LEVEL_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.$SS_QT4_MAJOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.$SS_QT4_MAJOR_VERSION_REQUIRED.$SS_QT4_MINOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.$SS_QT4_MAJOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find libQtCore.so.a" + + AC_SS_FIND_FILE_PATH($ss_qt_libs_to_find,$ss_qt_library_test_dirs,SS_QT4_LIBDIR) + + if test "$SS_QT4_LIBDIR" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Can not find the qt 4.x library files." + echo "### Make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### (Usually a greater version is OK too)" + echo "### Try to run configure again, this time passing the --with-qt4-library-dir" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + AC_MSG_RESULT([found in $SS_QT4_LIBDIR]) + fi + else + AC_MSG_RESULT([using user supplied path for the Qt 4.x library $SS_QT4_LIBDIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT3_MOC], +[ + AC_ARG_WITH(qt-moc,[ --with-qt-moc filename of the Qt 3.x meta object compiler ],SS_QT3_MOC="$withval",SS_QT3_MOC="NOTGIVEN") + + if test "$SS_QT3_MOC" = "NOTGIVEN"; then + AC_MSG_CHECKING([for the Qt 3.x moc]) + + unset SS_QT3_MOC + ss_moc_test_dirs="$QTDIR/bin $PATH /usr/bin /bin /usr/local/bin /usr/X11R6/bin /usr/lib/qt/bin /usr/local/qt/bin /usr/X11R6/qt/bin /usr/qt/bin /usr/build/qt/bin" + if test -n "$SS_QT3_GENERAL_DIR"; then + ss_moc_test_dirs="$SS_QT3_GENERAL_DIR/bin $ss_moc_test_dirs" + fi + + AC_SS_FIND_FILE_PATH(moc,$ss_moc_test_dirs,SS_QT3_MOC) + + if test "$SS_QT3_MOC" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### The Qt meta object compiler can not be found." + echo "### Make sure that qt is correctly installed on your system, it is on your path," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### Try to run configure again, this time passing the --with-qt-moc" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + SS_QT3_MOC="$SS_QT3_MOC/moc" + AC_MSG_RESULT([found as $SS_QT3_MOC]) + fi + else + AC_MSG_RESULT([trusting you: using $SS_QT3_MOC]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT4_MOC], +[ + AC_ARG_WITH(qt4-moc,[ --with-qt4-moc filename of the Qt 4.x meta object compiler ],SS_QT4_MOC="$withval",SS_QT4_MOC="NOTGIVEN") + + if test "$SS_QT4_MOC" = "NOTGIVEN"; then + AC_MSG_CHECKING([for the Qt 4.x moc]) + + unset SS_QT4_MOC + ss_moc_test_dirs="$QTDIR/bin $PATH /usr/bin /bin /usr/local/bin /usr/X11R6/bin /usr/lib/qt/bin /usr/local/qt/bin /usr/X11R6/qt/bin /usr/qt/bin /usr/build/qt/bin" + if test -n "$SS_QT4_GENERAL_DIR"; then + ss_moc_test_dirs="$SS_QT4_GENERAL_DIR/bin $ss_moc_test_dirs" + fi + + AC_SS_FIND_FILE_PATH(moc,$ss_moc_test_dirs,SS_QT4_MOC) + + if test "$SS_QT4_MOC" = "FAILED"; then + AC_MSG_RESULT([FAILED]) + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### The Qt 4.x meta object compiler can not be found." + echo "### Make sure that qt is correctly installed on your system, it is on your path," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### In particular you should make sure that the moc compiler is NOT the one" + echo "### shipped with Qt 3.x." + echo "### Try to run configure again, this time passing the --with-qt4-moc" + echo "### option (see ./configure --help)." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + else + SS_QT4_MOC="$SS_QT4_MOC/moc" + AC_MSG_RESULT([found as $SS_QT4_MOC]) + fi + else + AC_MSG_RESULT([trusting you: using $SS_QT4_MOC]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_QT3_MT], +[ + AC_ARG_ENABLE(qt-mt,[ --disable-qt-mt ignore the threaded version of Qt],SS_QT3_NOMT="$withval",SS_QT3_NOMT="NOTGIVEN") + + AC_MSG_CHECKING([for the multithreaded version of Qt]) + + if test "$SS_QT3_NOMT" = "NOTGIVEN"; then + ss_qt_libs_to_find="lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so.$SS_QT3_MAJOR_VERSION_REQUIRED" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.so" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.$SS_QT3_PATCH_LEVEL_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.$SS_QT3_MINOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.$SS_QT3_MAJOR_VERSION_REQUIRED.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.dylib" + ss_qt_libs_to_find="$ss_qt_libs_to_find lib$SS_QTLIB_NAME-mt.a" + + AC_SS_FIND_FILE_PATH($ss_qt_libs_to_find,$SS_QT3_LIBDIR,SS_QTMTLIBDIR) + if test "$SS_QTMTLIBDIR" = "FAILED"; then + AC_MSG_RESULT([not found]) + else + AC_MSG_RESULT([seems to be available]) + SS_QTLIB_NAME="$SS_QTLIB_NAME-mt" + fi + else + AC_MSG_RESULT([disabled by user]) + fi +]) + +AC_DEFUN([AC_SS_ENSURE_CAN_COMPILE_X_AND_QT3], +[ + + AC_MSG_CHECKING([if we can compile an X-Qt 3.x application]) + AC_LANG_CPLUSPLUS + ss_save_CPPFLAGS="$CPPFLAGS" + ss_save_CXXFLAGS="$CXXFLAGS" + ss_save_LDFLAGS="$LDFLAGS" + ss_save_LIBS="$LIBS" + if test -n "$SS_X_INCDIR"; then + CPPFLAGS="-I$SS_X_INCDIR" + else + CPPFLAGS="" + fi + CPPFLAGS="$CPPFLAGS -I$SS_QT3_INCDIR" + CXXFLAGS="-O2 -Wall $CXXFLAGS" + if test -n "$SS_X_LIBDIR"; then + LIBS="-L$SS_X_LIBDIR" + else + LIBS="" + fi + LIBS="$LIBS -L$SS_QT3_LIBDIR -l$SS_QTLIB_NAME" + if test -n "$SS_X_LDFLAGS"; then + LIBS="$LIBS $SS_X_LDFLAGS" + fi + if test -n "$SS_X_LIBLINK"; then + LIBS="$LIBS $SS_X_LIBLINK" + fi + LDFLAGS="-s $LDFLAGS" + AC_TRY_LINK([ + #include + #if (QT_VERSION < 221) + #error "Bad qt version: too old" + #endif + ],[return 0; ],SS_QTX_LINKED_OK="TRUE",SS_QTX_LINKED_OK="FALSE") + if test "$SS_QTX_LINKED_OK" = "FALSE"; then + AC_MSG_RESULT([FAILED]); + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Failed to compile the Qt library test program." + echo "### This may be a bad sign :)" + echo "### First of all, make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### Ensure that you have only one copy of qt visible at a time." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### The CPPFLAGS used were:" + for a_flag in $CPPFLAGS ; do + echo "### $a_flag" + done + echo "### The CXXFLAGS used were:" + for a_flag in $CXXFLAGS ; do + echo "### $a_flag" + done + echo "### The LIBS used were:" + for a_flag in $LIBS ; do + echo "### $a_flag" + done + echo "### The LDFLAGS used were:" + for a_flag in $LDFLAGS ; do + echo "### $a_flag" + done + echo "### If you're sure that qt is correctly installed , you may force configure" + echo "### to skip this check and try to compile kvirc anyway." + echo "### Try using the --without-qt-check option." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + fi + LIBS="$ss_save_LIBS" + LDFLAGS="$ss_save_LDFLAGS" + CXXFLAGS="$ss_save_CXXFLAGS" + CPPFLAGS="$ss_save_CPPFLAGS" + AC_MSG_RESULT([success]) +]) + + +AC_DEFUN([AC_SS_ENSURE_CAN_COMPILE_X_AND_QT4], +[ + + AC_MSG_CHECKING([if we can compile an X-Qt 4.x application]) + AC_LANG_CPLUSPLUS + ss_save_CPPFLAGS="$CPPFLAGS" + ss_save_CXXFLAGS="$CXXFLAGS" + ss_save_LDFLAGS="$LDFLAGS" + ss_save_LIBS="$LIBS" + if test -n "$SS_X_INCDIR"; then + CPPFLAGS="-I$SS_X_INCDIR" + else + CPPFLAGS="" + fi + CPPFLAGS="$CPPFLAGS $SS_QT4_INCDIRECTORIES" + CXXFLAGS="-O2 -Wall $CXXFLAGS" + if test -n "$SS_X_LIBDIR"; then + LIBS="-L$SS_X_LIBDIR" + else + LIBS="" + fi + LIBS="$LIBS -L$SS_QT4_LIBDIR -lQtCore" + if test -n "$SS_X_LDFLAGS"; then + LIBS="$LIBS $SS_X_LDFLAGS" + fi + if test -n "$SS_X_LIBLINK"; then + LIBS="$LIBS $SS_X_LIBLINK" + fi + LDFLAGS="-s $LDFLAGS" + AC_TRY_LINK([ + #include + #if (QT_VERSION < 0x040000) + #error "Bad qt version: too old" + #endif + ],[return 0; ],SS_QTX_LINKED_OK="TRUE",SS_QTX_LINKED_OK="FALSE") + if test "$SS_QTX_LINKED_OK" = "FALSE"; then + AC_MSG_RESULT([FAILED]); + AC_SS_SET_REDINK + echo "################################################################################" + echo "### CONFIGURE ERROR:" + echo "### Failed to compile the Qt 4.x library test program." + echo "### This may be a bad sign :)" + echo "### First of all, make sure that qt is correctly installed on your system," + echo "### and the qt version is the one requested by this version of kvirc." + echo "### Ensure that you have only one copy of qt visible at a time." + echo "### You may also take a look at the config.log file in this directory," + echo "### that will tell you which check has failed and maybe more about the reason" + echo "### of the failure." + echo "### The CPPFLAGS used were:" + for a_flag in $CPPFLAGS ; do + echo "### $a_flag" + done + echo "### The CXXFLAGS used were:" + for a_flag in $CXXFLAGS ; do + echo "### $a_flag" + done + echo "### The LIBS used were:" + for a_flag in $LIBS ; do + echo "### $a_flag" + done + echo "### The LDFLAGS used were:" + for a_flag in $LDFLAGS ; do + echo "### $a_flag" + done + echo "### If you're sure that qt is correctly installed , you may force configure" + echo "### to skip this check and try to compile kvirc anyway." + echo "### Try using the --without-qt-check option." + echo "### If you're feeling that this may be a bug in this configure script" + echo "### and want to report this to me , please include your configure script," + echo "### the config.log file as well as the complete configure output." + echo "################################################################################" + AC_SS_SET_NORMALINK + AC_MSG_ERROR([This was a fatal one...aborting]) + fi + LIBS="$ss_save_LIBS" + LDFLAGS="$ss_save_LDFLAGS" + CXXFLAGS="$ss_save_CXXFLAGS" + CPPFLAGS="$ss_save_CPPFLAGS" + AC_MSG_RESULT([success]) +]) + + +dnl ################################################################################################################### +dnl ### KDE +dnl ################################################################################################################### + +AC_DEFUN([AC_SS_FIND_KDE], +[ + AC_SS_CHECK_IF_KDE_IS_REQUESTED + if test "$SS_KDE_REQUESTED" = "yes"; then + AC_SS_FIND_KDE_GENERAL_DIR + if test "$SS_KDE_REQUESTED" = "yes"; then + AC_SS_FIND_KDE_SERVICES_DIR + AC_SS_FIND_KDE_LIBRARY_DIR + if test "$SS_KDE_REQUESTED" = "yes"; then + AC_SS_FIND_KDE_INCLUDE_DIR + if test "$SS_KDE_REQUESTED" = "yes"; then + AC_SS_ENSURE_CAN_COMPILE_X_QT3_AND_KDE + fi + fi + fi + fi +]) + +AC_DEFUN([AC_SS_CHECK_IF_KDE_IS_REQUESTED], +[ + AC_MSG_CHECKING([if KDE support is requested]) + if test "$SS_USE_QT4" = "no"; then + SS_KDE_REQUESTED="yes" + AC_ARG_WITH(kde-support,[ --without-kde-support Disable the KDE support even if it is detected ],SS_KDE_REQUESTED="$withval") + if test "$SS_KDE_REQUESTED" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + else + SS_KDE_REQUESTED="no" + AC_MSG_RESULT([unsupported with qt 4.x]) + fi +]) + +AC_DEFUN([AC_SS_FIND_KDE_GENERAL_DIR], +[ + AC_MSG_CHECKING([for the general KDE directory]) + ss_kde_general_test_dirs="/usr /usr/local /usr /usr/local /usr/build /usr/X11R6 /opt /usr/opt /usr/lib /usr/lib /usr/src /usr/lib /usr/local/lib" + if test -n "$HOME"; then + ss_kde_general_test_dirs="$ss_kde_general_test_dirs $HOME $HOME/lib" + fi + if test -n "$KDEDIR"; then + ss_kde_general_test_dirs="$KDEDIR $ss_kde_general_test_dirs" + fi + ss_kde_general_test_path_suffix="kde kde3.0 kde3 KDE Kde KDE3 kde3 ." + + AC_SS_FIND_FILE_PATH_EXT($SS_KDE_GENERAL_FILE_TO_SEARCH,$ss_kde_general_test_dirs,$ss_kde_general_test_path_suffix,SS_KDE_GENERAL_DIR) + + if test "$SS_KDE_GENERAL_DIR" = "FAILED"; then + AC_MSG_RESULT([failed...continuing with normal checks]) + unset SS_KDE_GENERAL_DIR + else + AC_MSG_RESULT([Seems to be $SS_KDE_GENERAL_DIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_KDE_SERVICES_DIR], +[ + AC_ARG_WITH(kde-services-dir,[ --with-kde-services-dir path to the KDE protocol services dir ],SS_KDE_SERVICESDIR="$withval",SS_KDE_SERVICESDIR="NOTGIVEN") + if test "$SS_KDE_SERVICESDIR" = "NOTGIVEN"; then + + AC_MSG_CHECKING([for KDE services directory]) + + ss_kde_services_test_dirs="/usr/share/services /usr/local/share/services /usr/kde/share/services /usr/local/kde/share/services /usr/X11R6/share/services /opt/kde/share/services /usr/lib/kde/share/services" + test -n "$KDEDIR" && ss_kde_services_test_dirs="$KDEDIR/share/services $ss_kde_services_test_dirs" + ss_kde_services_test_dirs="$ss_kde_services_test_dirs /usr/share/kde/services" + test -n "$SS_KDE_GENERAL_DIR" && ss_kde_services_test_dirs="$SS_KDE_GENERAL_DIR/share/services $ss_kde_services_test_dirs" + + AC_SS_FIND_FILE_PATH("http.protocol",$ss_kde_services_test_dirs,SS_KDE_SERVICESDIR) + + if test "$SS_KDE_SERVICESDIR" = "FAILED"; then + SS_KDE_SERVICESDIR="" + AC_MSG_RESULT([unknown]) + else + AC_MSG_RESULT([found in $SS_KDE_SERVICESDIR]) + fi + + else + AC_MSG_RESULT([using user supplied path for the KDE services dir $SS_KDE_SERVICESDIR]) + fi +]) + + +AC_DEFUN([AC_SS_FIND_KDE_INCLUDE_DIR], +[ + AC_ARG_WITH(kde-include-dir,[ --with-kde-include-dir path to the KDE headers ],SS_KDE_INCDIR="$withval",SS_KDE_INCDIR="NOTGIVEN") + if test "$SS_KDE_INCDIR" = "NOTGIVEN"; then + + AC_MSG_CHECKING([for KDE header files]) + + ss_kde_include_test_dirs="/include /usr/include /usr/local/include /usr/kde/include /usr/local/kde/include /usr/X11R6/include /opt/kde/include /usr/lib/kde/include /usr/lib/kde /usr/include/X11" + test -n "$KDEDIR" && ss_kde_include_test_dirs="$KDEDIR/include $KDEDIR $ss_kde_include_test_dirs" + ss_kde_include_test_dirs="$ss_kde_include_test_dirs /usr/include/kde /usr/local/include/kde /include/kde /usr/X11R6/include/kde /usr/build/kde/include" + ss_kde_include_test_dirs="$ss_kde_include_test_dirs /usr/include/kde2 /usr/local/include/kde2 /include/kde2 /usr/X11R6/include/kde2 /usr/include/X11/kde2" + test -n "$SS_KDE_GENERAL_DIR" && ss_kde_include_test_dirs="$SS_KDE_GENERAL_DIR/include $ss_kde_include_test_dirs" + + AC_SS_FIND_FILE_PATH($SS_KDE_INCLUDE_FILE_TO_SEARCH,$ss_kde_include_test_dirs,SS_KDE_INCDIR) + + if test "$SS_KDE_INCDIR" = "FAILED"; then + AC_MSG_RESULT("FAILED") + SS_KDE_REQUESTED="no" + SS_KDE_INCDIR="" + else + AC_MSG_RESULT([found in $SS_KDE_INCDIR]) + fi + + else + AC_MSG_RESULT([using user supplied path for the KDE include files $SS_KDE_INCDIR]) + fi + + if test -z "$SS_KDE_GENERAL_DIR"; then + # Set it.... we need it :)... + SS_KDE_GENERAL_DIR=`echo $SS_KDE_INCDIR | sed -e 's/\/include\$//'` + fi +]) + +AC_DEFUN([AC_SS_FIND_KDE_LIBRARY_DIR], +[ + AC_ARG_WITH(kde-library-dir,[ --with-kde-library-dir path to the KDE libraries ],SS_KDE_LIBDIR="$withval",SS_KDE_LIBDIR="NOTGIVEN") + if test "$SS_KDE_LIBDIR" = "NOTGIVEN"; then + AC_MSG_CHECKING([for the KDE libraries]) + + ss_kde_library_test_dirs="/lib /usr/lib /usr/local/lib /usr/kde/lib /opt/kde/lib /opt/lib /usr/opt/kde/lib /usr/local/kde/lib /usr/X11R6/lib /usr/lib/kde/lib /usr/lib/kde /usr/local/lib/kde/lib" + test -n "$KDEDIR" && ss_kde_library_test_dirs="$KDEDIR/lib $KDEDIR $ss_kde_library_test_dirs" + ss_kde_library_test_dirs="$ss_kde_library_test_dirs /usr/local/lib/kde /usr/X11R6/lib/kde /usr/build/kde/lib" + if test -n "$SS_KDE_GENERAL_DIR"; then + ss_kde_library_test_dirs="$SS_KDE_GENERAL_DIR/lib $ss_kde_library_test_dirs" + fi + + + AC_SS_FIND_FILE_PATH(libkdecore.so.6 libkdecore.so.5 libkdecore.so.4 libkdecore.so.3 libkdecore.so,$ss_kde_library_test_dirs,SS_KDE_LIBDIR) + if test "$SS_KDE_LIBDIR" = "FAILED"; then + AC_SS_FIND_FILE_PATH(libkdecore.so.8 libkdecore.so.7 libkdecore.so.4.0.0 libkdecore.so.4.1.0 libkdecore.so.4.2.0 ,$ss_kde_library_test_dirs,SS_KDE_LIBDIR) + if test "$SS_KDE_LIBDIR" = "FAILED"; then + # Try the senseless too + AC_SS_FIND_FILE_PATH(libkdecore.so.4.0.0 libkdecore.so.4.1.0 libkdecore.so.4.2.0 libkdecore.so.4.3.0,$ss_kde_library_test_dirs,SS_KDE_LIBDIR) + if test "$SS_KDE_LIBDIR" = "FAILED"; then + AC_SS_FIND_FILE_PATH(libkdecore.so.4.4.0 libkdecore.so.4.5.0 libkdecore.so.4.6.0 libkdecore.so.4.7.0 libkdecore.a,$ss_kde_library_test_dirs,SS_KDE_LIBDIR) + fi + fi + fi + + if test "$SS_KDE_LIBDIR" = "FAILED"; then + AC_MSG_RESULT("FAILED") + SS_KDE_REQUESTED="no" + SS_KDE_LIBDIR="" + else + AC_MSG_RESULT([found in $SS_KDE_LIBDIR]) + fi + else + AC_MSG_RESULT([using user supplied path for the KDE libraries $SS_KDE_LIBDIR]) + fi + + if test -z "$SS_KDE_GENERAL_DIR"; then + # Set it.... we need it :)... + SS_KDE_GENERAL_DIR=`echo $SS_KDE_LIBDIR | sed -e 's/\/lib\$//'` + fi +]) + +AC_DEFUN([AC_SS_ENSURE_CAN_COMPILE_X_QT3_AND_KDE], +[ + AC_ARG_WITH(kde-check,[ --without-kde-check Do not check if Qt,KDE and X compile ],SS_CHECK_QTX_COMPILE="$withval",SS_CHECK_KQTX_COMPILE="yes") + if test "$SS_CHECK_KQTX_COMPILE" = "yes"; then + AC_MSG_CHECKING(if we can compile an X-Qt-KDE application) + AC_LANG_CPLUSPLUS + ss_save_CPPFLAGS="$CPPFLAGS" + ss_save_CXXFLAGS="$CXXFLAGS" + ss_save_LDFLAGS="$LDFLAGS" + ss_save_LIBS="$LIBS" + if test -n "$SS_X_INCDIR"; then + CPPFLAGS="-I$SS_X_INCDIR" + else + CPPFLAGS="" + fi + CPPFLAGS="$CPPFLAGS -I$SS_X_INCDIR -I$SS_QT3_INCDIR -I$SS_KDE_INCDIR" + CXXFLAGS="-O2 -Wall $CXXFLAGS" + if test -n "$SS_X_LIBDIR"; then + LIBS="-L$SS_X_LIBDIR" + else + LIBS="" + fi + if test -n "$SS_X_LDFLAGS"; then + LIBS="$SS_X_LDFLAGS $LIBS" + fi + if test -n "$SS_X_LIBLINK"; then + LIBS="$LIBS $SS_X_LIBLINK" + fi + LIBS="-L$SS_KDE_LIBDIR -L$SS_QT3_LIBDIR -lkdecore -l$SS_QTLIB_NAME $LIBS" + if test "$SS_LINK_TO_LIBDL" = "yes"; then + LIBS="$LIBS -ldl"; + fi + LDFLAGS="-s $LDFLAGS" + AC_TRY_LINK([ + #include "kapp.h" + #include "kwin.h" + ],[ + int a = KWin::currentDesktop(); + KApplication app(a,0,"kvirc"); + ], + SS_KQTX_LINKED_OK="TRUE", + SS_KQTX_LINKED_OK="FALSE" + ) + if test "$SS_KQTX_LINKED_OK" = "FALSE"; then + AC_MSG_RESULT(failed) + AC_MSG_ERROR([This was a fatal one...aborting]) + else + AC_MSG_RESULT(success) + fi + LIBS="$ss_save_LIBS" + LDFLAGS="$ss_save_LDFLAGS" + CXXFLAGS="$ss_save_CXXFLAGS" + CPPFLAGS="$ss_save_CPPFLAGS" + fi +]) + + + + + + +AC_DEFUN([AC_SS_CHECK_OTHER_LIBS], +[ + SS_OTHER_LIBDIRS="" + SS_OTHER_LIBLINK="" + SS_OTHER_INCDIRS="" + + + AC_MSG_CHECKING([if you want to link to libresolv]) + SS_DO_IT="false" + AC_ARG_WITH(libresolv, [ --with-libresolv Link to libresolv],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_OTHER_LIBLINK="$SS_OTHER_LIBLINK -lresolv" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to link to libsocket]) + SS_DO_IT="false" + AC_ARG_WITH(libsocket, [ --with-libsocket Link to libsocket],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_OTHER_LIBLINK="$SS_OTHER_LIBLINK -lsocket" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to link to libnsl]) + SS_DO_IT="false" + AC_ARG_WITH(libnsl, [ --with-libnsl Link to libnsl],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_OTHER_LIBLINK="$SS_OTHER_LIBLINK -lnsl" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to link to libcompat]) + SS_DO_IT="false" + AC_ARG_WITH(libnsl, [ --with-libcompat Link to libcompat],SS_DO_IT="true") + if test "$SS_DO_IT" = "true"; then + AC_MSG_RESULT(yes) + SS_OTHER_LIBLINK="$SS_OTHER_LIBLINK -lcompat" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([if you want to link to other libraries]) + SS_DO_IT="false" + AC_ARG_WITH(other-libs, [ --with-other-libs=... Link to the specified libraries],SS_DO_IT="$withval") + if test "$SS_DO_IT" != "false"; then + AC_MSG_RESULT([yes]) + SS_OTHER_LIBLINK="$SS_OTHER_LIBLINK $SS_DO_IT" + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([if you want to add other library search paths]) + SS_DO_IT="false" + AC_ARG_WITH(other-ldirs, [ --with-other-ldirs=... Add the specified library paths],SS_DO_IT="$withval") + if test "$SS_DO_IT" != "false"; then + AC_MSG_RESULT([yes]) + SS_OTHER_LIBDIRS="$SS_OTHER_LIBDIRS $SS_DO_IT" + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([if you want to add other include search paths]) + SS_DO_IT="false" + AC_ARG_WITH(other-idirs, [ --with-other-idirs=... Add the specified include search paths],SS_DO_IT="$withval") + if test "$SS_DO_IT" != "false"; then + AC_MSG_RESULT([yes]) + SS_OTHER_INCDIRS="$SS_OTHER_INCDIRS $SS_DO_IT" + else + AC_MSG_RESULT([no]) + fi + +]) + + + +AC_DEFUN([AC_SS_FINAL_CONFIG], +[ + AC_MSG_CHECKING([if we finally have to compile the IpV6 support]) + + if test "$SS_NOIPV6_SUPPORT" = "true"; then + AC_MSG_RESULT([no: disabled by user]) + else + if test "$SS_HAVE_IPV6_FUNCTIONS" = "true"; then + AC_MSG_RESULT([yes]) + AC_DEFINE([COMPILE_IPV6_SUPPORT], 1, [define if you want the IpV6 support]) + SS_BUILD_FLAGS="i$SS_BUILD_FLAGS" + else + AC_MSG_RESULT([no: the system lacks support]) + fi + fi + + dnl # // Toplevel source directory + + SS_TOPSRCDIR=`pwd` + + AC_SUBST(SS_TOPSRCDIR) + + SS_CPPFLAGS="-D_REENTRANT -DREENTRANT" + if test -n "$SS_X_CPPFLAGS"; then + SS_CPPFLAGS="$SS_CPPFLAGS $SS_X_CPPFLAGS" + fi + + if test "$SS_USE_QT4" = "no"; then + SS_INCDIRS="-I$SS_QT3_INCDIR -I$SS_X_INCDIR" + else + AC_DEFINE([COMPILE_USE_QT4], 1, [define if you want to compile the Qt 4.x support]) + SS_INCDIRS="$SS_QT4_INCDIRECTORIES -I$SS_X_INCDIR" + SS_CPPFLAGS="$SS_CPPFLAGS -DQT3_SUPPORT" + fi + + if test -n "$SS_X_INCDIR"; then + SS_INCDIRS="$SS_INCDIRS -I$SS_X_INCDIR" + fi + + if test -n "$SS_X_LDFLAGS"; then + SS_LDFLAGS="$SS_X_LDFLAGS" + else + SS_LDFLAGS="" + fi + + if test "$SS_USE_QT4" = "no"; then + SS_RPATH="-rpath $SS_QT3_LIBDIR -rpath $libdir" + else + SS_RPATH="-rpath $SS_QT4_LIBDIR -rpath $libdir" + fi + + if test -n "$SS_X_LIBDIR"; then + SS_RPATH="$SS_RPATH -rpath $SS_X_LIBDIR" + fi + + if test "$SS_USE_QT4" = "no"; then + SS_LIBDIRS="-L$SS_TOPSRCDIR/src/kvilib/build/ -L$SS_QT3_LIBDIR" + else + SS_LIBDIRS="-L$SS_TOPSRCDIR/src/kvilib/build/ -L$SS_QT4_LIBDIR" + fi + + if test -n "$SS_X_LIBDIR"; then + SS_LIBDIRS="$SS_LIBDIRS -L$SS_X_LIBDIR" + fi + + if test "$SS_USE_QT4" = "no"; then + SS_LIBLINK="-l$SS_QTLIB_NAME" + else + #if test -n "SS_LOCAL_ADD_DEBUG_SYMBOLS"; then + # SS_LIBLINK="-lQtCore_debug -lQtGui_debug -lQt3Support_debug" + #else + + SS_LIBLINK="-lQtCore -lQtGui -lQt3Support" + + #fi + fi + + if test -n "$SS_X_LIBLINK"; then + SS_LIBLINK="$SS_LIBLINK $SS_X_LIBLINK" + fi + SS_LIBLINK="$SS_LIBLINK $SS_THREAD_LIBLINK" + if test "$SS_LINK_TO_LIBSSL" = "true"; then + SS_LIBLINK="$SS_LIBLINK -lssl -lcrypto" + fi + if test "$SS_LINK_TO_LIBESD" = "true"; then + SS_LIBLINK="$SS_LIBLINK -lesd" + fi + if test "$SS_LINK_TO_LIBARTS" = "true"; then + SS_LIBLINK="$SS_LIBLINK -lsoundserver_idl" + fi + if test "$SS_LINK_TO_LIBAUDIOFILE" = "true"; then + SS_LIBLINK="$SS_LIBLINK -laudiofile -lm" + fi + + if test "$SS_LOCAL_8BIT" = "true"; then + SS_CPPFLAGS="$SS_CPPFLAGS -DQT3_NO_ASCII_CAST -DQT3_NO_COMPAT" + fi + + if test "$SS_QT3_EMBEDDED" = "true"; then + SS_CPPFLAGS="$SS_CPPFLAGS -DQWS" + fi + + if test "$SS_KDE_REQUESTED" = "yes"; then + SS_INCDIRS="$SS_INCDIRS -I$SS_KDE_INCDIR" + SS_RPATH="$SS_RPATH -rpath $SS_KDE_LIBDIR" + SS_LIBDIRS="$SS_LIBDIRS -L$SS_KDE_LIBDIR" + SS_LIBLINK="-lkdecore -lkdeui -lkparts $SS_LIBLINK" + AC_DEFINE([COMPILE_KDE_SUPPORT], 1, [define if you want to compile the KDE 3.x support]) + SS_BUILD_FLAGS="k$SS_BUILD_FLAGS" + fi + + if test -n "$SS_OTHER_LIBLINK"; then + SS_LIBLINK="$SS_LIBLINK $SS_OTHER_LIBLINK" + fi + + if test -n "$SS_OTHER_LIBDIRS"; then + SS_LIBDIRS="$SS_LIBDIRS $SS_OTHER_LIBDIRS" + $SS_OTHER_LIBDIRS=`echo "$SS_OTHER_LIBDIRS" | sed -e s/-L//g` + SS_RPATH="$SS_RPATH -rpath $SS_OTHER_LIBDIRS" + fi + + if test -n "$SS_OTHER_INCDIRS"; then + SS_INCDIRS="$SS_INCDIRS $SS_OTHER_INCDIRS" + fi + + if test "$SS_LINK_TO_LIBDL" = "yes"; then + SS_LIBLINK="$SS_LIBLINK -ldl" + fi + + if test "$SS_LINK_TO_LIBZ" = "yes"; then + SS_LIBLINK="$SS_LIBLINK -lz" + fi + if test "$SS_LINK_TO_XSS" = "yes"; then + SS_LIBLINK="$SS_LIBLINK -lXss" + fi + + AC_SUBST(SS_CPPFLAGS) + AC_SUBST(SS_INCDIRS) + AC_SUBST(SS_LDFLAGS) + SS_RPATH="" + AC_SUBST(SS_RPATH) + AC_SUBST(SS_LIBDIRS) + AC_SUBST(SS_LIBLINK) + + if test "$SS_USE_QT4" = "no"; then + SS_QT_MOC=$SS_QT3_MOC + SS_QT_MOC_FLAGS="" + else + SS_QT_MOC=$SS_QT4_MOC + SS_QT_MOC_FLAGS="-DCOMPILE_USE_QT4" + fi + + AC_SUBST(SS_QT_MOC) + AC_SUBST(SS_QT_MOC_FLAGS) + + build_date=`date -u` + + if test -z "$build_date"; then + build_date=`date` + fi + + if test -z "$build_date"; then + build_date="unknown" + fi + + AC_DEFINE_UNQUOTED([BUILD_DATE],"$build_date", [this is the build date (configure date rather)]) + + dnl # Let's sort the build flags + + SS_AUX_CHARS="a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9" + + buid_flags="" + + for achar in $SS_AUX_CHARS; do + tmp_val=`echo "$SS_BUILD_FLAGS" | grep $achar` + if test "$tmp_val"; then + build_flags="$build_flags$achar" + fi + done + + SS_DIRTAG=`echo $VERSION | cut -d . -f 1,2` + + AC_DEFINE_UNQUOTED([VERSION_BRANCH], "$SS_DIRTAG", [MAJOR.MINOR part of version]) + AC_DEFINE_UNQUOTED([BUILD_FLAGS],"$target_cpu-$build_flags", [these are the build flags]) + + globalkvircdir="\${datadir}/kvirc/$SS_DIRTAG" + AC_SUBST(globalkvircdir) + + configdir="\${globalkvircdir}/config" + AC_SUBST(configdir) + + picsdir="\${globalkvircdir}/pics" + AC_SUBST(picsdir) + + helpdir="\${globalkvircdir}/help/en" + AC_SUBST(helpdir) + + pluglibdir="\${exec_prefix}/lib/kvirc/$SS_DIRTAG/modules" + AC_SUBST(pluglibdir) + + modulelibdir="\${exec_prefix}/lib/kvirc/$SS_DIRTAG/modules" + AC_SUBST(modulelibdir) + + defscriptdir="\${globalkvircdir}/defscript" + AC_SUBST(defscriptdir) + + themedir="\${globalkvircdir}/themes" + AC_SUBST(themedir) + + msgcolorsdir="\${globalkvircdir}/msgcolors" + AC_SUBST(msgcolorsdir) + + if test -z "$mandir"; then + mandir="\${exec_prefix}/man/man1" + fi + AC_SUBST(mandir) + + + licensedir="\${globalkvircdir}/license" + AC_SUBST(licensedir) + + if test -n "$SS_KDE_SERVICESDIR"; then + kdeservicesdir="$SS_KDE_SERVICESDIR" + else + kdeservicesdir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/protocols" + fi + AC_SUBST(kdeservicesdir) + + if test "$SS_KDE_REQUESTED" = "yes"; then + iconapps16datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/16x16/apps" + iconapps32datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/32x32/apps" + iconapps48datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/48x48/apps" + iconapps64datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/64x64/apps" + iconapps128datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/128x128/apps" + iconappsscalabledatadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/scalable/apps" + iconmime16datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/16x16/mimetypes" + iconmime32datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/32x32/mimetypes" + iconmime48datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/48x48/mimetypes" + iconmime64datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/64x64/mimetypes" + iconmime128datadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/128x128/mimetypes" + iconmimescalabledatadir="$SS_KDE_GENERAL_DIR/share/icons/hicolor/scalable/mimetypes" + applnkdir="$SS_KDE_GENERAL_DIR/share/applnk/Internet" + mimelnkdir="$SS_KDE_GENERAL_DIR/share/mimelnk/text" + else + iconapps16datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/16x16" + iconapps32datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/32x32" + iconapps48datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/48x48" + iconapps64datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/64x64" + iconapps128datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/128x128" + iconappsscalabledatadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/scalable" + iconmime16datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/16x16" + iconmime32datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/32x32" + iconmime48datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/48x48" + iconmime64datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/64x64" + iconmime128datadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/128x128" + iconmimescalabledatadir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/icons/scalable" + applnkdir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/applnk" + mimelnkdir="\${exec_prefix}/share/kvirc/$SS_DIRTAG/mimelnk" + fi + AC_SUBST(iconapps16datadir) + AC_SUBST(iconapps32datadir) + AC_SUBST(iconapps48datadir) + AC_SUBST(iconapps64datadir) + AC_SUBST(iconapps128datadir) + AC_SUBST(iconappsscalabledatadir) + AC_SUBST(iconmime16datadir) + AC_SUBST(iconmime32datadir) + AC_SUBST(iconmime48datadir) + AC_SUBST(iconmime64datadir) + AC_SUBST(iconmime128datadir) + AC_SUBST(iconmimescalabledatadir) + AC_SUBST(applnkdir) + AC_SUBST(mimelnkdir) + + localedir="\${globalkvircdir}/locale" + AC_SUBST(localedir) + + headersdir="\${exec_prefix}/include/kvirc/$VERSION" + AC_SUBST(headersdir) + + + configmodulesdir="\${globalkvircdir}/config/modules" + AC_SUBST(configmodulesdir) + + + topdir=`pwd` + AC_SUBST(topdir) + + AC_SS_HEADER([Configuration status:]) + AC_SS_SET_GREENINK + echo "### The kvirc binary will be installed in:" + echo "### $bindir" + echo "### The libraries will be installed in:" + echo "### $libdir" + echo "### Modules will be installed in:" + echo "### $pluglibdir" + AC_SS_SET_NORMALINK + AC_SS_HEADER([Take a look at the paths above just to be sure that they're correct]) +]) + +dnl just a wrapper to clean up configure.in +AC_DEFUN([KVIRC_PROG_LIBTOOL], +[ + AM_PROG_LIBTOOL + + LIBTOOL_SHELL="/bin/sh ./libtool" + # LIBTOOL="$LIBTOOL --silent" + + AC_ARG_ENABLE(objprelink, [ --enable-objprelink prelink apps (experimental, needs objprelink in path)], + kvirc_use_objprelink=$enableval, kvirc_use_objprelink=no) + if test "x$kvirc_use_objprelink" = "xyes"; then + echo Patching libtool to run objprelink. + mv libtool libtool.orig + cat > libtool <<\EOF +#! /bin/sh + +ALREADYPRELINKED="" + +for n +do + case $n in + *.o) k=$n + if test -r $k; then + ISELF=`file $k | grep ELF` + if test -n "$ISELF"; then + ALREADY=`echo $ALREADYPRELINKED | grep "!!!$k"` + if test -z "$ALREADY"; then + echo objprelink $k + objprelink $k + ALREADYPRELINKED="$ALREADYPRELINKED !!!$k" + fi + fi + fi + ;; + *.lo) k=$n + if test -r $k; then + ISELF=`file $k | grep ELF` + if test -n "$ISELF"; then + ALREADY=`echo $ALREADYPRELINKED | grep "!!!$k"` + if test -z "$ALREADY"; then + echo objprelink $k + objprelink $k + ALREADYPRELINKED="$ALREADYPRELINKED !!!$k" + fi + fi + fi + ASHORTNAME=`echo $n | sed -e 's/\.lo$//'` + k=".libs/$ASHORTNAME.o" + if test -r $k; then + ISELF=`file $k | grep ELF` + if test -n "$ISELF"; then + ALREADY=`echo $ALREADYPRELINKED | grep "!!!$k"` + if test -z "$ALREADY"; then + echo objprelink $k + objprelink $k + ALREADYPRELINKED="$ALREADYPRELINKED !!!$k" + fi + fi + fi + k=".libs/$ASHORTNAME.lo" + if test -r $k; then + ISELF=`file $k | grep ELF` + if test -n "$ISELF"; then + ALREADY=`echo $ALREADYPRELINKED | grep "!!!$k"` + if test -z "$ALREADY"; then + echo objprelink $k + objprelink $k + ALREADYPRELINKED="$ALREADYPRELINKED !!!$k" + fi + fi + fi + k="$ASHORTNAME.o" + if test -r $k; then + ISELF=`file $k | grep ELF` + if test -n "$ISELF"; then + ALREADY=`echo $ALREADYPRELINKED | grep "!!!$k"` + if test -z "$ALREADY"; then + echo objprelink $k + objprelink $k + ALREADYPRELINKED="$ALREADYPRELINKED !!!$k" + fi + fi + fi + ;; + esac +done + +EOF + cat >> libtool libtool.orig + rm libtool.orig + chmod a+x libtool + fi +]) +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 +## Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 1996 +## +## 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception to the GNU General Public License, if you +## distribute this file as part of a program that contains a +## configuration script generated by Autoconf, you may include it under +## the same distribution terms that you use for the rest of that program. + +# serial 47 AC_PROG_LIBTOOL + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* ) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for *BSD + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + ;; + + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + +# _LT_AC_PROG_CXXCPP +# --------------- +AC_DEFUN([_LT_AC_PROG_CXXCPP], +[ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +])# _LT_AC_PROG_CXXCPP + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case "$cc_basename" in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case "$cc_basename" in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case "$cc_basename" in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" + fi + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi[[45]]*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case "$cc_basename" in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_MSG_RESULT([$SED]) +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..2f1ca33 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,910 @@ +# generated automatically by aclocal 1.10.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(AC_AUTOCONF_VERSION, [2.61],, +[m4_warning([this file was generated for autoconf 2.61. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 13 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([acinclude.m4]) diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..186884d --- /dev/null +++ b/autogen.sh @@ -0,0 +1,164 @@ +#! /bin/bash + +############################################################################### +# +# Run this to generate the Makefile templates, etc. +# +############################################################################### + +THIS_PROGGIE_EXECUTABLE="./autogen.sh" +THIS_PROGGIE_NAME="KVIrc autogen.sh" +THIS_PROGGIE_VERSION="1.0.0" +PKG_NAME="kvirc" +DIE=0 +GEN_FILES="configure.in" + +USE_BUNDLED_LIBTOOL=0 + +# Handle arguments + + +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + --help) + echo $THIS_PROGGIE_NAME $THIS_PROGGIE_VERSION + echo "Usage:" + echo $THIS_PROGGIE_EXECUTABLE "[options]" + echo "Options:" + echo " --bundled-libtool : use the bundled libtool instead" + echo " of the system one" + exit 0 + ;; + + --version) + echo $THIS_PROGGIE_NAME $THIS_PROGGIE_VERSION + exit 0 + ;; + + --bundled-libtool) + USE_BUNDLED_LIBTOOL=1 + ;; + + *) + echo "Unrecognized option $arg" + echo "See $THIS_PROGGIE_EXECUTABLE --help" + exit -1 + ;; + esac +done + + +set -e + +function RUN_TOOL() +{ + if [ -z "$*" ]; then return; fi + echo "... Running $*" + $* +} + + +############################################################################### +# +# + + +echo "... Generating build files for $PKG_NAME" + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have GNU \`autoconf' installed." + DIE=1 +} + +(test "$USE_BUNDLED_LIBTOOL" -eq 0) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo "*Warning*: You don't have GNU \`libtool' installed." + echo "*Warning*: Using the buindled libtool instead." + USE_BUNDLED_LIBTOOL=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have GNU \`automake' installed." + DIE=1 + NO_AUTOMAKE=yes +} + +# if no automake, do not bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing \`aclocal'. The version of \`automake'" + echo "installed does not appear recent enough." + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +case $CC in +xlc) + am_opt=--include-deps;; +esac + +for coin in $GEN_FILES +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo "... skipping $dr -- flagged as no auto-gen" + else + echo "... processing \"$dr\"" + macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` + ( + cd $dr + aclocalinclude="$ACLOCAL_FLAGS" + for k in $macrodirs; do + if test -d $k; then + aclocalinclude="$aclocalinclude -I $k" + fi + done + + MACRO_FILES="admin/acinclude.m4.in admin/libtool.m4.in" + + cat $MACRO_FILES > acinclude.m4 + + if test "$USE_BUNDLED_LIBTOOL" -eq 0; then + echo "... Using system libtool" + echo "... Re-run with --bundled-libtool to use" + echo "... the libtool shipped with the KVIrc svn" + RUN_TOOL libtoolize --copy --force + else + echo "... Using bundled libtool" + rm -f admin/ltmain.sh + rm -f admin/config.guess + rm -f admin/config.sub + cp admin/libtool/ltmain.sh admin/ltmain.sh + cp admin/libtool/config.guess admin/config.guess + cp admin/libtool/config.sub admin/config.sub + fi + + RUN_TOOL aclocal $aclocalinclude + if grep "^AM_CONFIG_HEADER" $coin > /dev/null; then + RUN_TOOL autoheader + fi + RUN_TOOL automake --add-missing --force-missing --copy $am_opt + RUN_TOOL autoconf + touch stamp-h.in + ) + fi +done + +echo "###" +echo "### Done. The next step is ./configure --help" +echo "### Take a look at the options (eventually read the INSTALL file)" +echo "### and run ./configure " +echo "###" + +# +############################################################################### diff --git a/configure.in b/configure.in new file mode 100755 index 0000000..822dfa1 --- /dev/null +++ b/configure.in @@ -0,0 +1,270 @@ +#------------------------------------------------------------------ +# configure.in for the KVIrc IRC client +# Szymon Stefanek (07-04-2000) +#------------------------------------------------------------------ + +AC_INIT(README) + +AC_SS_HEADER([Trying to find out where I am]) + +AC_CONFIG_AUX_DIR(admin) + +AC_CANONICAL_SYSTEM + +AC_SS_HEADER([Initializing automake]) + +AC_PREREQ(2.52) + +AM_INIT_AUTOMAKE(kvirc,3.4.0) + +AM_MAINTAINER_MODE + +AC_PREFIX_DEFAULT(/usr/local) +AM_CONFIG_HEADER(src/config.h) + +#------------------------------------------------------------------ +# HERE starts your real configure script +#------------------------------------------------------------------ + +AC_SS_INIT_VARIABLES + +AC_SS_HEADER([Checking the compilation mode]) + +AC_SS_CXXFLAGS + +AC_SS_HEADER([Checking the C++ environment]) + +AC_PROG_CC +AC_AIX +AC_MINIX +AC_EXEEXT +AC_LANG_CPLUSPLUS +AC_PROG_CXX + +AC_SS_HEADER([Initializing libtool]) + +AM_DISABLE_STATIC +AC_LIBTOOL_DLOPEN +KVIRC_PROG_LIBTOOL + +AC_SS_HEADER([Checking system properties]) + +AC_SS_HEADER_CHECKS +AC_SS_FUNCTION_CHECKS + +AC_SS_CHECK_IFADDR_STUFF +AC_SS_CHECK_DYNAMIC_LABELS +AC_SS_CHECK_BIG_ENDIAN +AC_SS_MISC_OPTIONS + +AC_CHECK_SIZEOF(short int) +AC_CHECK_SIZEOF(unsigned short int) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(unsigned int) +AC_CHECK_SIZEOF(long int) +AC_CHECK_SIZEOF(unsigned long int) +AC_CHECK_SIZEOF(long long int) +AC_CHECK_SIZEOF(unsigned long long int) +AC_CHECK_SIZEOF(void *) + +#AC_SS_CHECK_KVISOCKLEN_T +#AC_SS_CHECK_BOOL +#AC_SS_LIBRARY_CHECKS +#AC_SS_FIND_JPEG + +AC_SS_HEADER([Looking for required libraries]) + +AC_SS_CHECK_DL +AC_SS_CHECK_THREAD_STUFF + +AC_SS_HEADER([Looking for X]) + +AC_SS_FIND_X +AC_SS_CHECK_XSS +AC_SS_HEADER([Looking for Qt]) + +SS_QT3_MAJOR_VERSION_REQUIRED="3" +SS_QT3_MINOR_VERSION_REQUIRED="0" +SS_QT3_PATCH_LEVEL_REQUIRED="0" +SS_QT3_GENERAL_FILE_TO_SEARCH="include/qinputdialog.h" +SS_QT3_INCLUDE_FILE_TO_SEARCH="qiconview.h" + +SS_QT4_MAJOR_VERSION_REQUIRED="4" +SS_QT4_MINOR_VERSION_REQUIRED="0" +SS_QT4_PATCH_LEVEL_REQUIRED="0" +SS_QT4_GENERAL_FILE_TO_SEARCH="include/QtCore/QtPlugin" +SS_QT4_INCLUDE_FILE_TO_SEARCH="QtCore/QtPlugin" + + +AC_SS_FIND_QT + +AC_SS_HEADER([Checking KDE]) + +SS_KDE_GENERAL_FILE_TO_SEARCH="include/kwin.h" +SS_KDE_INCLUDE_FILE_TO_SEARCH="kwin.h" + +AC_SS_FIND_KDE + +AC_SS_HEADER([Checking additional compilation options]) +AC_SS_CHECK_OPENSSL +AC_SS_CHECK_ESD +AC_SS_CHECK_ARTS +AC_SS_CHECK_ZLIB +AC_SS_CHECK_AUDIOFILE +AC_SS_CHECK_OTHER_LIBS +AC_SS_CHECK_PERL +AC_SS_HEADER([Working out the final configuration]) + +AC_SS_FINAL_CONFIG + +AC_SS_HEADER([Creating Makefiles]) + +AC_OUTPUT( \ + Makefile \ + admin/Makefile \ + admin/libtool/Makefile \ + data/Makefile \ + data/applnk/Makefile \ + data/config/Makefile \ + data/defscript/Makefile \ + data/deftheme/Makefile \ + data/deftheme/silverirc/Makefile \ + data/doctemplates/Makefile \ + data/helppics/Makefile \ + data/icons/Makefile \ + data/icons/16x16/Makefile \ + data/icons/32x32/Makefile \ + data/icons/48x48/Makefile \ + data/icons/64x64/Makefile \ + data/icons/128x128/Makefile \ + data/icons/scalable/Makefile \ + data/man/Makefile \ + data/mimelnk/Makefile \ + data/msgcolors/Makefile \ + data/pics/Makefile \ + data/pics/coresmall/Makefile \ + data/protocols/Makefile \ + data/resources/Makefile \ + data/resources_mac/Makefile \ + doc/Makefile \ + doc/scriptexamples/Makefile \ + doc/scriptexamples/antiidle/Makefile \ + doc/scriptexamples/minesweeper/Makefile \ + doc/scriptexamples/mp3share/Makefile \ + doc/scriptexamples/playing/Makefile \ + doc/scriptexamples/runmenu/Makefile \ + doc/scriptexamples/simplehttp/Makefile \ + doc/scriptexamples/tutorial/Makefile \ + po/Makefile \ + po/kvirc/Makefile \ + po/modules/Makefile \ + po/modules/about/Makefile \ + po/modules/dcc/Makefile \ + po/modules/editor/Makefile \ + po/modules/filetransferwindow/Makefile \ + po/modules/logview/Makefile \ + po/modules/mediaplayer/Makefile \ + po/modules/notifier/Makefile \ + po/modules/options/Makefile \ + po/modules/perl/Makefile \ + po/modules/perlcore/Makefile \ + po/modules/sharedfileswindow/Makefile \ + po/modules/torrent/Makefile \ + po/modules/theme/Makefile \ + scripts/Makefile \ + scripts/browser/Makefile \ + scripts/config/Makefile \ + scripts/config/kvirc-config \ + scripts/helpsearch/Makefile \ + src/Makefile \ + src/kvilib/Makefile \ + src/kvilib/build/Makefile \ + src/kvilib/config/Makefile \ + src/kvilib/core/Makefile \ + src/kvilib/ext/Makefile \ + src/kvilib/file/Makefile \ + src/kvilib/include/Makefile \ + src/kvilib/irc/Makefile \ + src/kvilib/net/Makefile \ + src/kvilib/system/Makefile \ + src/kvilib/tal/Makefile \ + src/kvirc/Makefile \ + src/kvirc/build/Makefile \ + src/kvirc/include/Makefile \ + src/kvirc/kernel/Makefile \ + src/kvirc/kvs/Makefile \ + src/kvirc/module/Makefile \ + src/kvirc/sparser/Makefile \ + src/kvirc/ui/Makefile \ + src/modules/Makefile \ + src/modules/about/Makefile \ + src/modules/action/Makefile \ + src/modules/actioneditor/Makefile \ + src/modules/addon/Makefile \ + src/modules/addon/pics/Makefile \ + src/modules/aliaseditor/Makefile \ + src/modules/avatar/Makefile \ + src/modules/chan/Makefile \ + src/modules/channelsjoin/Makefile \ + src/modules/clock/Makefile \ + src/modules/codetester/Makefile \ + src/modules/config/Makefile \ + src/modules/context/Makefile \ + src/modules/dialog/Makefile \ + src/modules/dcc/Makefile \ + src/modules/dockwidget/Makefile \ + src/modules/editor/Makefile \ + src/modules/eventeditor/Makefile \ + src/modules/file/Makefile \ + src/modules/filetransferwindow/Makefile \ + src/modules/filetransferwindow/caps/Makefile \ + src/modules/help/Makefile \ + src/modules/http/Makefile \ + src/modules/ident/Makefile \ + src/modules/iograph/Makefile \ + src/modules/lamerizer/Makefile \ + src/modules/links/Makefile \ + src/modules/list/Makefile \ + src/modules/log/Makefile \ + src/modules/logview/Makefile \ + src/modules/logview/caps/Makefile \ + src/modules/mask/Makefile \ + src/modules/math/Makefile \ + src/modules/mediaplayer/Makefile \ + src/modules/mircimport/Makefile \ + src/modules/mircimport/caps/Makefile \ + src/modules/mircimport/pics/Makefile \ + src/modules/my/Makefile \ + src/modules/notifier/Makefile \ + src/modules/notifier/pics/Makefile \ + src/modules/objects/Makefile \ + src/modules/options/Makefile \ + src/modules/perl/Makefile \ + src/modules/perlcore/Makefile \ + src/modules/popupeditor/Makefile \ + src/modules/raweditor/Makefile \ + src/modules/regchan/Makefile \ + src/modules/reguser/Makefile \ + src/modules/rijndael/Makefile \ + src/modules/rijndael/caps/Makefile \ + src/modules/setup/Makefile \ + src/modules/sharedfile/Makefile \ + src/modules/sharedfileswindow/Makefile \ + src/modules/sharedfileswindow/caps/Makefile \ + src/modules/snd/Makefile \ + src/modules/socketspy/Makefile \ + src/modules/spaste/Makefile \ + src/modules/str/Makefile \ + src/modules/system/Makefile \ + src/modules/term/Makefile \ + src/modules/texticons/Makefile \ + src/modules/theme/Makefile \ + src/modules/tip/Makefile \ + src/modules/tmphighlight/Makefile \ + src/modules/toolbar/Makefile \ + src/modules/toolbareditor/Makefile \ + src/modules/torrent/Makefile \ + src/modules/url/Makefile \ + src/modules/url/caps/Makefile \ + src/modules/window/Makefile \ +) diff --git a/data/Makefile.am b/data/Makefile.am new file mode 100644 index 0000000..1d329f1 --- /dev/null +++ b/data/Makefile.am @@ -0,0 +1,6 @@ +############################################################################### +# KVirc IRC client Makefile - 16.12.98 Szymon Stefanek +############################################################################### + +SUBDIRS = applnk config defscript deftheme doctemplates \ +helppics icons man mimelnk msgcolors pics protocols resources resources_mac diff --git a/data/applnk/Makefile.am b/data/applnk/Makefile.am new file mode 100644 index 0000000..cf7c6f3 --- /dev/null +++ b/data/applnk/Makefile.am @@ -0,0 +1,5 @@ +tmpdir = $(applnkdir) + +tmp_DATA = kvirc.desktop + +EXTRA_DIST = $(tmp_DATA) diff --git a/data/applnk/kvirc.desktop b/data/applnk/kvirc.desktop new file mode 100644 index 0000000..0b53189 --- /dev/null +++ b/data/applnk/kvirc.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +BinaryPattern= +GenericName=IRC Client +Comment=Connect to Internet Relay Chat +MimeType=application/x-kva;application/x-kvt +Exec=kvirc -m %u +Icon=kvirc +MapNotify=true +Name=KVIrc 3 +SwallowExec= +SwallowTitle= +Terminal=false +TerminalOptions= +Path= +Type=Application +X-KDE-SubstituteUID=false +X-KDE-Username= +X-KDE-StartupNotify=true diff --git a/data/config/Makefile.am b/data/config/Makefile.am new file mode 100644 index 0000000..4b41fbd --- /dev/null +++ b/data/config/Makefile.am @@ -0,0 +1,5 @@ +tmpdir = $(configdir) + +tmp_DATA = serverdb.kvc texticons.kvc + +EXTRA_DIST = $(tmp_DATA) diff --git a/data/config/serverdb.kvc b/data/config/serverdb.kvc new file mode 100644 index 0000000..f1c6266 --- /dev/null +++ b/data/config/serverdb.kvc @@ -0,0 +1,1611 @@ +# KVIrc configuration file + +[Accessirc] +0_Hostname=irc.accessirc.net +0_Description=Accessirc:%20Random%20server +NServers=1 +[Acestar] +0_Hostname=irc.acestar.org +0_Description=Acestar:%20Random%20server +NServers=1 +[Action-IRC] +0_Hostname=irc.action-irc.net +0_Description=Action-IRC:%20Random%20server +NServers=1 +[AlternativeNet] +0_Hostname=irc.altnet.org +0_Description=Alternativenet:%20Random%20server +NServers=1 +[Afternet] +0_Hostname=irc.afternet.org +0_Description=Afternet:%20Random%20server +NServers=1 +[Anothernet] +0_Hostname=irc.another.net +0_Description=AnotherNet:%20Random%20server +NServers=1 +[ArabChat] +0_Hostname=irc.arabchat.org +0_Description=ArabChat:%20Random%20server +NServers=1 +[AsiaTalk] +0_Hostname=irc.asiatalk.org +0_Description=AsiaTalk:%20Random%20server +NServers=1 +[AstroLink] +0_Hostname=irc.astrolink.org +0_Description=AstroLink:%20Random%20server +NServers=1 +[Asylumnet] +0_Hostname=irc.asylum-net.org +0_Description=Asylumnet:%20Random%20server +NServers=1 +[Austnet] +0_Hostname=au.austnet.org +0_Description=Austnet:%20Random%20AU%20server +1_Hostname=nz.austnet.org +1_Description=Austnet:%20Random%20NZ%20server +2_Hostname=sg.austnet.org +2_Description=Austnet:%20Random%20SG%20server +3_Hostname=us.austnet.org +3_Description=Austnet:%20Random%20US%20server +NServers=4 +[AwesomeChat] +0_Hostname=irc.awesomechat.net +0_Description=AwesomeChat:%20Random%20server +NServers=1 +[Axenet] +0_Hostname=irc.axenet.org +0_Description=Axenet:%20Random%20server +NServers=1 +[Azzurra] +0_Hostname=irc.azzurra.org +0_Description=Main%20Random%20Server +1_Hostname=atlantis.azzurra.org +1_Description=HUB%20Routing%20Server +2_Hostname=twilight.azzurra.org +2_Description=HUB%20Routing%20Server +3_Hostname=vogon.azzurra.org +3_Description=HUB%20Routing%20Server +4_Hostname=b-network.azzurra.org +4_Description=B-Network%20Leaf%20Server +5_Hostname=caltanet.azzurra.org +5_Description=Caltanet%20Leaf%20Server +6_Hostname=cheapnet.azzurra.org +6_Description=Cheapnet%20Leaf%20Server +7_Hostname=libero.azzurra.org +7_Description=Libero%20Leaf%20Server +8_Hostname=oltrelinux.azzurra.org +8_Description=Oltrelinux%20Leaf%20Server +9_Hostname=nexlab.azzurra.org +9_Description=Nexlab%20Leaf%20Server +10_Hostname=penguin.azzurra.org +10_Description=Penguin%20Leaf%20Server +11_Hostname=radiomarte.azzurra.org +11_Description=RadioMarte%20Leaf%20Server +12_Hostname=sashimi.azzurra.org +12_Description=Sashimi%20Leaf%20Server +13_Hostname=sbrize.azzurra.org +13_Description=Sbrize%20Leaf%20Server +14_Hostname=tin.azzurra.org +14_Description=Tin%20Leaf%20Server +15_Hostname=unina.azzurra.org +15_Description=Unina%20Leaf%20Server +16_Hostname=wmgitalia.azzurra.org +16_Description=WMG%20Leaf%20Server +17_Hostname=fastweb.azzurra.org +17_Description=Fastweb%20Routing%20Server +18_Hostname=gamma.azzurra.org +18_Description=Gamma%20Fastweb%20Server +19_Hostname=orion.azzurra.org +19_Description=Orion%20Fastweb%20Server +20_Hostname=ssitalia.azzurra.org +20_Description=SSItalia%20Fastweb%20Server +21_Hostname=stealth.azzurra.org +21_Description=Stealth%20Fastweb%20Server +22_Hostname=irc6.azzurra.org +22_Description=IPv6%20Routing%20Server +23_Hostname=itgate.azzurra.org +23_Description=ITgate%20IPv6%20Server +24_Hostname=ngnet.azzurra.org +24_Description=Ngnet%20IPv6%20Server +NServers=25 +Description=Italian%20Main%20Network +[Beirut] +0_Hostname=irc.beirut.com +0_Description=Random%20server +1_Hostname=us.beirut.com +1_Description=Random%20US%20server +2_Hostname=eu.beirut.com +2_Description=Random%20EU%20server +3_Hostname=downtown.beirut.com +3_Description=Fullerton +4_Hostname=verdun.beirut.com +4_Description=Chicago +5_Hostname=hamra.beirut.com +5_Description=New%20York +6_Hostname=achrafieh.beirut.com +6_Description=Hamburg +7_Hostname=port.beirut.com +7_Description=London +8_Hostname=sinelfil.beirut.com +8_Description=Frankfurt +9_Hostname=irc.dikt.no +9_Description=Oslo +NServers=10 +[Beyondirc] +0_Hostname=irc.beyondirc.net +0_Description=BeyondIRC:%20Random%20server +NServers=1 +[Bitlbee] +0_Hostname=im.bitlbee.org +0_Description=InterLAB%20BV,%20Netherlands +1_Hostname=im.uk.bitlbee.org +1_Description=SSInternet,%20UK +2_Hostname=im.starkast.net +2_Description=TeleFortress,%20Sweden +3_Hostname=bitlbee.hensema.net +3_Description=HostingXS,%20Amsterdam +4_Hostname=im.okkernoot.net +4_Description=Almere,%20Netherlands +5_Hostname=im.fr.bitlbee.org +5_Description=ProXad,%20France +6_Hostname=im.sixxs.net +6_Description=SixXS,%20Netherlands +7_Hostname=bitlbee.extreme-players.de +7_Description=Global%20Access,%20Germany +8_Hostname=irc2im.picasa.hu +8_Description=Hungary,%20Budapest +9_Hostname=bitlbee.salooo.org +9_Description=Berlin,%20Germany +NServers=10 +Description=IRC%20%3C--%3E%20MSN%20gateway +[Blabbernet] +0_Hostname=irc.blabber.net +0_Description=Blabbernet:%20Random%20server +NServers=1 +[Blitzed] +0_Hostname=irc.blitzed.org +0_Description=Blitzed:%20Random%20server +NServers=1 +[Brasilchat] +0_Hostname=irc.brasilchat.org +0_Description=Brasilchat:%20Random%20server +NServers=1 +[Brasirc] +0_Hostname=irc.brasirc.net +0_Description=Brasirc:%20Random%20server +1_Hostname=irc.libnet.com.br +1_Description=Brasirc:%20BR,%20PA,%20Belem +2_Hostname=irc.matrix.net.br +2_Description=Brasirc:%20BR,%20SC,%20Florianopolis +NServers=3 +[Brasnet] +0_Hostname=irc.brasnet.org +0_Description=Brasnet:%20Random%20server +1_Hostname=eu.brasnet.org +1_Description=Brasnet:%20Random%20European%20server +2_Hostname=us.brasnet.org +2_Description=Brasnet:%20Random%20US%20server +NServers=3 +[Bulgaria] +0_Hostname=irc.bulgaria.org +0_Description=Bulgaria:%20Random%20server +NServers=1 +[CCnet] +0_Hostname=irc.cchat.net +0_Description=CCnet:%20Random%20server +1_Hostname=irc2.cchat.net +1_Description=CCnet:%20US,%20TX,%20Dallas +NServers=2 +[Chat-Net] +0_Hostname=irc.chat-net.org +0_Description=Chat-Net:%20Random%20server +NServers=1 +[ChatArea] +0_Hostname=irc.chatarea.net +0_Description=ChatArea:%20Random%20server +NServers=1 +[Chatcafe] +0_Hostname=irc.chatcafe.net +0_Description=Chatcafe:%20Random%20server +NServers=1 +[ChatCentral2] +0_Hostname=irc.cc2.org +0_Description=ChatCentral2:%20Random%20server +NServers=1 +[ChatCircuit] +0_Hostname=irc.chatcircuit.com +0_Port=6668 +0_Description=ChatCircuit:%20Random%20server +NServers=1 +[ChatFactory] +0_Hostname=irc.chatfactory.net +0_Description=ChatFactory:%20Random%20server +1_Hostname=power.chatfactory.net +1_Description=ChatFactory:%20Brussels,%20EU +NServers=2 +[Chatlink] +0_Hostname=irc.chatlink.org +0_Description=Chatlink:%20Random%20server +NServers=1 +[Chatnet] +0_Hostname=au.chatnet.org +0_Description=Chatnet:%20Random%20AU%20server +1_Hostname=eu.chatnet.org +1_Description=Chatnet:%20Random%20EU%20server +2_Hostname=us.chatnet.org +2_Description=Chatnet:%20Random%20US%20server +NServers=3 +[ChatPR] +0_Hostname=irc.chatpr.org +0_Description=ChatPR:%20Random%20server +NServers=1 +[Chatpinoy] +0_Hostname=irc.chatpinoy.com +0_Description=Chatpinoy:%20Random%20server +NServers=1 +[Chatroom] +0_Hostname=irc.chatroom.org +0_Description=Chatroom:%20Random%20server +NServers=1 +[Chatsolutions] +0_Hostname=irc.chatsolutions.org +0_Description=Chatsolutions:%20Random%20server +NServers=1 +[Chatster] +0_Hostname=irc.chatster.org +0_Description=Chatster:%20Random%20server +NServers=1 +[ChatX] +0_Hostname=irc.chatx.net +0_Description=ChatX:%20Random%20server +NServers=1 +[CNN] +0_Hostname=chat.cnn.com +0_Description=CNN:%20CNN%20News%20discussions +NServers=1 +[Coolchat] +0_Hostname=irc.coolchat.net +0_Description=Coolchat:%20Random%20server +NServers=1 +[Criten] +0_Hostname=irc.criten.net +0_Description=Criten:%20Random%20server +NServers=1 +[Cyberchat] +0_Hostname=irc.cyberchat.org +0_Description=Cyberchat:%20Random%20server +NServers=1 +[CyGanet] +0_Hostname=irc.cyga.net +0_Description=CyGanet:%20Random%20server +NServers=1 +[DALnet] +0_Hostname=irc.dal.net +0_Description=Main%20Random%20Server +1_Hostname=as.dal.net +1_Description=Asia%20Random%20Server +2_Hostname=hotspeed.sg.as.dal.net +2_Description=Singapore%20Server +3_Hostname=mesra.kl.my.dal.net +3_Description=Malaysia%20Server +4_Hostname=ca.dal.net +4_Description=Canada%20Random%20Server +5_Hostname=maple.ix.ca.dal.net +5_Description=Maple%20Server +6_Hostname=toronto.on.ca.dal.net +6_Description=Toronto%20Server +7_Hostname=eu.dal.net +7_Description=Europe%20Random%20Server +8_Hostname=arcor.de.eu.dal.net +8_Description=Germany%20Server +9_Hostname=brain.hub.eu.dal.net +9_Description=HUB%20Server +10_Hostname=gaston.se.eu.dal.net +10_Description=Sweden%20Server +11_Hostname=genesis-r.uk.eu.dal.net +11_Description=UK%20Server +12_Hostname=matrix.de.eu.dal.net +12_Description=Germany%20Server +13_Hostname=mozilla.se.eu.dal.net +13_Description=Sweden%20Server +14_Hostname=powertech.no.eu.dal.net +14_Description=Norway%20Server +15_Hostname=waffle.ix.eu.dal.net +15_Description=Waffle%20Server +16_Hostname=us.dal.net +16_Description=USA%20Random%20Server +17_Hostname=aeon.nj.us.dal.net +17_Description=USA%20Server +18_Hostname=broadway.ny.us.dal.net +18_Description=USA%20Server +19_Hostname=hollywood.ix.us.dal.net +19_Description=USA%20Server +20_Hostname=jade.va.us.dal.net +20_Description=USA%20Server +21_Hostname=jingo.ix.us.dal.net +21_Description=USA%20Server +22_Hostname=loyalty.ix.us.dal.net +22_Description=USA%20Server +23_Hostname=masters.ix.us.dal.net +23_Description=USA%20Server +24_Hostname=novel.fl.us.dal.net +24_Description=USA%20Server +25_Hostname=punch.va.us.dal.net +25_Description=USA%20Server +26_Hostname=rangers.ix.us.dal.net +26_Description=USA%20Server +27_Hostname=redemption.ix.us.dal.net +27_Description=USA%20Server +28_Hostname=riga-r.ca.us.dal.net +28_Description=USA%20Server +29_Hostname=rumble.fl.us.dal.net +29_Description=USA%20Server +30_Hostname=serenity.ix.us.dal.net +30_Description=USA%20Server +31_Hostname=soho.ix.us.dal.net +31_Description=USA%20Server +32_Hostname=swiftco.wa.us.dal.net +32_Description=USA%20Server +NServers=33 +[Darkfire] +0_Hostname=irc.darkfire.net +0_Description=Darkfire:%20Random%20server +NServers=1 +[Darkfyre] +0_Hostname=irc.darkfyre.net +0_Description=Darkfyre:%20Random%20server +NServers=1 +[DarkMyst] +0_Hostname=irc.darkmyst.org +0_Description=DarkMyst:%20Random%20server +NServers=1 +[DarkServ] +0_Hostname=irc.darkserv.net +0_Description=DarkServ:%20Random%20server +NServers=1 +[Darktree] +0_Hostname=irc.darktree.net +0_Description=Darktree:%20Random%20server +NServers=1 +[Deepspace] +0_Hostname=irc.deepspace.org +0_Description=Deepspace:%20Disability%20network +NServers=1 +[Different] +0_Hostname=irc.different.net +0_Description=Different:%20Random%20server +NServers=1 +[Digarix] +0_Hostname=irc.digarix.net +0_Description=Digarix:%20Random%20server +NServers=1 +[Digatech] +0_Hostname=irc.digatech.net +0_Description=Digatech:%20Random%20server +NServers=1 +[Digitalirc] +0_Hostname=irc.digitalirc.net +0_Description=Digitalirc:%20Random%20server +NServers=1 +[Discussioni] +0_Hostname=irc.discussioni.org +0_Description=Discussioni%20random%20server +1_Hostname=ipv6.discussioni.org +1_Description=Experimental%20IPv6%20Server +1_Port=5776 +2_Hostname=Bolzano1.IT.Discussioni.Org +2_Description=Blozano1 +3_Hostname=Bolzano2.IT.Discussioni.Org +3_Description=Bolzano2 +4_Hostname=Chieti.IT.Discussioni.Org +4_Description=SSL%20ready%20server +4_Port=9999 +4_SSL=true +5_Hostname=Milano.IT.Discussioni.Org +5_Description=Milano +5_Port=6669 +6_Hostname=Roma.IT.Discussioni.Org +6_Description=Roma +6_Port=6669 +7_Hostname=Roma2.IT.Discussioni.Org +7_Description=Roma2 +7_Port=6668 +8_Hostname=Torino.IT.Discussioni.Org +8_Description=Torino +8_Port=6669 +NServers=9 +Description=Italian%20Network +[Dobbernet] +0_Hostname=irc.dobber.net +0_Description=Dobbernet:%20Random%20server +NServers=1 +[DogmNet] +0_Hostname=irc.dogm.net +0_Description=Main%20network%20server +1_Hostname=irc.rovno.ua +1_Description=Main%20UA%20server +2_Hostname=irc.chat.uz +2_Description=Main%20UZ%20server +NServers=3 +Description=Russian%20Network +Encoding=CP-1251 +[DragonLynk] +0_Hostname=irc.dragonlynk.net +0_Description=DragonLynk:%20Random%20server +NServers=1 +[Dreamcast] +0_Hostname=irc0.dreamcast.com +0_Description=Dreamcast:%20Random%20server +NServers=1 +[Dreamnet] +0_Hostname=irc.dreamnet.org +0_Description=Dreamnet:%20Random%20server +NServers=1 +[Dwarfstar] +0_Hostname=irc.dwarfstar.net +0_Description=DwarfStar:%20Random%20server +NServers=1 +[Dynastynet] +0_Hostname=irc.dynastynet.net +0_Description=Dynastynet:%20Random%20server +NServers=1 +[EFnet] +0_Hostname=irc.efnet.org +0_Description=Main%20Random%20Server +1_Hostname=irc.efnet.ca +1_Description=Canada%20Random%20Server +2_Hostname=irc.arcti.ca +2_Description=Calgary%20Server +3_Hostname=efnet.teleglobe.net +3_Description=Montreal%20Server +4_Hostname=irc.dks.ca +4_Description=Toronto%20Server +5_Hostname=ircd.arcti.ca +5_Description=Calgary%20HUB%20Server +6_Hostname=irc.igs.ca +6_Description=Toronto%20Server +7_Hostname=irc.efnet.eu +7_Description=Europe%20Random%20Server +8_Hostname=irc.dkom.at +8_Description=Vienna%20Server +9_Hostname=irc.efnet.pl +9_Description=Warsaw%20Server +10_Hostname=efnet.ipv6.xs4all.nl +10_Description=Amsterdam%20IPv6%20Server +11_Hostname=irc.du.se +11_Description=Borlange%20Server +12_Hostname=efnet.cs.hut.fi +12_Description=Helsinki%20Server +13_Hostname=irc.inter.net.il +13_Description=Tel%20Aviv%20Server +14_Hostname=irc.inet.tele.dk +14_Description=Aarhus%20Server +15_Hostname=irc.ipv6.inter.net.il +15_Description=Tel%20Aviv%20IPv6%20Server +16_Hostname=irc.homelien.no +16_Description=Oslo%20IPv6%20Server +17_Hostname=ircd.efnet.no +17_Description=Oslo%20HUB%20Server +18_Hostname=efnet.xs4all.nl +18_Description=Amsterdam%20Server +19_Hostname=hub.il +19_Description=EFnet%20Israel%20HUB%20Server +20_Hostname=irc.efnet.ru +20_Description=Moscow%20Server +21_Hostname=irc.efnet.no +21_Description=Oslo%20Server +22_Hostname=irc.daxnet.no +22_Description=Oslo%20Server +23_Hostname=irc.efnet.fr +23_Description=Paris%20Server +24_Hostname=hub.se +24_Description=EFnet%20Sweden%20HUB%20Server +25_Hostname=hub.efnet.nl +25_Description=EFnet%20Netherlands%20HUB%20Server +26_Hostname=irc.ac.za +26_Description=South%20Africa%20IPv6%Server +27_Hostname=efnet.port80.se +27_Description=Stockholm%20IPv6%20Server +28_Hostname=irc.dataphone.se +28_Description=Stockholm%20Server +29_Hostname=irc.efnet.nl +29_Description=Ede%20Server +30_Hostname=efnet.demon.co.uk +30_Description=London%20Server +31_Hostname=hub.uk +31_Description=EFnet%20UK%20HUB%20Server +32_Hostname=hub.dk +32_Description=EFnet%20Denmark%20HUB%20Server +33_Hostname=irc.pte.hu +33_Description=Pecs%20Server +34_Hostname=irc.efnet.us +34_Description=USA%20Random%20Server +35_Hostname=irc.colosolutions.net +35_Description=Orlando%20Server +36_Hostname=irc.umich.edu +36_Description=Ann%20Arbor%20Server +37_Hostname=irc.desync.com +37_Description=Tampa%20Server +38_Hostname=irc.easynews.com +38_Description=Phoenix%20Server +39_Hostname=chat.efnet.org +39_Description=Chicago%20Server +40_Hostname=irc.servercentral.net +40_Description=Chicago%20Server +41_Hostname=ircd.he.net +41_Description=Fremont%20HUB%20Server +42_Hostname=irc.umn.edu +42_Description=Minneapolis%20Server +43_Hostname=irc.mzima.net +43_Description=Los%20Angeles%20Server +44_Hostname=irc.eversible.com +44_Description=Miami%20Server +45_Hostname=ircd.desync.com +45_Description=Tampa%20HUB%20Server +46_Hostname=irc.SHOUTcast.com +46_Description=Dulles%20Server +47_Hostname=irc.vel.net +47_Description=Los%20Angeles%20Server +48_Hostname=irc.ptptech.com +48_Description=Ashburn%20IPv6%20Server +49_Hostname=hub.efnet.us +49_Description=USA%20HUB%20Server +50_Hostname=irc2.choopa.net +50_Description=New%20York%20Server +51_Hostname=ircd.llnw.net +51_Description=Phoenix%20HUB%20Server +52_Hostname=irc.blackened.com +52_Description=Phoenix%20Server +53_Hostname=irc.choopa.net +53_Description=New%20York%20IPv6%20Server +54_Hostname=ircd.nac.net +54_Description=New%20York%20HUB%20Server +55_Hostname=irc.nac.net +55_Description=New%20York%20Server +56_Hostname=ircd.choopa.net +56_Description=New%20York%20HUB%20Server +57_Hostname=irc.blessed.net +57_Description=Maitland%20Server +58_Hostname=irc.prison.net +58_Description=San%20Francisco%20Server +59_Hostname=irc.wh.verio.net +59_Description=Reston%20Server +60_Hostname=irc.mindspring.com +60_Description=Atlanta%20Server +61_Hostname=irc.he.net +61_Description=Fremont%20Server +NServers=62 +[EgyptianIRC] +0_Hostname=irc.egyptianirc.net +0_Description=EgyptianIRC:%20Random%20server +NServers=1 +[Eleethal] +0_Hostname=irc.eleethal.com +0_Description=Eleethal:%20Random%20server +NServers=1 +[EnterTheGame] +0_Hostname=irc.enterthegame.com +0_Description=EntertheGame:%20Random%20server +NServers=1 +[Escaped] +0_Hostname=irc.escaped.net +0_Description=Escaped:%20Random%20server +NServers=1 +[Esprit] +0_Hostname=irc.esprit.net +0_Description=Esprit:%20Random%20server +NServers=1 +[euIRC] +0_Hostname=irc.euirc.net +0_Description=euIRC:%20Random%20server +NServers=1 +[EuropNet] +0_Hostname=irc.europnet.org +0_Description=EuropNet round robin +1_Hostname=irc.free.fr +1_Description=Free irc server +2_Hostname=irc.librenet.net +2_Description=Librenet network server +3_Hostname=irc.global-irc.net +3_Description=Global-irc server +NServers=4 +Description=French%20Network +[ExodusIRC] +0_Hostname=irc.exodusirc.net +0_Description=ExodusIRC:%20Random%20server +NServers=1 +[FDFnet] +0_Hostname=irc.fdf.net +0_Description=FDFnet:%20Random%20server +NServers=1 +[FEFnet] +0_Hostname=irc.fef.net +0_Description=FEFnet:%20Random%20server +NServers=1 +[Forestnet] +0_Hostname=irc.forestnet.org +0_Description=Forestnet:%20Random%20server +NServers=1 +[FreedomChat] +0_Hostname=chat.freedomchat.net +0_Description=FreedomChat:%20Random%20server +NServers=1 +[Freenode] +0_Hostname=irc.freenode.org +0_Description=Main Freenode router +1_Hostname=chat.ap.freenode.net +1_Description=Main%20Asia-Pacific%20router +2_Hostname=tolkien.freenode.net +2_Description=Taoyuan,%20Taiwan +3_Hostname=chat.au.freenode.net +3_Description=Main%20Australia%20router +4_Hostname=asimov.freenode.net +4_Description=Brisbane,%20Australia +5_Hostname=chat.eu.freenode.net +5_Description=Main%20Europe%20router +6_Hostname=kornbluth.freenode.net +6_Description=Frankfurt,%20Germany +7_Hostname=orwell.freenode.net +7_Description=Helsinki,%20Finland +8_Hostname=sterling.freenode.net +8_Description=Hoofddorp,%20Netherland +9_Hostname=calvino.freenode.net +9_Description=Milano,%20Italy +10_Hostname=adams.freenode.net +10_Description=Oslo,%20Norway +11_Hostname=gibson.freenode.net +11_Description=Oslo,%20Norway +12_Hostname=leguin.freenode.net +12_Description=Umea,%20Sweden +13_Hostname=lem.freenode.net +13_Description=Moscow,%20Russia +14_Hostname=pratchett.freenode.net +14_Description=London,%20United%20Kingdom +15_Hostname=ipv6.chat.eu.freenode.net +15_Description=Main%20Europe%20IPv6%20router +16_Hostname=goethe.freenode.net +16_Description=Hoofddorp,%20Netherland +17_Hostname=calkins.freenode.net +17_Description=Milano,%20Italy +18_Hostname=crichton.freenode.net +18_Description=Oslo,%20Norway +19_Hostname=chat.us.freenode.net +19_Description=Main%20USA%20router +20_Hostname=einstein.freenode.net +20_Description=Corvallis,%20OR,%20USA +21_Hostname=niven.freenode.net +21_Description=Corvallis,%20OR,%20USA +22_Hostaname=zelazny.freenode.net +22_Description=Corvallis,%20OR,%20USA +23_Hostname=zahn.freenode.net +23_Description=Corvallis,%20OR,%20USA +24_Hostname=brown.freenode.net +24_Description=Madison,%20WI,%20USA +25_Hostname=anthony.freenode.net +25_Description=Irvine,%20CA,%20USA +NServers=26 +Description=The%20FOSS%20Network +[FunNet] +0_Hostname=irc.funnet.org +0_Description=FunNet:%20Random%20server +NServers=1 +[GalaxyNet] +0_Hostname=irc.galaxynet.org +0_Description=Galaxynet:%20Random%20server +1_Hostname=auckland.nz.galaxynet.org +1_Description=Galaxynet:%20AU,%20NZ,%20Auckland +2_Hostname=freei.us.galaxynet.org +2_Description=Galaxynet:%20US,%20WA,%20Seattle +3_Hostname=gymnet.us.galaxynet.org +3_Description=Galaxynet:%20US,%20FL,%20Florida +4_Hostname=online.be.galaxynet.org +4_Description=Galaxynet:%20EU,%20BE,%20Online +5_Hostname=vltmedia.se.galaxynet.org +5_Description=Galaxynet:%20EU,%20SE,%20Vltmedia +NServers=6 +[Gamesnet] +0_Hostname=east.gamesnet.net +0_Description=Gamesnet:%20Random%20east%20US%20server +1_Hostname=west.gamesnet.net +1_Description=Gamesnet:%20Random%20west%20US%20server +NServers=2 +[Gameznet] +0_Hostname=irc.gameznet.com +0_Description=Gameznet:%20Random%20server +NServers=1 +[GizNet] +0_Hostname=irc.giznet.com +0_Description=GizNet:%20Random%20server +NServers=1 +[Globalchat] +0_Hostname=irc.globalchat.org +0_Description=Globalchat:%20Random%20server +NServers=1 +[GRnet] +0_Hostname=srv.irc.gr +0_Description=Grnet:%20Random%20server +1_Hostname=gr.irc.gr +1_Description=Grnet:%20Random%20EU%20server +2_Hostname=us.irc.gr +2_Description=Grnet:%20Random%20US%20server +NServers=3 +[HabberNet] +0_Hostname=irc.habber.net +0_Description=HabberNet:%20Random%20server +NServers=1 +[HanIRC] +0_Hostname=irc.hanirc.org +0_Description=HanIRC:%20Random%20server +NServers=1 +[Hellenicnet] +0_Hostname=irc.mirc.gr +0_Description=Hellenicnet:%20Random%20server +NServers=1 +[Hybnet] +0_Hostname=irc.hybnet.net +0_Description=Hybnet:%20Random%20server +NServers=1 +[ICQnet] +0_Hostname=irc.icq.com +0_Description=ICQnet:%20Random%20server +NServers=1 +[Infatech] +0_Hostname=irc.infatech.net +0_Description=Infatech:%20Random%20server +NServers=1 +[Infinity] +0_Hostname=irc.infinity-irc.org +0_Description=Infinity:%20Random%20server +NServers=1 +[Infomatrix] +0_Hostname=irc.infomatrix.net +0_Description=Infomatrix:%20Random%20server +NServers=1 +[IRC.by] +0_Hostname=irc.by +0_Description=Random%20server +NServers=1 +Description=The%20Biggest%20Belarus%20Network +Encoding=CP-1251 +[IRC-Hispano] +0_Hostname=irc.irc-hispano.org +0_Description=IRC-Hispano:%20Random%20server +NServers=1 +Description=Spanish%20Network +[IRCGnet] +0_Hostname=irc.ircgnet.net +0_Description=IRCGNet:%20Main%20service +1_Hostname=irc.ircgnet.net +1_Description=IRCGNet:%20SSL%20service +1_Port=6697 +2_Hostname=ops.ircgnet.net +2_Description=IRCGnet:%20Alternate%20service +NServers=3 +[IRChat] +0_Hostname=irc.irchat.net +0_Description=IRChat:%20Random%20server +NServers=1 +[IRChat-br] +0_Hostname=irc.irchat.com.br +0_Description=IRChat-br:%20Random%20server +NServers=1 +[IRCItalia] +0_Hostname=cagliari.ircitalia.net +0_Description=IRCItalia%20network +1_Hostname=campania.italiachat.net +1_Description=ItaliaChat%20network +2_Hostname=cosenza.ircitalia.net +2_Description=IRCItalia%20network +3_Hostname=lazio.italiachat.net +3_Description=ItaliaChat%20network%20main%20server +4_Hostname=pagana.italiachat.net +4_Description=Pagana%20IPv6%20server%20(SSL%20ready) +4_Port=7000 +5_Hostname=palermo.ircitalia.net +5_Description=IRCItalia%20network +6_Hostname=roma.italiachat.net +6_Description=ItaliaChat%20network +7_Hostname=trapani.ircitalia.net +7_Description=IRCItalia%20network +NServers=8 +[IRCLand] +0_Hostname=irc.ircland.org +0_Description=IRCLand%20random%20server +1_Hostname=maverick.ircland.org +1_Description=maverick +2_Hostname=power.ircland.org +2_Description=power +3_Hostname=white.ircland.org +3_Description=white +NServers=4 +[IRCLink] +0_Hostname=alesund.no.eu.irclink.net +0_Description=IRCLink:%20EU,%20NO,%20Alesund +1_Hostname=frogn.no.eu.irclink.net +1_Description=IRCLink:%20EU,%20NO,%20Oslo +2_Hostname=rockhill.sc.us.irclink.net +2_Description=IRCLink:%20US,%20SC,%20Rock%20Hill +NServers=3 +[IRCnet] +0_Hostname=irc.ircnet.org +0_Description=Main%20Random%20Server +1_Hostname=eu.ircnet.org +1_Description=Europe%20Random%20Server +2_Hostname=ix.irc.at +2_Description=IX%20Server +3_Hostname=linz.irc.at +3_Description=Linz%20Server +4_Hostname=vienna.irc.at +4_Description=Vienna%20Server +5_Hostname=ircnet.realroot.be +5_Description=RealROOT%20Server +6_Hostname=irc.datacomm.ch +6_Description=Datacomm%20Server +7_Hostname=irc.osanet.cz +7_Description=OSANET%20Server +8_Hostname=irc.i.cz +8_Description=ICZ%20Server +9_Hostname=irc.felk.cvut.cz +9_Description=Prague%20Server +10_Hostname=irc.leo.org +10_Description=LEO%20Server +11_Hostname=irc.belwue.de +11_Description=BelWue%20Server +12_Hostname=irc.freenet.de +12_Description=Freenet%20Server +13_Hostname=uni-erlangen.de +13_Description=University%20Of%20Nurnberg%20Server +14_Hostname=uni-karlsruhe.de +14_Description=University%20Of%20Karlsruhe%20Server +15_Hostname=tu-ilmenau.de +15_Description=University%20Of%20Ilmenau%20Server +16_Hostname=fu-berlin.de +16_Description=University%20Of%20Berlin%20Server +17_Hostname=irc.estpak.ee +17_Description=Elion%20Server +18_Hostname=irc.datanet.ee +18_Description=Linxtelecom%20Server +19_Hostname=irc.starman.ee +19_Description=Starman%20Server +20_Hostname=irc.opoy.fi +20_Description=Oulu%20Telephone%20Server +21_Hostname=irc.cs.hut.fi +21_Description=University%20Of%20Helsinki%20Server +22_Hostname=irc.elisa.fi +22_Description=Elisa%20Oyj%20Server +23_Hostname=irc.utu.fi +23_Description=University%20Of%20Turku%20Server +24_Hostname=irc.song.fi +24_Description=TDC%20Song%20Server +25_Hostname=irc1.inet.fi +25_Description=iNET%20Server +26_Hostname=irc.oulu.fi +26_Description=University%20Of%20Olutensin%20Server +27_Hostname=irc.jyu.fi +27_Description=University%20Of%20Jyvaskyla%20Server +28_Hostname=hub.cc.tut.fi +28_Description=Tampere%20Server +29_Hostname=irc.lut.fi +29_Description=University%20Of%20Ranta%20Server +30_Hostname=irc.cc.tut.fi +30_Description=Tampere%20Server +31_Hostname=irc.oamk.fi +31_Description=OuluNet%20Server +32_Hostname=ircnet.club-internet.fr +32_Description=T-Online%20France%20Server +33_Hostname=ircnet.nerim.fr +33_Description=Nerim%20Server +34_Hostname=elte.irc.hu +34_Description=University%20Of%20Budapest +35_Hostname=atw.irc.hu +35_Description=ATW%20Server +36_Hostname=extra.irc.hu +36_Description=Extra%20Server +37_Hostname=ssl.atw.irc.hu +37_Description=ATW%20Server +38_Hostname=hub.irc.hu +38_Description=Godollo%20HUB%20Server +39_Hostname=ircnet.netvision.net.il +39_Description=NetVision%20Server +40_Hostname=irc.simnet.is +40_Description=Iceland%20Telecom%20Server +41_Hostname=irc.hi.is +41_Description=University%20Of%20Iceland%20Server +42_Hostname=ircd.simnet.is +42_Description=Iceland%20Telecom%20HUB%20Server +43_Hostname=irc1.tiscali.it +43_Description=Tiscali%20Server +44_Hostname=javairc.tiscali.it +44_Description=Tiscali%20Server +45_Hostname=javairc2.tiscali.it +45_Description=Tiscali%20Server +46_Hostname=irc.flashnet.it +46_Description=Cybernet%20Italia%20Server +47_Hostname=irc.eutelia.it +47_Description=Eutelia%20Server +48_Hostname=irc.excite.it +48_Description=Excite%20Italia%20Server +49_Hostname=irc1.tin.it +49_Description=Telecom%20Italia%20Server +50_Hostname=irc2.tin.it +50_Description=Telecom%20Italia%20Server +51_Hostname=irc3.tin.it +51_Description=Telecom%20Italia%20Server +52_Hostname=ircd.tin.it +52_Description=Telecom%20Italia%20HUB%20Server +53_Hostname=irc.huie.hokudai.ac.jp +53_Description=University%20Of%20Hokkaido +54_Hostname=irc.nara.wide.ad.jp +54_Description=WIDE%20Project%20Nara%20NOC%20Server +55_Hostname=irc.tokyo.wide.ad.jp +55_Description=WIDE%20Project%20Tokyo%20NOC%20Server +56_Hostname=irc.fujisawa.wide.ad.jp +56_Description=WIDE%20Project%20Fujisawa%20NOC%20Server +57_Hostname=irc.media.kyoto-u.ac.jp +57_Description=Kyoto%20Server +58_Hostname=irc-new.media.kyoto-u.ac.jp +58_Description=Kyoto%20Server +59_Hostname=irc.apollo.lv +59_Description=Apollo%20Server +60_Hostname=ircd.snt.utwente.nl +60_Description=University%20Of%20Twente%20HUB%20Server +61_Hostname=irc.snt.utwente.nl +61_Description=University%20Of%20Twente%20Server +62_Hostname=irc.sci.kun.nl +62_Description=University%20Of%20Nijmegen%20Server +63_Hostname=irc.uunet.nl +63_Description=UUNET%20NL%20Server +64_Hostname=irc.xs4all.nl +64_Description=XS4ALL%20Server +65_Hostname=irc.ifi.uio.no +65_Description=University%20Of%20Oslo%20Server +66_Hostname=irc.pvv.ntnu.no +66_Description=IRCNO%20Server +67_Hostname=irc.hitos.no +67_Description=Tromsoe%20Server +68_Hostname=irc.powertech.no +68_Description=PowerTech%20Server +69_Hostname=irc.uib.no +69_Description=University%20Of%20Bergen +70_Hostname=uk.ircnet.org +70_Description=UK%20Random%20Server +71_Hostname=ircnet.demon.co.uk +71_Description=THUS%20Server +72_Hostname=irc.aau.dotsrc.org +72_Description=AAU%20DotSrc%20Server +73_Hostname=irc.dotsrc.org +73_Description=DotSrc%20Server +74_Hostname=warszawa.irc.pl +74_Description=ICM%20Server +75_Hostname=poznan.irc.pl +75_Description=UAM%20Server +76_Hostname=krakow.irc.pl +76_Description=AGH%20Server +77_Hostname=lublin.irc.pl +77_Description=UMCS%20Server +78_Hostname=irc.swipnet.se +78_Description=Tele2%20Sweden%20Server +79_Hostname=irc.desync.se +79_Description=IRCnet%20Project%20Server +80_Hostname=irc.okit.se +80_Description=OK%20IT%20AB%20Server +81_Hostname=irc.ludd.luth.se +81_Description=Lulea%20Server +82_Hostname=irc.arnes.si +82_Description=ARNES%20Server +83_Hostname=irc.triera.si +83_Description=Triera%20Server +84_Hostname=irc.fei.tuke.sk +84_Description=TUKE%20Server +85_Hostname=irc.nextra.sk +85_Description=Nextra%20Server +86_Hostname=irc.seed.net.tw +86_Description=Seednet%20Server +87_Hostname=irc.freebsd.org.tw +87_Description=FreeBSD.org%20Server +88_Hostname=us.ircnet.org +88_Description=USA%20Random%20Server +89_Hostname=ircnet.choopa.net +89_Description=Choopa,%20Inc%20Server +90_Hostname=temphub.choopa.net +90_Description=Choopa,%20Inc%20Server +91_Hostname=au.ircnet.org +91_Description=Australia%20Random%20Server +92_Hostname=eu.irc6.net +92_Description=Europe%20Random%20IPv6%20Server +93_Hostname=irc.ipv6.cesnet.cz +93_Description=CESNET2%20IPv6%20Server +94_Hostname=ircs.ircnet.ee +94_Description=IPv6%20Server +95_Hostname=irc.estpak.ee +95_Description=Elion%20Enterprises%20IPv6%20Server +96_Hostname=irc.datanet.ee +96_Description=Linxtelecom%20IPv6%20Server +97_Hostname=irc.starman.ee +97_Description=Starman%20IPv6%20Server +98_Hostname=irc6.ngnet.it +98_Description=Telecom%20Italia%20IPv6%20Server +99_Hostname=irc.eutelia.it +99_Description=Eutelia%20IPv6%20Server +100_Hostname=irc.powertech.no +100_Description=PowerTech%20IPv6%20Server +NServers=101 +[Irctoo] +0_Hostname=irc.irctoo.net +0_Description=Irctoo:%20Random%20server +NServers=1 +[IRCworld] +0_Hostname=irc.ircworld.org +0_Description=IRCworld:%20Random%20server +NServers=1 +[IsraelNet] +0_Hostname=irc.israel.net +0_Description=Israelnet:%20Random%20server +NServers=1 +[K0wNet] +0_Hostname=irc.k0w.net +0_Description=K0wNet:%20Random%20server +NServers=1 +[KewlOrg] +0_Hostname=irc.kewl.org +0_Description=Kewl.org:%20Random%20server +1_Hostname=london.uk.eu.kewl.org +1_Description=Kewl.org:%20EU,%20UK,%20London +2_Hostname=nanterre.fr.eu.kewl.org +2_Description=Kewl.org:%20EU,%20FR,%20Nanterre +NServers=3 +[Kreynet] +0_Hostname=irc.krey.net +0_Description=KreyNet:%20Random%20server +NServers=1 +[Krushnet] +0_Hostname=irc.krushnet.org +0_Description=Krushnet:%20Random%20server +NServers=1 +[LagNet] +0_Hostname=irc.lagnet.org.za +0_Description=LagNet:%20Random%20server +1_Hostname=mystery.lagnet.org.za +1_Description=LagNet:%20AF,%20ZA,%20Johannesburg +2_Hostname=reaper.lagnet.org.za +2_Description=LagNet:%20AF,%20ZA,%20Cape%20Town +NServers=3 +[Librenet] +0_Hostname=irc.librenet.net +0_Description=Librenet:%20Random%20server +NServers=1 +[Lunatics] +0_Hostname=irc.lunatics.net +0_Description=Lunatics:%20Random%20server +NServers=1 +[KidsWorld] +0_Hostname=irc.kidsworld.org +0_Description=Kidsworld:%20Random%20server +NServers=1 +[Knightnet] +0_Hostname=goldengate.ca.us.knightnet.net +0_Description=Knightnet:%20US,%20CA,%20Goldengate +1_Hostname=orc.dbn.za.knightnet.net +1_Description=Knightnet:%20AF,%20ZA,%20Durban +NServers=2 +[MagicStar] +0_Hostname=irc.magicstar.net +0_Description=MagicStar:%20Random%20server +NServers=1 +[MediaDriven] +0_Hostname=irc.mediadriven.com +0_Description=MediaDriven:%20Random%20server +NServers=1 +[Messique] +0_Hostname=irc.messique.org +0_Description=Messique:%20Random%20server +NServers=1 +[Mysteria] +0_Hostname=irc.mysteria.net +0_Description=Mysteria:%20Random%20server +NServers=1 +[Mystical] +0_Hostname=irc.mystical.net +0_Description=Mystical:%20Random%20server +NServers=1 +[NdrsNet] +0_Hostname=irc.ndrsnet.com +0_Description=NdrsNet:%20Random%20server +NServers=1 +[Net-France] +0_Hostname=irc.net-france.com +0_Description=Net-France:%20Random%20server +NServers=1 +[Nevernet] +0_Hostname=irc.nevernet.net +0_Description=Nevernet:%20Random%20server +NServers=1 +[NewIRC] +0_Hostname=irc.newirc.org +0_Description=NewIRC:%20Random%20server +NServers=1 +[Newnet] +0_Hostname=irc.chelmsford.com +0_Description=Newnet:%20US,%20MA,%20Chelmsford +1_Hostname=irc.fragglerock.org +1_Description=Newnet:%20US,%20CA,%20Flagglerock +2_Hostname=irc.newnet.net +2_Description=Newnet:%20Random%20server +3_Hostname=irc.oasis-net.net +3_Description=Newnet:%20EU,%20UK,%20Oasis +4_Hostname=irc.rma.edu +4_Description=Newnet:%20US,%20VA,%20Randolph +5_Hostname=irc.trusted-network.de +5_Description=Newnet:%20EU,%20DE,%20Trusted +6_Hostname=irc.uplink.net.nz +6_Description=Newnet:%20NZ,%20Auckland +NServers=7 +[Nexusirc] +0_Hostname=irc.nexusirc.org +0_Description=Nexusirc:%20Random%20server +NServers=1 +[NightStar] +0_Hostname=irc.nightstar.net +0_Description=Nightstar:%20Random%20server +NServers=1 +[NitroNet] +0_Hostname=irc.nitro.net +0_Description=NitroNet:%20Random%20server +NServers=1 +[Novernet] +0_Hostname=irc.novernet.com +0_Description=Novernet:%20Random%20server +1_Hostname=chat.novernet.com +1_Description=Novernet:%20US,%20MN,%20Minneapolis +2_Hostname=irc.c-plusnet.com +2_Description=Novernet:%20US,%20GA,%20Augusta +NServers=3 +[Oddnet] +0_Hostname=irc.oddnet.org +0_Description=Oddnet:%20Random%20server +NServers=1 +[Othernet] +0_Hostname=irc.othernet.org +0_Description=Othernet:%20Random%20server +1_Hostname=miami.fl.us.othernet.org +1_Description=Othernet:%20US,%20FL,%20Miami +2_Hostname=stlouis.mo.us.othernet.org +2_Description=Othernet:%20US,%20MO,%20StLouis +NServers=3 +[OtherSide] +0_Hostname=irc.othersideirc.net +0_Description=Otherside:%20Random%20server +NServers=1 +[Outsiderz] +0_Hostname=irc.outsiderz.com +0_Description=Outsiderz:%20Random%20server +NServers=1 +[OzOrg] +0_Hostname=aussie.sydney.oz.org +0_Description=OzOrg:%20AU,%20Sydney +1_Hostname=chariot.adelaide.oz.org +1_Description=OzOrg:%20AU,%20Adelaide +2_Hostname=iinet.perth.oz.org +2_Description=OzOrg:%20AU,%20Perth +NServers=3 +Description=Australian%20Network +[Philchat] +0_Hostname=irc.philchat.net +0_Description=Philchat:%20Random%20server +NServers=1 +[Pinoycentral] +0_Hostname=chat.abs-cbn.com +0_Description=Pinoycentral:%20Random%20server +NServers=1 +[Planetarion] +0_Hostname=irc.planetarion.com +0_Description=Planetarion:%20Random%20server +NServers=1 +[PortalX] +0_Hostname=irc.portalx.org +0_Description=PortalX:%20Random%20server +1_Hostname=aphrodite.portalx.org +1_Description=PortalX:%20Aphrodite +2_Hostname=apollo.portalx.org +2_Description=PortalX:%20Apollo +3_Hostname=ares.portalx.org +3_Description=PortalX:%20Ares +4_Hostname=athena.portalx.org +4_Description=PortalX:%20Athena +5_Hostname=demeter.portalx.org +5_Description=PortalX:%20Demeter +6_Hostname=eos.portalx.org +6_Description=PortalX:%20Eos +7_Hostname=thor.portalx.org +7_Description=PortalX:%20Thor +8_Hostname=zeus.portalx.org +8_Description=PortalX:%20Zeus +NServers=9 +[Psionics] +0_Hostname=chat.psionics.net +0_Description=Psionics:%20CA,%20PQ,%20Montreal +NServers=1 +[PTlink] +0_Hostname=irc.ptlink.net +0_Description=PTlink:%20Random%20server +NServers=1 +[PTnet] +0_Hostname=telepac2.ptnet.org +0_Description=PTnet:%20EU,%20PT,%20Lisboa +1_Hostname=ualg.ptnet.org +1_Description=PTnet:%20EU,%20PT,%20Faro +NServers=2 +[QChat] +0_Hostname=irc.qchat.net +0_Description=QChat:%20Random%20server +NServers=1 +[QuakeNet] +0_Hostname=irc.quakenet.org +0_Description=Main%20Random%20Server +1_Hostname=irc.quakenet.eu.org +1_Description=Europe%20Random%20Server +2_Hostname=jubiigames.dk.quakenet.org +2_Description=Denmark%20Server +3_Hostname=mediatraffic.fi.quakenet.org +3_Description=Finland%20Server +4_Hostname=euroserv.fr.quakenet.org +4_Description=France%20Server +5_Hostname=splatterworld.de.quakenet.org +5_Description=Germany%20Server +6_Hostname=ign.ie.quakenet.org +6_Description=Ireland%20Server +7_Hostname=ngi.it.quakenet.org +7_Description=Italy%20Server +8_Hostname=xs4all.nl.quakenet.org +8_Description=Netherlands%20Server +9_Hostname=online.no.quakenet.org +9_Description=Norway%20Server +10_Hostname=underworld.no.quakenet.org +10_Description=Norway%20Server +11_Hostname=port80.se.quakenet.org +11_Description=Sweden%20Server +12_Hostname=stockholm.se.quakenet.org +12_Description=Sweden%20Server +13_Hostname=wineasy.se.quakenet.org +13_Description=Sweden%20Server +14_Hostname=b0rk.uk.quakenet.org +14_Description=UK%20Server +15_Hostname=blueyonder.uk.quakenet.org +15_Description=UK%20Server +16_Hostname=demon.uk.quakenet.org +16_Description=UK%20Server +17_Hostname=freddyshouse.uk.quakenet.org +17_Description=UK%20Server +18_Hostname=multiplay.uk.quakenet.org +18_Description=UK%20Server +19_Hostname=gameservers.il.us.quakenet.org +19_Description=USA%20Server +20_Hostname=gameservers.nj.us.quakenet.org +20_Description=USA%20Server +21_Hostname=netfire.tx.us.quakenet.org +21_Description=USA%20Server +22_Hostname=netfire.va.us.quakenet.org +22_Description=USA%20Server +23_Hostname=servercentral.il.us.quakenet.org +23_Description=USA%20Server +NServers=24 +[Raptornet] +0_Hostname=irc.raptornet.org +0_Description=Raptornet:%20Random%20server +NServers=1 +[Realirc] +0_Hostname=irc.realirc.org +0_Description=Realirc:%20Random%20server +NServers=1 +[Rebelchat] +0_Hostname=irc.rebelchat.org +0_Description=Rebelchat:%20Random%20server +NServers=1 +[RedeSul] +0_Hostname=irc.braznet.com.br +0_Description=RedeSul:%20BR,%20SC,%20Blumenau +1_Description=RedeSul:%20BR,%20PR,%20Maringa +1_Hostname=irc.wnet.com.br +NServers=2 +[Red-Latina] +0_Hostname=irc.red-latina.org +0_Description=Red-Latina:%20Random%20server +1_Hostname=irc.dalsom.net +1_Description=Red-Latina:%20NA,%20MX,%20SanJose +NServers=2 +[RedLatona] +0_Hostname=irc.redlatona.net +0_Description=RedLatona:%20Random%20server +NServers=1 +[Relicnet] +0_Hostname=irc.relic.net +0_Description=Relicnet:%20Random%20server +NServers=1 +[Rezosup] +0_Hostname=irc.rezosup.org +0_Description=Rezosup:%20Random%20server +NServers=1 +[Risanet] +0_Hostname=irc.risanet.com +0_Description=Risanet:%20Random%20server +NServers=1 +[Rusnet] +0_Hostname=irc.rinet.ru +0_Description=Rusnet:%20EU,%20RU,%20Moscow +1_Hostname=irc.tomsk.net +1_Description=Rusnet:%20EU,%20RU,%20Tomsk +2_Hostname=irc.primorye.ru +2_Description=Rusnet:%20EU,%20RU,%20Vladivostok +NServers=3 +Description=Russian%20Network +Encoding=CP-1251 +[Sandnet] +0_Hostname=irc.sandnet.net +0_Description=Sandnet:%20Random%20server +NServers=1 +[Scunc] +0_Hostname=irc.scunc.net +0_Description=Scunc:%20Random%20server +NServers=1 +[SexNet] +0_Hostname=irc.sexnet.org +0_Description=SexNet:%20Random%20server +NServers=1 +[ShadowFire] +0_Hostname=irc.shadowfire.org +0_Description=ShadowFire:%20Random%20server +NServers=1 +[ShadowWorld] +0_Hostname=irc.shadowworld.net +0_Description=ShadowWorld:%20Random%20server +NServers=1 +[Skyyenet] +0_Hostname=arlington.va.us.skyyenet.org +0_Description=Skyyenet:%20US,%20VA,%20Arlington +NServers=1 +[Slashnet] +0_Hostname=irc.slashnet.org +0_Description=Slashnet:%20Random%20server +NServers=1 +[SolarNet] +0_Hostname=irc.solarnet.ru +0_Description=Main%20network%20server +NServers=1 +Description=Russian%20Network +Encoding=CP-1251 +[SolidIRC] +0_Hostname=irc.solidirc.com +0_Description=SolidIRC:%20Random%20server +NServers=1 +[Sorcery] +0_Hostname=irc.sorcery.net +0_Description=Sorcerynet:%20Random%20server +1_Hostname=kechara.sorcery.net +1_Description=Sorcerynet:%20US,%20CA,%20Palo%20Alto +2_Hostname=nexus.sorcery.net +2_Description=Sorcerynet:%20EU,%20SE,%20Karlskrona +NServers=3 +[Spamnet] +0_Hostname=irc.spamnet.org +0_Description=Spamnet:%20Random%20server +NServers=1 +[StarChat] +0_Hostname=irc.starchat.net +0_Description=StarChat:%20Random%20server +1_Hostname=boomer.qld.au.starchat.net +1_Description=StarChat:%20AU,%20QLD,%20SouthernCross +2_Hostname=reality.no.eu.starchat.net +2_Description=StarChat:%20EU,%20NO,%20Asker +3_Hostname=sand.ca.us.starchat.net +3_Description=StarChat:%20US,%20CA,%20San%20Jose +NServers=4 +[StarLink] +0_Hostname=irc.starlink.org +0_Description=StarLink%20Org:%20Random%20server +NServers=1 +[StarLink-irc] +0_Hostname=irc.starlink-irc.org +0_Description=StarLink-irc:%20Random%20server +NServers=1 +[StarWars-IRC] +0_Hostname=irc.starwars-irc.net +0_Description=StarWars-IRC:%20Random%20server +NServers=1 +[Stormdancing] +0_Hostname=irc.stormdancing.net +0_Description=Stormdancing:%20Random%20server +NServers=1 +[Sub-city] +0_Hostname=irc.sub-city.net +0_Description=Sub-city:%20Random%20server +NServers=1 +[Superchat] +0_Hostname=irc.superchat.org +0_Description=Superchat:%20Random%20server +NServers=1 +[SyrolNet] +0_Hostname=irc.syrolnet.org +0_Description=SyrolNet%20round%20robin +1_Hostname=ipv6.syrolnet.org +1_Description=IPv6%20round%20robin +2_Hostname=moon.syrolnet.org +2_Description=Moon%20irc%20server +3_Hostname=phobos.syrolnet.org +3_Description=IPv6/IPv4%20server +NServers=4 +Description=Italian%20Network +[Sysopnet] +0_Hostname=irc.sysopnet.org +0_Description=Sysopnet:%20Random%20server +NServers=1 +[Techdreams] +0_Hostname=irc.techdreams.net +0_Description=Techdreams:%20Random%20server +NServers=1 +[Telstra] +0_Hostname=irc.telstra.com +0_Description=Telstra:%20Random%20server +NServers=1 +[Terra] +0_Hostname=irc.terra.cl +0_Description=Terra%20Chile +1_Hostname=irc.terra.com +1_Description=Terra%20USA +2_Hostname=irc.terra.es +2_Description=Terra%20Spain +NServers=3 +[TR-net] +0_Hostname=irc.dominet.com.tr +0_Description=TR-net:%20EU,%20TR,%20Ankara +1_Hostname=irc.teklan.com.tr +1_Description=TR-net:%20EU,%20Tr,%20Istanbul +NServers=2 +[Tri-net] +0_Hostname=irc.tri-net.org +0_Description=Tri-net:%20Random%20server +NServers=1 +[UltraIRC] +0_Hostname=irc.ultrairc.net +0_Description=UltraIRC:%20Random%20server +NServers=1 +[UnderNet] +0_Hostname=irc.undernet.org +0_Description=Main%20Random%20Server +1_Hostname=eu.undernet.org +1_Description=Europe%20Random%20Server +2_Hostname=bucharest.ro.eu.undernet.org +2_Description=Romania%20Server +3_Hostname=Carouge.ch.eu.undernet.org +3_Description=Switzerland%20Server +4_Hostname=diemen.nl.eu.undernet.org +4_Description=Netherlands%20Server +5_Hostname=ede.nl.eu.undernet.org +5_Description=Netherlands%20Server +6_Hostname=elsene.be.eu.undernet.org +6_Description=Belgium%20Server +7_Hostname=graz.at.eu.undernet.org +7_Description=Austria%20Server +8_Hostname=helsinki.fi.eu.undernet.org +8_Description=Finland%20Server +9_Hostname=lelystad.nl.eu.undernet.org +9_Description=Netherlands%20Server +10_Hostname=london.uk.eu.undernet.org +10_Description=UK%20Server +11_Hostname=london2.uk.eu.undernet.org +11_Description=UK%20Server +12_Hostname=oslo1.no.eu.undernet.org +12_Description=Norway%20Server +13_Hostname=oslo2.no.eu.undernet.org +13_Description=Norway%20Server +14_Hostname=zagreb.hr.eu.undernet.org +14_Description=Croatia%20Server +15_Hostname=us.undernet.org +15_Description=USA%20Random%20Server +16_Hostname=losangeles.ca.us.undernet.org +16_Description=USA%20Server +17_Hostname=mesa.az.us.undernet.org +17_Description=USA%20Server +18_Hostname=newyork.ny.us.undernet.org +18_Description=USA%20Server +NServers=19 +[UnderZ] +0_Hostname=irc.underz.org +0_Description=UnderZ:%20Random%20server +NServers=1 +[UnionLatina] +0_Hostname=irc.unionlatina.org +0_Description=UnionLatina:%20Random%20server +NServers=1 +[Univers] +0_Hostname=irc.univers.org +0_Description=Univers:%20Random%20server +NServers=1 +[Vidgamechat] +0_Hostname=irc.vidgamechat.com +0_Description=Vidgamechat:%20Random%20server +NServers=1 +[Vitamina] +0_Hostname=irc-rr.vitamina.ca +0_Description=Vitamina:%20Random%20server +NServers=1 +[Orange/Voila] +0_Hostname=chat14.x-echo.com +0_Description=Chat14 server +NServers=1 +Description=French%20Orange/Voila%20network%20(old%20name:%20Wanadoo/Voila) +[Warpednet] +0_Hostname=irc.warped.net +0_Description=Warpednet:%20Random%20server +NServers=1 +[Webnet] +0_Hostname=irc.webchat.org +0_Description=Webnet:%20Random%20server +1_Hostname=greennet.ma.us.webchat.org +1_Description=Webnet:%20US,%20MA,%20Boston +2_Hostname=webmaster.ca.us.webchat.org +2_Description=Webnet:%20US,%20CA,%20Santa%20Clara +3_Hostname=wiregrass.al.us.webchat.org +3_Description=Webnet:%20US,%20AL,%20Dothan +NServers=4 +[WeNet] +0_Hostname=irc.wenet.ru +0_Description=Primary%20WeNet%20server +NServers=1 +Encoding=CP-1251 +Description=Russian%20Network +[WorldIRC] +0_Hostname=irc.worldirc.org +0_Description=WorldIRC:%20Random%20server +NServers=1 +[Xevion] +0_Hostname=irc.xevion.net +0_Description=Xevion:%20Random%20server +NServers=1 +[XNet] +0_Hostname=irc.xnet.org +0_Description=XNet:%20Random%20server +NServers=1 +[XWorld] +0_Hostname=irc.xworld.org +0_Description=XWorld:%20Random%20server +NServers=1 +[ZAnetNet] +0_Hostname=lia.zanet.net +0_Description=ZAnet%20Net:%20AF,%20ZA,%20CI%20(lia) +1_Hostname=timewiz.zanet.net +1_Description=ZAnet%20Net:%20AF,%20ZA,%20MWeb%20(timewiz) +NServers=2 +[ZAnetOrg] +0_Hostname=ethereal.zanet.org.za +0_Description=ZAnet%20Org:%20AF,%20ZA,%20Midrand%20(ethereal) +1_Hostname=gaspode.zanet.org.za +1_Description=ZAnet%20Org:%20AF,%20ZA,%20Cape%20Town%20(gaspode) +2_Hostname=is.zanet.org.za +2_Description=ZAnet%20Org:%20AF,%20ZA,%20Johannesburg%20(is) +NServers=3 +[ZiRC] +0_Hostname=irc.zirc.org +0_Description=ZiRC:%20Random%20server +NServers=1 +[ZUHnet] +0_Hostname=irc.zuh.net +0_Description=ZUHnet:%20Random%20server +NServers=1 +[Zurna] +0_Hostname=irc.zurna.net +0_Description=Zurna:%20Random%20server +NServers=1 +[PenguinFriends] +0_Hostname=irc.penguinfriends.org +0_Description=PenguinFriends:%20Random%20server +1_Hostname=pf-gaming.penguinfriends.org +1_Description=pf-gaming.penguinfriends.org +2_Hostname=onlyfreaks.penguinfriends.org +2_Description=onlyfreaks.penguinfriends.org +3_Hostname=irc.penguinfriends.org +3_Description=PenguinFriends:%20Random%20server SSL +3_SSL=true +3_Port=6670 +NServers=4 diff --git a/data/config/texticons.kvc b/data/config/texticons.kvc new file mode 100644 index 0000000..09d45c8 --- /dev/null +++ b/data/config/texticons.kvc @@ -0,0 +1,39 @@ +[Manager] +# Default configuration of texticons. +# If you add any entry then please increase this number both here +# and in kvi_texticonmanager.cpp (they MUST match) +ConfigUpdate=3 +[TextIcons] +smile=94 +sad=95 +heart=214 +irc=208 +bomb=82 +spy=109 +home=107 +heartbreak=215 +rose=216 +biggrin=217 +smileglasses=218 +surprise=219 +idea=148 +penguin=111 +linux=111 +flower=124 +love=214 +lol=217 +exclamation=220 +!=220 +dots=221 +...=221 +?=49 +question=49 +kiss=222 +finger=268 +prrr=265 +time=93 +shy=271 +oooh=223 +cafe=273 +hum=282 +slurp=283 diff --git a/data/defscript/Makefile.am b/data/defscript/Makefile.am new file mode 100644 index 0000000..768c9b8 --- /dev/null +++ b/data/defscript/Makefile.am @@ -0,0 +1,11 @@ +tmpdir = $(defscriptdir) + +tmp_DATA = default.kvs \ + aliases.kvs \ + events.kvs \ + popups.kvs \ + toolbars.kvs \ + installer.kvs \ + theme-install.kvs + +EXTRA_DIST = $(tmp_DATA) diff --git a/data/defscript/aliases.kvs b/data/defscript/aliases.kvs new file mode 100644 index 0000000..5d8d729 --- /dev/null +++ b/data/defscript/aliases.kvs @@ -0,0 +1,706 @@ +# Default aliases file + +# +# TODO: +# ignore, notify and unignore should go in the core +# +# If possible, get rid of $str.* from the default popups +# avoiding to load the module at every channel popup open action... +# (Find a core function that retrieves the number of nicknames passed ?) +# Another solution would be to increase the str.module core lock-time ? +# + +# +# Backward compatibility stuff +# +alias(avatar) +{ + # avatar target file + if(!$0) + { + echo "Missing target, no action taken" + return + } + if($1) + { + avatar.set $1 + } + avatar.notify $0 +} + +alias(clear) +{ + window.clearOutput +} + +alias(connect) +{ + objects.connect $0 $1 $2 $3 +} + +alias(disconnect) +{ + objects.disconnect $0 $1 $2 $3 +} + +alias(killclass) +{ + objects.killclass $0 +} + +alias(clearobjects) +{ + objects.clear $0 +} + +alias(nickserv) +{ + # Silent + raw -q NickServ $0- +} + +alias(chanserv) +{ + # Silent + raw -q ChanServ $0- +} + +alias(memoserv) +{ + # Silent + raw -q MemoServ $0- +} + +alias(ns) +{ + # Silent + raw -q nickserv $0- +} + +alias(cs) +{ + # Silent + raw -q chanserv $0- +} + +alias(ms) +{ + # Silent + raw -q memoserv $0- +} + +alias(gnotice) +{ + # Global notice + + #Check null notice + if(!$0){ + echo $tr("Usage"): /gnotice [-waohvq] <$tr("message")> + echo $tr("-m: send a message instead of a notice") + echo $tr("-w: send notice to all channel owners") + echo $tr("-a: send notice to all channel admins") + echo $tr("-o: send notice to all channel ops") + echo $tr("-h: send notice to all channel halfops") + echo $tr("-v: send notice to all channel voices") + echo $tr("-q: quiet mode") + halt + } + + # Detect message type + if($sw(m)) %cmd="msg" + else %cmd="notice" + + # Check for quiet message + if($sw(q)) %cmd=$str.append(%cmd," -q") + + # Check null switches + if((!$sw(w))&&(!$sw(a))&&(!$sw(o))&&(!$sw(h))&&(!$sw(v))){ + eval %cmd $chan.name($active) $0- + halt + } + + # Check switches passed + if($sw(w)) eval %cmd \~$chan.name($active) $0- + if($sw(a)) eval %cmd \!$chan.name($active) $0- + if($sw(o)) eval %cmd \@$chan.name($active) $0- + if($sw(h)) eval %cmd \%$chan.name($active) $0- + if($sw(v)) eval %cmd \+$chan.name($active) $0- +} + +alias(wallop) +{ + if(!$0){ + echo $tr("Usage"): /wallop <$tr("message")> + halt + } + + # Due to server flood, timing may be very high + echo -w=$active $tr("Sending wallop to") $chan.name($active) + timer(wallop,5000,$chan.users(,,o),$0-){ + if(%:localOps == ""){ %:localOps = $chan.users(,,o); %:curIndex = 0; } + if(%:curIndex == %:localOps[]#){ killtimer wallop; return; } + + for(%i=0;%i<1;%i++){ + if(%:localOps[%:curIndex] != $my.nick){ + if(%:curIndex == %:localOps[]#){ killtimer wallop; return; } + msg -q %:localOps[%:curIndex] $1- + %:curIndex++ + } + } + } +} + +alias(kill){ + raw -q kill $0 :$1- +} + +alias(ms) +{ + # Silent + quote ms $0- +} + +# j: This is a really common one +alias(j) +{ + #first we do a test if a chan is given as parameter + if(!$0) + { + echo $tr("Usage:") + echo " /j " + } else { + join $0- + } +} + +# s: This too +alias(s) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /s " + } else { + server $0- + } +} + +# q: Ok, I am lazy :P +alias(q) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /q " + } else { + query $0- + } +} + + +# names: maybe this should be implemented on the core? +alias(names) +{ + if(!$0) + { + if($window.type($active)!="channel") + { + echo $tr("Usage:") "/names " + } else { + raw names $active + } + } else { + raw names $0- + } +} + +# kickban +alias(kb) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /kb [" $tr("reason") "]" + halt; + } + + if(!$channel) + { + echo "[KB]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + %mask = $mask(%nick,$option(uintDefaultBanType)); + + if(!%mask)%mask = %nick; # plain ban + + %reason = $1- + #if(!%reason)%reason = "You're not welcome here!" + + # This is tricky : we send everything + # as a single raw message just because + # we do not want delays between kick and ban + # if anti-server-flood is enabled + + %raw = "kick $target %nick :%reason" + + # kick %nick %reason + + if($chan.isOp(%nick))%raw2 = "mode $target -o+b %nick %mask" + else %raw2 = "mode $target +b %mask" + + raw -q %raw2$cr$lf%raw + } + } +} + +# chanowner +alias(chanowner) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /chanowner " + halt; + } + if(!$channel) + { + echo "[CHANOWNER]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() +q %nick + } + } +} + +# chanadmin +alias(chanadmin) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /chanadmin " + halt; + } + if(!$channel) + { + echo "[CHANADMIN]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() +a %nick + } + } +} + +# dechanowner +alias(dechanowner) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /dechanowner " + halt; + } + if(!$channel) + { + echo "[DECHANOWNER]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() -q %nick + } + } +} + +# dechanadmin +alias(dechanadmin) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /dechanadmin " + halt; + } + if(!$channel) + { + echo "[DECHANADMIN]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() -a %nick + } + } +} + +# halfop +alias(halfop) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /halfop " + halt; + } + if(!$channel) + { + echo "[HALFOP]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() +h %nick + } + } +} + +# dehalfop +alias(dehalfop) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /dehalfop " + halt; + } + if(!$channel) + { + echo "[DEHALFOP]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() -h %nick + } + } +} + +# userop +alias(userop) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /userop " + halt; + } + if(!$channel) + { + echo "[USEROP]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() +u %nick + } + } +} + +# deuserop +alias(deuserop) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /deuserop " + halt; + } + if(!$channel) + { + echo "[DEUSEROP]: " $tr("This is not a channel window") + halt; + } + + foreach(%nick,$str.split(",",$0)) + { + if(%nick) + { + mode $chan.name() -u %nick + } + } +} + +# ame and amsg +alias(ame) +{ + foreach(%i,$window.list(channel))if(%i!="") me -r=%i $0- +} + +alias(amsg) +{ + foreach(%i,$window.list(channel))msg $target(%i) $0- +} + +alias(amsgall) +{ + foreach(%i,$window.list(channel),$window.list(query))msg $target(%i) $0- +} + +alias(ameall) +{ + foreach(%i,$window.list(channel),$window.list(query)){ + if(%i!="") me -r=%i $0- + } +} + +alias(awayall) +{ + foreach(%w,$window.list(console,all))away -r=%w $0-; +} + +# notify: this is a bit more complex +# We want to add an user to the notify list with a single command +# The notify lists are handled thru the registered users database +alias(notify) +{ + # This one adds a registered users database entry + # For the specified nick and uses the specified mask + # If no mask is specified , a default one is constructed + # Then the "notify" property is set for the user + + if(!$0) + { + echo $tr("Usage:") + echo " /notify [mask]" + halt + } + + # Get the mask + + %mask = $1 + + # no mask specified ? build it + + if(!%mask)%mask = $0!*@* + + # Now add the user (but do not replace old entries) + + reguser.add -f -q $0 %mask + + # Merge the notify property part with the old one (if any) + + %oldNicks = $reguser.property($0,notify) + + # It would be a good idea to check if the nikckname is already in the %oldNicks list + # but this is left as exercise for the reader. + + %oldNicks << $0 + + # And finally set the property (use -n so the notify lists will be restarted) + + reguser.setproperty -n $0 notify $0 + + # done...the notify list should be restarted now +} + +alias(ignore) +{ + # This one adds a registered users database entry + # For the specified nick and uses the specified mask + # If no mask is specified , a default one is constructed + # Then the "ignore" property is set for the user to 1 + + if(!$0) + { + echo $tr("Usage:") + echo " /ignore [-r] " + halt + } + + # Now add the user (but do not replace old entries) + + reguser.add $0 $mask($0,15); + + # And finally set the property (use -n so the notify lists will be restarted) + # Check if ignore or unignore the user + + if(!$sw(r,remove)) + { + reguser.setIgnoreEnabled $0 1 + reguser.setIgnoreFlags -p -c -n -t -i -d $0 + } else reguser.setIgnoreEnabled $0 0 +} + +# Dcc...people commonly use "dcc send" instead of "dcc.send" +alias(dcc) +{ + switch($0) + { + case(send): + { + dcc.send $1- + break + } + case(chat): + { + dcc.chat $1- + break + } + case(voice): + { + dcc.voice $1- + break + } + case(allow): + { + quote dccallow $1- + break + } + default: + { + echo "[DCC]: " $tr("Unsupported type: $0") + } + } +} + +# +# return a string with the name of the curerent usermode +# +alias(usermodename) +{ + if(!$0) + { + echo $tr("Usage:") + echo " /usermodename " + halt; + } + if(!$channel) + { + echo "[USERMODENAME]: " $tr("This is not a channel window") + halt; + } + + if($chan.isOwner($0,$channel)){ + return $tr("Channel Owner") + } elseif($chan.isAdmin($0,$channel)){ + return $tr("Channel Administrator") + } elseif($chan.isOp($0,$channel)){ + return $tr("Channel Operator") + } elseif($chan.isHalfOp($0,$channel)){ + return $tr("Half Operator") + } elseif($chan.isVoice($0,$channel)){ + return $tr("Voice") + } elseif($chan.isUserOp($0,$channel)){ + return $tr("User Operator") + } else { + return $tr("Normal User") + } +} + +alias(dccallow) +{ + quote dccallow \+$0 +} + +#shortcut for commonly called algorithm +alias(md5) +{ + return $str.digest($0-,md5) +} + +alias(sha1) +{ + return $str.digest($0-,sha1) +} + +# DNS : people like it +alias(dns) +{ + if(!$context) + { + echo "[DNS]: " $tr("You must use DNS in an IRC context") + halt + } + + if(!$server) + { + echo "[DNS]: " $tr("You must be connected to a server") + halt + } + + if(!$0) + { + echo $tr("Usage:") + echo echo " /dns " + halt + } + + if($isWellKnown($0))host -a $hostname($0) + else { + awhois($0) + { + if(!$2) + { + echo "[DNS]: " $tr("No such user: $0") + } else { + host -a $2 + } + } + } +} + +alias(ss) +{ + # Silent + quote ss $0- +} + +alias(seenserv) +{ + # Silent + msg -q SeenServ $0- +} + +alias(hs) +{ + #Silent + quote hs $0- +} + +alias(hop) +{ + // Retrieve channel + %chan=$0 + if(!%chan) %chan=$chan.name($active) + + // Retrieve channel key + %key=$chan.key($channel(%chan)) + + // Exit channel + if($window.type($channel(%chan))=="channel") + part --keep %chan $option(stringPartMessage) + + // Rejoin channel + if(!%key) join %chan + else join %chan %key +} diff --git a/data/defscript/default.kvs b/data/defscript/default.kvs new file mode 100644 index 0000000..fb270da --- /dev/null +++ b/data/defscript/default.kvs @@ -0,0 +1,37 @@ +################################################################################################# +# +# This is the default script for KVIrc +# Feel free to use it as base for writing your own scripts +# It is a good starting point; I have tried to add as many comments as possible. +# +# Have fun :) +# Szymon Stefanek +# +################################################################################################# + +%mypath = "$file.extractpath($0)$file.ps" + +# Fetch default scripts data +include "aliases.kvs" %mypath +include "events.kvs" %mypath +include "popups.kvs" %mypath +include "toolbars.kvs" %mypath + +# +# Set the default spam words...(for the anti-spam) detector +# + +# FIXME: these should be MERGED!!!! + +#%tmp = $option(stringlistSpamWords) +#%tmp[] = $array() ??? + +option stringlistSpamWords "http:","#","www.","auto","query","ftp:","sex","free","msg","chat","dynamirc","script" + +options.save + +echo $tr("The default script has been successfully installed.") +echo $tr("To connect to a server, type /server ") +echo "---" +echo $tr("Happy ircing :)") +echo "- Szymon Stefanek $tr("and the KVIrc Development Team")" diff --git a/data/defscript/events.kvs b/data/defscript/events.kvs new file mode 100644 index 0000000..575cfc3 --- /dev/null +++ b/data/defscript/events.kvs @@ -0,0 +1,105 @@ +# Default events file + +event(OnDccChatPopupRequest,default) +{ + popup dccchat $0; +} + +event(OnChannelPopupRequest,default) +{ + popup channeltextview $target; +} + +event(OnConsolePopupRequest,default) +{ + popup consoletextview; +} + +event(OnChannelLinkPopupRequest,default) +{ + if($0 != "") popup channelpopup $0; +} + +event(OnQueryPopupRequest,default) +{ + if($target) popup querytextview $target; +} + +event(OnQueryNickPopupRequest,default) +{ + if($0 != "") popup querytextview $0; +} + +event(OnQueryFileDropped,default) +{ + if($0 != "") dcc.send $target $0; +} + +event(OnNickLinkDefaultActionRequest,default) +{ + if($0 != "") whois $0; +} + +event(OnNickLinkPopupRequest,default) +{ + if($0 != "") popup defaulttextview $0; +} + +event(OnNotifyListDefaultActionRequest,default) +{ + if($0 != "") + { + query $0; whois $0 $0; + } +} + +event(OnNotifyListPopupRequest,default) +{ + if($0 != "") popup defaulttextview $0; +}; + +event(OnWindowPopupRequest,default) +{ + popup windowpopup; +} + +event(OnChannelWindowCreated,default) +{ + button(w,Logging,119,Logging) + { + popup -p=$0,$1 logging; + } +} + +event(OnQueryWindowCreated,default) +{ + button(w,Logging,119,Logging) + { + popup -p=$0,$1 logging; + } +} + +event(OnChannelNickLinkClick,default) +{ + if($0 != "") window.insertInInputText $window $0$option(stringNickCompletionPostfix); +} + +event(OnChannelNickPopupRequest,default) +{ + if($0 != "") popup channel $0; +} + +event(OnChannelNickDefaultActionRequest,default) +{ + if(!$isEmpty($0)) query $0; +} + +event(OnURLLinkPopupRequest,URL popup) +{ + popup urlpopup $0 +} + +event(OnHostLinkPopupRequest,default) +{ + popup hostpopup $0; +} diff --git a/data/defscript/installer.kvs b/data/defscript/installer.kvs new file mode 100644 index 0000000..f974b7e --- /dev/null +++ b/data/defscript/installer.kvs @@ -0,0 +1,169 @@ +/* + A helper class for installing and parsing files, + and generating an uninstallation alias on the fly. + + Example : + include "utils/installer.kvs" + %installer = $new(installer,0,myinstaller) + %installer->$copyFiles(pics,*.png,$file.localdir(pics)) + %installer->$includeFiles(src,*.kvs) + %installer->generateUninstallAlias("foo::uninstall") + delete %installer + Here, "foo::uninstall" must be called in you uninstall + callback script. + + Warnings: + 1) Declaration of aliases, popups, etc, in source files + (.kvs) must be in a similar format + as when you export them directly from kvirc. + Example: + alias(myalias) + defpopup(mypopup) + 2) If you use a "defpopup -m" to add an item to an + existing popup,this item won't be registered + automatically for uninstallation by this installer script. + You should typically identify the item you added using + the "id" parameter. See this example where the id is + "myaddon::myitem": + defpopup -m (channeltextview) + { + item(MyItem)(myaddon::myitem) + { + ... + } + } + Then, you add this line to you uninstall callback + script: + delpopupitem channeltextview myaddon::myitem +*/ +class(installer,object) +{ + constructor() + { + } + + copyFiles($0 = source dir,$1 = file regexp,$2 = target dir) + { + if(!$file.exists($0))return + if($isempty($0)) + { + echo $tr("[Installer] The first argument to \%installer->\$copyfiles must be a source directory") + halt + } + + if($isempty($1)) + { + echo $tr("[Installer] The second argument to \%installer->\$copyfiles must be a file name or file regexp") + halt + } + + if($isempty($2)) + { + echo $tr("[Installer] The third argument to \%installer->\$copyfiles must be a destination directory") + halt + } + + if($file.exists($0)) + { + %files = $file.ls($file.fixpath($0),f,$1) + if($length(%files)) + { + @$mkdir($2) + foreach(%file,%files) + { + $this->%lFiles <+ $str.replace($file.fixpath("$2/%file"),"\\\\","\\") + file.copy -o $file.fixpath($0/%file) $file.fixpath($2/%file) + } + } + } + } + + // Recursive creation of directory + mkdir($0 = directory) + { + if($isempty($0) || $file.exists($0)) return + foreach -a (%subdir,$str.split("/",$file.fixpath($0))) + { + %p <+ %subdir + %path = $str.join("/",%p) + if(!$file.exists(%path)) + file.mkdir -q %path + } + if(!$file.exists($0)) + { + echo $tr("[Installer] Failed to create directory") \"$0\" + return + } + } + + // Parse source files and get what will need to be uninstalled + includeFiles($0 = dir, $1 = file regexp) + { + if($isempty($0)) + { + echo $tr("[Installer] The first argument to \%installer->\$includefiles must be a source directory") + halt + } + + @$mkdir($0) + + if($1 == "") + %szRe = "*.kvs" + else + %szRe = $1 + + %files = $file.ls($file.fixpath($0),f,$1) + if($length(%files)) + { + foreach(%file,%files) + { + $this->%lSources <+ $str.replace($file.fixpath("$0/%file"),"\\\\","\\") + include $file.fixpath("$0/%file") + } + } + } + + + generateUninstallAlias($0 = alias name) + { + %c = "alias($0)$lf" + %c .= "{$lf" + if($isset($this->%lFiles)) + { + foreach(%file,$this->%lFiles) + { + %file =~ s/"^$file.localdir()/(.*)$"/"\$file.localdir(\\1)"/ + %c .= " file.remove -q \"%file\"$lf"; + } + } + if($isset($this->%lSources)) + { + foreach(%file,$this->%lSources){ + foreach(%line,$file.readlines(%file)) + if(!$str.isempty(%line)){ + if($str.match("event(*)",%line,e)) + %c .= " event -q ("$str.token(1,"()",%line)"){}$lf" + else if($str.match("alias(*)",%line,e)) + %aliases<+$str.token(1,"()",%line) + else if($str.match("defpopup(*)",%line,e)) + %c .= " defpopup("$str.token(1,"()",%line)"){}$lf" + else if($str.match("toolbar.create * *",%line,e)) + %c .= " toolbar.destroy -q "$str.word(1,%line)"$lf" + else if($str.match("action.create* (*)",%line,e)) + %c .= " action.destroy -q "$str.replace($str.token(1,"(,)",%line),,\")"$lf" + else if($str.match("class(*)*",%line,e)) + %c .= " objects.killclass -q "$str.token(1,"(,)",%line)"$lf" + } + } + if($isset(%aliases)) + foreach(%alias,%aliases) + %c .= " alias -q (%alias){}$lf" + %c .= " alias -q ($0){}$lf" + } + %c .= "}" + eval %c + } +} + + + diff --git a/data/defscript/popups.kvs b/data/defscript/popups.kvs new file mode 100644 index 0000000..7197c92 --- /dev/null +++ b/data/defscript/popups.kvs @@ -0,0 +1,1381 @@ +# Default popups file + +# +# Here comes a nice part... +# The popups. KVIrc has a lot of events that merely ask for a popup to be shown :) +# +defpopup(highlight) +{ + prologue + { + if($0!=""){ + %:regName = $reguser.match($mask($0)) + %:beingHl = $reguser.property(%:regName,highlight) + %:beingHlTmp = $tmphighlight.ishighlighted($0) + } + } + + item($tr("Stop Highlighting (Local)")) (%:beingHlTmp && !%:beingHl) + { + tmphighlight.remove $0 + } + + item($tr("Start Highlighting (Local)")) (!%:beingHlTmp && !%:beingHl) + { + tmphighlight.add $0 + } + + popup($tr("Always Highlight")) (!%:beingHl && !%:regName) + { + item($tr("Highlight as") $0 "("$mask($0,11)")") ("$reguser.exactMatch($mask($0,11))" == "") + { + reguser.add $0 $mask($0,11); reguser.setproperty $0 highlight 1; + } + + item($tr("Highlight as") $0 "("$mask($0,12)")") ("$reguser.exactMatch($mask($0,12))" == "") + { + reguser.add $0 $mask($0,12); reguser.setproperty $0 highlight 1; + } + + item($tr("Highlight as") $0 "("$mask($0,13)")") ("$reguser.exactMatch($mask($0,13))" == "") + { + reguser.add $0 $mask($0,13); reguser.setproperty $0 highlight 1; + } + + item($tr("Highlight as") $0 "("$mask($0,3)")") ("$reguser.exactMatch($mask($0,3))" == "") + { + reguser.add $0 $mask($0,3); reguser.setproperty $0 highlight 1; + } + + item($tr("Highlight as") $0 "("$mask($0,4)")") ("$reguser.exactMatch($mask($0,4))" == "") + { + reguser.add $0 $mask($0,4); reguser.setproperty $0 highlight 1; + } + + item($tr("Highlight as") $0 "("$mask($0,5)")") ("$reguser.exactMatch($mask($0,5))" == "") + { + reguser.add $0 $mask($0,5); reguser.setproperty $0 highlight 1; + } + } + + item($tr("Always Highlight")) (!%:beingHl && %:regName) + { + reguser.setproperty $0 highlight 1 + } + + item($tr("Stop Highlighting")) (%:beingHl) + { + reguser.setproperty $0 highlight 0 + } +} + +defpopup(ignore) +{ + prologue + { + %:inIgnoreList = 0 + %:regName = $reguser.match($mask($0)) + %:ignLabelText = "

$0 " + if(%:regName) + { + %:inIgnoreList = $reguser.isIgnoreEnabled(%:regName); + if(%:inIgnoreList) %:ignLabelText << $tr("is being ignored") + else %:ignLabelText << $tr("is not being ignored") + + %:ignLabelText << "

" + } else { + %:ignLabelText << $tr("is not being ignored")"

" + } + } + + label(%:ignLabelText) + + item($tr("Enable Ignore"),168) (!%:inIgnoreList && %:regName) + { + reguser.setIgnoreEnabled %:regName 1; + } + + popup($tr("Ignore as..."),44) (!%:inIgnoreList) + { + item($tr("Ignore as") $0 "("$mask($0,0)")") ("$reguser.exactMatch($mask($0,0))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,0); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,1)")") ("$reguser.exactMatch($mask($0,1))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,1); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,2)")") ("$reguser.exactMatch($mask($0,2))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,2); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,3)")") ("$reguser.exactMatch($mask($0,3))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,3); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,4)")") ("$reguser.exactMatch($mask($0,4))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,4); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,5)")") ("$reguser.exactMatch($mask($0,5))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,5); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,6)")") ("$reguser.exactMatch($mask($0,6))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,6); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,7)")") ("$reguser.exactMatch($mask($0,7))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,7); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,8)")") ("$reguser.exactMatch($mask($0,8))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,8); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,9)")") ("$reguser.exactMatch($mask($0,9))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,9); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,10)")") ("$reguser.exactMatch($mask($0,10))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,10); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,11)")") ("$reguser.exactMatch($mask($0,11))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,11); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,12)")") ("$reguser.exactMatch($mask($0,12))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,12); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,13)")") ("$reguser.exactMatch($mask($0,13))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,13); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,14)")") ("$reguser.exactMatch($mask($0,14))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,14); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,15)")") ("$reguser.exactMatch($mask($0,15))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,15); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,16)")") ("$reguser.exactMatch($mask($0,16))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,16); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,17)")") ("$reguser.exactMatch($mask($0,17))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,17); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,18)")") ("$reguser.exactMatch($mask($0,18))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,18); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,19)")") ("$reguser.exactMatch($mask($0,19))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,19); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,20)")") ("$reguser.exactMatch($mask($0,20))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,20); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,21)")") ("$reguser.exactMatch($mask($0,21))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,21); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,22)")") ("$reguser.exactMatch($mask($0,22))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,22); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,23)")") ("$reguser.exactMatch($mask($0,23))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,23); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,24)")") ("$reguser.exactMatch($mask($0,24))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,24); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,25)")") ("$reguser.exactMatch($mask($0,25))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,25); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + + item($tr("Ignore as") $0 "("$mask($0,26)")") ("$reguser.exactMatch($mask($0,26))" == "") + { + if(!%:regName) reguser.add $0 $mask($0,26); + reguser.setIgnoreEnabled $0 1; + reguser.setIgnoreFlags -p -c -n -t -i -d $0; + } + } + + item($tr("Unignore"),217) (%:inIgnoreList) + { + reguser.setIgnoreEnabled %:regName 0; + } +} + +defpopup(registration) +{ + prologue + { + + # This is really smart...we are loading + # the reguser module only if this popup is being requested (the user effectively + # puts the mouse on the "Registration" item and the sub-popup is being shown) + %:regName = $reguser.match($mask($0)) + %:labelText = "

$0"; + if(%:regName) + { + %:labelText << $tr("is registered as") ": "%:regName"" + # We want to display masks here!!! + %:inNotifyList = $reguser.property(%:regName,notify); + if(%:inNotifyList)%:labelText << "
$0" $tr("is in the notify list") + %:curAvatar = $avatar.name($0); + %:defAvatar = $reguser.property(%:regName,avatar); + if(%:defAvatar)%:labelText << "
$0" $tr("has a default avatar") + %:labelText << "

" + } else { + %:labelText << $tr("is not registered")"

" + } + } + + label(%:labelText) + + item($tr("Register")"...") (!%:regName) + { + reguser.wizard $mask($0) + } + + popup($tr("Quick Registration")) (!%:regName) + { + item($tr("Register as") $0 "("$mask($0,11)")") ("$reguser.exactMatch($mask($0,11))" == "") + { + reguser.add $0 $mask($0,11) + } + + item($tr("Register as") $0 "("$mask($0,12)")") ("$reguser.exactMatch($mask($0,12))" == "") + { + reguser.add $0 $mask($0,12) + } + + item($tr("Register as") $0 "("$mask($0,13)")") ("$reguser.exactMatch($mask($0,13))" == "") + { + reguser.add $0 $mask($0,13) + } + + item($tr("Register as") $0 "("$mask($0,3)")") ("$reguser.exactMatch($mask($0,3))" == "") + { + reguser.add $0 $mask($0,3) + } + + item($tr("Register as") $0 "("$mask($0,4)")") ("$reguser.exactMatch($mask($0,4))" == "") + { + reguser.add $0 $mask($0,4) + } + + item($tr("Register as") $0 "("$mask($0,5)")") ("$reguser.exactMatch($mask($0,5))" == "") + { + reguser.add $0 $mask($0,5) + } + } + + item($tr("Edit Registration")"...",113) (%:regName) + { + reguser.edit "%:regName" + } + + item($tr("Unregister") %:regName) (%:regName) + { + reguser.remove "%:regName" + } + + separator + + item($tr("Add to Notify")) (%:regName && !%:inNotifyList) + { + reguser.setproperty -n "%:regName" notify $0 + } + + item($tr("Remove from Notify")) (%:regName && %:inNotifyList) + { + reguser.setproperty -n "%:regName" notify + } + + popup($tr("Avatar")) (%:regName) + { + item($tr("Choose")"...") (%:regName) + { + dialog.image(f,$tr("Choose Avatar Image File"),"","",$0,"%:regName") + { + if($0) + { + reguser.setproperty -a $2 avatar $0; + } + } + } + + item($tr("Set as Default")) (%:curAvatar && ("%:curAvatar" != "%:defAvatar")) + { + reguser.setproperty "%:regName" avatar %:curAvatar + } + + item($tr("Clear Default")) (%:defAvatar) + { + reguser.setproperty %:regName avatar + # Force the avatar to update + # if("%:curAvatar" == "")who $0 + } + } +} + +defpopup("urlpopup") +{ + item($tr("Copy To Clipboard"),259) + { + str.toClipboard $0 + } +} + +# This code adds a channel popup that accepts +# a comma separated list of nicknames as parameter (to the /popup command) + +defpopup(channel) +{ + prologue + { + # we use the extended scope variables: they are visible in the entire defpopup scope + # %:visible is the string that we will "show to the user" in the popup widget + # for multiple users the string might become long so we are going to change it in "multiple users" + %:visible = $0 + # %:multiple is an internal flag: set to 1 if the parameter passed to the popup contains a list + # of multiple nicknames rather than a single nick + %:multiple = 0 + # finally , set these variables + %:itemBanName = $tr("Ban") + if($str.findfirst(%:visible,",") != -1) + { + # found a comma in the $0 parameter...we have multiple nicknames + %:visible = "("$tr("Multiple Users")")" + %:multiple = 1 + %:itemBanMask = "*!user@*.host.tld" + %:itemBanNick = "nick" + } else { + %:itemBanMask = $mask(%:visible,$option(uintDefaultBanType)) + if("%:itemBanMask" == "*!*@*")%:itemBanName = $tr("&Ban") + %:itemBanNick = %:visible + } + # speed it up + + %:isMeHalfOp = $chan.isMeHalfOp() + %:isMeOp = $chan.isMeOp() + %:isMeOwner = $chan.isMeOwner() + %:isMeAdmin = $chan.isMeAdmin() + %:bCanKB = 0; + + if(%:isMeHalfOp) + { + foreach(%nick,$str.split(",",$0)) + { + if($chan.usermodelevel(%nick) <= $chan.usermodelevel($me)) + { + %:bCanKB = 1; + break; + } + } + } + } + + item("/WHOIS" %:visible "("$tr("idle time")")",75,whois_item) + { + foreach(%i,$str.split(",",$0)) + whois %i %i + } + + separator + + popup($tr("&Information"),49,"information_popup") + { + item("/WHOIS" %:visible,75,"whois_item") + { + whois $0 + } + + item(/WHOWAS %:visible,92) + { + whowas $0 + } + + item(/WHO %:visible,75) + { + who $0 + } + + separator + + item($tr("DNS for") %:visible,75) + { + foreach(%i,$str.split(",",$0))dns %i + } + + item($tr("Mask for") %:visible,75) (!%:multiple) + { + echo $mask($0,11) + } + } + + popup($tr("&Control"),9,"control_popup") (%:isMeHalfOp) + { + label($usermodename($me())) + + item($tr("O&wner") %:visible,260) (%:isMeOwner) + { + chanowner $0 + } + + item($tr("&Deowner") %:visible,261) (%:isMeOwner) + { + dechanowner $0 + } + + item($tr("&Administrator") %:visible,242) (%:isMeAdmin) + { + chanadmin $0 + } + + item($tr("&Deadministrator") %:visible,243) (%:isMeAdmin) + { + dechanadmin $0 + } + + item($tr("&Op") %:visible,34) (%:isMeOp) + { + op $0 + } + + item($tr("&Deop") %:visible,62) (%:isMeOp) + { + deop $0 + } + + item($tr("&Halfop") %:visible,174) (%:isMeOp) + { + halfop $0 + } + + item($tr("&Dehalfop") %:visible,175) (%:isMeOp) + { + dehalfop $0 + } + + item($tr("&Voice") %:visible,35) (%:isMeHalfOp) + { + voice $0 + } + + item($tr("D&evoice") %:visible,63) (%:isMeHalfOp) + { + devoice $0 + } + + separator + + item($tr("&Kick") %:visible,110) (%:bCanKB) + { + foreach(%i,$str.split(",",$0))kick %i + } + + item($tr("K&ick") %:visible $tr("With..."),110) (%:bCanKB) + { + dialog.textinput -d="$me" -i=110 ($tr("Kick Reason"),$tr("Enter a kick reason"),$tr("&Kick"),$tr("Cancel"),,$0) + { + if($0 == 0) + { + foreach(%i,$str.split(",",$2))kick %i $1 + } + } + } + + item($tr("&Ban") %:visible "("%:itemBanMask")",67) (("%:itemBanMask" != "*!*@*") && %:bCanKB) + { + ban $mask($0,$option(uintDefaultBanType)) + } + + item(%:itemBanName %:visible "("%:itemBanNick!*@*")",67) (%:bCanKB) + { + ban $0 + } + + item($tr("Kick/Ban") %:visible,110) (%:bCanKB) + { + kb $0 + } + + item($tr("Kick/Ban") %:visible $tr("With..."),110) (%:bCanKB) + { + dialog.textinput -d="$me" -i=110 ($tr("Kick/Ban Reason"),$tr("Enter a kick/ban reason"),$tr("&Kick/Ban"),$tr("Cancel"),,$0) + { + if($0 == 0) + { + kb $2 $1 + } + } + } + separator + + item($tr("Configure ban mask..."),20) + { + options.edit KviChannelAdvancedOptionsWidget + } + } + + separator + + item($tr("&Query") %:visible,47) + { + query $0 + } + + separator + + extpopup(C&TCP,ctcp,51) + + extpopup(&DCC,dcc,77) (!%:multiple) + + separator + + extpopup($tr("&Registration"),registration,111) (!%:multiple) + + extpopup($tr("&Highlight"),highlight,181) (!%:multiple) + + extpopup($tr("Ig&nore"),ignore,203) (!%:multiple) + + item($tr("Notify Avatar"),57) + { + avatar.notify $0 + } +} + +# Popup to show on right-clicking channel links +# +defpopup(channelpopup) +{ + item($tr("&Join") $0,145) + { + hop $0 + } + + item($tr("&Part") $0,40) + { + if($channel($0)) part $0 $option(stringPartMessage); + } + + separator + + item(/NAMES $0,75) + { + names $0; + } + + item(/WHO $0,75) + { + who $0; + } + separator + + item($tr("Copy Channel Address"),259) + { + str.toClipboard $chan.getUrl($0) + } + +} + +defpopup(channels) +{ + item(#KVirc,46) + { + j #KVirc + } + + item(#MDE,46) + { + j #MDE + } + + item(#kde,46) + { + j #kde + } +} + +defpopup(channeltextview) +{ + extpopup($tr("Channels"),channels,46) + + item($tr("&Join Channels..."),46) ($server) + { + if($option(boolShowChannelsJoinDialogAsToplevel))channelsjoin.open -t;else channelsjoin.open + } + + separator + + item($tr("&Hop") $0,145) + { + hop $0 + } + + item($tr("&Part") $0,40) + { + if($channel($0)) part $0 $option(stringPartMessage); + } + + separator + + extpopup(C&TCP,ctcp,51) + + separator + + item(/NAMES $0,75) + { + names $0; + } + + item(/WHO $0,75) + { + who $0; + } + + item($tr("Notify Avatar"),57) + { + avatar.notify $0 + } + + separator + + item($tr("Copy Channel URL to Clipboard"),259) + { + str.toClipboard $chan.getUrl + } + + item($tr("Clear Buffer"),121) + { + clear; + } + +} + +defpopup(consoletextview) +{ + label($tr("You're not connected to a server")) (!$server) + + extpopup($tr("Channels"),channels,46) + + separator + + item($tr("&Join Channels..."),46) ($server) + { + if($option(boolShowChannelsJoinDialogAsToplevel))channelsjoin.open -t;else channelsjoin.open + } + + popup($tr("&Information"),13) ($server) + { + item(/MOTD,30) + { + motd + } + + item(/INFO,29) + { + info + } + + item(/LUSERS,57) + { + lusers + } + + popup(/STATS,22) + { + item(d "(Debug/DNS?)") + { + stats d + } + + item($tr("l (Connections)")) + { + stats l + } + + item($tr("m (Command Usage)")) + { + stats m + } + + item($tr("o (Operators)")) + { + stats o + } + + item($tr("t (Connection stats ?)"),23) + { + stats t + } + + item($tr("u (Uptime)"),93) + { + stats u + } + + item($tr("y (y-Lines)")) + { + stats y + } + + item($tr("z (Debug Stats?)"),11) + { + stats z + } + } + + item(/TIME,93) + { + time + } + + item(/ADMIN,29) + { + admin + } + + item(/VERSION,16) + { + version + } + + item(/HELP,49) + { + raw help + } + } + + separator + + item($tr("Clear Buffer"),121) + { + clear; + } +} + +# This is a common popup , accepts a list of nicknames as parameter +defpopup(ctcp) +{ + item(PING,36) + { + ctcp $0 PING + } + + item(FINGER,53) + { + ctcp $0 FINGER + } + + item(VERSION,16) + { + ctcp $0 VERSION + } + + item(USERINFO,57) + { + ctcp $0 USERINFO + } + + item(CLIENTINFO,52) + { + ctcp $0 CLIENTINFO + } + + item(SOURCE,14) + { + ctcp $0 SOURCE + } + + item(TIME,93) + { + ctcp $0 TIME + } + + item(PAGE...,223) + { + #dialog.textinput -d="Wakeup!" ($tr("CTCP Page to") $0,$tr("Enter the message text"),$tr("Ok"),$tr("Cancel")) + dialog.textinput(CTCP Page $0,Enter the message text,&Page,Cancel,"",$0) + { + if($0 == 0)ctcp $2 PAGE $1 + } + } + + item(AVATAR,57) + { + ctcp $0 AVATAR + } +} + +defpopup(dcc) +{ + prologue + { + + if($features("SSL"))%:bHaveSSL=1 + else %:bHaveSSL=0 + } + + item($tr("Chat with") $0,78) + { + dcc.chat $0 + } + + item($tr("Reverse Chat with") $0,78) + { + dcc.chat -z $0 + } + + item($tr("Secure Chat with") $0,78) (%:bHaveSSL) + { + dcc.chat -s $0 + } + + separator + + item($tr("Send to") $0,79) + { + dcc.send $0 + } + + item($tr("Secure send to") $0,79) + { + dcc.send -s $0 + } + + item($tr("Reverse Send to") $0,79) + { + dcc.rsend -z $0 + } + + item($tr("Secure Reverse Send to") $0,79) + { + dcc.rsend -z -s $0 + } + + separator + + item($tr("TDCC Send to") $0,77) + { + dcc.send -t $0 + } + + item($tr("TDCC Reverse Send to") $0,77) + { + dcc.rsend -t $0 + } + + separator + + popup($tr("Voice Chat"),166) + { + item($tr("Default")": ADPCM 8 KHz (32 kbps)") + { + dcc.voice $0 + } + + separator + + item("ADPCM 11.025 KHz (44.1 kbps)") + { + dcc.voice -h=11025 $0 + } + + item("ADPCM 16 KHz (64 kbps)") + { + dcc.voice -h=16000 $0 + } + + item("ADPCM 22.05 KHz (88.2 kbps)") + { + dcc.voice -h=22050 $0 + } + + item("GSM 8 KHz (13.2 kbps)") + { + dcc.voice -g=gsm $0 + } + + item("GSM 11.025 KHz (18.1 kbps)") + { + dcc.voice -g=gsm -h=11025 $0 + } + + item("GSM 16 KHz (26.4 kbps)") + { + dcc.voice -g=gsm -h=16000 $0 + } + + item("GSM 22.05 KHz (36.2 kbps)") + { + dcc.voice -g=gsm -h=22050 $0 + } + + item("GSM 44.1 KHz (72.4 kbps)") + { + dcc.voice -g=gsm -h=44100 $0 + } + + item("NULL 8 KHz (128 kbps)") + { + dcc.voice -g=null $0 + } + + item("NULL 11.025 KHz (176.4 kbps)") + { + dcc.voice -g=null -h=11025 $0 + } + } +} + +defpopup(dccchat) +{ + prologue + { + + # we use the extended scope variables: they are visible in the entire defpopup scope + # %:visible is the string that we will "show to the user" in the popup widget + # for multiple users the string might become long so we are going to change it in "multiple users" + %:visible = $0 + # %:multiple is an internal flag: set to 1 if the parameter passed to the popup contains a list + # of multiple nicknames rather than a single nick + %:multiple = 0 + # finally , set these variables + if($str.findfirst(%:visible,",") != -1) + { + # found a comma in the $0 parameter...we have multiple nicknames + %:visible = "("$tr("Multiple Users")")" + %:multiple = 1 + } + } + + separator + + extpopup(C&TCP,ctcp,51) + + extpopup(&DCC,dcc,77) + + separator + + item($tr("Notify Avatar"),57) + { + avatar.notify $0 + } + + separator + + item($tr("Clear Buffer"),121) + { + clear + } +} + +# +# Some minimal work on the query +# A text view popup (right click on a query view) +# + +defpopup(querytextview) +{ + prologue + { + + # we use the extended scope variables: they are visible in the entire defpopup scope + # %:visible is the string that we will "show to the user" in the popup widget + # for multiple users the string might become long so we are going to change it in "multiple users" + %:visible = $0 + # %:multiple is an internal flag: set to 1 if the parameter passed to the popup contains a list + # of multiple nicknames rather than a single nick + %:multiple = 0 + # finally , set these variables + if($str.findfirst(%:visible,",") != -1) + { + # found a comma in the $0 parameter...we have multiple nicknames + %:visible = "("$tr("Multiple Users")")" + %:multiple = 1 + } + } + + item(/WHOIS $0 "("$tr("idle time")")",75) (!%:multiple) + { + whois $0 $0 + } + + separator + + popup($tr("&Information"),49) + { + item(/WHOIS $0,75) + { + whois $0 + } + + item(/WHOWAS $0,92) + { + whowas $0 + } + + item(/WHO $0,75) + { + who $0 + } + + separator + + item($tr("DNS for") $0,75) + { + foreach(%i,$str.split(",",$0))dns %i + } + + item($tr("Mask for") $0,75) (!%:multiple) + { + echo $mask($0,11) + } + } + + separator + + extpopup(C&TCP,ctcp,51) + + extpopup(&DCC,dcc,77) + + separator + + extpopup($tr("&Ignore"),ignore,203) (!%:multiple) + + extpopup($tr("&Registration"),registration,111) (!%:multiple) + + item($tr("Notify Avatar"),57) + { + avatar.notify $0 + } + + separator + + item($tr("Clear Buffer"),121) + { + clear + } +} + + +# +# Logging popup for the windows +# +defpopup(logging) +{ + prologue + { + + # If this window is being logged actually , $log.file will be non empty + # and pointing to the log file actually open. + %:logfile = $str.replace($log.file,,$file.localdir) + } + + label($tr("Logging to"):
%:logfile) ("%:logfile" != "") + + item($tr("Flush Log File"),19) (%:logfile) + { + log.flush + } + + separator + + item($tr("Stop Logging"),58) (%:logfile) + { + log.stop + } + + label($tr("Not Logging")) (!%:logfile) + + item($tr("Log To Default File"),119) (!%:logfile) + { + log.start + } + + item($tr("Log To Default File") "("$tr("Include Existing Buffer")")",119) (!%:logfile) + { + log.start -p + } + + item($tr("Log To..."),119) (!%:logfile) + { + dialog.file(save,$tr("Choose Log Filename")) + { + if($0)log.start $0 + } + } + + item($tr("Log To...") "("$tr("Include Existing Buffer"),119) (!%:logfile) + { + dialog.file(save,$tr("Choose Log Filename")) + { + if($0)log.start -p $0 + } + } +} + +defpopup(defaulttextview) +{ + prologue + { + + # we use the extended scope variables: they are visible in the entire defpopup scope + # %:visible is the string that we will "show to the user" in the popup widget + # for multiple users the string might become long so we are going to change it in "multiple users" + %:visible = $0 + # %:multiple is an internal flag: set to 1 if the parameter passed to the popup contains a list + # of multiple nicknames rather than a single nick + %:multiple = 0 + # finally , set these variables + if($str.findfirst(%:visible,",") != -1) + { + # found a comma in the $0 parameter...we have multiple nicknames + %:visible = "("$tr("Multiple Users")")" + %:multiple = 1 + } + } + + item(/WHOIS $0 "("$tr("idle time")")",75) (!%:multiple) + { + whois $0 $0 + } + + separator + + popup($tr("&Information"),49) + { + item(/WHOIS $0,75) + { + whois $0 + } + + item(/WHOWAS $0,92) + { + whowas $0 + } + + item(/WHO $0,75) + { + who $0 + } + + separator + + item(DNS $0,75) + { + foreach(%i,$str.split(",",$0))dns %i + } + } + + separator + + item($tr("&Query") %:visible,47) + { + query $0 + } + + separator + + extpopup(C&TCP,ctcp,51) + + extpopup(&DCC,dcc,77) + + separator + + extpopup($tr("&Registration"),registration,111) (!%:multiple) + + extpopup($tr("&Highlight"),highlight,181) (!%:multiple) + + extpopup($tr("Ig&nore"),ignore,203) (!%:multiple) + + item($tr("Notify avatar"),57) + { + avatar.notify $0 + } + + separator + + item($tr("Clear Buffer"),121) + { + clear + } +} + +file.addimagepath %mypath/pics/ + +# +# FIXME: Add uninstall part: +# file.delimagepath +# + + +# +# A default popup for the middle click in a text view +# This should manage logging , buffer saving and other +# stuff common to ALL windows +# + +defpopup(windowpopup) +{ + extpopup(Logging,logging,119) + +# popup(Buffer) +# { +# item("Save to file...")window.savebuffer +# item("Clear")window.clear +# item("Find...")window.findtext +# } +# popup(View) +# { +# item("Show images")($window.images == 0)window.images 1 +# item("Enable timestamps")($window.timestamp == 0)window.timestamp 1 +# item("Disable timestamps")($window.timestam == 1)window.timestamp 0 +# item("Set font...")$window.setfont +# item("Set background...")$window.setbackground +# } +# popup(Mdi) +# { +# item("Minimize")window.minimize +# item("Maximize")window.maximize +# } +} + +# Host link popup + +defpopup(hostpopup) +{ + item(Look Up $0,13) + { + host -a $0 + } + + separator + + item(Open ftp://$0/,145) ("$system.ostype" == "unix") + { + openurl ftp://$0/ + } + + item(Telnet to $0,25) + { + if("$system.ostype" == "unix")run xterm -e telnet $0 + else run telnet $0 + } + + separator + + item(Traceroute $0,42) + { + if("$system.ostype" == "unix")run xterm -e /bin/sh -c "echo \"Traceroute to $0...\" && traceroute $0 && cat" + else run tracert $0 + } + + item(Traceroute6 $0,42) + { + if("$system.ostype" == "unix")run xterm -e /bin/sh -c "echo \"Traceroute (inet6) to $0...\" && traceroute6 $0 && cat" + else run tracert6 $0 + } + + item(Ping $0,147) + { + if("$system.ostype" == "unix")run xterm -e /bin/sh -c "echo \"Ping $0...\" && ping $0 && cat" + else run ping $0 + } + + item(Ping6 $0,147) + { + if("$system.ostype" == "unix")run xterm -e /bin/sh -c "echo \"Ping (inet6) $0...\" && ping6 $0 && cat" + else run ping6 $0 + } +} \ No newline at end of file diff --git a/data/defscript/theme-install.kvs b/data/defscript/theme-install.kvs new file mode 100644 index 0000000..febbbbc --- /dev/null +++ b/data/defscript/theme-install.kvs @@ -0,0 +1,30 @@ +addon.register("Theme: @THEMENAME@","@THEMEVERSION@",$tr("@THEMENAME@"),$tr("@THEMEDESCRIPTION@"),"3.2.0.99") +{ + # This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked + + # This is an automatically generated alias that will erase the installed files + @ALIASNAME@_uninstallfiles + file.rmdir $file.localdir("themes/@SUBDIR@") + alias(@ALIASNAME@_uninstallfiles) {} + # Done +} + +# Ok, addon.register succeeded. We can go on with the installation. + +# Get the path that this script was launched from +%mypath = $file.extractPath($0) + +# get the installer helper class (this is pretty standard and included in the distro) +parse %mypath/utils/installer.kvs + +# The installer will copy our files and generate automatically +# an uninstallation alias for them +%installer = $new(installer,0,myinstaller) + +# copy files in each subdirectory +# the pics + +%installer->$copyFiles("%mypath/files/","*",$file.localdir("themes/@SUBDIR@")) +%installer->$generateUninstallAlias("@ALIASNAME@_uninstallfiles") +# finally kill the installer helper +delete %installer diff --git a/data/defscript/toolbars.kvs b/data/defscript/toolbars.kvs new file mode 100644 index 0000000..84e7b93 --- /dev/null +++ b/data/defscript/toolbars.kvs @@ -0,0 +1,43 @@ +# Default toolbars file + +toolbar.create irccontext $tr("IRC Context") $icon("irc4") +# toolbar.additem irccontext kvirc.irccontextdisplay - info dublicated with te status line +toolbar.additem irccontext kvirc.connect +toolbar.additem irccontext kvirc.servermenu +toolbar.additem irccontext kvirc.newirccontext +toolbar.additem irccontext kvirc.separator +toolbar.additem irccontext kvirc.nicknamemenu +toolbar.additem irccontext kvirc.irctools +toolbar.additem irccontext kvirc.ircactions +toolbar.additem irccontext kvirc.usermodemenu +toolbar.show irccontext + +toolbar.create options $tr("Options") $icon("options") +toolbar.additem irccontext kvirc.serveroptions +toolbar.additem options kvirc.identityoptions +toolbar.additem options kvirc.generaloptions +toolbar.additem options kvirc.themeoptions +toolbar.show options + +toolbar.create help $tr("Help") 49 +toolbar.additem help kvirc.helpindex +if($lang(short)==ru) + toolbar.additem help kvirc.kvircruhomepage +else + toolbar.additem help kvirc.kvirchomepage +toolbar.show help + +toolbar.create scripting $tr("Scripting") $icon("binarytext") +toolbar.additem scripting kvirc.actioneditor +toolbar.additem scripting kvirc.aliaseditor +toolbar.additem scripting kvirc.eventeditor +toolbar.additem scripting kvirc.popupeditor +toolbar.additem scripting kvirc.raweditor +toolbar.additem scripting kvirc.codetester +toolbar.additem scripting kvirc.separator +toolbar.additem scripting kvirc.executekvs + +toolbar.create winops $tr("Window operations") $icon("cascadewindows") +toolbar.additem winops kvirc.cascadewindows +toolbar.additem winops kvirc.tilewindows +toolbar.additem winops kvirc.minimizeallwindows \ No newline at end of file diff --git a/data/deftheme/Makefile.am b/data/deftheme/Makefile.am new file mode 100644 index 0000000..c6ce91e --- /dev/null +++ b/data/deftheme/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = silverirc + diff --git a/data/deftheme/silverirc/Makefile.am b/data/deftheme/silverirc/Makefile.am new file mode 100644 index 0000000..e4f01a6 --- /dev/null +++ b/data/deftheme/silverirc/Makefile.am @@ -0,0 +1,5 @@ +tmpdir = $(themedir)/silverirc + +tmp_DATA = themeinfo.kvc themedata.kvc pixmapIrcViewBackground.png pixmapInputBackground.png pixmapUserListViewBackground.png + +EXTRA_DIST = $(tmp_DATA) \ No newline at end of file diff --git a/data/deftheme/silverirc/pixmapInputBackground.png b/data/deftheme/silverirc/pixmapInputBackground.png new file mode 100644 index 0000000..8e90335 Binary files /dev/null and b/data/deftheme/silverirc/pixmapInputBackground.png differ diff --git a/data/deftheme/silverirc/pixmapIrcViewBackground.png b/data/deftheme/silverirc/pixmapIrcViewBackground.png new file mode 100644 index 0000000..f02f916 Binary files /dev/null and b/data/deftheme/silverirc/pixmapIrcViewBackground.png differ diff --git a/data/deftheme/silverirc/pixmapUserListViewBackground.png b/data/deftheme/silverirc/pixmapUserListViewBackground.png new file mode 100644 index 0000000..90560c8 Binary files /dev/null and b/data/deftheme/silverirc/pixmapUserListViewBackground.png differ diff --git a/data/deftheme/silverirc/themedata.kvc b/data/deftheme/silverirc/themedata.kvc new file mode 100644 index 0000000..a83296b --- /dev/null +++ b/data/deftheme/silverirc/themedata.kvc @@ -0,0 +1,273 @@ +# KVIrc configuration file +[ThemeData] +pixmapUserListViewBackground=pixmapUserListViewBackground.png +msgtypeSearch=206,14,100,1,1 +msgtypeMeBanExcept=197,3,100,1,5 +msgtypeNickServ=164,5,100,1,2 +msgtypeChanPrivmsgCrypted=101,1,100,1,3 +msgtypeNotifyOffLine=95,2,100,1,1 +msgtypeSocketMessage=21,14,100,1,1 +boolDisablePopupIcons=false +boolUseExtendedPrivmsgView=false +msgtypeMeChanAdmin=244,3,100,1,1 +msgtypeMeBanUnExcept=198,3,100,1,5 +msgtypeMeBan=195,5,100,1,5 +msgtypeMeOp=189,3,100,1,5 +msgtypeWallops=139,5,100,1,3 +msgtypeQueryTrace=181,15,100,1,1 +msgtypeHalfDeOp=175,3,100,1,2 +msgtypeIcq=122,5,100,1,1 +msgtypeOwnPrivmsgCrypted=100,1,100,1,3 +uintUserListPixmapAlign=1 +colorInputSelectionForeground=0,0,0 +colorCaptionTextInactive=0,0,0 +stringExtendedPrivmsgPrefix=[ +boolShowTreeTaskbarHeader=false +boolShowUserChannelIcons=true +boolUseGlobalPseudoTransparency=false +msgtypeMeDeVoice=192,3,100,1,5 +msgtypeBroadcastPrivmsg=183,1,100,1,3 +msgtypeChanServ=165,5,100,1,2 +msgtypeWhoisOther=92,2,100,1,1 +msgtypeWhoisChannels=89,2,100,1,1 +msgtypeWhoisUser=88,2,100,1,1 +msgtypeOp=34,3,100,1,2 +msgtypeParserError=11,4,100,1,1 +colorIrcViewMarkLine=40,40,40 +colorUserListViewNormalForeground=0,0,0 +boolUseDifferentColorForOwnNick=true +boolScaleAvatars=true +msgtypeServerError=272,14,100,1,1 +msgtypeMeInviteExcept=199,3,100,1,5 +msgtypeChannelNoticeCrypted=154,5,100,1,3 +msgtypeIrc=105,3,100,1,0 +msgtypeCtcpRequestUnknown=55,5,100,1,2 +msgtypeCtcpRequestReplied=52,5,100,1,2 +colorUserListViewChanOwnerForeground=81,87,111 +colorUserListViewUserOpForeground=0,127,178 +colorUserListViewVoiceForeground=0,0,200 +colorInputForeground=0,0,0 +colorCaptionTextActive2=0,0,0 +colorMdiCaptionActive=113,125,190 +colorTaskBarNormalText=0,0,0 +boolIrcViewUrlHighlighting=true +stringIconThemeSubdir=silverirc +msgtypeAway=170,3,100,1,4 +msgtypeIcqMessage=128,5,100,1,1 +msgtypeLinks=112,2,100,1,1 +msgtypeBan=67,5,100,1,1 +msgtypeVoice=35,3,100,1,1 +msgtypeQuit=58,14,100,1,2 +msgtypeQueryPrivateMessage=48,1,100,1,4 +msgtypeTopic=42,3,100,1,1 +msgtypeHostLookup=13,2,100,1,1 +fontIrcToolBarApplet=Verdana,10,5,50,i +uintToolBarAppletPixmapAlign=0 +uintUserListViewGridType=3 +colorTreeTaskBarProgress=150,150,150 +colorGlobalTransparencyFade=255,255,255 +colorTaskBarHighlight2Text=32,0,255 +boolUseTreeWindowListTaskBar=true +pixmapInputBackground=pixmapInputBackground.png +mirccolor0=255,255,255 +msgtypeMeChanOwner=262,3,100,1,2 +msgtypeChanOwner=260,3,100,1,2 +msgtypeUserDeOp=175,3,100,1,1 +msgtypeGenericError=135,4,100,1,1 +msgtypeStats=205,1,100,1,1 +msgtypeIcqMessageSent=129,5,100,1,1 +msgtypeQueryPrivmsgCrypted=102,1,100,1,3 +msgtypeAvatarChange=57,15,100,1,2 +msgtypeUnrecognized=41,5,100,1,1 +msgtypeSocketWarning=22,5,100,1,3 +msgtypeSelection=0,0,15,1,1 +uintIrcViewPixmapAlign=34 +colorTreeTaskBarHighlight2Foreground=167,222,163 +colorTreeTaskBarActiveForeground=0,0,0 +colorIrcToolBarAppletForegroundMidContrast=110,110,110 +colorUserListViewBackground=255,255,255 +colorTaskBarHighlight1Text=0,16,144 +colorTaskBarMinimizedText=60,60,60 +boolStripMircColorsInUserMessages=false +boolIrcViewShowImages=true +mirccolor1=0,0,0 +msgtypeIgnore=203,15,100,1,1 +msgtypeMeInviteUnexcept=200,3,100,1,5 +msgtypeMultimedia=177,5,100,1,2 +msgtypeServerNotice=141,5,100,1,1 +msgtypeDccChatMsg=103,1,100,1,3 +msgtypeCreationTime=93,15,100,1,1 +msgtypeWhoisServer=91,2,100,1,1 +msgtypeInviteUnexcept=72,15,100,1,1 +msgtypeSplit=59,15,100,1,2 +msgtypeCtcpRequestIgnored=53,5,100,1,1 +msgtypeSystemError=24,4,100,1,4 +msgtypeHighlight=0,7,100,1,5 +fontTaskbar=Sans%20Serif,10,5,50 +uintTreeTaskBarPixmapAlign=0 +uintGlobalTransparencyParentFadeFactor=10 +colorTreeTaskBarHighlight3Foreground=128,0,255 +colorTaskBarHighlight4Text=220,0,255 +colorTaskBarProgressBar=180,180,180 +colorMdiBackground=0,0,0 +boolUseTaskBarActivityMeter=false +boolColorNicks=false +mirccolor2=0,0,140 +msgtypeMeChanUnAdmin=245,3,100,1,1 +msgtypeWho=75,2,100,1,1 +msgtypeDeop=62,3,100,1,1 +msgtypeRaw=25,2,100,1,1 +uintTimeStampBackground=100 +colorUserListViewChanAdminForeground=83,54,5 +colorTreeTaskBarHighlight4Foreground=220,0,255 +colorTaskBarHighlight3Text=128,20,255 +colorTreeTaskBarActiveBackground=200,200,200 +colorLabelForeground=0,0,0 +colorUserListViewSelectionForeground=0,0,0 +colorInputBackgroundColor=255,255,255 +boolDisableUserListLabel=false +mirccolor10=0,150,180 +mirccolor3=0,100,0 +msgtypeGenericSuccess=136,14,100,1,3 +msgtypeDccChatMsgCrypted=104,1,100,1,3 +msgtypeAction=56,13,100,1,3 +msgtypeSystemWarning=26,4,100,1,3 +uintTimeStampForeground=14 +colorTreeTaskBarHighlight5Foreground=255,0,0 +colorTreeTaskBarForeground=0,0,0 +colorIrcViewBackground=255,255,255 +boolUseFlatClassicTaskbarButtons=true +boolDisableAvatars=false +boolUserListViewDrawGrid=false +boolUseGlobalApplicationFont=false +iccolor0=250,250,0 +mirccolor11=170,170,255 +mirccolor4=230,0,0 +msgtypeChanUnOwner=261,3,100,1,2 +msgtypeVerbose=259,15,100,1,0 +msgtypeMeDeHalfOp=194,3,100,1,5 +msgtypeBroadcastNotice=184,5,100,1,3 +msgtypeBanExcept=69,15,100,1,1 +msgtypeNick=61,2,100,1,1 +msgtypeOwnPrivateMessage=45,1,100,1,3 +msgtypeLink=0,2,100,1,0 +uintGlobalTransparencyChildFadeFactor=50 +colorTaskBarHighlight5Text=255,0,0 +colorTreeTaskBarBackground=255,255,255 +colorIrcToolBarAppletForegroundHighContrastInactive1=40,40,40 +colorLabelBackground=255,255,255 +colorInputSelectionBackground=198,198,198 +boolObtainGlobalBackgroundFromKde=false +pixmapLabelBackground= +iccolor1=0,0,0 +mirccolor12=15,15,255 +mirccolor5=150,0,0 +msgtypeChanAdmin=242,3,100,1,1 +msgtypeGenericStatus=133,14,100,1,1 +msgtypeHalfOp=174,3,100,1,1 +msgtypeDevoice=63,3,100,1,1 +msgtypeJoin=39,14,100,1,2 +msgtypeMotd=30,1,100,1,0 +fontIrcView=Trebuchet%20MS,10,5,50 +colorIrcToolBarAppletForegroundHighContrastInactive2=40,40,40 +colorIrcToolBarAppletForegroundLowContrast=180,180,180 +pixmapGlobalTransparencyBackground= +pixmapTreeTaskBarBackground= +iccolor2=0,0,200 +mirccolor13=200,0,200 +mirccolor6=80,0,80 +msgtypeMeChanUnOwner=263,3,100,1,2 +msgtypeMeUserOp=193,3,100,1,1 +msgtypeWhoisIdle=90,2,100,1,1 +msgtypeNicknameProblem=87,3,100,1,1 +msgtypeDccError=79,5,100,1,1 +msgtypeInviteExcept=71,15,100,1,1 +msgtypeConnection=14,5,100,1,1 +msgtypeParserWarning=12,5,100,1,0 +colorUserListViewOwnForeground=126,74,131 +colorUserListViewHalfOpForeground=119,0,178 +colorIrcToolBarAppletForegroundHighContrastActive1=0,0,0 +colorMdiCaptionInactive=180,180,180 +stringExtendedPrivmsgPostfix=]%20 +boolDrawEmoticons=false +boolIrcViewWrapMargin=true +iccolor3=200,0,0 +mirccolor14=80,80,80 +mirccolor7=255,90,0 +msgtypeUserOp=174,3,100,1,1 +msgtypeGenericVerbose=137,14,100,1,1 +msgtypeMeUnban=196,5,100,1,5 +msgtypeMeHalfOp=193,3,100,1,5 +msgtypeInvite=176,7,100,1,4 +msgtypeIdent=171,2,100,1,3 +msgtypeChanMode=73,15,100,1,1 +msgtypeBanUnexcept=70,15,100,1,1 +msgtypeKey=65,15,100,1,2 +msgtypeServerInfo=29,1,100,1,1 +fontInput=Trebuchet%20MS,10,5,50 +colorUserListViewAwayForeground=143,143,143 +colorIrcToolBarAppletForegroundHighContrastActive2=0,60,0 +colorInputCursor=72,216,72 +boolUseSpecialColorForTimestamp=true +pixmapIrcToolBarAppletBackground= +iccolor4=255,255,255 +mirccolor15=170,170,170 +mirccolor8=255,255,0 +msgtypeSSL=229,2,100,1,0 +msgtypeMeVoice=190,3,100,1,5 +msgtypeChannelNotice=153,5,100,1,3 +msgtypeNotifyOnLine=94,2,100,1,1 +msgtypeCtcpReply=51,5,100,1,2 +msgtypeUnhandledReply=28,2,100,1,1 +msgtypeSystemMessage=27,2,100,1,1 +fontApplication=Sans%20Serif,10,5,50 +colorUserListViewGrid=216,216,216 +colorTreeTaskBarHighlight1Foreground=165,165,165 +colorCaptionTextActive=255,255,255 +pixmapIrcViewBackground=pixmapIrcViewBackground.png +iccolor5=0,150,190 +mirccolor9=0,255,0 +msgtypeTextEncoding=236,1,100,1,0 +msgtypeMeDeOp=191,3,100,1,5 +msgtypeJoinError=182,5,100,1,4 +msgtypeQueryNotice=155,5,100,1,3 +msgtypeSpam=120,14,100,1,3 +msgtypeKick=110,4,100,1,2 +msgtypeDccRequest=77,5,100,1,3 +msgtypeUnban=68,5,100,1,1 +msgtypeLimit=66,15,100,1,1 +msgtypeMode=64,15,100,1,1 +msgtypePart=40,14,100,1,2 +msgtypeServerPing=36,15,100,1,0 +colorUserListViewOpForeground=200,0,0 +colorInputControl=200,100,0 +colorCaptionTextInactive2=30,30,30 +pixmapMdiBackground= +iccolor6=0,130,0 +msgtypeHelp=49,3,100,1,1 +msgtypeMeDeUserOp=194,3,100,1,1 +msgtypeChanUnAdmin=243,3,100,1,1 +msgtypeMeKick=188,4,100,1,5 +msgtypeList=173,1,100,1,1 +msgtypeQueryNoticeCrypted=156,5,100,1,3 +msgtypeChannelPrivateMessage=46,1,100,1,3 +msgtypeSocketError=23,4,100,1,4 +msgtypeEcho=0,1,100,1,1 +uintInputPixmapAlign=32 +colorIrcToolBarAppletBackground=255,255,255 +boolShowUserChannelState=false +boolBoldedNicks=false +boolShowUserAndHostInPrivmsgView=false +iccolor7=150,0,170 +msgtypeGenericCritical=134,4,100,1,4 +msgtypeGenericWarning=132,5,100,1,0 +msgtypeCtcpReplyUnknown=162,5,100,1,1 +msgtypeDccMsg=78,5,100,1,2 +msgtypeQuitSplit=60,14,100,1,2 +msgtypeCtcpRequestFlood=54,5,100,1,1 +msgtypeUrl=0,2,100,1,1 +fontLabel=Sans%20Serif,10,5,50 +fontUserListView=Sans%20Serif,10,5,50,i +uintClassicTaskBarMaximumButtonWidth=100 +colorUserListViewSelectionBackground=194,194,194 +boolClassicTaskBarSetMaximumButtonWidth=true diff --git a/data/deftheme/silverirc/themeinfo.kvc b/data/deftheme/silverirc/themeinfo.kvc new file mode 100644 index 0000000..14fbdcc --- /dev/null +++ b/data/deftheme/silverirc/themeinfo.kvc @@ -0,0 +1,10 @@ +# KVIrc configuration file +[ThemeInfo] +Author=Alexey +Version=0.7 +Name=SilverIRC +MinimumKvircVersion=3.2.4 +Date=08.01.2007 +Description=Default KVIrc Theme +ThemeInfoFileVersion=1.0.0 +Application=KVIrc 3.2.4 diff --git a/data/doctemplates/Makefile.am b/data/doctemplates/Makefile.am new file mode 100644 index 0000000..edd4722 --- /dev/null +++ b/data/doctemplates/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = rfc2812.template kvircintro.template ircintro.template diff --git a/data/doctemplates/ircintro.template b/data/doctemplates/ircintro.template new file mode 100644 index 0000000..9b51485 --- /dev/null +++ b/data/doctemplates/ircintro.template @@ -0,0 +1,60 @@ +/* + @doc: ircintro + @title: + Introduction to IRC + @short: + Introduction to IRC + @keyterms: + irc,channel,channels,channel operator,irc server,server,irc network,irc user,irc users,irc client,internet relay chat,nickname,nicknames,irc etiquette + @body: + [big]What is IRC ?[/big][br] + Internet Relay Chat (IRC) is one of the most popular and most interactive services on the Internet. + When you've been wondering 'where the others are?', then IRC is what you're looking for. + IRC allows real-time conversations with people from the whole planet, 24-hours a day, worldwide. + [br] + [big]How does it work ?[/big][br] + IRC consists of various separate networks (or "nets") of IRC servers: machines that allow users to connect to IRC. + The largest nets are EFnet (the original IRC net, often having more than 32,000 people at once), Undernet, IRCnet, DALnet, and NewNet. + Generally, the user (such as you) runs a program (called "irc client") to connect to a server on one of the IRC nets. + The server will relay the informations between you and the "rest" of the network (obviously including the other irc users). + Each user is known on IRC by a nickname (or "nick"), such as smartgal or FunGuy. + To avoid conflicts with other users, it is best to use a nick that is not too common, e.g., "john" is a poor choice. + Some networks allow the registration of nicknames: once you have registered a nickname noone else will be able to use it. + Once connected to an IRC server on an IRC network, you will usually join one or more [b]channels[/b] and converse with other irc users. + On EFnet, there often are more than 12,000 channels, each one devoted to a different topic. + [br] + [big]Channels[/big][br] + Channel names usually begin with a #, as in #irchelp. + The same channels are shared among all IRC servers on the same net, so you do not have to be on the same IRC server as your friends. + Each channel can be joined by a "virtually" unlimited number of users and every word spoken "to the channel" is + seen by all the users that have joined it. + Each channel has a topic that usually describes the ideas being exchanged between users in that moment. + It is a good idea to take a look at the topic before starting to talk "randomly" :). + Channels are run by channel operators, or just "ops" for short, who can control the channel by choosing who may join (by "banning" some users), + who must leave (by "kicking" them out), and even who may speak (by making the channel "moderated")! + Channel ops have complete control over their channel, and their decisions are final. + If you are banned from a channel, send a /msg to a channel op and ask nicely to be let in + (see the /who command in the next section to learn how to find ops). + If they ignore you or /who gives no response because the channel is in secret mode (+s), + just go somewhere else where you are more welcome. + Some IRC networks have a richer hierarchy of channel users and you may find half-operators, channel administrators or + channel owners. + [br] + [big]Just a bit of IRC Etiquette...[/big][br] + You'll find all kinds of people on IRC. Some nice, and some not so nice. + Simply behave as you would in the real world. Most people will be friendly and considerate, if you are as well. + When you join a channel, say hello. Don't expect to get hello's back from everyone, + especially when there are lots of people on the channel. + If you've never visited the channel before and have no idea what to expect, + just sit back and watch for awhile to get a feel for the flow of the channel (thats called "lurking"). + [br] + [big]Finding more info[/big][br] + The web is full of informations about IRC: it's just a matter of typing "IRC" in a search engine. + An user-friendly site to start from might be www.irchelp.org: you will find a huge list of + documents and links that will hopefully answer to all your questions. + You may also give a short read to the [doc:kvircintro]Introduction to KVIrc[/doc] which will + give you an idea of what an IRC client is. + [br] + [big]Well...[/big][br] + Have fun :) +*/ diff --git a/data/doctemplates/kvircintro.template b/data/doctemplates/kvircintro.template new file mode 100644 index 0000000..149590a --- /dev/null +++ b/data/doctemplates/kvircintro.template @@ -0,0 +1,67 @@ +/* + @doc: kvircintro + @title: + Introduction to KVIrc + @short: + Introduction to KVIrc + @keyterms: + KVIrc + @body: + [big]Introduction[/big] + + In really simple words KVIrc is a Chat client: you use it to talk to other + people over the internet. More specifically KVIrc is an IRC client + and if you haven't readed it yet please take a look at the [doc:ircintro]IRC introduction[/doc] + then come back here. Now that you know what IRC is then you already know + that an IRC client acts as a relay for the informations that you + exchange with your IRC server. KVIrc also acts as a filter and provides + an user-friendly interface for the communication protocol that is a bit complex + and rude when seen in its original form (by using telnet for example). + KVIrc also contains a sophisticated scripting language that allows you to + implement automated reactions to the network events. This is something similar + to creating a robot that acts spontaneously after you have told him what to do. + The scripting language allows you to enchance the KVIrc's interface and + to handle special IRC network features that KVIrc itself isn't aware of. + + [big]History[/big] + + The original meaning of the name "KVIrc" was, more or less, "K Visual IRC Client". + The initial K is a common prefix for the applications written for the KDE + desktop environment: this was the case of the initial versions of KVIrc. + Starting from version 2.0.0 the absolute KDE dependancy has been dropped (for several + valid reasons) and the support became optional.[br] + "Visual" was (and is) one of the client goals: having an user-friendly interface to the IRC world. + Many extreme-unix users have misinterpreted the "user-friendly" interface and have tagged + KVIrc as a client for "newbies". Well... that is partially true: KVIrc is ALSO a client for newbies: + A total IRC novice should be able to "chat" in few minutes after installing the program, + preferably without bothering to read any manual. Yes ,I know that it is not in "unix"-style. + On the other side, KVIrc contains a whole bunch of compex features that can be discovered + only by reading the documentation and experimenting. I bet that you can also + find a lot of undocumented tricks :) + + [big]A bit of "philosophy"[/big] + + At the time of writing (Feb 2005) KVIrc approaches release 3.2.0. The small + [b]one-man-project[/b] has grown to the level of a small [b]community[/b]. + People from around the world have joined our development efforts and are + constantly donating their time, eyes and bandwidth in order to make KVIrc + a really good IRC client. Besides of simply giving you a free (as in freedom!) and nice + program for chatting, they are giving you the great opportunity to see what's behind + the scenes: you have the source code for the whole application. + In practical terms this means more or less 300.000 lines of tested, debugged and + commented C++ code, several perl scripts, dozens of makefiles and all the means + that you need to produce a working KVIrc executable on all the supported platforms. + There is a lot of knowledge (some people call it "technology" because it sells better) + inside, ready to be acquired by an attentive reader. Don't forget that the freedom of + building your own executable from the sources gives you the opportunity + of verifying the source itself: for example you might be interested in verifying + that KVIrc will not run any malware code on your machine nor will collect + your private data and sell it to someone while you're happily chatting with a friend. + [b]We call it freedom, please respect it.[/b] + + [big]Well...[/big] + + Have fun :)[br] + [br] + Szymon Stefanek and The KVIrc Development Team +*/ diff --git a/data/doctemplates/rfc2812.template b/data/doctemplates/rfc2812.template new file mode 100644 index 0000000..9d81a1c --- /dev/null +++ b/data/doctemplates/rfc2812.template @@ -0,0 +1,3312 @@ +/* + @doc: rfc2812 + @title: + RFC2812 + @short: + The IRC protocol specification (revised) + @keyterms: + irc, protocol, bnf, irc user, irc channel, server protocol, + server messages, server replies, numeric messages + @body: + +[table] + +[tr][td][pre] +Network Working Group, C.Kalt, April 2000 +Request for Comments: 2812 +Updates: 1459 +Category: Informational +[/pre][/td][/tr] + +[tr][td] +[center][big]Internet Relay Chat: Client Protocol[/big][/center] +[/td][/tr] + +[tr][td] +[b]Status of this Memo[/b] +[/td][/tr] + +[tr][td] +This memo provides information for the Internet community. It does +not specify an Internet standard of any kind. Distribution of this +memo is unlimited. +[/td][/tr] + +[tr][td] +[b]Copyright Notice[/b] +[/td][/tr] + +[tr][td] +Copyright (C) The Internet Society (2000). All Rights Reserved. +[/td][/tr] + +[tr][td] +[b]IESG NOTE:[/b] +[/td][/tr] + +[tr][td] +The IRC protocol itself enables several possibilities of transferring +data between clients, and just like with other transfer mechanisms +like email, the receiver of the data has to be careful about how the +data is handled. For more information on security issues with the IRC +protocol, see for example http://www.irchelp.org/irchelp/security/. +[/td][/tr] + +[tr][td] +[b]Abstract[/b] +[/td][/tr] + +[tr][td] +The IRC (Internet Relay Chat) protocol is for use with text based +conferencing; the simplest client being any socket program capable of +connecting to the server. +[p] +This document defines the Client Protocol, and assumes that the +reader is familiar with the IRC Architecture [IRC-ARCH]. +[/td][/tr] + +[tr][td] +[b]Table of Contents[/b] +[/td][/tr] + +[tr][td] +[ul] +[li]1. Labels[/li] +[ul] +[li]1.1 Servers[/li] +[li]1.2 Clients[/li] +[ul] +[li]1.2.1 Users[/li] +[ul] +[li]1.2.1.1 Operators[/li] +[/ul] +[li]1.2.2 Services[/li] +[/ul] +[li]1.3 Channels[/li] +[/ul] +[li]2. The IRC Client Specification[/li] +[ul] +[li]2.1 Overview[/li] +[li]2.2 Character codes[/li] +[li]2.3 Messages[/li] +[ul] +[li]2.3.1 Message format in Augmented BNF[/li] +[/ul] +[li]2.4 Numeric replies[/li] +[li]2.5 Wildcard expressions[/li] +[/ul] +[li]3. Message Details[/li] +[ul] +[li]3.1 Connection Registration[/li] +[ul] +[li]3.1.1 Password message[/li] +[li]3.1.2 Nick message[/li] +[li]3.1.3 User message[/li] +[li]3.1.4 Oper message[/li] +[li]3.1.5 User mode message[/li] +[li]3.1.6 Service message[/li] +[li]3.1.7 Quit[/li] +[li]3.1.8 Squit[/li] +[/ul] +[li]3.2 Channel operations[/li] +[ul] +[li]3.2.1 Join message[/li] +[li]3.2.2 Part message[/li] +[li]3.2.3 Channel mode message[/li] +[li]3.2.4 Topic message[/li] +[li]3.2.5 Names message[/li] +[li]3.2.6 List message[/li] +[li]3.2.7 Invite message[/li] +[li]3.2.8 Kick command[/li] +[/ul] +[li]3.3 Sending messages[/li] +[ul] +[li]3.3.1 Private messages[/li] +[li]3.3.2 Notice[/li] +[/ul] +[li]3.4 Server queries and commands[/li] +[ul] +[li]3.4.1 Motd message[/li] +[li]3.4.2 Lusers message[/li] +[li]3.4.3 Version message[/li] +[li]3.4.4 Stats message[/li] +[li]3.4.5 Links message[/li] +[li]3.4.6 Time message[/li] +[li]3.4.7 Connect message[/li] +[li]3.4.8 Trace message[/li] +[li]3.4.9 Admin command[/li] +[li]3.4.10 Info command[/li] +[/ul] +[li]3.5 Service Query and Commands[/li] +[ul] +[li]3.5.1 Servlist message[/li] +[li]3.5.2 Squery[/li] +[/ul] +[li]3.6 User based queries[/li] +[ul] +[li]3.6.1 Who query[/li] +[li]3.6.2 Whois query[/li] +[li]3.6.3 Whowas[/li] +[/ul] +[li]3.7 Miscellaneous messages[/li] +[ul] +[li]3.7.1 Kill message[/li] +[li]3.7.2 Ping message[/li] +[li]3.7.3 Pong message[/li] +[li]3.7.4 Error[/li] +[/ul] +[/ul] +[li]4. Optional features[/li] +[ul] +[li]4.1 Away[/li] +[li]4.2 Rehash message[/li] +[li]4.3 Die message[/li] +[li]4.4 Restart message[/li] +[li]4.5 Summon message[/li] +[li]4.6 Users[/li] +[li]4.7 Operwall message[/li] +[li]4.8 Userhost message[/li] +[li]4.9 Ison message[/li] +[/ul] +[li]5. Replies[/li] +[ul] +[li]5.1 Command responses[/li] +[li]5.2 Error Replies[/li] +[li]5.3 Reserved numerics[/li] +[/ul] +[li]6. Current implementations[/li] +[li]7. Current problems[/li] +[ul] +[li]7.1 Nicknames[/li] +[li]7.2 Limitation of wildcards[/li] +[li]7.3 Security considerations[/li] +[/ul] +[li]8. Current support and availability[/li] +[li]9. Acknowledgements[/li] +[li]10. References[/li] +[li]11. Author's Address[/li] +[li]12. Full Copyright Statement[/li] +[/ul] +[/td][/tr] + +[tr][td] +[b]1. Labels[/b] +[/td][/tr] + +[tr][td] +This section defines the identifiers used for the various components +of the IRC protocol. +[/td][/tr] + +[tr][td] +[b]1.1 Servers[/b] +[/td][/tr] + +[tr][td] +Servers are uniquely identified by their name, which has a maximum +length of sixty three (63) characters. See the protocol grammar +rules (section 2.3.1) for what may and may not be used in a server +name. +[/td][/tr] + +[tr][td] +[b]1.2 Clients[/b] +[/td][/tr] + +[tr][td] +For each client all servers MUST have the following information: a +netwide unique identifier (whose format depends on the type of +client) and the server which introduced the client. +[/td][/tr] + +[tr][td] +[b]1.2.1 Users[/b] +[/td][/tr] + +[tr][td] +Each user is distinguished from other users by a unique nickname +having a maximum length of nine (9) characters. See the protocol +grammar rules (section 2.3.1) for what may and may not be used in a +nickname. +[p] +While the maximum length is limited to nine characters, clients +SHOULD accept longer strings as they may become used in future +evolutions of the protocol. +[/td][/tr] + +[tr][td] +[b]1.2.1.1 Operators[/b] +[/td][/tr] + +[tr][td] +To allow a reasonable amount of order to be kept within the IRC +network, a special class of users (operators) is allowed to perform +general maintenance functions on the network. Although the powers +granted to an operator can be considered as 'dangerous', they are +nonetheless often necessary. Operators SHOULD be able to perform +basic network tasks such as disconnecting and reconnecting servers as +needed. In recognition of this need, the protocol discussed herein +provides for operators only to be able to perform such functions. +See sections 3.1.8 (SQUIT) and 3.4.7 (CONNECT).[br] +[p] +A more controversial power of operators is the ability to remove a +user from the connected network by 'force', i.e., operators are able +to close the connection between any client and server. The +justification for this is very delicate since its abuse is both +destructive and annoying, and its benefits close to inexistent. For +further details on this type of action, see section 3.7.1 (KILL). +[/td][/tr] + +[tr][td] +[b]1.2.2 Services[/b] +[/td][/tr] + +[tr][td] +Each service is distinguished from other services by a service name +composed of a nickname and a server name. As for users, the nickname +has a maximum length of nine (9) characters. See the protocol +grammar rules (section 2.3.1) for what may and may not be used in a +nickname. +[/td][/tr] + +[tr][td] +[b]1.3 Channels[/b] +[/td][/tr] + +[tr][td] +Channels names are strings (beginning with a '&', '#', '+' or '!' +character) of length up to fifty (50) characters. Apart from the +requirement that the first character is either '&', '#', '+' or '!', +the only restriction on a channel name is that it SHALL NOT contain +any spaces (' '), a control G (^G or ASCII 7), a comma (','). Space +is used as parameter separator and command is used as a list item +separator by the protocol). A colon (':') can also be used as a +delimiter for the channel mask. Channel names are case insensitive. +See the protocol grammar rules (section 2.3.1) for the exact syntax +of a channel name.[br] +[p] +Each prefix characterizes a different channel type. The definition +of the channel types is not relevant to the client-server protocol +and thus it is beyond the scope of this document. More details can +be found in "Internet Relay Chat: Channel Management" [IRC-CHAN]. +[/td][/tr] + +[tr][td] +[b]2. The IRC Client Specification[/b] +[/td][/tr] + +[tr][td] +[b]2.1 Overview[/b] +[/td][/tr] + +[tr][td] +The protocol as described herein is for use only with client to +server connections when the client registers as a user. +[/td][/tr] + +[tr][td] +[b]2.2 Character codes[/b] +[/td][/tr] + +[tr][td] +No specific character set is specified. The protocol is based on a +set of codes which are composed of eight (8) bits, making up an +octet. Each message may be composed of any number of these octets; +however, some octet values are used for control codes, which act as +message delimiters.[br] +[p] +Regardless of being an 8-bit protocol, the delimiters and keywords +are such that protocol is mostly usable from US-ASCII terminal and a +telnet connection. +[p] +Because of IRC's Scandinavian origin, the characters {}|^ are +considered to be the lower case equivalents of the characters []\~, +respectively. This is a critical issue when determining the +equivalence of two nicknames or channel names. +[/td][/tr] + +[tr][td] +[b]2.3 Messages[/b] +[/td][/tr] + +[tr][td] +Servers and clients send each other messages, which may or may not +generate a reply. If the message contains a valid command, as +described in later sections, the client should expect a reply as +specified but it is not advised to wait forever for the reply; client +to server and server to server communication is essentially +asynchronous by nature. +[p] +Each IRC message may consist of up to three main parts: the prefix +(OPTIONAL), the command, and the command parameters (maximum of +fifteen (15)). The prefix, command, and all parameters are separated +by one ASCII space character (0x20) each. +[p] +The presence of a prefix is indicated with a single leading ASCII +colon character (':', 0x3b), which MUST be the first character of the +message itself. There MUST be NO gap (whitespace) between the colon +and the prefix. The prefix is used by servers to indicate the true +origin of the message. If the prefix is missing from the message, it +is assumed to have originated from the connection from which it was +received from. Clients SHOULD NOT use a prefix when sending a +message; if they use one, the only valid prefix is the registered +nickname associated with the client. +[p] +The command MUST either be a valid IRC command or a three (3) digit +number represented in ASCII text. +[p] +IRC messages are always lines of characters terminated with a CR-LF +(Carriage Return - Line Feed) pair, and these messages SHALL NOT +exceed 512 characters in length, counting all characters including +the trailing CR-LF. Thus, there are 510 characters maximum allowed +for the command and its parameters. There is no provision for +continuation of message lines. See section 6 for more details about +current implementations. +[/td][/tr] + +[tr][td] +[b]2.3.1 Message format in Augmented BNF[/b] +[/td][/tr] + +[tr][td] +The protocol messages must be extracted from the contiguous stream of +octets. The current solution is to designate two characters, CR and +LF, as message separators. Empty messages are silently ignored, +which permits use of the sequence CR-LF between messages without +extra problems. +[p] +The extracted message is parsed into the components , + and list of parameters (). +[p] +[pre] + The Augmented BNF representation for this is: + + message = [ ":" prefix SPACE ] command [ params ] crlf + prefix = servername / ( nickname [ [ "!" user ] "@" host ] ) + command = 1*letter / 3digit + params = *14( SPACE middle ) [ SPACE ":" trailing ] + =/ 14( SPACE middle ) [ SPACE [ ":" ] trailing ] + + nospcrlfcl = %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B-FF + ; any octet except NUL, CR, LF, " " and ":" + middle = nospcrlfcl *( ":" / nospcrlfcl ) + trailing = *( ":" / " " / nospcrlfcl ) + + SPACE = %x20 ; space character + crlf = %x0D %x0A ; "carriage return" "linefeed" + + NOTES: + 1) After extracting the parameter list, all parameters are equal + whether matched by or . is just a + syntactic trick to allow SPACE within the parameter. + + 2) The NUL (%x00) character is not special in message framing, and + basically could end up inside a parameter, but it would cause + extra complexities in normal C string handling. Therefore, NUL + is not allowed within messages. + + Most protocol messages specify additional semantics and syntax for + the extracted parameter strings dictated by their position in the + list. For example, many server commands will assume that the first + parameter after the command is the list of targets, which can be + described with: + + target = nickname / server + msgtarget = msgto *( "," msgto ) + msgto = channel / ( user [ "%" host ] "@" servername ) + msgto =/ ( user "%" host ) / targetmask + msgto =/ nickname / ( nickname "!" user "@" host ) + channel = ( "#" / "+" / ( "!" channelid ) / "&" ) chanstring + [ ":" chanstring ] + servername = hostname + host = hostname / hostaddr + hostname = shortname *( "." shortname ) + shortname = ( letter / digit ) *( letter / digit / "-" ) + *( letter / digit ) + ; as specified in RFC 1123 [HNAME] + hostaddr = ip4addr / ip6addr + ip4addr = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit + ip6addr = 1*hexdigit 7( ":" 1*hexdigit ) + ip6addr =/ "0:0:0:0:0:" ( "0" / "FFFF" ) ":" ip4addr + nickname = ( letter / special ) *8( letter / digit / special / "-" ) + targetmask = ( "$" / "#" ) mask + ; see details on allowed masks in section 3.3.1 + chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B + chanstring =/ %x2D-39 / %x3B-FF + ; any octet except NUL, BELL, CR, LF, " ", "," and ":" + channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 ) + + Other parameter syntaxes are: + + user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF ) + ; any octet except NUL, CR, LF, " " and "@" + key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F ) + ; any 7-bit US_ASCII character, + ; except NUL, CR, LF, FF, h/v TABs, and " " + letter = %x41-5A / %x61-7A ; A-Z / a-z + digit = %x30-39 ; 0-9 + hexdigit = digit / "A" / "B" / "C" / "D" / "E" / "F" + special = %x5B-60 / %x7B-7D + ; "[", "]", "\", "`", "_", "^", "{", "|", "}" + + NOTES: + 1) The syntax is given here for the sole purpose of + indicating the format to follow for IP addresses. This + reflects the fact that the only available implementations of + this protocol uses TCP/IP as underlying network protocol but is + not meant to prevent other protocols to be used. + + 2) has a maximum length of 63 characters. This is a + limitation of the protocol as internet hostnames (in + particular) can be longer. Such restriction is necessary + because IRC messages are limited to 512 characters in length. + Clients connecting from a host which name is longer than 63 + characters are registered using the host (numeric) address + instead of the host name. + + 3) Some parameters used in the following sections of this + documents are not defined here as there is nothing specific + about them besides the name that is used for convenience. + These parameters follow the general syntax defined for + . +[/pre] +[/td][/tr] + +[tr][td] +[b]2.4 Numeric replies[/b] +[/td][/tr] + +[tr][td] +Most of the messages sent to the server generate a reply of some +sort. The most common reply is the numeric reply, used for both +errors and normal replies. The numeric reply MUST be sent as one +message consisting of the sender prefix, the three-digit numeric, and +the target of the reply. A numeric reply is not allowed to originate +from a client. In all other respects, a numeric reply is just like a +normal message, except that the keyword is made up of 3 numeric +digits rather than a string of letters. A list of different replies +is supplied in section 5 (Replies). +[/td][/tr] + +[tr][td] +[b]2.5 Wildcard expressions[/b] +[/td][/tr] + +[tr][td] +When wildcards are allowed in a string, it is referred as a "mask". +[p] +For string matching purposes, the protocol allows the use of two +special characters: '?' (%x3F) to match one and only one character, +and '*' (%x2A) to match any number of any characters. These two +characters can be escaped using the character '\' (%x5C). +[p] +[pre] + The Augmented BNF syntax for this is: + + mask = *( nowild / noesc wildone / noesc wildmany ) + wildone = %x3F + wildmany = %x2A + nowild = %x01-29 / %x2B-3E / %x40-FF + ; any octet except NUL, "*", "?" + noesc = %x01-5B / %x5D-FF + ; any octet except NUL and "\" + matchone = %x01-FF + ; matches wildone + matchmany = *matchone + ; matches wildmany + + Examples: + + a?c ; Matches any string of 3 characters in length starting + with "a" and ending with "c" + + a*c ; Matches any string of at least 2 characters in length + starting with "a" and ending with "c" +[/pre] +[/td][/tr] + +[tr][td] +[b]3. Message Details[/b] +[/td][/tr] + +[tr][td] +On the following pages there are descriptions of each message +recognized by the IRC server and client. All commands described in +this section MUST be implemented by any server for this protocol. +[p] +Where the reply ERR_NOSUCHSERVER is returned, it means that the +target of the message could not be found. The server MUST NOT send +any other replies after this error for that command. +[p] +The server to which a client is connected is required to parse the +complete message, and return any appropriate errors. +[p] +If multiple parameters is presented, then each MUST be checked for +validity and appropriate responses MUST be sent back to the client. +In the case of incorrect messages which use parameter lists with +comma as an item separator, a reply MUST be sent for each item. +[/td][/tr] + +[tr][td] +[b]3.1 Connection Registration[/b] +[/td][/tr] + +[tr][td] +The commands described here are used to register a connection with an +IRC server as a user as well as to correctly disconnect. +[p] +A "PASS" command is not required for a client connection to be +registered, but it MUST precede the latter of the NICK/USER +combination (for a user connection) or the SERVICE command (for a +service connection). The RECOMMENDED order for a client to register +is as follows: +[p] +[pre] + 1. Pass message + 2. Nick message 2. Service message + 3. User message +[/pre] +[p] +Upon success, the client will receive an RPL_WELCOME (for users) or +RPL_YOURESERVICE (for services) message indicating that the +connection is now registered and known the to the entire IRC network. +The reply message MUST contain the full client identifier upon which +it was registered. +[/td][/tr] + +[tr][td] +[b]3.1.1 Password message[/b] +[/td][/tr] + +[tr][td][pre] +Command: PASS +Parameters: + +The PASS command is used to set a 'connection password'. The +optional password can and MUST be set before any attempt to register +the connection is made. Currently this requires that user send a +PASS command before sending the NICK/USER combination. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Example: + + PASS secretpasswordhere +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.2 Nick message[/b] +[/pre][/td][/tr] + + +[tr][td][pre] +Command: NICK +Parameters: + +NICK command is used to give user a nickname or change the existing +one. + + Numeric Replies: + + ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME + ERR_NICKNAMEINUSE ERR_NICKCOLLISION + ERR_UNAVAILRESOURCE ERR_RESTRICTED + + Examples: + + NICK Wiz ; Introducing new nick "Wiz" if session is + still unregistered, or user changing his + nickname to "Wiz" + + :WiZ!jto@tolsun.oulu.fi NICK Kilroy + ; Server telling that WiZ changed his + nickname to Kilroy. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.3 User message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: USER +Parameters: + +The USER command is used at the beginning of connection to specify +the username, hostname and realname of a new user. + +The parameter should be a numeric, and can be used to +automatically set user modes when registering with the server. This +parameter is a bitmask, with only 2 bits having any signification: if +the bit 2 is set, the user mode 'w' will be set and if the bit 3 is +set, the user mode 'i' will be set. (See Section 3.1.5 "User +Modes"). + +The may contain space characters. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Example: + + USER guest 0 * :Ronnie Reagan ; User registering themselves with a + username of "guest" and real name + "Ronnie Reagan". + + USER guest 8 * :Ronnie Reagan ; User registering themselves with a + username of "guest" and real name + "Ronnie Reagan", and asking to be set + invisible. +[/pre][/td][/tr] + + +[tr][td][pre] +[b]3.1.4 Oper message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: OPER +Parameters: + +A normal user uses the OPER command to obtain operator privileges. +The combination of and are REQUIRED to gain +Operator privileges. Upon success, the user will receive a MODE +message (see section 3.1.5) indicating the new user modes. + + Numeric Replies: + + ERR_NEEDMOREPARAMS RPL_YOUREOPER + ERR_NOOPERHOST ERR_PASSWDMISMATCH + + Example: + + OPER foo bar ; Attempt to register as an operator + using a username of "foo" and "bar" + as the password. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.5 User mode message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: MODE +Parameters: +*( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) ) + +The user MODE's are typically changes which affect either how the +client is seen by others or what 'extra' messages the client is sent. + +A user MODE command MUST only be accepted if both the sender of the +message and the nickname given as a parameter are both the same. If +no other parameter is given, then the server will return the current +settings for the nick. + + The available modes are as follows: + + a - user is flagged as away; + i - marks a users as invisible; + w - user receives wallops; + r - restricted user connection; + o - operator flag; + O - local operator flag; + s - marks a user for receipt of server notices. + +Additional modes may be available later on. +The flag 'a' SHALL NOT be toggled by the user using the MODE command, +instead use of the AWAY command is REQUIRED. + +If a user attempts to make themselves an operator using the "+o" or +"+O" flag, the attempt SHOULD be ignored as users could bypass the +authentication mechanisms of the OPER command. There is no +restriction, however, on anyone `deopping' themselves (using "-o" or +"-O"). + +On the other hand, if a user attempts to make themselves unrestricted +using the "-r" flag, the attempt SHOULD be ignored. There is no +restriction, however, on anyone `deopping' themselves (using "+r"). +This flag is typically set by the server upon connection for +administrative reasons. While the restrictions imposed are left up +to the implementation, it is typical that a restricted user not be +allowed to change nicknames, nor make use of the channel operator +status on channels. + +The flag 's' is obsolete but MAY still be used. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_USERSDONTMATCH + ERR_UMODEUNKNOWNFLAG RPL_UMODEIS + + Examples: + + MODE WiZ -w ; Command by WiZ to turn off + reception of WALLOPS messages. + + MODE Angel +i ; Command from Angel to make herself + invisible. + + MODE WiZ -o ; WiZ 'deopping' (removing operator + status). +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.6 Service message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: SERVICE +Parameters: + + +The SERVICE command to register a new service. Command parameters +specify the service nickname, distribution, type and info of a new +service. +The parameter is used to specify the visibility of a +service. The service may only be known to servers which have a name +matching the distribution. For a matching server to have knowledge +of the service, the network path between that server and the server +on which the service is connected MUST be composed of servers which +names all match the mask. + +The parameter is currently reserved for future usage. + + Numeric Replies: + + ERR_ALREADYREGISTRED ERR_NEEDMOREPARAMS + ERR_ERRONEUSNICKNAME + RPL_YOURESERVICE RPL_YOURHOST + RPL_MYINFO + + Example: + + SERVICE dict * *.fr 0 0 :French Dictionary ; Service registering + itself with a name of "dict". This + service will only be available on + servers which name matches "*.fr". +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.7 Quit[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: QUIT +Parameters: [ ] + +A client session is terminated with a quit message. The server +acknowledges this by sending an ERROR message to the client. + + Numeric Replies: + + None. + + Example: + + QUIT :Gone to have lunch ; Preferred message format. + + :syrk!kalt@millennium.stealth.net QUIT :Gone to have lunch ; User + syrk has quit IRC to have lunch. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.1.8 Squit[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: SQUIT +Parameters: + +The SQUIT command is available only to operators. It is used to +disconnect server links. Also servers can generate SQUIT messages on +error conditions. A SQUIT message may also target a remote server +connection. In this case, the SQUIT message will simply be sent to +the remote server without affecting the servers in between the +operator and the remote server. + +The SHOULD be supplied by all operators who execute a SQUIT +for a remote server. The server ordered to disconnect its peer +generates a WALLOPS message with included, so that other +users may be aware of the reason of this action. + + Numeric replies: + + ERR_NOPRIVILEGES ERR_NOSUCHSERVER + ERR_NEEDMOREPARAMS + + Examples: + + SQUIT tolsun.oulu.fi :Bad Link ? ; Command to uplink of the server + tolson.oulu.fi to terminate its + connection with comment "Bad Link". + + :Trillian SQUIT cm22.eng.umd.edu :Server out of control ; Command + from Trillian from to disconnect + "cm22.eng.umd.edu" from the net with + comment "Server out of control". +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2 Channel operations[/b] +[/pre][/td][/tr] + +[tr][td][pre] +This group of messages is concerned with manipulating channels, their +properties (channel modes), and their contents (typically users). +For this reason, these messages SHALL NOT be made available to +services. + +All of these messages are requests which will or will not be granted +by the server. The server MUST send a reply informing the user +whether the request was granted, denied or generated an error. When +the server grants the request, the message is typically sent back +(eventually reformatted) to the user with the prefix set to the user +itself. + +The rules governing how channels are managed are enforced by the +servers. These rules are beyond the scope of this document. More +details are found in "Internet Relay Chat: Channel Management" [IRC- +CHAN]. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.1 Join message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: JOIN +Parameters: ( *( "," ) [ *( "," ) ] ) +/ "0" + +The JOIN command is used by a user to request to start listening to +the specific channel. Servers MUST be able to parse arguments in the +form of a list of target, but SHOULD NOT use lists when sending JOIN +messages to clients. + +Once a user has joined a channel, he receives information about +all commands his server receives affecting the channel. This +includes JOIN, MODE, KICK, PART, QUIT and of course PRIVMSG/NOTICE. +This allows channel members to keep track of the other channel +members, as well as channel modes. + +If a JOIN is successful, the user receives a JOIN message as +confirmation and is then sent the channel's topic (using RPL_TOPIC) and +the list of users who are on the channel (using RPL_NAMREPLY), which +MUST include the user joining. + +Note that this message accepts a special argument ("0"), which is +a special request to leave all channels the user is currently a member +of. The server will process this message as if the user had sent +a PART command (See Section 3.2.2) for each channel he is a member +of. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN + ERR_INVITEONLYCHAN ERR_BADCHANNELKEY + ERR_CHANNELISFULL ERR_BADCHANMASK + ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS + ERR_TOOMANYTARGETS ERR_UNAVAILRESOURCE + RPL_TOPIC + + Examples: + + JOIN #foobar ; Command to join channel #foobar. + + JOIN &foo fubar ; Command to join channel &foo using + key "fubar". + + JOIN #foo,&bar fubar ; Command to join channel #foo using + key "fubar" and &bar using no key. + + JOIN #foo,#bar fubar,foobar ; Command to join channel #foo using + key "fubar", and channel #bar using + key "foobar". + + JOIN #foo,#bar ; Command to join channels #foo and + #bar. + + JOIN 0 ; Leave all currently joined + channels. + + :WiZ!jto@tolsun.oulu.fi JOIN #Twilight_zone ; JOIN message from WiZ + on channel #Twilight_zone +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.2 Part message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: PART +Parameters: *( "," ) [ ] + +The PART command causes the user sending the message to be removed +from the list of active members for all given channels listed in the +parameter string. If a "Part Message" is given, this will be sent +instead of the default message, the nickname. This request is always +granted by the server. + +Servers MUST be able to parse arguments in the form of a list of +target, but SHOULD NOT use lists when sending PART messages to +clients. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_NOTONCHANNEL + + Examples: + + PART #twilight_zone ; Command to leave channel + "#twilight_zone" + + PART #oz-ops,&group5 ; Command to leave both channels + "&group5" and "#oz-ops". + + :WiZ!jto@tolsun.oulu.fi PART #playzone :I lost + ; User WiZ leaving channel + "#playzone" with the message "I + lost". +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.3 Channel mode message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: MODE +Parameters: *( ( "-" / "+" ) * * ) + +The MODE command is provided so that users may query and change the +characteristics of a channel. For more details on available modes +and their uses, see "Internet Relay Chat: Channel Management" [IRC- +CHAN]. Note that there is a maximum limit of three (3) changes per +command for modes that take a parameter. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_KEYSET + ERR_NOCHANMODES ERR_CHANOPRIVSNEEDED + ERR_USERNOTINCHANNEL ERR_UNKNOWNMODE + RPL_CHANNELMODEIS + RPL_BANLIST RPL_ENDOFBANLIST + RPL_EXCEPTLIST RPL_ENDOFEXCEPTLIST + RPL_INVITELIST RPL_ENDOFINVITELIST + RPL_UNIQOPIS + + The following examples are given to help understanding the syntax of + the MODE command, but refer to modes defined in "Internet Relay Chat: + Channel Management" [IRC-CHAN]. + + Examples: + + MODE #Finnish +imI *!*@*.fi ; Command to make #Finnish channel + moderated and 'invite-only' with user + with a hostname matching *.fi + automatically invited. + + MODE #Finnish +o Kilroy ; Command to give 'chanop' privileges + to Kilroy on channel #Finnish. + + MODE #Finnish +v Wiz ; Command to allow WiZ to speak on + #Finnish. + + MODE #Fins -s ; Command to remove 'secret' flag + from channel #Fins. + + MODE #42 +k oulu ; Command to set the channel key to + "oulu". + + MODE #42 -k oulu ; Command to remove the "oulu" + channel key on channel "#42". + + MODE #eu-opers +l 10 ; Command to set the limit for the + number of users on channel + "#eu-opers" to 10. + + :WiZ!jto@tolsun.oulu.fi MODE #eu-opers -l + ; User "WiZ" removing the limit for + the number of users on channel "#eu- + opers". + + MODE &oulu +b ; Command to list ban masks set for + the channel "&oulu". + + MODE &oulu +b *!*@* ; Command to prevent all users from + joining. + + MODE &oulu +b *!*@*.edu +e *!*@*.bu.edu + ; Command to prevent any user from a + hostname matching *.edu from joining, + except if matching *.bu.edu + + MODE #bu +be *!*@*.edu *!*@*.bu.edu + ; Comment to prevent any user from a + hostname matching *.edu from joining, + except if matching *.bu.edu + + MODE #meditation e ; Command to list exception masks set + for the channel "#meditation". + + MODE #meditation I ; Command to list invitations masks + set for the channel "#meditation". + + MODE !12345ircd O ; Command to ask who the channel + creator for "!12345ircd" is +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.4 Topic message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: TOPIC +Parameters: [ ] + +The TOPIC command is used to change or view the topic of a channel. +The topic for channel is returned if there is no +given. If the parameter is present, the topic for that +channel will be changed, if this action is allowed for the user +requesting it. If the parameter is an empty string, the +topic for that channel will be removed. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL + RPL_NOTOPIC RPL_TOPIC + ERR_CHANOPRIVSNEEDED ERR_NOCHANMODES + + Examples: + + :WiZ!jto@tolsun.oulu.fi TOPIC #test :New topic ; User Wiz setting the + topic. + + TOPIC #test :another topic ; Command to set the topic on #test + to "another topic". + + TOPIC #test : ; Command to clear the topic on + #test. + + TOPIC #test ; Command to check the topic for + #test. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.5 Names message[/b] + +Command: NAMES +Parameters: [ *( "," ) [ ] ] + +By using the NAMES command, a user can list all nicknames that are +visible to him. For more details on what is visible and what is not, +see "Internet Relay Chat: Channel Management" [IRC-CHAN]. The + parameter specifies which channel(s) to return information +about. There is no error reply for bad channel names. + +If no parameter is given, a list of all channels and their +occupants is returned. At the end of this list, a list of users who +are visible but either not on any channel or not on a visible channel +are listed as being on `channel' "*". + +If the parameter is specified, the request is forwarded to +that server which will generate the reply. + +Wildcards are allowed in the parameter. + + Numerics: + + ERR_TOOMANYMATCHES ERR_NOSUCHSERVER + RPL_NAMREPLY RPL_ENDOFNAMES + + Examples: + + NAMES #twilight_zone,#42 ; Command to list visible users on + #twilight_zone and #42 + + NAMES ; Command to list all visible + channels and users +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.6 List message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: LIST +Parameters: [ *( "," ) [ ] ] + +The list command is used to list channels and their topics. If the + parameter is used, only the status of that channel is +displayed. + +If the parameter is specified, the request is forwarded to +that server which will generate the reply. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_TOOMANYMATCHES ERR_NOSUCHSERVER + RPL_LIST RPL_LISTEND + + Examples: + + LIST ; Command to list all channels. + + LIST #twilight_zone,#42 ; Command to list channels + #twilight_zone and #42 +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.7 Invite message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: INVITE +Parameters: + +The INVITE command is used to invite a user to a channel. The +parameter is the nickname of the person to be invited to +the target channel . There is no requirement that the +channel the target user is being invited to must exist or be a valid +channel. However, if the channel exists, only members of the channel +are allowed to invite other users. When the channel has invite-only +flag set, only channel operators may issue INVITE command. +Only the user inviting and the user being invited will receive +notification of the invitation. Other channel members are not +notified. (This is unlike the MODE changes, and is occasionally the +source of trouble for users.) + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_USERONCHANNEL + ERR_CHANOPRIVSNEEDED + RPL_INVITING RPL_AWAY + + Examples: + + :Angel!wings@irc.org INVITE Wiz #Dust + + ; Message to WiZ when he has been + invited by user Angel to channel + #Dust + + INVITE Wiz #Twilight_Zone ; Command to invite WiZ to + #Twilight_zone +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.2.8 Kick command[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: KICK +Parameters: *( "," ) *( "," ) +[] + +The KICK command can be used to request the forced removal of a user +from a channel. It causes the to PART from the by +force. For the message to be syntactically correct, there MUST be +either one channel parameter and multiple user parameter, or as many +channel parameters as there are user parameters. If a "comment" is +given, this will be sent instead of the default message, the nickname +of the user issuing the KICK. + +The server MUST NOT send KICK messages with multiple channels or +users to clients. This is necessarily to maintain backward +compatibility with old client software. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED + ERR_USERNOTINCHANNEL ERR_NOTONCHANNEL + + Examples: + + KICK &Melbourne Matthew ; Command to kick Matthew from + &Melbourne + + KICK #Finnish John :Speaking English + ; Command to kick John from #Finnish + using "Speaking English" as the + reason (comment). + + :WiZ!jto@tolsun.oulu.fi KICK #Finnish John + ; KICK message on channel #Finnish + from WiZ to remove John from channel +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.3 Sending messages[/b] +[/pre][/td][/tr] + +[tr][td][pre] +The main purpose of the IRC protocol is to provide a base for clients +to communicate with each other. PRIVMSG, NOTICE and SQUERY +(described in Section 3.5 on Service Query and Commands) are the only +messages available which actually perform delivery of a text message +from one client to another - the rest just make it possible and try +to ensure it happens in a reliable and structured manner. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.3.1 Private messages[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: PRIVMSG +Parameters: + +PRIVMSG is used to send private messages between users, as well as to +send messages to channels. is usually the nickname of +the recipient of the message, or a channel name. + +The parameter may also be a host mask (#) or server +mask ($). In both cases the server will only send the PRIVMSG +to those who have a server or host matching the mask. The mask MUST +have at least 1 (one) "." in it and no wildcards following the last +".". This requirement exists to prevent people sending messages to +"#*" or "$*", which would broadcast to all users. Wildcards are the +'*' and '?' characters. This extension to the PRIVMSG command is +only available to operators. + + Numeric Replies: + + ERR_NORECIPIENT ERR_NOTEXTTOSEND + ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL + ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS + ERR_NOSUCHNICK + RPL_AWAY + + Examples: + + :Angel!wings@irc.org PRIVMSG Wiz :Are you receiving this message ? + ; Message from Angel to Wiz. + + PRIVMSG Angel :yes I'm receiving it ! + ; Command to send a message to Angel. + + PRIVMSG jto@tolsun.oulu.fi :Hello ! + ; Command to send a message to a user + on server tolsun.oulu.fi with + username of "jto". + + PRIVMSG kalt%millennium.stealth.net@irc.stealth.net :Are you a frog? + ; Message to a user on server + irc.stealth.net with username of + "kalt", and connected from the host + millennium.stealth.net. + + PRIVMSG kalt%millennium.stealth.net :Do you like cheese? + ; Message to a user on the local + server with username of "kalt", and + connected from the host + millennium.stealth.net. + + PRIVMSG Wiz!jto@tolsun.oulu.fi :Hello ! + ; Message to the user with nickname + Wiz who is connected from the host + tolsun.oulu.fi and has the username + "jto". + + PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. + ; Message to everyone on a server + which has a name matching *.fi. + + PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions + ; Message to all users who come from + a host which has a name matching + *.edu. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.3.2 Notice[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: NOTICE +Parameters: + +The NOTICE command is used similarly to PRIVMSG. The difference +between NOTICE and PRIVMSG is that automatic replies MUST NEVER be +sent in response to a NOTICE message. This rule applies to servers +too - they MUST NOT send any error reply back to the client on +receipt of a notice. The object of this rule is to avoid loops +between clients automatically sending something in response to +something it received. + +This command is available to services as well as users. + +This is typically used by services, and automatons (clients with +either an AI or other interactive program controlling their actions). + +See PRIVMSG for more details on replies and examples. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4 Server queries and commands[/b] +[/pre][/td][/tr] + +[tr][td][pre] +The server query group of commands has been designed to return +information about any server which is connected to the network. + +In these queries, where a parameter appears as , wildcard +masks are usually valid. For each parameter, however, only one query +and set of replies is to be generated. In most cases, if a nickname +is given, it will mean the server to which the user is connected. + +These messages typically have little value for services, it is +therefore RECOMMENDED to forbid services from using them. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.1 Motd message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: MOTD +Parameters: [ ] + +The MOTD command is used to get the "Message Of The Day" of the given +server, or current server if is omitted. + +Wildcards are allowed in the parameter. + + Numeric Replies: + RPL_MOTDSTART RPL_MOTD + RPL_ENDOFMOTD ERR_NOMOTD +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.2 Lusers message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: LUSERS +Parameters: [ [ ] ] + +The LUSERS command is used to get statistics about the size of the +IRC network. If no parameter is given, the reply will be about the +whole net. If a is specified, then the reply will only +concern the part of the network formed by the servers matching the +mask. Finally, if the parameter is specified, the request +is forwarded to that server which will generate the reply. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + RPL_LUSERCLIENT RPL_LUSEROP + RPL_LUSERUNKOWN RPL_LUSERCHANNELS + RPL_LUSERME ERR_NOSUCHSERVER +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.3 Version message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: VERSION +Parameters: [ ] + +The VERSION command is used to query the version of the server +program. An optional parameter is used to query the version +of the server program which a client is not directly connected to. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER RPL_VERSION + + Examples: + + VERSION tolsun.oulu.fi ; Command to check the version of + server "tolsun.oulu.fi". +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.4 Stats message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: STATS +Parameters: [ [ ] ] + +The stats command is used to query statistics of certain server. If + parameter is omitted, only the end of stats reply is sent +back. + +A query may be given for any single letter which is only checked by +the destination server and is otherwise passed on by intermediate +servers, ignored and unaltered. + +Wildcards are allowed in the parameter. +Except for the ones below, the list of valid queries is +implementation dependent. The standard queries below SHOULD be +supported by the server: + + l - returns a list of the server's connections, showing how + long each connection has been established and the + traffic over that connection in Kbytes and messages for + each direction; + m - returns the usage count for each of commands supported + by the server; commands for which the usage count is + zero MAY be omitted; + o - returns a list of configured privileged users, + operators; + u - returns a string showing how long the server has been + up. + +It is also RECOMMENDED that client and server access configuration be +published this way. + + Numeric Replies: + + ERR_NOSUCHSERVER + RPL_STATSLINKINFO RPL_STATSUPTIME + RPL_STATSCOMMANDS RPL_STATSOLINE + RPL_ENDOFSTATS + + Examples: + + STATS m ; Command to check the command usage + for the server you are connected to +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.5 Links message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: LINKS +Parameters: [ [ ] ] + +With LINKS, a user can list all servernames, which are known by the +server answering the query. The returned list of servers MUST match +the mask, or if no mask is given, the full list is returned. + +If is given in addition to , the LINKS +command is forwarded to the first server found that matches that name +(if any), and that server is then required to answer the query. + +Numeric Replies: + + ERR_NOSUCHSERVER + RPL_LINKSRPL_ENDOFLINKS + +Examples: + +LINKS *.au ; Command to list all servers which + have a name that matches *.au; + +LINKS *.edu *.bu.edu; Command to list servers matching + *.bu.edu as seen by the first server + matching *.edu. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.6 Time message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: TIME +Parameters: [ ] + +The time command is used to query local time from the specified +server. If the parameter is not given, the server receiving +the command must reply to the query. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER RPL_TIME + + Examples: + TIME tolsun.oulu.fi ; check the time on the server + "tolson.oulu.fi" +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.7 Connect message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: CONNECT +Parameters: [ ] + +The CONNECT command can be used to request a server to try to +establish a new connection to another server immediately. CONNECT is +a privileged command and SHOULD be available only to IRC Operators. +If a is given and its mask doesn't match name of the +parsing server, the CONNECT attempt is sent to the first match of +remote server. Otherwise the CONNECT attempt is made by the server +processing the request. + +The server receiving a remote CONNECT command SHOULD generate a +WALLOPS message describing the source and target of the request. + + Numeric Replies: + + ERR_NOSUCHSERVER ERR_NOPRIVILEGES + ERR_NEEDMOREPARAMS + + Examples: + + CONNECT tolsun.oulu.fi 6667 ; Command to attempt to connect local + server to tolsun.oulu.fi on port 6667 +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.8 Trace message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: TRACE +Parameters: [ ] + +TRACE command is used to find the route to specific server and +information about its peers. Each server that processes this command +MUST report to the sender about it. The replies from pass-through +links form a chain, which shows route to destination. After sending +this reply back, the query MUST be sent to the next server until +given server is reached. + +TRACE command is used to find the route to specific server. Each +server that processes this message MUST tell the sender about it by +sending a reply indicating it is a pass-through link, forming a chain +of replies. After sending this reply back, it MUST then send the +TRACE message to the next server until given server is reached. If +the parameter is omitted, it is RECOMMENDED that TRACE +command sends a message to the sender telling which servers the local +server has direct connection to. + +If the destination given by is an actual server, the +destination server is REQUIRED to report all servers, services and +operators which are connected to it; if the command was issued by an +operator, the server MAY also report all users which are connected to +it. If the destination given by is a nickname, then only a +reply for that nickname is given. If the parameter is +omitted, it is RECOMMENDED that the TRACE command is parsed as +targeted to the processing server. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER + + If the TRACE message is destined for another server, all + intermediate servers must return a RPL_TRACELINK reply to indicate + that the TRACE passed through it and where it is going next. + + RPL_TRACELINK + + A TRACE reply may be composed of any number of the following + numeric replies. + + RPL_TRACECONNECTING RPL_TRACEHANDSHAKE + RPL_TRACEUNKNOWN RPL_TRACEOPERATOR + RPL_TRACEUSER RPL_TRACESERVER + RPL_TRACESERVICE RPL_TRACENEWTYPE + RPL_TRACECLASS RPL_TRACELOG + RPL_TRACEEND + + Examples: + + TRACE *.oulu.fi ; TRACE to a server matching + *.oulu.fi +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.9 Admin command[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: ADMIN +Parameters: [ ] + +The admin command is used to find information about the administrator +of the given server, or current server if parameter is +omitted. Each server MUST have the ability to forward ADMIN messages +to other servers. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER + RPL_ADMINME RPL_ADMINLOC1 + RPL_ADMINLOC2 RPL_ADMINEMAIL + + Examples: + + ADMIN tolsun.oulu.fi ; request an ADMIN reply from + tolsun.oulu.fi + + ADMIN syrk ; ADMIN request for the server to + which the user syrk is connected +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.4.10 Info command[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: INFO +Parameters: [ ] + +The INFO command is REQUIRED to return information describing the +server: its version, when it was compiled, the patchlevel, when it +was started, and any other miscellaneous information which may be +considered to be relevant. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER + RPL_INFO RPL_ENDOFINFO + + Examples: + + INFO csd.bu.edu ; request an INFO reply from + csd.bu.edu + + INFO Angel ; request info from the server that + Angel is connected to. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.5 Service Query and Commands[/b] +[/pre][/td][/tr] +[tr][td][pre] +The service query group of commands has been designed to return +information about any service which is connected to the network. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.5.1 Servlist message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: SERVLIST +Parameters: [ [ ] ] + +The SERVLIST command is used to list services currently connected to +the network and visible to the user issuing the command. The +optional parameters may be used to restrict the result of the query +(to matching services names, and services type). + + Numeric Replies: + + RPL_SERVLIST RPL_SERVLISTEND +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.5.2 Squery[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: SQUERY +Parameters: + +The SQUERY command is used similarly to PRIVMSG. The only difference +is that the recipient MUST be a service. This is the only way for a +text message to be delivered to a service. + +See PRIVMSG for more details on replies and example. + + Examples: + + SQUERY irchelp :HELP privmsg + ; Message to the service with + nickname irchelp. + + SQUERY dict@irc.fr :fr2en blaireau + ; Message to the service with name + dict@irc.fr. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.6 User based queries[/b] +[/pre][/td][/tr] +[tr][td][pre] +User queries are a group of commands which are primarily concerned +with finding details on a particular user or group users. When using +wildcards with any of these commands, if they match, they will only +return information on users who are 'visible' to you. The visibility +of a user is determined as a combination of the user's mode and the +common set of channels you are both on. + +Although services SHOULD NOT be using this class of message, they are +allowed to. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.6.1 Who query[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: WHO +Parameters: [ [ "o" ] ] + +The WHO command is used by a client to generate a query which returns +a list of information which 'matches' the parameter given by +the client. In the absence of the parameter, all visible +(users who aren't invisible (user mode +i) and who don't have a +common channel with the requesting client) are listed. The same +result can be achieved by using a of "0" or any wildcard which +will end up matching every visible user. + +The passed to WHO is matched against users' host, server, real +name and nickname if the channel cannot be found. +If the "o" parameter is passed only operators are returned according +to the supplied. + + Numeric Replies: + + ERR_NOSUCHSERVER + RPL_WHOREPLY RPL_ENDOFWHO + + Examples: + + WHO *.fi ; Command to list all users who match + against "*.fi". + + WHO jto* o ; Command to list all users with a + match against "jto*" if they are an + operator. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.6.2 Whois query[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: WHOIS +Parameters: [ ] *( "," ) + +This command is used to query information about particular user. +The server will answer this command with several numeric messages +indicating different statuses of each user which matches the mask (if +you are entitled to see them). If no wildcard is present in the +, any information about that nick which you are allowed to see +is presented. + +If the parameter is specified, it sends the query to a +specific server. It is useful if you want to know how long the user +in question has been idle as only local server (i.e., the server the +user is directly connected to) knows that information, while +everything else is globally known. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN + RPL_WHOISUSER RPL_WHOISCHANNELS + RPL_WHOISCHANNELS RPL_WHOISSERVER + RPL_AWAY RPL_WHOISOPERATOR + RPL_WHOISIDLE ERR_NOSUCHNICK + RPL_ENDOFWHOIS + + Examples: + + WHOIS wiz ; return available user information + about nick WiZ + + WHOIS eff.org trillian ; ask server eff.org for user + information about trillian +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.6.3 Whowas[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: WHOWAS +Parameters: *( "," ) [ [ ] ] + +Whowas asks for information about a nickname which no longer exists. +This may either be due to a nickname change or the user leaving IRC. +In response to this query, the server searches through its nickname +history, looking for any nicks which are lexically the same (no wild +card matching here). The history is searched backward, returning the +most recent entry first. If there are multiple entries, up to + replies will be returned (or all of them if no +parameter is given). If a non-positive number is passed as being +, then a full search is done. + +Wildcards are allowed in the parameter. + + Numeric Replies: + + ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK + RPL_WHOWASUSER RPL_WHOISSERVER + RPL_ENDOFWHOWAS + + Examples: + + WHOWAS Wiz ; return all information in the nick + history about nick "WiZ"; + + WHOWAS Mermaid 9 ; return at most, the 9 most recent + entries in the nick history for + "Mermaid"; + + WHOWAS Trillian 1 *.edu ; return the most recent history for + "Trillian" from the first server + found to match "*.edu". +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.7 Miscellaneous messages[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Messages in this category do not fit into any of the above categories +but are nonetheless still a part of and REQUIRED by the protocol. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.7.1 Kill message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: KILL +Parameters: + +The KILL command is used to cause a client-server connection to be +closed by the server which has the actual connection. Servers +generate KILL messages on nickname collisions. It MAY also be +available available to users who have the operator status. + +Clients which have automatic reconnect algorithms effectively make +this command useless since the disconnection is only brief. It does +however break the flow of data and can be used to stop large amounts +of 'flooding' from abusive users or accidents. Abusive users usually +don't care as they will reconnect promptly and resume their abusive +behaviour. To prevent this command from being abused, any user may +elect to receive KILL messages generated for others to keep an 'eye' +on would be trouble spots. + +In an arena where nicknames are REQUIRED to be globally unique at all +times, KILL messages are sent whenever 'duplicates' are detected +(that is an attempt to register two users with the same nickname) in +the hope that both of them will disappear and only 1 reappear. + +When a client is removed as the result of a KILL message, the server +SHOULD add the nickname to the list of unavailable nicknames in an +attempt to avoid clients to reuse this name immediately which is +usually the pattern of abusive behaviour often leading to useless +"KILL loops". See the "IRC Server Protocol" document [IRC-SERVER] +for more information on this procedure. + +The comment given MUST reflect the actual reason for the KILL. For +server-generated KILLs it usually is made up of details concerning +the origins of the two conflicting nicknames. For users it is left +up to them to provide an adequate reason to satisfy others who see +it. To prevent/discourage fake KILLs from being generated to hide +the identify of the KILLer, the comment also shows a 'kill-path' +which is updated by each server it passes through, each prepending +its name to the path. + + Numeric Replies: + + ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS + ERR_NOSUCHNICK ERR_CANTKILLSERVER + +NOTE: +It is RECOMMENDED that only Operators be allowed to kill other users +with KILL command. This command has been the subject of many +controversies over the years, and along with the above +recommendation, it is also widely recognized that not even operators +should be allowed to kill users on remote servers. +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.7.2 Ping message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: PING +Parameters: [ ] + +The PING command is used to test the presence of an active client or +server at the other end of the connection. Servers send a PING +message at regular intervals if no other activity detected coming +from a connection. If a connection fails to respond to a PING +message within a set amount of time, that connection is closed. A +PING message MAY be sent even if the connection is active. + +When a PING message is received, the appropriate PONG message MUST be +sent as reply to (server which sent the PING message out) +as soon as possible. If the parameter is specified, it +represents the target of the ping, and the message gets forwarded +there. + + Numeric Replies: + + ERR_NOORIGIN ERR_NOSUCHSERVER + + Examples: + + PING tolsun.oulu.fi ; Command to send a PING message to + server + + PING WiZ tolsun.oulu.fi ; Command from WiZ to send a PING + message to server "tolsun.oulu.fi" + + PING :irc.funet.fi ; Ping message sent by server + "irc.funet.fi" +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.7.3 Pong message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: PONG +Parameters: [ ] + +PONG message is a reply to ping message. If parameter is +given, this message MUST be forwarded to given target. The +parameter is the name of the entity who has responded to PING message +and generated this message. + + Numeric Replies: + + ERR_NOORIGIN ERR_NOSUCHSERVER + + Example: + + PONG csd.bu.edu tolsun.oulu.fi ; PONG message from csd.bu.edu to + tolsun.oulu.fi +[/pre][/td][/tr] + +[tr][td][pre] +[b]3.7.4 Error[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: ERROR +Parameters: + +The ERROR command is for use by servers when reporting a serious or +fatal error to its peers. It may also be sent from one server to +another but MUST NOT be accepted from any normal unknown clients. + +Only an ERROR message SHOULD be used for reporting errors which occur +with a server-to-server link. An ERROR message is sent to the server +at the other end (which reports it to appropriate local users and +logs) and to appropriate local users and logs. It is not to be +passed onto any other servers by a server if it is received from a +server. + +The ERROR message is also used before terminating a client +connection. + +When a server sends a received ERROR message to its operators, the +message SHOULD be encapsulated inside a NOTICE message, indicating +that the client was not responsible for the error. + + Numerics: + + None. + + Examples: + + ERROR :Server *.fi already exists ; ERROR message to the other server + which caused this error. + + NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists + ; Same ERROR message as above but + sent to user WiZ on the other server. +[/pre][/td][/tr] + +[tr][td][pre] +[b]4. Optional features[/b] +[/pre][/td][/tr] + +[tr][td][pre] +This section describes OPTIONAL messages. They are not required in a +working server implementation of the protocol described herein. In +the absence of the feature, an error reply message MUST be generated +or an unknown command error. If the message is destined for another +server to answer then it MUST be passed on (elementary parsing +REQUIRED) The allocated numerics for this are listed with the +messages below. + +From this section, only the USERHOST and ISON messages are available +to services. +[/pre][/td][/tr] + +[tr][td][pre] +[b]4.1 Away[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: AWAY +Parameters: [ ] + +With the AWAY command, clients can set an automatic reply string for +any PRIVMSG commands directed at them (not to a channel they are on). +The server sends an automatic reply to the client sending the PRIVMSG +command. The only replying server is the one to which the sending +client is connected to. + +The AWAY command is used either with one parameter, to set an AWAY +message, or with no parameters, to remove the AWAY message. + +Because of its high cost (memory and bandwidth wise), the AWAY +message SHOULD only be used for client-server communication. A +server MAY choose to silently ignore AWAY messages received from +other servers. To update the away status of a client across servers, +the user mode 'a' SHOULD be used instead. (See Section 3.1.5) + + Numeric Replies: + + RPL_UNAWAY RPL_NOWAWAY + + Example: + + AWAY :Gone to lunch. Back in 5 ; Command to set away message to + "Gone to lunch. Back in 5". +[/pre][/td][/tr] + +[tr][td][pre] +[b]4.2 Rehash message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: REHASH +Parameters: None + +The rehash command is an administrative command which can be used by +an operator to force the server to re-read and process its +configuration file. + + Numeric Replies: + + RPL_REHASHING ERR_NOPRIVILEGES + + + Example: + + REHASH ; message from user with operator + status to server asking it to reread + its configuration file. +[/pre][/td][/tr] + +[tr][td][pre] +[b]4.3 Die message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: DIE +Parameters: None + +An operator can use the DIE command to shutdown the server. This +message is optional since it may be viewed as a risk to allow +arbitrary people to connect to a server as an operator and execute +this command. + +The DIE command MUST always be fully processed by the server to which +the sending client is connected and MUST NOT be passed onto other +connected servers. + + Numeric Replies: + + ERR_NOPRIVILEGES + + Example: + + DIE ; no parameters required. +[/pre][/td][/tr] + +[tr][td][pre] +[b]4.4 Restart message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: RESTART +Parameters: None + +An operator can use the restart command to force the server to +restart itself. This message is optional since it may be viewed as a +risk to allow arbitrary people to connect to a server as an operator +and execute this command, causing (at least) a disruption to service. + +The RESTART command MUST always be fully processed by the server to +which the sending client is connected and MUST NOT be passed onto +other connected servers. + + Numeric Replies: + + ERR_NOPRIVILEGES + + Example: + + RESTART ; no parameters required. +[/pre][/td][/tr] + +[tr][td][pre] +[b]4.5 Summon message[/b] +[/pre][/td][/tr] + +[tr][td][pre] +Command: SUMMON +Parameters: [ [ ] ] + +The SUMMON command can be used to give users who are on a host +running an IRC server a message asking them to please join IRC. This +message is only sent if the target server (a) has SUMMON enabled, (b) +the user is logged in and (c) the server process can write to the +user's tty (or similar). + +If no parameter is given it tries to summon from the +server the client is connected to is assumed as the target. + +If summon is not enabled in a server, it MUST return the +ERR_SUMMONDISABLED numeric. + + Numeric Replies: + + ERR_NORECIPIENT ERR_FILEERROR + ERR_NOLOGIN ERR_NOSUCHSERVER + ERR_SUMMONDISABLED RPL_SUMMONING + + Examples: + + SUMMON jto ; summon user jto on the server's + host + + SUMMON jto tolsun.oulu.fi ; summon user jto on the host which a + server named "tolsun.oulu.fi" is + running. +[/pre][/td][/tr] + +[tr][td] +[b]4.6 Users[/b] +[/td][/tr] + +[tr][td][pre] +Command: USERS +Parameters: [ ] + +The USERS command returns a list of users logged into the server in a +format similar to the UNIX commands who(1), rusers(1) and finger(1). +If disabled, the correct numeric MUST be returned to indicate this. + +Because of the security implications of such a command, it SHOULD be +disabled by default in server implementations. Enabling it SHOULD +require recompiling the server or some equivalent change rather than +simply toggling an option and restarting the server. The procedure +to enable this command SHOULD also include suitable large comments. + + Numeric Replies: + + ERR_NOSUCHSERVER ERR_FILEERROR + RPL_USERSSTART RPL_USERS + RPL_NOUSERS RPL_ENDOFUSERS + ERR_USERSDISABLED + + Disabled Reply: + + ERR_USERSDISABLED + + Example: + + USERS eff.org ; request a list of users logged in + on server eff.org +[/pre][/td][/tr] + +[tr][td] +[b]4.7 Operwall message[/b] +[/td][/tr] + +[tr][td][pre] +Command: WALLOPS +Parameters: + +The WALLOPS command is used to send a message to all currently +connected users who have set the 'w' user mode for themselves. (See +Section 3.1.5 "User modes"). +After implementing WALLOPS as a user command it was found that it was +often and commonly abused as a means of sending a message to a lot of +people. Due to this, it is RECOMMENDED that the implementation of +WALLOPS allows and recognizes only servers as the originators of +WALLOPS. + + Numeric Replies: + + ERR_NEEDMOREPARAMS + + Example: + + :csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua ; WALLOPS + message from csd.bu.edu announcing a + CONNECT message it received from + Joshua and acted upon. +[/pre][/td][/tr] + +[tr][td] +[b]4.8 Userhost message[/b] +[/td][/tr] + +[tr][td][pre] +Command: USERHOST +Parameters: *( SPACE ) + +The USERHOST command takes a list of up to 5 nicknames, each +separated by a space character and returns a list of information +about each nickname that it found. The returned list has each reply +separated by a space. + + Numeric Replies: + + RPL_USERHOST ERR_NEEDMOREPARAMS + + Example: + + USERHOST Wiz Michael syrk ; USERHOST request for information on + nicks "Wiz", "Michael", and "syrk" + + :ircd.stealth.net 302 yournick :syrk=+syrk@millennium.stealth.net + ; Reply for user syrk +[/pre][/td][/tr] + +[tr][td] +[b]4.9 Ison message[/b] +[/td][/tr] + +[tr][td][pre] +Command: ISON +Parameters: *( SPACE ) + +The ISON command was implemented to provide a quick and efficient +means to get a response about whether a given nickname was currently +on IRC. ISON only takes one (1) type of parameter: a space-separated +list of nicks. For each nickname in the list that is present, the +server adds that to its reply string. Thus the reply string may +return empty (none of the given nicks are present), an exact copy of +the parameter string (all of them present) or any other subset of the +set of nicks given in the parameter. The only limit on the number of +nicks that may be checked is that the combined length MUST NOT be too +large as to cause the server to chop it off so it fits in 512 +characters. + +ISON is only processed by the server local to the client sending the +command and thus not passed onto other servers for further +processing. + + Numeric Replies: + + RPL_ISON ERR_NEEDMOREPARAMS + + Example: + + ISON phone trillian WiZ jarlek Avalon Angel Monstah syrk + ; Sample ISON request for 7 nicks. +[/pre][/td][/tr] + +[tr][td] +[b]5. Replies[/b] +[/td][/tr] + +[tr][td] +The following is a list of numeric replies which are generated in +response to the commands given above. Each numeric is given with its +number, name and reply string. +[/td][/tr] + +[tr][td] +[b]5.1 Command responses[/b] +[/td][/tr] + +[tr][td] +Numerics in the range from 001 to 099 are used for client-server +connections only and should never travel between servers. Replies +generated in the response to commands are found in the range from 200 +to 399. +[p] +[pre] + 001 RPL_WELCOME + "Welcome to the Internet Relay Network + !@" + 002 RPL_YOURHOST + "Your host is , running version " + 003 RPL_CREATED + "This server was created " + 004 RPL_MYINFO + " + " + + - The server sends Replies 001 to 004 to a user upon + successful registration. + + 005 RPL_BOUNCE + "Try server , port " + + - Sent by the server to a user to suggest an alternative + server. This is often used when the connection is + refused because the server is already full. + + 302 RPL_USERHOST + ":*1 *( " " )" + + - Reply format used by USERHOST to list replies to + the query list. The reply string is composed as + follows: + + reply = nickname [ "*" ] "=" ( "+" / "-" ) hostname + + The '*' indicates whether the client has registered + as an Operator. The '-' or '+' characters represent + whether the client has set an AWAY message or not + respectively. + + 303 RPL_ISON + ":*1 *( " " )" + + - Reply format used by ISON to list replies to the + query list. + + 301 RPL_AWAY + " :" + 305 RPL_UNAWAY + ":You are no longer marked as being away" + 306 RPL_NOWAWAY + ":You have been marked as being away" + + - These replies are used with the AWAY command (if + allowed). RPL_AWAY is sent to any client sending a + PRIVMSG to a client which is away. RPL_AWAY is only + sent by the server to which the client is connected. + Replies RPL_UNAWAY and RPL_NOWAWAY are sent when the + client removes and sets an AWAY message. + + 311 RPL_WHOISUSER + " * :" + 312 RPL_WHOISSERVER + " :" + 313 RPL_WHOISOPERATOR + " :is an IRC operator + 317 RPL_WHOISIDLE + " :seconds idle" + 318 RPL_ENDOFWHOIS + " :End of WHOIS list" + 319 RPL_WHOISCHANNELS + " :*( ( "@" / "+" ) " " )" + + - Replies 311 - 313, 317 - 319 are all replies + generated in response to a WHOIS message. Given that + there are enough parameters present, the answering + server MUST either formulate a reply out of the above + numerics (if the query nick is found) or return an + error reply. The '*' in RPL_WHOISUSER is there as + the literal character and not as a wild card. For + each reply set, only RPL_WHOISCHANNELS may appear + more than once (for long lists of channel names). + The '@' and '+' characters next to the channel name + indicate whether a client is a channel operator or + has been granted permission to speak on a moderated + channel. The RPL_ENDOFWHOIS reply is used to mark + the end of processing a WHOIS message. + + 314 RPL_WHOWASUSER + " * :" + 369 RPL_ENDOFWHOWAS + " :End of WHOWAS" + + - When replying to a WHOWAS message, a server MUST use + the replies RPL_WHOWASUSER, RPL_WHOISSERVER or + ERR_WASNOSUCHNICK for each nickname in the presented + list. At the end of all reply batches, there MUST + be RPL_ENDOFWHOWAS (even if there was only one reply + and it was an error). + + 321 RPL_LISTSTART + Obsolete. Not used. + + 322 RPL_LIST + " <# visible> :" + 323 RPL_LISTEND + ":End of LIST" + + - Replies RPL_LIST, RPL_LISTEND mark the actual replies + with data and end of the server's response to a LIST + command. If there are no channels available to return, + only the end reply MUST be sent. + + 325 RPL_UNIQOPIS + " " + + 324 RPL_CHANNELMODEIS + " " + + 331 RPL_NOTOPIC + " :No topic is set" + 332 RPL_TOPIC + " :" + + - When sending a TOPIC message to determine the + channel topic, one of two replies is sent. If + the topic is set, RPL_TOPIC is sent back else + RPL_NOTOPIC. + + 341 RPL_INVITING + " " + + - Returned by the server to indicate that the + attempted INVITE message was successful and is + being passed onto the end client. + + 342 RPL_SUMMONING + " :Summoning user to IRC" + + - Returned by a server answering a SUMMON message to + indicate that it is summoning that user. + + 346 RPL_INVITELIST + " " + 347 RPL_ENDOFINVITELIST + " :End of channel invite list" + + - When listing the 'invitations masks' for a given channel, + a server is required to send the list back using the + RPL_INVITELIST and RPL_ENDOFINVITELIST messages. A + separate RPL_INVITELIST is sent for each active mask. + After the masks have been listed (or if none present) a + RPL_ENDOFINVITELIST MUST be sent. + + 348 RPL_EXCEPTLIST + " " + 349 RPL_ENDOFEXCEPTLIST + " :End of channel exception list" + + - When listing the 'exception masks' for a given channel, + a server is required to send the list back using the + RPL_EXCEPTLIST and RPL_ENDOFEXCEPTLIST messages. A + separate RPL_EXCEPTLIST is sent for each active mask. + After the masks have been listed (or if none present) + a RPL_ENDOFEXCEPTLIST MUST be sent. + + 351 RPL_VERSION + ". :" + + - Reply by the server showing its version details. + The is the version of the software being + used (including any patchlevel revisions) and the + is used to indicate if the server is + running in "debug mode". + + The "comments" field may contain any comments about + the version or further version details. + + 352 RPL_WHOREPLY + " + ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] + : " + + 315 RPL_ENDOFWHO + " :End of WHO list" + + - The RPL_WHOREPLY and RPL_ENDOFWHO pair are used + to answer a WHO message. The RPL_WHOREPLY is only + sent if there is an appropriate match to the WHO + query. If there is a list of parameters supplied + with a WHO message, a RPL_ENDOFWHO MUST be sent + after processing each list item with being + the item. + + 353 RPL_NAMREPLY + "( "=" / "*" / "@" ) + :[ "@" / "+" ] *( " " [ "@" / "+" ] ) + - "@" is used for secret channels, "*" for private + channels, and "=" for others (public channels). + + 366 RPL_ENDOFNAMES + " :End of NAMES list" + + - To reply to a NAMES message, a reply pair consisting + of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the + server back to the client. If there is no channel + found as in the query, then only RPL_ENDOFNAMES is + returned. The exception to this is when a NAMES + message is sent with no parameters and all visible + channels and contents are sent back in a series of + RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark + the end. + + 364 RPL_LINKS + " : " + 365 RPL_ENDOFLINKS + " :End of LINKS list" + + - In replying to the LINKS message, a server MUST send + replies back using the RPL_LINKS numeric and mark the + end of the list using an RPL_ENDOFLINKS reply. + + 367 RPL_BANLIST + " " + 368 RPL_ENDOFBANLIST + " :End of channel ban list" + + - When listing the active 'bans' for a given channel, + a server is required to send the list back using the + RPL_BANLIST and RPL_ENDOFBANLIST messages. A separate + RPL_BANLIST is sent for each active banmask. After the + banmasks have been listed (or if none present) a + RPL_ENDOFBANLIST MUST be sent. + + 371 RPL_INFO + ":" + 374 RPL_ENDOFINFO + ":End of INFO list" + + - A server responding to an INFO message is required to + send all its 'info' in a series of RPL_INFO messages + with a RPL_ENDOFINFO reply to indicate the end of the + replies. + + 375 RPL_MOTDSTART + ":- Message of the day - " + 372 RPL_MOTD + ":- " + 376 RPL_ENDOFMOTD + ":End of MOTD command" + + - When responding to the MOTD message and the MOTD file + is found, the file is displayed line by line, with + each line no longer than 80 characters, using + RPL_MOTD format replies. These MUST be surrounded + by a RPL_MOTDSTART (before the RPL_MOTDs) and an + RPL_ENDOFMOTD (after). + + 381 RPL_YOUREOPER + ":You are now an IRC operator" + + - RPL_YOUREOPER is sent back to a client which has + just successfully issued an OPER message and gained + operator status. + + 382 RPL_REHASHING + " :Rehashing" + + - If the REHASH option is used and an operator sends + a REHASH message, an RPL_REHASHING is sent back to + the operator. + + 383 RPL_YOURESERVICE + "You are service " + + - Sent by the server to a service upon successful + registration. + + 391 RPL_TIME + " :" + + - When replying to the TIME message, a server MUST send + the reply using the RPL_TIME format above. The string + showing the time need only contain the correct day and + time there. There is no further requirement for the + time string. + + 392 RPL_USERSSTART + ":UserID Terminal Host" + 393 RPL_USERS + ": " + 394 RPL_ENDOFUSERS + ":End of users" + 395 RPL_NOUSERS + ":Nobody logged in" + + - If the USERS message is handled by a server, the + replies RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS and + RPL_NOUSERS are used. RPL_USERSSTART MUST be sent + first, following by either a sequence of RPL_USERS + or a single RPL_NOUSER. Following this is + RPL_ENDOFUSERS. + + 200 RPL_TRACELINK + "Link + V + + " + 201 RPL_TRACECONNECTING + "Try. " + 202 RPL_TRACEHANDSHAKE + "H.S. " + 203 RPL_TRACEUNKNOWN + "???? []" + 204 RPL_TRACEOPERATOR + "Oper " + 205 RPL_TRACEUSER + "User " + 206 RPL_TRACESERVER + "Serv S C + @ V" + 207 RPL_TRACESERVICE + "Service " + 208 RPL_TRACENEWTYPE + " 0 " + 209 RPL_TRACECLASS + "Class " + 210 RPL_TRACERECONNECT + Unused. + 261 RPL_TRACELOG + "File " + 262 RPL_TRACEEND + " :End of TRACE" + + - The RPL_TRACE* are all returned by the server in + response to the TRACE message. How many are + returned is dependent on the TRACE message and + whether it was sent by an operator or not. There + is no predefined order for which occurs first. + Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and + RPL_TRACEHANDSHAKE are all used for connections + which have not been fully established and are either + unknown, still attempting to connect or in the + process of completing the 'server handshake'. + RPL_TRACELINK is sent by any server which handles + a TRACE message and has to pass it on to another + server. The list of RPL_TRACELINKs sent in + response to a TRACE command traversing the IRC + network should reflect the actual connectivity of + the servers themselves along that path. + RPL_TRACENEWTYPE is to be used for any connection + which does not fit in the other categories but is + being displayed anyway. + RPL_TRACEEND is sent to indicate the end of the list. + + 211 RPL_STATSLINKINFO + " + +