This is the source code for the Perforce command line and API. See LICENSE for all licensing information.
The source code for the Perforce Helix Command Client client and API can now be found on the Perforce FTP site. As of June, 2022, no further updates to this Workshop project will be made.
Following is the path naming convention:
http://ftp.perforce.com/perforce/rXX.Y/bin.tools/p4source.tgz
Replace the rXX.Y with the desired release number. For example, to find tarball with the source code for the 2022.1 release of the P4 Command Line and API, navigate to this page:
http://ftp.perforce.com/perforce/r22.1/bin.tools
And then click the linke for p4source.tgz to download the tarball.
Outside of a C/C++ compiler you will need Jam (Just Another Make), a build system written by Christopher Seiwald. A source bundle can be found here:
https://swarm.workshop.perforce.com/files/guest/perforce_software/jam/jam-2.6.zip
Starting with the 2017.1 release, the P4API must be linked against OpenSSL (preferably the latest 1.0.2 patch). More details about how to obtain or build OpenSSL and now to build p4 against OpenSSL are included below.
From the root of the p4 source run:
jam p4
Jam may ask you to specify an OS version if it cannot determine it. For example on OS X running 'jam p4' will return:
Set OSVER to 104, 105, or 106 for MACOSX
To set any options in Jam use the '-s' flag. For the example above you would run:
jam -sOSVER=106 p4
To build on Cygwin run:
jam -sOS=CYGWIN
To build on Windows or Linux you will need to disable use of Smartheap:
jam -sSMARTHEAP=0 p4
Builds will be placed in a directory called 'p4-bin/bin.[OS][OSVER]' at the same level as your p4 directory.
If you wish to build a pre-2017.1 p4 with support for SSL servers you will need to add '-sSSL=yes' to the Jam call (this is now the default). Jam expect the OpenSSL libraries (libssl.a and libcrypto.a) in a directory named 'p4-bin/lib.[OS][OSVER]' and the OpenSSL headers (in a folder named openssl) in a directory named 'p4-bin/inc.[OS][OSVER]'. The base 'p4-bin' folder is the same directory mentioned above, one level above the p4 source.
Most Linux distributions provide OpenSSL development packages. If such a package is installed you can use the '-sSSLLIBDIR' and '-sSSLINCDIR' jam arguments to specify the location of libraries and headers. For example (on Ubuntu):
sudo apt-get install libssl-dev
jam -sOSVER=26 -sSMARTHEAP=0 -sSSLLIBDIR=/usr/lib/x86_64-linux-gnu/ -sSSLINCDIR=/usr/include/ p4
Pre-compiled OpenSSL builds for a number of platforms are available from a number of 3rd-party sources. We make no recommendations regarding these. For more information, please see the OpenSSL binary distribution page:
https://www.openssl.org/community/binaries.html
OpenSSL builds on a wide range of platforms, with many build options: more than can be sensibly documented here. As such, this will only cover the steps to build the OpenSSL libraries with the same options as we build internally.
First, you'll need to get the latest OpenSSL 1.0.2 release from the OpenSSL downloads page:
https://www.openssl.org/source/
Once you've confirmed the checksum of the tarball and extracted the OpenSSL source, cd into the openssl-1.0.2* folder. We recommend reading the provided build documentation, so the following sets of commands are only for reference (they are not guaranteed to work if you do not have all of the appropriate OpenSSL dependencies.
Linux x86_64:
make -s -f Makefile.org dclean ./Configure no-hw no-gost linux-x86_64 -m64 -Wa,--noexecstack shared -g -fPIC make depend build_libs build_apps
MacOSX 10.6 x86_64 and Darwin 10.0 x86_64:
export CC=gcc-4.2 make -s -f Makefile.org dclean ./Configure no-hw no-gost darwin64-x86_64-cc shared -g -fPIC -isysroot/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 make depend build_libs build_apps
Windows x64 VS12 (Visual Studio 2013 + NASM):
perl ./Configure no-shared no-hw no-gost VC-WIN64A -Zi cmd.exe /c ms\do_win64a.bat nmake -f ms\nt.mak
To build p4 using your OpenSSL build, either copy the libraries and headers into the appropriate default locations under 'p4-bin' as described above, or use the '-sSSLLIBDIR' and '-sSSLINCDIR' jam arguments to specify the location of libraries and headers.
From the root of the p4 source run:
jam -sPRODUCTION=1 p4api.tar
As with building p4, Jam may ask you to specify an OS version.