1
1
from conans import ConanFile , CMake , tools
2
2
import os
3
+ import re
3
4
import shutil
4
5
import textwrap
5
6
8
9
9
10
class FreetypeConan (ConanFile ):
10
11
name = "freetype"
11
-
12
- _libtool_version = "23.0.17" # check docs/version.txt, this is a different version mumber!
13
12
description = "FreeType is a freely available software library to render fonts."
14
13
url = "https://github.com/conan-io/conan-center-index"
15
14
homepage = "https://www.freetype.org"
@@ -107,7 +106,6 @@ def _configure_cmake(self):
107
106
if self ._cmake :
108
107
return self ._cmake
109
108
self ._cmake = CMake (self )
110
- self ._cmake .definitions ["PROJECT_VERSION" ] = self ._libtool_version
111
109
self ._cmake .definitions ["FT_WITH_ZLIB" ] = self .options .with_zlib
112
110
self ._cmake .definitions ["FT_WITH_PNG" ] = self .options .with_png
113
111
self ._cmake .definitions ["FT_WITH_BZIP2" ] = self .options .with_bzip2
@@ -123,7 +121,7 @@ def build(self):
123
121
cmake = self ._configure_cmake ()
124
122
cmake .build ()
125
123
126
- def _make_freetype_config (self ):
124
+ def _make_freetype_config (self , version ):
127
125
freetype_config_in = os .path .join (self ._source_subfolder , "builds" , "unix" , "freetype-config.in" )
128
126
if not os .path .isdir (os .path .join (self .package_folder , "bin" )):
129
127
os .makedirs (os .path .join (self .package_folder , "bin" ))
@@ -139,23 +137,37 @@ def _make_freetype_config(self):
139
137
tools .replace_in_file (freetype_config , r"%ft_version%" , r"$conan_ftversion" )
140
138
tools .replace_in_file (freetype_config , r"%LIBSSTATIC_CONFIG%" , r"$conan_staticlibs" )
141
139
tools .replace_in_file (freetype_config , r"-lfreetype" , libs )
142
- tools .replace_in_file (freetype_config , r"export LC_ALL" , """export LC_ALL
143
- BINDIR=$(dirname $0)
144
- conan_prefix=$(dirname $BINDIR)
145
- conan_exec_prefix=${{conan_prefix}}/bin
146
- conan_includedir=${{conan_prefix}}/include
147
- conan_libdir=${{conan_prefix}}/lib
148
- conan_ftversion={version}
149
- conan_staticlibs="{staticlibs}"
150
- """ .format (version = self ._libtool_version , staticlibs = staticlibs ))
140
+ tools .replace_in_file (freetype_config , r"export LC_ALL" , textwrap .dedent ("""\
141
+ export LC_ALL
142
+ BINDIR=$(dirname $0)
143
+ conan_prefix=$(dirname $BINDIR)
144
+ conan_exec_prefix=${{conan_prefix}}/bin
145
+ conan_includedir=${{conan_prefix}}/include
146
+ conan_libdir=${{conan_prefix}}/lib
147
+ conan_ftversion={version}
148
+ conan_staticlibs="{staticlibs}"
149
+ """ ).format (version = version , staticlibs = staticlibs ))
150
+
151
+ def _extract_libtool_version (self ):
152
+ conf_raw = tools .load (os .path .join (self ._source_subfolder , "builds" , "unix" , "configure.raw" ))
153
+ return next (re .finditer (r"^version_info='([0-9:]+)'" , conf_raw , flags = re .M )).group (1 ).replace (":" , "." )
154
+
155
+ @property
156
+ def _libtool_version_txt (self ):
157
+ return os .path .join (self .package_folder , "res" , "freetype-libtool-version.txt" )
151
158
152
159
def package (self ):
153
160
cmake = self ._configure_cmake ()
154
161
cmake .install ()
155
- self ._make_freetype_config ()
156
- self .copy ("FTL.TXT" , dst = "licenses" , src = os .path .join (self ._source_subfolder , "docs" ))
157
- self .copy ("GPLv2.TXT" , dst = "licenses" , src = os .path .join (self ._source_subfolder , "docs" ))
158
- self .copy ("LICENSE.TXT" , dst = "licenses" , src = os .path .join (self ._source_subfolder , "docs" ))
162
+
163
+ libtool_version = self ._extract_libtool_version ()
164
+ tools .save (self ._libtool_version_txt , libtool_version )
165
+ self ._make_freetype_config (libtool_version )
166
+
167
+ self .copy ("FTL.TXT" , src = os .path .join (self ._source_subfolder , "docs" ), dst = "licenses" )
168
+ self .copy ("GPLv2.TXT" , src = os .path .join (self ._source_subfolder , "docs" ), dst = "licenses" )
169
+ self .copy ("LICENSE.TXT" , src = os .path .join (self ._source_subfolder , "docs" ), dst = "licenses" )
170
+
159
171
tools .rmdir (os .path .join (self .package_folder , "lib" , "cmake" ))
160
172
tools .rmdir (os .path .join (self .package_folder , "lib" , "pkgconfig" ))
161
173
self ._create_cmake_module_variables (
@@ -223,7 +235,6 @@ def package_info(self):
223
235
freetype_config = os .path .join (self .package_folder , "bin" , "freetype-config" )
224
236
self .env_info .PATH .append (os .path .join (self .package_folder , "bin" ))
225
237
self .env_info .FT2_CONFIG = freetype_config
226
- self .user_info .LIBTOOL_VERSION = self ._libtool_version
227
238
self ._chmod_plus_x (freetype_config )
228
239
# cmake's FindFreetype.cmake module with imported target: Freetype::Freetype
229
240
self .cpp_info .filenames ["cmake_find_package" ] = "Freetype"
@@ -234,3 +245,8 @@ def package_info(self):
234
245
self .cpp_info .build_modules ["cmake_find_package" ] = [self ._module_vars_rel_path ]
235
246
self .cpp_info .build_modules ["cmake_find_package_multi" ] = [self ._module_target_rel_path ]
236
247
self .cpp_info .names ["pkg_config" ] = "freetype2"
248
+
249
+ libtool_version = tools .load (self ._libtool_version_txt ).strip ()
250
+ self .user_info .LIBTOOL_VERSION = libtool_version
251
+ # FIXME: need to do override the pkg_config version (pkg_config_custom_content does not work)
252
+ # self.cpp_info.version["pkg_config"] = pkg_config_version
0 commit comments