NDN-CPP-dev:  A dev version of Named Data Networking client library for C++
===========================================================================

Prerequisites
-------------

(These are prerequisites to build NDN-CPP.  To do development of NDN-CPP code and update the build system, 
 see Development Prerequisites.)

Required: 

* libcrypto
* libsqlite3 
* libcrypto++
* boost libraries
* OSX Security framework (on OSX platform only)

Following are the detailed steps for each platform to install the prerequisites.

* Mac OS X 10.7.3, Mac OS X 10.8.4

    Install Xcode.
    In Xcode Preferences > Downloads, install "Command Line Tools".

* Mac OS X 10.9

    Install Xcode.  (Xcode on OS X 10.9 seems to already have the Command Line Tools.)

    If using macports, dependencies can be installed using the following commands:

        sudo port install boost sqlite3 libcryptopp

* Ubuntu 12.04 (64 bit and 32 bit), Ubuntu 13.04 (64 bit)

    In a terminal, enter:

        sudo apt-get install build-essential
        sudo apt-get install libboost-all-dev libssl-dev libsqlite3-dev libcrypto++-dev

* Windows Cygwin

    Cygwin is tested on Windows 7 64-bit with the "Devel" packages selected to install at the top level of the
    cygwin installer.  This includes libcrypto and libsqlite3.

Build
-----

(These are instructions to build NDN-CPP. To do development of NDN-CPP code and update the build system, see Development.)

To build in a terminal, change directory to the NDN-CPP root.  Enter:

    ./waf configure
    ./waf
    sudo ./waf install

This makes and installs the following items:

* ``<LIBPATH>/libndn-cpp-dev.*``: static and dynamic NDN C++ libraries
* ``<LIBPATH>/pkgconfig/libndn-cpp-dev.pc``: pkgconfig file storing all neccessary flags
  to build against the library.  For example, if pkgconfig or pkgconf package is
  installed and PKG_CONFIG_PATH is configured properly (or ``<LIBPATH>/pkgconfig`` is a
  default path), ``pkgconfig --libs --clflags libndn-cpp-dev`` will return all necessary
  compile and link flags for the library.
* ``<BINPATH>/tlvdump``: a simple tool to dump contents of TLV-formatted data
* ``<BINPATH>/ndncatchunks3``: a simplified equivalent to ndncatchunks2 in NDNx package
* ``<BINPATH>/ndnputchunks3``: a simplified equivalent to ndnputchunks2 in NDNx package

If configured with tests: ``./waf configure --with-tests``), the above commands will
also produce:

* ``build/tests/unit-tests``: A tool to run unit tests for the library

Documentation
-------------

To make documentation, enter:

    ./waf doxygen

This will produce doxygen API code documentation in:

* build/doc/html

Supported platforms
-------------------

(to be confirmed)

NDN-CPP is tested on the following platforms:
Ubuntu 12.04 (64 bit and 32 bit) (gcc 4.6.3)
Ubuntu 13.04 (64 bit) (gcc 4.7.3)
Mac OS X 10.8.4 (clang 4.2)
Mac OS X 10.8.4 (gcc 4.2)

Development Prerequisites
-------------------------

These steps are only needed to do development of NDN-CPP code and update the build system.
First follow the Prerequisites above for your platforms.

* Mac OS X 10.7.3, Mac OS X 10.8.4, Mac OS X 10.9

    Install MacPorts from http://www.macports.org/install.php
    In a terminal, enter:

        sudo port install doxygen

* Ubuntu 12.04 (64 bit and 32 bit), Ubuntu 13.04 (64 bit)

    In a terminal, enter:

        sudo apt-get install doxygen

Development
-----------

Follow Development Prerequisites above for your platform.
