                       README for the Indy 10 FPC Version

This is an effort to make Indy 10 work in FreePascal so that it is available on 
a wide variety of platforms. At the same time, we want to follow the Indy 
Coding Conventions and Standards" 
(http://www.indyproject.org/sockets/Teams/Core/Docs/Standards/) as much as we 
can so that NET is supported at the same time. The goal is to support as many 
systems as we can.

Some success has been reported with:

Win32
Win64
Linux
FreeBSD

Currently, we would like to support the following systems.

WinCE
Mac OS/X (Darwin))

Remember that the success of this effort depends upon you and what you 
contribute. Most of this is being done by people who choose to volunteer their 
limited time.

                                  Requirements

This distribution requires FreePascal 2.2.0. We are unable to support earlier 
2.0 releases because there are some bugs in those versions and the package 
structure changed.

                                    License

Read the COPYING file located in this distribution.

                           Installation Instructions

If you have a RPM-based distribution (such as Fedora or Mandravia) and you 
install FreePascal as root, we recommend using the Indy RPM. As a user, setup 
your user account to build RPM's with the advice from 
http://www.rpm.org/hintskinks/buildtree/ and then use the makeindyrpm.sh script 
to build the Indy RPM's. Then install the indy-fpc and indy-fpc-src RPM's that 
you created. We do NOT distribute precompiled Indy RPM binaries. We do permit 
others to build RPM's for distribution.

If you have a Debian-based Linux distribution and you have installed Free 
Pascal as a Debian package, you can make .deb packages with "chmod 755 
fpc/debian/rules", "dpkg-buildpackag -rfakeroot" and than install them with 
"dpkg -install indy*.deb".

Otherwise, do the following:

Change directory to "fpc" and run "make all". If you are using 
Windows, you must use the GNU BinUtils Make program that is included in most 
FreePascal distributions.
 
Run "make all" followed by "make install" from the fpc directory. You may 
be able to specify an install prefix by adding "INSTALL_PREFIX=fpcbasedir".

If you are running Lazarus, you may install the design-time package into 
Lazarus. Just open, compile, and install the indylaz.lpk file located in the 
lazarus directory.  Those design-time packages have not been tested yet.

You probably should read the Development Tutorial (aka Build FAQ) at 
http://www.stack.nl/~marcov/buildfaq.pdf for more information about the 
FreePascal build process.

In your programs, you should have the following in your main program file:
 
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads, 
  {$ENDIF}{$ENDIF}

defined as the first entry in your uses clause. Then when compiling, use the 
"-dUseCThreads" parameter. This is important on Unix systems because Indy uses 
multithreading in most servers and in some client components.

                                  Known Issues

The Lazarus design-time packages have not been tested yet.

In IdStackLinux and IdStackUnix, we need a working TIdStackLinux.ReceiveMsg and 
TIdStackUnix.ReceiveMsg method that the standard Posix recvmsg system call. 
This the definition of several macros (CMSG_FIRSTHDR, CMSG_NXTHDR, CMSG_DATA, 
CMSG_SPACE, and CMSG_LEN) plus recvmsg may need to be defined. This has been 
reported as bug 0009430.

                                For Linux Users

In Linux for i386, you can choose between using IdStackUnix or IdStackLinux. 
The IdStackLinux backend uses the libc Kylix compatibility units instead of the 
unit sockets and netdb. To use the Kyclix compatability units, pass the 
-dKYLIX_COMPAT parameter to the Makefile OPTS= parameter. If you are using 
another architecture, IdStackUnix will be used.

                                  ZLib Support

Indy is capable of using ZLib for compression capabilities using the ZLib 
library (http://www.zlib.net/). If you are using TIdCompressorZLib or 
TIdCompressionIntercept, your program will require ZLib. On most Unix-systems, 
ZLib is usually installed because a lot of things depend on it. The ZLib 
version available for an operating system may older than 1.2.3 so we can not 
guarantee how well those will work.

On Win32 Operating Systems (Win9x and WinNT), there is no standard ZLib 
installed by default. For Windows, you should install the official ZLIB1.DLL 
from the http://www.zlib.net website in the same directory as your program 
because there's several .DLL's with the same name and various versions may be 
floating around. The ZLIB1.DLL you use must use the cdecl conventions. We 
eventually hope to get ZLib statically linked into the Indy libraries like we 
do with Borland Delphi versions.

On Win64 Operating SYstems, there is an unofficial Windows version at available 
at http://www.winimage.com/zLibDll/ . You will need to use the ZLib version in 
the "zlib123dllx64.zip" available on that website.

We do not yet support for ZLib in Windows CE because I have not yet located a 
Windows CE .DLL for the current ZLib version 1.2.3.

We strongly urge you to use ZLib 1.2.3. Indy might work with some older 
versions of ZLIB but do not rely on that. Indy uses the relatively new 
functions; inflateBackInit_, inflateBackEnd, and inflateBack and we may use 
other new functions as time goes on. The newest ZLib version also fixes bugs 
including some security issues.

The Indy library itself has no direct dependencies on ZLib and you could use it 
with ZLib because the ZLib shared library is dynamically loaded.

                                OpenSSL Support

Indy is capable of using OpenSSL for some encryption functions such as NTLM and 
SSL. If you are using the IdAuthenticationNTLM unit, 
TIdSSLIOHandlerSocketOpenSSL or TIdServerIOHandlerSSLOpenSSL, your program will 
require the OpenSSL libraries.

On many Unix systems, OpenSSL is installed by default but on a few, you may 
have to install it yourself. In FreeBSD 6.2, Some checksum functionality is not 
available. FreeBSD uses a 9.7.x version of OpenSSL that doesn't have that 
functionality. FreeBSD 5.x is not tested or supported so your milage may vary.

On Win32, you can use the standard .DLL's from 
http://www.openssl.org/related/binaries.html.

For a Win64 bit version of OpenSSL, We have a distribution at 
http://www.indyproject.org/Sockets/fpc/OpenSSLforWin64.aspx or you can compile 
the .DLL's yourself. Install the "Microsoft Platform SDK for Windows Server 
2003 R2" and ActivePerl located at 
http://www.activestate.com/Products/activeperl/). More recent Microsoft SDK's 
do not include the ml64 assembler and OpenSSL requires it. To compile it, go to 
"Microsoft Platform SDK for Windows Server 2003 R2|Open Build Environment 
Window|Windows XP 64-bit Build Environment|Set Windows XP x64 Build Environment 
(Retail)" on the Start Menu. Then do the following:

> perl Configure VC-WIN64A
> ms\do_win64a
> nmake -f ms\ntdll.mak
> cd out32dll
> ..\ms\test

Note that some jurisdictions regulate the use and export of strong cryptography 
while others may prohibit the use of strong cryptography but other nations may 
have no restriction at all. If you have any questions about using or exporting 
SSL, ask your lawyer.  We can NOT give you legal advise.

                                 Contacting Us

For peer support, you may use the 
news://news.atozed.com/atozedsoftware.indy.fpc newsgroup. Do not E-Mail us if 
you need help with your program or using Indy. Only E-Mail us if you have 
specific improvements, code contributions, or wish to report success with some 
particular target operating systems. Remember that all Indy developers 
are volunteers who give their time without any compensation.

