On 6/6/2016 8:22 AM, Rolf Eike Beer wrote:
-drop the FREETYPE_NAMES_* variables, just put the names in the find_library 
calls
Done.
-please keep the old name for the release variable for backward compatibility. 
That means that you have to set/unset FREETYPE_LIBRARY_RELEASE around the call 
to SelectLibraryConfigurations
Not completely sure about this. I unset them after the
select_library_configurations call but my (shallow) understanding is
that the call sets FREETYPE_LIBRARY from them so I'm not sure what the
backward compatibility issue is.

One can call "cmake -D FREETYPE_LIBRARY=..." from the command line and expect 
that this will end up in the cache as it did before. Otherwise that information would be 
lost on subsequent CMake runs in the same build directory.

And don't unset() the variables used in find_library(), they should be 
accessible and will end up in the cache. Just add FREETYPE_LIBRARY_DEBUG to the 
mark_as_advanced() call at the bottom of the file.
Do you mean that I should use FREETYPE_LIBRARY instead of
FREETYPE_LIBRARY_RELEASE?

Yes.

-if you want to de-messify that thing you could put all the HINTS and PATHS 
stuff into a variable as that is shared between all find_path/find_library calls
Done for PATHS. Since HINTS is just one item I didn't think it was
worth it. Maybe if the ENV process costs some time it might be though.

You can put everything starting at the HINTS into that variable. It will be 
expanded before calling find_* so the argument list gets restored there. E.g. 
this is done in FindOpenSSL.cmake.
OK, but the PATH_SUFFIXES for the find_path and find_library calls are
different so I can't include that in this uber-variable.

Yes.

-please add a short note in Help/release/dev/ for the changelog
It might be best for you to polish and submit this when you are happy
with it. I'm really a CMake noob!

We're just changing that, no?

Look here for an example:

https://cmake.org/gitweb?p=cmake.git;a=blob;f=Help/release/dev/FindOpenCL-imported-target.rst;h=259c745b0b39c3e83efa051f3dfbcc05787f9a5a;hb=refs/heads/next
OK, I can probably figure out how to submit a patch and dev note to
the developers mailing list once we resolve these last few (?) issues.

Sure. The quick&dirty thing is:

git clone [email protected]:cmake.git
cd cmake
git config user.email "[email protected]"
git config user.name "Stuart Mentzer"
# hack on your stuff
git add Modules/FindFreetype.cmake Help/release/dev/freetype-debug-libs.rst
git commit
git format-patch -1

HTH

Eike
OK, does this look "done"?

Stuart
#.rst:
# FindFreetype
# ------------
#
# Locate FreeType library
#
# This module defines
#
# ::
#
#   FREETYPE_LIBRARIES, the library to link against
#   FREETYPE_FOUND, if false, do not try to link to FREETYPE
#   FREETYPE_INCLUDE_DIRS, where to find headers.
#   FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8)
#   This is the concatenation of the paths:
#   FREETYPE_INCLUDE_DIR_ft2build
#   FREETYPE_INCLUDE_DIR_freetype2
#
#
#
# $FREETYPE_DIR is an environment variable that would correspond to the
# ./configure --prefix=$FREETYPE_DIR used in building FREETYPE.

#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
#  License text for the above reference.)

# Created by Eric Wing.
# Modifications by Alexander Neundorf.
# This file has been renamed to "FindFreetype.cmake" instead of the correct
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.

# Ugh, FreeType seems to use some #include trickery which
# makes this harder than it should be. It looks like they
# put ft2build.h in a common/easier-to-find location which
# then contains a #include to a more specific header in a
# more specific location (#include <freetype/config/ftheader.h>).
# Then from there, they need to set a bunch of #define's
# so you can do something like:
# #include FT_FREETYPE_H
# Unfortunately, using CMake's mechanisms like include_directories()
# wants explicit full paths and this trickery doesn't work too well.
# I'm going to attempt to cut out the middleman and hope
# everything still works.

set(FREETYPE_FIND_ARGS
  HINTS
    ENV FREETYPE_DIR
  PATHS
    /usr/X11R6
    /usr/local/X11R6
    /usr/local/X11
    /usr/freeware
    ENV GTKMM_BASEPATH
    [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
    [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
)

find_path(
  FREETYPE_INCLUDE_DIR_ft2build
  ft2build.h
  ${FREETYPE_FIND_ARGS}
  PATH_SUFFIXES
    include/freetype2
    include
    freetype2
)

find_path(
  FREETYPE_INCLUDE_DIR_freetype2
  NAMES
    freetype/config/ftheader.h
    config/ftheader.h
  ${FREETYPE_FIND_ARGS}
  PATH_SUFFIXES
    include/freetype2
    include
    freetype2
)

find_library(FREETYPE_LIBRARY
  NAMES
    freetype
    libfreetype
    freetype219
  ${FREETYPE_FIND_ARGS}
  PATH_SUFFIXES
    lib
)
find_library(FREETYPE_LIBRARY_DEBUG
  NAMES
    freetyped
    libfreetyped
    freetype219d
  ${FREETYPE_FIND_ARGS}
  PATH_SUFFIXES
    lib
)
include(SelectLibraryConfigurations)
select_library_configurations(FREETYPE)

unset(FREETYPE_FIND_ARGS)

# set the user variables
if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
  set(FREETYPE_INCLUDE_DIRS 
"${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
  list(REMOVE_DUPLICATES FREETYPE_INCLUDE_DIRS)
endif()
set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")

if(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
endif()

if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
  file(STRINGS "${FREETYPE_H}" freetype_version_str
       REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")

  unset(FREETYPE_VERSION_STRING)
  foreach(VPART MAJOR MINOR PATCH)
    foreach(VLINE ${freetype_version_str})
      if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
        set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
        if(FREETYPE_VERSION_STRING)
          set(FREETYPE_VERSION_STRING 
"${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
        else()
          set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
        endif()
        unset(FREETYPE_VERSION_PART)
      endif()
    endforeach()
  endforeach()
endif()


# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)

find_package_handle_standard_args(
  Freetype
  REQUIRED_VARS
    FREETYPE_LIBRARY
    FREETYPE_INCLUDE_DIRS
  VERSION_VAR
    FREETYPE_VERSION_STRING
)

mark_as_advanced(
  FREETYPE_LIBRARY
  FREETYPE_LIBRARY_DEBUG
  FREETYPE_INCLUDE_DIR_freetype2
  FREETYPE_INCLUDE_DIR_ft2build
)
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to