Go to file
Simon McVittie ca80d5127e build: Add a symbol version to all exported symbols for glibc
The --default-symver linker option attaches a default version definition
(the SONAME) to every exported symbol. It is supported since at least
GNU binutils 2.22 in 2011 (older versions not tested).

With this version definition, newly-linked binaries that depend on the
jansson shared library will refer to its symbols in a versioned form,
preventing their references from being resolved to a symbol of the same
name exported by json-c or json-glib if those libraries appear in
dependency search order before jansson, which will usually result in
a crash. This is necessary because ELF symbol resolution normally uses
a single flat namespace, not a tree like Windows symbol resolution.
At least one symbol (json_object_iter_next()) is exported by all three
JSON libraries.

Linking with -Bsymbolic is not enough to have this effect in all cases,
because -Bsymbolic only affects symbol lookup within a shared object,
for example when parse_json() calls json_decref(). It does not affect
calls from external code into jansson, unless jansson was statically
linked into the external caller.

This change will also not prevent code that depends on json-c or
json-glib from finding jansson's symbols and crashing; to prevent
that, a corresponding change in json-c or json-glib would be needed.

Adding a symbol-version is a backwards-compatible change, but once
added, removing or changing the symbol-version would be an incompatible
change that requires a SONAME bump.

Resolves: https://github.com/akheron/jansson/issues/523
(when combined with an equivalent change to json-c).

Signed-off-by: Simon McVittie <smcv@collabora.com>
2020-07-02 09:54:40 +01:00
android Update copyrights for 2016 2016-09-18 14:17:03 +03:00
cmake Merge pull request #502 from AllenX2018/fix-issue453 2019-10-17 08:09:20 +03:00
doc jansson 2.13.1 2020-05-07 21:38:59 +03:00
examples Tweak clang-format configuration a bit 2019-10-21 08:56:03 +03:00
scripts Fix clang-format version checking 2019-10-21 08:56:03 +03:00
src build: Add a symbol version to all exported symbols for glibc 2020-07-02 09:54:40 +01:00
test add jansson_* to shared library exports 2020-05-06 17:31:48 +08:00
.clang-format Tweak clang-format configuration a bit 2019-10-21 08:56:03 +03:00
.gitignore Run clang-format with make check 2019-10-21 08:56:03 +03:00
.travis.yml Fix clang-format version checking 2019-10-21 08:56:03 +03:00
Android.mk Android.mk: Add -DHAVE_STDINT_H to LOCAL_CFLAGS 2014-07-31 07:50:31 +03:00
appveyor.yml Also build with VS 2017 in appveyor 2018-05-07 08:39:49 +03:00
CHANGES jansson 2.13.1 2020-05-07 21:38:59 +03:00
CleanSpec.mk Create Android.mk, preconfigured jansson_config.h and CleanSpec.mk for Android-like build systems. 2013-03-27 17:31:05 -07:00
CMakeLists.txt build: Add a symbol version to all exported symbols for glibc 2020-07-02 09:54:40 +01:00
configure.ac build: Add a symbol version to all exported symbols for glibc 2020-07-02 09:54:40 +01:00
jansson.pc.in build: Use Autoconf macro @includedir@ for jansson.pc. 2017-04-12 22:36:58 +02:00
LICENSE jansson 2.13 2020-05-05 07:07:16 +03:00
Makefile.am add scripts directory to EXTRA_DIST 2020-05-06 18:01:19 +08:00
README.rst Add vcpkg installation instructions 2019-09-26 16:54:02 -07:00
release.sh Compress bz2 doc tarballs with bzip2 instead of gzip 2013-01-06 14:18:28 +02:00

Jansson README
==============

.. image:: https://travis-ci.org/akheron/jansson.png
  :target: https://travis-ci.org/akheron/jansson
  
.. image:: https://ci.appveyor.com/api/projects/status/lmhkkc4q8cwc65ko
  :target: https://ci.appveyor.com/project/akheron/jansson

.. image:: https://coveralls.io/repos/akheron/jansson/badge.png?branch=master
  :target: https://coveralls.io/r/akheron/jansson?branch=master

Jansson_ is a C library for encoding, decoding and manipulating JSON
data. Its main features and design principles are:

- Simple and intuitive API and data model

- `Comprehensive documentation`_

- No dependencies on other libraries

- Full Unicode support (UTF-8)

- Extensive test suite

Jansson is licensed under the `MIT license`_; see LICENSE in the
source distribution for details.


Compilation and Installation
----------------------------

You can download and install Jansson using the `vcpkg <https://github.com/Microsoft/vcpkg/>`_ dependency manager:

.. code-block:: bash

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    vcpkg install jansson

The Jansson port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please `create an issue or pull request <https://github.com/Microsoft/vcpkg/>`_ on the vcpkg repository.

If you obtained a `source tarball`_ from the "Releases" section of the main
site just use the standard autotools commands::

   $ ./configure
   $ make
   $ make install

To run the test suite, invoke::

   $ make check

If the source has been checked out from a Git repository, the
./configure script has to be generated first. The easiest way is to
use autoreconf::

   $ autoreconf -i


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

Documentation is available at http://jansson.readthedocs.io/en/latest/.

The documentation source is in the ``doc/`` subdirectory. To generate
HTML documentation, invoke::

   $ make html

Then, point your browser to ``doc/_build/html/index.html``. Sphinx_
1.0 or newer is required to generate the documentation.


.. _Jansson: http://www.digip.org/jansson/
.. _`Comprehensive documentation`: http://jansson.readthedocs.io/en/latest/
.. _`MIT license`: http://www.opensource.org/licenses/mit-license.php
.. _`source tarball`: http://www.digip.org/jansson#releases
.. _Sphinx: http://sphinx.pocoo.org/