Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of boost. Click here for the latest Boost documentation.

libs/regex/build/Jamfile

# copyright John Maddock 2003

subproject libs/regex/build ;
# bring in the rules for testing
import testing ;

#
# ICU configuration:
#
rule check-icu-config ( )
{
   if ! $(gICU_CONFIG_CHECKED)
   {
      if $(ICU_PATH)
      {
         dir += $(ICU_PATH) ;
      }
      
      if [ GLOB $(dir)$(SLASH)include$(SLASH)unicode : utypes.h ]
      {
         ECHO Building Boost.Regex with Unicode/ICU support enabled ;
         ECHO Using ICU in $(ICU_PATH:J=" ")$(SLASH)include ;
         gHAS_ICU = true ;
         
         # try and find ICU libraries, look for NT versions first:
         if $(ICU_LINK)
         {
            gICU_LIBS += <linkflags>$(ICU_LINK) ;
         }
         else if [ GLOB $(dir)$(SLASH)lib : icuuc.* ]
         {
            gICU_LIBS += <find-library>icuuc ;
            if ($(ICU_PATH) != /usr) && ($(ICU_PATH) != /usr/local)
            {
               gICU_LIBS += <library-path>$(ICU_PATH)/lib ;
            }
         }
         else if [ GLOB $(dir)$(SLASH)lib : libicuuc.* ]
         {
            gICU_LIBS += <find-library>icuuc ;
            if ($(ICU_PATH) != /usr) && ($(ICU_PATH) != /usr/local)
            {
               gICU_LIBS += <library-path>$(ICU_PATH)/lib ;
            }
         }
         else if [ GLOB $(ICU_PATH)/lib : cygicuuc.dll ]
         {
            gICU_LIBS += <library-file>$(ICU_PATH)/lib/cygicuuc.dll ;
         }
         else if [ GLOB $(ICU_PATH)/lib : cygicuuc32.dll ]
         {
            gICU_LIBS += <library-file>$(ICU_PATH)/lib/cygicuuc32.dll ;
         }
         else if [ GLOB /usr/local/lib : cygicuuc.dll ]
         {
            gICU_LIBS += <library-file>/usr/local/lib/cygicuuc.dll ;
         }
         else
         {
            ECHO WARNING: ICU shared common library not found in path. ;
            ECHO HINT:    If the regex library fails to link then try again ;
            ECHO          with the environment variable ICU_LINK set to contain ;
            ECHO          the linker options required to link to ICU. ;
            ECHO          Defaulting to look for libicuuc ... ;
            gICU_LIBS += <find-library>icuuc ;
         }
         
         if $(ICU_LINK)
         {
            # gICU_LIBS += <linkflags>$(ICU_LINK) ;
         }
         else if [ GLOB $(dir)$(SLASH)lib : icuin.* ]
         {
            gICU_LIBS += <find-library>icuin ;
            if ($(ICU_PATH) != /usr) && ($(ICU_PATH) != /usr/local)
            {
               gICU_LIBS += <library-path>$(ICU_PATH)/lib ;
            }
         }
         else if [ GLOB $(dir)$(SLASH)lib : libicui18n.* ]
         {
            gICU_LIBS += <find-library>icui18n ;
            if ($(ICU_PATH) != /usr) && ($(ICU_PATH) != /usr/local)
            {
               gICU_LIBS += <library-path>$(ICU_PATH)/lib ;
            }
         }
         else if [ GLOB $(ICU_PATH)/lib : cygicuin.dll ]
         {
            gICU_LIBS += <library-file>$(ICU_PATH)/lib/cygicuin.dll ;
         }
         else if [ GLOB $(ICU_PATH)/lib : cygicuin32.dll ]
         {
            gICU_LIBS += <library-file>$(ICU_PATH)/lib/cygicuin32.dll ;
         }
         else if [ GLOB /usr/local/lib : cygicuin.dll ]
         {
            gICU_LIBS += <library-file>/usr/local/lib/cygicuin.dll ;
         }
         else
         {
            ECHO ICU shared i18n library not found. ;
            ECHO HINT: Set the environment variable ICU_LINK to contain ;
            ECHO       the linker options required to link to ICU. ;
            
            ECHO WARNING: ICU shared i18n library not found in path. ;
            ECHO HINT:    If the regex library fails to link then try again ;
            ECHO          with the environment variable ICU_LINK set to contain ;
            ECHO          the linker options required to link to ICU. ;
            ECHO          Defaulting to look for libicui18n ... ;
            gICU_LIBS += <find-library>icui18n ;
         }
      }
      else
      {
         if $(HAVE_ICU)
         {
            gHAS_ICU = true ;
            gICU_CONFIG_CHECKED = true ;
            if $(ICU_LINK)
            {
               gICU_LIBS += <linkflags>$(ICU_LINK) ;
            }
            else
            {
               gICU_LIBS += <find-library>icui18n ;
               gICU_LIBS += <find-library>icuuc ;
            }
            ECHO Building Boost.Regex with Unicode/ICU support enabled ;
            ECHO ICU must be installed in your compilers search paths for this ;
            ECHO "option to work: define ICU_PATH to point to ICU's true location" ;
            ECHO "if it's installed elsewhere" ;
         }
         else
         {
            ECHO Building Boost.Regex with the optional Unicode/ICU support disabled. ;
            ECHO Please refer to the Boost.Regex documentation for more information ;
            ECHO (and if you don't know what ICU is then you probably don't need it). ;
            if $(ICU_PATH)
            {
               ECHO Couldn't find utypes.h in $(ICU_PATH:J=" ")$(SLASH)include$(SLASH)unicode ;
            }
         }
      }
      gICU_CONFIG_CHECKED = true ;
   }
    if $(gHAS_ICU)
    {
        return true ;
    }
}

if [ check-icu-config ]
{
   BOOST_REGEX_ICU_OPTS = "<define>BOOST_HAS_ICU=1" ;
   if $(gICU_LIBS)
   {
      BOOST_REGEX_ICU_OPTS += $(gICU_LIBS) ;
      # this one is required for VC++ :
      BOOST_REGEX_ICU_TEST_OPTS = "<native-wchar_t>off" ;
   }
   if $(ICU_PATH)
   {
      if ($(ICU_PATH) != /usr) && ($(ICU_PATH) != /usr/local)
      {
         BOOST_REGEX_ICU_OPTS += "<sysinclude>$(ICU_PATH)/include" ;
      }
      #BOOST_REGEX_ICU_OPTS += "<library-path>$(ICU_PATH)/lib" ;
   }
   # ECHO "BOOST_REGEX_ICU_OPTS =" $(BOOST_REGEX_ICU_OPTS) ;
}

#
# this template defines the options common to
# all regex builds and tests:
#
template regex-options
   : # sources
   : # requirements
     <debug><define>BOOST_REGEX_CONFIG_INFO=1
     <sysinclude>$(BOOST_ROOT)
     # <native-wchar_t>on
     # como requires this:
     <como-4_3_3-vc7_1><*><define>BOOST_REGEX_NO_W32=1
     <como-4_3_3-vc7_1><*><define>BOOST_SP_DISABLE_THREADS=1
     $(BOOST_REGEX_ICU_OPTS)
   ;
template regex-test-options
   : # sources
   : # requirements
     $(BOOST_REGEX_ICU_TEST_OPTS)
   ;

#
# this template defines the options common to
# all regex dll builds and tests:
#
template regex-dll-options
   : <template>regex-options # sources
   : # requirements
     <define>BOOST_REGEX_DYN_LINK=1      
     <runtime-link>dynamic
   ;

#
# this template defines extra settings required to work 
# around STLPort defects when used with msvc 6:
#
template msvc-stlport-tricky
   : # sources
   : <msvc-stlport><*><runtime-build>release
     <define>BOOST_ALL_NO_LIB=1
   ;

SOURCES = 
   c_regex_traits.cpp
   cpp_regex_traits.cpp
   cregex.cpp
   fileiter.cpp
   icu.cpp
   instances.cpp
   posix_api.cpp
   regex.cpp
   regex_debug.cpp
   regex_raw_buffer.cpp
   regex_traits_defaults.cpp
   static_mutex.cpp
   w32_regex_traits.cpp
   wc_regex_traits.cpp
   wide_posix_api.cpp
   winstances.cpp 
   usinstances.cpp ;
   
       
lib boost_regex : ../src/$(SOURCES) <template>regex-options
    : 
        common-variant-tag
    : 
        debug release
    ;


dll boost_regex : ../src/$(SOURCES) <template>regex-dll-options
    : 
        common-variant-tag
    : 
        debug release
    ;
    
stage stage/lib : <lib>boost_regex <dll>boost_regex
    :
        <locate>$(BOOST_ROOT)
        common-variant-tag
        <target>stage
        <target>all
    :
        debug release
    ;

install regex lib
    : <dll>boost_regex <lib>boost_regex
    ;