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

libs/filesystem/build/Jamfile.v2

# Boost Filesystem Library Build Jamfile

# (C) Copyright Beman Dawes 2002-2006
# (C) Copyright Andrey Semashev 2020
# Distributed under the Boost Software License, Version 1.0.
# See www.boost.org/LICENSE_1_0.txt

# See library home page at http://www.boost.org/libs/filesystem

import project ;
import configure ;

lib bcrypt ;
lib advapi32 ;
lib coredll ;
explicit bcrypt advapi32 coredll ;

# The rule checks we're building for Windows and selects crypto API to be used
rule select-windows-crypto-api ( properties * )
{
    local result ;

    if <target-os>windows in $(properties) || <target-os>cygwin in $(properties)
    {
        if [ configure.builds ../config//has_bcrypt : $(properties) : "has BCrypt API" ]
        {
            result = <define>BOOST_FILESYSTEM_HAS_BCRYPT <library>bcrypt ;
        }
        else
        {
            result = <define>BOOST_FILESYSTEM_HAS_WINCRYPT ;
            if [ configure.builds ../config//is_windows_ce : $(properties) : "is Windows CE" ]
            {
                result += <library>coredll ;
            }
            else
            {
                result += <library>advapi32 ;
            }
        }
    }

    #ECHO Result: $(result) ;
    return $(result) ;
}

project boost/filesystem
    : requirements
      <host-os>hpux,<toolset>gcc:<define>_INCLUDE_STDC__SOURCE_199901
      [ check-target-builds ../config//has_stat_st_mtim "has stat::st_mtim" : <define>BOOST_FILESYSTEM_HAS_STAT_ST_MTIM ]
      [ check-target-builds ../config//has_stat_st_mtimensec "has stat::st_mtimensec" : <define>BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC ]
      [ check-target-builds ../config//has_stat_st_mtimespec "has stat::st_mtimespec" : <define>BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC ]
      <conditional>@select-windows-crypto-api
    : source-location ../src
    : usage-requirements # pass these requirement to dependents (i.e. users)
      <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
      <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
    ;

SOURCES =
    codecvt_error_category
    exception
    directory
    operations
    path
    path_traits
    portability
    unique_path
    utf8_codecvt_facet
    windows_file_codecvt
    ;

lib boost_filesystem
    : $(SOURCES).cpp
    : <define>BOOST_FILESYSTEM_SOURCE
      <include>../src
      <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
      <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
    :
    :
    ;

boost-install boost_filesystem ;