summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorChris Liddell <chris.liddell@artifex.com>2021-08-12 11:49:43 +0100
committerChris Liddell <chris.liddell@artifex.com>2021-08-13 14:53:25 +0100
commitd9998a3867eb55a072864854ec823c912f2a398b (patch)
treeca9b2b1b9f9b57bbf505bb51ddc1f91bdbe8fc50 /configure.ac
parent21d5eca51fffa804883cb54b496a0ea065e8dbde (diff)
downloadghostpdl-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.ac225
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