diff options
author | Chris Liddell <chris.liddell@artifex.com> | 2021-08-12 11:49:43 +0100 |
---|---|---|
committer | Chris Liddell <chris.liddell@artifex.com> | 2021-08-13 14:53:25 +0100 |
commit | d9998a3867eb55a072864854ec823c912f2a398b (patch) | |
tree | ca9b2b1b9f9b57bbf505bb51ddc1f91bdbe8fc50 /configure.ac | |
parent | 21d5eca51fffa804883cb54b496a0ea065e8dbde (diff) | |
download | ghostpdl-d9998a3867eb55a072864854ec823c912f2a398b.tar.gz |
Have configure check for c++17 compatibility
If tesseract/leptonica is present, check if the the compiler is g++ (or
compatible) and if so, check it understands the -std=c++17 option. If not,
drop the OCR devices, and emit a warning message at the end of configure.
If the compiler is not g++ (or compatible) carry on, but emit a warning to
the effect that it's up to the user to ensure the compiler they use can handle
c++17.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 225 |
1 files changed, 123 insertions, 102 deletions
diff --git a/configure.ac b/configure.ac index eddc08e6d..9779331c5 100644 --- a/configure.ac +++ b/configure.ac @@ -833,6 +833,9 @@ TESSERACTINCLUDE= TESSERACT_LIBS= OCR_DEVS= +OCR_DEVS_WARNING_LINE1= +OCR_DEVS_WARNING_LINE2= + AC_ARG_WITH([tesseract], AS_HELP_STRING([--without-tesseract], [do not try to use the Tesseract library for OCR])) @@ -863,120 +866,129 @@ if test x$with_tesseract != xno; then CXXFLAGS="$old_cflags" done - CXXFLAGS="$save_cxxflags $CXXFLAGS_TO_USE" - - dnl -------------------------------------------------- - dnl check for sse4.1, avx, avx2 or fma - dnl -------------------------------------------------- - AC_MSG_CHECKING([sse4.1 support]) - save_cxxflags=$CXXFLAGS - TESS_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -msse4.1" - - TESS_SSE4_1="" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include <emmintrin.h> - #include <smmintrin.h>], - [__m128i input1; - unsigned char buf1[[128]]; - input1 = _mm_loadu_si128((const __m128i *)buf1); - input1 = _mm_hadd_epi32(input1, input1); - return(0); - ])], - [TESS_SSE4_1="-msse4.1"], - [TESS_SSE4_1=""]) - - if test "x$TESS_SSE4_1" != x; then - AC_MSG_RESULT(yes) - TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1" - else - AC_MSG_RESULT(no) - fi + if test x"$GXX" = x"no" || echo $CXXFLAGS_TO_USE | grep "std=c++17" ; then + if test x"$GXX" = x"no" ; then + OCR_DEVS_WARNING_LINE1="C++ compiler does not appear to be gcc or compatible, attempting to continue anyway" + OCR_DEVS_WARNING_LINE2="NOTE: that tesseract requires a C++17 compatible C++ compiler" + fi - AC_MSG_CHECKING([avx support]) - CXXFLAGS="$save_cxxflags -mavx" + CXXFLAGS="$save_cxxflags $CXXFLAGS_TO_USE" + + dnl -------------------------------------------------- + dnl check for sse4.1, avx, avx2 or fma + dnl -------------------------------------------------- + AC_MSG_CHECKING([sse4.1 support]) + save_cxxflags=$CXXFLAGS + TESS_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -msse4.1" + + TESS_SSE4_1="" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <emmintrin.h> + #include <smmintrin.h>], + [__m128i input1; + unsigned char buf1[[128]]; + input1 = _mm_loadu_si128((const __m128i *)buf1); + input1 = _mm_hadd_epi32(input1, input1); + return(0); + ])], + [TESS_SSE4_1="-msse4.1"], + [TESS_SSE4_1=""]) + + if test "x$TESS_SSE4_1" != x; then + AC_MSG_RESULT(yes) + TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1" + else + AC_MSG_RESULT(no) + fi - TESS_AVX="" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include <immintrin.h>], - [__m256d input1 = _mm256_setzero_pd(); - input1 = _mm256_hadd_pd(input1, input1); - return(0);])], - [TESS_AVX="-mavx"], - [TESS_AVX=""]) + AC_MSG_CHECKING([avx support]) + CXXFLAGS="$save_cxxflags -mavx" - if test "x$TESS_AVX" != x; then - AC_MSG_RESULT(yes) - TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX" - else - AC_MSG_RESULT(no) - fi + TESS_AVX="" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <immintrin.h>], + [__m256d input1 = _mm256_setzero_pd(); + input1 = _mm256_hadd_pd(input1, input1); + return(0);])], + [TESS_AVX="-mavx"], + [TESS_AVX=""]) - AC_MSG_CHECKING([avx2 support]) - CXXFLAGS="$save_cxxflags -mavx2" - - TESS_AVX2="" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include <immintrin.h>], - [__m256i input1; - unsigned char buf1[[256]]; - input1 = _mm256_loadu_si256((const __m256i *)buf1); - input1 = _mm256_adds_epu8(input1, input1); - return(0);])], - [TESS_AVX2="-mavx2"], - [TESS_AVX2=""]) - - if test "x$TESS_AVX2" != x; then - AC_MSG_RESULT(yes) - TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2" - else - AC_MSG_RESULT(no) - fi + if test "x$TESS_AVX" != x; then + AC_MSG_RESULT(yes) + TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX" + else + AC_MSG_RESULT(no) + fi + + AC_MSG_CHECKING([avx2 support]) + CXXFLAGS="$save_cxxflags -mavx2" + + TESS_AVX2="" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <immintrin.h>], + [__m256i input1; + unsigned char buf1[[256]]; + input1 = _mm256_loadu_si256((const __m256i *)buf1); + input1 = _mm256_adds_epu8(input1, input1); + return(0);])], + [TESS_AVX2="-mavx2"], + [TESS_AVX2=""]) + + if test "x$TESS_AVX2" != x; then + AC_MSG_RESULT(yes) + TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2" + else + AC_MSG_RESULT(no) + fi - AC_MSG_CHECKING([fma support]) - CXXFLAGS="$save_cxxflags -mfma" + AC_MSG_CHECKING([fma support]) + CXXFLAGS="$save_cxxflags -mfma" - TESS_FMA="" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include <immintrin.h>], - [__m256d input1 = _mm256_setzero_pd(); - input1 = _mm256_fmadd_pd(input1, input1, input1); - return(0);])], - [TESS_FMA="-mfma"], - [TESS_FMA=""]) + TESS_FMA="" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <immintrin.h>], + [__m256d input1 = _mm256_setzero_pd(); + input1 = _mm256_fmadd_pd(input1, input1, input1); + return(0);])], + [TESS_FMA="-mfma"], + [TESS_FMA=""]) - if test "x$TESS_FMA" != x; then - AC_MSG_RESULT(yes) - TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA" - else - AC_MSG_RESULT(no) - fi + if test "x$TESS_FMA" != x; then + AC_MSG_RESULT(yes) + TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA" + else + AC_MSG_RESULT(no) + fi - AC_MSG_CHECKING([neon support]) - CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53" + AC_MSG_CHECKING([neon support]) + CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53" - TESS_NEON="" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include "arm_neon.h"], - [int32x4_t round = vdupq_n_s32(10); - return(0);])], - [TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"], - [TESS_NEON=""]) + TESS_NEON="" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include "arm_neon.h"], + [int32x4_t round = vdupq_n_s32(10); + return(0);])], + [TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"], + [TESS_NEON=""]) - if test "x$TESS_NEON" != x; then - AC_MSG_RESULT(yes) - TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON" - else - AC_MSG_RESULT(no) - fi + if test "x$TESS_NEON" != x; then + AC_MSG_RESULT(yes) + TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON" + else + AC_MSG_RESULT(no) + fi - CXXFLAGS="$save_cxxflags" + CXXFLAGS="$save_cxxflags" - OCR_VERSION=1 - OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev" - LEPTONICAINCLUDE="include base/leptonica.mak" - TESSERACTINCLUDE="include base/tesseract.mak" - TESSERACT_LIBS="-lstdc++" + OCR_VERSION=1 + OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev" + LEPTONICAINCLUDE="include base/leptonica.mak" + TESSERACTINCLUDE="include base/tesseract.mak" + TESSERACT_LIBS="-lstdc++" + else + OCR_DEVS_WARNING_LINE1="OCR devices disabled due to incompatible compiler: tesseract requires a C++17 compatible compiler" + fi fi AC_LANG_POP() else @@ -3750,6 +3762,15 @@ if test "x$NTS_EXCLUDES" != "x" ; then echo "$NTS_EXCLUDES" fi +if test x"$OCR_DEVS_WARNING_LINE1" != x"" ; then + echo "" + AC_MSG_WARN([$OCR_DEVS_WARNING_LINE1]) + if test x"$OCR_DEVS_WARNING_LINE2" != x"" ; then + AC_MSG_WARN([$OCR_DEVS_WARNING_LINE2]) + fi + echo "" +fi + AC_CONFIG_FILES($CONFIG_FILES_LIST) AC_OUTPUT |