{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating, Distributing, and Testing Julia Packages with Binary Dependencies\n", "\n", "JuliaCon Workshop, June 21 2016\n", "\n", "Tony Kelman (`@tkelman`)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- So you wrote or want to use a Julia package that [calls into C or Fortran](http://docs.julialang.org/en/release-0.4/manual/calling-c-and-fortran-code/).\n", "- How do you go from \"`ccall` works on my machine\" to making your package easy to install for anyone?\n", "- You want `Pkg.add(\"MyPackage\")` to find, build, or download a copy of the library that will work on:\n", " - Linux (many distributions, Ubuntu, CentOS, etc) on `x86_64` architecture\n", " - Mac OS X\n", " - Windows (7,8,10, with 64 bit and 32 bit Julia)\n", " - More exotic OS or architecture combinations (won't cover in much detail)\n", "- Ideally without requiring the user to have root/admin permissions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Cloning into 'Rmath-julia'...\n", "INFO: Initializing package repository /home/juser/.julia/v0.4\n", "INFO: Cloning METADATA from git://github.com/JuliaLang/METADATA.jl\n", "INFO: Cloning Rmath from https://github.com/tkelman/Rmath.jl\n", "INFO: Computing changes...\n", "INFO: Cloning cache of BinDeps from git://github.com/JuliaLang/BinDeps.jl.git\n", "INFO: Cloning cache of Compat from git://github.com/JuliaLang/Compat.jl.git\n", "INFO: Cloning cache of SHA from git://github.com/staticfloat/SHA.jl.git\n", "INFO: Cloning cache of URIParser from git://github.com/JuliaWeb/URIParser.jl.git\n", "INFO: Installing BinDeps v0.3.21\n", "INFO: Installing Compat v0.8.1\n", "INFO: Installing SHA v0.1.2\n", "INFO: Installing URIParser v0.1.3\n", "INFO: Package database updated\n" ] } ], "source": [ "# Example library - Rmath, let's fix\n", "# https://github.com/JuliaLang/julia/issues/6131\n", "include(\"clone_example.jl\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "make: Entering directory `/home/juser/Rmath-julia'\n", "make -C src clean\n", "make[1]: Entering directory `/home/juser/Rmath-julia/src'\n", "rm -f *.o *.do *.a *.so core* *~ *#\n", "make[1]: Leaving directory `/home/juser/Rmath-julia/src'\n", "make: Leaving directory `/home/juser/Rmath-julia'\n", "make: Entering directory `/home/juser/Rmath-julia'\n", "make -C src\n", "make[1]: Entering directory `/home/juser/Rmath-julia/src'\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c bd0.c -o bd0.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnbeta.c -o dnbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c i1mach.c -o i1mach.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnbinom.c -o pnbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qlnorm.c -o qlnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rgeom.c -o rgeom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c bessel_i.c -o bessel_i.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnbinom.c -o dnbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c imax2.c -o imax2.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnchisq.c -o pnchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qlogis.c -o qlogis.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rhyper.c -o rhyper.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c bessel_j.c -o bessel_j.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnchisq.c -o dnchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c imin2.c -o imin2.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnf.c -o pnf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnbeta.c -o qnbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rlnorm.c -o rlnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c bessel_k.c -o bessel_k.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnf.c -o dnf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c lbeta.c -o lbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnorm.c -o pnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnbinom.c -o qnbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rlogis.c -o rlogis.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c bessel_y.c -o bessel_y.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnorm.c -o dnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c lgamma.c -o lgamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnt.c -o pnt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnchisq.c -o qnchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rmultinom.c -o rmultinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c beta.c -o beta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dnt.c -o dnt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c lgammacor.c -o lgammacor.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c polygamma.c -o polygamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnf.c -o qnf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rnbinom.c -o rnbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c chebyshev.c -o chebyshev.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dpois.c -o dpois.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c log1p.c -o log1p.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c ppois.c -o ppois.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnorm.c -o qnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rnchisq.c -o rnchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c choose.c -o choose.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dt.c -o dt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c mlutils.c -o mlutils.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pt.c -o pt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qnt.c -o qnt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rnorm.c -o rnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c d1mach.c -o d1mach.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dunif.c -o dunif.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pbeta.c -o pbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c ptukey.c -o ptukey.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qpois.c -o qpois.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rpois.c -o rpois.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dbeta.c -o dbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dweibull.c -o dweibull.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pbinom.c -o pbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c punif.c -o punif.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qt.c -o qt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rt.c -o rt.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dbinom.c -o dbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c expm1.c -o expm1.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pcauchy.c -o pcauchy.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pweibull.c -o pweibull.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qtukey.c -o qtukey.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c runif.c -o runif.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dcauchy.c -o dcauchy.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c fmax2.c -o fmax2.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pchisq.c -o pchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qbeta.c -o qbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qunif.c -o qunif.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rweibull.c -o rweibull.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dchisq.c -o dchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c fmin2.c -o fmin2.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pexp.c -o pexp.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qbinom.c -o qbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qweibull.c -o qweibull.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dexp.c -o dexp.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c fprec.c -o fprec.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pf.c -o pf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qcauchy.c -o qcauchy.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rbeta.c -o rbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c sign.c -o sign.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c df.c -o df.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c fround.c -o fround.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pgamma.c -o pgamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qchisq.c -o qchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rbinom.c -o rbinom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c signrank.c -o signrank.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dgamma.c -o dgamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c fsign.c -o fsign.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pgeom.c -o pgeom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qexp.c -o qexp.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rcauchy.c -o rcauchy.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dgeom.c -o dgeom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c ftrunc.c -o ftrunc.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c phyper.c -o phyper.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qf.c -o qf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rchisq.c -o rchisq.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c stirlerr.c -o stirlerr.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dhyper.c -o dhyper.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c gamma.c -o gamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c plnorm.c -o plnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qgamma.c -o qgamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rexp.c -o rexp.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c toms708.c -o toms708.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dlnorm.c -o dlnorm.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c gamma_cody.c -o gamma_cody.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c plogis.c -o plogis.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qgeom.c -o qgeom.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rf.c -o rf.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c wilcox.c -o wilcox.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c dlogis.c -o dlogis.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c gammalims.c -o gammalims.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c pnbeta.c -o pnbeta.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c qhyper.c -o qhyper.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c rgamma.c -o rgamma.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c sunif.c -o sunif.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c sexp.c -o sexp.o\n", "gcc -Wall -O3 -fPIC -DMATHLIB_STANDALONE -std=gnu99 -I../include -DNDEBUG -c snorm.c -o snorm.o\n", "rm -rf libRmath-julia.so\n", "gcc -shared -o libRmath-julia.so bd0.o dnbeta.o i1mach.o pnbinom.o qlnorm.o rgeom.o bessel_i.o dnbinom.o imax2.o pnchisq.o qlogis.o rhyper.o bessel_j.o dnchisq.o imin2.o pnf.o qnbeta.o rlnorm.o bessel_k.o dnf.o lbeta.o pnorm.o qnbinom.o rlogis.o bessel_y.o dnorm.o lgamma.o pnt.o qnchisq.o rmultinom.o beta.o dnt.o lgammacor.o polygamma.o qnf.o rnbinom.o chebyshev.o dpois.o log1p.o ppois.o qnorm.o rnchisq.o choose.o dt.o mlutils.o pt.o qnt.o rnorm.o d1mach.o dunif.o pbeta.o ptukey.o qpois.o rpois.o dbeta.o dweibull.o pbinom.o punif.o qt.o rt.o dbinom.o expm1.o pcauchy.o pweibull.o qtukey.o runif.o dcauchy.o fmax2.o pchisq.o qbeta.o qunif.o rweibull.o dchisq.o fmin2.o pexp.o qbinom.o qweibull.o dexp.o fprec.o pf.o qcauchy.o rbeta.o sign.o df.o fround.o pgamma.o qchisq.o rbinom.o signrank.o dgamma.o fsign.o pgeom.o qexp.o rcauchy.o dgeom.o ftrunc.o phyper.o qf.o rchisq.o stirlerr.o dhyper.o gamma.o plnorm.o qgamma.o rexp.o toms708.o dlnorm.o gamma_cody.o plogis.o qgeom.o rf.o wilcox.o dlogis.o gammalims.o pnbeta.o qhyper.o rgamma.o sunif.o sexp.o snorm.o\n", "make[1]: Leaving directory `/home/juser/Rmath-julia/src'\n", "make: Leaving directory `/home/juser/Rmath-julia'\n" ] } ], "source": [ "# If you run this on Windows, it likely won't work -\n", "# See https://github.com/tkelman/JuliaCon2015/blob/master/KelmanJuliaCon2015.pdf\n", "run(`make -C ../Rmath-julia clean`)\n", "run(`make -C ../Rmath-julia -j4`)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.36787944117144233" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Does it work?\n", "if VERSION <= v\"0.5\"\n", " # The version that came with Julia\n", " ccall((:pgamma,\"libRmath-julia\"), Cdouble,\n", " (Cdouble,Cdouble,Cdouble,Cint,Cint), 1.0,1.0,1.0,0,0)\n", "end" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.36787944117144233" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The version we just compiled\n", "# Copy it to a new name just to be sure we aren't using\n", "# the same copy we just called\n", "cp(\"../Rmath-julia/src/libRmath-julia.$(Libdl.dlext)\",\n", " \"../Rmath-julia/src/libRmath-julia2.$(Libdl.dlext)\")\n", "ccall((:pgamma,\"../Rmath-julia/src/libRmath-julia2\"), Cdouble,\n", " (Cdouble,Cdouble,Cdouble,Cint,Cint), 1.0,1.0,1.0,0,0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now onto the (other) complicated part!\n", "* Upload the binary somewhere\n", " * GitHub releases, simplest choice\n", " * Automation using Travis CI (if we need to change or rebuild often)\n", "* Repeat for other common platforms\n", "* OS-specific caveats (there are many)\n", "* Get the binary downloaded to the user's machine at package install time\n", "* Add a fallback automatic from-source build for exotic OS/architectures" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#Pkg.build(\"Rmath\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#Pkg.test(\"Rmath\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#using Rmath" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Julia 0.4.5", "language": "julia", "name": "julia-0.4" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.4.5" } }, "nbformat": 4, "nbformat_minor": 0 }