Martin Buchholz wrote:
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.
This is exactly the reason to compile freetype_versioncheck (it uses
FT_Library_Version).
We wanted to check that both headers and library are ok.
We can consider relaxing sanity check but it may end up in weird build
failures later on if there are multiple versions of freetype on the platform
or if library was manually compiled and it is not ok. We had these
issues in the past but might be older (incompatible) versions of freetype
are not very widely used anymore.
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.
Agree. This seems very odd.
Don't we have to have same workaround to all other exe files?
If we absolutely need to have this then why it is not shared between all
other places?
-igor
Martin
On Fri, Aug 21, 2009 at 12:20, Kelly O'Hair <[email protected]
<mailto:[email protected]>> 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