# file : libbutl/buildfile # copyright : Copyright (c) 2014-2019 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file # This library was modularized using the Modules TS semantics (with support # for dual, module/header consumption) which was subsequently partially # dismantled. We, however, kept some of the changes in anticipation that they # would be useful when attempting to modularize using the merged modules # semantics. Specifically, there are currently headers with both .mxx and .hxx # extensions and the code is littered if the #if __cpp_[lib_]modules_ts # blocks. # # @@ If/when going back to using mxx{}, make sure to cleanup explicit .hxx. # lib{butl}: {hxx ixx txx cxx}{** -uuid-* +uuid-io -win32-utility} \ hxx{**.hxx -uuid-*.hxx +uuid-io.hxx -win32-utility.hxx \ -version.hxx} hxx{version} windows = ($cxx.target.class == 'windows') # Exclude these from compilation on non-Windows targets. # lib{butl}: hxx{win32-utility.hxx} cxx{win32-utility}: include = $windows # Our C-files are included into sha256.cxx (sha256c.c) and timestamp.cxx # (strptime.c timelocal.h timelocal.c), so treat them as files exclude from # the compilation. # lib{butl}: file{*.c *.h} # Platform-specific UUID implementations. # lib{butl}: cxx{uuid-linux}: include = ($cxx.target.class == 'linux') lib{butl}: cxx{uuid-macos}: include = ($cxx.target.class == 'macos') lib{butl}: cxx{uuid-windows}: include = $windows lib{butl}: cxx{uuid-freebsd}: include = ($cxx.target.system == 'freebsd') if ($cxx.target.class == 'linux') cxx.libs += -ldl elif ($cxx.target.class == 'macos') cxx.libs += -framework CoreFoundation elif ($windows) cxx.libs += ($cxx.target.system == 'mingw32' ? -lrpcrt4 : rpcrt4.lib) # Include the generated version header into the distribution (so that we don't # pick up an installed one) and don't remove it when cleaning in src (so that # clean results in a state identical to distributed). # hxx{version.hxx}: in{version} $src_root/manifest hxx{version.hxx}: { dist = true clean = ($src_root != $out_root) } # Build options. # cxx.poptions =+ "-I$out_root" "-I$src_root" obja{*} bmia{*}: cxx.poptions += -DLIBBUTL_STATIC_BUILD objs{*} bmis{*}: cxx.poptions += -DLIBBUTL_SHARED_BUILD # Additional system libraries. # if $windows cxx.libs += ($cxx.target.system == 'mingw32' ? -limagehlp : imagehlp.lib) else cxx.libs += -lpthread # Export options. # lib{butl}: cxx.export.poptions = "-I$out_root" "-I$src_root" liba{butl}: cxx.export.poptions += -DLIBBUTL_STATIC libs{butl}: cxx.export.poptions += -DLIBBUTL_SHARED # For pre-releases use the complete version to make sure they cannot be used # in place of another pre-release or the final version. See the version module # for details on the version.* variable values. # if $version.pre_release lib{butl}: bin.lib.version = @"-$version.project_id" else lib{butl}: bin.lib.version = @"-$version.major.$version.minor" # Install into the libbutl/ subdirectory of, say, /usr/include/ # recreating subdirectories. # {hxx ixx txx}{*}: { install = include/libbutl/ install.subdirs = true }