1 #
   2 # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 ################################################################################
  27 # Check if a potential freeype library match is correct and usable
  28 ################################################################################
  29 AC_DEFUN([LIB_CHECK_POTENTIAL_FREETYPE],
  30 [
  31   POTENTIAL_FREETYPE_INCLUDE_PATH="$1"
  32   POTENTIAL_FREETYPE_LIB_PATH="$2"
  33   METHOD="$3"
  34 
  35   # Let's start with an optimistic view of the world :-)
  36   FOUND_FREETYPE=yes
  37 
  38   # First look for the canonical freetype main include file ft2build.h.
  39   if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
  40     # Oh no! Let's try in the freetype2 directory.
  41     POTENTIAL_FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH/freetype2"
  42     if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
  43       # Fail.
  44       FOUND_FREETYPE=no
  45     fi
  46   fi
  47 
  48   if test "x$FOUND_FREETYPE" = "xyes"; then
  49     # Include file found, let's continue the sanity check.
  50     AC_MSG_NOTICE([Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD])
  51 
  52     FREETYPE_LIB_NAME="${LIBRARY_PREFIX}${FREETYPE_BASE_NAME}${SHARED_LIBRARY_SUFFIX}"
  53     if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME"; then
  54       AC_MSG_NOTICE([Could not find $POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME. Ignoring location.])
  55       FOUND_FREETYPE=no
  56     else
  57       if test "x$OPENJDK_TARGET_OS" = "xsolaris" \
  58           && test -s "$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR/$FREETYPE_LIB_NAME"; then
  59         # Found lib in isa dir, use that instead.
  60         POTENTIAL_FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR"
  61         AC_MSG_NOTICE([Rewriting to use $POTENTIAL_FREETYPE_LIB_PATH instead])
  62       fi
  63     fi
  64   fi
  65 
  66   if test "x$FOUND_FREETYPE" = "xyes"; then
  67     FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH"
  68     AC_MSG_CHECKING([for freetype includes])
  69     AC_MSG_RESULT([$FREETYPE_INCLUDE_PATH])
  70     FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH"
  71     AC_MSG_CHECKING([for freetype libraries])
  72     AC_MSG_RESULT([$FREETYPE_LIB_PATH])
  73   fi
  74 ])
  75 
  76 ################################################################################
  77 # Setup freetype (The FreeType2 font rendering library)
  78 ################################################################################
  79 AC_DEFUN_ONCE([LIB_SETUP_FREETYPE],
  80 [
  81   AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype],
  82       [specify whether to use 'system' or 'bundled' freetype. Other values are errors.
  83        The selected option applies to both build time and run time.
  84        The default behaviour can be platform dependent.
  85        If using 'system' and either the include files or libraries cannot be
  86        located automatically, then additionally specify both using
  87        --with-freetype-include and --with-freetype-lib.])])
  88   AC_ARG_WITH(freetype-include, [AS_HELP_STRING([--with-freetype-include],
  89       [specify directory for the freetype include files])])
  90   AC_ARG_WITH(freetype-lib, [AS_HELP_STRING([--with-freetype-lib],
  91       [specify directory for the freetype library])])
  92 
  93   # This setup is to verify access to system installed freetype header and libraries.
  94   # On Windows and MacOS this does not apply and using these options will report an error.
  95   # On other platforms (Linux, Solaris, and perhaps AIX), they will default to using
  96   # the system libraries. If they are found automatically, nothing need be done.
  97   # If they are not found, the configure "--with-freetype-*" options may be used to fix that.
  98   # If the preference is to bundle on these platforms then use --with-freetype=bundled
  99   FREETYPE_BASE_NAME=freetype
 100   FREETYPE_CFLAGS=
 101   FREETYPE_LIBS=
 102 
 103   if (test "x$with_freetype_include" = "x"  && test "x$with_freetype_lib" != "x") || \
 104      (test "x$with_freetype_include" != "x"  && test "x$with_freetype_lib" = "x"); then
 105        AC_MSG_ERROR(['must specify both or neither of --with_freetype_include and --with_freetype_lib])
 106   fi
 107 
 108   FREETYPE_TO_USE=bundled
 109   if (test "x$OPENJDK_TARGET_OS" != "xwindows" && test "x$OPENJDK_TARGET_OS" != "xmacosx"); then
 110     FREETYPE_TO_USE=system
 111   fi
 112   if (test "x$with_freetype" != "x"); then
 113     if (test "x$with_freetype" = "xsystem"); then
 114       FREETYPE_TO_USE=system
 115     elif (test "x$with_freetype" = "xbundled"); then
 116       FREETYPE_TO_USE=bundled
 117       if (test "x$with_freetype_include" != "x"  || test "x$with_freetype_lib" != "x"); then
 118         AC_MSG_ERROR(['bundled' cannot be specified with --with_freetype_include and --with_freetype_lib])
 119       fi
 120     else
 121        AC_MSG_ERROR(['valid values for --with-freetype are 'system' and 'bundled'])
 122     fi
 123   fi
 124 
 125   if (test "x$with_freetype_include" != "x"  && test "x$with_freetype_lib" != "x"); then 
 126       FREETYPE_TO_USE=system
 127   fi
 128 
 129   if (test "x$FREETYPE_TO_USE" = "xsystem") && \
 130      (test "x$OPENJDK_TARGET_OS" = "xwindows" || test "x$OPENJDK_TARGET_OS" = "xmacosx"); then
 131        AC_MSG_ERROR([Only bundled freetype can be specified on Mac and Windows])
 132   fi
 133 
 134   if (test "x$with_freetype_include" != "x"); then
 135     POTENTIAL_FREETYPE_INCLUDE_PATH="$with_freetype_include"
 136   fi
 137   if (test "x$with_freetype_lib" != "x"); then
 138     POTENTIAL_FREETYPE_LIB_PATH="$with_freetype_lib"
 139   fi
 140 
 141   if (test "x$FREETYPE_TO_USE" = "xsystem"); then
 142     if (test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" != "x" && test "x$POTENTIAL_FREETYPE_LIB_PATH" != "x"); then
 143       # Okay, we got it. Check that it works.
 144       LIB_CHECK_POTENTIAL_FREETYPE($POTENTIAL_FREETYPE_INCLUDE_PATH, $POTENTIAL_FREETYPE_LIB_PATH, [--with-freetype])
 145       if (test "x$FOUND_FREETYPE" != "xyes"); then
 146         AC_MSG_ERROR([Can not find or use freetype at location given by --with-freetype-lib|include])
 147       fi
 148     else
 149       # User did not specify a location, but asked for system freetype. Try to locate it.
 150 
 151       # If we have a sysroot, assume that's where we are supposed to look and skip pkg-config.
 152       if (test "x$SYSROOT" = "x"); then
 153         if (test "x$FOUND_FREETYPE" != "xyes"); then
 154           # Check modules using pkg-config, but only if we have it (ugly output results otherwise)
 155           if (test "x$PKG_CONFIG" != "x"); then
 156             PKG_CHECK_MODULES(FREETYPE, freetype2, [FOUND_FREETYPE=yes], [FOUND_FREETYPE=no])
 157             if (test "x$FOUND_FREETYPE" = "xyes"); then
 158               # On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us.
 159               FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's/-lz//g'`
 160               # 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64
 161               if (test "x$OPENJDK_TARGET_OS" = "xsolaris" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"); then
 162                 FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's?/lib?/lib/amd64?g'`
 163               fi
 164               AC_MSG_CHECKING([for freetype])
 165               AC_MSG_RESULT([yes (using pkg-config)])
 166             fi
 167           fi
 168         fi
 169       fi
 170 
 171       if (test "x$FOUND_FREETYPE" != "xyes"); then
 172         # Check in well-known locations
 173         FREETYPE_BASE_DIR="$SYSROOT/usr"
 174         LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
 175 
 176         if (test "x$FOUND_FREETYPE" != "xyes"); then
 177           FREETYPE_BASE_DIR="$SYSROOT/usr/X11"
 178           LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
 179         fi
 180         if (test "x$FOUND_FREETYPE" != "xyes"); then
 181           FREETYPE_BASE_DIR="$SYSROOT/usr/local"
 182           LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
 183         fi
 184 
 185         if (test "x$FOUND_FREETYPE" != "xyes"); then
 186           FREETYPE_BASE_DIR="$SYSROOT/usr"
 187           if (test "x$OPENJDK_TARGET_CPU_BITS" = "x64"); then
 188             LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/$OPENJDK_TARGET_CPU-linux-gnu], [well-known location])
 189             if (test "x$FOUND_FREETYPE" != "xyes"); then
 190               # On ppc64/ppc64le/s390x the 64-bit libraries may be under 'lib64/'
 191               LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib64], [well-known location])
 192             fi
 193           else
 194             LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/i386-linux-gnu], [well-known location])
 195             if (test "x$FOUND_FREETYPE" != "xyes"); then
 196               LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib32], [well-known location])
 197             fi
 198           fi
 199         fi
 200       fi # end check in well-known locations
 201 
 202       if (test "x$FOUND_FREETYPE" != "xyes"); then
 203         HELP_MSG_MISSING_DEPENDENCY([freetype])
 204         AC_MSG_ERROR([Could not find freetype! $HELP_MSG ])
 205       fi
 206     fi # end user specified settings
 207 
 208     # Set FREETYPE_CFLAGS, _LIBS and _LIB_PATH from include and lib dir.
 209     if (test "x$FREETYPE_CFLAGS" = "x"); then
 210       if (test -d $FREETYPE_INCLUDE_PATH/freetype2/freetype); then
 211         FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH/freetype2 -I$FREETYPE_INCLUDE_PATH"
 212       else
 213         FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH"
 214       fi
 215     fi
 216 
 217     if (test "x$FREETYPE_LIBS" = "x"); then
 218       FREETYPE_LIBS="-L$FREETYPE_LIB_PATH -l$FREETYPE_BASE_NAME"
 219     fi
 220   fi
 221 
 222 
 223     AC_MSG_RESULT([Using freetype: $FREETYPE_TO_USE])
 224 
 225 
 226   AC_SUBST(FREETYPE_TO_USE)
 227   AC_SUBST(FREETYPE_CFLAGS)
 228   AC_SUBST(FREETYPE_LIBS)
 229 ])