2023-11-01 06:11:15 +08:00
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
F i n d B o o s t
- - - - - - - - -
F i n d B o o s t i n c l u d e d i r s a n d l i b r a r i e s
U s e t h i s m o d u l e b y i n v o k i n g f i n d _ p a c k a g e w i t h t h e f o r m : :
find_package ( Boost
[ v e r s i o n ] [ E X A C T ] # Minimum or EXACT version e.g. 1.67.0
[ R E Q U I R E D ] # Fail with error if Boost is not found
[ C O M P O N E N T S < l i b s > . . . ] # Boost libraries by their canonical name
# e.g. "date_time" for "libboost_date_time"
[ O P T I O N A L _ C O M P O N E N T S < l i b s > . . . ]
# Optional Boost libraries by their canonical name)
) # e.g. "date_time" for "libboost_date_time"
T h i s m o d u l e f i n d s h e a d e r s a n d r e q u e s t e d c o m p o n e n t l i b r a r i e s O R a C M a k e
p a c k a g e c o n f i g u r a t i o n f i l e p r o v i d e d b y a " B o o s t C M a k e " b u i l d . F o r t h e
l a t t e r c a s e s k i p t o t h e " B o o s t C M a k e " s e c t i o n b e l o w . F o r t h e f o r m e r
c a s e r e s u l t s a r e r e p o r t e d i n v a r i a b l e s : :
B o o s t _ F O U N D - T r u e i f h e a d e r s a n d r e q u e s t e d l i b r a r i e s w e r e f o u n d
B o o s t _ I N C L U D E _ D I R S - B o o s t i n c l u d e d i r e c t o r i e s
B o o s t _ L I B R A R Y _ D I R S - L i n k d i r e c t o r i e s f o r B o o s t l i b r a r i e s
B o o s t _ L I B R A R I E S - B o o s t c o m p o n e n t l i b r a r i e s t o b e l i n k e d
B o o s t _ < C > _ F O U N D - T r u e i f c o m p o n e n t < C > w a s found ( <C> is upper-case )
B o o s t _ < C > _ L I B R A R Y - L i b r a r i e s t o l i n k f o r c o m p o n e n t < C > ( m a y i n c l u d e
t a r g e t _ l i n k _ l i b r a r i e s d e b u g / o p t i m i z e d k e y w o r d s )
2023-11-01 06:20:22 +08:00
B o o s t _ V E R S I O N _ M A C R O - B O O S T _ V E R S I O N v a l u e f r o m b o o s t / v e r s i o n . h p p
2023-11-01 06:11:15 +08:00
B o o s t _ V E R S I O N _ S T R I N G - B o o s t v e r s i o n n u m b e r i n x . y . z f o r m a t
2023-11-01 06:20:22 +08:00
B o o s t _ V E R S I O N - i f C M P 0 0 9 3 N E W = > s a m e a s B o o s t _ V E R S I O N _ S T R I N G
i f C M P 0 0 9 3 O L D o r u n s e t = > s a m e a s B o o s t _ V E R S I O N _ M A C R O
B o o s t _ L I B _ V E R S I O N - V e r s i o n s t r i n g a p p e n d e d t o l i b r a r y f i l e n a m e s
B o o s t _ V E R S I O N _ M A J O R - B o o s t m a j o r v e r s i o n number ( X in X.y.z )
a l i a s : B o o s t _ M A J O R _ V E R S I O N
B o o s t _ V E R S I O N _ M I N O R - B o o s t m i n o r v e r s i o n number ( Y in x.Y.z )
a l i a s : B o o s t _ M I N O R _ V E R S I O N
B o o s t _ V E R S I O N _ P A T C H - B o o s t s u b m i n o r v e r s i o n number ( Z in x.y.Z )
a l i a s : B o o s t _ S U B M I N O R _ V E R S I O N
B o o s t _ V E R S I O N _ C O U N T - A m o u n t o f v e r s i o n components ( 3 )
2023-11-01 06:11:15 +08:00
Boost_LIB_DIAGNOSTIC_DEFINITIONS ( Windows )
- P a s s t o add_definitions ( ) t o h a v e d i a g n o s t i c
i n f o r m a t i o n a b o u t B o o s t ' s a u t o m a t i c l i n k i n g
d i s p l a y e d d u r i n g c o m p i l a t i o n
N o t e t h a t B o o s t P y t h o n c o m p o n e n t s r e q u i r e a P y t h o n v e r s i o n s u f f i x
( B o o s t 1 . 6 7 a n d l a t e r ) , e . g . ` ` p y t h o n 3 6 ` ` o r ` ` p y t h o n 2 7 ` ` f o r t h e
v e r s i o n s b u i l t a g a i n s t P y t h o n 3 . 6 a n d 2 . 7 , r e s p e c t i v e l y . T h i s a l s o
a p p l i e s t o a d d i t i o n a l c o m p o n e n t s u s i n g P y t h o n i n c l u d i n g
` ` m p i _ p y t h o n ` ` a n d ` ` n u m p y ` ` . E a r l i e r B o o s t r e l e a s e s m a y u s e
d i s t r i b u t i o n - s p e c i f i c s u f f i x e s s u c h a s ` ` 2 ` ` , ` ` 3 ` ` o r ` ` 2 . 7 ` ` .
T h e s e m a y a l s o b e u s e d a s s u f f i x e s , b u t n o t e t h a t t h e y a r e n o t
p o r t a b l e .
T h i s m o d u l e r e a d s h i n t s a b o u t s e a r c h l o c a t i o n s f r o m v a r i a b l e s : :
B O O S T _ R O O T - P r e f e r r e d i n s t a l l a t i o n p r e f i x
( o r B O O S T R O O T )
B O O S T _ I N C L U D E D I R - P r e f e r r e d i n c l u d e d i r e c t o r y e . g . < p r e f i x > / i n c l u d e
B O O S T _ L I B R A R Y D I R - P r e f e r r e d l i b r a r y d i r e c t o r y e . g . < p r e f i x > / l i b
B o o s t _ N O _ S Y S T E M _ P A T H S - S e t t o O N t o d i s a b l e s e a r c h i n g i n l o c a t i o n s n o t
s p e c i f i e d b y t h e s e h i n t v a r i a b l e s . D e f a u l t i s O F F .
B o o s t _ A D D I T I O N A L _ V E R S I O N S
- L i s t o f B o o s t v e r s i o n s n o t k n o w n t o t h i s m o d u l e
( B o o s t i n s t a l l l o c a t i o n s m a y c o n t a i n t h e v e r s i o n )
a n d s a v e s s e a r c h r e s u l t s p e r s i s t e n t l y i n C M a k e c a c h e e n t r i e s : :
B o o s t _ I N C L U D E _ D I R - D i r e c t o r y c o n t a i n i n g B o o s t h e a d e r s
B o o s t _ L I B R A R Y _ D I R _ R E L E A S E - D i r e c t o r y c o n t a i n i n g r e l e a s e B o o s t l i b r a r i e s
B o o s t _ L I B R A R Y _ D I R _ D E B U G - D i r e c t o r y c o n t a i n i n g d e b u g B o o s t l i b r a r i e s
B o o s t _ < C > _ L I B R A R Y _ D E B U G - C o m p o n e n t < C > l i b r a r y d e b u g v a r i a n t
B o o s t _ < C > _ L I B R A R Y _ R E L E A S E - C o m p o n e n t < C > l i b r a r y r e l e a s e v a r i a n t
T h e f o l l o w i n g : p r o p _ t g t : ` I M P O R T E D ` t a r g e t s a r e a l s o d e f i n e d : :
2023-11-01 06:20:22 +08:00
B o o s t : : h e a d e r s - T a r g e t f o r h e a d e r - o n l y d e p e n d e n c i e s
2023-11-01 06:11:15 +08:00
( B o o s t i n c l u d e d i r e c t o r y )
2023-11-01 06:20:22 +08:00
a l i a s : B o o s t : : b o o s t
2023-11-01 06:11:15 +08:00
B o o s t : : < C > - T a r g e t f o r s p e c i f i c c o m p o n e n t d e p e n d e n c y
( s h a r e d o r s t a t i c l i b r a r y ) ; < C > i s l o w e r -
c a s e
B o o s t : : d i a g n o s t i c _ d e f i n i t i o n s - i n t e r f a c e t a r g e t t o e n a b l e d i a g n o s t i c
i n f o r m a t i o n a b o u t B o o s t ' s a u t o m a t i c l i n k i n g
d u r i n g compilation ( adds BOOST_LIB_DIAGNOSTIC )
B o o s t : : d i s a b l e _ a u t o l i n k i n g - i n t e r f a c e t a r g e t t o d i s a b l e a u t o m a t i c
l i n k i n g w i t h MSVC ( adds BOOST_ALL_NO_LIB )
B o o s t : : d y n a m i c _ l i n k i n g - i n t e r f a c e t a r g e t t o e n a b l e d y n a m i c l i n k i n g
l i n k i n g w i t h MSVC ( adds BOOST_ALL_DYN_LINK )
2023-11-01 06:20:22 +08:00
I m p l i c i t d e p e n d e n c i e s s u c h a s ` ` B o o s t : : f i l e s y s t e m ` ` r e q u i r i n g
` ` B o o s t : : s y s t e m ` ` w i l l b e a u t o m a t i c a l l y d e t e c t e d a n d s a t i s f i e d , e v e n
i f s y s t e m i s n o t s p e c i f i e d w h e n u s i n g : c o m m a n d : ` f i n d _ p a c k a g e ` a n d i f
` ` B o o s t : : s y s t e m ` ` i s n o t a d d e d t o : c o m m a n d : ` t a r g e t _ l i n k _ l i b r a r i e s ` . I f u s i n g
` ` B o o s t : : t h r e a d ` ` , t h e n ` ` T h r e a d s : : T h r e a d s ` ` w i l l a l s o b e a d d e d a u t o m a t i c a l l y .
2023-11-01 06:11:15 +08:00
I t i s i m p o r t a n t t o n o t e t h a t t h e i m p o r t e d t a r g e t s b e h a v e d i f f e r e n t l y
t h a n v a r i a b l e s c r e a t e d b y t h i s m o d u l e : m u l t i p l e c a l l s t o
2023-11-01 06:20:22 +08:00
: c o m m a n d : ` find_package ( Boost ) ` i n t h e s a m e d i r e c t o r y o r s u b - d i r e c t o r i e s w i t h
2023-11-01 06:11:15 +08:00
d i f f e r e n t options ( e.g. static or shared ) w i l l n o t o v e r r i d e t h e
v a l u e s o f t h e t a r g e t s c r e a t e d b y t h e f i r s t c a l l .
2023-11-01 06:20:22 +08:00
U s e r s m a y s e t t h e s e h i n t s o r r e s u l t s a s ` ` C A C H E ` ` e n t r i e s . P r o j e c t s
2023-11-01 06:11:15 +08:00
s h o u l d n o t r e a d t h e s e e n t r i e s d i r e c t l y b u t i n s t e a d u s e t h e a b o v e
r e s u l t v a r i a b l e s . N o t e t h a t s o m e h i n t n a m e s s t a r t i n u p p e r - c a s e
" B O O S T " . O n e m a y s p e c i f y t h e s e a s e n v i r o n m e n t v a r i a b l e s i f t h e y a r e
n o t s p e c i f i e d a s C M a k e v a r i a b l e s o r c a c h e e n t r i e s .
2023-11-01 06:20:22 +08:00
T h i s m o d u l e f i r s t s e a r c h e s f o r t h e ` ` B o o s t ` ` h e a d e r f i l e s u s i n g t h e a b o v e
h i n t variables ( excluding ``BOOST_LIBRARYDIR`` ) a n d s a v e s t h e r e s u l t i n
` ` B o o s t _ I N C L U D E _ D I R ` ` . T h e n i t s e a r c h e s f o r r e q u e s t e d c o m p o n e n t l i b r a r i e s
u s i n g t h e a b o v e hints ( excluding ``BOOST_INCLUDEDIR`` and
` ` B o o s t _ A D D I T I O N A L _ V E R S I O N S ` ` ) , " l i b " d i r e c t o r i e s n e a r ` ` B o o s t _ I N C L U D E _ D I R ` ` ,
2023-11-01 06:11:15 +08:00
a n d t h e l i b r a r y n a m e c o n f i g u r a t i o n s e t t i n g s b e l o w . I t s a v e s t h e
2023-11-01 06:20:22 +08:00
l i b r a r y d i r e c t o r i e s i n ` ` B o o s t _ L I B R A R Y _ D I R _ D E B U G ` ` a n d
` ` B o o s t _ L I B R A R Y _ D I R _ R E L E A S E ` ` a n d i n d i v i d u a l l i b r a r y
l o c a t i o n s i n ` ` B o o s t _ < C > _ L I B R A R Y _ D E B U G ` ` a n d ` ` B o o s t _ < C > _ L I B R A R Y _ R E L E A S E ` ` .
2023-11-01 06:11:15 +08:00
W h e n o n e c h a n g e s s e t t i n g s u s e d b y p r e v i o u s s e a r c h e s i n t h e s a m e b u i l d
tree ( excluding environment variables ) t h i s m o d u l e d i s c a r d s p r e v i o u s
s e a r c h r e s u l t s a f f e c t e d b y t h e c h a n g e s a n d s e a r c h e s a g a i n .
B o o s t l i b r a r i e s c o m e i n m a n y v a r i a n t s e n c o d e d i n t h e i r f i l e n a m e .
U s e r s o r p r o j e c t s m a y t e l l t h i s m o d u l e w h i c h v a r i a n t t o f i n d b y
s e t t i n g v a r i a b l e s : :
B o o s t _ U S E _ D E B U G _ L I B S - S e t t o O N o r O F F t o s p e c i f y w h e t h e r t o s e a r c h
a n d u s e t h e d e b u g l i b r a r i e s . D e f a u l t i s O N .
B o o s t _ U S E _ R E L E A S E _ L I B S - S e t t o O N o r O F F t o s p e c i f y w h e t h e r t o s e a r c h
a n d u s e t h e r e l e a s e l i b r a r i e s . D e f a u l t i s O N .
B o o s t _ U S E _ M U L T I T H R E A D E D - S e t t o O F F t o u s e t h e n o n - m u l t i t h r e a d e d
libraries ( 'mt' tag ) . D e f a u l t i s O N .
B o o s t _ U S E _ S T A T I C _ L I B S - S e t t o O N t o f o r c e t h e u s e o f t h e s t a t i c
l i b r a r i e s . D e f a u l t i s O F F .
B o o s t _ U S E _ S T A T I C _ R U N T I M E - S e t t o O N o r O F F t o s p e c i f y w h e t h e r t o u s e
l i b r a r i e s l i n k e d s t a t i c a l l y t o t h e C + + r u n t i m e
( ' s ' t a g ) . D e f a u l t i s p l a t f o r m d e p e n d e n t .
B o o s t _ U S E _ D E B U G _ R U N T I M E - S e t t o O N o r O F F t o s p e c i f y w h e t h e r t o u s e
l i b r a r i e s l i n k e d t o t h e M S d e b u g C + + r u n t i m e
( ' g ' t a g ) . D e f a u l t i s O N .
B o o s t _ U S E _ D E B U G _ P Y T H O N - S e t t o O N t o u s e l i b r a r i e s c o m p i l e d w i t h a
d e b u g P y t h o n build ( 'y' tag ) . D e f a u l t i s O F F .
B o o s t _ U S E _ S T L P O R T - S e t t o O N t o u s e l i b r a r i e s c o m p i l e d w i t h
STLPort ( 'p' tag ) . D e f a u l t i s O F F .
B o o s t _ U S E _ S T L P O R T _ D E P R E C A T E D _ N A T I V E _ I O S T R E A M S
- S e t t o O N t o u s e l i b r a r i e s c o m p i l e d w i t h
S T L P o r t d e p r e c a t e d " n a t i v e i o s t r e a m s "
( ' n ' t a g ) . D e f a u l t i s O F F .
B o o s t _ C O M P I L E R - S e t t o t h e c o m p i l e r - s p e c i f i c l i b r a r y s u f f i x
( e . g . " - g c c 4 3 " ) . D e f a u l t i s a u t o - c o m p u t e d
f o r t h e C + + c o m p i l e r i n u s e . A l i s t m a y b e
u s e d i f m u l t i p l e c o m p a t i b l e s u f f i x e s s h o u l d
b e t e s t e d f o r , i n d e c r e a s i n g o r d e r o f
p r e f e r e n c e .
2023-11-01 06:36:59 +08:00
B o o s t _ L I B _ P R E F I X - S e t t o t h e p l a t f o r m - s p e c i f i c l i b r a r y n a m e
prefix ( e.g. "lib" ) u s e d b y B o o s t s t a t i c l i b s .
T h i s i s n e e d e d o n l y o n p l a t f o r m s w h e r e C M a k e
d o e s n o t k n o w t h e p r e f i x b y d e f a u l t .
2023-11-01 06:11:15 +08:00
B o o s t _ A R C H I T E C T U R E - S e t t o t h e a r c h i t e c t u r e - s p e c i f i c l i b r a r y s u f f i x
( e . g . " - x 6 4 " ) . D e f a u l t i s a u t o - c o m p u t e d f o r t h e
C + + c o m p i l e r i n u s e .
B o o s t _ T H R E A D A P I - S u f f i x f o r " t h r e a d " c o m p o n e n t l i b r a r y n a m e ,
s u c h a s " p t h r e a d " o r " w i n 3 2 " . N a m e s w i t h
a n d w i t h o u t t h i s s u f f i x w i l l b o t h b e t r i e d .
B o o s t _ N A M E S P A C E - A l t e r n a t e n a m e s p a c e u s e d t o b u i l d b o o s t w i t h
e . g . i f s e t t o " m y b o o s t " , w i l l s e a r c h f o r
m y b o o s t _ t h r e a d i n s t e a d o f b o o s t _ t h r e a d .
O t h e r v a r i a b l e s o n e m a y s e t t o c o n t r o l t h i s m o d u l e a r e : :
B o o s t _ D E B U G - S e t t o O N t o e n a b l e d e b u g o u t p u t f r o m F i n d B o o s t .
P l e a s e e n a b l e t h i s b e f o r e f i l i n g a n y b u g r e p o r t .
B o o s t _ R E A L P A T H - S e t t o O N t o r e s o l v e s y m l i n k s f o r d i s c o v e r e d
l i b r a r i e s t o a s s i s t w i t h p a c k a g i n g . F o r e x a m p l e ,
t h e " s y s t e m " c o m p o n e n t l i b r a r y m a y b e r e s o l v e d t o
" / u s r / l i b / l i b b o o s t _ s y s t e m . s o . 1 . 6 7 . 0 " i n s t e a d o f
" / u s r / l i b / l i b b o o s t _ s y s t e m . s o " . T h i s d o e s n o t
a f f e c t l i n k i n g a n d s h o u l d n o t b e e n a b l e d u n l e s s
t h e u s e r n e e d s t h i s i n f o r m a t i o n .
B o o s t _ L I B R A R Y _ D I R - D e f a u l t v a l u e f o r B o o s t _ L I B R A R Y _ D I R _ R E L E A S E a n d
B o o s t _ L I B R A R Y _ D I R _ D E B U G .
O n V i s u a l S t u d i o a n d B o r l a n d c o m p i l e r s B o o s t h e a d e r s r e q u e s t a u t o m a t i c
l i n k i n g t o c o r r e s p o n d i n g l i b r a r i e s . T h i s r e q u i r e s m a t c h i n g l i b r a r i e s
t o b e l i n k e d e x p l i c i t l y o r a v a i l a b l e i n t h e l i n k l i b r a r y s e a r c h p a t h .
2023-11-01 06:20:22 +08:00
I n t h i s c a s e s e t t i n g ` ` B o o s t _ U S E _ S T A T I C _ L I B S ` ` t o ` ` O F F ` ` m a y n o t a c h i e v e
2023-11-01 06:11:15 +08:00
d y n a m i c l i n k i n g . B o o s t a u t o m a t i c l i n k i n g t y p i c a l l y r e q u e s t s s t a t i c
2023-11-01 06:20:22 +08:00
l i b r a r i e s w i t h a f e w exceptions ( such as ``Boost.Python`` ) . U s e : :
2023-11-01 06:11:15 +08:00
add_definitions ( ${ Boost_LIB_DIAGNOSTIC_DEFINITIONS } )
t o a s k B o o s t t o r e p o r t i n f o r m a t i o n a b o u t a u t o m a t i c l i n k i n g r e q u e s t s .
E x a m p l e t o f i n d B o o s t h e a d e r s o n l y : :
find_package ( Boost 1.36.0 )
if ( Boost_FOUND )
include_directories ( ${ Boost_INCLUDE_DIRS } )
add_executable ( foo foo.cc )
endif ( )
E x a m p l e t o f i n d B o o s t l i b r a r i e s a n d u s e i m p o r t e d t a r g e t s : :
find_package ( Boost 1.56 REQUIRED COMPONENTS
d a t e _ t i m e f i l e s y s t e m i o s t r e a m s )
add_executable ( foo foo.cc )
target_link_libraries ( foo Boost::date_time Boost::filesystem
B o o s t : : i o s t r e a m s )
E x a m p l e t o f i n d B o o s t P y t h o n 3 . 6 l i b r a r i e s a n d u s e i m p o r t e d t a r g e t s : :
find_package ( Boost 1.67 REQUIRED COMPONENTS
p y t h o n 3 6 n u m p y 3 6 )
add_executable ( foo foo.cc )
target_link_libraries ( foo Boost::python36 Boost::numpy36 )
E x a m p l e t o f i n d B o o s t h e a d e r s a n d s o m e * s t a t i c * ( r e l e a s e o n l y ) l i b r a r i e s : :
set ( Boost_USE_STATIC_LIBS ON ) # only find static libs
set ( Boost_USE_DEBUG_LIBS OFF ) # ignore debug libs and
set ( Boost_USE_RELEASE_LIBS ON ) # only find release libs
set ( Boost_USE_MULTITHREADED ON )
set ( Boost_USE_STATIC_RUNTIME OFF )
find_package ( Boost 1.66.0 COMPONENTS date_time filesystem system ... )
if ( Boost_FOUND )
include_directories ( ${ Boost_INCLUDE_DIRS } )
add_executable ( foo foo.cc )
target_link_libraries ( foo ${ Boost_LIBRARIES } )
endif ( )
B o o s t C M a k e
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
2023-11-01 06:20:22 +08:00
I f B o o s t w a s b u i l t u s i n g t h e b o o s t - c m a k e p r o j e c t o r f r o m B o o s t 1 . 7 0 . 0 o n
i t p r o v i d e s a p a c k a g e c o n f i g u r a t i o n f i l e f o r u s e w i t h f i n d _ p a c k a g e ' s c o n f i g m o d e .
T h i s m o d u l e l o o k s f o r t h e p a c k a g e c o n f i g u r a t i o n f i l e c a l l e d
` ` B o o s t C o n f i g . c m a k e ` ` o r ` ` b o o s t - c o n f i g . c m a k e ` ` a n d s t o r e s t h e r e s u l t i n
` ` C A C H E ` ` e n t r y " B o o s t _ D I R " . I f f o u n d , t h e p a c k a g e c o n f i g u r a t i o n f i l e i s l o a d e d
2023-11-01 06:11:15 +08:00
a n d t h i s m o d u l e r e t u r n s w i t h n o f u r t h e r a c t i o n . S e e d o c u m e n t a t i o n o f
t h e B o o s t C M a k e p a c k a g e c o n f i g u r a t i o n f o r d e t a i l s o n w h a t i t p r o v i d e s .
2023-11-01 06:20:22 +08:00
S e t ` ` B o o s t _ N O _ B O O S T _ C M A K E ` ` t o ` ` O N ` ` , t o d i s a b l e t h e s e a r c h f o r b o o s t - c m a k e .
2023-11-01 06:11:15 +08:00
#]=======================================================================]
2023-11-01 06:20:22 +08:00
# The FPHSA helper provides standard way of reporting final search results to
# the user including the version and component checks.
include ( ${ CMAKE_CURRENT_LIST_DIR } /FindPackageHandleStandardArgs.cmake )
2023-11-01 06:11:15 +08:00
# Save project's policies
cmake_policy ( PUSH )
cmake_policy ( SET CMP0057 NEW ) # if IN_LIST
2023-11-01 06:34:31 +08:00
cmake_policy ( SET CMP0102 NEW ) # if mark_as_advanced(non_cache_var)
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
function ( _boost_get_existing_target component target_var )
set ( names "${component}" )
if ( component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$" )
# handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
list ( APPEND names
" $ { C M A K E _ M A T C H _ 1 } $ { C M A K E _ M A T C H _ 2 } " # python
" $ { C M A K E _ M A T C H _ 1 } $ { C M A K E _ M A T C H _ 2 } $ { C M A K E _ M A T C H _ 3 } " # pythonX
" $ { C M A K E _ M A T C H _ 1 } $ { C M A K E _ M A T C H _ 2 } $ { C M A K E _ M A T C H _ 3 } $ { C M A K E _ M A T C H _ 4 } " #pythonXY
)
endif ( )
# https://github.com/boost-cmake/boost-cmake uses boost::file_system etc.
# So handle similar constructions of target names
string ( TOLOWER "${component}" lower_component )
list ( APPEND names "${lower_component}" )
foreach ( prefix Boost boost )
foreach ( name IN LISTS names )
if ( TARGET "${prefix}::${name}" )
# The target may be an INTERFACE library that wraps around a single other
# target for compatibility. Unwrap this layer so we can extract real info.
if ( "${name}" MATCHES "^(python|numpy|mpi_python)([1-9])([0-9])$" )
set ( name_nv "${CMAKE_MATCH_1}" )
if ( TARGET "${prefix}::${name_nv}" )
get_property ( type TARGET "${prefix}::${name}" PROPERTY TYPE )
if ( type STREQUAL "INTERFACE_LIBRARY" )
get_property ( lib TARGET "${prefix}::${name}" PROPERTY INTERFACE_LINK_LIBRARIES )
if ( "${lib}" STREQUAL "${prefix}::${name_nv}" )
set ( ${ target_var } "${prefix}::${name_nv}" PARENT_SCOPE )
return ( )
endif ( )
endif ( )
endif ( )
endif ( )
set ( ${ target_var } "${prefix}::${name}" PARENT_SCOPE )
return ( )
endif ( )
endforeach ( )
endforeach ( )
set ( ${ target_var } "" PARENT_SCOPE )
endfunction ( )
function ( _boost_get_canonical_target_name component target_var )
string ( TOLOWER "${component}" component )
if ( component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$" )
# handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
set ( ${ target_var } "Boost::${CMAKE_MATCH_1}${CMAKE_MATCH_2}" PARENT_SCOPE )
else ( )
set ( ${ target_var } "Boost::${component}" PARENT_SCOPE )
endif ( )
endfunction ( )
macro ( _boost_set_in_parent_scope name value )
# Set a variable in parent scope and make it visibile in current scope
set ( ${ name } "${value}" PARENT_SCOPE )
set ( ${ name } "${value}" )
endmacro ( )
macro ( _boost_set_if_unset name value )
if ( NOT ${ name } )
_boost_set_in_parent_scope ( ${ name } "${value}" )
endif ( )
endmacro ( )
macro ( _boost_set_cache_if_unset name value )
if ( NOT ${ name } )
set ( ${ name } "${value}" CACHE STRING "" FORCE )
endif ( )
endmacro ( )
macro ( _boost_append_include_dir target )
get_target_property ( inc "${target}" INTERFACE_INCLUDE_DIRECTORIES )
if ( inc )
list ( APPEND include_dirs "${inc}" )
endif ( )
endmacro ( )
function ( _boost_set_legacy_variables_from_config )
# Set legacy variables for compatibility if not set
set ( include_dirs "" )
set ( library_dirs "" )
set ( libraries "" )
# Header targets Boost::headers or Boost::boost
foreach ( comp headers boost )
_boost_get_existing_target ( ${ comp } target )
if ( target )
_boost_append_include_dir ( "${target}" )
endif ( )
endforeach ( )
# Library targets
foreach ( comp IN LISTS Boost_FIND_COMPONENTS )
string ( TOUPPER ${ comp } uppercomp )
# Overwrite if set
_boost_set_in_parent_scope ( Boost_ ${ uppercomp } _FOUND "${Boost_${comp}_FOUND}" )
if ( Boost_ ${ comp } _FOUND )
_boost_get_existing_target ( ${ comp } target )
if ( NOT target )
if ( Boost_DEBUG OR Boost_VERBOSE )
message ( WARNING "Could not find imported target for required component '${comp}'. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use." )
endif ( )
continue ( )
endif ( )
_boost_append_include_dir ( "${target}" )
_boost_set_if_unset ( Boost_ ${ uppercomp } _LIBRARY "${target}" )
_boost_set_if_unset ( Boost_ ${ uppercomp } _LIBRARIES "${target}" ) # Very old legacy variable
list ( APPEND libraries "${target}" )
get_property ( type TARGET "${target}" PROPERTY TYPE )
if ( NOT type STREQUAL "INTERFACE_LIBRARY" )
foreach ( cfg RELEASE DEBUG )
get_target_property ( lib ${ target } IMPORTED_LOCATION_ ${ cfg } )
if ( lib )
get_filename_component ( lib_dir "${lib}" DIRECTORY )
list ( APPEND library_dirs ${ lib_dir } )
_boost_set_cache_if_unset ( Boost_ ${ uppercomp } _LIBRARY_ ${ cfg } "${lib}" )
endif ( )
endforeach ( )
elseif ( Boost_DEBUG OR Boost_VERBOSE )
# For projects using only the Boost::* targets this warning can be safely ignored.
message ( WARNING "Imported target '${target}' for required component '${comp}' has no artifact. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use." )
endif ( )
_boost_get_canonical_target_name ( "${comp}" canonical_target )
if ( NOT TARGET "${canonical_target}" )
add_library ( "${canonical_target}" INTERFACE IMPORTED )
target_link_libraries ( "${canonical_target}" INTERFACE "${target}" )
endif ( )
endif ( )
endforeach ( )
list ( REMOVE_DUPLICATES include_dirs )
list ( REMOVE_DUPLICATES library_dirs )
_boost_set_if_unset ( Boost_INCLUDE_DIRS "${include_dirs}" )
_boost_set_if_unset ( Boost_LIBRARY_DIRS "${library_dirs}" )
_boost_set_if_unset ( Boost_LIBRARIES "${libraries}" )
_boost_set_if_unset ( Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}" )
find_path ( Boost_INCLUDE_DIR
N A M E S b o o s t / v e r s i o n . h p p b o o s t / c o n f i g . h p p
H I N T S $ { B o o s t _ I N C L U D E _ D I R S }
N O _ D E F A U L T _ P A T H
)
if ( NOT Boost_VERSION_MACRO OR NOT Boost_LIB_VERSION )
set ( version_file ${ Boost_INCLUDE_DIR } /boost/version.hpp )
if ( EXISTS "${version_file}" )
file ( STRINGS "${version_file}" contents REGEX "#define BOOST_(LIB_)?VERSION " )
if ( contents MATCHES "#define BOOST_VERSION ([0-9]+)" )
_boost_set_if_unset ( Boost_VERSION_MACRO "${CMAKE_MATCH_1}" )
endif ( )
if ( contents MATCHES "#define BOOST_LIB_VERSION \" ( [0-9_]+ ) \"")
_boost_set_if_unset ( Boost_LIB_VERSION "${CMAKE_MATCH_1}" )
endif ( )
endif ( )
endif ( )
_boost_set_if_unset ( Boost_MAJOR_VERSION ${ Boost_VERSION_MAJOR } )
_boost_set_if_unset ( Boost_MINOR_VERSION ${ Boost_VERSION_MINOR } )
_boost_set_if_unset ( Boost_SUBMINOR_VERSION ${ Boost_VERSION_PATCH } )
if ( WIN32 )
_boost_set_if_unset ( Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC" )
endif ( )
if ( NOT TARGET Boost::headers )
add_library ( Boost::headers INTERFACE IMPORTED )
target_include_directories ( Boost::headers INTERFACE ${ Boost_INCLUDE_DIRS } )
endif ( )
# Legacy targets w/o functionality as all handled by defined targets
foreach ( lib diagnostic_definitions disable_autolinking dynamic_linking )
if ( NOT TARGET Boost:: ${ lib } )
add_library ( Boost:: ${ lib } INTERFACE IMPORTED )
endif ( )
endforeach ( )
if ( NOT TARGET Boost::boost )
add_library ( Boost::boost INTERFACE IMPORTED )
target_link_libraries ( Boost::boost INTERFACE Boost::headers )
endif ( )
endfunction ( )
2023-11-01 06:11:15 +08:00
#-------------------------------------------------------------------------------
2023-11-01 06:20:22 +08:00
# Before we go searching, check whether a boost cmake package is available, unless
# the user specifically asked NOT to search for one.
2023-11-01 06:11:15 +08:00
#
# If Boost_DIR is set, this behaves as any find_package call would. If not,
# it looks at BOOST_ROOT and BOOSTROOT to find Boost.
#
if ( NOT Boost_NO_BOOST_CMAKE )
# If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives,
# since these are more conventional for Boost.
if ( "$ENV{Boost_DIR}" STREQUAL "" )
if ( NOT "$ENV{BOOST_ROOT}" STREQUAL "" )
set ( ENV{Boost_DIR} $ENV{ BOOST_ROOT } )
elseif ( NOT "$ENV{BOOSTROOT}" STREQUAL "" )
set ( ENV{Boost_DIR} $ENV{ BOOSTROOT } )
endif ( )
endif ( )
# Do the same find_package call but look specifically for the CMake version.
# Note that args are passed in the Boost_FIND_xxxxx variables, so there is no
# need to delegate them to this find_package call.
find_package ( Boost QUIET NO_MODULE )
2023-11-01 06:34:31 +08:00
if ( DEFINED Boost_DIR )
mark_as_advanced ( Boost_DIR )
endif ( )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
# If we found a boost cmake package, then we're done. Print out what we found.
2023-11-01 06:11:15 +08:00
# Otherwise let the rest of the module try to find it.
2023-11-01 06:20:22 +08:00
if ( Boost_FOUND )
# Convert component found variables to standard variables if required
# Necessary for legacy boost-cmake and 1.70 builtin BoostConfig
if ( Boost_FIND_COMPONENTS )
# Ignore the meta-component "ALL", introduced by Boost 1.73
list ( REMOVE_ITEM Boost_FIND_COMPONENTS "ALL" )
foreach ( _comp IN LISTS Boost_FIND_COMPONENTS )
if ( DEFINED Boost_ ${ _comp } _FOUND )
continue ( )
endif ( )
string ( TOUPPER ${ _comp } _uppercomp )
if ( DEFINED Boost ${ _comp } _FOUND ) # legacy boost-cmake project
set ( Boost_ ${ _comp } _FOUND ${ Boost${_comp } _FOUND} )
elseif ( DEFINED Boost_ ${ _uppercomp } _FOUND ) # Boost 1.70
set ( Boost_ ${ _comp } _FOUND ${ Boost_${_uppercomp } _FOUND} )
endif ( )
endforeach ( )
2023-11-01 06:11:15 +08:00
endif ( )
2023-11-01 06:20:22 +08:00
find_package_handle_standard_args ( Boost HANDLE_COMPONENTS CONFIG_MODE )
_boost_set_legacy_variables_from_config ( )
2023-11-01 06:11:15 +08:00
# Restore project's policies
cmake_policy ( POP )
return ( )
endif ( )
endif ( )
#-------------------------------------------------------------------------------
# FindBoost functions & macros
#
2023-11-01 06:20:22 +08:00
#
# Print debug text if Boost_DEBUG is set.
# Call example:
# _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "debug message")
#
function ( _Boost_DEBUG_PRINT file line text )
if ( Boost_DEBUG )
message ( STATUS "[ ${file}:${line} ] ${text}" )
endif ( )
endfunction ( )
#
# _Boost_DEBUG_PRINT_VAR(file line variable_name [ENVIRONMENT]
# [SOURCE "short explanation of origin of var value"])
#
# ENVIRONMENT - look up environment variable instead of CMake variable
#
# Print variable name and its value if Boost_DEBUG is set.
# Call example:
# _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" BOOST_ROOT)
#
function ( _Boost_DEBUG_PRINT_VAR file line name )
if ( Boost_DEBUG )
cmake_parse_arguments ( _args "ENVIRONMENT" "SOURCE" "" ${ ARGN } )
unset ( source )
if ( _args_SOURCE )
set ( source " (${_args_SOURCE})" )
endif ( )
if ( _args_ENVIRONMENT )
if ( DEFINED ENV{ ${ name } } )
set ( value "\" $ENV{ ${name } }\ "" )
else ( )
set ( value "<unset>" )
endif ( )
set ( _name "ENV{${name}}" )
else ( )
if ( DEFINED "${name}" )
set ( value "\" ${ ${name } }\ "" )
else ( )
set ( value "<unset>" )
endif ( )
set ( _name "${name}" )
endif ( )
_Boost_DEBUG_PRINT ( "${file}" "${line}" "${_name} = ${value}${source}" )
endif ( )
endfunction ( )
2023-11-01 06:11:15 +08:00
############################################
#
# Check the existence of the libraries.
#
############################################
# This macro was taken directly from the FindQt4.cmake file that is included
# with the CMake distribution. This is NOT my work. All work was done by the
# original authors of the FindQt4.cmake file. Only minor modifications were
# made to remove references to Qt and make this file more generally applicable
# And ELSE/ENDIF pairs were removed for readability.
#########################################################################
macro ( _Boost_ADJUST_LIB_VARS basename )
if ( Boost_INCLUDE_DIR )
if ( Boost_ ${ basename } _LIBRARY_DEBUG AND Boost_ ${ basename } _LIBRARY_RELEASE )
# if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
# single-config generators, set optimized and debug libraries
get_property ( _isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
if ( _isMultiConfig OR CMAKE_BUILD_TYPE )
set ( Boost_ ${ basename } _LIBRARY optimized ${ Boost_${basename } _LIBRARY_RELEASE} debug ${ Boost_${basename } _LIBRARY_DEBUG} )
else ( )
# For single-config generators where CMAKE_BUILD_TYPE has no value,
# just use the release libraries
set ( Boost_ ${ basename } _LIBRARY ${ Boost_${basename } _LIBRARY_RELEASE} )
endif ( )
# FIXME: This probably should be set for both cases
set ( Boost_ ${ basename } _LIBRARIES optimized ${ Boost_${basename } _LIBRARY_RELEASE} debug ${ Boost_${basename } _LIBRARY_DEBUG} )
endif ( )
# if only the release version was found, set the debug variable also to the release version
if ( Boost_ ${ basename } _LIBRARY_RELEASE AND NOT Boost_ ${ basename } _LIBRARY_DEBUG )
set ( Boost_ ${ basename } _LIBRARY_DEBUG ${ Boost_${basename } _LIBRARY_RELEASE} )
set ( Boost_ ${ basename } _LIBRARY ${ Boost_${basename } _LIBRARY_RELEASE} )
set ( Boost_ ${ basename } _LIBRARIES ${ Boost_${basename } _LIBRARY_RELEASE} )
endif ( )
# if only the debug version was found, set the release variable also to the debug version
if ( Boost_ ${ basename } _LIBRARY_DEBUG AND NOT Boost_ ${ basename } _LIBRARY_RELEASE )
set ( Boost_ ${ basename } _LIBRARY_RELEASE ${ Boost_${basename } _LIBRARY_DEBUG} )
set ( Boost_ ${ basename } _LIBRARY ${ Boost_${basename } _LIBRARY_DEBUG} )
set ( Boost_ ${ basename } _LIBRARIES ${ Boost_${basename } _LIBRARY_DEBUG} )
endif ( )
# If the debug & release library ends up being the same, omit the keywords
if ( "${Boost_${basename}_LIBRARY_RELEASE}" STREQUAL "${Boost_${basename}_LIBRARY_DEBUG}" )
set ( Boost_ ${ basename } _LIBRARY ${ Boost_${basename } _LIBRARY_RELEASE} )
set ( Boost_ ${ basename } _LIBRARIES ${ Boost_${basename } _LIBRARY_RELEASE} )
endif ( )
if ( Boost_ ${ basename } _LIBRARY AND Boost_ ${ basename } _HEADER )
set ( Boost_ ${ basename } _FOUND ON )
if ( "x${basename}" STREQUAL "xTHREAD" AND NOT TARGET Threads::Threads )
string ( APPEND Boost_ERROR_REASON_THREAD " (missing dependency: Threads)" )
set ( Boost_THREAD_FOUND OFF )
endif ( )
endif ( )
endif ( )
# Make variables changeable to the advanced user
mark_as_advanced (
B o o s t _ $ { b a s e n a m e } _ L I B R A R Y _ R E L E A S E
B o o s t _ $ { b a s e n a m e } _ L I B R A R Y _ D E B U G
)
endmacro ( )
# Detect changes in used variables.
# Compares the current variable value with the last one.
# In short form:
# v != v_LAST -> CHANGED = 1
# v is defined, v_LAST not -> CHANGED = 1
# v is not defined, but v_LAST is -> CHANGED = 1
# otherwise -> CHANGED = 0
# CHANGED is returned in variable named ${changed_var}
macro ( _Boost_CHANGE_DETECT changed_var )
set ( ${ changed_var } 0 )
foreach ( v ${ ARGN } )
if ( DEFINED _Boost_COMPONENTS_SEARCHED )
if ( ${ v } )
if ( _ ${ v } _LAST )
string ( COMPARE NOTEQUAL "${${v}}" "${_${v}_LAST}" _ ${ v } _CHANGED )
else ( )
set ( _ ${ v } _CHANGED 1 )
endif ( )
elseif ( _ ${ v } _LAST )
set ( _ ${ v } _CHANGED 1 )
endif ( )
if ( _ ${ v } _CHANGED )
set ( ${ changed_var } 1 )
endif ( )
else ( )
set ( _ ${ v } _CHANGED 0 )
endif ( )
endforeach ( )
endmacro ( )
#
# Find the given library (var).
# Use 'build_type' to support different lib paths for RELEASE or DEBUG builds
#
macro ( _Boost_FIND_LIBRARY var build_type )
find_library ( ${ var } ${ ARGN } )
if ( ${ var } )
# If this is the first library found then save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
if ( NOT Boost_LIBRARY_DIR_ ${ build_type } )
get_filename_component ( _dir "${${var}}" PATH )
set ( Boost_LIBRARY_DIR_ ${ build_type } "${_dir}" CACHE PATH "Boost library directory ${build_type}" FORCE )
endif ( )
elseif ( _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT )
# Try component-specific hints but do not save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
find_library ( ${ var } HINTS ${ _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT } ${ ARGN } )
endif ( )
# If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is known then search only there.
if ( Boost_LIBRARY_DIR_ ${ build_type } )
set ( _boost_LIBRARY_SEARCH_DIRS_ ${ build_type } ${ Boost_LIBRARY_DIR_${build_type } } NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" B o o s t _ L I B R A R Y _ D I R _ $ { b u i l d _ t y p e } " )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" _ b o o s t _ L I B R A R Y _ S E A R C H _ D I R S _ $ { b u i l d _ t y p e } " )
2023-11-01 06:11:15 +08:00
endif ( )
endmacro ( )
#-------------------------------------------------------------------------------
# Convert CMAKE_CXX_COMPILER_VERSION to boost compiler suffix version.
function ( _Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION _OUTPUT_VERSION_MAJOR _OUTPUT_VERSION_MINOR )
string ( REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1"
_ b o o s t _ C O M P I L E R _ V E R S I O N _ M A J O R " $ { C M A K E _ C X X _ C O M P I L E R _ V E R S I O N } " )
string ( REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\2"
_ b o o s t _ C O M P I L E R _ V E R S I O N _ M I N O R " $ { C M A K E _ C X X _ C O M P I L E R _ V E R S I O N } " )
set ( _boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}${_boost_COMPILER_VERSION_MINOR}" )
set ( ${ _OUTPUT_VERSION } ${ _boost_COMPILER_VERSION } PARENT_SCOPE )
set ( ${ _OUTPUT_VERSION_MAJOR } ${ _boost_COMPILER_VERSION_MAJOR } PARENT_SCOPE )
set ( ${ _OUTPUT_VERSION_MINOR } ${ _boost_COMPILER_VERSION_MINOR } PARENT_SCOPE )
endfunction ( )
#
# Take a list of libraries with "thread" in it
# and prepend duplicates with "thread_${Boost_THREADAPI}"
# at the front of the list
#
function ( _Boost_PREPEND_LIST_WITH_THREADAPI _output )
set ( _orig_libnames ${ ARGN } )
string ( REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}" )
set ( ${ _output } ${ _threadapi_libnames } ${ _orig_libnames } PARENT_SCOPE )
endfunction ( )
#
# If a library is found, replace its cache entry with its REALPATH
#
function ( _Boost_SWAP_WITH_REALPATH _library _docstring )
if ( ${ _library } )
get_filename_component ( _boost_filepathreal ${ ${_library } } REALPATH )
unset ( ${ _library } CACHE )
set ( ${ _library } ${ _boost_filepathreal } CACHE FILEPATH "${_docstring}" )
endif ( )
endfunction ( )
function ( _Boost_CHECK_SPELLING _var )
if ( ${ _var } )
string ( TOUPPER ${ _var } _var_UC )
message ( FATAL_ERROR "ERROR: ${_var} is not the correct spelling. The proper spelling is ${_var_UC}." )
endif ( )
endfunction ( )
# Guesses Boost's compiler prefix used in built library names
# Returns the guess by setting the variable pointed to by _ret
function ( _Boost_GUESS_COMPILER_PREFIX _ret )
if ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel" )
if ( WIN32 )
set ( _boost_COMPILER "-iw" )
else ( )
set ( _boost_COMPILER "-il" )
endif ( )
elseif ( GHSMULTI )
set ( _boost_COMPILER "-ghs" )
2023-11-01 06:20:22 +08:00
elseif ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC" )
2023-11-01 06:11:15 +08:00
if ( MSVC_TOOLSET_VERSION GREATER_EQUAL 150 )
# Not yet known.
set ( _boost_COMPILER "" )
elseif ( MSVC_TOOLSET_VERSION GREATER_EQUAL 140 )
# MSVC toolset 14.x versions are forward compatible.
set ( _boost_COMPILER "" )
foreach ( v 9 8 7 6 5 4 3 2 1 0 )
if ( MSVC_TOOLSET_VERSION GREATER_EQUAL 14 ${ v } )
list ( APPEND _boost_COMPILER "-vc14${v}" )
endif ( )
endforeach ( )
elseif ( MSVC_TOOLSET_VERSION GREATER_EQUAL 80 )
set ( _boost_COMPILER "-vc${MSVC_TOOLSET_VERSION}" )
elseif ( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.10 )
set ( _boost_COMPILER "-vc71" )
elseif ( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13 ) # Good luck!
set ( _boost_COMPILER "-vc7" ) # yes, this is correct
else ( ) # VS 6.0 Good luck!
set ( _boost_COMPILER "-vc6" ) # yes, this is correct
endif ( )
2023-11-01 06:20:22 +08:00
if ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang" )
string ( REPLACE "." ";" VERSION_LIST "${CMAKE_CXX_COMPILER_VERSION}" )
list ( GET VERSION_LIST 0 CLANG_VERSION_MAJOR )
set ( _boost_COMPILER "-clangw${CLANG_VERSION_MAJOR};${_boost_COMPILER}" )
endif ( )
2023-11-01 06:11:15 +08:00
elseif ( BORLAND )
set ( _boost_COMPILER "-bcb" )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" )
set ( _boost_COMPILER "-sw" )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "XL" )
set ( _boost_COMPILER "-xlc" )
elseif ( MINGW )
2023-11-01 06:20:22 +08:00
if ( Boost_VERSION_STRING VERSION_LESS 1.34 )
2023-11-01 06:11:15 +08:00
set ( _boost_COMPILER "-mgw" ) # no GCC version encoding prior to 1.34
else ( )
_Boost_COMPILER_DUMPVERSION ( _boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR )
2023-11-01 06:34:31 +08:00
if ( Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.73 AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER_EQUAL 5 )
set ( _boost_COMPILER "-mgw${_boost_COMPILER_VERSION_MAJOR}" )
else ( )
set ( _boost_COMPILER "-mgw${_boost_COMPILER_VERSION}" )
endif ( )
2023-11-01 06:11:15 +08:00
endif ( )
elseif ( UNIX )
_Boost_COMPILER_DUMPVERSION ( _boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR )
2023-11-01 06:20:22 +08:00
if ( NOT Boost_VERSION_STRING VERSION_LESS 1.69.0 )
2023-11-01 06:11:15 +08:00
# From GCC 5 and clang 4, versioning changes and minor becomes patch.
# For those compilers, patch is exclude from compiler tag in Boost 1.69+ library naming.
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 4 )
set ( _boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}" )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 3 )
set ( _boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}" )
endif ( )
endif ( )
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
2023-11-01 06:20:22 +08:00
if ( Boost_VERSION_STRING VERSION_LESS 1.34 )
2023-11-01 06:11:15 +08:00
set ( _boost_COMPILER "-gcc" ) # no GCC version encoding prior to 1.34
else ( )
# Determine which version of GCC we have.
if ( APPLE )
2023-11-01 06:20:22 +08:00
if ( Boost_VERSION_STRING VERSION_LESS 1.36.0 )
# In Boost <= 1.35.0, there is no mangled compiler name for
# the macOS/Darwin version of GCC.
2023-11-01 06:11:15 +08:00
set ( _boost_COMPILER "" )
2023-11-01 06:20:22 +08:00
else ( )
# In Boost 1.36.0 and newer, the mangled compiler name used
# on macOS/Darwin is "xgcc".
set ( _boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}" )
2023-11-01 06:11:15 +08:00
endif ( )
else ( )
set ( _boost_COMPILER "-gcc${_boost_COMPILER_VERSION}" )
endif ( )
endif ( )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
# TODO: Find out any Boost version constraints vs clang support.
set ( _boost_COMPILER "-clang${_boost_COMPILER_VERSION}" )
endif ( )
else ( )
set ( _boost_COMPILER "" )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" _ b o o s t _ C O M P I L E R " S O U R C E " g u e s s e d " )
2023-11-01 06:11:15 +08:00
set ( ${ _ret } ${ _boost_COMPILER } PARENT_SCOPE )
endfunction ( )
#
# Get component dependencies. Requires the dependencies to have been
# defined for the Boost release version.
#
# component - the component to check
# _ret - list of library dependencies
#
function ( _Boost_COMPONENT_DEPENDENCIES component _ret )
# Note: to add a new Boost release, run
#
# % cmake -DBOOST_DIR=/path/to/boost/source -P Utilities/Scripts/BoostScanDeps.cmake
#
# The output may be added in a new block below. If it's the same as
# the previous release, simply update the version range of the block
# for the previous release. Also check if any new components have
# been added, and add any new components to
# _Boost_COMPONENT_HEADERS.
#
# This information was originally generated by running
# BoostScanDeps.cmake against every boost release to date supported
# by FindBoost:
#
# % for version in /path/to/boost/sources/*
# do
# cmake -DBOOST_DIR=$version -P Utilities/Scripts/BoostScanDeps.cmake
# done
#
# The output was then updated by search and replace with these regexes:
#
# - Strip message(STATUS) prefix dashes
# s;^-- ;;
# - Indent
# s;^set(; set(;;
# - Add conditionals
2023-11-01 06:20:22 +08:00
# s;Scanning /path/to/boost/sources/boost_\(.*\)_\(.*\)_\(.*); elseif(NOT Boost_VERSION_STRING VERSION_LESS \1\.\2\.\3 AND Boost_VERSION_STRING VERSION_LESS xxxx);
2023-11-01 06:11:15 +08:00
#
# This results in the logic seen below, but will require the xxxx
# replacing with the following Boost release version (or the next
# minor version to be released, e.g. 1.59 was the latest at the time
2023-11-01 06:20:22 +08:00
# of writing, making 1.60 the next. Identical consecutive releases
# were then merged together by updating the end range of the first
# block and removing the following redundant blocks.
2023-11-01 06:11:15 +08:00
#
# Running the script against all historical releases should be
# required only if the BoostScanDeps.cmake script logic is changed.
# The addition of a new release should only require it to be run
# against the new release.
# Handle Python version suffixes
if ( component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$" )
set ( component "${CMAKE_MATCH_1}" )
set ( component_python_version "${CMAKE_MATCH_2}" )
endif ( )
set ( _Boost_IMPORTED_TARGETS TRUE )
2023-11-01 06:34:31 +08:00
if ( Boost_VERSION_STRING )
if ( Boost_VERSION_STRING VERSION_LESS 1.33.0 )
message ( WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION_STRING} (all versions older than 1.33)" )
set ( _Boost_IMPORTED_TARGETS FALSE )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.35.0 )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex thread )
set ( _Boost_REGEX_DEPENDENCIES thread )
set ( _Boost_WAVE_DEPENDENCIES filesystem thread )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.36.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_WAVE_DEPENDENCIES filesystem system thread )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.38.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_WAVE_DEPENDENCIES filesystem system thread )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.43.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_WAVE_DEPENDENCIES filesystem system thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.44.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_WAVE_DEPENDENCIES filesystem system thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.45.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random serialization )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_WAVE_DEPENDENCIES serialization filesystem system thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.47.0 )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.48.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.50.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES date_time )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.53.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.54.0 )
set ( _Boost_ATOMIC_DEPENDENCIES thread chrono system date_time )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.55.0 )
set ( _Boost_ATOMIC_DEPENDENCIES thread chrono system date_time )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.56.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.59.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.60.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.61.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.62.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.63.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FIBER_DEPENDENCIES context thread chrono system date_time )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.65.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time )
set ( _Boost_FIBER_DEPENDENCIES context thread chrono system date_time )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.67.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FIBER_DEPENDENCIES context thread chrono system date_time )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.68.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FIBER_DEPENDENCIES context thread chrono system date_time )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.69.0 )
set ( _Boost_CHRONO_DEPENDENCIES system )
set ( _Boost_CONTEXT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_CONTRACT_DEPENDENCIES thread chrono system date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context system )
set ( _Boost_FIBER_DEPENDENCIES context thread chrono system date_time )
set ( _Boost_FILESYSTEM_DEPENDENCIES system )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_RANDOM_DEPENDENCIES system )
set ( _Boost_THREAD_DEPENDENCIES chrono system date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.70.0 )
set ( _Boost_CONTRACT_DEPENDENCIES thread chrono date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context )
set ( _Boost_FIBER_DEPENDENCIES context )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_THREAD_DEPENDENCIES chrono date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono system )
set ( _Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.72.0 )
set ( _Boost_CONTRACT_DEPENDENCIES thread chrono date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context )
set ( _Boost_FIBER_DEPENDENCIES context )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_THREAD_DEPENDENCIES chrono date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono )
set ( _Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
elseif ( Boost_VERSION_STRING VERSION_LESS 1.73.0 )
set ( _Boost_CONTRACT_DEPENDENCIES thread chrono date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context )
set ( _Boost_FIBER_DEPENDENCIES context )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l chrono atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_THREAD_DEPENDENCIES chrono date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono )
set ( _Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
else ( )
set ( _Boost_CONTRACT_DEPENDENCIES thread chrono date_time )
set ( _Boost_COROUTINE_DEPENDENCIES context )
set ( _Boost_FIBER_DEPENDENCIES context )
set ( _Boost_IOSTREAMS_DEPENDENCIES regex )
set ( _Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic )
set ( _Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic )
set ( _Boost_MPI_DEPENDENCIES serialization )
set ( _Boost_MPI_PYTHON_DEPENDENCIES python ${ component_python_version } mpi serialization )
set ( _Boost_NUMPY_DEPENDENCIES python ${ component_python_version } )
set ( _Boost_THREAD_DEPENDENCIES chrono date_time atomic )
set ( _Boost_TIMER_DEPENDENCIES chrono )
set ( _Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic )
set ( _Boost_WSERIALIZATION_DEPENDENCIES serialization )
if ( Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.74.0 )
message ( WARNING "New Boost version may have incorrect or missing dependencies and imported targets" )
endif ( )
2023-11-01 06:11:15 +08:00
endif ( )
endif ( )
string ( TOUPPER ${ component } uppercomponent )
set ( ${ _ret } ${ _Boost_${uppercomponent } _DEPENDENCIES} PARENT_SCOPE )
set ( _Boost_IMPORTED_TARGETS ${ _Boost_IMPORTED_TARGETS } PARENT_SCOPE )
string ( REGEX REPLACE ";" " " _boost_DEPS_STRING "${_Boost_${uppercomponent}_DEPENDENCIES}" )
if ( NOT _boost_DEPS_STRING )
set ( _boost_DEPS_STRING "(none)" )
endif ( )
# message(STATUS "Dependencies for Boost::${component}: ${_boost_DEPS_STRING}")
endfunction ( )
#
# Get component headers. This is the primary header (or headers) for
# a given component, and is used to check that the headers are present
# as well as the library itself as an extra sanity check of the build
# environment.
#
# component - the component to check
# _hdrs
#
function ( _Boost_COMPONENT_HEADERS component _hdrs )
# Handle Python version suffixes
if ( component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$" )
set ( component "${CMAKE_MATCH_1}" )
set ( component_python_version "${CMAKE_MATCH_2}" )
endif ( )
# Note: new boost components will require adding here. The header
# must be present in all versions of Boost providing a library.
set ( _Boost_ATOMIC_HEADERS "boost/atomic.hpp" )
set ( _Boost_CHRONO_HEADERS "boost/chrono.hpp" )
set ( _Boost_CONTAINER_HEADERS "boost/container/container_fwd.hpp" )
set ( _Boost_CONTRACT_HEADERS "boost/contract.hpp" )
2023-11-01 06:20:22 +08:00
if ( Boost_VERSION_STRING VERSION_LESS 1.61.0 )
2023-11-01 06:11:15 +08:00
set ( _Boost_CONTEXT_HEADERS "boost/context/all.hpp" )
else ( )
set ( _Boost_CONTEXT_HEADERS "boost/context/detail/fcontext.hpp" )
endif ( )
set ( _Boost_COROUTINE_HEADERS "boost/coroutine/all.hpp" )
set ( _Boost_DATE_TIME_HEADERS "boost/date_time/date.hpp" )
set ( _Boost_EXCEPTION_HEADERS "boost/exception/exception.hpp" )
set ( _Boost_FIBER_HEADERS "boost/fiber/all.hpp" )
set ( _Boost_FILESYSTEM_HEADERS "boost/filesystem/path.hpp" )
set ( _Boost_GRAPH_HEADERS "boost/graph/adjacency_list.hpp" )
set ( _Boost_GRAPH_PARALLEL_HEADERS "boost/graph/adjacency_list.hpp" )
set ( _Boost_IOSTREAMS_HEADERS "boost/iostreams/stream.hpp" )
set ( _Boost_LOCALE_HEADERS "boost/locale.hpp" )
set ( _Boost_LOG_HEADERS "boost/log/core.hpp" )
set ( _Boost_LOG_SETUP_HEADERS "boost/log/detail/setup_config.hpp" )
set ( _Boost_MATH_HEADERS "boost/math_fwd.hpp" )
set ( _Boost_MATH_C99_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MATH_C99F_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MATH_C99L_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MATH_TR1_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MATH_TR1F_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MATH_TR1L_HEADERS "boost/math/tr1.hpp" )
set ( _Boost_MPI_HEADERS "boost/mpi.hpp" )
set ( _Boost_MPI_PYTHON_HEADERS "boost/mpi/python/config.hpp" )
set ( _Boost_NUMPY_HEADERS "boost/python/numpy.hpp" )
2023-11-01 06:34:31 +08:00
set ( _Boost_NOWIDE_HEADERS "boost/nowide/cstdlib.hpp" )
2023-11-01 06:11:15 +08:00
set ( _Boost_PRG_EXEC_MONITOR_HEADERS "boost/test/prg_exec_monitor.hpp" )
set ( _Boost_PROGRAM_OPTIONS_HEADERS "boost/program_options.hpp" )
set ( _Boost_PYTHON_HEADERS "boost/python.hpp" )
set ( _Boost_RANDOM_HEADERS "boost/random.hpp" )
set ( _Boost_REGEX_HEADERS "boost/regex.hpp" )
set ( _Boost_SERIALIZATION_HEADERS "boost/serialization/serialization.hpp" )
set ( _Boost_SIGNALS_HEADERS "boost/signals.hpp" )
set ( _Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_STACKTRACE_BASIC_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_STACKTRACE_NOOP_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_STACKTRACE_WINDBG_CACHED_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_STACKTRACE_WINDBG_HEADERS "boost/stacktrace.hpp" )
set ( _Boost_SYSTEM_HEADERS "boost/system/config.hpp" )
set ( _Boost_TEST_EXEC_MONITOR_HEADERS "boost/test/test_exec_monitor.hpp" )
set ( _Boost_THREAD_HEADERS "boost/thread.hpp" )
set ( _Boost_TIMER_HEADERS "boost/timer.hpp" )
set ( _Boost_TYPE_ERASURE_HEADERS "boost/type_erasure/config.hpp" )
set ( _Boost_UNIT_TEST_FRAMEWORK_HEADERS "boost/test/framework.hpp" )
set ( _Boost_WAVE_HEADERS "boost/wave.hpp" )
set ( _Boost_WSERIALIZATION_HEADERS "boost/archive/text_wiarchive.hpp" )
if ( WIN32 )
set ( _Boost_BZIP2_HEADERS "boost/iostreams/filter/bzip2.hpp" )
set ( _Boost_ZLIB_HEADERS "boost/iostreams/filter/zlib.hpp" )
endif ( )
string ( TOUPPER ${ component } uppercomponent )
set ( ${ _hdrs } ${ _Boost_${uppercomponent } _HEADERS} PARENT_SCOPE )
string ( REGEX REPLACE ";" " " _boost_HDRS_STRING "${_Boost_${uppercomponent}_HEADERS}" )
if ( NOT _boost_HDRS_STRING )
set ( _boost_HDRS_STRING "(none)" )
endif ( )
# message(STATUS "Headers for Boost::${component}: ${_boost_HDRS_STRING}")
endfunction ( )
#
# Determine if any missing dependencies require adding to the component list.
#
# Sets _Boost_${COMPONENT}_DEPENDENCIES for each required component,
# plus _Boost_IMPORTED_TARGETS (TRUE if imported targets should be
# defined; FALSE if dependency information is unavailable).
#
# componentvar - the component list variable name
# extravar - the indirect dependency list variable name
#
#
function ( _Boost_MISSING_DEPENDENCIES componentvar extravar )
# _boost_unprocessed_components - list of components requiring processing
# _boost_processed_components - components already processed (or currently being processed)
# _boost_new_components - new components discovered for future processing
#
list ( APPEND _boost_unprocessed_components ${ ${componentvar } } )
while ( _boost_unprocessed_components )
list ( APPEND _boost_processed_components ${ _boost_unprocessed_components } )
foreach ( component ${ _boost_unprocessed_components } )
string ( TOUPPER ${ component } uppercomponent )
set ( ${ _ret } ${ _Boost_${uppercomponent } _DEPENDENCIES} PARENT_SCOPE )
_Boost_COMPONENT_DEPENDENCIES ( "${component}" _Boost_ ${ uppercomponent } _DEPENDENCIES )
set ( _Boost_ ${ uppercomponent } _DEPENDENCIES ${ _Boost_${uppercomponent } _DEPENDENCIES} PARENT_SCOPE )
set ( _Boost_IMPORTED_TARGETS ${ _Boost_IMPORTED_TARGETS } PARENT_SCOPE )
foreach ( componentdep ${ _Boost_${uppercomponent } _DEPENDENCIES} )
if ( NOT ( "${componentdep}" IN_LIST _boost_processed_components OR "${componentdep}" IN_LIST _boost_new_components ) )
list ( APPEND _boost_new_components ${ componentdep } )
endif ( )
endforeach ( )
endforeach ( )
set ( _boost_unprocessed_components ${ _boost_new_components } )
unset ( _boost_new_components )
endwhile ( )
set ( _boost_extra_components ${ _boost_processed_components } )
if ( _boost_extra_components AND ${ componentvar } )
list ( REMOVE_ITEM _boost_extra_components ${ ${componentvar } } )
endif ( )
set ( ${ componentvar } ${ _boost_processed_components } PARENT_SCOPE )
set ( ${ extravar } ${ _boost_extra_components } PARENT_SCOPE )
endfunction ( )
#
# Some boost libraries may require particular set of compler features.
# The very first one was `boost::fiber` introduced in Boost 1.62.
# One can check required compiler features of it in
# - `${Boost_ROOT}/libs/fiber/build/Jamfile.v2`;
# - `${Boost_ROOT}/libs/context/build/Jamfile.v2`.
#
# TODO (Re)Check compiler features on (every?) release ???
# One may use the following command to get the files to check:
#
# $ find . -name Jamfile.v2 | grep build | xargs grep -l cxx1
#
function ( _Boost_COMPILER_FEATURES component _ret )
# Boost >= 1.62
2023-11-01 06:20:22 +08:00
if ( NOT Boost_VERSION_STRING VERSION_LESS 1.62.0 )
2023-11-01 06:11:15 +08:00
set ( _Boost_FIBER_COMPILER_FEATURES
c x x _ a l i a s _ t e m p l a t e s
c x x _ a u t o _ t y p e
c x x _ c o n s t e x p r
c x x _ d e f a u l t e d _ f u n c t i o n s
c x x _ f i n a l
c x x _ l a m b d a s
c x x _ n o e x c e p t
c x x _ n u l l p t r
c x x _ r v a l u e _ r e f e r e n c e s
c x x _ t h r e a d _ l o c a l
c x x _ v a r i a d i c _ t e m p l a t e s
)
# Compiler feature for `context` same as for `fiber`.
set ( _Boost_CONTEXT_COMPILER_FEATURES ${ _Boost_FIBER_COMPILER_FEATURES } )
endif ( )
# Boost Contract library available in >= 1.67
if ( NOT Boost_VERSION_STRING VERSION_LESS 1.67.0 )
# From `libs/contract/build/boost_contract_build.jam`
set ( _Boost_CONTRACT_COMPILER_FEATURES
c x x _ l a m b d a s
c x x _ v a r i a d i c _ t e m p l a t e s
)
endif ( )
string ( TOUPPER ${ component } uppercomponent )
set ( ${ _ret } ${ _Boost_${uppercomponent } _COMPILER_FEATURES} PARENT_SCOPE )
endfunction ( )
#
# Update library search directory hint variable with paths used by prebuilt boost binaries.
#
# Prebuilt windows binaries (https://sourceforge.net/projects/boost/files/boost-binaries/)
# have library directories named using MSVC compiler version and architecture.
# This function would append corresponding directories if MSVC is a current compiler,
# so having `BOOST_ROOT` would be enough to specify to find everything.
#
function ( _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS componentlibvar basedir )
if ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( _arch_suffix 64 )
else ( )
set ( _arch_suffix 32 )
endif ( )
if ( MSVC_TOOLSET_VERSION GREATER_EQUAL 150 )
# Not yet known.
elseif ( MSVC_TOOLSET_VERSION GREATER_EQUAL 140 )
# MSVC toolset 14.x versions are forward compatible.
foreach ( v 9 8 7 6 5 4 3 2 1 0 )
if ( MSVC_TOOLSET_VERSION GREATER_EQUAL 14 ${ v } )
list ( APPEND ${ componentlibvar } ${ basedir } /lib ${ _arch_suffix } -msvc-14. ${ v } )
endif ( )
endforeach ( )
elseif ( MSVC_TOOLSET_VERSION GREATER_EQUAL 80 )
math ( EXPR _toolset_major_version "${MSVC_TOOLSET_VERSION} / 10" )
list ( APPEND ${ componentlibvar } ${ basedir } /lib ${ _arch_suffix } -msvc- ${ _toolset_major_version } .0 )
endif ( )
set ( ${ componentlibvar } ${ ${componentlibvar } } PARENT_SCOPE )
endif ( )
endfunction ( )
#
# End functions/macros
#
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# main.
#-------------------------------------------------------------------------------
# If the user sets Boost_LIBRARY_DIR, use it as the default for both
# configurations.
if ( NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR )
set ( Boost_LIBRARY_DIR_RELEASE "${Boost_LIBRARY_DIR}" )
endif ( )
if ( NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR )
set ( Boost_LIBRARY_DIR_DEBUG "${Boost_LIBRARY_DIR}" )
endif ( )
if ( NOT DEFINED Boost_USE_DEBUG_LIBS )
set ( Boost_USE_DEBUG_LIBS TRUE )
endif ( )
if ( NOT DEFINED Boost_USE_RELEASE_LIBS )
set ( Boost_USE_RELEASE_LIBS TRUE )
endif ( )
if ( NOT DEFINED Boost_USE_MULTITHREADED )
set ( Boost_USE_MULTITHREADED TRUE )
endif ( )
if ( NOT DEFINED Boost_USE_DEBUG_RUNTIME )
set ( Boost_USE_DEBUG_RUNTIME TRUE )
endif ( )
# Check the version of Boost against the requested version.
if ( Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR )
message ( SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34" )
endif ( )
if ( Boost_FIND_VERSION_EXACT )
# The version may appear in a directory with or without the patch
# level, even when the patch level is non-zero.
set ( _boost_TEST_VERSIONS
" $ { B o o s t _ F I N D _ V E R S I O N _ M A J O R } . $ { B o o s t _ F I N D _ V E R S I O N _ M I N O R } . $ { B o o s t _ F I N D _ V E R S I O N _ P A T C H } "
" $ { B o o s t _ F I N D _ V E R S I O N _ M A J O R } . $ { B o o s t _ F I N D _ V E R S I O N _ M I N O R } " )
else ( )
# The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request.
#
# Note: When adding a new Boost release, also update the dependency
# information in _Boost_COMPONENT_DEPENDENCIES and
# _Boost_COMPONENT_HEADERS. See the instructions at the top of
# _Boost_COMPONENT_DEPENDENCIES.
set ( _Boost_KNOWN_VERSIONS ${ Boost_ADDITIONAL_VERSIONS }
2023-11-01 06:34:31 +08:00
" 1 . 7 3 . 0 " " 1 . 7 3 " " 1 . 7 2 . 0 " " 1 . 7 2 " " 1 . 7 1 . 0 " " 1 . 7 1 " " 1 . 7 0 . 0 " " 1 . 7 0 " " 1 . 6 9 . 0 " " 1 . 6 9 "
2023-11-01 06:11:15 +08:00
" 1 . 6 8 . 0 " " 1 . 6 8 " " 1 . 6 7 . 0 " " 1 . 6 7 " " 1 . 6 6 . 0 " " 1 . 6 6 " " 1 . 6 5 . 1 " " 1 . 6 5 . 0 " " 1 . 6 5 "
" 1 . 6 4 . 0 " " 1 . 6 4 " " 1 . 6 3 . 0 " " 1 . 6 3 " " 1 . 6 2 . 0 " " 1 . 6 2 " " 1 . 6 1 . 0 " " 1 . 6 1 " " 1 . 6 0 . 0 " " 1 . 6 0 "
" 1 . 5 9 . 0 " " 1 . 5 9 " " 1 . 5 8 . 0 " " 1 . 5 8 " " 1 . 5 7 . 0 " " 1 . 5 7 " " 1 . 5 6 . 0 " " 1 . 5 6 " " 1 . 5 5 . 0 " " 1 . 5 5 "
" 1 . 5 4 . 0 " " 1 . 5 4 " " 1 . 5 3 . 0 " " 1 . 5 3 " " 1 . 5 2 . 0 " " 1 . 5 2 " " 1 . 5 1 . 0 " " 1 . 5 1 "
" 1 . 5 0 . 0 " " 1 . 5 0 " " 1 . 4 9 . 0 " " 1 . 4 9 " " 1 . 4 8 . 0 " " 1 . 4 8 " " 1 . 4 7 . 0 " " 1 . 4 7 " " 1 . 4 6 . 1 "
" 1 . 4 6 . 0 " " 1 . 4 6 " " 1 . 4 5 . 0 " " 1 . 4 5 " " 1 . 4 4 . 0 " " 1 . 4 4 " " 1 . 4 3 . 0 " " 1 . 4 3 " " 1 . 4 2 . 0 " " 1 . 4 2 "
" 1 . 4 1 . 0 " " 1 . 4 1 " " 1 . 4 0 . 0 " " 1 . 4 0 " " 1 . 3 9 . 0 " " 1 . 3 9 " " 1 . 3 8 . 0 " " 1 . 3 8 " " 1 . 3 7 . 0 " " 1 . 3 7 "
" 1 . 3 6 . 1 " " 1 . 3 6 . 0 " " 1 . 3 6 " " 1 . 3 5 . 1 " " 1 . 3 5 . 0 " " 1 . 3 5 " " 1 . 3 4 . 1 " " 1 . 3 4 . 0 "
" 1 . 3 4 " " 1 . 3 3 . 1 " " 1 . 3 3 . 0 " " 1 . 3 3 " )
set ( _boost_TEST_VERSIONS )
if ( Boost_FIND_VERSION )
set ( _Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}" )
# Select acceptable versions.
foreach ( version ${ _Boost_KNOWN_VERSIONS } )
if ( NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}" )
# This version is high enough.
list ( APPEND _boost_TEST_VERSIONS "${version}" )
elseif ( "${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99" )
# This version is a short-form for the requested version with
# the patch level dropped.
list ( APPEND _boost_TEST_VERSIONS "${version}" )
endif ( )
endforeach ( )
else ( )
# Any version is acceptable.
set ( _boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}" )
endif ( )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_TEST_VERSIONS" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_MULTITHREADED" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_LIBS" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_RUNTIME" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_ADDITIONAL_VERSIONS" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NO_SYSTEM_PATHS" )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
cmake_policy ( GET CMP0074 _Boost_CMP0074 )
if ( NOT "x${_Boost_CMP0074}x" STREQUAL "xNEWx" )
_Boost_CHECK_SPELLING ( Boost_ROOT )
endif ( )
unset ( _Boost_CMP0074 )
2023-11-01 06:11:15 +08:00
_Boost_CHECK_SPELLING ( Boost_LIBRARYDIR )
_Boost_CHECK_SPELLING ( Boost_INCLUDEDIR )
# Collect environment variable inputs as hints. Do not consider changes.
foreach ( v BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR )
set ( _env $ENV{ ${v } } )
if ( _env )
file ( TO_CMAKE_PATH "${_env}" _ENV_ ${ v } )
else ( )
set ( _ENV_ ${ v } "" )
endif ( )
endforeach ( )
if ( NOT _ENV_BOOST_ROOT AND _ENV_BOOSTROOT )
set ( _ENV_BOOST_ROOT "${_ENV_BOOSTROOT}" )
endif ( )
# Collect inputs and cached results. Detect changes since the last run.
if ( NOT BOOST_ROOT AND BOOSTROOT )
set ( BOOST_ROOT "${BOOSTROOT}" )
endif ( )
set ( _Boost_VARS_DIR
B O O S T _ R O O T
B o o s t _ N O _ S Y S T E M _ P A T H S
)
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT" ENVIRONMENT )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR" ENVIRONMENT )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR" ENVIRONMENT )
2023-11-01 06:11:15 +08:00
# ------------------------------------------------------------------------
# Search for Boost include DIR
# ------------------------------------------------------------------------
set ( _Boost_VARS_INC BOOST_INCLUDEDIR Boost_INCLUDE_DIR Boost_ADDITIONAL_VERSIONS )
_Boost_CHANGE_DETECT ( _Boost_CHANGE_INCDIR ${ _Boost_VARS_DIR } ${ _Boost_VARS_INC } )
# Clear Boost_INCLUDE_DIR if it did not change but other input affecting the
# location did. We will find a new one based on the new inputs.
if ( _Boost_CHANGE_INCDIR AND NOT _Boost_INCLUDE_DIR_CHANGED )
unset ( Boost_INCLUDE_DIR CACHE )
endif ( )
if ( NOT Boost_INCLUDE_DIR )
set ( _boost_INCLUDE_SEARCH_DIRS "" )
if ( BOOST_INCLUDEDIR )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS ${ BOOST_INCLUDEDIR } )
elseif ( _ENV_BOOST_INCLUDEDIR )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS ${ _ENV_BOOST_INCLUDEDIR } )
endif ( )
if ( BOOST_ROOT )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS ${ BOOST_ROOT } /include ${ BOOST_ROOT } )
elseif ( _ENV_BOOST_ROOT )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS ${ _ENV_BOOST_ROOT } /include ${ _ENV_BOOST_ROOT } )
endif ( )
if ( Boost_NO_SYSTEM_PATHS )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH )
else ( )
if ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
foreach ( ver ${ _boost_TEST_VERSIONS } )
string ( REPLACE "." "_" ver "${ver}" )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}" )
endforeach ( )
endif ( )
list ( APPEND _boost_INCLUDE_SEARCH_DIRS PATHS
C : / b o o s t / i n c l u d e
C : / b o o s t
/ s w / l o c a l / i n c l u d e
)
endif ( )
# Try to find Boost by stepping backwards through the Boost versions
# we know about.
# Build a list of path suffixes for each version.
set ( _boost_PATH_SUFFIXES )
foreach ( _boost_VER ${ _boost_TEST_VERSIONS } )
# Add in a path suffix, based on the required version, ideally
# we could read this from version.hpp, but for that to work we'd
# need to know the include dir already
set ( _boost_BOOSTIFIED_VERSION )
# Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
if ( _boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)" )
set ( _boost_BOOSTIFIED_VERSION
" $ { C M A K E _ M A T C H _ 1 } _ $ { C M A K E _ M A T C H _ 2 } _ $ { C M A K E _ M A T C H _ 3 } " )
elseif ( _boost_VER MATCHES "([0-9]+)\\.([0-9]+)" )
set ( _boost_BOOSTIFIED_VERSION
" $ { C M A K E _ M A T C H _ 1 } _ $ { C M A K E _ M A T C H _ 2 } " )
endif ( )
list ( APPEND _boost_PATH_SUFFIXES
" b o o s t - $ { _ b o o s t _ B O O S T I F I E D _ V E R S I O N } "
" b o o s t _ $ { _ b o o s t _ B O O S T I F I E D _ V E R S I O N } "
" b o o s t / b o o s t - $ { _ b o o s t _ B O O S T I F I E D _ V E R S I O N } "
" b o o s t / b o o s t _ $ { _ b o o s t _ B O O S T I F I E D _ V E R S I O N } "
)
endforeach ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_INCLUDE_SEARCH_DIRS" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_PATH_SUFFIXES" )
2023-11-01 06:11:15 +08:00
# Look for a standard boost header file.
find_path ( Boost_INCLUDE_DIR
N A M E S b o o s t / c o n f i g . h p p
H I N T S $ { _ b o o s t _ I N C L U D E _ S E A R C H _ D I R S }
P A T H _ S U F F I X E S $ { _ b o o s t _ P A T H _ S U F F I X E S }
)
endif ( )
# ------------------------------------------------------------------------
# Extract version information from version.hpp
# ------------------------------------------------------------------------
if ( Boost_INCLUDE_DIR )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" l o c a t i o n o f v e r s i o n . h p p : $ { B o o s t _ I N C L U D E _ D I R } / b o o s t / v e r s i o n . h p p " )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
# Extract Boost_VERSION_MACRO and Boost_LIB_VERSION from version.hpp
set ( Boost_VERSION_MACRO 0 )
2023-11-01 06:11:15 +08:00
set ( Boost_LIB_VERSION "" )
file ( STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION " )
2023-11-01 06:20:22 +08:00
if ( "${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_VERSION ([0-9]+)" )
set ( Boost_VERSION_MACRO "${CMAKE_MATCH_1}" )
endif ( )
if ( "${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_LIB_VERSION \" ( [0-9_]+ ) \"")
set ( Boost_LIB_VERSION "${CMAKE_MATCH_1}" )
endif ( )
2023-11-01 06:11:15 +08:00
unset ( _boost_VERSION_HPP_CONTENTS )
2023-11-01 06:20:22 +08:00
# Calculate version components
math ( EXPR Boost_VERSION_MAJOR "${Boost_VERSION_MACRO} / 100000" )
math ( EXPR Boost_VERSION_MINOR "${Boost_VERSION_MACRO} / 100 % 1000" )
math ( EXPR Boost_VERSION_PATCH "${Boost_VERSION_MACRO} % 100" )
set ( Boost_VERSION_COUNT 3 )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
# Define alias variables for backwards compat.
set ( Boost_MAJOR_VERSION ${ Boost_VERSION_MAJOR } )
set ( Boost_MINOR_VERSION ${ Boost_VERSION_MINOR } )
set ( Boost_SUBMINOR_VERSION ${ Boost_VERSION_PATCH } )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
# Define Boost version in x.y.z format
set ( Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}" )
# Define final Boost_VERSION
cmake_policy ( GET CMP0093 _Boost_CMP0093
P A R E N T _ S C O P E # undocumented, do not use outside of CMake
)
if ( "x${_Boost_CMP0093}x" STREQUAL "xNEWx" )
set ( Boost_VERSION ${ Boost_VERSION_STRING } )
2023-11-01 06:11:15 +08:00
else ( )
2023-11-01 06:20:22 +08:00
set ( Boost_VERSION ${ Boost_VERSION_MACRO } )
2023-11-01 06:11:15 +08:00
endif ( )
2023-11-01 06:20:22 +08:00
unset ( _Boost_CMP0093 )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_STRING" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MACRO" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MAJOR" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MINOR" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_PATCH" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_COUNT" )
2023-11-01 06:11:15 +08:00
endif ( )
# ------------------------------------------------------------------------
# Prefix initialization
# ------------------------------------------------------------------------
2023-11-01 06:36:59 +08:00
if ( NOT DEFINED Boost_LIB_PREFIX )
# Boost's static libraries use a "lib" prefix on DLL platforms
# to distinguish them from the DLL import libraries.
if ( Boost_USE_STATIC_LIBS AND (
( WIN32 A N D N O T CYGWIN )
O R G H S M U L T I
) )
set ( Boost_LIB_PREFIX "lib" )
else ( )
set ( Boost_LIB_PREFIX "" )
endif ( )
2023-11-01 06:11:15 +08:00
endif ( )
if ( NOT Boost_NAMESPACE )
set ( Boost_NAMESPACE "boost" )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_LIB_PREFIX" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NAMESPACE" )
2023-11-01 06:11:15 +08:00
# ------------------------------------------------------------------------
# Suffix initialization and compiler suffix detection.
# ------------------------------------------------------------------------
set ( _Boost_VARS_NAME
B o o s t _ N A M E S P A C E
B o o s t _ C O M P I L E R
B o o s t _ T H R E A D A P I
B o o s t _ U S E _ D E B U G _ P Y T H O N
B o o s t _ U S E _ M U L T I T H R E A D E D
B o o s t _ U S E _ S T A T I C _ L I B S
B o o s t _ U S E _ S T A T I C _ R U N T I M E
B o o s t _ U S E _ S T L P O R T
B o o s t _ U S E _ S T L P O R T _ D E P R E C A T E D _ N A T I V E _ I O S T R E A M S
)
_Boost_CHANGE_DETECT ( _Boost_CHANGE_LIBNAME ${ _Boost_VARS_NAME } )
# Setting some more suffixes for the library
if ( Boost_COMPILER )
set ( _boost_COMPILER ${ Boost_COMPILER } )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" _ b o o s t _ C O M P I L E R " S O U R C E " u s e r - s p e c i f i e d v i a B o o s t _ C O M P I L E R " )
2023-11-01 06:11:15 +08:00
else ( )
# Attempt to guess the compiler suffix
# NOTE: this is not perfect yet, if you experience any issues
# please report them and use the Boost_COMPILER variable
# to work around the problems.
_Boost_GUESS_COMPILER_PREFIX ( _boost_COMPILER )
endif ( )
set ( _boost_MULTITHREADED "-mt" )
if ( NOT Boost_USE_MULTITHREADED )
set ( _boost_MULTITHREADED "" )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_MULTITHREADED" )
2023-11-01 06:11:15 +08:00
#======================
# Systematically build up the Boost ABI tag for the 'tagged' and 'versioned' layouts
# http://boost.org/doc/libs/1_66_0/more/getting_started/windows.html#library-naming
# http://boost.org/doc/libs/1_66_0/boost/config/auto_link.hpp
# http://boost.org/doc/libs/1_66_0/tools/build/src/tools/common.jam
# http://boost.org/doc/libs/1_66_0/boostcpp.jam
set ( _boost_RELEASE_ABI_TAG "-" )
set ( _boost_DEBUG_ABI_TAG "-" )
# Key Use this library when:
# s linking statically to the C++ standard library and
# compiler runtime support libraries.
if ( Boost_USE_STATIC_RUNTIME )
set ( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s" )
set ( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}s" )
endif ( )
# g using debug versions of the standard and runtime
# support libraries
if ( WIN32 AND Boost_USE_DEBUG_RUNTIME )
if ( "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC"
O R " x $ { C M A K E _ C X X _ C O M P I L E R _ I D } " S T R E Q U A L " x C l a n g "
O R " x $ { C M A K E _ C X X _ C O M P I L E R _ I D } " S T R E Q U A L " x I n t e l " )
string ( APPEND _boost_DEBUG_ABI_TAG "g" )
endif ( )
endif ( )
# y using special debug build of python
if ( Boost_USE_DEBUG_PYTHON )
string ( APPEND _boost_DEBUG_ABI_TAG "y" )
endif ( )
# d using a debug version of your code
string ( APPEND _boost_DEBUG_ABI_TAG "d" )
# p using the STLport standard library rather than the
# default one supplied with your compiler
if ( Boost_USE_STLPORT )
string ( APPEND _boost_RELEASE_ABI_TAG "p" )
string ( APPEND _boost_DEBUG_ABI_TAG "p" )
endif ( )
# n using the STLport deprecated "native iostreams" feature
# removed from the documentation in 1.43.0 but still present in
# boost/config/auto_link.hpp
if ( Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS )
string ( APPEND _boost_RELEASE_ABI_TAG "n" )
string ( APPEND _boost_DEBUG_ABI_TAG "n" )
endif ( )
# -x86 Architecture and address model tag
# First character is the architecture, then word-size, either 32 or 64
# Only used in 'versioned' layout, added in Boost 1.66.0
if ( DEFINED Boost_ARCHITECTURE )
set ( _boost_ARCHITECTURE_TAG "${Boost_ARCHITECTURE}" )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" _ b o o s t _ A R C H I T E C T U R E _ T A G " S O U R C E " u s e r - s p e c i f i e d v i a B o o s t _ A R C H I T E C T U R E " )
2023-11-01 06:11:15 +08:00
else ( )
set ( _boost_ARCHITECTURE_TAG "" )
# {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
2023-11-01 06:20:22 +08:00
if ( NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION_STRING VERSION_LESS 1.66.0 )
2023-11-01 06:11:15 +08:00
string ( APPEND _boost_ARCHITECTURE_TAG "-" )
# This needs to be kept in-sync with the section of CMakePlatformId.h.in
# inside 'defined(_WIN32) && defined(_MSC_VER)'
if ( CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64" )
string ( APPEND _boost_ARCHITECTURE_TAG "i" )
elseif ( CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
O R C M A K E _ C X X _ C O M P I L E R _ A R C H I T E C T U R E _ I D S T R E Q U A L " x 6 4 " )
string ( APPEND _boost_ARCHITECTURE_TAG "x" )
elseif ( CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM" )
string ( APPEND _boost_ARCHITECTURE_TAG "a" )
elseif ( CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS" )
string ( APPEND _boost_ARCHITECTURE_TAG "m" )
endif ( )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
string ( APPEND _boost_ARCHITECTURE_TAG "64" )
else ( )
string ( APPEND _boost_ARCHITECTURE_TAG "32" )
endif ( )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" _ b o o s t _ A R C H I T E C T U R E _ T A G " S O U R C E " d e t e c t e d " )
2023-11-01 06:11:15 +08:00
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_RELEASE_ABI_TAG" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_DEBUG_ABI_TAG" )
2023-11-01 06:11:15 +08:00
# ------------------------------------------------------------------------
# Begin finding boost libraries
# ------------------------------------------------------------------------
set ( _Boost_VARS_LIB "" )
foreach ( c DEBUG RELEASE )
set ( _Boost_VARS_LIB_ ${ c } BOOST_LIBRARYDIR Boost_LIBRARY_DIR_ ${ c } )
list ( APPEND _Boost_VARS_LIB ${ _Boost_VARS_LIB_${c } } )
_Boost_CHANGE_DETECT ( _Boost_CHANGE_LIBDIR_ ${ c } ${ _Boost_VARS_DIR } ${ _Boost_VARS_LIB_${c } } Boost_INCLUDE_DIR )
# Clear Boost_LIBRARY_DIR_${c} if it did not change but other input affecting the
# location did. We will find a new one based on the new inputs.
if ( _Boost_CHANGE_LIBDIR_ ${ c } AND NOT _Boost_LIBRARY_DIR_ ${ c } _CHANGED )
unset ( Boost_LIBRARY_DIR_ ${ c } CACHE )
endif ( )
# If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is set, prefer its value.
if ( Boost_LIBRARY_DIR_ ${ c } )
set ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } ${ Boost_LIBRARY_DIR_${c } } NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH )
else ( )
set ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "" )
if ( BOOST_LIBRARYDIR )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } ${ BOOST_LIBRARYDIR } )
elseif ( _ENV_BOOST_LIBRARYDIR )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } ${ _ENV_BOOST_LIBRARYDIR } )
endif ( )
if ( BOOST_ROOT )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } ${ BOOST_ROOT } /lib ${ BOOST_ROOT } /stage/lib )
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "${BOOST_ROOT}" )
elseif ( _ENV_BOOST_ROOT )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } ${ _ENV_BOOST_ROOT } /lib ${ _ENV_BOOST_ROOT } /stage/lib )
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "${_ENV_BOOST_ROOT}" )
endif ( )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c }
$ { B o o s t _ I N C L U D E _ D I R } / l i b
$ { B o o s t _ I N C L U D E _ D I R } / . . / l i b
$ { B o o s t _ I N C L U D E _ D I R } / s t a g e / l i b
)
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "${Boost_INCLUDE_DIR}/.." )
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "${Boost_INCLUDE_DIR}" )
if ( Boost_NO_SYSTEM_PATHS )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH )
else ( )
foreach ( ver ${ _boost_TEST_VERSIONS } )
string ( REPLACE "." "_" ver "${ver}" )
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "C:/local/boost_${ver}" )
endforeach ( )
_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS ( _boost_LIBRARY_SEARCH_DIRS_ ${ c } "C:/boost" )
list ( APPEND _boost_LIBRARY_SEARCH_DIRS_ ${ c } PATHS
C : / b o o s t / l i b
C : / b o o s t
/ s w / l o c a l / l i b
)
endif ( )
endif ( )
endforeach ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_RELEASE" )
_Boost_DEBUG_PRINT_VAR ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_DEBUG" )
2023-11-01 06:11:15 +08:00
# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
if ( Boost_USE_STATIC_LIBS )
set ( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${ CMAKE_FIND_LIBRARY_SUFFIXES } )
if ( WIN32 )
list ( INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a )
else ( )
set ( CMAKE_FIND_LIBRARY_SUFFIXES .a )
endif ( )
endif ( )
# We want to use the tag inline below without risking double dashes
if ( _boost_RELEASE_ABI_TAG )
if ( ${ _boost_RELEASE_ABI_TAG } STREQUAL "-" )
set ( _boost_RELEASE_ABI_TAG "" )
endif ( )
endif ( )
if ( _boost_DEBUG_ABI_TAG )
if ( ${ _boost_DEBUG_ABI_TAG } STREQUAL "-" )
set ( _boost_DEBUG_ABI_TAG "" )
endif ( )
endif ( )
# The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
# on WIN32 was to:
# 1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
# 2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
# We maintain this behavior since changing it could break people's builds.
# To disable the ambiguous behavior, the user need only
# set Boost_USE_STATIC_RUNTIME either ON or OFF.
set ( _boost_STATIC_RUNTIME_WORKAROUND false )
if ( WIN32 AND Boost_USE_STATIC_LIBS )
if ( NOT DEFINED Boost_USE_STATIC_RUNTIME )
set ( _boost_STATIC_RUNTIME_WORKAROUND TRUE )
endif ( )
endif ( )
# On versions < 1.35, remove the System library from the considered list
# since it wasn't added until 1.35.
2023-11-01 06:20:22 +08:00
if ( Boost_VERSION_STRING AND Boost_FIND_COMPONENTS )
if ( Boost_VERSION_STRING VERSION_LESS 1.35.0 )
list ( REMOVE_ITEM Boost_FIND_COMPONENTS system )
endif ( )
2023-11-01 06:11:15 +08:00
endif ( )
# Additional components may be required via component dependencies.
# Add any missing components to the list.
_Boost_MISSING_DEPENDENCIES ( Boost_FIND_COMPONENTS _Boost_EXTRA_FIND_COMPONENTS )
# If thread is required, get the thread libs as a dependency
if ( "thread" IN_LIST Boost_FIND_COMPONENTS )
if ( Boost_FIND_QUIETLY )
set ( _Boost_find_quiet QUIET )
else ( )
set ( _Boost_find_quiet "" )
endif ( )
find_package ( Threads ${ _Boost_find_quiet } )
unset ( _Boost_find_quiet )
endif ( )
# If the user changed any of our control inputs flush previous results.
if ( _Boost_CHANGE_LIBDIR_DEBUG OR _Boost_CHANGE_LIBDIR_RELEASE OR _Boost_CHANGE_LIBNAME )
foreach ( COMPONENT ${ _Boost_COMPONENTS_SEARCHED } )
string ( TOUPPER ${ COMPONENT } UPPERCOMPONENT )
foreach ( c DEBUG RELEASE )
set ( _var Boost_ ${ UPPERCOMPONENT } _LIBRARY_ ${ c } )
unset ( ${ _var } CACHE )
set ( ${ _var } "${_var}-NOTFOUND" )
endforeach ( )
endforeach ( )
set ( _Boost_COMPONENTS_SEARCHED "" )
endif ( )
foreach ( COMPONENT ${ Boost_FIND_COMPONENTS } )
string ( TOUPPER ${ COMPONENT } UPPERCOMPONENT )
set ( _boost_docstring_release "Boost ${COMPONENT} library (release)" )
set ( _boost_docstring_debug "Boost ${COMPONENT} library (debug)" )
# Compute component-specific hints.
set ( _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "" )
if ( ${ COMPONENT } STREQUAL "mpi" OR ${ COMPONENT } STREQUAL "mpi_python" OR
$ { C O M P O N E N T } S T R E Q U A L " g r a p h _ p a r a l l e l " )
foreach ( lib ${ MPI_CXX_LIBRARIES } ${ MPI_C_LIBRARIES } )
if ( IS_ABSOLUTE "${lib}" )
get_filename_component ( libdir "${lib}" PATH )
string ( REPLACE "\\" "/" libdir "${libdir}" )
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${ libdir } )
endif ( )
endforeach ( )
endif ( )
# Handle Python version suffixes
unset ( COMPONENT_PYTHON_VERSION_MAJOR )
unset ( COMPONENT_PYTHON_VERSION_MINOR )
if ( ${ COMPONENT } MATCHES "^(python|mpi_python|numpy)([0-9])\$" )
set ( COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}" )
set ( COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}" )
elseif ( ${ COMPONENT } MATCHES "^(python|mpi_python|numpy)([0-9])\\.?([0-9])\$" )
set ( COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}" )
set ( COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}" )
set ( COMPONENT_PYTHON_VERSION_MINOR "${CMAKE_MATCH_3}" )
endif ( )
unset ( _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME )
if ( COMPONENT_PYTHON_VERSION_MINOR )
# Boost >= 1.67
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}" )
# Debian/Ubuntu (Some versions omit the 2 and/or 3 from the suffix)
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}" )
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}" )
# Gentoo
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}.${COMPONENT_PYTHON_VERSION_MINOR}" )
# RPMs
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}" )
endif ( )
if ( COMPONENT_PYTHON_VERSION_MAJOR AND NOT COMPONENT_PYTHON_VERSION_MINOR )
# Boost < 1.67
list ( APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}" )
endif ( )
# Consolidate and report component-specific hints.
if ( _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME )
list ( REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" C o m p o n e n t - s p e c i f i c l i b r a r y s e a r c h n a m e s f o r $ { C O M P O N E N T _ N A M E } : $ { _ B o o s t _ F I N D _ L I B R A R Y _ H I N T S _ F O R _ C O M P O N E N T _ N A M E } " )
2023-11-01 06:11:15 +08:00
endif ( )
if ( _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT )
list ( REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" C o m p o n e n t - s p e c i f i c l i b r a r y s e a r c h p a t h s f o r $ { C O M P O N E N T } : $ { _ B o o s t _ F I N D _ L I B R A R Y _ H I N T S _ F O R _ C O M P O N E N T } " )
2023-11-01 06:11:15 +08:00
endif ( )
#
# Find headers
#
_Boost_COMPONENT_HEADERS ( "${COMPONENT}" Boost_ ${ UPPERCOMPONENT } _HEADER_NAME )
# Look for a standard boost header file.
if ( Boost_ ${ UPPERCOMPONENT } _HEADER_NAME )
if ( EXISTS "${Boost_INCLUDE_DIR}/${Boost_${UPPERCOMPONENT}_HEADER_NAME}" )
set ( Boost_ ${ UPPERCOMPONENT } _HEADER ON )
else ( )
set ( Boost_ ${ UPPERCOMPONENT } _HEADER OFF )
endif ( )
else ( )
set ( Boost_ ${ UPPERCOMPONENT } _HEADER ON )
2023-11-01 06:20:22 +08:00
message ( WARNING "No header defined for ${COMPONENT}; skipping header check "
" ( n o t e : h e a d e r - o n l y l i b r a r i e s h a v e n o d e s i g n a t e d c o m p o n e n t ) " )
2023-11-01 06:11:15 +08:00
endif ( )
#
# Find RELEASE libraries
#
unset ( _boost_RELEASE_NAMES )
foreach ( component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT )
foreach ( compiler IN LISTS _boost_COMPILER )
list ( APPEND _boost_RELEASE_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G } )
endforeach ( )
list ( APPEND _boost_RELEASE_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ A B I _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } )
if ( _boost_STATIC_RUNTIME_WORKAROUND )
set ( _boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}" )
foreach ( compiler IN LISTS _boost_COMPILER )
list ( APPEND _boost_RELEASE_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } )
endforeach ( )
list ( APPEND _boost_RELEASE_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ R E L E A S E _ S T A T I C _ A B I _ T A G } )
endif ( )
endforeach ( )
if ( Boost_THREADAPI AND ${ COMPONENT } STREQUAL "thread" )
_Boost_PREPEND_LIST_WITH_THREADAPI ( _boost_RELEASE_NAMES ${ _boost_RELEASE_NAMES } )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" S e a r c h i n g f o r $ { U P P E R C O M P O N E N T } _ L I B R A R Y _ R E L E A S E : $ { _ b o o s t _ R E L E A S E _ N A M E S } " )
2023-11-01 06:11:15 +08:00
# if Boost_LIBRARY_DIR_RELEASE is not defined,
# but Boost_LIBRARY_DIR_DEBUG is, look there first for RELEASE libs
if ( NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR_DEBUG )
list ( INSERT _boost_LIBRARY_SEARCH_DIRS_RELEASE 0 ${ Boost_LIBRARY_DIR_DEBUG } )
endif ( )
# Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
string ( REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_RELEASE}" )
if ( Boost_USE_RELEASE_LIBS )
_Boost_FIND_LIBRARY ( Boost_ ${ UPPERCOMPONENT } _LIBRARY_RELEASE RELEASE
N A M E S $ { _ b o o s t _ R E L E A S E _ N A M E S }
H I N T S $ { _ b o o s t _ L I B R A R Y _ S E A R C H _ D I R S _ t m p }
N A M E S _ P E R _ D I R
D O C " $ { _ b o o s t _ d o c s t r i n g _ r e l e a s e } "
)
endif ( )
#
# Find DEBUG libraries
#
unset ( _boost_DEBUG_NAMES )
foreach ( component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT )
foreach ( compiler IN LISTS _boost_COMPILER )
list ( APPEND _boost_DEBUG_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G } )
endforeach ( )
list ( APPEND _boost_DEBUG_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ A B I _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } )
if ( _boost_STATIC_RUNTIME_WORKAROUND )
set ( _boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}" )
foreach ( compiler IN LISTS _boost_COMPILER )
list ( APPEND _boost_DEBUG_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { c o m p i l e r } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } )
endforeach ( )
list ( APPEND _boost_DEBUG_NAMES
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G } - $ { B o o s t _ L I B _ V E R S I O N }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } $ { _ b o o s t _ A R C H I T E C T U R E _ T A G }
$ { B o o s t _ L I B _ P R E F I X } $ { B o o s t _ N A M E S P A C E } _ $ { c o m p o n e n t } $ { _ b o o s t _ M U L T I T H R E A D E D } $ { _ b o o s t _ D E B U G _ S T A T I C _ A B I _ T A G } )
endif ( )
endforeach ( )
if ( Boost_THREADAPI AND ${ COMPONENT } STREQUAL "thread" )
_Boost_PREPEND_LIST_WITH_THREADAPI ( _boost_DEBUG_NAMES ${ _boost_DEBUG_NAMES } )
endif ( )
2023-11-01 06:20:22 +08:00
_Boost_DEBUG_PRINT ( "${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
" S e a r c h i n g f o r $ { U P P E R C O M P O N E N T } _ L I B R A R Y _ D E B U G : $ { _ b o o s t _ D E B U G _ N A M E S } " )
2023-11-01 06:11:15 +08:00
# if Boost_LIBRARY_DIR_DEBUG is not defined,
# but Boost_LIBRARY_DIR_RELEASE is, look there first for DEBUG libs
if ( NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR_RELEASE )
list ( INSERT _boost_LIBRARY_SEARCH_DIRS_DEBUG 0 ${ Boost_LIBRARY_DIR_RELEASE } )
endif ( )
# Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
string ( REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_DEBUG}" )
if ( Boost_USE_DEBUG_LIBS )
_Boost_FIND_LIBRARY ( Boost_ ${ UPPERCOMPONENT } _LIBRARY_DEBUG DEBUG
N A M E S $ { _ b o o s t _ D E B U G _ N A M E S }
H I N T S $ { _ b o o s t _ L I B R A R Y _ S E A R C H _ D I R S _ t m p }
N A M E S _ P E R _ D I R
D O C " $ { _ b o o s t _ d o c s t r i n g _ d e b u g } "
)
endif ( )
if ( Boost_REALPATH )
_Boost_SWAP_WITH_REALPATH ( Boost_ ${ UPPERCOMPONENT } _LIBRARY_RELEASE "${_boost_docstring_release}" )
_Boost_SWAP_WITH_REALPATH ( Boost_ ${ UPPERCOMPONENT } _LIBRARY_DEBUG "${_boost_docstring_debug}" )
endif ( )
_Boost_ADJUST_LIB_VARS ( ${ UPPERCOMPONENT } )
# Check if component requires some compiler features
_Boost_COMPILER_FEATURES ( ${ COMPONENT } _Boost_ ${ UPPERCOMPONENT } _COMPILER_FEATURES )
endforeach ( )
# Restore the original find library ordering
if ( Boost_USE_STATIC_LIBS )
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES } )
endif ( )
# ------------------------------------------------------------------------
# End finding boost libraries
# ------------------------------------------------------------------------
set ( Boost_INCLUDE_DIRS ${ Boost_INCLUDE_DIR } )
set ( Boost_LIBRARY_DIRS )
if ( Boost_LIBRARY_DIR_RELEASE )
list ( APPEND Boost_LIBRARY_DIRS ${ Boost_LIBRARY_DIR_RELEASE } )
endif ( )
if ( Boost_LIBRARY_DIR_DEBUG )
list ( APPEND Boost_LIBRARY_DIRS ${ Boost_LIBRARY_DIR_DEBUG } )
endif ( )
if ( Boost_LIBRARY_DIRS )
list ( REMOVE_DUPLICATES Boost_LIBRARY_DIRS )
endif ( )
2023-11-01 06:20:22 +08:00
# ------------------------------------------------------------------------
# Call FPHSA helper, see https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html
# ------------------------------------------------------------------------
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
# Define aliases as needed by the component handler in the FPHSA helper below
foreach ( _comp IN LISTS Boost_FIND_COMPONENTS )
string ( TOUPPER ${ _comp } _uppercomp )
if ( DEFINED Boost_ ${ _uppercomp } _FOUND )
set ( Boost_ ${ _comp } _FOUND ${ Boost_${_uppercomp } _FOUND} )
2023-11-01 06:11:15 +08:00
endif ( )
2023-11-01 06:20:22 +08:00
endforeach ( )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
find_package_handle_standard_args ( Boost
R E Q U I R E D _ V A R S B o o s t _ I N C L U D E _ D I R
V E R S I O N _ V A R B o o s t _ V E R S I O N _ S T R I N G
H A N D L E _ C O M P O N E N T S )
2023-11-01 06:11:15 +08:00
2023-11-01 06:20:22 +08:00
if ( Boost_FOUND )
if ( NOT Boost_LIBRARY_DIRS )
2023-11-01 06:11:15 +08:00
# Compatibility Code for backwards compatibility with CMake
# 2.4's FindBoost module.
# Look for the boost library path.
# Note that the user may not have installed any libraries
# so it is quite possible the Boost_LIBRARY_DIRS may not exist.
set ( _boost_LIB_DIR ${ Boost_INCLUDE_DIR } )
if ( "${_boost_LIB_DIR}" MATCHES "boost-[0-9]+" )
get_filename_component ( _boost_LIB_DIR ${ _boost_LIB_DIR } PATH )
endif ( )
if ( "${_boost_LIB_DIR}" MATCHES "/include$" )
# Strip off the trailing "/include" in the path.
get_filename_component ( _boost_LIB_DIR ${ _boost_LIB_DIR } PATH )
endif ( )
if ( EXISTS "${_boost_LIB_DIR}/lib" )
string ( APPEND _boost_LIB_DIR /lib )
elseif ( EXISTS "${_boost_LIB_DIR}/stage/lib" )
string ( APPEND _boost_LIB_DIR "/stage/lib" )
else ( )
set ( _boost_LIB_DIR "" )
endif ( )
if ( _boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}" )
set ( Boost_LIBRARY_DIRS ${ _boost_LIB_DIR } )
endif ( )
endif ( )
else ( )
# Boost headers were not found so no components were found.
foreach ( COMPONENT ${ Boost_FIND_COMPONENTS } )
string ( TOUPPER ${ COMPONENT } UPPERCOMPONENT )
set ( Boost_ ${ UPPERCOMPONENT } _FOUND 0 )
endforeach ( )
endif ( )
# ------------------------------------------------------------------------
# Add imported targets
# ------------------------------------------------------------------------
if ( Boost_FOUND )
2023-11-01 06:20:22 +08:00
# The builtin CMake package in Boost 1.70+ introduces a new name
# for the header-only lib, let's provide the same UI in module mode
if ( NOT TARGET Boost::headers )
add_library ( Boost::headers INTERFACE IMPORTED )
2023-11-01 06:11:15 +08:00
if ( Boost_INCLUDE_DIRS )
2023-11-01 06:20:22 +08:00
set_target_properties ( Boost::headers PROPERTIES
2023-11-01 06:11:15 +08:00
I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S " $ { B o o s t _ I N C L U D E _ D I R S } " )
endif ( )
endif ( )
2023-11-01 06:20:22 +08:00
# Define the old target name for header-only libraries for backwards
# compat.
if ( NOT TARGET Boost::boost )
add_library ( Boost::boost INTERFACE IMPORTED )
set_target_properties ( Boost::boost
P R O P E R T I E S I N T E R F A C E _ L I N K _ L I B R A R I E S B o o s t : : h e a d e r s )
endif ( )
2023-11-01 06:11:15 +08:00
foreach ( COMPONENT ${ Boost_FIND_COMPONENTS } )
if ( _Boost_IMPORTED_TARGETS AND NOT TARGET Boost:: ${ COMPONENT } )
string ( TOUPPER ${ COMPONENT } UPPERCOMPONENT )
if ( Boost_ ${ UPPERCOMPONENT } _FOUND )
if ( Boost_USE_STATIC_LIBS )
add_library ( Boost:: ${ COMPONENT } STATIC IMPORTED )
else ( )
# Even if Boost_USE_STATIC_LIBS is OFF, we might have static
# libraries as a result.
add_library ( Boost:: ${ COMPONENT } UNKNOWN IMPORTED )
endif ( )
if ( Boost_INCLUDE_DIRS )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S " $ { B o o s t _ I N C L U D E _ D I R S } " )
endif ( )
if ( EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY}" )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S " C X X "
I M P O R T E D _ L O C A T I O N " $ { B o o s t _ $ { U P P E R C O M P O N E N T } _ L I B R A R Y } " )
endif ( )
if ( EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}" )
set_property ( TARGET Boost:: ${ COMPONENT } APPEND PROPERTY
I M P O R T E D _ C O N F I G U R A T I O N S R E L E A S E )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ R E L E A S E " C X X "
I M P O R T E D _ L O C A T I O N _ R E L E A S E " $ { B o o s t _ $ { U P P E R C O M P O N E N T } _ L I B R A R Y _ R E L E A S E } " )
endif ( )
if ( EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}" )
set_property ( TARGET Boost:: ${ COMPONENT } APPEND PROPERTY
I M P O R T E D _ C O N F I G U R A T I O N S D E B U G )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ D E B U G " C X X "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { B o o s t _ $ { U P P E R C O M P O N E N T } _ L I B R A R Y _ D E B U G } " )
endif ( )
if ( _Boost_ ${ UPPERCOMPONENT } _DEPENDENCIES )
unset ( _Boost_ ${ UPPERCOMPONENT } _TARGET_DEPENDENCIES )
foreach ( dep ${ _Boost_${UPPERCOMPONENT } _DEPENDENCIES} )
list ( APPEND _Boost_ ${ UPPERCOMPONENT } _TARGET_DEPENDENCIES Boost:: ${ dep } )
endforeach ( )
if ( COMPONENT STREQUAL "thread" )
list ( APPEND _Boost_ ${ UPPERCOMPONENT } _TARGET_DEPENDENCIES Threads::Threads )
endif ( )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I N T E R F A C E _ L I N K _ L I B R A R I E S " $ { _ B o o s t _ $ { U P P E R C O M P O N E N T } _ T A R G E T _ D E P E N D E N C I E S } " )
endif ( )
if ( _Boost_ ${ UPPERCOMPONENT } _COMPILER_FEATURES )
set_target_properties ( Boost:: ${ COMPONENT } PROPERTIES
I N T E R F A C E _ C O M P I L E _ F E A T U R E S " $ { _ B o o s t _ $ { U P P E R C O M P O N E N T } _ C O M P I L E R _ F E A T U R E S } " )
endif ( )
endif ( )
endif ( )
endforeach ( )
2023-11-01 06:34:31 +08:00
# Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
# will only contain any interface definitions on WIN32, but is created
# on all platforms to keep end user code free from platform dependent
# code. Also provide convenience targets to disable autolinking and
# enable dynamic linking.
if ( NOT TARGET Boost::diagnostic_definitions )
add_library ( Boost::diagnostic_definitions INTERFACE IMPORTED )
add_library ( Boost::disable_autolinking INTERFACE IMPORTED )
add_library ( Boost::dynamic_linking INTERFACE IMPORTED )
set_target_properties ( Boost::dynamic_linking PROPERTIES
I N T E R F A C E _ C O M P I L E _ D E F I N I T I O N S " B O O S T _ A L L _ D Y N _ L I N K " )
endif ( )
if ( WIN32 )
# In windows, automatic linking is performed, so you do not have
# to specify the libraries. If you are linking to a dynamic
# runtime, then you can choose to link to either a static or a
# dynamic Boost library, the default is to do a static link. You
# can alter this for a specific library "whatever" by defining
# BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
# linked dynamically. Alternatively you can force all Boost
# libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
# This feature can be disabled for Boost library "whatever" by
# defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
# BOOST_ALL_NO_LIB.
# If you want to observe which libraries are being linked against
# then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
# code to emit a #pragma message each time a library is selected
# for linking.
set ( Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC" )
set_target_properties ( Boost::diagnostic_definitions PROPERTIES
I N T E R F A C E _ C O M P I L E _ D E F I N I T I O N S " B O O S T _ L I B _ D I A G N O S T I C " )
set_target_properties ( Boost::disable_autolinking PROPERTIES
I N T E R F A C E _ C O M P I L E _ D E F I N I T I O N S " B O O S T _ A L L _ N O _ L I B " )
endif ( )
2023-11-01 06:11:15 +08:00
endif ( )
# ------------------------------------------------------------------------
2023-11-01 06:20:22 +08:00
# Finalize
2023-11-01 06:11:15 +08:00
# ------------------------------------------------------------------------
2023-11-01 06:20:22 +08:00
# Report Boost_LIBRARIES
2023-11-01 06:11:15 +08:00
set ( Boost_LIBRARIES "" )
2023-11-01 06:20:22 +08:00
foreach ( _comp IN LISTS Boost_FIND_COMPONENTS )
string ( TOUPPER ${ _comp } _uppercomp )
if ( Boost_ ${ _uppercomp } _FOUND )
list ( APPEND Boost_LIBRARIES ${ Boost_${_uppercomp } _LIBRARY} )
if ( _comp STREQUAL "thread" )
list ( APPEND Boost_LIBRARIES ${ CMAKE_THREAD_LIBS_INIT } )
2023-11-01 06:11:15 +08:00
endif ( )
endif ( )
2023-11-01 06:20:22 +08:00
endforeach ( )
2023-11-01 06:11:15 +08:00
# Configure display of cache entries in GUI.
foreach ( v BOOSTROOT BOOST_ROOT ${ _Boost_VARS_INC } ${ _Boost_VARS_LIB } )
get_property ( _type CACHE ${ v } PROPERTY TYPE )
if ( _type )
set_property ( CACHE ${ v } PROPERTY ADVANCED 1 )
if ( "x${_type}" STREQUAL "xUNINITIALIZED" )
if ( "x${v}" STREQUAL "xBoost_ADDITIONAL_VERSIONS" )
set_property ( CACHE ${ v } PROPERTY TYPE STRING )
else ( )
set_property ( CACHE ${ v } PROPERTY TYPE PATH )
endif ( )
endif ( )
endif ( )
endforeach ( )
# Record last used values of input variables so we can
# detect on the next run if the user changed them.
foreach ( v
$ { _ B o o s t _ V A R S _ I N C } $ { _ B o o s t _ V A R S _ L I B }
$ { _ B o o s t _ V A R S _ D I R } $ { _ B o o s t _ V A R S _ N A M E }
)
if ( DEFINED ${ v } )
set ( _ ${ v } _LAST "${${v}}" CACHE INTERNAL "Last used ${v} value." )
else ( )
unset ( _ ${ v } _LAST CACHE )
endif ( )
endforeach ( )
# Maintain a persistent list of components requested anywhere since
# the last flush.
set ( _Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}" )
list ( APPEND _Boost_COMPONENTS_SEARCHED ${ Boost_FIND_COMPONENTS } )
list ( REMOVE_DUPLICATES _Boost_COMPONENTS_SEARCHED )
list ( SORT _Boost_COMPONENTS_SEARCHED )
set ( _Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}"
C A C H E I N T E R N A L " C o m p o n e n t s r e q u e s t e d f o r t h i s b u i l d t r e e . " )
# Restore project's policies
cmake_policy ( POP )