Skip to content

Commit

Permalink
Merge pull request #46 from lavakin/master
Browse files Browse the repository at this point in the history
CRAN submission
  • Loading branch information
HajkD authored Sep 30, 2024
2 parents dca16b6 + 98e739c commit c06a800
Show file tree
Hide file tree
Showing 12 changed files with 212 additions and 15 deletions.
6 changes: 4 additions & 2 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
Package: myTAI
Type: Package
Title: Evolutionary Transcriptomics
Version: 1.0.2.9000
Date: 2023-07-08
Version: 2.0.0.0
Date: 2024-09-30
Maintainer: Jane Doe <[email protected]>
Author: Jane Doe [aut], John Smith [aut]
Authors@R: c(person("Hajk-Georg", "Drost",
role = c("aut", "cre"),
email = "[email protected]",
Expand Down
2 changes: 2 additions & 0 deletions cleanup
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
rm -f src/Makevars
190 changes: 190 additions & 0 deletions configure
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
#!/usr/bin/env sh

# Find R compilers
CC=`${R_HOME}/bin/R CMD config CC`
CFLAGS=`${R_HOME}/bin/R CMD config CFLAGS`
# compiler and flags to 'cc' file
echo "CC=${CC}" > inst/cc
echo "CFLAGS=${CFLAGS}" >> inst/cc

# gcc compiler info to output #3291
case $CC in gcc*)
GCCV=`${CC} -dumpfullversion -dumpversion`
echo "$CC $GCCV"
esac

# Let's keep this simple. If pkg-config is available, use it. Otherwise print
# the helpful message to aid user if compilation does fail. Note 25 of R-exts:
# "[pkg-config] is available on the machines used to produce the CRAN binary packages"
# This script should pass `checkbashisms` for portability; e.g. CRAN's Solaris 10,
# and R-exts note 24 now suggests 'checkbashisms' as we proposed.

msg=0
NOZLIB=1 # if pkg-config is not available then zlib will be disabled for higher chance of compilation success
pkg-config --version > config.log 2>&1
if [ $? -ne 0 ]; then
echo "*** pkg-config is not installed."
msg=1
else
pkg-config --exists zlib
if [ $? -ne 0 ]; then
echo "*** pkg-config is installed but 'pkg-config --exists zlib' did not return 0."
msg=1
else
NOZLIB=0
lib=`pkg-config --libs zlib`
cflag=`pkg-config --cflags zlib`
expr -- "$lib" : ".*-lz$" >> config.log # -- for FreeBSD, #4652
if [ $? -ne 0 ]; then
expr -- "$lib" : ".*-lz " >> config.log
# would use \b in one expr but MacOS does not support \b
if [ $? -ne 0 ]; then
echo "*** pkg-config is installed and 'pkg-config --exists zlib' succeeds but"
echo "*** 'pkg-config --libs zlib' returns '${lib}' which does not include the standard -lz."
msg=1
fi
fi
fi
fi

if [ $msg -ne 0 ]; then
echo "*** Compilation will now be attempted and if it works you can ignore this message. In"
echo "*** particular, this should be the case on Mac where zlib is built in or pkg-config"
echo "*** is not installed. However, if compilation fails, try 'locate zlib.h zconf.h' and"
echo "*** ensure the zlib development library is installed :"
echo "*** deb: zlib1g-dev (Debian, Ubuntu, ...)"
echo "*** rpm: zlib-devel (Fedora, EPEL, ...)"
echo "*** There is a zlib in brew for OSX but the built in zlib should work."
echo "*** Note that zlib is required to compile R itself so you may find the advice in the R-admin"
echo "*** guide helpful regarding zlib. On Debian/Ubuntu, zlib1g-dev is a dependency of r-base as"
echo "*** shown by 'apt-cache showsrc r-base | grep ^Build-Depends | grep zlib', and therefore"
echo "*** 'sudo apt-get build-dep r-base' should be sufficient too."
echo "*** To silence this message, please ensure that :"
echo "*** 1) 'pkg-config --exists zlib' succeeds (i.e. \$? -eq 0)"
echo "*** 2) 'pkg-config --libs zlib' contains -lz"
echo "*** Compilation will now be attempted ..."
else
version=`pkg-config --modversion zlib`
echo "zlib ${version} is available ok"
fi

# Test if we have a OPENMP compatible compiler
# Aside: ${SHLIB_OPENMP_CFLAGS} does not appear to be defined at this point according to Matt's testing on
# Linux, and R CMD config SHLIB_OPENMP_CFLAGS also returns 'no information for variable'. That's not
# inconsistent with R-exts$1.2.1.1, though, which states it's 'available for use in Makevars' (so not
# necessarily here in configure). Hence use -fopenmp directly for this detection step.
# printf not echo to pass checkbashisms w.r.t. to the \n

cat <<EOF > test-omp.c
#include <omp.h>
int main() {
return omp_get_num_threads();
}
EOF

detect_openmp () {
export PKG_CXXFLAGS=""
if [ "$(uname)" = "Linux" ]; then

printf "%s" "* checking if R installation supports OpenMP without any extra hints... "
if "${R_HOME}/bin/R" CMD SHLIB test-omp.c >> config.log 2>&1; then
echo "yes"
export R_OPENMP_ENABLED=1
return
else
echo "no"
fi


printf "%s" "* checking if R installation supports openmp with \"-fopenmp\" flag... "
if ${CC} ${CFLAGS} -fopenmp test-omp.c >> config.log 2>&1; then
echo "yes"
export PKG_CFLAGS="${PKG_CFLAGS} -fopenmp"
export R_OPENMP_ENABLED=1
return
else
echo "no"
fi
fi # uname=Linux

if [ "$(uname)" = "Darwin" ]; then
export openmapp="-fopenmp"

# https://mac.r-project.org/openmp
printf "%s" "* checking if R installation supports OpenMP with \"-Xclang -fopenmp\" ... "

echo "yes"
export PKG_CFLAGS="${PKG_CFLAGS} -Xclang -fopenmp"
export PKG_LIBS="${PKG_LIBS} -lomp"
export R_OPENMP_ENABLED=1
export PKG_CXXFLAGS="-Xpreprocessor -fopenmp"
return

printf "%s" "* checking if R installation supports OpenMP with \"-fopenmp\" ... "

echo "yes"
export PKG_CFLAGS="${PKG_CFLAGS} -fopenmp"
export R_OPENMP_ENABLED=1
export PKG_CXXFLAGS="-Xpreprocessor -fopenmp"
return

if [ "$(uname -m)" = "arm64" ]; then
HOMEBREW_PREFIX=/usr/local
else
HOMEBREW_PREFIX=/usr/local
fi

if [ -e "${HOMEBREW_PREFIX}/opt/libomp" ]; then
printf "%s" "* checking if libomp installation at ${HOMEBREW_PREFIX}/opt/libomp can be used...
"
LIBOMP_INCLUDE="-I${HOMEBREW_PREFIX}/opt/libomp/include -Xclang -fopenmp"
LIBOMP_LINK="-L${HOMEBREW_PREFIX}/opt/libomp/lib -lomp"
if ${CC} ${CFLAGS} ${LIBOMP_INCLUDE} ${LIBOMP_LINK} test-omp.c >> config.log 2>&1; then
echo "yes"
export PKG_CFLAGS="${PKG_CFLAGS} ${LIBOMP_INCLUDE}"
export PKG_LIBS="${PKG_LIBS} ${LIBOMP_LINK}"
export R_OPENMP_ENABLED=1
return
else
echo "no"
fi
fi

fi # uname=Darwin

# No support for OpenMP available
export R_OPENMP_ENABLED=0
}

detect_openmp

# Clean up.
rm -f test-omp.* a.out

if [ "${R_OPENMP_ENABLED}" = "0" ]; then
echo "***"
echo "*** OpenMP not supported!"
echo "*** parallelize operations like sorting, grouping, file reading, etc."
echo "*** Continuing installation without OpenMP support..."
echo "***"
sed -e "s|@openmp_cflags@||" src/Makevars.in > src/Makevars
else
sed -e "s|@openmp_cflags@|\$(SHLIB_OPENMP_CFLAGS)|" src/Makevars.in > src/Makevars
fi

# retain user supplied PKG_ env variables, #4664. See comments in Makevars.in too.
sed -e "s|@PKG_CFLAGS@|$PKG_CFLAGS|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
sed -e "s|@PKG_CXXFLAGS@|$PKG_CXXFLAGS|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
sed -e "s|@PKG_LIBS@|$PKG_LIBS|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars

# optional dependency on zlib
if [ "$NOZLIB" = "1" ]; then
echo "*** Compilation without compression support in fwrite"
sed -e "s|@zlib_cflags@|-DNOZLIB|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
sed -e "s|@zlib_libs@||" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
else
sed -e "s|@zlib_cflags@|${cflag}|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
sed -e "s|@zlib_libs@|${lib}|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars
fi

exit 0
Empty file modified src/.Rapp.history
100644 → 100755
Empty file.
13 changes: 0 additions & 13 deletions src/Makevars

This file was deleted.

10 changes: 10 additions & 0 deletions src/Makevars.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
PKG_CPPFLAGS = -I/usr/local/opt/libomp/include
PKG_CXXFLAGS = @PKG_CXXFLAGS@
#PKG_CFLAGS = @PKG_CFLAGS@ @openmp_cflags@ @zlib_cflags@
PKG_LIBS = @PKG_LIBS@ @openmp_cflags@ @zlib_libs@
all: $(SHLIB)
# @echo PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS)
# @echo PKG_LIBS = $(PKG_LIBS)
if [ "$(SHLIB)" != "myTAI$(SHLIB_EXT)" ]; then mv $(SHLIB) myTAI$(SHLIB_EXT); fi
if [ "$(OS)" != "Windows_NT" ] && [ `uname -s` = 'Darwin' ]; then install_name_tool -id myTAI$(SHLIB_EXT) myTAI$(SHLIB_EXT); fi

6 changes: 6 additions & 0 deletions src/Makevars.win
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS)
#PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) -lz


#all: $(SHLIB)
# mv $(SHLIB) myTAI$(SHLIB_EXT)
Empty file modified src/RcppExports.cpp
100644 → 100755
Empty file.
Empty file modified src/code.cpp
100644 → 100755
Empty file.
Empty file modified src/cpp11.cpp
100644 → 100755
Empty file.
Empty file modified src/rcpp_funcs.cpp
100644 → 100755
Empty file.
Binary file added src/symbols.rds
Binary file not shown.

0 comments on commit c06a800

Please sign in to comment.