add: purest_json lib
This commit is contained in:
1 parent
e29aa19b01
commit
f9badbe6f6
69 files changed
+6421
No files matched your search
@@ -0,0 +1,496 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>
|
||||
Compilation
|
||||
</title>
|
||||
<style>
|
||||
/* Page tweaks */
|
||||
.preview-page {
|
||||
margin-top: 64px;
|
||||
margin-bottom: 21px;
|
||||
}
|
||||
/* User-content tweaks */
|
||||
.timeline-comment-wrapper > .timeline-comment:after,
|
||||
.timeline-comment-wrapper > .timeline-comment:before {
|
||||
content: none;
|
||||
}
|
||||
/* User-content overrides */
|
||||
.discussion-timeline.wide {
|
||||
width: 920px;
|
||||
}
|
||||
</style>
|
||||
<link href="style.css" rel="stylesheet"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<div class="preview-page" data-autorefresh-url="" id="preview-page">
|
||||
<main id="js-repo-pjax-container">
|
||||
<div class="clearfix new-discussion-timeline container-xl px-3 px-md-4 px-lg-5">
|
||||
<div class="repository-content">
|
||||
<div class="clearfix">
|
||||
<div class="Layout Layout--flowRow-until-md Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end">
|
||||
<div class="Layout-main">
|
||||
<div class="Box md Box--responsive" id="readme">
|
||||
<div class="Box-header d-flex border-bottom-0 flex-items-center flex-justify-between color-bg-default rounded-top-2">
|
||||
<div class="d-flex flex-items-center">
|
||||
<h2 class="Box-title">
|
||||
Compilation
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Box-body px-5 pb-5">
|
||||
<article class="markdown-body entry-content container-lg" id="grip-content">
|
||||
<p>
|
||||
Compilation should be working on Linux, Windows with MinGW and Mac OS X. You will need header files of Puredata, as well as
|
||||
<a href="http://curl.haxx.se/" rel="nofollow">
|
||||
libcurl
|
||||
</a>
|
||||
,
|
||||
<a href="https://github.com/json-c/json-c">
|
||||
json-c
|
||||
</a>
|
||||
, and
|
||||
<a href="http://liboauth.sourceforge.net/" rel="nofollow">
|
||||
liboauth
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
The package build script uses the Makefile template from
|
||||
<a href="https://github.com/pure-data/pd-lib-builder">
|
||||
pd-lib-builder
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
To enable multi-instance support, add
|
||||
<code>
|
||||
multi=true
|
||||
</code>
|
||||
to the make command.
|
||||
</p>
|
||||
<p>
|
||||
If you have gotten the source code from git, you will first have to init the
|
||||
<a href="http://troydhanson.github.io/uthash/" rel="nofollow">
|
||||
uthash
|
||||
</a>
|
||||
and pd-lib-builder submodule by running
|
||||
<code>
|
||||
git submodule update --init
|
||||
</code>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
OS X and Linux build scripts do not include dependencies in the resulting pd_linux or pd_darwin files. For making a distributable version of the library, there is a collection of bash scripts for the different platforms.
|
||||
</p>
|
||||
<p>
|
||||
The manual is generated from the
|
||||
<a href="https://github.com/residuum/PuRestJson/wiki">
|
||||
Github wiki
|
||||
</a>
|
||||
. To generate it as well, a copy of the wiki is necessary (get it via
|
||||
<code>
|
||||
git clone https://github.com/residuum/PuRestJson.wiki.git
|
||||
</code>
|
||||
). The python script is called
|
||||
<code>
|
||||
create_manual.py
|
||||
</code>
|
||||
and needs
|
||||
<a href="https://github.com/joeyespo/grip">
|
||||
grip
|
||||
</a>
|
||||
and
|
||||
<a href="https://pypi.python.org/pypi/BeautifulSoup" rel="nofollow">
|
||||
BeautifulSoup
|
||||
</a>
|
||||
. Install those via
|
||||
<code>
|
||||
pip install grip beautifulsoup lxml
|
||||
</code>
|
||||
.
|
||||
</p>
|
||||
<h2>
|
||||
<a aria-hidden="true" class="anchor" href="#circle-ci-builds---general-information" id="user-content-circle-ci-builds---general-information">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Circle CI Builds - General Information
|
||||
</h2>
|
||||
<p>
|
||||
PuREST JSON is configured to build on
|
||||
<a href="https://app.circleci.com/pipelines/github/residuum/PuRestJson" rel="nofollow">
|
||||
Circle CI
|
||||
</a>
|
||||
. The bash scripts in the folder
|
||||
<code>
|
||||
circleci-scripts
|
||||
</code>
|
||||
may serve as secondary documentation for building:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<code>
|
||||
*/before_install.sh
|
||||
</code>
|
||||
sets up the build environment
|
||||
</li>
|
||||
<li>
|
||||
<code>
|
||||
*/script.sh
|
||||
</code>
|
||||
is the command to build the binaries
|
||||
</li>
|
||||
<li>
|
||||
<code>
|
||||
*/pack.sh
|
||||
</code>
|
||||
generates the manual and creates deken packages
|
||||
</li>
|
||||
<li>
|
||||
<code>
|
||||
upload.sh
|
||||
</code>
|
||||
uploads the resulting package to my personal ownCloud instance
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a aria-hidden="true" class="anchor" href="#linux" id="user-content-linux">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Linux
|
||||
</h2>
|
||||
<p>
|
||||
As a guideline, look at the scripts in the
|
||||
<code>
|
||||
circleci-scripts/linux-amd64
|
||||
</code>
|
||||
folder, as the scripts in forder
|
||||
<code>
|
||||
linux-i386
|
||||
</code>
|
||||
are used to build 32 bit i386 packages on a 64 bit amd64 system.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
You need build-essentials, header files for puredata, libjson-c, libcurl4, liboauth. If you have Debian or a derivative (e.g. Ubuntu, Linux Mint), you can install the build utils and needed headers with
|
||||
<code>
|
||||
apt-get install build-essential puredata-dev libjson-c-dev libcurl4-openssl-dev liboauth-dev
|
||||
</code>
|
||||
. If you are not root, prefix the command with
|
||||
<code>
|
||||
sudo
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
Drop the sources in a directory and run
|
||||
<code>
|
||||
make
|
||||
</code>
|
||||
. You will get files with a suffix of pd_linux for each object (json-decode.pd_linux, json-encode.pd_linux, rest.pd_linux, oauth.pd_linux). These are needed to use the library.
|
||||
</li>
|
||||
<li>
|
||||
(optional) To create a distributable version, you have to install patchelf, e.g.
|
||||
<code>
|
||||
apt-get install patchelf
|
||||
</code>
|
||||
. Run
|
||||
<code>
|
||||
bash dependencies/linux.sh *.pdlinux
|
||||
</code>
|
||||
. This will copy dependencies to the current folder and rewrite linking information in the files to point to these dependencies.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>
|
||||
<a aria-hidden="true" class="anchor" href="#building-for-different-architectures" id="user-content-building-for-different-architectures">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Building for Different Architectures
|
||||
</h3>
|
||||
<p>
|
||||
Building for different architectures is possible. I will outline a way to do it on Debian based systems, e.g. Ubuntu.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Install debootstrap, e.g. via
|
||||
<code>
|
||||
apt-get install debootstrap
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
Set up a directory as the root for your new chroot, e.g. for
|
||||
<code>
|
||||
/tmp/buildroot
|
||||
</code>
|
||||
on Ubuntu Trusty for i386 with
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> sudo debootstrap \
|
||||
--variant=buildd \
|
||||
--include=build-essential \
|
||||
--arch=i386 \
|
||||
trusty /tmp/buildroot http://archive.ubuntu.com/ubuntu/
|
||||
</code></pre>
|
||||
<ol start="3">
|
||||
<li>
|
||||
Install the basic build system in that directory, and install the necessary dependencies for that architecture e.g. with
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> echo deb http://archive.ubuntu.com/ubuntu/ \
|
||||
$DIST restricted universe multiverse \
|
||||
| sudo tee -a /tmp/buildroot/etc/apt/sources.list
|
||||
sudo chroot /tmp/buildroot bash -c "apt-get update"
|
||||
sudo chroot /tmp/buildroot bash -c "apt-get install -qq -y build-essential \
|
||||
puredata-dev libjson-c-dev libcurl4-nss-dev liboauth-dev"
|
||||
</code></pre>
|
||||
<ol start="4">
|
||||
<li>
|
||||
Copy the files to a subfolder in the chroot folder, e.g.
|
||||
<code>
|
||||
/tmp/buildroot/PuRestJson
|
||||
</code>
|
||||
</li>
|
||||
<li>
|
||||
Run
|
||||
<code>
|
||||
make
|
||||
</code>
|
||||
via chroot:
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> sudo chroot /tmp/buildroot bash -c "cd PuRestJson && make"
|
||||
</code></pre>
|
||||
<ol start="6">
|
||||
<li>
|
||||
(optional) To create a distributable version, you have to install patchelf, e.g.
|
||||
<code>
|
||||
sudo chroot /tmp/buildroot bash -c "apt-get install patchelf"
|
||||
</code>
|
||||
. Run
|
||||
<code>
|
||||
sudo chroot ${CHROOTDIR} bash -c "cd PuRestJson && bash ./dependencies/linux.sh *.pd_linux"
|
||||
</code>
|
||||
. This will copy dependencies to the /tmp/buildroot and rewrite linking information in the files to point to these dependencies.
|
||||
</li>
|
||||
</ol>
|
||||
<h2>
|
||||
<a aria-hidden="true" class="anchor" href="#windows-with-mingw" id="user-content-windows-with-mingw">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Windows with MinGW
|
||||
</h2>
|
||||
<p>
|
||||
This is possible, but I have given up on it, and only cross-compile the library with MXE.
|
||||
</p>
|
||||
<h2>
|
||||
<a aria-hidden="true" class="anchor" href="#compilation-on-mac-os-x" id="user-content-compilation-on-mac-os-x">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Compilation on Mac OS X
|
||||
</h2>
|
||||
<p>
|
||||
As a guideline, look at the scripts in the
|
||||
<code>
|
||||
circleci-scripts/osx
|
||||
</code>
|
||||
folder.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Install
|
||||
<a href="https://developer.apple.com/xcode/" rel="nofollow">
|
||||
XCode
|
||||
</a>
|
||||
, and
|
||||
<a href="http://stackoverflow.com/a/9353468/124983" rel="nofollow">
|
||||
install the command line tools
|
||||
</a>
|
||||
to get
|
||||
<code>
|
||||
gcc
|
||||
</code>
|
||||
and
|
||||
<code>
|
||||
otool
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
Install
|
||||
<a href="http://brew.sh/" rel="nofollow">
|
||||
Homebrew
|
||||
</a>
|
||||
to later install the dependencies.
|
||||
</li>
|
||||
<li>
|
||||
Install dependencies via Homebrew:
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> brew update
|
||||
brew install json-c curl liboauth --universal
|
||||
</code></pre>
|
||||
<ol start="4">
|
||||
<li>
|
||||
Find the path to Pd.
|
||||
</li>
|
||||
<li>
|
||||
Drop the sources in a directory and run
|
||||
<code>
|
||||
make pdincludepath=/path/to/pd/Contents/Resources/src
|
||||
</code>
|
||||
</li>
|
||||
<li>
|
||||
(optional) You are now able to use the library on a machine, if the dependencies are installed via Homebrew. To move the necessary dylibs to the current directory and change the links of the pd_darwin files, run
|
||||
<code>
|
||||
./dependencies/osx.sh
|
||||
</code>
|
||||
. This makes the whole folder distributable.
|
||||
</li>
|
||||
</ol>
|
||||
<h2>
|
||||
<a aria-hidden="true" class="anchor" href="#cross-compilation-for-windows-on-unix-like-systems-linux--bsd--mac-os-x-with-mxe" id="user-content-cross-compilation-for-windows-on-unix-like-systems-linux--bsd--mac-os-x-with-mxe">
|
||||
<span aria-hidden="true" class="octicon octicon-link">
|
||||
</span>
|
||||
</a>
|
||||
Cross-compilation for Windows on UNIX-like systems (Linux / *BSD / Mac OS X) with MXE
|
||||
</h2>
|
||||
<p>
|
||||
As a guideline, look at the scripts in the
|
||||
<code>
|
||||
circleci-scripts/windows32
|
||||
</code>
|
||||
folder.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Get the development version of MXE from
|
||||
<a href="https://github.com/mxe/mxe">
|
||||
their Github repository
|
||||
</a>
|
||||
and setup MXE, so that the cross compilation tools are in your PATH environmental variable.
|
||||
</li>
|
||||
<li>
|
||||
Build the required libraries by running
|
||||
<code>
|
||||
make curl json-c liboauth pthreads
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
Download the Windows version of Pd and unzip it in a folder. You should have the following structure of files:
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> pd/src/(source files including m_pd.h)
|
||||
pd/bin/pd.dll
|
||||
</code></pre>
|
||||
<ol start="4">
|
||||
<li>
|
||||
Run
|
||||
<code>
|
||||
make
|
||||
</code>
|
||||
with some environmental variables to tell the compiler to use the cross compiler, and where to find the Pd source and pd.dll. Here is an example from my setup:
|
||||
</li>
|
||||
</ol>
|
||||
<pre><code> #!/bin/bash
|
||||
MXE_DIR=/usr/lib/mxe
|
||||
MXE_GCC=${MXE_DIR}/usr/bin/i686-w64-mingw32.static-gcc
|
||||
PD_DIR=/tmp/pd
|
||||
|
||||
make \
|
||||
system=Windows \
|
||||
machine=i386 \
|
||||
uname=MINGW \
|
||||
pdincludepath=${PD_DIR}/src \
|
||||
pdbinpath=${PD_DIR}/bin \
|
||||
CC=${MXE_GCC} \
|
||||
arch.c.flags='-march=pentium4 -msse -msse2 -mfpmath=sse -I \
|
||||
"/usr/lib/mxe/usr/i686-w64-mingw32.static/include"' \
|
||||
ldflags='-L "/usr/lib/mxe/usr/i686-w64-mingw32.static/lib"'
|
||||
</code></pre>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function showCanonicalImages() {
|
||||
var images = document.getElementsByTagName('img');
|
||||
if (!images) {
|
||||
return;
|
||||
}
|
||||
for (var index = 0; index < images.length; index++) {
|
||||
var image = images[index];
|
||||
if (image.getAttribute('data-canonical-src') && image.src !== image.getAttribute('data-canonical-src')) {
|
||||
image.src = image.getAttribute('data-canonical-src');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToHash() {
|
||||
if (location.hash && !document.querySelector(':target')) {
|
||||
var element = document.getElementById('user-content-' + location.hash.slice(1));
|
||||
if (element) {
|
||||
element.scrollIntoView();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function autorefreshContent(eventSourceUrl) {
|
||||
var initialTitle = document.title;
|
||||
var contentElement = document.getElementById('grip-content');
|
||||
var source = new EventSource(eventSourceUrl);
|
||||
var isRendering = false;
|
||||
|
||||
source.onmessage = function(ev) {
|
||||
var msg = JSON.parse(ev.data);
|
||||
if (msg.updating) {
|
||||
isRendering = true;
|
||||
document.title = '(Rendering) ' + document.title;
|
||||
} else {
|
||||
isRendering = false;
|
||||
document.title = initialTitle;
|
||||
contentElement.innerHTML = msg.content;
|
||||
showCanonicalImages();
|
||||
}
|
||||
}
|
||||
|
||||
source.onerror = function(e) {
|
||||
if (e.readyState === EventSource.CLOSED && isRendering) {
|
||||
isRendering = false;
|
||||
document.title = initialTitle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.onhashchange = function() {
|
||||
scrollToHash();
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
scrollToHash();
|
||||
}
|
||||
|
||||
showCanonicalImages();
|
||||
|
||||
var autorefreshUrl = document.getElementById('preview-page').getAttribute('data-autorefresh-url');
|
||||
if (autorefreshUrl) {
|
||||
autorefreshContent(autorefreshUrl);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user