The R Project SVN R

Rev

Rev 33947 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#!/usr/bin/make -f
# debian/rules file for the Debian GNU/Linux r-base package
# Copyright 1997-2004 by Douglas Bates <bates@stat.wisc.edu> 
#            and Dirk Eddelbuettel <edd@debian.org>

# $Id: rules,v 1.56 2004/04/09 13:32:46 bates Exp $

corepackage = r-base-core
latexpackage    = r-base-latex
pdfpackage  = r-doc-pdf
htmlpackage = r-doc-html
gnomepackage    = r-gnome
nmathpackage    = r-mathlib
infopackage = r-doc-info
recdpackage = r-recommended

# for the standalone library, no sonames are assigned in the upstream Makefiles
somaj       = 1
somin       = 0
sorel       = 0
libver      = $(somaj).$(somin).$(sorel)

debbase     := $(CURDIR)/debian
debtmp      := $(debbase)/tmp
debdoc      := $(debbase)/$(corepackage)/usr/share/doc/$(corepackage)
debmat      := $(debbase)/$(nmathpackage)
debetc      := $(debbase)/$(corepackage)/usr/lib/R/etc
debinf      := $(debbase)/$(infopackage)

arch        := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

# set this to 1 (default) if you want the Gnome GUI package
# edd 27 Feb 2005  as of R 2.1.0, the Gnome GUI is no longer included
gnome       = 0
ifeq ($(gnome),0)
gnomeconfig = --without-gnome
else
gnomeconfig = --with-gnome
endif


#export DH_VERBOSE = 1
export DH_COMPAT  = 3

# edd 15 Aug 2001  default to blas, atlas can override it 
#atlas      = --with-blas=blas
# dmb 04 Apr 2003  better to use no specify blas
# atlas         = --with-blas
# edd 28 Apr 2003  try configuring with atlas
# atlas     = --with-blas=atlas
# edd 16 Oct 2003  back to older default
#atlas      = --with-blas=blas
# edd 26 Feb 2004  point to refblas3 
atlas       = --with-blas=-lblas-3

# edd 08 Mar 2003  use the new lapack feature
# edd 27 Apr 2003  Set this to =no as we currently see numerical errors
#lapack     = --with-lapack=no
# edd 26 Feb 2004  point to lapack3 
#lapack     = --with-lapack=-llapack-3
# edd 13 Oct 2004  Set this once again to =no as we still see numerical errors
lapack      = --with-lapack=no

# edd 02 Sep 2001  default to g77 but let m68k use f2c
# edd 06 Mar 2003  enforce 3.2 versions explicitly 
#          so that on testing we will pick them over 2.95
# edd 07 Jun 2003  let's fall back to the default compilers
fortrancompiler = F77=g77
compiler    = gcc
cxxcompiler = g++
compilerflags   = -O2

# edd 04 Sep 2001  default compiler flags, lowered for m68k
compilerflags   = -O2
# m68k barks when using g77, and when gcc use -O2
# edd 26 Nov 2002  switched back to g77
# edd 02 Jun 2003  switched back
# cts 04 Jun 2003  use -O1 on m68k
ifeq ($(arch),m68k-linux)
fortrancompiler = F2C=f2c
compilerflags   = -O1
endif

# edd 14 Nov 2003  turn blas off on arm
ifeq ($(arch),arm-linux)
atlas       = --without-blas
endif

## edd 09 Nov 2001  ia64 needs gcc-3.0, hppa gets it by default
#ifeq ($(arch),ia64-linux)
#fortrancompiler = F77=g77-3.0
#compiler   = gcc-3.0
#cxxcompiler    = g++-3.0
#compilerflags  = -O2
#endif

## lamont@debian.org 06 Dec 2001  hppa needs -ffunction-sections  
ifeq ($(arch),hppa-linux)
compilerflags   = -O2 -ffunction-sections
endif

## edd 20 Jun 2002  no optimisation or debugging on baby systems
## edd 02 Jun 2003  use this on arm only 
##ifneq "$(findstring $(arch), m68k-linux arm-linux)" ""
ifneq "$(findstring $(arch), arm-linux)" ""
compilerflags   = -O0 -g0
endif

get-orig-source: upstream
upstream:
        #links http://cran.us.r-project.org/src/base
    links http://cran.r-project.org/src/base/?M=D

upstreamdevel:
    links ftp://ftp.stat.math.ethz.ch/Software/R
        #links http://cran.us.r-project.org/src/base
        #rsync -vaC rsync.r-project.org::r-devel .

upstreamprerelease:
    links http://cran.r-project.org/src/base-prerelease


## edd 24 Oct 2003  build is invoked by the buildd, so we would prefer to
##          not imply build-indep; unfortunately R does not build
##          properly without it, so we have to stick with it
## edd 15 Jan 2004  trying again on build only build: build-arch build-indep
##          the main hook is to then have binary depend on both
##          binary-arch and binary-indep, and those on their builds
build: build-arch 

build-arch: make-arch 

build-indep: make-indep 

configure: configure-stamp
configure-stamp:    
    @echo "*** configure ***"

        # we have to disable use of the expanded R_LD_LIBRARY_PATH as it
        # conflicts with Debian's Atlas-can-replace-Blas scheme
        # so set R_LD_LIBRARY_PATH to the minimal value R_HOME/bin
        # and discard what configure finds for it on this machine
    perl -p -i -e 's|:\@R_LD_LIBRARY_PATH\@||' src/scripts/R.sh.in

    dh_testdir
    R_PAPERSIZE=letter              \
    R_BROWSER=sensible-browser          \
    PAGER=/usr/bin/pager                \
    PERL=/usr/bin/perl              \
    R_UNZIPCMD=/usr/bin/miniunzip           \
    R_ZIPCMD=/usr/bin/minizip           \
    R_PRINTCMD=/usr/bin/lpr             \
    CC=${compiler}                      \
    CXX=${cxxcompiler}                      \
    ${fortrancompiler}                      \
    CPPFLAGS=                   \
    LDFLAGS=                    \
    FLIBS=                      \
    ./configure --prefix=/usr           \
            --with-bzlib            \
            --with-jpeg             \
            --with-pcre             \
            --with-png              \
            --with-readline         \
            --with-tcltk            \
            --with-zlib             \
            --mandir=/usr/share/man     \
            --infodir=/usr/share/info       \
            $(atlas)        \
            $(lapack)       \
            $(gnomeconfig)          \
            --enable-R-profiling        \
            --enable-R-shlib            \
            --without-recommended-packages  \
            --build $(arch)

    touch configure-stamp

make-arch: configure make-arch-stamp 
make-arch-stamp: 
    @echo "*** make-arch ***"
    $(MAKE)     CFLAGS="$(compilerflags)"       \
            CXXFLAGS="$(compilerflags)"     \
            FFLAGS="$(compilerflags)"       \
            CC=${compiler}              \
            CXX=${cxxcompiler}          \
            ${fortrancompiler}          \
            R

        # the top-level 'make stamp-recommended' target implies 'make docs'
        # which (for the buildds) implies a lot of time wasted generating 
        # output we already take from the initial i386 build
#   $(MAKE)     CFLAGS="$(compilerflags)"       \
#           CXXFLAGS="$(compilerflags)"     \
#           FFLAGS="$(compilerflags)"       \
#           CC=${compiler}              \
#           CXX=${cxxcompiler}          \
#           ${fortrancompiler}          \
#           stamp-recommended

        # make standalone math lib
    (cd src/nmath/standalone;               \
        $(MAKE) CFLAGS="$(compilerflags) -D_REENTRANT"  \
            CXXFLAGS="$(compilerflags) -D_REENTRANT"\
            FFLAGS="$(compilerflags) -D_REENTRANT"  \
            CC=${compiler}              \
            CXX=${cxxcompiler}          \
            ${fortrancompiler}          \
            libRmath_la_LDFLAGS=-Wl,-soname,libRmath.so.$(somaj) \
            )

        # edd 25 Jan 2004  make install needs html docs
        # edd 03 Feb 2004  new test, try without 
        #make docs
        # edd 15 Jan 2004  make install needs html docs
        # edd 25 Jan 2004  not needed as we have 'make docs'
        ## make html
    $(MAKE) docs R_CMD_BUILD_HELP_OPTS="--txt --example"

    touch make-arch-stamp

make-indep: configure make-indep-stamp
make-indep-stamp:
    @echo "*** make-indep ***"
        ## edd 12 Jan 2004 uncommenting 'make docs' to split binary all/any
        ##    now that recommended packages aren't made
        ## edd 25 Jan 2004 make docs and make html are made in make-arch
        ## edd 05 Feb 2004 finally, this works in pre-1.9.0 with Kurt's
        ##         R_CMD_BUILD_HELP_OPTS
    $(MAKE) docs
    $(MAKE) html
    $(MAKE) help
    $(MAKE) info
    $(MAKE) pdf
    touch make-indep-stamp

make: make-stamp
make-stamp: make-arch make-indep 

check: make-arch check-stamp
check-stamp: 
    @echo "*** check ***"
ifneq   ($(arch),arm-linux)
    -make check
endif
    touch check-stamp

clean:
    @echo "*** clean ***"
    dh_testdir
    dh_testroot
    rm -f   configure-stamp \
        build-stamp build-indep-stamp build-arch-stamp \
        make-stamp make-arch-stamp make-indep-stamp \
        install-indep-stamp install-arch-stamp \
        check-stamp 
    -$(MAKE) distclean
    -rm -f `find . -name "*~"`
    -rm -rf debian/tmp debian/files* core debian/substvars
    -rm -f doc/html/function.html doc/html/packages.html
    -rm -f modules/*.so
        # left over in CVS from r-base --> r-base-core transition
    (cd debian; rm -vf r-base.dirs r-base.files r-base.lintian \
            r-base.menu r-base.postinst)    
    dh_clean

install: install-arch install-indep 

install-arch: make-arch check install-arch-stamp
install-arch-stamp: 
    @echo "*** install-arch ***"
    dh_testdir
    dh_testroot
    dh_clean -a -k
    dh_installdirs -A

    $(MAKE) prefix=$(debtmp)/usr            \
        mandir=$(debtmp)/usr/share/man      install

        # link $R_HOME/bin/R to real one, and set R_HOME_DIR env.var. 
    (cd $(debtmp)/usr/lib/R/bin/;                   \
        ln -svf ../../../bin/R R;               \
        cd ../../../bin;                    \
        perl -p -i -e                       \
            's|^R_HOME_DIR=.*|R_HOME_DIR=/usr/lib/R|' R)

        # set browser to mozilla as mozilla-1.0.0 works with help.start()
        # (we're now using /usr/bin/sensible-browser, see above)
#   (cd $(debtmp)/usr/lib/R/etc; \
#       perl -p -i -e \
#           "s|R_BROWSER-'.*'|R_BROWSER-'/usr/bin/mozilla'|" \
#           Renviron)

        # fix permissions (Lintian)
    chmod a+x   $(debtmp)/usr/lib/R/share/sh/echo.sh        \
            $(debtmp)/usr/lib/R/share/sh/help-links.sh  \
            $(debtmp)/usr/lib/R/share/sh/help-print.sh

        # remove unneeded license files, but link them back
    rm -v   $(debtmp)/usr/lib/R/COPYING     \
        $(debtmp)/usr/lib/R/COPYING.LIB 
    (cd $(debtmp)/usr/lib/R/; \
        ln -s ../../share/common-licenses/GPL COPYING; \
        ln -s ../../share/common-licenses/LGPL COPYING.LIB)

        # edd 15 Jul 2002 reduce compile load on small machines
ifneq "$(findstring $(arch), m68k-linux arm-linux)" ""
    perl -p -i -e 's/-g -O2/-g0 -O0/g' $(debtmp)/usr/lib/R/etc/Makeconf
endif

        # edd 10 Jan 2003 fix Perl interpreter path
    (cd $(debtmp)/usr/lib/R/bin;                    \
        for file in Rdconv Rprof Sd2Rd build check; do  \
        perl -p -i -e "s|/usr/local/bin/perl|/usr/bin/perl|"    \
           $${file};                        \
    done)

        # that being done, now install in different sub-packages

        # move the GNOME version to the r-gnome package
#ifeq ($(gnome),1)
#   dh_movefiles    -p$(gnomepackage)   usr/lib/R/modules/R_gnome.so
#endif

        # move files for r-recommended
        # doing this before html/latex moves ensure they keep their tex/latex
#   dh_movefiles    -p$(recdpackage)

        # move the html manual files in r-doc-html.files into r-doc-html 
        # these get built in make-arch too ...
    dh_movefiles    -p$(htmlpackage)        
        # move files for r-base-html
    dh_movefiles    -pr-base-html
        # move files for r-base-latex
    dh_movefiles    -pr-base-latex

    make        prefix=$(debtmp)/usr            install-pdf

        # the indep package r-doc-info is made now 
    make        prefix=$(debtmp)/usr  \
            infodir=$(debtmp)/usr/share/info    install-info

        # move the pdf manual files listed in r-doc-pdf.files into r-doc-pdf 
    dh_movefiles    -p$(pdfpackage)     
        # move the html manual files in r-doc-html.files into r-doc-html 
    dh_movefiles    -p$(htmlpackage)        
    touch install-indep-stamp
        # move files for r-doc-info
    dh_movefiles    -p$(infopackage)
        # deal with stupid automake / install-info issue (cf #235713)
    rm -vf  $(debinf)/usr/share/info/dir        \
        $(debinf)/usr/share/info/dir.old    

        # move all the rest into r-base-core
    dh_movefiles    -p$(corepackage)

        # for the standalone library package, move the two libs
        # as 'make install' ignores these, we have to do it by hand
#ifeq ($(gnome),1)
#   dh_installdirs -p$(gnomepackage) usr/share/lintian/overrides
#endif
    dh_installdirs -p$(nmathpackage) usr/include usr/lib \
                    usr/share/lintian/overrides 
    install -m 0644 src/nmath/standalone/libRmath.a     \
            $(debmat)/usr/lib
    install -m 0644 src/nmath/standalone/libRmath.so    \
            $(debmat)/usr/lib/libRmath.so.$(libver)
    (cd $(debmat)/usr/lib; \
            ln -s libRmath.so.$(libver) libRmath.so.$(somaj); \
            ln -s libRmath.so.$(somaj)  libRmath.so)
        # and create a link for Rmath.h 
        #(cd $(debmat)/usr/include; \
        #       ln -s ../lib/R/include/Rmath.h .)
        # rather copy directly into the more independent package r-mathlib
    install -m 0644 src/include/Rmath.h         \
            $(debmat)/usr/include
        # now deal with $R_HOME/etc <--> /etc/R
        # edd 03 Apr 2003  patch Renviron for new R_LIBS standard
        # edd 24 Apr 2004  patch Renviron for R_PAPERSIZE (bug #245525)
        # edd 16 Jun 2004    nope, doesn't work
    # edd 09 Apr 2005  also move the new file repositories to /etc/R
    (cd $(debetc); \
        cat $(debbase)/Renviron-R_LIBS.patch | patch --verbose; \
        mv Makeconf Renviron repositories \
                    ../../../../etc/R/;     \
        ln -s  /etc/R/Makeconf  .;              \
        ln -s  /etc/R/Renviron  .;              \
        ln -s  /etc/R/repositories .                )
    ##  cat $(debbase)/Renviron-R_PAPERSIZE.patch | patch --verbose; 

    touch install-arch-stamp

#install-indep: make-arch make-indep install-arch install-indep-stamp
install-indep: make-indep install-indep-stamp
install-indep-stamp: 
    @echo "*** install-indep ***"
    dh_testdir
    dh_testroot
    dh_clean -a -k
    dh_installdirs -A

#   make        prefix=$(debtmp)/usr            install-pdf
#
#    # the indep package r-doc-info is made now 
#   make        prefix=$(debtmp)/usr  \
#           infodir=$(debtmp)/usr/share/info    install-info
#
#    # move the pdf manual files listed in r-doc-pdf.files into r-doc-pdf 
#   dh_movefiles    -p$(pdfpackage)     
#    # move the html manual files in r-doc-html.files into r-doc-html 
#   dh_movefiles    -p$(htmlpackage)        
#   touch install-indep-stamp
#    # move files for r-doc-info
#   dh_movefiles    -p$(infopackage)

        # but clean up dir and old.dir  
    rm -vf      $(debbase)/$(infopackage)/usr/share/info/dir \
            $(debbase)/$(infopackage)/usr/share/info/dir.old

    dh_installdirs $(gnomepackage)
    dh_installchangelogs -p$(gnomepackage) 

    touch install-indep-stamp


# Build architecture-independent files here.
# edd 5 Feb 2004 binary-indep: build-indep install-indep
binary-indep: build-indep install-indep
    @echo "*** binary-indep ***"
    dh_testdir -i
    dh_testroot -i
    dh_link -i -N$(gnomepackage)
        #dh_installdebconf -i
    dh_installdocs -i
        #dh_installexamples -i
        #dh_installmenu -i
        #dh_installemacsen -i
        #dh_installpam -i
        #dh_installmime -i
        #dh_installinit -i
        #dh_installcron -i
        #dh_installmanpages -i
        #dh_installinfo -i
        #dh_undocumented -i
    dh_installchangelogs -i 
        # install lintian "silencer"
    install -p -m 0644  debian/$(latexpackage).lintian \
     $(debbase)/$(latexpackage)/usr/share/lintian/overrides/$(latexpackage)
    dh_compress -i
    dh_fixperms -i
        #dh_suidregister -i
    dh_installdeb -i
        #dh_perl -i
    dh_gencontrol -i
    dh_md5sums -i
    dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: build-arch check install-arch 
    @echo "*** binary-arch ***"
    dh_testdir -a
    dh_testroot -a
        #dh_installdebconf -a
    #dh_link -a
#ifeq ($(gnome),1)
#   dh_link -p$(gnomepackage)
#endif
    dh_installdocs -p$(corepackage) AUTHORS NEWS ONEWS README \
                    RESOURCES THANKS Y2K \
                    debian/README.Atlas \
                    debian/README.mathlib
    dh_installdocs -p$(nmathpackage) AUTHORS NEWS ONEWS README \
                    RESOURCES THANKS Y2K \
                    debian/README.mathlib
        #dh_installexamples -a
        #dh_installexamples -p$(corepackage)    src/nmath/standalone/test.c
    dh_installexamples -p$(nmathpackage)    src/nmath/standalone/test.c
    dh_installmenu -a
        #dh_installemacsen -a
        #dh_installpam -a
        #dh_installmime -a
        #dh_installinit -a
        #dh_installcron -a
        #dh_installmanpages -a  -N$(gnomepackage) -p$(corepackage) getline.3
        #dh_installman      -p$(corepackage) doc/R.1
        ## dh_installinfo -a    -n doc/manual/R-*.info*
        ## edd 04 Apr 2004 manual is dangling unless r-doc-pdf is installed ...
        ##(cd $(debdoc)/doc && ln -s ../../../../lib/R/doc/html .)
        ##(cd $(debdoc)/doc && ln -s ../../../../lib/R/doc/manual .)
        # ... so install doc as a link, as we already did with library
    (cd $(debdoc) && ln -s ../../../lib/R/doc .)
    (cd $(debdoc) && ln -s ../../../lib/R/library .)
        # install lintian "silencer"
    install -p -m 0644  debian/$(corepackage).lintian \
       $(debbase)/$(corepackage)/usr/share/lintian/overrides/$(corepackage)
#   install -p -m 0644  debian/$(recdpackage).lintian \
#      $(debbase)/$(recdpackage)/usr/share/lintian/overrides/$(recdpackage)
    install -p -m 0644  debian/$(nmathpackage).lintian \
       $(debbase)/$(nmathpackage)/usr/share/lintian/overrides/$(nmathpackage)
#ifeq ($(gnome),1)
#   install -p -m 0644  debian/$(gnomepackage).lintian \
#      $(debbase)/$(gnomepackage)/usr/share/lintian/overrides/$(gnomepackage)
#endif
        #dh_undocumented -a
    dh_installchangelogs -a -k NEWS 
    dh_strip -a
    dh_compress -a
    dh_fixperms -a
        #dh_suidregister -a
    dh_makeshlibs -a
    dh_installdeb -a
    dh_perl -a
    dh_shlibdeps -a
#   @echo "*** Pruning shlibdeps result from double atlas entry ***"
#   cat debian/r-base-core.substvars
#   perl -p -i -e 's/atlas2-base, //' debian/r-base-core.substvars
#   cat debian/r-base-core.substvars
#   @echo "*** Pruning atlas from r-recommended shlibdeps ***"
#   cat debian/r-recommended.substvars
#   perl -p -i -e 's/atlas2-base, //' debian/r-recommended.substvars
#   cat debian/r-recommended.substvars
#   echo "*** Done ***"
    dh_gencontrol -a
    dh_md5sums -a       -X'usr/bin/R'  -XLibIndex -Xindex.txt \
                    -Xfunction.html -Xpackages.html
    dh_builddeb -a

#binary: binary-indep binary-arch install-arch install-indep 
binary: make-stamp check binary-arch binary-indep

.PHONY: build clean binary-indep binary-arch binary install install-arch install-indep