# 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 with the `#if __cpp_[lib_]modules_ts` # blocks. Note that it's important for the auto-generated header support # that the default extension for hxx{} is .hxx. # # @@ If/when going back to using mxx{}, make sure to cleanup explicit .mxx. # lib{butl}: {hxx ixx txx cxx}{** -uuid-* +uuid-io -win32-utility -version} \ hxx{**.mxx} {hxx}{version} tclass = $cxx.target.class tsys = $cxx.target.system linux = ($tclass == 'linux') macos = ($tclass == 'macos') windows = ($tclass == 'windows') freebsd = ($tsys == 'freebsd') mingw = ($tsys == 'mingw32') # Exclude these from compilation on non-Windows targets. # lib{butl}: {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 = $linux lib{butl}: cxx{uuid-macos}: include = $macos lib{butl}: cxx{uuid-windows}: include = $windows lib{butl}: cxx{uuid-freebsd}: include = $freebsd if $linux cxx.libs += -ldl elif $macos cxx.libs += -framework CoreFoundation elif $windows cxx.libs += ($mingw ? -lrpcrt4 : rpcrt4.lib) elif $freebsd cxx.libs += -lexecinfo # 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}: in{version} $src_root/manifest hxx{version}: { 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 += ($mingw ? -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 }