=======================================
Licq FAQ
February 24, 1999

author: Graham Roff
=======================================


---------------------------------------
Section 1: Basics
   1.1: Who wrote Licq?
   1.2: What does Licq stand for anyway?
   1.3: Is Licq based on micq code like many of the other clones? 
   1.4: What Qt and not GTK?
Section 2: Compiling / Installing
   2.1: What is needed to compile Licq?
   2.2: I am compiling Licq under <insert non-Linux UNIX here> and am 
        getting errors in socket.cpp.  What's with that?
   2.3: I get linking errors complaining about unresolved Qt symbols.
   2.4: How do I get socks working?
   2.5: How do I make Imlib stop complaining about unresolved symbols?
   2.6: How do I do a manual install (ie I have a binary distribution)?
   2.7: I am trying to compile with Solaris and the compilation freezes
        at the "moc" line.
   2.8: I am compiling under Solaris and I get an internal error.
   2.9: The RPM/dynamic binary require libstdc++-2.9, where can I find it?
   2.10: I am using an older compiler (ie gcc 2.7) and get errors about
         ANSI C++ not allowing implicit casting of "void *".
Section 3: Using
   3.1: Where do I get a uin from?
   3.2: I get "No route to host" when I try to logon.
   3.3: Where did my sound go?
   3.4: What happened to the status icons?
   3.5: Licq locks up sometimes when I try and logon or send a message...
   3.6: I have a lot of users and now my contact list never gets 
        updated...
   3.7: Does multi-party chat work?
   3.8: How come I can't see ascii 8-bit characters in chat windows?
   3.9: Licq says it is unable to load <filename>.xpm, but the file is there!


=======================================
Section 1: Basics


1.1: Who wrote Licq?

	Licq was first begun as a text mode client to ICQ in February 1998 by
myself, Graham Roff, and one other programmer who wishes for some strange
reason to remain anonoymous.  He's from Nova Scotia, perhaps that explains
things.  The Qt port was written by myself starting in June 1998.  The other
programmer assists occasionally and is currently in the process of making
Licq fully multithreaded.


1.2: What does Licq stand for anyway?

	Contrary to popular belief, it does not stand for Linux ICQ.  This
would be (a) a bit conceited, and (b) way too obvious a name for a linux
program.


1.3: Is Licq based on micq code like many of the other clones? 

	Licq was begun a long time before micq was released and is based
completely on original source code.  It is also done in C++ as opposed to C
like micq and most of the other clones.

1.4: What Qt and not GTK?

	GTK is becoming more and more popular with developers.  It has very nice
widgets and actually does include a couple of features which are lacking in Qt.
However, there are a number of advantages to Qt.  First of all, Qt is written
in pure C++.  As Licq was written in C++, this made the graphical port much
easier.  There is a C++ wrapper for GTK but quite frankly it's terrible.  Qt
is very professionally done and is by far the most advanced of the gui sets for
X-Windows.  It also has much better support for certain things which I felt were
essential to Licq.  If GTK even becomes as full featured as Qt and a good C++
wrapper comes out, then I will probably convert to GTK simply because the
licensing agreement is more to my liking.
	With the news that Qt 2.0 will be GPL, I'm a happier person.



=======================================
Section 2: Compiling and Installing
   

2.1: What is needed to compile Licq?
	Licq needs the Qt library and header files from ftp.troll.no >= 1.41. 
It also will use XScreenSaver extensions (libXext and libXss) if you have them.
If you use Redhat then you will need qt...rpm, qt-devel...rpm, and 
XFree86-devel...rpm.
	As Licq is written in c++, it obviously requires a c++ compiler.  I
highly recommend using egcs-c++ as it gives the best performance.


2.2: I am compiling Licq under <insert non-Linux UNIX here> and am getting
     errors in socket.cpp.  What's with that?
     
	The old versions of Licq had to have the "&" removed from the problem
line in socket.cpp on the second argument in the call to socket.  As of 0.50
this should no longer a problem.  If it is, then simply remove the & from the
relevant line.


2.3: I get linking errors complaining about unresolved Qt symbols.

	This problem is almost for sure because you are trying to compile Licq
with a different compiler from the one you used to compile libqt.  This
usually occurs if you are using RedHat and have an older Qt package installed.
Make sure that if you use egcs or gcc 2.8 then you have the Qt RPM for RedHat
5.0 or later.  If you aren't using RedHat, then recompile Qt.


2.4: How do I get socks working?
	
	I do not use socks, and didn't write the code to make Licq work with
socks.  After configuring with --enable-socks5 you have to set some environment
variables as well, follow the guidelines that come with the socks5 client.
Other than that, I can't help you.


2.5: How do I make Imlib stop complaining about unresolved symbols?

	This problem is due to Imlib needing to have some graphics libraries
linked to it.  If this happens with Licq, it will happen with anything that
needs Imlib.  To fix it, check what libraries Imlib needs (ldd libImlib.so)
and then add them all to the LDLIBS line in src/Makefile.
	For example:

$> ldd libImlib.so
     libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x4002b000)
     libtiff.so.3 => /usr/lib/libtiff.so.3 (0x40049000)
     libungif.so.3 => /usr/lib/libungif.so.3 (0x40074000)
     libpng.so.2 => /usr/lib/libpng.so.2 (0x4007b000)
     libz.so.1 => /usr/lib/libz.so.1 (0x40097000)
     libm.so.6 => /lib/libm.so.6 (0x400a5000)
     libc.so.6 => /lib/libc.so.6 (0x400be000)
     libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40162000)
     /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

	So now I go to src/Makefile and add "-ljpeg -ltiff -lungif -lpng -lz"
to the LDLIBS line.
	If you are upgrading libjpeg, it is helpful to note that libjpeg.so.6
is not the same as libjpeg.so.62.  However, you can have both installed at the
same time if you need both.  I have also heard that you can install libjpeg.so.62
and then make libjpeg.so.6 a symbolic link to libjpeg.so.62 and it works fine.


2.6: How do I do a manual install (ie I have a binary distribution)?

	Easy, first copy the binary to somewhere nice (like /usr/local/bin).
Then copy licq-base.tar.gz to /usr/local/share.  There are some other
interesting documents to look at if you want as well.  Then run licq and it 
should finish the install for you.  See, it's easy.


2.7: I am trying to compile with Solaris and the compilation freezes
     at the "moc" line.

	Licq requires GNU make to compiler properly.  Alternatively,
you can compile all the moc files by hand doing:
$> moc <infile> -o <outfile>
The list of files to moc is in the Makefile.  If you do this, you will
still have to replace the $^ in the following section:
++ licq: $(OBJECTS) $(METAOBJ)
++         $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)
to be:
++ licq: $(OBJECTS) $(METAOBJ)
++         $(CXX) $(CXXFLAGS) -o $@ $(OBJECTS) $(METAOBJ) $(LDFLAGS) $(LDLIBS)
  

2.8: I am compiling under Solaris and I get an internal error.

	This is a problem with some versions of g++.  Simply remove -O2 
from the relevant compile line and it should work fine.



2.9: The RPM/dynamic binary require libstdc++-2.9, where can I find it?

	This version of the standard c++ library comes with egcs.  It is
really called egcs-libstdc++.  It can be found at rufus.w3.org.  I highly
recommend upgrading to egcs-1.1, as it is a much better compiler then
standard g++.  I have used it to successfully compile both the kernel
and X without any problems.
	It is also possible to make a symlink in /usr/lib to libstdc++.so.2.9.0.
For example:
$ ln -s /usr/lib/libstdc++.so.2.8.0 /usr/lib/libstdc++.so.2.9



2.10: I am using an older compiler (ie gcc 2.7) and get errors about
      ANSI C++ not allowing implicit casting of "void *".

	Some older implementations of c++ erroneously define NULL as being
((void *)0), which causes some compilers to complain.  If this is the case,
you can either upgrade to a newer compiler or simply go into the src/ 
directory and run "remove-null.sh", which will replace all NULL's with zeros.




=======================================
Section 3: Using

3.1: How do I get a uin?

	Licq cannot register a new user with Mirabilis *yet*.  For now you
have to use a real ICQ client to register and get a uin, and to change your
personal stats as well.  See http://www.mirabilis.com for more info.


3.2: I get "No route to Host" error.

	This occurs for some people for some unknown reason.  I means that
gethostbyname() is unable to get an ip for icq.mirabilis.com.  The solution
is simply to replace the server hostnames in licq.conf with their actual
ip addresses.  Then it should work fine.

   
3.3: Where did my sound go?

	As of 0.44 the entire pathname to the wav file must be entered in 
licq.conf.  This is to allow placing of these files anywhere you want.

   
3.4: What happened to the status icons?

	Status icons need to be in ~/.licq/data/icons.xxx in order to be found
where xxx is the name of the icon set being used (set in licq.conf). Make sure 
they are there.


3.5: Licq locks up sometimes when I try and logon or send a message...

	This is due to the fact that Licq is single-threaded and gethostbyname()
and connect() are blocking calls.  Thus if the system is unable to get an ip
for a hostname or to find a route to an ip then it will lock up Licq until it
does or the network times out (about 2 minutes).  Wait and hopefully Licq will
come back up in after a minute or two.
	This will be solved when Licq goes multi-threaded.


3.6: I have a lot of users and now my contact list never gets updated...

	If you have more then 125 users on your contact list then mirabilis
will ignore it.  The solution is simply to remove some users.  When Licq
starts supporting multi-packet messages eventually this limit will go 
away.
	Update: Licq now supports more then 125 users on your contact list, however
this may still occur for some people.  The fix is to reduce MaxUsersPerPacket to
100 (or less).  Either edit ~/.licq/conf/licq.conf by hand or use the options 
dialog to do this.


3.7: Does multi-party chat work?

	No, but this is very high on the list of things for me to get working.


3.8: How come I can't see ascii 8-bit characters in chat windows?

	I'm not totally sure...The problem used to be the isprint() command
which does not work as documented, but even with that fixed, it appears that
extended characters do not appear.  I'm working on it, and hopefully 0.50 has
fixed the problem.
	Update: as of 0.51 chat works fully.


3.9: Licq says it is unable to load <filename>.xpm, but the file is there!

	Qt has problems loading certain formats of xpm.  The solution is simply
to save the pixmap in question as a gif and edit the skin file appropriately.	
