From: Alan W. I. <ir...@be...> - 2014-07-04 04:00:02
|
Forwarded to the PLplot-devel mailing list... ---------- Forwarded message ---------- Date: Tue, 1 Jul 2014 21:35:49 -0700 From: Greg Jung <gv...@gm...> To: Alan W. Irwin <ir...@be...> Subject: Re: [cmake-developers] FreeType headers almost there but not quite ... (SUMMARY Problem: I use PKG-CONFIG and get CAIRO_INCLUDE_DIRS, etc. as needed for downstream processing, but I never set the key variable FREETYPE_INCLUDE_DIR which is treated as special-case animal.) Hi again, I went back and was able to run cmake without my modifications, and the build proceeded fine ... oh but with_freetype was set to off, so that doesn't count. The same problem that bothered me when I first dove into the CMAKE system is still pestering me: Freetype library. The module in the plplot distribution works fine for only linux/unix hosts: FIND_PATH(FREETYPE_INCLUDE_DIR freetype/config/ftheader.h /usr/local/include/freetype2 /usr/include/freetype2 ) In MSYS case, /usr/local means nothing to CMAKE. The cmake distribution has a (more inclusive, shotgun) approach and I originally modified some (cmake-2.8).cmake modules to a) find the /MSYS and /mingw anchors and set appropriate values for CMAKE_SYSTEM_PREFIX_PATH, CMAKE _SYSTEM_LIBRARY_PATH, etc. in the MSYS case, b) parse environment variable PKG_CONFIG_PATH and use pkg-config afcilities in cmake to hook libraries in. Of course that [b)] is what plplot/pkg-config.cmake does so I use that, and I'm trying to incorprate the freetype library using it. But pkg-config gives me a list of libraries ("_DIRS") and the scripting downstream wants the singular FREETYPE_INCLUDE_DIR for compilation of plfreetype.c and wingcc.c; I use a macro for generic library searches, BOILER_SEARCH which will populate ${${xx}}_LIBRARY_ etc all of those names which are (usually) the "same" for reading in a package. so I substitute, in plplot, a call to boiler-plate just prior to freetype, and freetype is in turn changed a little: if the boiler_plate routine didn't succeed a findPackage(Freetype) call is made(so that older builds work without pkg-config.) Boiler_plate sets FREETYPE_INCLUDE_DIRS and FREETYPE_CFLAGS as it does for every other library, but freetype wants to use FREETYPE_INCLUDE_DIR, directly in some cases (wingcc.cmake), which is never set right. Since the other libraries are using the ${XXXX}_INCLUDE_DIRS names provided, they include freetype2 as indicated from pkg-config. plplot.cmake: where my modification goes: (ALL ELSE IS THE SAME) include(shapelib) BOILER_SEARCH(FREETYPE freetype2 Freetype " we are gonna quit here, 'cause I have freetype all over the place") include(freetype) On Tue, Jul 1, 2014 at 1:35 PM, Alan W. Irwin <ir...@be...> wrote: > On 2014-07-01 00:41-0700 Greg Jung wrote: > > Hi Greg: > > Thanks for your interest in PLplot. > > I suspect this is either an issue concerning how you are using the > PLplot build system or an issue with that system itself so I plan to > follow up on this question on the appropriate list (plplot-devel) for > discussing such issues. > > Alan > macro(BOILER_SEARCH _ROOT _LIB _FINDPKG) set(CMAKE_PREFIX_PATH ${${_ROOT}DIR}) pkg_check_modules(${_ROOT} ${_LIB}) # goes directly for the package if(${_ROOT}_FOUND) display_config_result(${_ROOT}) else() find_package(${_FINDPKG} QUIET) if(${_ROOT}_FOUND) message(STATUS " ${_ROOT} library picked up via Module Find${_FINDPKG}()") else() message(" Use -D${_ROOT}DIR= to specify the directory tree.") if(${ARGC} GREATER 3) message(FATAL_ERROR "\n${ARGN}\n" "${_ROOT} library not found >${_LIB}<? ?>Find${_FINDPKG}.cmake<? \n" " CMAKE_SYSTEM_LIBRARY_PATH= \n" " ${CMAKE_SYSTEM_LIBRARY_PATH}" "\n CMAKE_SYSTEM_INCLUDE_PATH= \n" " ${CMAKE_SYSTEM_INCLUDE_PATH}" ) else() message(STATUS "${_ROOT} library not found >${_LIB}<? ?>Find${_FINDPKG}.cmake<? \n" " Proceeding nevertheless .... \n" " CMAKE_SYSTEM_LIBRARY_PATH= \n" " ${CMAKE_SYSTEM_LIBRARY_PATH}" "\n CMAKE_SYSTEM_INCLUDE_PATH= \n" " ${CMAKE_SYSTEM_INCLUDE_PATH}" ) endif() endif() endif() set(HAVE_LIB${_ROOT} ${_ROOT}_FOUND) if(${_ROOT}_FOUND) set(LIBRARIES ${LIBRARIES} ${${_ROOT}_LIBRARIES}) include_directories(${${_ROOT}_INCLUDE_DIR}) endif() mark_as_advanced(${_ROOT}_LIBRARY ${_ROOT}_LIBRARIES ${_ROOT}_INCLUDE_DIR ) endmacro(BOILER_SEARCH) message(STATUS "BOILER_SEARCH macro is compiled") return() with boiler_search(Freetype) acting, then, then logic in freetype goes: # Look for freetype libraries if (WITH_FREETYPE) if( NOT FREETYPE_FOUND) # try harder this time: pkg-config didn't do it. find_package(Freetype) if (FREETYPE_FOUND) message(STATUS "FREETYPE_INCLUDE_DIRS = ${FREETYPE_INCLUDE_DIRS}") ## <<<=== DIRS (a list) but compiles need _DIR! message(STATUS "FREETYPE_LIBRARIES = ${FREETYPE_LIBRARIES}") endif(FREETYPE_FOUND) endif(NOT FREETYPE_FOUND) if( NOT FREETYPE_FOUND) set(WITH_FREETYPE OFF CACHE BOOL "Enable driver options for using freetype library for fonts" FORCE ) endif (NOT FREETYPE_FOUND) endif (WITH_FREETYPE) OK, so I can patch this by running the configuration and then setting FREETYPE_INCLUDE_DIR manually. |