@ -49,6 +49,11 @@ if (HB_BUILD_UTILS)
set ( HB_HAVE_FREETYPE ON )
endif ( )
option ( HB_HAVE_GOBJECT "Enable GObject Bindings" OFF )
if ( HB_HAVE_GOBJECT )
set ( HB_HAVE_GLIB ON )
endif ( )
include_directories ( AFTER
$ { P R O J E C T _ S O U R C E _ D I R } / s r c
$ { P R O J E C T _ B I N A R Y _ D I R } / s r c
@ -301,6 +306,107 @@ if (WIN32 AND HB_HAVE_DIRECTWRITE)
list ( APPEND THIRD_PARTY_LIBS dwrite rpcrt4 )
endif ( )
if ( HB_HAVE_GOBJECT )
include ( FindPythonInterp )
include ( FindPerl )
# U s e t h e h i n t s f r o m g l i b - 2 . 0 . p c t o f i n d g l i b - m k e n u m s
find_package ( PkgConfig )
pkg_check_modules ( PC_GLIB QUIET glib-2.0 )
find_program ( GLIB_MKENUMS glib-mkenums
H I N T S $ { P C _ g l i b _ m k e n u m s }
)
set ( GLIB_MKENUMS_CMD )
if ( WIN32 AND NOT MINGW )
# I n V i s u a l S t u d i o b u i l d s , s h e b a n g l i n e s a r e n o t s u p p o r t e d
# i n t h e s t a n d a r d c m d . e x e s h e l l t h a t w e u s e , s o w e n e e d t o
# f i r s t d e t e r m i n e w h e t h e r g l i b - m k e n u m s i s a P y t h o n o r P E R L
# s c r i p t
execute_process ( COMMAND "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}" --version
R E S U L T _ V A R I A B L E G L I B _ M K E N U M S _ P Y T H O N
O U T P U T _ Q U I E T E R R O R _ Q U I E T
)
if ( GLIB_MKENUMS_PYTHON EQUAL 0 )
message ( "${GLIB_MKENUMS} is a Python script." )
set ( GLIB_MKENUMS_CMD "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}" )
else ( )
execute_process ( COMMAND "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" --version
R E S U L T _ V A R I A B L E G L I B _ M K E N U M S _ P E R L
O U T P U T _ Q U I E T E R R O R _ Q U I E T
)
if ( GLIB_MKENUMS_PERL EQUAL 0 )
message ( "${GLIB_MKENUMS} is a PERL script." )
set ( GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" )
endif ( )
if ( NOT GLIB_MKENUMS_PERL EQUAL 0 AND NOT GLIB_MKENUMS_PYTHON EQUAL 0 )
message ( FATAL_ERROR "Unable to determine type of glib-mkenums script" )
endif ( )
endif ( )
else ( )
set ( GLIB_MKENUMS_CMD "${GLIB_MKENUMS}" )
endif ( )
if ( NOT GLIB_MKENUMS_CMD )
message ( FATAL_ERROR "HB_HAVE_GOBJECT was set, but we failed to find glib-mkenums, which is required" )
endif ( )
pkg_check_modules ( PC_GOBJECT QUIET gobject-2.0 )
find_library ( GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${ PC_GLIB_LIBDIR } ${ PC_GLIB_LIBRARY_DIRS } )
find_path ( GOBJECT_INCLUDE_DIR NAMES glib-object.h HINTS ${ PC_GLIB_INCLUDEDIR } ${ PC_GLIB_INCLUDE_DIRS } PATH_SUFFIXES glib-2.0 )
include_directories ( ${ GOBJECTCONFIG_INCLUDE_DIR } ${ GOBJECT_INCLUDE_DIR } )
mark_as_advanced ( GOBJECT_LIBRARIES GOBJECT_INCLUDE_DIR )
list ( APPEND hb_gobject_sources ${ PROJECT_SOURCE_DIR } /src/hb-gobject-structs.cc )
list ( APPEND hb_gobject_gen_sources
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c
)
list ( APPEND hb_gobject_headers
$ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t . h
$ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t - s t r u c t s . h
)
list ( APPEND hb_gobject_gen_headers
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h
)
add_custom_command (
O U T P U T $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h
C O M M A N D $ { G L I B _ M K E N U M S _ C M D }
- - t e m p l a t e = $ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t - e n u m s . h . t m p l
- - i d e n t i f i e r - p r e f i x h b _
- - s y m b o l - p r e f i x h b _ g o b j e c t
$ { h b _ g o b j e c t _ h e a d e r }
$ { p r o j e c t _ h e a d e r s }
> $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h . t m p
C O M M A N D " $ { C M A K E _ C O M M A N D } "
" - D E N U M _ I N P U T _ S R C = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h . t m p "
" - D E N U M _ O U T P U T _ S R C = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h "
- P $ { P R O J E C T _ S O U R C E _ D I R } / r e p l a c e - e n u m - s t r i n g s . c m a k e
D E P E N D S $ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t - e n u m s . h . t m p l
$ { h b _ g o b j e c t _ h e a d e r }
$ { p r o j e c t _ h e a d e r s }
)
add_custom_command (
O U T P U T $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c
C O M M A N D $ { G L I B _ M K E N U M S _ C M D }
- - t e m p l a t e = $ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c . t m p l
- - i d e n t i f i e r - p r e f i x h b _
- - s y m b o l - p r e f i x h b _ g o b j e c t
$ { h b _ g o b j e c t _ h e a d e r }
$ { p r o j e c t _ h e a d e r s }
> $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c . t m p
C O M M A N D " $ { C M A K E _ C O M M A N D } "
" - D E N U M _ I N P U T _ S R C = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c . t m p "
" - D E N U M _ O U T P U T _ S R C = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c "
- P $ { P R O J E C T _ S O U R C E _ D I R } / r e p l a c e - e n u m - s t r i n g s . c m a k e
D E P E N D S $ { P R O J E C T _ S O U R C E _ D I R } / s r c / h b - g o b j e c t - e n u m s . c c . t m p l
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / s r c / h b - g o b j e c t - e n u m s . h
$ { h b _ g o b j e c t _ h e a d e r }
$ { p r o j e c t _ h e a d e r s }
)
endif ( )
# # A t o m i c o p s a v a i l a b i l i t y d e t e c t i o n
file ( WRITE "${PROJECT_BINARY_DIR}/try_compile_intel_atomic_primitives.c"
@ -338,6 +444,18 @@ endif ()
add_library ( harfbuzz ${ project_sources } ${ project_headers } )
target_link_libraries ( harfbuzz ${ THIRD_PARTY_LIBS } )
# # D e f i n e h a r f b u z z - g o b j e c t l i b r a r y
if ( HB_HAVE_GOBJECT )
add_library ( harfbuzz-gobject
$ { h b _ g o b j e c t _ s o u r c e s }
$ { h b _ g o b j e c t _ g e n _ s o u r c e s }
$ { h b _ g o b j e c t _ h e a d e r s }
$ { h b _ g o b j e c t _ g e n _ h e a d e r s }
)
include_directories ( BEFORE ${ CMAKE_CURRENT_BINARY_DIR } /src )
add_dependencies ( harfbuzz-gobject harfbuzz )
target_link_libraries ( harfbuzz-gobject harfbuzz ${ GOBJECT_LIBRARIES } ${ THIRD_PARTY_LIBS } )
endif ( )
# # A d d i t i o n a l f r a m e w o r k b u i l d c o n f i g s
if ( BUILD_FRAMEWORK )
@ -382,6 +500,9 @@ endif ()
# # I n s t a l l
if ( NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
install ( FILES ${ project_headers } DESTINATION include/harfbuzz )
if ( HB_HAVE_GOBJECT )
install ( FILES ${ hb_gobject_headers } ${ hb_gobject_gen_headers } DESTINATION include/harfbuzz )
endif ( )
endif ( )
if ( NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
@ -407,4 +528,11 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
R U N T I M E D E S T I N A T I O N b i n
)
endif ( )
if ( HB_HAVE_GOBJECT )
install ( TARGETS harfbuzz-gobject
A R C H I V E D E S T I N A T I O N l i b
L I B R A R Y D E S T I N A T I O N l i b
R U N T I M E D E S T I N A T I O N b i n
)
endif ( )
endif ( )