if (!dbExistsTable(con,'builds')) {
dbGetQuery(con,paste('CREATE TABLE builds ('
,' id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'
+ ,',system TEXT NOT NULL'
,',package TEXT NOT NULL'
,',r_version TEXT NOT NULL'
,',deb_epoch INTEGER NOT NULL'
,',deb_revision INTEGER NOT NULL'
,',db_version INTEGER NOT NULL'
,',date_stamp TEXT NOT NULL'
- ,',git_revision TEXT NOT NULL' # legacy: really scm_revision
+ ,',scm_revision TEXT NOT NULL'
,',success INTEGER NOT NULL'
,',log TEXT'
- ,',UNIQUE(package,r_version,deb_epoch,deb_revision,db_version)'
+ ,',UNIQUE(package,system,r_version,deb_epoch,deb_revision,db_version)'
,')'))
}
return(con)
db_record_build <- function(package, deb_version, log, success=F) {
con <- db_start()
dbGetQuery(con,paste('INSERT OR REPLACE INTO builds'
- ,'(package,r_version,deb_epoch,deb_revision,db_version,success,date_stamp,git_revision,log)'
+ ,'(package,system,r_version,deb_epoch,deb_revision,db_version,success,date_stamp,scm_revision,log)'
,'VALUES'
,'(',db_quote(package)
+ ,',',db_quote(which_system)
,',',db_quote(version_upstream(deb_version))
,',',db_quote(version_epoch(deb_version))
,',',db_quote(version_revision(deb_version))
con <- db_start()
build <- dbGetQuery(con, paste('SELECT * FROM builds'
,'WHERE success = 1'
+ ,'AND system =',db_quote(which_system)
,'AND package =',db_quote(pkgname)))
db_stop(con)
if (length(build) == 0) {
con <- db_start()
build <- dbGetQuery(con, paste('SELECT * FROM builds'
,'NATURAL JOIN (SELECT package,max(id) AS max_id FROM builds'
+ , 'WHERE system =',db_quote(which_system)
, 'GROUP BY package) AS last'
,'WHERE id = max_id'
,'AND builds.package =',db_quote(pkgname)))
# extract the latest attempt at building each package
, 'SELECT * FROM builds'
, 'NATURAL JOIN (SELECT package,max(id) AS max_id FROM builds'
+ , 'WHERE system =',db_quote(which_system)
, 'GROUP BY package) AS last'
, 'WHERE id = max_id) AS build'
,'ON build.package = packages.package'
append_build_from_pkg <- function(pkg, builds) {
pkg_build <- data.frame(id = -1 # never used
,package = pkg$name
+ ,system = which_system
,r_version = version_upstream(pkg$debversion)
,deb_epoch = version_epoch(pkg$debversion)
,deb_revision = version_revision(pkg$debversion)
,db_version = db_get_version()
,date_stamp = pkg$date_stamp
- ,git_revision = scm_revision
+ ,scm_revision = scm_revision
,success = 1 # never used
,log = '' # never used
)
# TODO: should say 'New upstream release' when necessary
debversion <- version_new(build$r_version, build$deb_revision, build$deb_epoch)
cat(paste(paste(build$srcname,' (',debversion,') unstable; urgency=low',sep='')
- ,'' ,paste(' * cran2deb ',build$git_revision
+ ,'' ,paste(' * cran2deb ',build$scm_revision
,' with DB version ',as.integer(build$db_version),'.',sep='')
,'',paste(' --',maintainer,'',build$date_stamp)
,'','','',sep='\n'),file=changelog, append=TRUE)
.First.lib <- function(libname, pkgname) {
global <- function(name,value) assign(name,value,envir=.GlobalEnv)
+ global("which_system", Sys.getenv('CRAN2DEB_SYS','debian-amd64'))
+ if (!length(grep('^[a-z]+-[a-z0-9]+$',which_system))) {
+ stop('Invalid system specification: must be of the form name-arch')
+ }
+ global("host_arch", gsub('^[a-z]+-','',which_system))
global("maintainer", 'cran2deb autobuild <cran2deb@example.org>')
global("root", system.file(package='cran2deb'))
global("cache_root", '/var/cache/cran2deb')
- global("pbuilder_results", '/var/cache/cran2deb/results')
- global("pbuilder_config", '/etc/cran2deb/pbuilderrc')
- global("dput_config", '/etc/cran2deb/dput.cf')
- global("dinstall_config", '/etc/cran2deb/mini-dinstall.conf')
- global("dinstall_archive", '/etc/cran2deb/archive')
+ global("pbuilder_results", file.path('/var/cache/cran2deb/results',which_system))
+ global("pbuilder_config", file.path('/etc/cran2deb/sys',which_system,'pbuilderrc'))
+ global("dput_config", file.path('/etc/cran2deb/sys',which_system,'dput.cf'))
+ global("dinstall_config", file.path('/etc/cran2deb/sys',which_system,'mini-dinstall.conf'))
+ global("dinstall_archive", file.path('/etc/cran2deb/archive',which_system))
global("r_depend_fields", c('Depends','Imports')) # Suggests, Enhances
global("scm_revision", 'svn:$Id$')
global("patch_dir", '/etc/cran2deb/patches')
global("changesfile", function(srcname,version='*') {
return(file.path(pbuilder_results
,paste(srcname,'_',version,'_'
- ,host_arch(),'.changes',sep='')))
+ ,host_arch,'.changes',sep='')))
})
cache <- file.path(cache_root,'cache.rda')
if (file.exists(cache)) {
load(cache,envir=.GlobalEnv)
}
+ message(paste('I: cran2deb',scm_revision,'building for',which_system))
}
alias_run libpng libpng12-0
alias_build libxml libxml2-dev
alias_run libxml libxml2
-alias_build msttcorefonts msttcorefonts
-alias_run msttcorefonts msttcorefonts
+alias_build msttcorefonts ttf-liberation
+alias_run msttcorefonts ttf-liberation
alias_run netcdf libnetcdf4
-alias_build netcdf libnetcdf-dev
alias_build opengl libgl1-mesa-dev
alias_run opengl libgl1-mesa-glx
alias_build pari-gp pari-gp
alias_build pvm pvm-dev
alias_build hdf5 libhdf5-serial-dev
alias_build sprng libsprng2-dev
+alias_build netcdf libnetcdf-dev
+alias_build libtiff libtiff4-dev
+alias_build fftw libfftw3-dev
+alias_build fftw-dev fftw-dev
+alias_build r-recommended r-recommended
+alias_run r-recommended r-recommended
+alias_build libxt libxt-dev
+alias_run libxt libxt6
+alias_build grass grass-dev
+alias_build blacs blacsgf-mpich-dev
+alias_build scalapack scalapack-mpich-dev
+alias_build mpich libmpich1.0-dev
+alias_run libblas libblas3gf
+alias_build libblas libblas-dev
force autotools rJava
force sqlite RSQLite
force sqlite SQLiteDF
-force boost RBGL
force netcdf ncdf
force cshell dse
force libgtk cairoDevice
force libxml rggobi
force sprng rsprng
force gmp rsprng
+force java JavaGD
+force boost RBGL
+force netcdf RNetCDF
+force libtiff biOps
+force fftw-dev rimage
+force r-recommended spBayes
+force libxt Cairo
+force autotools qp
+force boost MBA
+force mpich RScaLAPACK
+force libblas odesolve
sysreq odbc %odbc%
sysreq ignore drivers. see readme.
sysreq ignore r must be compiled with --enable-r-shlib if the server is to be built
+sysreq alias netcdf%
+sysreq yacas yacas%
+sysreq libtiff %libtiff%
+sysreq ignore zlibdll
+sysreq ignore jpegdll%
+sysreq fftw fftw%
+sysreq python python
+sysreq ghostscript ghostscript
+sysreq gsl libgsl
+sysreq ignore rgl packages for rendering
+sysreq grass grass
+sysreq ignore internal files xba.cqv
+sysreq ignore xba.regions
+sysreq ignore lammpi or mpich
+sysreq blas blas
+sysreq blacs blacs
+sysreq scalapack scalapack
--- /dev/null
+#!/bin/sh
+cran2deb depend ls aliases >populate_depend_aliases
+cran2deb depend ls force >populate_forcedep
+cran2deb depend ls sysreq >populate_sysreq
+echo NOTE: you need to update populate_licenses manually!
## DOC: cran2deb autobuild
## DOC: automatically builds all out of date packages.
## DOC:
-suppressMessages(library(cran2deb))
+suppressPackageStartupMessages(library(cran2deb))
if (exists('argv')) { # check for littler
db_update_package_versions()
## DOC: cran2deb build [-D extra_dep1,extra_dep2,...] package1 package2 ...
## DOC: builds a particular package.
## DOC:
-suppressMessages(library(cran2deb))
+suppressPackageStartupMessages(library(cran2deb))
if (exists('argv')) { # check for littler
argc <- length(argv)
#!/usr/bin/env r
## DOC: cran2deb latest_log package1 package2 ...
## DOC: show the latest log output for <package>
-suppressMessages(library(cran2deb))
+suppressPackageStartupMessages(library(cran2deb))
if (exists('argv')) {
for (pkg in argv) {
umask 002
root=$1
shift
-mkdir -p /var/cache/cran2deb/results || exit 1
-mini-dinstall --batch -c /etc/cran2deb/mini-dinstall.conf || exit 1
+sys=`{cran2deb which_system}
+mkdir -p /var/cache/cran2deb/results/$sys || exit 1
+mini-dinstall --batch -c /etc/cran2deb/sys/$sys/mini-dinstall.conf || exit 1
update_period=10800
if (~ $1 full || ![ -e /var/cache/cran2deb/cache.rda ] ) {
delta=`{awk 'END{print '^$update_period^'+1}' </dev/null}
}
if (![ -e /var/cache/cran2deb/cache.rda ] || [ $delta -gt $update_period ]) {
mode=create
- if ([ -e /var/cache/pbuilder/base-cran2deb.tgz ]) {
+ if ([ -e /var/cache/pbuilder/base-cran2deb-$sys.tgz ]) {
mode=update
}
- sudo pbuilder $mode --override-config --configfile /etc/cran2deb/pbuilderrc
+ sudo pbuilder $mode --override-config --configfile /etc/cran2deb/sys/$sys/pbuilderrc
$root/exec/update_cache $root
}
#!/usr/bin/env Rscript
+# Note: everything in the case needs to be system-independent!
library(cran2deb)
library(ctv)
--- /dev/null
+#!/usr/bin/env r
+## DOC: cran2deb which_sys
+## DOC: show which system cran2deb will build for next
+## DOC:
+suppressMessages(library(cran2deb))
+
+cat(which_system)
+*WARNING* This is not up to date! The major difference is that now we have
+*WARNING* system-specific configurations, archives and results, so that several
+*WARNING* of the paths have either a 'sys/FOO' part or a 'FOO' part where FOO
+*WARNING* is something like debian-amd64, debian-i386..
+
+
git clone git://github.com/blundellc/cran2deb.git
apt-get system requirements from DESCRIPTION
1. You need a web server serving from say, /var/www/cran2deb/
Let ROOT be the value returned by running: cran2deb root
+Let SYS be the system you wish to build for (e.g., debian-amd64)
2. create /etc/cran2deb
- a. copy ROOT/etc/* into /etc/cran2deb
+ a. copy ROOT/etc/* into /etc/cran2deb/sys/SYS/
b. /etc/cran2deb/archive should be a symlink pointing to /var/www/cran2deb/
$ ln -s /var/www/cran2deb/ /etc/cran2deb/archive
+ $ mkdir /var/www/cran2deb/SYS
c. modify OTHERMIRROR of /etc/cran2deb/pbuilderrc.in to point to your webserver
/var/cache/cran2deb, writable by whichever user(s) will run cran2deb.
4. run: cran2deb update
5. Try building a simple package: cran2deb build zoo
- (The result will be in /var/cache/cran2deb/results)
+ (The result will be in /var/cache/cran2deb/results/SYS)
$ cran2deb help