diff -r 243e80c77b4a -r cf951496fb3a components/r/Makefile --- a/components/r/Makefile Wed Apr 27 00:40:44 2016 -0700 +++ b/components/r/Makefile Wed Apr 27 10:12:03 2016 -0700 @@ -44,14 +44,6 @@ COMPONENT_PRE_CONFIGURE_ACTION = \ ($(CLONEY) $(SOURCE_DIR) $(@D)) -# Get rid of compiler path set in RUNPATH -LDFLAGS += $(studio_NORUNPATH) - -LDFLAGS += $(CC_BITS) - -LDFLAGS += $(studio_PIC) -LDFLAGS += $(LD_DEF_LIBS) - STUDIO_LIBS_PATH = $(USRLIBDIR)/studio/64 # R_LIBS_PATH is used when creating /usr/lib/64/R/etc/Makeconf # Using a resolved pathname here (rather than say $(USRLIBDIR64)/R/lib) so @@ -60,57 +52,57 @@ R_LIBS_PATH = /usr/lib/64/R/lib JAVA_LIBS_PATH = $(JAVA8_HOME)/jre/lib/$(MACH64)/server +LDFLAGS += $(CC_BITS) LDFLAGS += -L$(STUDIO_LIBS_PATH) -R$(STUDIO_LIBS_PATH) \ -lsunperf -lfsu -lmtsk -lpicl -lkstat +LDFLAGS += -L$(R_LIBS_PATH) -R$(R_LIBS_PATH) -# Augment the PATH and set CC/CXX/F95 such that the build environment doesn't +# Augment the PATH and set CC/CXX/FC/F77 such that the build environment doesn't # leak into usr/lib/64/etc/Makeconf and force consumers to have a setup like # our build environment to build R modules. -export PATH=$(SPRO_VROOT)/bin:$(USRBINDIR):$(GNUBIN) -CC = cc -CXX = CC -F95 = f95 +export PATH=$(GCC_ROOT)/bin:$(USRBINDIR):$(GNUBIN) +CC = gcc +CXX = g++ +FC = gfortran +F77 = gfortran ifeq ($(strip $(PARFAIT_BUILD)),yes) export PATH=$(PARFAIT_TOOLS):$(SPRO_VROOT)/bin:$(USRBINDIR):$(GNUBIN) endif - -CONFIGURE_ENV += F77="$(F95) $(CC_BITS)" -CONFIGURE_ENV += FC="$(F95) $(CC_BITS)" +# We can't use $(CC_PIC) here (which provides "-fPIC -DPIC" for the GNU +# compilers), because we fail at configure time with: +# configure: error: Building R requires the 'va_copy' system call +# .../make-rules/configure.mk:170: recipe for target +# '.../components/r/build/amd64/.configured' failed +R_PIC = -fPIC -# For now, R is built with a very specific set of optimization flags to match -# Oracle-provided builds. These should be re-evaluated when upgrading to -# Studio 12.5 or later or when next upgrading R. -studio_OPT= -xO3 -studio_XBITS= -studio_XREGS= -studio_IROPTS= -studio_C99MODE= $(studio_C99_ENABLE) -studio_ALIGN= -studio_MT= +# These CONFIGURE_ENV lines are here so that /usr/lib/64/R/etc/Makeconf (the +# configuration file used when building/installing the R CRAN packages), +# is in exactly the correct format to work properly with the GNU compilers for +# all the R CRAN packages containing C, C++, Fortran or Java code. +CONFIGURE_ENV += CC="$(CC) -std=gnu99 $(CC_BITS)" +CONFIGURE_ENV += CXX="$(CXX) $(CC_BITS)" +CONFIGURE_ENV += FC="$(FC) $(CC_BITS)" +CONFIGURE_ENV += F77="$(F77) $(CC_BITS)" -CFLAGS.studio += -xlibmieee -CXXFLAGS += -std=c++11 -# We (the Userland) team don't need -D__MATHERR_RENAME_EXCEPTION for the -# creation of the R packages we provide in Solaris. It would be needed by -# our customers that try to install R packages that use C++. And they would -# be using the version of the Studio compilers on their machine(s) to do this. -# Studio 12.5 will hopefully automatically provide this definition when C++ -# code is compiled with "-std=c++11". When that version of the Studio -# compilers is released, we should encourage customers to install it, but -# for those still using Studio 12.4, this definition will continue to be needed. -CXXFLAGS += -D__MATHERR_RENAME_EXCEPTION -LDFLAGS += -L$(R_LIBS_PATH) -R$(R_LIBS_PATH) +CONFIGURE_ENV += C_VISIBILITY="-fvisibility=hidden" +CONFIGURE_ENV += CFLAGS="-g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" +CONFIGURE_ENV += CPICFLAGS="$(R_PIC)" -CONFIGURE_ENV += CPICFLAGS="$(studio_PIC)" -CONFIGURE_ENV += FPICFLAGS="$(studio_PIC)" -CONFIGURE_ENV += FFLAGS="$(studio_OPT) $(CC_BITS)" -CONFIGURE_ENV += FCFLAGS="$(studio_OPT) $(CC_BITS)" +CONFIGURE_ENV += CXXFLAGS="$(CC_BITS) -g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" +CONFIGURE_ENV += CXXPICFLAGS="$(R_PIC)" +CONFIGURE_ENV += CXX1X="g++" +CONFIGURE_ENV += CXX1XFLAGS="$(CC_BITS) -g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" +CONFIGURE_ENV += CXX1XPICFLAGS="$(R_PIC)" +CONFIGURE_ENV += CXX1XSTD="-std=c++11" + +CONFIGURE_ENV += FCFLAGS="-g -O2 $(CC_BITS)" +CONFIGURE_ENV += F77_VISIBILITY="-fvisibility=hidden" +CONFIGURE_ENV += FFLAGS="-g -O2 $(CC_BITS)" CONFIGURE_ENV += FCLIBS="-lsunperf -lfsu -lsunmath" -CONFIGURE_ENV += FLIBS="-lsunperf -lfsu -lsunmath" -# Needed so that R packages using C++ code can link against the standard -# C++ libraries. -CONFIGURE_ENV += SHLIB_CXXLDFLAGS="-lCrunG3" +CONFIGURE_ENV += FLIBS="-lsunperf -lfsu -lsunmath -lgfortran -lm" +CONFIGURE_ENV += FCPICFLAGS="$(R_PIC)" +CONFIGURE_ENV += FPICFLAGS="$(R_PIC)" # Set the various Java variables otherwise it auto-detects the 32-bit ones. CONFIGURE_ENV += JAVA_CPPFLAGS="-I$(JAVA8_HOME)/jre/../include -I$(JAVA8_HOME)/jre/../include/solaris" @@ -130,16 +122,6 @@ CONFIGURE_OPTIONS += --with-tcltk CONFIGURE_OPTIONS += --enable-prebuilt-html -# Supply Makeconf files for both the Studio and the GNU C, C++ and Fortran -# compilers. -COMPONENT_POST_INSTALL_ACTION += \ - $(MV) $(PROTOUSRLIBDIR64)/R/etc/Makeconf \ - $(PROTOUSRLIBDIR64)/R/etc/Makeconf.Studio ; \ - $(CP) $(PROTOUSRLIBDIR64)/R/etc/Makeconf.Studio \ - $(PROTOUSRLIBDIR64)/R/etc/Makeconf.GNU ; \ - (cd $(PROTOUSRLIBDIR64)/R/etc ; $(GPATCH) --strip=0 \ - < $(COMPONENT_DIR)/files/Makeconf-GNU.patch) ; - COMPONENT_PRE_TEST_ACTION = \ $(RM) $(BUILD_DIR_64)/tests/Examples/*.prev @@ -183,7 +165,7 @@ REQUIRED_PACKAGES += library/readline REQUIRED_PACKAGES += library/zlib REQUIRED_PACKAGES += shell/bash -REQUIRED_PACKAGES += system/library/fortran-runtime +REQUIRED_PACKAGES += system/library/gcc/gcc-c-runtime REQUIRED_PACKAGES += system/library/iconv REQUIRED_PACKAGES += system/library/math REQUIRED_PACKAGES += system/library/sunperf