A way to check at runtime, since freetype 2.0.9, is - A new function named `FT_Library_Version' has been added to return the current library's major, minor, and patch version numbers. This is important since the macros FREETYPE_MAJOR, FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the library is dynamically linked by a program.
So it is possible to have compile-time, link-time, and run-time library versions checked. --- BTW, I just can't believe that building a simple program with recent microsoft compilers can be so difficult. There must be a saner way. Martin On Fri, Aug 21, 2009 at 12:20, Kelly O'Hair <kelly.oh...@sun.com> wrote: > Humm... as much as building a freetype application tells us that the > libraries work, I'm wondering if we could just do something like this > in the makefile sanity check: > > ifdef OPENJDK > FREETYPE_VERSION_H=$(FREETYPE_HEADERS_PATH)/freetype/freetype.h > _FREETYPE_VER := \ > if [ -f "${FREETYPE_VERSION_H}" ] ; then \ > _major="`${GREP} 'define FREETYPE_MAJOR' | ${CUT} -d' ' -f3`" ; \ > _minor="`${GREP} 'define FREETYPE_MINOR' | ${CUT} -d' ' -f3`" ; \ > _micro="`${GREP} 'define FREETYPE_PATCH' | ${CUT} -d' ' -f3`" ; \ > $(ECHO) "${_major}.${_minor}.${_micro}"; \ > else \ > $(ECHO) "0.0.0"; \ > fi > FREETYPE_VER :=$(call GetVersion,"$(_FREETYPE_VER)") > FREETYPE_CHECK :=$(call > CheckVersions,$(FREETYPE_VER),$(REQUIRED_FREETYPE_VERSION)) > > sane-freetype: > @if [ "$(FREETYPE_CHECK)" != "same" -a "$(FREETYPE_CHECK)" != > "newer" ]; then \ > $(ECHO) "ERROR: The version of freetype being used is older than > \n" \ > " the required version of '$(REQUIRED_FREETYPE_VERSION)'. > \n" \ > " The version of freetype found was '$(FREETYPE_VER)'. \n" > \ > "" >> $(ERROR_FILE) ; \ > fi > > else > > #do nothing (not OpenJDK) > sane-freetype: > > endif > > > --- > Just a thought.... Then that whole freetype check program can go away, > but if the libraries are wrong, we won't find out at sanity check time. > > (I have not tested the above logic) > > -kto > > > Tim Bell wrote: > >> Kelly O'Hair wrote: >> >>> Looks good Tim. >>> >> >> Thanks, Kelly. I plan to push this fix to the build forest later today. >> >> I wish that freetype just had a simple version.h file we could check. :^( >>> >> >> I checked the freetype 2.3.5 include files... we could use this from >> include/freetype/freetype.h: >> >> >> /************************************************************************* >> * >> * @enum: >> * FREETYPE_XXX >> * >> * @description: >> * These three macros identify the FreeType source code version. >> * Use @FT_Library_Version to access them at runtime. >> * >> * @values: >> * FREETYPE_MAJOR :: The major version number. >> * FREETYPE_MINOR :: The minor version number. >> * FREETYPE_PATCH :: The patch level. >> * >> * @note: >> * The version number of FreeType if built as a dynamic link library >> * with the `libtool' package is _not_ controlled by these three >> * macros. >> */ >> #define FREETYPE_MAJOR 2 >> #define FREETYPE_MINOR 3 >> #define FREETYPE_PATCH 5 >> >> >> >> Tim >> >> -kto >>> >>> Tim Bell wrote: >>> >>>> Hi Folks >>>> >>>> When building OpenJDK, the freetype sanity check compiles a >>>> little program to test that the freetype include files and >>>> libraries are available, and also that the version number is >>>> acceptable. >>>> >>>> If building on Windows and using a Visual Studio compiler >>>> newer than 2003, this program will fail due to the new >>>> rules for accessing MSVCR??.dll. [1] >>>> >>>> I didn't make the up the rules, in fact I am extremely >>>> puzzled that Microsoft is forcing ALL external developers >>>> and ISVs to solve this problem. I am trying to get the >>>> OpenJDK build to deal with them or at least tolerate >>>> them for those people out there who build OpenJDK on >>>> Windows. >>>> >>>> The bugzilla report: >>>> https://bugs.openjdk.java.net/show_bug.cgi?id=100101 >>>> >>>> The code review: >>>> >>>> http://cr.openjdk.java.net/~tbell/6705913/webrev.00/<http://cr.openjdk.java.net/%7Etbell/6705913/webrev.00/> >>>> >>>> These changes build OK on all JPRT systems: >>>> >>>> linux_i586_2.6 >>>> linux_x64_2.6 >>>> solaris_i586_5.10 >>>> solaris_sparc_5.10 >>>> solaris_sparcv9_5.10 >>>> solaris_x64_5.10- >>>> windows_i586_5.0 >>>> windows_x64_5.2 >>>> >>>> They also work on my Windows XP SP2 / Visual Studio 2008 >>>> build machine. >>>> >>>> Thanks in advance- >>>> >>>> Tim >>>> >>>> [1] How to redistribute the Visual C++ Libraries with your application >>>> (Ben Anderson) >>>> >>>> http://blogs.msdn.com/vcblog/archive/2007/10/12/how-to-redistribute-the-visual-c-libraries-with-your-application.aspx >>>> >>> >>