From 048f2ca0636292a82fc070faa09e99a2e8c87614 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 29 Apr 2020 14:44:16 -0500 Subject: [PATCH 1/3] Remove unnecessary PCRE2 dependency on R 3.x For more details on PCRE2 usage in R 3.x, see: https://github.com/wch/r-source/blob/7d25524f8b83d63979cc18f0914a321bfbe9a819/m4/R.m4#L3056-L3058 https://github.com/wch/r-source/blob/7d25524f8b83d63979cc18f0914a321bfbe9a819/m4/R.m4#L3139-L3155 --- builder/build.sh | 14 ++++++++++++++ builder/package.centos-6 | 9 +++++++-- builder/package.centos-7 | 9 +++++++-- builder/package.centos-8 | 9 +++++++-- builder/package.debian-10 | 9 +++++++-- builder/package.debian-9 | 9 +++++++-- builder/package.opensuse-15 | 9 +++++++-- builder/package.opensuse-42 | 9 +++++++-- builder/package.ubuntu-1604 | 9 +++++++-- builder/package.ubuntu-1804 | 9 +++++++-- builder/package.ubuntu-2004 | 9 +++++++-- 11 files changed, 84 insertions(+), 20 deletions(-) diff --git a/builder/build.sh b/builder/build.sh index aac683a..01461ef 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -65,6 +65,20 @@ compile_r() { build_flag='' fi + # Avoid a PCRE2 dependency for R 3.5 and 3.6. R 3.x uses PCRE1, but R 3.5+ + # will link against PCRE2 if present, although it is not actually used. + # Since there's no way to disable this in the configure script, and we need + # PCRE2 for R 4.x, we hide PCRE2 from the configure script by temporarily + # removing the pkg-config file and pcre2-config script. + if [[ "${1}" =~ ^3 ]] && pkg-config --exists libpcre2-8; then + mkdir -p /tmp/pcre2 + pc_dir=$(pkg-config --variable pcfiledir libpcre2-8) + mv ${pc_dir}/libpcre2-8.pc /tmp/pcre2 + config_bin=$(which pcre2-config) + mv ${config_bin} /tmp/pcre2 + trap "{ mv /tmp/pcre2/libpcre2-8.pc ${pc_dir}; mv /tmp/pcre2/pcre2-config ${config_bin}; }" EXIT + fi + # Default configure options. Some Dockerfiles override this with an ENV directive. default_configure_options="\ --enable-R-shlib \ diff --git a/builder/package.centos-6 b/builder/package.centos-6 index 93fadd8..a855002 100644 --- a/builder/package.centos-6 +++ b/builder/package.centos-6 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/centos-6 ]]; then mkdir -p /tmp/output/centos-6 fi +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + # create post-install script required for openblas cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep @@ -60,8 +66,7 @@ fpm \ -d make \ -d openblas-devel \ -d pango \ - -d pcre-devel \ - -d pcre2-devel \ + -d ${pcre_lib} \ -d tcl \ -d tk \ -d unzip \ diff --git a/builder/package.centos-7 b/builder/package.centos-7 index e927d8f..1623d6a 100644 --- a/builder/package.centos-7 +++ b/builder/package.centos-7 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/centos-7 ]]; then mkdir -p /tmp/output/centos-7 fi +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + # create post-install script required for openblas cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep @@ -45,8 +51,7 @@ fpm \ -d make \ -d openblas-devel \ -d pango \ - -d pcre-devel \ - -d pcre2-devel \ + -d ${pcre_lib} \ -d tcl \ -d tk \ -d unzip \ diff --git a/builder/package.centos-8 b/builder/package.centos-8 index a873d1d..4568261 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -2,6 +2,12 @@ if [[ ! -d /tmp/output/centos-8 ]]; then mkdir -p /tmp/output/centos-8 fi +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + # create post-install script required for openblas cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep @@ -43,8 +49,7 @@ fpm \ -d make \ -d openblas-threads \ -d pango \ - -d pcre-devel \ - -d pcre2-devel \ + -d ${pcre_lib} \ -d tcl \ -d tk \ -d unzip \ diff --git a/builder/package.debian-10 b/builder/package.debian-10 index afacab5..5d9dfc9 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/debian-10 ]]; then mkdir -p /tmp/output/debian-10 fi +# R 3.x requires PCRE1 +pcre_lib='libpcre2-8-0' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='libpcre3' +fi + fpm \ -s dir \ -t deb \ @@ -33,8 +39,7 @@ fpm \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ - -d libpcre2-8-0 \ - -d libpcre3 \ + -d ${pcre_lib} \ -d libpng16-16 \ -d libreadline7 \ -d libtcl8.6 \ diff --git a/builder/package.debian-9 b/builder/package.debian-9 index ee90933..b60d330 100644 --- a/builder/package.debian-9 +++ b/builder/package.debian-9 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/debian-9 ]]; then mkdir -p /tmp/output/debian-9 fi +# R 3.x requires PCRE1 +pcre_lib='libpcre2-8-0' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='libpcre3' +fi + fpm \ -s dir \ -t deb \ @@ -33,8 +39,7 @@ fpm \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ - -d libpcre2-8-0 \ - -d libpcre3 \ + -d ${pcre_lib} \ -d libpng16-16 \ -d libreadline7 \ -d libtcl8.6 \ diff --git a/builder/package.opensuse-15 b/builder/package.opensuse-15 index 834a8a9..25b7f24 100644 --- a/builder/package.opensuse-15 +++ b/builder/package.opensuse-15 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/opensuse-15 ]]; then mkdir -p /tmp/output/opensuse-15 fi +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + # create post-install script required for openblas cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep @@ -50,8 +56,7 @@ fpm \ -d libtiff5 \ -d make \ -d openblas-devel \ - -d pcre-devel \ - -d pcre2-devel \ + -d ${pcre_lib} \ -d tar \ -d tcl \ -d tk \ diff --git a/builder/package.opensuse-42 b/builder/package.opensuse-42 index 4ee631d..5bb72c9 100644 --- a/builder/package.opensuse-42 +++ b/builder/package.opensuse-42 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/opensuse-42 ]]; then mkdir -p /tmp/output/opensuse-42 fi +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + # create post-install script required for openblas cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep @@ -48,8 +54,7 @@ fpm \ -d libtiff5 \ -d make \ -d openblas-devel \ - -d pcre-devel \ - -d pcre2-devel \ + -d ${pcre_lib} \ -d tar \ -d tcl \ -d tk \ diff --git a/builder/package.ubuntu-1604 b/builder/package.ubuntu-1604 index 27b797b..e9c9034 100644 --- a/builder/package.ubuntu-1604 +++ b/builder/package.ubuntu-1604 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/ubuntu-1604 ]]; then mkdir -p /tmp/output/ubuntu-1604 fi +# R 3.x requires PCRE1 +pcre_lib='libpcre2-8-0' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='libpcre3' +fi + fpm \ -s dir \ -t deb \ @@ -33,8 +39,7 @@ fpm \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ - -d libpcre2-8-0 \ - -d libpcre3 \ + -d ${pcre_lib} \ -d libpng16-16 \ -d libreadline6 \ -d libtcl8.6 \ diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index e858c1f..2d9d8d5 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/ubuntu-1804 ]]; then mkdir -p /tmp/output/ubuntu-1804 fi +# R 3.x requires PCRE1 +pcre_lib='libpcre2-8-0' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='libpcre3' +fi + fpm \ -s dir \ -t deb \ @@ -33,8 +39,7 @@ fpm \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ - -d libpcre2-8-0 \ - -d libpcre3 \ + -d ${pcre_lib} \ -d libpng16-16 \ -d libreadline7 \ -d libtcl8.6 \ diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index 60f8f28..f615651 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -4,6 +4,12 @@ if [[ ! -d /tmp/output/ubuntu-2004 ]]; then mkdir -p /tmp/output/ubuntu-2004 fi +# R 3.x requires PCRE1 +pcre_lib='libpcre2-8-0' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='libpcre3' +fi + fpm \ -s dir \ -t deb \ @@ -34,8 +40,7 @@ fpm \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ - -d libpcre2-8-0 \ - -d libpcre3 \ + -d ${pcre_lib} \ -d libpng16-16 \ -d libreadline8 \ -d libtcl8.6 \ From 650d3650ce13da3a83205d4d57226fecfcf73e14 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 14 May 2020 13:56:58 -0500 Subject: [PATCH 2/3] Switch to dev PCRE in Ubuntu/Debian packages For consistency with CentOS and SUSE, and because packages that link against libR like rJava need PCRE dev headers to install from source. --- builder/package.debian-10 | 4 ++-- builder/package.debian-9 | 4 ++-- builder/package.ubuntu-1604 | 4 ++-- builder/package.ubuntu-1804 | 4 ++-- builder/package.ubuntu-2004 | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/builder/package.debian-10 b/builder/package.debian-10 index 5d9dfc9..c010223 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -5,9 +5,9 @@ if [[ ! -d /tmp/output/debian-10 ]]; then fi # R 3.x requires PCRE1 -pcre_lib='libpcre2-8-0' +pcre_lib='libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3' + pcre_lib='libpcre3-dev' fi fpm \ diff --git a/builder/package.debian-9 b/builder/package.debian-9 index b60d330..5842f3d 100644 --- a/builder/package.debian-9 +++ b/builder/package.debian-9 @@ -5,9 +5,9 @@ if [[ ! -d /tmp/output/debian-9 ]]; then fi # R 3.x requires PCRE1 -pcre_lib='libpcre2-8-0' +pcre_lib='libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3' + pcre_lib='libpcre3-dev' fi fpm \ diff --git a/builder/package.ubuntu-1604 b/builder/package.ubuntu-1604 index e9c9034..e52065e 100644 --- a/builder/package.ubuntu-1604 +++ b/builder/package.ubuntu-1604 @@ -5,9 +5,9 @@ if [[ ! -d /tmp/output/ubuntu-1604 ]]; then fi # R 3.x requires PCRE1 -pcre_lib='libpcre2-8-0' +pcre_lib='libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3' + pcre_lib='libpcre3-dev' fi fpm \ diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 2d9d8d5..19eeebc 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -5,9 +5,9 @@ if [[ ! -d /tmp/output/ubuntu-1804 ]]; then fi # R 3.x requires PCRE1 -pcre_lib='libpcre2-8-0' +pcre_lib='libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3' + pcre_lib='libpcre3-dev' fi fpm \ diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index f615651..9199b7b 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -5,9 +5,9 @@ if [[ ! -d /tmp/output/ubuntu-2004 ]]; then fi # R 3.x requires PCRE1 -pcre_lib='libpcre2-8-0' +pcre_lib='libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3' + pcre_lib='libpcre3-dev' fi fpm \ From d49f9104dbdd617ef18e17591f5fac2de7cd2ae1 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 14 May 2020 14:53:06 -0500 Subject: [PATCH 3/3] Add -dev libs for R packages that link against libR For consistency with CentOS and SUSE, and to install packages that link against libR from source, like rJava. See `R CMD config --ldflags` and https://cran.r-project.org/doc/manuals/r-devel/R-exts.html#Compiling-against-the-R-library --- builder/package.debian-10 | 8 ++++---- builder/package.debian-9 | 8 ++++---- builder/package.ubuntu-1604 | 8 ++++---- builder/package.ubuntu-1804 | 8 ++++---- builder/package.ubuntu-2004 | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/builder/package.debian-10 b/builder/package.debian-10 index c010223..f1319fc 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -27,14 +27,14 @@ fpm \ -d g++ \ -d gcc \ -d gfortran \ - -d libbz2-1.0 \ + -d libbz2-dev \ -d libc6 \ -d libcairo2 \ -d libcurl4-openssl-dev \ -d libglib2.0-0 \ -d libgomp1 \ - -d libicu63 \ - -d liblzma5 \ + -d libicu-dev \ + -d liblzma-dev \ -d libopenblas-dev \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ @@ -51,7 +51,7 @@ fpm \ -d ucf \ -d unzip \ -d zip \ - -d zlib1g \ + -d zlib1g-dev \ /opt/R/${R_VERSION} shopt -s extglob diff --git a/builder/package.debian-9 b/builder/package.debian-9 index 5842f3d..508a15d 100644 --- a/builder/package.debian-9 +++ b/builder/package.debian-9 @@ -27,14 +27,14 @@ fpm \ -d g++ \ -d gcc \ -d gfortran \ - -d libbz2-1.0 \ + -d libbz2-dev \ -d libc6 \ -d libcairo2 \ -d libcurl4-openssl-dev \ -d libglib2.0-0 \ -d libgomp1 \ - -d libicu57 \ - -d liblzma5 \ + -d libicu-dev \ + -d liblzma-dev \ -d libopenblas-dev \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ @@ -51,7 +51,7 @@ fpm \ -d ucf \ -d unzip \ -d zip \ - -d zlib1g \ + -d zlib1g-dev \ /opt/R/${R_VERSION} shopt -s extglob diff --git a/builder/package.ubuntu-1604 b/builder/package.ubuntu-1604 index e52065e..eb4b281 100644 --- a/builder/package.ubuntu-1604 +++ b/builder/package.ubuntu-1604 @@ -26,15 +26,15 @@ fpm \ -d g++ \ -d gcc \ -d gfortran \ - -d libbz2-1.0 \ + -d libbz2-dev \ -d libc6 \ -d libcairo2 \ -d libcurl3 \ -d libglib2.0-0 \ -d libgomp1 \ - -d libicu55 \ + -d libicu-dev \ -d libjpeg8 \ - -d liblzma5 \ + -d liblzma-dev \ -d libopenblas-dev \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ @@ -51,7 +51,7 @@ fpm \ -d ucf \ -d unzip \ -d zip \ - -d zlib1g \ + -d zlib1g-dev \ /opt/R/${R_VERSION} shopt -s extglob diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 19eeebc..123d9ed 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -26,15 +26,15 @@ fpm \ -d g++ \ -d gcc \ -d gfortran \ - -d libbz2-1.0 \ + -d libbz2-dev \ -d libc6 \ -d libcairo2 \ -d libcurl4 \ -d libglib2.0-0 \ -d libgomp1 \ - -d libicu60 \ + -d libicu-dev \ -d libjpeg8 \ - -d liblzma5 \ + -d liblzma-dev \ -d libopenblas-dev \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ @@ -51,7 +51,7 @@ fpm \ -d ucf \ -d unzip \ -d zip \ - -d zlib1g \ + -d zlib1g-dev \ /opt/R/${R_VERSION} shopt -s extglob diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index 9199b7b..191ce89 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -26,17 +26,17 @@ fpm \ -d g++ \ -d gcc \ -d gfortran \ - -d libbz2-1.0 \ + -d libbz2-dev \ -d libblas-dev \ -d libc6 \ -d libcairo2 \ -d libcurl4 \ -d libglib2.0-0 \ -d libgomp1 \ - -d libicu66 \ + -d libicu-dev \ -d libjpeg8 \ -d liblapack-dev \ - -d liblzma5 \ + -d liblzma-dev \ -d libpango-1.0-0 \ -d libpangocairo-1.0-0 \ -d libpaper-utils \ @@ -52,7 +52,7 @@ fpm \ -d ucf \ -d unzip \ -d zip \ - -d zlib1g \ + -d zlib1g-dev \ /opt/R/${R_VERSION} shopt -s extglob