Blame README.md

Packit Service def718
`json-c`                       {#mainpage}
Packit Service def718
========
Packit Service def718
Packit Service def718
1. [Overview and Build Status](#overview)
Packit Service def718
2. [Building on Unix](#buildunix)
Packit Service def718
3. [Install Prerequisites](#installprereq)
Packit Service def718
4. [Building with partial threading support](#buildthreaded)
Packit Service def718
5. [Linking to libjson-c](#linking)
Packit Service def718
6. [Using json-c](#using)
Packit Service def718
Packit Service def718
JSON-C - A JSON implementation in C 
Packit Service def718
-----------------------------------
Packit Service def718
Packit Service def718
Build Status
Packit Service def718
* [AppVeyor Build](https://ci.appveyor.com/project/hawicz/json-c) ![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/json-c/json-c?branch=master&svg=true)
Packit Service def718
* [Travis Build](https://travis-ci.org/json-c/json-c) ![Travis Build Status](https://travis-ci.org/json-c/json-c.svg?branch=master)
Packit Service def718
Packit Service def718
JSON-C implements a reference counting object model that allows you to easily 
Packit Service def718
construct JSON objects in C, output them as JSON formatted strings and parse 
Packit Service def718
JSON formatted strings back into the C representation of JSON objects.
Packit Service def718
It aims to conform to [RFC 7159](https://tools.ietf.org/html/rfc7159).
Packit Service def718
Packit Service def718
Packit Service def718
Building on Unix with `git`, `gcc` and `autotools` 
Packit Service def718
--------------------------------------------------
Packit Service def718
Packit Service def718
Home page for json-c: https://github.com/json-c/json-c/wiki
Packit Service def718
Packit Service def718
### Prerequisites:
Packit Service def718
Packit Service def718
See also the "Installing prerequisites" section below.
Packit Service def718
Packit Service def718
 - `gcc`, `clang`, or another C compiler
Packit Service def718
 - `libtool>=2.2.6b`
Packit Service def718
Packit Service def718
If you're not using a release tarball, you'll also need:
Packit Service def718
Packit Service def718
 - `autoconf>=2.64` (`autoreconf`)
Packit Service def718
 - `automake>=1.13`
Packit Service def718
Packit Service def718
Make sure you have a complete `libtool` install, including `libtoolize`.
Packit Service def718
Packit Service def718
To generate docs (e.g. as part of make distcheck) you'll also need:
Packit Service def718
 - `doxygen>=1.8.13`
Packit Service def718
Packit Service def718
### Build instructions:
Packit Service def718
Packit Service def718
`json-c` GitHub repo: https://github.com/json-c/json-c
Packit Service def718
Packit Service def718
```sh
Packit Service def718
$ git clone https://github.com/json-c/json-c.git
Packit Service def718
$ cd json-c
Packit Service def718
$ sh autogen.sh
Packit Service def718
```
Packit Service def718
Packit Service def718
followed by
Packit Service def718
Packit Service def718
```sh
Packit Service def718
$ ./configure  # --enable-threading
Packit Service def718
$ make
Packit Service def718
$ make install
Packit Service def718
```
Packit Service def718
Packit Service def718
To build and run the test programs:
Packit Service def718
Packit Service def718
```sh
Packit Service def718
$ make check
Packit Service def718
$ make USE_VALGRIND=0 check   # optionally skip using valgrind
Packit Service def718
```
Packit Service def718
Packit Service def718
Install prerequisites 
Packit Service def718
-----------------------
Packit Service def718
Packit Service def718
If you are on a relatively modern system, you'll likely be able to install
Packit Service def718
the prerequisites using your OS's packaging system.  
Packit Service def718
Packit Service def718
### Install using apt (e.g. Ubuntu 16.04.2 LTS)
Packit Service def718
```sh
Packit Service def718
sudo apt install git
Packit Service def718
sudo apt install autoconf automake libtool
Packit Service def718
sudo apt install valgrind # optional
Packit Service def718
```
Packit Service def718
Packit Service def718
Then start from the "git clone" command, above.
Packit Service def718
Packit Service def718
### Manually install and build autoconf, automake and libtool
Packit Service def718
Packit Service def718
For older OS's that don't have up-to-date version of the packages will
Packit Service def718
require a bit more work. For example, CentOS release 5.11, etc...
Packit Service def718
Packit Service def718
```sh
Packit Service def718
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
Packit Service def718
curl -O http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
Packit Service def718
curl -O http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz
Packit Service def718
Packit Service def718
tar xzf autoconf-2.69.tar.gz
Packit Service def718
tar xzf automake-1.15.tar.gz
Packit Service def718
tar xzf libtool-2.2.6b.tar.gz
Packit Service def718
Packit Service def718
export PATH=${HOME}/ac_install/bin:$PATH
Packit Service def718
Packit Service def718
(cd autoconf-2.69 && \
Packit Service def718
  ./configure --prefix ${HOME}/ac_install && \
Packit Service def718
  make && \
Packit Service def718
  make install)
Packit Service def718
Packit Service def718
(cd automake-1.15 && \
Packit Service def718
  ./configure --prefix ${HOME}/ac_install && \
Packit Service def718
  make && \
Packit Service def718
  make install)
Packit Service def718
Packit Service def718
(cd libtool-2.2.6b && \
Packit Service def718
  ./configure --prefix ${HOME}/ac_install && \
Packit Service def718
  make && \
Packit Service def718
  make install)
Packit Service def718
```
Packit Service def718
Packit Service def718
Packit Service def718
Building with partial threading support 
Packit Service def718
----------------------------------------
Packit Service def718
Packit Service def718
Although json-c does not support fully multi-threaded access to
Packit Service def718
object trees, it has some code to help make use in threaded programs
Packit Service def718
a bit safer.  Currently, this is limited to using atomic operations for
Packit Service def718
json_object_get() and json_object_put().
Packit Service def718
Packit Service def718
Since this may have a performance impact, of at least 3x slower
Packit Service def718
according to https://stackoverflow.com/a/11609063, it is disabled by
Packit Service def718
default.  You may turn it on by adjusting your configure command with:
Packit Service def718
   --enable-threading
Packit Service def718
Packit Service def718
Separately, the default hash function used for object field keys,
Packit Service def718
lh_char_hash, uses a compare-and-swap operation to ensure the randomly
Packit Service def718
seed is only generated once.  Because this is a one-time operation, it
Packit Service def718
is always compiled in when the compare-and-swap operation is available.
Packit Service def718
Packit Service def718
Packit Service def718
Linking to `libjson-c` 
Packit Service def718
----------------------
Packit Service def718
Packit Service def718
If your system has `pkgconfig`,
Packit Service def718
then you can just add this to your `makefile`:
Packit Service def718
Packit Service def718
```make
Packit Service def718
CFLAGS += $(shell pkg-config --cflags json-c)
Packit Service def718
LDFLAGS += $(shell pkg-config --libs json-c)
Packit Service def718
```
Packit Service def718
Packit Service def718
Without `pkgconfig`, you would do something like this:
Packit Service def718
Packit Service def718
```make
Packit Service def718
JSON_C_DIR=/path/to/json_c/install
Packit Service def718
CFLAGS += -I$(JSON_C_DIR)/include/json-c
Packit Service def718
LDFLAGS+= -L$(JSON_C_DIR)/lib -ljson-c
Packit Service def718
```
Packit Service def718
Packit Service def718
Packit Service def718
Using json-c 
Packit Service def718
------------
Packit Service def718
Packit Service def718
To use json-c you can either include json.h, or preferrably, one of the
Packit Service def718
following more specific header files:
Packit Service def718
Packit Service def718
* json_object.h  - Core types and methods.
Packit Service def718
* json_tokener.h - Methods for parsing and serializing json-c object trees.
Packit Service def718
* json_pointer.h - JSON Pointer (RFC 6901) implementation for retrieving
Packit Service def718
                   objects from a json-c object tree.
Packit Service def718
* json_object_iterator.h - Methods for iterating over single json_object instances.
Packit Service def718
* json_visit.h   - Methods for walking a tree of json-c objects.
Packit Service def718
* json_util.h    - Miscelleanous utility functions.
Packit Service def718
Packit Service def718
For a full list of headers see [files.html](files.html)
Packit Service def718