The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

			   SAP::Rfc XS Package


    Copyright (c) 1999 - 2006 Piers Harding.
    All rights reserved.
    This program is free software; you can redistribute it and/or modify
    it under the terms of either:

	a) the GNU General Public License as published by the Free
	Software Foundation; either version 1, or (at your option) any
	later version, or

	b) the "Artistic License" which comes with this Kit.

    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 either
    the GNU General Public License or the Artistic License for more details.

    You should have received a copy of the Artistic License with this
    Kit, in the file named "Artistic".  If not, I'll be glad to provide one.

    You should also have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.

    For those of you that choose to use the GNU General Public License,
    my interpretation of the GNU General Public License is that no Perl
    script falls under the terms of the GPL unless you explicitly put
    said script under the terms of the GPL yourself.  Furthermore, any
    object code linked with perl does not automatically fall under the
    terms of the GPL, provided such object code only adds definitions
    of subroutines and variables, and does not otherwise impair the
    resulting interpreter from executing any standard Perl script.  I
    consider linking in C subroutines in this manner to be the moral
    equivalent of defining subroutines in the Perl language itself.  You
    may sell such an object file as proprietary provided that you provide
    or offer to provide the Perl source, as specified by the GNU General
    Public License.  (This is merely an alternate way of specifying input
    to the program.)  You may also sell a binary produced by the dumping of
    a running Perl script that belongs to you, provided that you provide or
    offer to provide the Perl source as specified by the GPL.  (The
    fact that a Perl interpreter and your code are in the same binary file
    is, in this case, a form of mere aggregation.)  This is my interpretation
    of the GPL.  If you still have concerns or difficulties understanding
    my intent, feel free to contact me.  Of course, the Artistic License
    spells all this out for your protection, so you may prefer to use that.


    One last thing - The SAP RFCSDK is a prerequisite for this perl package to work.  The RFCSDK is proprietrary software owned by SAP AG.  For this reason I will not supply ANY component part of the RFCSDK with this perl package, and further more you must obtain it through the normal channels with SAP AG - ie. you must have a licensed SAP R/3 installation at your disposal.



After all the legal stuff -  Hello!

Welcome to the SAP::Rfc perl package.  This package is intended to facilitate RFC calls to an SAP R/3 system of release 3.1x and above.  It may work for earlier versions but it hasn't been tested.
The fundamental purpose of the production of this package, is to provide a clean object oriented interface to RFC calls from within perl.  This will hopefully have a number of effects:
(1) make it really easy to do RFC calls to SAP from perl in an object oriented fashion (Doh!)
(2) promote perl as the interface/scripting/glue language of choice for interaction with SAP R/3.
(3) make the combination of Linux, Apache, and perl the killer app for internet connectivity with SAP.
(4) Establish a small fun open source project that people are more than welcome to contribute to, if they so wish.

As of April 2003 (VERSION 1.11), SAP::Rfc has had another large chunk of functionality added.  
The ability to perform registered RFC calls where ABAP code in SAP can call out to your Perl 
code.  See the description of accept() in perldoc SAP::Rfc.


With this in mind - this package has been developed under Linux, so the installation is therefore focused on this.  This does not mean that it will not work on other UNIX like flavours - to the contrary it probably will, it just hasn't been tested.  The package has been compiled and run under Win32 - special attention needs to be paid to the options found in the Makefile.PL file.

Failing this - for Win32 people Olivier Boudry has kindly supplied me (so every win32 slave out there, should be very grateful to him) with a PPD based install package from Version 1.17 onwards - these can be found at http://www.piersharding.com/download/win32/ .

Furthermore - if you still need to build your own win32 version then Olivier has given additional instructions on doing this with the "free" Visual Studio version called VS Express 2005.
This can be found at:
http://www.piersharding.com/download/win32/Build_SAP-Rfc_with_VSE2005.pdf
Many thanks go to Olivier.
As VSE 2005 and above MS compilers require that a MANIFEST be embedded in the compiled binary, the build process is slightly modified - you must add a command line parameter:
perl Makefile.PL EMBED_MANIFEST=yes

After the fundamental RFC interface has been developed, the intention is then to extend this to add interface discovery, and a BAPI abstraction layer - but this is down the track.

SAP have kindly provided the RFCSDK for Linux on the OSS ftp service.  This can be retrieved from sapserv3, currently in the "unsupported directory" - this should change before the end of 1999 to being fully supported. See OSS note 53459 for details.

*Note: 29.11.2002 - this is old info from circa 1999 - I am currently using RedHat 8.0 and either the librfc or librfccm from R3 4.6C.

This must be installed before you continue.  I use Redhat 6.1 or Slackware 7.0 - other distributions will probably work, but take heed of the instructions provided with the rfcsdk rpm files.
Once you have the rfcsdk installed carry on!

<old>
Make sure that the LIBS and INC directive in the Makefile.PL points to the correct location of your OS's version of the rfcsdk -without this linking correctly nothing is going to work.
</old>

<new>
Thanks to Achim Grolms who supplied the following information :-

- where to get the required SAP files for the RFCSDK:

<ftp://ftp.sap.com/pub/linuxlab/contrib/SAPCAR>
Archive program needed to exratct the archives

<ftp://ftp.sap.com/pub/linuxlab/contrib/librfc_mt_so_dbg.CAR>
Dynamic libraries and headers

-This is how to extract
(Like ./SAPCAR -xvf librfc_mt_so_dbg.CAR)

-and where to put them
(libs to $RFCSDKHOME/lib and headers to $RFCSDKHOME/include)

where RFCSDK should be /usr/sap/rfcsdk as a standard
</new>

After you have unpacked The SAP::Rfc module, you should have all the files listed
in MANIFEST.

Installation

In brief, the following should work on most systems:
        perl Makefile.PL
	make
	make test  << provide all your host routing information.
	make install

Help on the build process is available by doing:
        perl Makefile.PL --help

and it says:

The whole trouble with the build process is one 
of determining what your OS is, and which RFC
library needs to be linked in, and where that 
library lives.

To help with this there are two command line
options that you can use to point me in the 
right direction:

(1) --source /usr/sap/rfcsdk
  This tells me where to look for your installed
  RFCSDK.  This must be the directory that contains
  the ./lib and ./include directories of the RFCSDK
  In the include directory must be saprfc.h etc.
  By default, this looks in /usr/sap/rfcsdk

(2) --addlibs ' -lm -ldl -lpthread '
  This tells me what additional libraries need to
  be passed in at link time - this can be anything
  that you would put in LDFLAGS.
  By default this is ' -lm -ldl -lpthread '


(3) --unicode
  This tells me that you want to compile in unicode 
  support - to do this you must have the unicode version of the RFC
  library specifically librfcum.xx or librfcu.a and the libsapu16 
  library.
  (good luck!!).

Example:

perl Makefile.PL --source /opt/rfcsdk --addlibs '-lsomethingwacky'


UNICODE
========

If you really really really need it - unicode support can be built 
BUT it must be done using the librfcum eg. the special unicode version
of the RFCSDK.
Get the latest as provided by service.sap.com/connectors => see OSS                                    
note 413708.

This has only ever been tested on Linux, and is only ever likely to work 
on systems that have iconv and are Little Endian in its current form.

To build it you need something like:                                                                        
perl Makefile.PL --source=/usr/sap/rfcsdk-640-unicode --unicode                                             
for win32: perl Makefile.PL EMBED_MANIFEST=yes BINARY_LOCATION=SAP-Rfc-1.51.tar.gz --iconv=C:/iconv --unicode

Please email directly if you have problems, and are willing to help 
with testing (especially for other platforms) => piers@cpan.org.



VERSION Info supplied by Others
================================

Mark Förster writes:

  On HP-UX (11.X) use the ANSI C compiler or gcc,
  extract the RFCSDK 4.6C 32bit e.g. to /usr/sap/rfcsdk.
  If you get error messages like:
  /usr/lib/dld.sl: Can't shl_load() a library containing Thread Local
	Storage: /usr/lib/libcl.2
  then try the following solution:
  export LD_PRELOAD=/usr/lib/libcl.2


Glenn Jackman writes:
FYI, the sysadmin sent me this info about compiling on Solaris:                                                      
  I added -lrfc and /usr/lib/libCrun.so.1 to EXTRALIBS and LDLOADLIBS.                                               
  I also used gcc as opposed to the workshop compiler.  I've had better                                              
  luck with this compiler compiling Open Source software.                                                            




Cheers - Piers Harding - R/2 R/3 BASIS, IFACE, JAPH, whatever ...

email: piers@cpan.org